aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2013-03-11 01:17:52 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-12 07:54:26 -0400
commit91226790bbe2dbfbba48dd79d49f2b38ef10eb97 (patch)
tree7192ce4c32dade780bb439f86ead0c221dac5e3b /drivers
parent82594f8f47bc1167d55776cfb599633ec4ac8e77 (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.h2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c122
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_fw_defs.h87
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h235
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c5
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c29
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h5
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 */
3089static noinline u16 bnx2x_tx_split(struct bnx2x *bp, 3089static 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)))
3134static inline __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) 3133static __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
3149static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) 3148static 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
3257static inline void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data, 3256static 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 */
3275static inline void bnx2x_set_pbd_gso(struct sk_buff *skb, 3274static 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 */
3310static inline u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb, 3309static 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
3331static inline void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb, 3330static 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 */
3355static inline u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb, 3351static 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
117struct mac_addr {
118 u32 upper;
119 u32 lower;
120};
117 121
118struct shared_hw_cfg { /* NVRAM Offset */ 122struct 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 */
3636struct eth_classify_mac_cmd { 3648struct 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 */
3649struct eth_classify_pair_cmd { 3662struct 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 */
3889struct 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 */
3914struct 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 */
3943union 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 */
3875struct eth_multicast_rules_cmd { 3949struct 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 */
4211enum 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 */
4220enum 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 */
4233struct eth_tx_parse_bd_e2 { 4325struct 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 */
4343struct 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 */
4256struct eth_tx_next_bd { 4386struct 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 */
4879struct malicious_vf_event_data { 5010struct 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 */
5026struct function_start_data { 5157struct 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
5036struct function_update_data { 5171struct 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 */
5220enum 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 */
5228enum 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 */
5401enum 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 ***************/
101struct bnx2x_mac_ramrod_data { 101struct bnx2x_mac_ramrod_data {
102 u8 mac[ETH_ALEN]; 102 u8 mac[ETH_ALEN];
103 u8 is_inner_mac;
103}; 104};
104 105
105struct bnx2x_vlan_ramrod_data { 106struct bnx2x_vlan_ramrod_data {
@@ -108,6 +109,7 @@ struct bnx2x_vlan_ramrod_data {
108 109
109struct bnx2x_vlan_mac_ramrod_data { 110struct 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. */