sfc: Generalise packet hash lookup to support EF10 RX prefix
EF10 uses an entirely different RX prefix format from Falcon-arch. Extend struct efx_nic_type to describe this. [bwh: Also replace the magic numbers used for the Falcon-arch RX prefix] Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
64a27752dc
commit
43a3739d55
6 changed files with 28 additions and 13 deletions
|
|
@ -61,13 +61,12 @@ static inline u8 *efx_rx_buf_va(struct efx_rx_buffer *buf)
|
|||
return page_address(buf->page) + buf->page_offset;
|
||||
}
|
||||
|
||||
static inline u32 efx_rx_buf_hash(const u8 *eh)
|
||||
static inline u32 efx_rx_buf_hash(struct efx_nic *efx, const u8 *eh)
|
||||
{
|
||||
/* The ethernet header is always directly after any hash. */
|
||||
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) || NET_IP_ALIGN % 4 == 0
|
||||
return __le32_to_cpup((const __le32 *)(eh - 4));
|
||||
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
|
||||
return __le32_to_cpup((const __le32 *)(eh + efx->rx_packet_hash_offset));
|
||||
#else
|
||||
const u8 *data = eh - 4;
|
||||
const u8 *data = eh + efx->rx_packet_hash_offset;
|
||||
return (u32)data[0] |
|
||||
(u32)data[1] << 8 |
|
||||
(u32)data[2] << 16 |
|
||||
|
|
@ -439,7 +438,7 @@ efx_rx_packet_gro(struct efx_channel *channel, struct efx_rx_buffer *rx_buf,
|
|||
}
|
||||
|
||||
if (efx->net_dev->features & NETIF_F_RXHASH)
|
||||
skb->rxhash = efx_rx_buf_hash(eh);
|
||||
skb->rxhash = efx_rx_buf_hash(efx, eh);
|
||||
skb->ip_summed = ((rx_buf->flags & EFX_RX_PKT_CSUMMED) ?
|
||||
CHECKSUM_UNNECESSARY : CHECKSUM_NONE);
|
||||
|
||||
|
|
@ -568,8 +567,8 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
|
|||
*/
|
||||
prefetch(efx_rx_buf_va(rx_buf));
|
||||
|
||||
rx_buf->page_offset += efx->type->rx_buffer_hash_size;
|
||||
rx_buf->len -= efx->type->rx_buffer_hash_size;
|
||||
rx_buf->page_offset += efx->rx_prefix_size;
|
||||
rx_buf->len -= efx->rx_prefix_size;
|
||||
|
||||
if (n_frags > 1) {
|
||||
/* Release/sync DMA mapping for additional fragments.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue