bnxt_en: Add hardware GRO setup function for 57500 chips.
Add a more optimized hardware GRO function to setup the SKB on 57500 chips. Some workaround code is no longer needed on 57500 chips and the pseudo checksum is also calculated in hardware, so no need to do the software pseudo checksum in the driver. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ec4d8e7cf0
commit
67912c366d
@ -1359,6 +1359,35 @@ static struct sk_buff *bnxt_gro_func_5731x(struct bnxt_tpa_info *tpa_info,
|
||||
return skb;
|
||||
}
|
||||
|
||||
static struct sk_buff *bnxt_gro_func_5750x(struct bnxt_tpa_info *tpa_info,
|
||||
int payload_off, int tcp_ts,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
#ifdef CONFIG_INET
|
||||
u16 outer_ip_off, inner_ip_off, inner_mac_off;
|
||||
u32 hdr_info = tpa_info->hdr_info;
|
||||
int iphdr_len, nw_off;
|
||||
|
||||
inner_ip_off = BNXT_TPA_INNER_L3_OFF(hdr_info);
|
||||
inner_mac_off = BNXT_TPA_INNER_L2_OFF(hdr_info);
|
||||
outer_ip_off = BNXT_TPA_OUTER_L3_OFF(hdr_info);
|
||||
|
||||
nw_off = inner_ip_off - ETH_HLEN;
|
||||
skb_set_network_header(skb, nw_off);
|
||||
iphdr_len = (tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_IP_TYPE) ?
|
||||
sizeof(struct ipv6hdr) : sizeof(struct iphdr);
|
||||
skb_set_transport_header(skb, nw_off + iphdr_len);
|
||||
|
||||
if (inner_mac_off) { /* tunnel */
|
||||
__be16 proto = *((__be16 *)(skb->data + outer_ip_off -
|
||||
ETH_HLEN - 2));
|
||||
|
||||
bnxt_gro_tunnel(skb, proto);
|
||||
}
|
||||
#endif
|
||||
return skb;
|
||||
}
|
||||
|
||||
#define BNXT_IPV4_HDR_SIZE (sizeof(struct iphdr) + sizeof(struct tcphdr))
|
||||
#define BNXT_IPV6_HDR_SIZE (sizeof(struct ipv6hdr) + sizeof(struct tcphdr))
|
||||
|
||||
@ -10877,8 +10906,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
#endif
|
||||
if (BNXT_SUPPORTS_TPA(bp)) {
|
||||
bp->gro_func = bnxt_gro_func_5730x;
|
||||
if (BNXT_CHIP_P4_PLUS(bp))
|
||||
if (BNXT_CHIP_P4(bp))
|
||||
bp->gro_func = bnxt_gro_func_5731x;
|
||||
else if (BNXT_CHIP_P5(bp))
|
||||
bp->gro_func = bnxt_gro_func_5750x;
|
||||
}
|
||||
if (!BNXT_CHIP_P4_PLUS(bp))
|
||||
bp->flags |= BNXT_FLAG_DOUBLE_DB;
|
||||
|
Loading…
Reference in New Issue
Block a user