aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x_cmn.c
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2010-10-05 23:28:26 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-06 17:10:37 -0400
commitf2e0899f0f275cc3f5e9c9726178d7d0ac19b2db (patch)
tree436144046a751427bdd2e3fd284688582d2efe61 /drivers/net/bnx2x/bnx2x_cmn.c
parent8fe23fbd94af5a4c117fd0eb2f1c3f492f79efe8 (diff)
bnx2x: Add 57712 support
57712 HW supported with same set of features as for 57710/57711 Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_cmn.c')
-rw-r--r--drivers/net/bnx2x/bnx2x_cmn.c275
1 files changed, 181 insertions, 94 deletions
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index ae05987e647e..cffa778ec5bf 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -18,7 +18,7 @@
18 18
19#include <linux/etherdevice.h> 19#include <linux/etherdevice.h>
20#include <linux/ip.h> 20#include <linux/ip.h>
21#include <linux/ipv6.h> 21#include <net/ipv6.h>
22#include <net/ip6_checksum.h> 22#include <net/ip6_checksum.h>
23#include <linux/firmware.h> 23#include <linux/firmware.h>
24#include "bnx2x_cmn.h" 24#include "bnx2x_cmn.h"
@@ -118,16 +118,10 @@ int bnx2x_tx_int(struct bnx2x_fastpath *fp)
118 118
119 pkt_cons = TX_BD(sw_cons); 119 pkt_cons = TX_BD(sw_cons);
120 120
121 /* prefetch(bp->tx_buf_ring[pkt_cons].skb); */ 121 DP(NETIF_MSG_TX_DONE, "queue[%d]: hw_cons %u sw_cons %u "
122 " pkt_cons %u\n",
123 fp->index, hw_cons, sw_cons, pkt_cons);
122 124
123 DP(NETIF_MSG_TX_DONE, "hw_cons %u sw_cons %u pkt_cons %u\n",
124 hw_cons, sw_cons, pkt_cons);
125
126/* if (NEXT_TX_IDX(sw_cons) != hw_cons) {
127 rmb();
128 prefetch(fp->tx_buf_ring[NEXT_TX_IDX(sw_cons)].skb);
129 }
130*/
131 bd_cons = bnx2x_free_tx_pkt(bp, fp, pkt_cons); 125 bd_cons = bnx2x_free_tx_pkt(bp, fp, pkt_cons);
132 sw_cons++; 126 sw_cons++;
133 } 127 }
@@ -749,8 +743,9 @@ void bnx2x_link_report(struct bnx2x *bp)
749 u16 vn_max_rate; 743 u16 vn_max_rate;
750 744
751 vn_max_rate = 745 vn_max_rate =
752 ((bp->mf_config & FUNC_MF_CFG_MAX_BW_MASK) >> 746 ((bp->mf_config[BP_VN(bp)] &
753 FUNC_MF_CFG_MAX_BW_SHIFT) * 100; 747 FUNC_MF_CFG_MAX_BW_MASK) >>
748 FUNC_MF_CFG_MAX_BW_SHIFT) * 100;
754 if (vn_max_rate < line_speed) 749 if (vn_max_rate < line_speed)
755 line_speed = vn_max_rate; 750 line_speed = vn_max_rate;
756 } 751 }
@@ -912,14 +907,15 @@ void bnx2x_init_rx_rings(struct bnx2x *bp)
912 if (j != 0) 907 if (j != 0)
913 continue; 908 continue;
914 909
915 REG_WR(bp, BAR_USTRORM_INTMEM + 910 if (!CHIP_IS_E2(bp)) {
916 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func), 911 REG_WR(bp, BAR_USTRORM_INTMEM +
917 U64_LO(fp->rx_comp_mapping)); 912 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func),
918 REG_WR(bp, BAR_USTRORM_INTMEM + 913 U64_LO(fp->rx_comp_mapping));
919 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4, 914 REG_WR(bp, BAR_USTRORM_INTMEM +
920 U64_HI(fp->rx_comp_mapping)); 915 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4,
916 U64_HI(fp->rx_comp_mapping));
917 }
921 } 918 }
922
923} 919}
924static void bnx2x_free_tx_skbs(struct bnx2x *bp) 920static void bnx2x_free_tx_skbs(struct bnx2x *bp)
925{ 921{
@@ -1308,23 +1304,27 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1308 } 1304 }
1309 1305
1310 } else { 1306 } else {
1307 int path = BP_PATH(bp);
1311 int port = BP_PORT(bp); 1308 int port = BP_PORT(bp);
1312 1309
1313 DP(NETIF_MSG_IFUP, "NO MCP - load counts %d, %d, %d\n", 1310 DP(NETIF_MSG_IFUP, "NO MCP - load counts[%d] %d, %d, %d\n",
1314 load_count[0], load_count[1], load_count[2]); 1311 path, load_count[path][0], load_count[path][1],
1315 load_count[0]++; 1312 load_count[path][2]);
1316 load_count[1 + port]++; 1313 load_count[path][0]++;
1317 DP(NETIF_MSG_IFUP, "NO MCP - new load counts %d, %d, %d\n", 1314 load_count[path][1 + port]++;
1318 load_count[0], load_count[1], load_count[2]); 1315 DP(NETIF_MSG_IFUP, "NO MCP - new load counts[%d] %d, %d, %d\n",
1319 if (load_count[0] == 1) 1316 path, load_count[path][0], load_count[path][1],
1317 load_count[path][2]);
1318 if (load_count[path][0] == 1)
1320 load_code = FW_MSG_CODE_DRV_LOAD_COMMON; 1319 load_code = FW_MSG_CODE_DRV_LOAD_COMMON;
1321 else if (load_count[1 + port] == 1) 1320 else if (load_count[path][1 + port] == 1)
1322 load_code = FW_MSG_CODE_DRV_LOAD_PORT; 1321 load_code = FW_MSG_CODE_DRV_LOAD_PORT;
1323 else 1322 else
1324 load_code = FW_MSG_CODE_DRV_LOAD_FUNCTION; 1323 load_code = FW_MSG_CODE_DRV_LOAD_FUNCTION;
1325 } 1324 }
1326 1325
1327 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) || 1326 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
1327 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) ||
1328 (load_code == FW_MSG_CODE_DRV_LOAD_PORT)) 1328 (load_code == FW_MSG_CODE_DRV_LOAD_PORT))
1329 bp->port.pmf = 1; 1329 bp->port.pmf = 1;
1330 else 1330 else
@@ -1349,7 +1349,8 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1349 /* Setup NIC internals and enable interrupts */ 1349 /* Setup NIC internals and enable interrupts */
1350 bnx2x_nic_init(bp, load_code); 1350 bnx2x_nic_init(bp, load_code);
1351 1351
1352 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) && 1352 if (((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
1353 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP)) &&
1353 (bp->common.shmem2_base)) 1354 (bp->common.shmem2_base))
1354 SHMEM2_WR(bp, dcc_support, 1355 SHMEM2_WR(bp, dcc_support,
1355 (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV | 1356 (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV |
@@ -1389,11 +1390,11 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1389#endif 1390#endif
1390 } 1391 }
1391 1392
1392 if (CHIP_IS_E1H(bp)) 1393 if (!CHIP_IS_E1(bp) &&
1393 if (bp->mf_config & FUNC_MF_CFG_FUNC_DISABLED) { 1394 (bp->mf_config[BP_VN(bp)] & FUNC_MF_CFG_FUNC_DISABLED)) {
1394 DP(NETIF_MSG_IFUP, "mf_cfg function disabled\n"); 1395 DP(NETIF_MSG_IFUP, "mf_cfg function disabled\n");
1395 bp->flags |= MF_FUNC_DIS; 1396 bp->flags |= MF_FUNC_DIS;
1396 } 1397 }
1397 1398
1398#ifdef BCM_CNIC 1399#ifdef BCM_CNIC
1399 /* Enable Timer scan */ 1400 /* Enable Timer scan */
@@ -1527,8 +1528,10 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
1527 bp->rx_mode = BNX2X_RX_MODE_NONE; 1528 bp->rx_mode = BNX2X_RX_MODE_NONE;
1528 bnx2x_set_storm_rx_mode(bp); 1529 bnx2x_set_storm_rx_mode(bp);
1529 1530
1531 /* Stop Tx */
1532 bnx2x_tx_disable(bp);
1530 del_timer_sync(&bp->timer); 1533 del_timer_sync(&bp->timer);
1531 SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb, 1534 SHMEM_WR(bp, func_mb[BP_FW_MB_IDX(bp)].drv_pulse_mb,
1532 (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq)); 1535 (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq));
1533 bnx2x_stats_handle(bp, STATS_EVENT_STOP); 1536 bnx2x_stats_handle(bp, STATS_EVENT_STOP);
1534 1537
@@ -1855,6 +1858,120 @@ exit_lbl:
1855} 1858}
1856#endif 1859#endif
1857 1860
1861static inline void bnx2x_set_pbd_gso_e2(struct sk_buff *skb,
1862 struct eth_tx_parse_bd_e2 *pbd,
1863 u32 xmit_type)
1864{
1865 pbd->parsing_data |= cpu_to_le16(skb_shinfo(skb)->gso_size) <<
1866 ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT;
1867 if ((xmit_type & XMIT_GSO_V6) &&
1868 (ipv6_hdr(skb)->nexthdr == NEXTHDR_IPV6))
1869 pbd->parsing_data |= ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR;
1870}
1871
1872/**
1873 * Update PBD in GSO case.
1874 *
1875 * @param skb
1876 * @param tx_start_bd
1877 * @param pbd
1878 * @param xmit_type
1879 */
1880static inline void bnx2x_set_pbd_gso(struct sk_buff *skb,
1881 struct eth_tx_parse_bd_e1x *pbd,
1882 u32 xmit_type)
1883{
1884 pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
1885 pbd->tcp_send_seq = swab32(tcp_hdr(skb)->seq);
1886 pbd->tcp_flags = pbd_tcp_flags(skb);
1887
1888 if (xmit_type & XMIT_GSO_V4) {
1889 pbd->ip_id = swab16(ip_hdr(skb)->id);
1890 pbd->tcp_pseudo_csum =
1891 swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
1892 ip_hdr(skb)->daddr,
1893 0, IPPROTO_TCP, 0));
1894
1895 } else
1896 pbd->tcp_pseudo_csum =
1897 swab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
1898 &ipv6_hdr(skb)->daddr,
1899 0, IPPROTO_TCP, 0));
1900
1901 pbd->global_data |= ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN;
1902}
1903/**
1904 *
1905 * @param skb
1906 * @param tx_start_bd
1907 * @param pbd_e2
1908 * @param xmit_type
1909 *
1910 * @return header len
1911 */
1912static inline u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb,
1913 struct eth_tx_parse_bd_e2 *pbd,
1914 u32 xmit_type)
1915{
1916 pbd->parsing_data |= cpu_to_le16(tcp_hdrlen(skb)/4) <<
1917 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT;
1918
1919 pbd->parsing_data |= cpu_to_le16(((unsigned char *)tcp_hdr(skb) -
1920 skb->data) / 2) <<
1921 ETH_TX_PARSE_BD_E2_TCP_HDR_START_OFFSET_W_SHIFT;
1922
1923 return skb_transport_header(skb) + tcp_hdrlen(skb) - skb->data;
1924}
1925
1926/**
1927 *
1928 * @param skb
1929 * @param tx_start_bd
1930 * @param pbd
1931 * @param xmit_type
1932 *
1933 * @return Header length
1934 */
1935static inline u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
1936 struct eth_tx_parse_bd_e1x *pbd,
1937 u32 xmit_type)
1938{
1939 u8 hlen = (skb_network_header(skb) - skb->data) / 2;
1940
1941 /* for now NS flag is not used in Linux */
1942 pbd->global_data =
1943 (hlen | ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
1944 ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT));
1945
1946 pbd->ip_hlen_w = (skb_transport_header(skb) -
1947 skb_network_header(skb)) / 2;
1948
1949 hlen += pbd->ip_hlen_w + tcp_hdrlen(skb) / 2;
1950
1951 pbd->total_hlen_w = cpu_to_le16(hlen);
1952 hlen = hlen*2;
1953
1954 if (xmit_type & XMIT_CSUM_TCP) {
1955 pbd->tcp_pseudo_csum = swab16(tcp_hdr(skb)->check);
1956
1957 } else {
1958 s8 fix = SKB_CS_OFF(skb); /* signed! */
1959
1960 DP(NETIF_MSG_TX_QUEUED,
1961 "hlen %d fix %d csum before fix %x\n",
1962 le16_to_cpu(pbd->total_hlen_w), fix, SKB_CS(skb));
1963
1964 /* HW bug: fixup the CSUM */
1965 pbd->tcp_pseudo_csum =
1966 bnx2x_csum_fix(skb_transport_header(skb),
1967 SKB_CS(skb), fix);
1968
1969 DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n",
1970 pbd->tcp_pseudo_csum);
1971 }
1972
1973 return hlen;
1974}
1858/* called with netif_tx_lock 1975/* called with netif_tx_lock
1859 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call 1976 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call
1860 * netif_wake_queue() 1977 * netif_wake_queue()
@@ -1868,6 +1985,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
1868 struct eth_tx_start_bd *tx_start_bd; 1985 struct eth_tx_start_bd *tx_start_bd;
1869 struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL; 1986 struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL;
1870 struct eth_tx_parse_bd_e1x *pbd_e1x = NULL; 1987 struct eth_tx_parse_bd_e1x *pbd_e1x = NULL;
1988 struct eth_tx_parse_bd_e2 *pbd_e2 = NULL;
1871 u16 pkt_prod, bd_prod; 1989 u16 pkt_prod, bd_prod;
1872 int nbd, fp_index; 1990 int nbd, fp_index;
1873 dma_addr_t mapping; 1991 dma_addr_t mapping;
@@ -1895,9 +2013,9 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
1895 return NETDEV_TX_BUSY; 2013 return NETDEV_TX_BUSY;
1896 } 2014 }
1897 2015
1898 DP(NETIF_MSG_TX_QUEUED, "SKB: summed %x protocol %x protocol(%x,%x)" 2016 DP(NETIF_MSG_TX_QUEUED, "queue[%d]: SKB: summed %x protocol %x "
1899 " gso type %x xmit_type %x\n", 2017 "protocol(%x,%x) gso type %x xmit_type %x\n",
1900 skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr, 2018 fp_index, skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr,
1901 ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type); 2019 ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type);
1902 2020
1903 eth = (struct ethhdr *)skb->data; 2021 eth = (struct ethhdr *)skb->data;
@@ -1988,44 +2106,21 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
1988 tx_start_bd->bd_flags.as_bitfield |= 2106 tx_start_bd->bd_flags.as_bitfield |=
1989 ETH_TX_BD_FLAGS_IS_UDP; 2107 ETH_TX_BD_FLAGS_IS_UDP;
1990 } 2108 }
1991 pbd_e1x = &fp->tx_desc_ring[bd_prod].parse_bd_e1x;
1992 memset(pbd_e1x, 0, sizeof(struct eth_tx_parse_bd_e1x));
1993 /* Set PBD in checksum offload case */
1994 if (xmit_type & XMIT_CSUM) {
1995 hlen = (skb_network_header(skb) - skb->data) / 2;
1996 2109
1997 /* for now NS flag is not used in Linux */ 2110 if (CHIP_IS_E2(bp)) {
1998 pbd_e1x->global_data = 2111 pbd_e2 = &fp->tx_desc_ring[bd_prod].parse_bd_e2;
1999 (hlen | ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) << 2112 memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2));
2000 ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT)); 2113 /* Set PBD in checksum offload case */
2001 2114 if (xmit_type & XMIT_CSUM)
2002 pbd_e1x->ip_hlen_w = (skb_transport_header(skb) - 2115 hlen = bnx2x_set_pbd_csum_e2(bp,
2003 skb_network_header(skb)) / 2; 2116 skb, pbd_e2, xmit_type);
2004 2117 } else {
2005 hlen += pbd_e1x->ip_hlen_w + tcp_hdrlen(skb) / 2; 2118 pbd_e1x = &fp->tx_desc_ring[bd_prod].parse_bd_e1x;
2006 2119 memset(pbd_e1x, 0, sizeof(struct eth_tx_parse_bd_e1x));
2007 pbd_e1x->total_hlen_w = cpu_to_le16(hlen); 2120 /* Set PBD in checksum offload case */
2008 hlen = hlen*2; 2121 if (xmit_type & XMIT_CSUM)
2009 2122 hlen = bnx2x_set_pbd_csum(bp, skb, pbd_e1x, xmit_type);
2010 if (xmit_type & XMIT_CSUM_TCP) {
2011 pbd_e1x->tcp_pseudo_csum = swab16(tcp_hdr(skb)->check);
2012
2013 } else {
2014 s8 fix = SKB_CS_OFF(skb); /* signed! */
2015
2016 DP(NETIF_MSG_TX_QUEUED,
2017 "hlen %d fix %d csum before fix %x\n",
2018 le16_to_cpu(pbd_e1x->total_hlen_w),
2019 fix, SKB_CS(skb));
2020
2021 /* HW bug: fixup the CSUM */
2022 pbd_e1x->tcp_pseudo_csum =
2023 bnx2x_csum_fix(skb_transport_header(skb),
2024 SKB_CS(skb), fix);
2025 2123
2026 DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n",
2027 pbd_e1x->tcp_pseudo_csum);
2028 }
2029 } 2124 }
2030 2125
2031 mapping = dma_map_single(&bp->pdev->dev, skb->data, 2126 mapping = dma_map_single(&bp->pdev->dev, skb->data,
@@ -2057,26 +2152,10 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
2057 if (unlikely(skb_headlen(skb) > hlen)) 2152 if (unlikely(skb_headlen(skb) > hlen))
2058 bd_prod = bnx2x_tx_split(bp, fp, tx_buf, &tx_start_bd, 2153 bd_prod = bnx2x_tx_split(bp, fp, tx_buf, &tx_start_bd,
2059 hlen, bd_prod, ++nbd); 2154 hlen, bd_prod, ++nbd);
2060 2155 if (CHIP_IS_E2(bp))
2061 pbd_e1x->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); 2156 bnx2x_set_pbd_gso_e2(skb, pbd_e2, xmit_type);
2062 pbd_e1x->tcp_send_seq = swab32(tcp_hdr(skb)->seq); 2157 else
2063 pbd_e1x->tcp_flags = pbd_tcp_flags(skb); 2158 bnx2x_set_pbd_gso(skb, pbd_e1x, xmit_type);
2064
2065 if (xmit_type & XMIT_GSO_V4) {
2066 pbd_e1x->ip_id = swab16(ip_hdr(skb)->id);
2067 pbd_e1x->tcp_pseudo_csum =
2068 swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
2069 ip_hdr(skb)->daddr,
2070 0, IPPROTO_TCP, 0));
2071
2072 } else
2073 pbd_e1x->tcp_pseudo_csum =
2074 swab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
2075 &ipv6_hdr(skb)->daddr,
2076 0, IPPROTO_TCP, 0));
2077
2078 pbd_e1x->global_data |=
2079 ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN;
2080 } 2159 }
2081 tx_data_bd = (struct eth_tx_bd *)tx_start_bd; 2160 tx_data_bd = (struct eth_tx_bd *)tx_start_bd;
2082 2161
@@ -2124,7 +2203,13 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
2124 pbd_e1x->ip_id, pbd_e1x->lso_mss, pbd_e1x->tcp_flags, 2203 pbd_e1x->ip_id, pbd_e1x->lso_mss, pbd_e1x->tcp_flags,
2125 pbd_e1x->tcp_pseudo_csum, pbd_e1x->tcp_send_seq, 2204 pbd_e1x->tcp_pseudo_csum, pbd_e1x->tcp_send_seq,
2126 le16_to_cpu(pbd_e1x->total_hlen_w)); 2205 le16_to_cpu(pbd_e1x->total_hlen_w));
2127 2206 if (pbd_e2)
2207 DP(NETIF_MSG_TX_QUEUED,
2208 "PBD (E2) @%p dst %x %x %x src %x %x %x parsing_data %x\n",
2209 pbd_e2, pbd_e2->dst_mac_addr_hi, pbd_e2->dst_mac_addr_mid,
2210 pbd_e2->dst_mac_addr_lo, pbd_e2->src_mac_addr_hi,
2211 pbd_e2->src_mac_addr_mid, pbd_e2->src_mac_addr_lo,
2212 pbd_e2->parsing_data);
2128 DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod); 2213 DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod);
2129 2214
2130 /* 2215 /*
@@ -2327,6 +2412,8 @@ int bnx2x_resume(struct pci_dev *pdev)
2327 bnx2x_set_power_state(bp, PCI_D0); 2412 bnx2x_set_power_state(bp, PCI_D0);
2328 netif_device_attach(dev); 2413 netif_device_attach(dev);
2329 2414
2415 /* Since the chip was reset, clear the FW sequence number */
2416 bp->fw_seq = 0;
2330 rc = bnx2x_nic_load(bp, LOAD_OPEN); 2417 rc = bnx2x_nic_load(bp, LOAD_OPEN);
2331 2418
2332 rtnl_unlock(); 2419 rtnl_unlock();