diff options
author | Dmitry Kravkov <dmitry@broadcom.com> | 2013-03-11 01:17:52 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-12 07:54:26 -0400 |
commit | 91226790bbe2dbfbba48dd79d49f2b38ef10eb97 (patch) | |
tree | 7192ce4c32dade780bb439f86ead0c221dac5e3b /drivers | |
parent | 82594f8f47bc1167d55776cfb599633ec4ac8e77 (diff) |
bnx2x: use FW 7.8.17
Update appropriate HSI files and adapt driver accordingly.
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 122 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h | 87 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | 235 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | 29 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h | 5 |
7 files changed, 338 insertions, 147 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index 33fbdfdc8e12..f865ad5002f6 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | |||
@@ -729,7 +729,7 @@ struct bnx2x_fastpath { | |||
729 | #define SKB_CS(skb) (*(u16 *)(skb_transport_header(skb) + \ | 729 | #define SKB_CS(skb) (*(u16 *)(skb_transport_header(skb) + \ |
730 | skb->csum_offset)) | 730 | skb->csum_offset)) |
731 | 731 | ||
732 | #define pbd_tcp_flags(skb) (ntohl(tcp_flag_word(tcp_hdr(skb)))>>16 & 0xff) | 732 | #define pbd_tcp_flags(tcp_hdr) (ntohl(tcp_flag_word(tcp_hdr))>>16 & 0xff) |
733 | 733 | ||
734 | #define XMIT_PLAIN 0 | 734 | #define XMIT_PLAIN 0 |
735 | #define XMIT_CSUM_V4 0x1 | 735 | #define XMIT_CSUM_V4 0x1 |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index cd74ee5be5f4..9f7a3793590b 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | |||
@@ -3086,11 +3086,11 @@ int bnx2x_poll(struct napi_struct *napi, int budget) | |||
3086 | * to ease the pain of our fellow microcode engineers | 3086 | * to ease the pain of our fellow microcode engineers |
3087 | * we use one mapping for both BDs | 3087 | * we use one mapping for both BDs |
3088 | */ | 3088 | */ |
3089 | static noinline u16 bnx2x_tx_split(struct bnx2x *bp, | 3089 | static u16 bnx2x_tx_split(struct bnx2x *bp, |
3090 | struct bnx2x_fp_txdata *txdata, | 3090 | struct bnx2x_fp_txdata *txdata, |
3091 | struct sw_tx_bd *tx_buf, | 3091 | struct sw_tx_bd *tx_buf, |
3092 | struct eth_tx_start_bd **tx_bd, u16 hlen, | 3092 | struct eth_tx_start_bd **tx_bd, u16 hlen, |
3093 | u16 bd_prod, int nbd) | 3093 | u16 bd_prod) |
3094 | { | 3094 | { |
3095 | struct eth_tx_start_bd *h_tx_bd = *tx_bd; | 3095 | struct eth_tx_start_bd *h_tx_bd = *tx_bd; |
3096 | struct eth_tx_bd *d_tx_bd; | 3096 | struct eth_tx_bd *d_tx_bd; |
@@ -3098,11 +3098,10 @@ static noinline u16 bnx2x_tx_split(struct bnx2x *bp, | |||
3098 | int old_len = le16_to_cpu(h_tx_bd->nbytes); | 3098 | int old_len = le16_to_cpu(h_tx_bd->nbytes); |
3099 | 3099 | ||
3100 | /* first fix first BD */ | 3100 | /* first fix first BD */ |
3101 | h_tx_bd->nbd = cpu_to_le16(nbd); | ||
3102 | h_tx_bd->nbytes = cpu_to_le16(hlen); | 3101 | h_tx_bd->nbytes = cpu_to_le16(hlen); |
3103 | 3102 | ||
3104 | DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d (%x:%x) nbd %d\n", | 3103 | DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d (%x:%x)\n", |
3105 | h_tx_bd->nbytes, h_tx_bd->addr_hi, h_tx_bd->addr_lo, h_tx_bd->nbd); | 3104 | h_tx_bd->nbytes, h_tx_bd->addr_hi, h_tx_bd->addr_lo); |
3106 | 3105 | ||
3107 | /* now get a new data BD | 3106 | /* now get a new data BD |
3108 | * (after the pbd) and fill it */ | 3107 | * (after the pbd) and fill it */ |
@@ -3131,7 +3130,7 @@ static noinline u16 bnx2x_tx_split(struct bnx2x *bp, | |||
3131 | 3130 | ||
3132 | #define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32))) | 3131 | #define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32))) |
3133 | #define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16))) | 3132 | #define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16))) |
3134 | static inline __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) | 3133 | static __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) |
3135 | { | 3134 | { |
3136 | __sum16 tsum = (__force __sum16) csum; | 3135 | __sum16 tsum = (__force __sum16) csum; |
3137 | 3136 | ||
@@ -3146,7 +3145,7 @@ static inline __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) | |||
3146 | return bswab16(tsum); | 3145 | return bswab16(tsum); |
3147 | } | 3146 | } |
3148 | 3147 | ||
3149 | static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) | 3148 | static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) |
3150 | { | 3149 | { |
3151 | u32 rc; | 3150 | u32 rc; |
3152 | 3151 | ||
@@ -3254,8 +3253,8 @@ exit_lbl: | |||
3254 | } | 3253 | } |
3255 | #endif | 3254 | #endif |
3256 | 3255 | ||
3257 | static inline void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data, | 3256 | static void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data, |
3258 | u32 xmit_type) | 3257 | u32 xmit_type) |
3259 | { | 3258 | { |
3260 | *parsing_data |= (skb_shinfo(skb)->gso_size << | 3259 | *parsing_data |= (skb_shinfo(skb)->gso_size << |
3261 | ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT) & | 3260 | ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT) & |
@@ -3272,13 +3271,13 @@ static inline void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data, | |||
3272 | * @pbd: parse BD | 3271 | * @pbd: parse BD |
3273 | * @xmit_type: xmit flags | 3272 | * @xmit_type: xmit flags |
3274 | */ | 3273 | */ |
3275 | static inline void bnx2x_set_pbd_gso(struct sk_buff *skb, | 3274 | static void bnx2x_set_pbd_gso(struct sk_buff *skb, |
3276 | struct eth_tx_parse_bd_e1x *pbd, | 3275 | struct eth_tx_parse_bd_e1x *pbd, |
3277 | u32 xmit_type) | 3276 | u32 xmit_type) |
3278 | { | 3277 | { |
3279 | pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); | 3278 | pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); |
3280 | pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq); | 3279 | pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq); |
3281 | pbd->tcp_flags = pbd_tcp_flags(skb); | 3280 | pbd->tcp_flags = pbd_tcp_flags(tcp_hdr(skb)); |
3282 | 3281 | ||
3283 | if (xmit_type & XMIT_GSO_V4) { | 3282 | if (xmit_type & XMIT_GSO_V4) { |
3284 | pbd->ip_id = bswab16(ip_hdr(skb)->id); | 3283 | pbd->ip_id = bswab16(ip_hdr(skb)->id); |
@@ -3305,15 +3304,15 @@ static inline void bnx2x_set_pbd_gso(struct sk_buff *skb, | |||
3305 | * @parsing_data: data to be updated | 3304 | * @parsing_data: data to be updated |
3306 | * @xmit_type: xmit flags | 3305 | * @xmit_type: xmit flags |
3307 | * | 3306 | * |
3308 | * 57712 related | 3307 | * 57712/578xx related |
3309 | */ | 3308 | */ |
3310 | static inline u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb, | 3309 | static u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb, |
3311 | u32 *parsing_data, u32 xmit_type) | 3310 | u32 *parsing_data, u32 xmit_type) |
3312 | { | 3311 | { |
3313 | *parsing_data |= | 3312 | *parsing_data |= |
3314 | ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) << | 3313 | ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) << |
3315 | ETH_TX_PARSE_BD_E2_TCP_HDR_START_OFFSET_W_SHIFT) & | 3314 | ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) & |
3316 | ETH_TX_PARSE_BD_E2_TCP_HDR_START_OFFSET_W; | 3315 | ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W; |
3317 | 3316 | ||
3318 | if (xmit_type & XMIT_CSUM_TCP) { | 3317 | if (xmit_type & XMIT_CSUM_TCP) { |
3319 | *parsing_data |= ((tcp_hdrlen(skb) / 4) << | 3318 | *parsing_data |= ((tcp_hdrlen(skb) / 4) << |
@@ -3328,17 +3327,14 @@ static inline u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb, | |||
3328 | return skb_transport_header(skb) + sizeof(struct udphdr) - skb->data; | 3327 | return skb_transport_header(skb) + sizeof(struct udphdr) - skb->data; |
3329 | } | 3328 | } |
3330 | 3329 | ||
3331 | static inline void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb, | 3330 | static void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb, |
3332 | struct eth_tx_start_bd *tx_start_bd, u32 xmit_type) | 3331 | struct eth_tx_start_bd *tx_start_bd, |
3332 | u32 xmit_type) | ||
3333 | { | 3333 | { |
3334 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM; | 3334 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM; |
3335 | 3335 | ||
3336 | if (xmit_type & XMIT_CSUM_V4) | 3336 | if (xmit_type & XMIT_CSUM_V6) |
3337 | tx_start_bd->bd_flags.as_bitfield |= | 3337 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IPV6; |
3338 | ETH_TX_BD_FLAGS_IP_CSUM; | ||
3339 | else | ||
3340 | tx_start_bd->bd_flags.as_bitfield |= | ||
3341 | ETH_TX_BD_FLAGS_IPV6; | ||
3342 | 3338 | ||
3343 | if (!(xmit_type & XMIT_CSUM_TCP)) | 3339 | if (!(xmit_type & XMIT_CSUM_TCP)) |
3344 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IS_UDP; | 3340 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IS_UDP; |
@@ -3352,9 +3348,9 @@ static inline void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb, | |||
3352 | * @pbd: parse BD to be updated | 3348 | * @pbd: parse BD to be updated |
3353 | * @xmit_type: xmit flags | 3349 | * @xmit_type: xmit flags |
3354 | */ | 3350 | */ |
3355 | static inline u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb, | 3351 | static u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb, |
3356 | struct eth_tx_parse_bd_e1x *pbd, | 3352 | struct eth_tx_parse_bd_e1x *pbd, |
3357 | u32 xmit_type) | 3353 | u32 xmit_type) |
3358 | { | 3354 | { |
3359 | u8 hlen = (skb_network_header(skb) - skb->data) >> 1; | 3355 | u8 hlen = (skb_network_header(skb) - skb->data) >> 1; |
3360 | 3356 | ||
@@ -3482,7 +3478,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3482 | mac_type = MULTICAST_ADDRESS; | 3478 | mac_type = MULTICAST_ADDRESS; |
3483 | } | 3479 | } |
3484 | 3480 | ||
3485 | #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - 3) | 3481 | #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - BDS_PER_TX_PKT) |
3486 | /* First, check if we need to linearize the skb (due to FW | 3482 | /* First, check if we need to linearize the skb (due to FW |
3487 | restrictions). No need to check fragmentation if page size > 8K | 3483 | restrictions). No need to check fragmentation if page size > 8K |
3488 | (there will be no violation to FW restrictions) */ | 3484 | (there will be no violation to FW restrictions) */ |
@@ -3530,12 +3526,9 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3530 | first_bd = tx_start_bd; | 3526 | first_bd = tx_start_bd; |
3531 | 3527 | ||
3532 | tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; | 3528 | tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; |
3533 | SET_FLAG(tx_start_bd->general_data, | ||
3534 | ETH_TX_START_BD_PARSE_NBDS, | ||
3535 | 0); | ||
3536 | 3529 | ||
3537 | /* header nbd */ | 3530 | /* header nbd: indirectly zero other flags! */ |
3538 | SET_FLAG(tx_start_bd->general_data, ETH_TX_START_BD_HDR_NBDS, 1); | 3531 | tx_start_bd->general_data = 1 << ETH_TX_START_BD_HDR_NBDS_SHIFT; |
3539 | 3532 | ||
3540 | /* remember the first BD of the packet */ | 3533 | /* remember the first BD of the packet */ |
3541 | tx_buf->first_bd = txdata->tx_bd_prod; | 3534 | tx_buf->first_bd = txdata->tx_bd_prod; |
@@ -3555,19 +3548,16 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3555 | /* when transmitting in a vf, start bd must hold the ethertype | 3548 | /* when transmitting in a vf, start bd must hold the ethertype |
3556 | * for fw to enforce it | 3549 | * for fw to enforce it |
3557 | */ | 3550 | */ |
3558 | #ifndef BNX2X_STOP_ON_ERROR | 3551 | if (IS_VF(bp)) |
3559 | if (IS_VF(bp)) { | ||
3560 | #endif | ||
3561 | tx_start_bd->vlan_or_ethertype = | 3552 | tx_start_bd->vlan_or_ethertype = |
3562 | cpu_to_le16(ntohs(eth->h_proto)); | 3553 | cpu_to_le16(ntohs(eth->h_proto)); |
3563 | #ifndef BNX2X_STOP_ON_ERROR | 3554 | else |
3564 | } else { | ||
3565 | /* used by FW for packet accounting */ | 3555 | /* used by FW for packet accounting */ |
3566 | tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod); | 3556 | tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod); |
3567 | } | ||
3568 | #endif | ||
3569 | } | 3557 | } |
3570 | 3558 | ||
3559 | nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */ | ||
3560 | |||
3571 | /* turn on parsing and get a BD */ | 3561 | /* turn on parsing and get a BD */ |
3572 | bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); | 3562 | bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); |
3573 | 3563 | ||
@@ -3579,21 +3569,22 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3579 | memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2)); | 3569 | memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2)); |
3580 | /* Set PBD in checksum offload case */ | 3570 | /* Set PBD in checksum offload case */ |
3581 | if (xmit_type & XMIT_CSUM) | 3571 | if (xmit_type & XMIT_CSUM) |
3572 | /* Set PBD in checksum offload case w/o encapsulation */ | ||
3582 | hlen = bnx2x_set_pbd_csum_e2(bp, skb, | 3573 | hlen = bnx2x_set_pbd_csum_e2(bp, skb, |
3583 | &pbd_e2_parsing_data, | 3574 | &pbd_e2_parsing_data, |
3584 | xmit_type); | 3575 | xmit_type); |
3585 | 3576 | ||
3586 | if (IS_MF_SI(bp) || IS_VF(bp)) { | 3577 | /* Add the macs to the parsing BD this is a vf */ |
3587 | /* fill in the MAC addresses in the PBD - for local | 3578 | if (IS_VF(bp)) { |
3588 | * switching | 3579 | /* override GRE parameters in BD */ |
3589 | */ | 3580 | bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi, |
3590 | bnx2x_set_fw_mac_addr(&pbd_e2->src_mac_addr_hi, | 3581 | &pbd_e2->data.mac_addr.src_mid, |
3591 | &pbd_e2->src_mac_addr_mid, | 3582 | &pbd_e2->data.mac_addr.src_lo, |
3592 | &pbd_e2->src_mac_addr_lo, | ||
3593 | eth->h_source); | 3583 | eth->h_source); |
3594 | bnx2x_set_fw_mac_addr(&pbd_e2->dst_mac_addr_hi, | 3584 | |
3595 | &pbd_e2->dst_mac_addr_mid, | 3585 | bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi, |
3596 | &pbd_e2->dst_mac_addr_lo, | 3586 | &pbd_e2->data.mac_addr.dst_mid, |
3587 | &pbd_e2->data.mac_addr.dst_lo, | ||
3597 | eth->h_dest); | 3588 | eth->h_dest); |
3598 | } | 3589 | } |
3599 | 3590 | ||
@@ -3615,14 +3606,13 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3615 | /* Setup the data pointer of the first BD of the packet */ | 3606 | /* Setup the data pointer of the first BD of the packet */ |
3616 | tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); | 3607 | tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); |
3617 | tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); | 3608 | tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); |
3618 | nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */ | ||
3619 | tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb)); | 3609 | tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb)); |
3620 | pkt_size = tx_start_bd->nbytes; | 3610 | pkt_size = tx_start_bd->nbytes; |
3621 | 3611 | ||
3622 | DP(NETIF_MSG_TX_QUEUED, | 3612 | DP(NETIF_MSG_TX_QUEUED, |
3623 | "first bd @%p addr (%x:%x) nbd %d nbytes %d flags %x vlan %x\n", | 3613 | "first bd @%p addr (%x:%x) nbytes %d flags %x vlan %x\n", |
3624 | tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo, | 3614 | tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo, |
3625 | le16_to_cpu(tx_start_bd->nbd), le16_to_cpu(tx_start_bd->nbytes), | 3615 | le16_to_cpu(tx_start_bd->nbytes), |
3626 | tx_start_bd->bd_flags.as_bitfield, | 3616 | tx_start_bd->bd_flags.as_bitfield, |
3627 | le16_to_cpu(tx_start_bd->vlan_or_ethertype)); | 3617 | le16_to_cpu(tx_start_bd->vlan_or_ethertype)); |
3628 | 3618 | ||
@@ -3635,10 +3625,12 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3635 | 3625 | ||
3636 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO; | 3626 | tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO; |
3637 | 3627 | ||
3638 | if (unlikely(skb_headlen(skb) > hlen)) | 3628 | if (unlikely(skb_headlen(skb) > hlen)) { |
3629 | nbd++; | ||
3639 | bd_prod = bnx2x_tx_split(bp, txdata, tx_buf, | 3630 | bd_prod = bnx2x_tx_split(bp, txdata, tx_buf, |
3640 | &tx_start_bd, hlen, | 3631 | &tx_start_bd, hlen, |
3641 | bd_prod, ++nbd); | 3632 | bd_prod); |
3633 | } | ||
3642 | if (!CHIP_IS_E1x(bp)) | 3634 | if (!CHIP_IS_E1x(bp)) |
3643 | bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data, | 3635 | bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data, |
3644 | xmit_type); | 3636 | xmit_type); |
@@ -3728,9 +3720,13 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3728 | if (pbd_e2) | 3720 | if (pbd_e2) |
3729 | DP(NETIF_MSG_TX_QUEUED, | 3721 | DP(NETIF_MSG_TX_QUEUED, |
3730 | "PBD (E2) @%p dst %x %x %x src %x %x %x parsing_data %x\n", | 3722 | "PBD (E2) @%p dst %x %x %x src %x %x %x parsing_data %x\n", |
3731 | pbd_e2, pbd_e2->dst_mac_addr_hi, pbd_e2->dst_mac_addr_mid, | 3723 | pbd_e2, |
3732 | pbd_e2->dst_mac_addr_lo, pbd_e2->src_mac_addr_hi, | 3724 | pbd_e2->data.mac_addr.dst_hi, |
3733 | pbd_e2->src_mac_addr_mid, pbd_e2->src_mac_addr_lo, | 3725 | pbd_e2->data.mac_addr.dst_mid, |
3726 | pbd_e2->data.mac_addr.dst_lo, | ||
3727 | pbd_e2->data.mac_addr.src_hi, | ||
3728 | pbd_e2->data.mac_addr.src_mid, | ||
3729 | pbd_e2->data.mac_addr.src_lo, | ||
3734 | pbd_e2->parsing_data); | 3730 | pbd_e2->parsing_data); |
3735 | DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod); | 3731 | DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod); |
3736 | 3732 | ||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h index e5f808377c91..40f22c6794cd 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h | |||
@@ -30,31 +30,31 @@ | |||
30 | * IRO[138].m2) + ((sbId) * IRO[138].m3)) | 30 | * IRO[138].m2) + ((sbId) * IRO[138].m3)) |
31 | #define CSTORM_IGU_MODE_OFFSET (IRO[157].base) | 31 | #define CSTORM_IGU_MODE_OFFSET (IRO[157].base) |
32 | #define CSTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ | 32 | #define CSTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ |
33 | (IRO[316].base + ((pfId) * IRO[316].m1)) | ||
34 | #define CSTORM_ISCSI_CQ_SQN_SIZE_OFFSET(pfId) \ | ||
35 | (IRO[317].base + ((pfId) * IRO[317].m1)) | 33 | (IRO[317].base + ((pfId) * IRO[317].m1)) |
34 | #define CSTORM_ISCSI_CQ_SQN_SIZE_OFFSET(pfId) \ | ||
35 | (IRO[318].base + ((pfId) * IRO[318].m1)) | ||
36 | #define CSTORM_ISCSI_EQ_CONS_OFFSET(pfId, iscsiEqId) \ | 36 | #define CSTORM_ISCSI_EQ_CONS_OFFSET(pfId, iscsiEqId) \ |
37 | (IRO[309].base + ((pfId) * IRO[309].m1) + ((iscsiEqId) * IRO[309].m2)) | 37 | (IRO[310].base + ((pfId) * IRO[310].m1) + ((iscsiEqId) * IRO[310].m2)) |
38 | #define CSTORM_ISCSI_EQ_NEXT_EQE_ADDR_OFFSET(pfId, iscsiEqId) \ | 38 | #define CSTORM_ISCSI_EQ_NEXT_EQE_ADDR_OFFSET(pfId, iscsiEqId) \ |
39 | (IRO[311].base + ((pfId) * IRO[311].m1) + ((iscsiEqId) * IRO[311].m2)) | 39 | (IRO[312].base + ((pfId) * IRO[312].m1) + ((iscsiEqId) * IRO[312].m2)) |
40 | #define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_OFFSET(pfId, iscsiEqId) \ | 40 | #define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_OFFSET(pfId, iscsiEqId) \ |
41 | (IRO[310].base + ((pfId) * IRO[310].m1) + ((iscsiEqId) * IRO[310].m2)) | 41 | (IRO[311].base + ((pfId) * IRO[311].m1) + ((iscsiEqId) * IRO[311].m2)) |
42 | #define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_VALID_OFFSET(pfId, iscsiEqId) \ | 42 | #define CSTORM_ISCSI_EQ_NEXT_PAGE_ADDR_VALID_OFFSET(pfId, iscsiEqId) \ |
43 | (IRO[312].base + ((pfId) * IRO[312].m1) + ((iscsiEqId) * IRO[312].m2)) | 43 | (IRO[313].base + ((pfId) * IRO[313].m1) + ((iscsiEqId) * IRO[313].m2)) |
44 | #define CSTORM_ISCSI_EQ_PROD_OFFSET(pfId, iscsiEqId) \ | 44 | #define CSTORM_ISCSI_EQ_PROD_OFFSET(pfId, iscsiEqId) \ |
45 | (IRO[308].base + ((pfId) * IRO[308].m1) + ((iscsiEqId) * IRO[308].m2)) | 45 | (IRO[309].base + ((pfId) * IRO[309].m1) + ((iscsiEqId) * IRO[309].m2)) |
46 | #define CSTORM_ISCSI_EQ_SB_INDEX_OFFSET(pfId, iscsiEqId) \ | 46 | #define CSTORM_ISCSI_EQ_SB_INDEX_OFFSET(pfId, iscsiEqId) \ |
47 | (IRO[314].base + ((pfId) * IRO[314].m1) + ((iscsiEqId) * IRO[314].m2)) | 47 | (IRO[315].base + ((pfId) * IRO[315].m1) + ((iscsiEqId) * IRO[315].m2)) |
48 | #define CSTORM_ISCSI_EQ_SB_NUM_OFFSET(pfId, iscsiEqId) \ | 48 | #define CSTORM_ISCSI_EQ_SB_NUM_OFFSET(pfId, iscsiEqId) \ |
49 | (IRO[313].base + ((pfId) * IRO[313].m1) + ((iscsiEqId) * IRO[313].m2)) | 49 | (IRO[314].base + ((pfId) * IRO[314].m1) + ((iscsiEqId) * IRO[314].m2)) |
50 | #define CSTORM_ISCSI_HQ_SIZE_OFFSET(pfId) \ | 50 | #define CSTORM_ISCSI_HQ_SIZE_OFFSET(pfId) \ |
51 | (IRO[315].base + ((pfId) * IRO[315].m1)) | 51 | (IRO[316].base + ((pfId) * IRO[316].m1)) |
52 | #define CSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ | 52 | #define CSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ |
53 | (IRO[307].base + ((pfId) * IRO[307].m1)) | 53 | (IRO[308].base + ((pfId) * IRO[308].m1)) |
54 | #define CSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ | 54 | #define CSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ |
55 | (IRO[306].base + ((pfId) * IRO[306].m1)) | 55 | (IRO[307].base + ((pfId) * IRO[307].m1)) |
56 | #define CSTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ | 56 | #define CSTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ |
57 | (IRO[305].base + ((pfId) * IRO[305].m1)) | 57 | (IRO[306].base + ((pfId) * IRO[306].m1)) |
58 | #define CSTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ | 58 | #define CSTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ |
59 | (IRO[151].base + ((funcId) * IRO[151].m1)) | 59 | (IRO[151].base + ((funcId) * IRO[151].m1)) |
60 | #define CSTORM_SP_STATUS_BLOCK_DATA_OFFSET(pfId) \ | 60 | #define CSTORM_SP_STATUS_BLOCK_DATA_OFFSET(pfId) \ |
@@ -114,7 +114,7 @@ | |||
114 | #define TSTORM_ISCSI_RQ_SIZE_OFFSET(pfId) \ | 114 | #define TSTORM_ISCSI_RQ_SIZE_OFFSET(pfId) \ |
115 | (IRO[268].base + ((pfId) * IRO[268].m1)) | 115 | (IRO[268].base + ((pfId) * IRO[268].m1)) |
116 | #define TSTORM_ISCSI_TCP_LOCAL_ADV_WND_OFFSET(pfId) \ | 116 | #define TSTORM_ISCSI_TCP_LOCAL_ADV_WND_OFFSET(pfId) \ |
117 | (IRO[277].base + ((pfId) * IRO[277].m1)) | 117 | (IRO[278].base + ((pfId) * IRO[278].m1)) |
118 | #define TSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(pfId) \ | 118 | #define TSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(pfId) \ |
119 | (IRO[264].base + ((pfId) * IRO[264].m1)) | 119 | (IRO[264].base + ((pfId) * IRO[264].m1)) |
120 | #define TSTORM_ISCSI_TCP_VARS_LSB_LOCAL_MAC_ADDR_OFFSET(pfId) \ | 120 | #define TSTORM_ISCSI_TCP_VARS_LSB_LOCAL_MAC_ADDR_OFFSET(pfId) \ |
@@ -136,35 +136,32 @@ | |||
136 | #define USTORM_ASSERT_LIST_INDEX_OFFSET (IRO[177].base) | 136 | #define USTORM_ASSERT_LIST_INDEX_OFFSET (IRO[177].base) |
137 | #define USTORM_ASSERT_LIST_OFFSET(assertListEntry) \ | 137 | #define USTORM_ASSERT_LIST_OFFSET(assertListEntry) \ |
138 | (IRO[176].base + ((assertListEntry) * IRO[176].m1)) | 138 | (IRO[176].base + ((assertListEntry) * IRO[176].m1)) |
139 | #define USTORM_CQE_PAGE_NEXT_OFFSET(portId, clientId) \ | ||
140 | (IRO[205].base + ((portId) * IRO[205].m1) + ((clientId) * \ | ||
141 | IRO[205].m2)) | ||
142 | #define USTORM_ETH_PAUSE_ENABLED_OFFSET(portId) \ | 139 | #define USTORM_ETH_PAUSE_ENABLED_OFFSET(portId) \ |
143 | (IRO[183].base + ((portId) * IRO[183].m1)) | 140 | (IRO[183].base + ((portId) * IRO[183].m1)) |
144 | #define USTORM_FCOE_EQ_PROD_OFFSET(pfId) \ | 141 | #define USTORM_FCOE_EQ_PROD_OFFSET(pfId) \ |
145 | (IRO[318].base + ((pfId) * IRO[318].m1)) | 142 | (IRO[319].base + ((pfId) * IRO[319].m1)) |
146 | #define USTORM_FUNC_EN_OFFSET(funcId) \ | 143 | #define USTORM_FUNC_EN_OFFSET(funcId) \ |
147 | (IRO[178].base + ((funcId) * IRO[178].m1)) | 144 | (IRO[178].base + ((funcId) * IRO[178].m1)) |
148 | #define USTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ | 145 | #define USTORM_ISCSI_CQ_SIZE_OFFSET(pfId) \ |
149 | (IRO[282].base + ((pfId) * IRO[282].m1)) | ||
150 | #define USTORM_ISCSI_CQ_SQN_SIZE_OFFSET(pfId) \ | ||
151 | (IRO[283].base + ((pfId) * IRO[283].m1)) | 146 | (IRO[283].base + ((pfId) * IRO[283].m1)) |
147 | #define USTORM_ISCSI_CQ_SQN_SIZE_OFFSET(pfId) \ | ||
148 | (IRO[284].base + ((pfId) * IRO[284].m1)) | ||
152 | #define USTORM_ISCSI_ERROR_BITMAP_OFFSET(pfId) \ | 149 | #define USTORM_ISCSI_ERROR_BITMAP_OFFSET(pfId) \ |
153 | (IRO[287].base + ((pfId) * IRO[287].m1)) | 150 | (IRO[288].base + ((pfId) * IRO[288].m1)) |
154 | #define USTORM_ISCSI_GLOBAL_BUF_PHYS_ADDR_OFFSET(pfId) \ | 151 | #define USTORM_ISCSI_GLOBAL_BUF_PHYS_ADDR_OFFSET(pfId) \ |
155 | (IRO[284].base + ((pfId) * IRO[284].m1)) | 152 | (IRO[285].base + ((pfId) * IRO[285].m1)) |
156 | #define USTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ | 153 | #define USTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ |
157 | (IRO[280].base + ((pfId) * IRO[280].m1)) | 154 | (IRO[281].base + ((pfId) * IRO[281].m1)) |
158 | #define USTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ | 155 | #define USTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ |
159 | (IRO[279].base + ((pfId) * IRO[279].m1)) | 156 | (IRO[280].base + ((pfId) * IRO[280].m1)) |
160 | #define USTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ | 157 | #define USTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ |
161 | (IRO[278].base + ((pfId) * IRO[278].m1)) | 158 | (IRO[279].base + ((pfId) * IRO[279].m1)) |
162 | #define USTORM_ISCSI_R2TQ_SIZE_OFFSET(pfId) \ | 159 | #define USTORM_ISCSI_R2TQ_SIZE_OFFSET(pfId) \ |
163 | (IRO[281].base + ((pfId) * IRO[281].m1)) | 160 | (IRO[282].base + ((pfId) * IRO[282].m1)) |
164 | #define USTORM_ISCSI_RQ_BUFFER_SIZE_OFFSET(pfId) \ | 161 | #define USTORM_ISCSI_RQ_BUFFER_SIZE_OFFSET(pfId) \ |
165 | (IRO[285].base + ((pfId) * IRO[285].m1)) | ||
166 | #define USTORM_ISCSI_RQ_SIZE_OFFSET(pfId) \ | ||
167 | (IRO[286].base + ((pfId) * IRO[286].m1)) | 162 | (IRO[286].base + ((pfId) * IRO[286].m1)) |
163 | #define USTORM_ISCSI_RQ_SIZE_OFFSET(pfId) \ | ||
164 | (IRO[287].base + ((pfId) * IRO[287].m1)) | ||
168 | #define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(pfId) \ | 165 | #define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(pfId) \ |
169 | (IRO[182].base + ((pfId) * IRO[182].m1)) | 166 | (IRO[182].base + ((pfId) * IRO[182].m1)) |
170 | #define USTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ | 167 | #define USTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ |
@@ -190,39 +187,39 @@ | |||
190 | #define XSTORM_FUNC_EN_OFFSET(funcId) \ | 187 | #define XSTORM_FUNC_EN_OFFSET(funcId) \ |
191 | (IRO[47].base + ((funcId) * IRO[47].m1)) | 188 | (IRO[47].base + ((funcId) * IRO[47].m1)) |
192 | #define XSTORM_ISCSI_HQ_SIZE_OFFSET(pfId) \ | 189 | #define XSTORM_ISCSI_HQ_SIZE_OFFSET(pfId) \ |
193 | (IRO[295].base + ((pfId) * IRO[295].m1)) | 190 | (IRO[296].base + ((pfId) * IRO[296].m1)) |
194 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR0_OFFSET(pfId) \ | 191 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR0_OFFSET(pfId) \ |
195 | (IRO[298].base + ((pfId) * IRO[298].m1)) | ||
196 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR1_OFFSET(pfId) \ | ||
197 | (IRO[299].base + ((pfId) * IRO[299].m1)) | 192 | (IRO[299].base + ((pfId) * IRO[299].m1)) |
198 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR2_OFFSET(pfId) \ | 193 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR1_OFFSET(pfId) \ |
199 | (IRO[300].base + ((pfId) * IRO[300].m1)) | 194 | (IRO[300].base + ((pfId) * IRO[300].m1)) |
200 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR3_OFFSET(pfId) \ | 195 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR2_OFFSET(pfId) \ |
201 | (IRO[301].base + ((pfId) * IRO[301].m1)) | 196 | (IRO[301].base + ((pfId) * IRO[301].m1)) |
202 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR4_OFFSET(pfId) \ | 197 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR3_OFFSET(pfId) \ |
203 | (IRO[302].base + ((pfId) * IRO[302].m1)) | 198 | (IRO[302].base + ((pfId) * IRO[302].m1)) |
204 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR5_OFFSET(pfId) \ | 199 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR4_OFFSET(pfId) \ |
205 | (IRO[303].base + ((pfId) * IRO[303].m1)) | 200 | (IRO[303].base + ((pfId) * IRO[303].m1)) |
206 | #define XSTORM_ISCSI_LOCAL_VLAN_OFFSET(pfId) \ | 201 | #define XSTORM_ISCSI_LOCAL_MAC_ADDR5_OFFSET(pfId) \ |
207 | (IRO[304].base + ((pfId) * IRO[304].m1)) | 202 | (IRO[304].base + ((pfId) * IRO[304].m1)) |
203 | #define XSTORM_ISCSI_LOCAL_VLAN_OFFSET(pfId) \ | ||
204 | (IRO[305].base + ((pfId) * IRO[305].m1)) | ||
208 | #define XSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ | 205 | #define XSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfId) \ |
209 | (IRO[294].base + ((pfId) * IRO[294].m1)) | 206 | (IRO[295].base + ((pfId) * IRO[295].m1)) |
210 | #define XSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ | 207 | #define XSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfId) \ |
211 | (IRO[293].base + ((pfId) * IRO[293].m1)) | 208 | (IRO[294].base + ((pfId) * IRO[294].m1)) |
212 | #define XSTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ | 209 | #define XSTORM_ISCSI_PAGE_SIZE_OFFSET(pfId) \ |
213 | (IRO[292].base + ((pfId) * IRO[292].m1)) | 210 | (IRO[293].base + ((pfId) * IRO[293].m1)) |
214 | #define XSTORM_ISCSI_R2TQ_SIZE_OFFSET(pfId) \ | 211 | #define XSTORM_ISCSI_R2TQ_SIZE_OFFSET(pfId) \ |
215 | (IRO[297].base + ((pfId) * IRO[297].m1)) | 212 | (IRO[298].base + ((pfId) * IRO[298].m1)) |
216 | #define XSTORM_ISCSI_SQ_SIZE_OFFSET(pfId) \ | 213 | #define XSTORM_ISCSI_SQ_SIZE_OFFSET(pfId) \ |
217 | (IRO[296].base + ((pfId) * IRO[296].m1)) | 214 | (IRO[297].base + ((pfId) * IRO[297].m1)) |
218 | #define XSTORM_ISCSI_TCP_VARS_ADV_WND_SCL_OFFSET(pfId) \ | 215 | #define XSTORM_ISCSI_TCP_VARS_ADV_WND_SCL_OFFSET(pfId) \ |
219 | (IRO[291].base + ((pfId) * IRO[291].m1)) | 216 | (IRO[292].base + ((pfId) * IRO[292].m1)) |
220 | #define XSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(pfId) \ | 217 | #define XSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(pfId) \ |
221 | (IRO[290].base + ((pfId) * IRO[290].m1)) | 218 | (IRO[291].base + ((pfId) * IRO[291].m1)) |
222 | #define XSTORM_ISCSI_TCP_VARS_TOS_OFFSET(pfId) \ | 219 | #define XSTORM_ISCSI_TCP_VARS_TOS_OFFSET(pfId) \ |
223 | (IRO[289].base + ((pfId) * IRO[289].m1)) | 220 | (IRO[290].base + ((pfId) * IRO[290].m1)) |
224 | #define XSTORM_ISCSI_TCP_VARS_TTL_OFFSET(pfId) \ | 221 | #define XSTORM_ISCSI_TCP_VARS_TTL_OFFSET(pfId) \ |
225 | (IRO[288].base + ((pfId) * IRO[288].m1)) | 222 | (IRO[289].base + ((pfId) * IRO[289].m1)) |
226 | #define XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(pfId) \ | 223 | #define XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(pfId) \ |
227 | (IRO[44].base + ((pfId) * IRO[44].m1)) | 224 | (IRO[44].base + ((pfId) * IRO[44].m1)) |
228 | #define XSTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ | 225 | #define XSTORM_RECORD_SLOW_PATH_OFFSET(funcId) \ |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h index a7a3504e1bd5..12f00a40cdf0 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | |||
@@ -114,6 +114,10 @@ struct license_key { | |||
114 | #define EPIO_CFG_EPIO30 0x0000001f | 114 | #define EPIO_CFG_EPIO30 0x0000001f |
115 | #define EPIO_CFG_EPIO31 0x00000020 | 115 | #define EPIO_CFG_EPIO31 0x00000020 |
116 | 116 | ||
117 | struct mac_addr { | ||
118 | u32 upper; | ||
119 | u32 lower; | ||
120 | }; | ||
117 | 121 | ||
118 | struct shared_hw_cfg { /* NVRAM Offset */ | 122 | struct shared_hw_cfg { /* NVRAM Offset */ |
119 | /* Up to 16 bytes of NULL-terminated string */ | 123 | /* Up to 16 bytes of NULL-terminated string */ |
@@ -2836,8 +2840,8 @@ struct afex_stats { | |||
2836 | 2840 | ||
2837 | #define BCM_5710_FW_MAJOR_VERSION 7 | 2841 | #define BCM_5710_FW_MAJOR_VERSION 7 |
2838 | #define BCM_5710_FW_MINOR_VERSION 8 | 2842 | #define BCM_5710_FW_MINOR_VERSION 8 |
2839 | #define BCM_5710_FW_REVISION_VERSION 2 | 2843 | #define BCM_5710_FW_REVISION_VERSION 17 |
2840 | #define BCM_5710_FW_ENGINEERING_VERSION 0 | 2844 | #define BCM_5710_FW_ENGINEERING_VERSION 0 |
2841 | #define BCM_5710_FW_COMPILE_FLAGS 1 | 2845 | #define BCM_5710_FW_COMPILE_FLAGS 1 |
2842 | 2846 | ||
2843 | 2847 | ||
@@ -3528,11 +3532,14 @@ struct client_init_tx_data { | |||
3528 | #define CLIENT_INIT_TX_DATA_BCAST_ACCEPT_ALL_SHIFT 2 | 3532 | #define CLIENT_INIT_TX_DATA_BCAST_ACCEPT_ALL_SHIFT 2 |
3529 | #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN (0x1<<3) | 3533 | #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN (0x1<<3) |
3530 | #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN_SHIFT 3 | 3534 | #define CLIENT_INIT_TX_DATA_ACCEPT_ANY_VLAN_SHIFT 3 |
3531 | #define CLIENT_INIT_TX_DATA_RESERVED1 (0xFFF<<4) | 3535 | #define CLIENT_INIT_TX_DATA_RESERVED0 (0xFFF<<4) |
3532 | #define CLIENT_INIT_TX_DATA_RESERVED1_SHIFT 4 | 3536 | #define CLIENT_INIT_TX_DATA_RESERVED0_SHIFT 4 |
3533 | u8 default_vlan_flg; | 3537 | u8 default_vlan_flg; |
3534 | u8 force_default_pri_flg; | 3538 | u8 force_default_pri_flg; |
3535 | __le32 reserved3; | 3539 | u8 tunnel_lso_inc_ip_id; |
3540 | u8 refuse_outband_vlan_flg; | ||
3541 | u8 tunnel_non_lso_pcsum_location; | ||
3542 | u8 reserved1; | ||
3536 | }; | 3543 | }; |
3537 | 3544 | ||
3538 | /* | 3545 | /* |
@@ -3566,6 +3573,11 @@ struct client_update_ramrod_data { | |||
3566 | __le16 silent_vlan_mask; | 3573 | __le16 silent_vlan_mask; |
3567 | u8 silent_vlan_removal_flg; | 3574 | u8 silent_vlan_removal_flg; |
3568 | u8 silent_vlan_change_flg; | 3575 | u8 silent_vlan_change_flg; |
3576 | u8 refuse_outband_vlan_flg; | ||
3577 | u8 refuse_outband_vlan_change_flg; | ||
3578 | u8 tx_switching_flg; | ||
3579 | u8 tx_switching_change_flg; | ||
3580 | __le32 reserved1; | ||
3569 | __le32 echo; | 3581 | __le32 echo; |
3570 | }; | 3582 | }; |
3571 | 3583 | ||
@@ -3635,7 +3647,8 @@ struct eth_classify_header { | |||
3635 | */ | 3647 | */ |
3636 | struct eth_classify_mac_cmd { | 3648 | struct eth_classify_mac_cmd { |
3637 | struct eth_classify_cmd_header header; | 3649 | struct eth_classify_cmd_header header; |
3638 | __le32 reserved0; | 3650 | __le16 reserved0; |
3651 | __le16 inner_mac; | ||
3639 | __le16 mac_lsb; | 3652 | __le16 mac_lsb; |
3640 | __le16 mac_mid; | 3653 | __le16 mac_mid; |
3641 | __le16 mac_msb; | 3654 | __le16 mac_msb; |
@@ -3648,7 +3661,8 @@ struct eth_classify_mac_cmd { | |||
3648 | */ | 3661 | */ |
3649 | struct eth_classify_pair_cmd { | 3662 | struct eth_classify_pair_cmd { |
3650 | struct eth_classify_cmd_header header; | 3663 | struct eth_classify_cmd_header header; |
3651 | __le32 reserved0; | 3664 | __le16 reserved0; |
3665 | __le16 inner_mac; | ||
3652 | __le16 mac_lsb; | 3666 | __le16 mac_lsb; |
3653 | __le16 mac_mid; | 3667 | __le16 mac_mid; |
3654 | __le16 mac_msb; | 3668 | __le16 mac_msb; |
@@ -3870,8 +3884,68 @@ struct eth_halt_ramrod_data { | |||
3870 | 3884 | ||
3871 | 3885 | ||
3872 | /* | 3886 | /* |
3873 | * Command for setting multicast classification for a client | 3887 | * destination and source mac address. |
3888 | */ | ||
3889 | struct eth_mac_addresses { | ||
3890 | #if defined(__BIG_ENDIAN) | ||
3891 | __le16 dst_mid; | ||
3892 | __le16 dst_lo; | ||
3893 | #elif defined(__LITTLE_ENDIAN) | ||
3894 | __le16 dst_lo; | ||
3895 | __le16 dst_mid; | ||
3896 | #endif | ||
3897 | #if defined(__BIG_ENDIAN) | ||
3898 | __le16 src_lo; | ||
3899 | __le16 dst_hi; | ||
3900 | #elif defined(__LITTLE_ENDIAN) | ||
3901 | __le16 dst_hi; | ||
3902 | __le16 src_lo; | ||
3903 | #endif | ||
3904 | #if defined(__BIG_ENDIAN) | ||
3905 | __le16 src_hi; | ||
3906 | __le16 src_mid; | ||
3907 | #elif defined(__LITTLE_ENDIAN) | ||
3908 | __le16 src_mid; | ||
3909 | __le16 src_hi; | ||
3910 | #endif | ||
3911 | }; | ||
3912 | |||
3913 | /* tunneling related data */ | ||
3914 | struct eth_tunnel_data { | ||
3915 | #if defined(__BIG_ENDIAN) | ||
3916 | __le16 dst_mid; | ||
3917 | __le16 dst_lo; | ||
3918 | #elif defined(__LITTLE_ENDIAN) | ||
3919 | __le16 dst_lo; | ||
3920 | __le16 dst_mid; | ||
3921 | #endif | ||
3922 | #if defined(__BIG_ENDIAN) | ||
3923 | __le16 reserved0; | ||
3924 | __le16 dst_hi; | ||
3925 | #elif defined(__LITTLE_ENDIAN) | ||
3926 | __le16 dst_hi; | ||
3927 | __le16 reserved0; | ||
3928 | #endif | ||
3929 | #if defined(__BIG_ENDIAN) | ||
3930 | u8 reserved1; | ||
3931 | u8 ip_hdr_start_inner_w; | ||
3932 | __le16 pseudo_csum; | ||
3933 | #elif defined(__LITTLE_ENDIAN) | ||
3934 | __le16 pseudo_csum; | ||
3935 | u8 ip_hdr_start_inner_w; | ||
3936 | u8 reserved1; | ||
3937 | #endif | ||
3938 | }; | ||
3939 | |||
3940 | /* union for mac addresses and for tunneling data. | ||
3941 | * considered as tunneling data only if (tunnel_exist == 1). | ||
3874 | */ | 3942 | */ |
3943 | union eth_mac_addr_or_tunnel_data { | ||
3944 | struct eth_mac_addresses mac_addr; | ||
3945 | struct eth_tunnel_data tunnel_data; | ||
3946 | }; | ||
3947 | |||
3948 | /*Command for setting multicast classification for a client */ | ||
3875 | struct eth_multicast_rules_cmd { | 3949 | struct eth_multicast_rules_cmd { |
3876 | u8 cmd_general_data; | 3950 | u8 cmd_general_data; |
3877 | #define ETH_MULTICAST_RULES_CMD_RX_CMD (0x1<<0) | 3951 | #define ETH_MULTICAST_RULES_CMD_RX_CMD (0x1<<0) |
@@ -3889,7 +3963,6 @@ struct eth_multicast_rules_cmd { | |||
3889 | struct regpair reserved3; | 3963 | struct regpair reserved3; |
3890 | }; | 3964 | }; |
3891 | 3965 | ||
3892 | |||
3893 | /* | 3966 | /* |
3894 | * parameters for multicast classification ramrod | 3967 | * parameters for multicast classification ramrod |
3895 | */ | 3968 | */ |
@@ -3898,7 +3971,6 @@ struct eth_multicast_rules_ramrod_data { | |||
3898 | struct eth_multicast_rules_cmd rules[MULTICAST_RULES_COUNT]; | 3971 | struct eth_multicast_rules_cmd rules[MULTICAST_RULES_COUNT]; |
3899 | }; | 3972 | }; |
3900 | 3973 | ||
3901 | |||
3902 | /* | 3974 | /* |
3903 | * Place holder for ramrods protocol specific data | 3975 | * Place holder for ramrods protocol specific data |
3904 | */ | 3976 | */ |
@@ -3962,11 +4034,14 @@ struct eth_rss_update_ramrod_data { | |||
3962 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_TCP_CAPABILITY_SHIFT 4 | 4034 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_TCP_CAPABILITY_SHIFT 4 |
3963 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY (0x1<<5) | 4035 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY (0x1<<5) |
3964 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY_SHIFT 5 | 4036 | #define ETH_RSS_UPDATE_RAMROD_DATA_IPV6_UDP_CAPABILITY_SHIFT 5 |
4037 | #define ETH_RSS_UPDATE_RAMROD_DATA_EN_5_TUPLE_CAPABILITY (0x1<<6) | ||
4038 | #define ETH_RSS_UPDATE_RAMROD_DATA_EN_5_TUPLE_CAPABILITY_SHIFT 6 | ||
3965 | #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY (0x1<<7) | 4039 | #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY (0x1<<7) |
3966 | #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY_SHIFT 7 | 4040 | #define ETH_RSS_UPDATE_RAMROD_DATA_UPDATE_RSS_KEY_SHIFT 7 |
3967 | u8 rss_result_mask; | 4041 | u8 rss_result_mask; |
3968 | u8 rss_mode; | 4042 | u8 rss_mode; |
3969 | __le32 __reserved2; | 4043 | __le16 udp_4tuple_dst_port_mask; |
4044 | __le16 udp_4tuple_dst_port_value; | ||
3970 | u8 indirection_table[T_ETH_INDIRECTION_TABLE_SIZE]; | 4045 | u8 indirection_table[T_ETH_INDIRECTION_TABLE_SIZE]; |
3971 | __le32 rss_key[T_ETH_RSS_KEY]; | 4046 | __le32 rss_key[T_ETH_RSS_KEY]; |
3972 | __le32 echo; | 4047 | __le32 echo; |
@@ -4130,6 +4205,23 @@ enum eth_tpa_update_command { | |||
4130 | MAX_ETH_TPA_UPDATE_COMMAND | 4205 | MAX_ETH_TPA_UPDATE_COMMAND |
4131 | }; | 4206 | }; |
4132 | 4207 | ||
4208 | /* In case of LSO over IPv4 tunnel, whether to increment | ||
4209 | * IP ID on external IP header or internal IP header | ||
4210 | */ | ||
4211 | enum eth_tunnel_lso_inc_ip_id { | ||
4212 | EXT_HEADER, | ||
4213 | INT_HEADER, | ||
4214 | MAX_ETH_TUNNEL_LSO_INC_IP_ID | ||
4215 | }; | ||
4216 | |||
4217 | /* In case tunnel exist and L4 checksum offload, | ||
4218 | * the pseudo checksum location, on packet or on BD. | ||
4219 | */ | ||
4220 | enum eth_tunnel_non_lso_pcsum_location { | ||
4221 | PCSUM_ON_PKT, | ||
4222 | PCSUM_ON_BD, | ||
4223 | MAX_ETH_TUNNEL_NON_LSO_PCSUM_LOCATION | ||
4224 | }; | ||
4133 | 4225 | ||
4134 | /* | 4226 | /* |
4135 | * Tx regular BD structure | 4227 | * Tx regular BD structure |
@@ -4181,8 +4273,8 @@ struct eth_tx_start_bd { | |||
4181 | #define ETH_TX_START_BD_FORCE_VLAN_MODE_SHIFT 4 | 4273 | #define ETH_TX_START_BD_FORCE_VLAN_MODE_SHIFT 4 |
4182 | #define ETH_TX_START_BD_PARSE_NBDS (0x3<<5) | 4274 | #define ETH_TX_START_BD_PARSE_NBDS (0x3<<5) |
4183 | #define ETH_TX_START_BD_PARSE_NBDS_SHIFT 5 | 4275 | #define ETH_TX_START_BD_PARSE_NBDS_SHIFT 5 |
4184 | #define ETH_TX_START_BD_RESREVED (0x1<<7) | 4276 | #define ETH_TX_START_BD_TUNNEL_EXIST (0x1<<7) |
4185 | #define ETH_TX_START_BD_RESREVED_SHIFT 7 | 4277 | #define ETH_TX_START_BD_TUNNEL_EXIST_SHIFT 7 |
4186 | }; | 4278 | }; |
4187 | 4279 | ||
4188 | /* | 4280 | /* |
@@ -4231,15 +4323,10 @@ struct eth_tx_parse_bd_e1x { | |||
4231 | * Tx parsing BD structure for ETH E2 | 4323 | * Tx parsing BD structure for ETH E2 |
4232 | */ | 4324 | */ |
4233 | struct eth_tx_parse_bd_e2 { | 4325 | struct eth_tx_parse_bd_e2 { |
4234 | __le16 dst_mac_addr_lo; | 4326 | union eth_mac_addr_or_tunnel_data data; |
4235 | __le16 dst_mac_addr_mid; | ||
4236 | __le16 dst_mac_addr_hi; | ||
4237 | __le16 src_mac_addr_lo; | ||
4238 | __le16 src_mac_addr_mid; | ||
4239 | __le16 src_mac_addr_hi; | ||
4240 | __le32 parsing_data; | 4327 | __le32 parsing_data; |
4241 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_START_OFFSET_W (0x7FF<<0) | 4328 | #define ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W (0x7FF<<0) |
4242 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_START_OFFSET_W_SHIFT 0 | 4329 | #define ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT 0 |
4243 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW (0xF<<11) | 4330 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW (0xF<<11) |
4244 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT 11 | 4331 | #define ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT 11 |
4245 | #define ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR (0x1<<15) | 4332 | #define ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR (0x1<<15) |
@@ -4251,8 +4338,51 @@ struct eth_tx_parse_bd_e2 { | |||
4251 | }; | 4338 | }; |
4252 | 4339 | ||
4253 | /* | 4340 | /* |
4254 | * The last BD in the BD memory will hold a pointer to the next BD memory | 4341 | * Tx 2nd parsing BD structure for ETH packet |
4255 | */ | 4342 | */ |
4343 | struct eth_tx_parse_2nd_bd { | ||
4344 | __le16 global_data; | ||
4345 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_START_OUTER_W (0xF<<0) | ||
4346 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_START_OUTER_W_SHIFT 0 | ||
4347 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_TYPE_OUTER (0x1<<4) | ||
4348 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_TYPE_OUTER_SHIFT 4 | ||
4349 | #define ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN (0x1<<5) | ||
4350 | #define ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT 5 | ||
4351 | #define ETH_TX_PARSE_2ND_BD_NS_FLG (0x1<<6) | ||
4352 | #define ETH_TX_PARSE_2ND_BD_NS_FLG_SHIFT 6 | ||
4353 | #define ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST (0x1<<7) | ||
4354 | #define ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST_SHIFT 7 | ||
4355 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W (0x1F<<8) | ||
4356 | #define ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT 8 | ||
4357 | #define ETH_TX_PARSE_2ND_BD_RESERVED0 (0x7<<13) | ||
4358 | #define ETH_TX_PARSE_2ND_BD_RESERVED0_SHIFT 13 | ||
4359 | __le16 reserved1; | ||
4360 | u8 tcp_flags; | ||
4361 | #define ETH_TX_PARSE_2ND_BD_FIN_FLG (0x1<<0) | ||
4362 | #define ETH_TX_PARSE_2ND_BD_FIN_FLG_SHIFT 0 | ||
4363 | #define ETH_TX_PARSE_2ND_BD_SYN_FLG (0x1<<1) | ||
4364 | #define ETH_TX_PARSE_2ND_BD_SYN_FLG_SHIFT 1 | ||
4365 | #define ETH_TX_PARSE_2ND_BD_RST_FLG (0x1<<2) | ||
4366 | #define ETH_TX_PARSE_2ND_BD_RST_FLG_SHIFT 2 | ||
4367 | #define ETH_TX_PARSE_2ND_BD_PSH_FLG (0x1<<3) | ||
4368 | #define ETH_TX_PARSE_2ND_BD_PSH_FLG_SHIFT 3 | ||
4369 | #define ETH_TX_PARSE_2ND_BD_ACK_FLG (0x1<<4) | ||
4370 | #define ETH_TX_PARSE_2ND_BD_ACK_FLG_SHIFT 4 | ||
4371 | #define ETH_TX_PARSE_2ND_BD_URG_FLG (0x1<<5) | ||
4372 | #define ETH_TX_PARSE_2ND_BD_URG_FLG_SHIFT 5 | ||
4373 | #define ETH_TX_PARSE_2ND_BD_ECE_FLG (0x1<<6) | ||
4374 | #define ETH_TX_PARSE_2ND_BD_ECE_FLG_SHIFT 6 | ||
4375 | #define ETH_TX_PARSE_2ND_BD_CWR_FLG (0x1<<7) | ||
4376 | #define ETH_TX_PARSE_2ND_BD_CWR_FLG_SHIFT 7 | ||
4377 | u8 reserved2; | ||
4378 | u8 tunnel_udp_hdr_start_w; | ||
4379 | u8 fw_ip_hdr_to_payload_w; | ||
4380 | __le16 fw_ip_csum_wo_len_flags_frag; | ||
4381 | __le16 hw_ip_id; | ||
4382 | __le32 tcp_send_seq; | ||
4383 | }; | ||
4384 | |||
4385 | /* The last BD in the BD memory will hold a pointer to the next BD memory */ | ||
4256 | struct eth_tx_next_bd { | 4386 | struct eth_tx_next_bd { |
4257 | __le32 addr_lo; | 4387 | __le32 addr_lo; |
4258 | __le32 addr_hi; | 4388 | __le32 addr_hi; |
@@ -4267,6 +4397,7 @@ union eth_tx_bd_types { | |||
4267 | struct eth_tx_bd reg_bd; | 4397 | struct eth_tx_bd reg_bd; |
4268 | struct eth_tx_parse_bd_e1x parse_bd_e1x; | 4398 | struct eth_tx_parse_bd_e1x parse_bd_e1x; |
4269 | struct eth_tx_parse_bd_e2 parse_bd_e2; | 4399 | struct eth_tx_parse_bd_e2 parse_bd_e2; |
4400 | struct eth_tx_parse_2nd_bd parse_2nd_bd; | ||
4270 | struct eth_tx_next_bd next_bd; | 4401 | struct eth_tx_next_bd next_bd; |
4271 | }; | 4402 | }; |
4272 | 4403 | ||
@@ -4678,10 +4809,10 @@ enum common_spqe_cmd_id { | |||
4678 | RAMROD_CMD_ID_COMMON_STOP_TRAFFIC, | 4809 | RAMROD_CMD_ID_COMMON_STOP_TRAFFIC, |
4679 | RAMROD_CMD_ID_COMMON_START_TRAFFIC, | 4810 | RAMROD_CMD_ID_COMMON_START_TRAFFIC, |
4680 | RAMROD_CMD_ID_COMMON_AFEX_VIF_LISTS, | 4811 | RAMROD_CMD_ID_COMMON_AFEX_VIF_LISTS, |
4812 | RAMROD_CMD_ID_COMMON_SET_TIMESYNC, | ||
4681 | MAX_COMMON_SPQE_CMD_ID | 4813 | MAX_COMMON_SPQE_CMD_ID |
4682 | }; | 4814 | }; |
4683 | 4815 | ||
4684 | |||
4685 | /* | 4816 | /* |
4686 | * Per-protocol connection types | 4817 | * Per-protocol connection types |
4687 | */ | 4818 | */ |
@@ -4878,7 +5009,7 @@ struct vf_flr_event_data { | |||
4878 | */ | 5009 | */ |
4879 | struct malicious_vf_event_data { | 5010 | struct malicious_vf_event_data { |
4880 | u8 vf_id; | 5011 | u8 vf_id; |
4881 | u8 reserved0; | 5012 | u8 err_id; |
4882 | u16 reserved1; | 5013 | u16 reserved1; |
4883 | u32 reserved2; | 5014 | u32 reserved2; |
4884 | u32 reserved3; | 5015 | u32 reserved3; |
@@ -4984,10 +5115,10 @@ enum event_ring_opcode { | |||
4984 | EVENT_RING_OPCODE_CLASSIFICATION_RULES, | 5115 | EVENT_RING_OPCODE_CLASSIFICATION_RULES, |
4985 | EVENT_RING_OPCODE_FILTERS_RULES, | 5116 | EVENT_RING_OPCODE_FILTERS_RULES, |
4986 | EVENT_RING_OPCODE_MULTICAST_RULES, | 5117 | EVENT_RING_OPCODE_MULTICAST_RULES, |
5118 | EVENT_RING_OPCODE_SET_TIMESYNC, | ||
4987 | MAX_EVENT_RING_OPCODE | 5119 | MAX_EVENT_RING_OPCODE |
4988 | }; | 5120 | }; |
4989 | 5121 | ||
4990 | |||
4991 | /* | 5122 | /* |
4992 | * Modes for fairness algorithm | 5123 | * Modes for fairness algorithm |
4993 | */ | 5124 | */ |
@@ -5025,14 +5156,18 @@ struct flow_control_configuration { | |||
5025 | */ | 5156 | */ |
5026 | struct function_start_data { | 5157 | struct function_start_data { |
5027 | u8 function_mode; | 5158 | u8 function_mode; |
5028 | u8 reserved; | 5159 | u8 allow_npar_tx_switching; |
5029 | __le16 sd_vlan_tag; | 5160 | __le16 sd_vlan_tag; |
5030 | __le16 vif_id; | 5161 | __le16 vif_id; |
5031 | u8 path_id; | 5162 | u8 path_id; |
5032 | u8 network_cos_mode; | 5163 | u8 network_cos_mode; |
5164 | u8 dmae_cmd_id; | ||
5165 | u8 gre_tunnel_mode; | ||
5166 | u8 gre_tunnel_rss; | ||
5167 | u8 nvgre_clss_en; | ||
5168 | __le16 reserved1[2]; | ||
5033 | }; | 5169 | }; |
5034 | 5170 | ||
5035 | |||
5036 | struct function_update_data { | 5171 | struct function_update_data { |
5037 | u8 vif_id_change_flg; | 5172 | u8 vif_id_change_flg; |
5038 | u8 afex_default_vlan_change_flg; | 5173 | u8 afex_default_vlan_change_flg; |
@@ -5042,14 +5177,19 @@ struct function_update_data { | |||
5042 | __le16 afex_default_vlan; | 5177 | __le16 afex_default_vlan; |
5043 | u8 allowed_priorities; | 5178 | u8 allowed_priorities; |
5044 | u8 network_cos_mode; | 5179 | u8 network_cos_mode; |
5180 | u8 lb_mode_en_change_flg; | ||
5045 | u8 lb_mode_en; | 5181 | u8 lb_mode_en; |
5046 | u8 tx_switch_suspend_change_flg; | 5182 | u8 tx_switch_suspend_change_flg; |
5047 | u8 tx_switch_suspend; | 5183 | u8 tx_switch_suspend; |
5048 | u8 echo; | 5184 | u8 echo; |
5049 | __le16 reserved1; | 5185 | u8 reserved1; |
5186 | u8 update_gre_cfg_flg; | ||
5187 | u8 gre_tunnel_mode; | ||
5188 | u8 gre_tunnel_rss; | ||
5189 | u8 nvgre_clss_en; | ||
5190 | u32 reserved3; | ||
5050 | }; | 5191 | }; |
5051 | 5192 | ||
5052 | |||
5053 | /* | 5193 | /* |
5054 | * FW version stored in the Xstorm RAM | 5194 | * FW version stored in the Xstorm RAM |
5055 | */ | 5195 | */ |
@@ -5076,6 +5216,22 @@ struct fw_version { | |||
5076 | #define __FW_VERSION_RESERVED_SHIFT 4 | 5216 | #define __FW_VERSION_RESERVED_SHIFT 4 |
5077 | }; | 5217 | }; |
5078 | 5218 | ||
5219 | /* GRE RSS Mode */ | ||
5220 | enum gre_rss_mode { | ||
5221 | GRE_OUTER_HEADERS_RSS, | ||
5222 | GRE_INNER_HEADERS_RSS, | ||
5223 | NVGRE_KEY_ENTROPY_RSS, | ||
5224 | MAX_GRE_RSS_MODE | ||
5225 | }; | ||
5226 | |||
5227 | /* GRE Tunnel Mode */ | ||
5228 | enum gre_tunnel_type { | ||
5229 | NO_GRE_TUNNEL, | ||
5230 | NVGRE_TUNNEL, | ||
5231 | L2GRE_TUNNEL, | ||
5232 | IPGRE_TUNNEL, | ||
5233 | MAX_GRE_TUNNEL_TYPE | ||
5234 | }; | ||
5079 | 5235 | ||
5080 | /* | 5236 | /* |
5081 | * Dynamic Host-Coalescing - Driver(host) counters | 5237 | * Dynamic Host-Coalescing - Driver(host) counters |
@@ -5239,6 +5395,26 @@ enum ip_ver { | |||
5239 | MAX_IP_VER | 5395 | MAX_IP_VER |
5240 | }; | 5396 | }; |
5241 | 5397 | ||
5398 | /* | ||
5399 | * Malicious VF error ID | ||
5400 | */ | ||
5401 | enum malicious_vf_error_id { | ||
5402 | VF_PF_CHANNEL_NOT_READY, | ||
5403 | ETH_ILLEGAL_BD_LENGTHS, | ||
5404 | ETH_PACKET_TOO_SHORT, | ||
5405 | ETH_PAYLOAD_TOO_BIG, | ||
5406 | ETH_ILLEGAL_ETH_TYPE, | ||
5407 | ETH_ILLEGAL_LSO_HDR_LEN, | ||
5408 | ETH_TOO_MANY_BDS, | ||
5409 | ETH_ZERO_HDR_NBDS, | ||
5410 | ETH_START_BD_NOT_SET, | ||
5411 | ETH_ILLEGAL_PARSE_NBDS, | ||
5412 | ETH_IPV6_AND_CHECKSUM, | ||
5413 | ETH_VLAN_FLG_INCORRECT, | ||
5414 | ETH_ILLEGAL_LSO_MSS, | ||
5415 | ETH_TUNNEL_NOT_SUPPORTED, | ||
5416 | MAX_MALICIOUS_VF_ERROR_ID | ||
5417 | }; | ||
5242 | 5418 | ||
5243 | /* | 5419 | /* |
5244 | * Multi-function modes | 5420 | * Multi-function modes |
@@ -5383,7 +5559,6 @@ struct protocol_common_spe { | |||
5383 | union protocol_common_specific_data data; | 5559 | union protocol_common_specific_data data; |
5384 | }; | 5560 | }; |
5385 | 5561 | ||
5386 | |||
5387 | /* | 5562 | /* |
5388 | * The send queue element | 5563 | * The send queue element |
5389 | */ | 5564 | */ |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index e5662a141451..c7df223d7a10 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | |||
@@ -2953,14 +2953,15 @@ static unsigned long bnx2x_get_common_flags(struct bnx2x *bp, | |||
2953 | __set_bit(BNX2X_Q_FLG_ACTIVE, &flags); | 2953 | __set_bit(BNX2X_Q_FLG_ACTIVE, &flags); |
2954 | 2954 | ||
2955 | /* tx only connections collect statistics (on the same index as the | 2955 | /* tx only connections collect statistics (on the same index as the |
2956 | * parent connection). The statistics are zeroed when the parent | 2956 | * parent connection). The statistics are zeroed when the parent |
2957 | * connection is initialized. | 2957 | * connection is initialized. |
2958 | */ | 2958 | */ |
2959 | 2959 | ||
2960 | __set_bit(BNX2X_Q_FLG_STATS, &flags); | 2960 | __set_bit(BNX2X_Q_FLG_STATS, &flags); |
2961 | if (zero_stats) | 2961 | if (zero_stats) |
2962 | __set_bit(BNX2X_Q_FLG_ZERO_STATS, &flags); | 2962 | __set_bit(BNX2X_Q_FLG_ZERO_STATS, &flags); |
2963 | 2963 | ||
2964 | __set_bit(BNX2X_Q_FLG_PCSUM_ON_PKT, &flags); | ||
2964 | 2965 | ||
2965 | #ifdef BNX2X_STOP_ON_ERROR | 2966 | #ifdef BNX2X_STOP_ON_ERROR |
2966 | __set_bit(BNX2X_Q_FLG_TX_SEC, &flags); | 2967 | __set_bit(BNX2X_Q_FLG_TX_SEC, &flags); |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c index 6b03acd5d9ad..66ab25908086 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c | |||
@@ -476,7 +476,8 @@ static int bnx2x_check_mac_add(struct bnx2x *bp, | |||
476 | 476 | ||
477 | /* Check if a requested MAC already exists */ | 477 | /* Check if a requested MAC already exists */ |
478 | list_for_each_entry(pos, &o->head, link) | 478 | list_for_each_entry(pos, &o->head, link) |
479 | if (!memcmp(data->mac.mac, pos->u.mac.mac, ETH_ALEN)) | 479 | if (!memcmp(data->mac.mac, pos->u.mac.mac, ETH_ALEN) && |
480 | (data->mac.is_inner_mac == pos->u.mac.is_inner_mac)) | ||
480 | return -EEXIST; | 481 | return -EEXIST; |
481 | 482 | ||
482 | return 0; | 483 | return 0; |
@@ -509,7 +510,9 @@ static int bnx2x_check_vlan_mac_add(struct bnx2x *bp, | |||
509 | list_for_each_entry(pos, &o->head, link) | 510 | list_for_each_entry(pos, &o->head, link) |
510 | if ((data->vlan_mac.vlan == pos->u.vlan_mac.vlan) && | 511 | if ((data->vlan_mac.vlan == pos->u.vlan_mac.vlan) && |
511 | (!memcmp(data->vlan_mac.mac, pos->u.vlan_mac.mac, | 512 | (!memcmp(data->vlan_mac.mac, pos->u.vlan_mac.mac, |
512 | ETH_ALEN))) | 513 | ETH_ALEN)) && |
514 | (data->vlan_mac.is_inner_mac == | ||
515 | pos->u.vlan_mac.is_inner_mac)) | ||
513 | return -EEXIST; | 516 | return -EEXIST; |
514 | 517 | ||
515 | return 0; | 518 | return 0; |
@@ -527,7 +530,8 @@ static struct bnx2x_vlan_mac_registry_elem * | |||
527 | DP(BNX2X_MSG_SP, "Checking MAC %pM for DEL command\n", data->mac.mac); | 530 | DP(BNX2X_MSG_SP, "Checking MAC %pM for DEL command\n", data->mac.mac); |
528 | 531 | ||
529 | list_for_each_entry(pos, &o->head, link) | 532 | list_for_each_entry(pos, &o->head, link) |
530 | if (!memcmp(data->mac.mac, pos->u.mac.mac, ETH_ALEN)) | 533 | if ((!memcmp(data->mac.mac, pos->u.mac.mac, ETH_ALEN)) && |
534 | (data->mac.is_inner_mac == pos->u.mac.is_inner_mac)) | ||
531 | return pos; | 535 | return pos; |
532 | 536 | ||
533 | return NULL; | 537 | return NULL; |
@@ -562,7 +566,9 @@ static struct bnx2x_vlan_mac_registry_elem * | |||
562 | list_for_each_entry(pos, &o->head, link) | 566 | list_for_each_entry(pos, &o->head, link) |
563 | if ((data->vlan_mac.vlan == pos->u.vlan_mac.vlan) && | 567 | if ((data->vlan_mac.vlan == pos->u.vlan_mac.vlan) && |
564 | (!memcmp(data->vlan_mac.mac, pos->u.vlan_mac.mac, | 568 | (!memcmp(data->vlan_mac.mac, pos->u.vlan_mac.mac, |
565 | ETH_ALEN))) | 569 | ETH_ALEN)) && |
570 | (data->vlan_mac.is_inner_mac == | ||
571 | pos->u.vlan_mac.is_inner_mac)) | ||
566 | return pos; | 572 | return pos; |
567 | 573 | ||
568 | return NULL; | 574 | return NULL; |
@@ -759,6 +765,8 @@ static void bnx2x_set_one_mac_e2(struct bnx2x *bp, | |||
759 | bnx2x_set_fw_mac_addr(&rule_entry->mac.mac_msb, | 765 | bnx2x_set_fw_mac_addr(&rule_entry->mac.mac_msb, |
760 | &rule_entry->mac.mac_mid, | 766 | &rule_entry->mac.mac_mid, |
761 | &rule_entry->mac.mac_lsb, mac); | 767 | &rule_entry->mac.mac_lsb, mac); |
768 | rule_entry->mac.inner_mac = | ||
769 | cpu_to_le16(elem->cmd_data.vlan_mac.u.mac.is_inner_mac); | ||
762 | 770 | ||
763 | /* MOVE: Add a rule that will add this MAC to the target Queue */ | 771 | /* MOVE: Add a rule that will add this MAC to the target Queue */ |
764 | if (cmd == BNX2X_VLAN_MAC_MOVE) { | 772 | if (cmd == BNX2X_VLAN_MAC_MOVE) { |
@@ -775,6 +783,9 @@ static void bnx2x_set_one_mac_e2(struct bnx2x *bp, | |||
775 | bnx2x_set_fw_mac_addr(&rule_entry->mac.mac_msb, | 783 | bnx2x_set_fw_mac_addr(&rule_entry->mac.mac_msb, |
776 | &rule_entry->mac.mac_mid, | 784 | &rule_entry->mac.mac_mid, |
777 | &rule_entry->mac.mac_lsb, mac); | 785 | &rule_entry->mac.mac_lsb, mac); |
786 | rule_entry->mac.inner_mac = | ||
787 | cpu_to_le16(elem->cmd_data.vlan_mac. | ||
788 | u.mac.is_inner_mac); | ||
778 | } | 789 | } |
779 | 790 | ||
780 | /* Set the ramrod data header */ | 791 | /* Set the ramrod data header */ |
@@ -963,7 +974,8 @@ static void bnx2x_set_one_vlan_mac_e2(struct bnx2x *bp, | |||
963 | bnx2x_set_fw_mac_addr(&rule_entry->pair.mac_msb, | 974 | bnx2x_set_fw_mac_addr(&rule_entry->pair.mac_msb, |
964 | &rule_entry->pair.mac_mid, | 975 | &rule_entry->pair.mac_mid, |
965 | &rule_entry->pair.mac_lsb, mac); | 976 | &rule_entry->pair.mac_lsb, mac); |
966 | 977 | rule_entry->pair.inner_mac = | |
978 | cpu_to_le16(elem->cmd_data.vlan_mac.u.vlan_mac.is_inner_mac); | ||
967 | /* MOVE: Add a rule that will add this MAC to the target Queue */ | 979 | /* MOVE: Add a rule that will add this MAC to the target Queue */ |
968 | if (cmd == BNX2X_VLAN_MAC_MOVE) { | 980 | if (cmd == BNX2X_VLAN_MAC_MOVE) { |
969 | rule_entry++; | 981 | rule_entry++; |
@@ -980,6 +992,9 @@ static void bnx2x_set_one_vlan_mac_e2(struct bnx2x *bp, | |||
980 | bnx2x_set_fw_mac_addr(&rule_entry->pair.mac_msb, | 992 | bnx2x_set_fw_mac_addr(&rule_entry->pair.mac_msb, |
981 | &rule_entry->pair.mac_mid, | 993 | &rule_entry->pair.mac_mid, |
982 | &rule_entry->pair.mac_lsb, mac); | 994 | &rule_entry->pair.mac_lsb, mac); |
995 | rule_entry->pair.inner_mac = | ||
996 | cpu_to_le16(elem->cmd_data.vlan_mac.u. | ||
997 | vlan_mac.is_inner_mac); | ||
983 | } | 998 | } |
984 | 999 | ||
985 | /* Set the ramrod data header */ | 1000 | /* Set the ramrod data header */ |
@@ -4417,6 +4432,10 @@ static void bnx2x_q_fill_init_tx_data(struct bnx2x_queue_sp_obj *o, | |||
4417 | tx_data->force_default_pri_flg = | 4432 | tx_data->force_default_pri_flg = |
4418 | test_bit(BNX2X_Q_FLG_FORCE_DEFAULT_PRI, flags); | 4433 | test_bit(BNX2X_Q_FLG_FORCE_DEFAULT_PRI, flags); |
4419 | 4434 | ||
4435 | tx_data->tunnel_non_lso_pcsum_location = | ||
4436 | test_bit(BNX2X_Q_FLG_PCSUM_ON_PKT, flags) ? PCSUM_ON_PKT : | ||
4437 | PCSUM_ON_BD; | ||
4438 | |||
4420 | tx_data->tx_status_block_id = params->fw_sb_id; | 4439 | tx_data->tx_status_block_id = params->fw_sb_id; |
4421 | tx_data->tx_sb_index_number = params->sb_cq_index; | 4440 | tx_data->tx_sb_index_number = params->sb_cq_index; |
4422 | tx_data->tss_leading_client_id = params->tss_leading_cl_id; | 4441 | tx_data->tss_leading_client_id = params->tss_leading_cl_id; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h index ac57e63a08ed..064dba24610d 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h | |||
@@ -100,6 +100,7 @@ struct bnx2x_raw_obj { | |||
100 | /************************* VLAN-MAC commands related parameters ***************/ | 100 | /************************* VLAN-MAC commands related parameters ***************/ |
101 | struct bnx2x_mac_ramrod_data { | 101 | struct bnx2x_mac_ramrod_data { |
102 | u8 mac[ETH_ALEN]; | 102 | u8 mac[ETH_ALEN]; |
103 | u8 is_inner_mac; | ||
103 | }; | 104 | }; |
104 | 105 | ||
105 | struct bnx2x_vlan_ramrod_data { | 106 | struct bnx2x_vlan_ramrod_data { |
@@ -108,6 +109,7 @@ struct bnx2x_vlan_ramrod_data { | |||
108 | 109 | ||
109 | struct bnx2x_vlan_mac_ramrod_data { | 110 | struct bnx2x_vlan_mac_ramrod_data { |
110 | u8 mac[ETH_ALEN]; | 111 | u8 mac[ETH_ALEN]; |
112 | u8 is_inner_mac; | ||
111 | u16 vlan; | 113 | u16 vlan; |
112 | }; | 114 | }; |
113 | 115 | ||
@@ -825,7 +827,8 @@ enum { | |||
825 | BNX2X_Q_FLG_TX_SEC, | 827 | BNX2X_Q_FLG_TX_SEC, |
826 | BNX2X_Q_FLG_ANTI_SPOOF, | 828 | BNX2X_Q_FLG_ANTI_SPOOF, |
827 | BNX2X_Q_FLG_SILENT_VLAN_REM, | 829 | BNX2X_Q_FLG_SILENT_VLAN_REM, |
828 | BNX2X_Q_FLG_FORCE_DEFAULT_PRI | 830 | BNX2X_Q_FLG_FORCE_DEFAULT_PRI, |
831 | BNX2X_Q_FLG_PCSUM_ON_PKT | ||
829 | }; | 832 | }; |
830 | 833 | ||
831 | /* Queue type options: queue type may be a compination of below. */ | 834 | /* Queue type options: queue type may be a compination of below. */ |