aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/qlogic')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c15
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c4
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge.h2
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c36
6 files changed, 44 insertions, 18 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 32a95c105e4e..fd0829c2839d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -1619,6 +1619,12 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)
1619 } 1619 }
1620 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1); 1620 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1);
1621 1621
1622 /* Make sure carrier is off and queue is stopped during loopback */
1623 if (netif_running(netdev)) {
1624 netif_carrier_off(netdev);
1625 netif_stop_queue(netdev);
1626 }
1627
1622 ret = qlcnic_do_lb_test(adapter, mode); 1628 ret = qlcnic_do_lb_test(adapter, mode);
1623 1629
1624 qlcnic_83xx_clear_lb_mode(adapter, mode); 1630 qlcnic_83xx_clear_lb_mode(adapter, mode);
@@ -2944,6 +2950,7 @@ static u64 *qlcnic_83xx_fill_stats(struct qlcnic_adapter *adapter,
2944void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data) 2950void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
2945{ 2951{
2946 struct qlcnic_cmd_args cmd; 2952 struct qlcnic_cmd_args cmd;
2953 struct net_device *netdev = adapter->netdev;
2947 int ret = 0; 2954 int ret = 0;
2948 2955
2949 qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_STATISTICS); 2956 qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_STATISTICS);
@@ -2953,7 +2960,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
2953 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, 2960 data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
2954 QLC_83XX_STAT_TX, &ret); 2961 QLC_83XX_STAT_TX, &ret);
2955 if (ret) { 2962 if (ret) {
2956 dev_info(&adapter->pdev->dev, "Error getting MAC stats\n"); 2963 netdev_err(netdev, "Error getting Tx stats\n");
2957 goto out; 2964 goto out;
2958 } 2965 }
2959 /* Get MAC stats */ 2966 /* Get MAC stats */
@@ -2963,8 +2970,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
2963 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, 2970 data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
2964 QLC_83XX_STAT_MAC, &ret); 2971 QLC_83XX_STAT_MAC, &ret);
2965 if (ret) { 2972 if (ret) {
2966 dev_info(&adapter->pdev->dev, 2973 netdev_err(netdev, "Error getting MAC stats\n");
2967 "Error getting Rx stats\n");
2968 goto out; 2974 goto out;
2969 } 2975 }
2970 /* Get Rx stats */ 2976 /* Get Rx stats */
@@ -2974,8 +2980,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
2974 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, 2980 data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
2975 QLC_83XX_STAT_RX, &ret); 2981 QLC_83XX_STAT_RX, &ret);
2976 if (ret) 2982 if (ret)
2977 dev_info(&adapter->pdev->dev, 2983 netdev_err(netdev, "Error getting Rx stats\n");
2978 "Error getting Tx stats\n");
2979out: 2984out:
2980 qlcnic_free_mbx_args(&cmd); 2985 qlcnic_free_mbx_args(&cmd);
2981} 2986}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index 356859b9f21c..d3f8797efcc3 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -362,8 +362,7 @@ set_flags:
362 memcpy(&first_desc->eth_addr, skb->data, ETH_ALEN); 362 memcpy(&first_desc->eth_addr, skb->data, ETH_ALEN);
363 } 363 }
364 opcode = TX_ETHER_PKT; 364 opcode = TX_ETHER_PKT;
365 if ((adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) && 365 if (skb_is_gso(skb)) {
366 skb_shinfo(skb)->gso_size > 0) {
367 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); 366 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
368 first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size); 367 first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
369 first_desc->total_hdr_length = hdr_len; 368 first_desc->total_hdr_length = hdr_len;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index c77675da671f..4e22e794a186 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -198,10 +198,10 @@ beacon_err:
198 } 198 }
199 199
200 err = qlcnic_config_led(adapter, b_state, b_rate); 200 err = qlcnic_config_led(adapter, b_state, b_rate);
201 if (!err) 201 if (!err) {
202 err = len; 202 err = len;
203 else
204 ahw->beacon_state = b_state; 203 ahw->beacon_state = b_state;
204 }
205 205
206 if (test_and_clear_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state)) 206 if (test_and_clear_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state))
207 qlcnic_diag_free_res(adapter->netdev, max_sds_rings); 207 qlcnic_diag_free_res(adapter->netdev, max_sds_rings);
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge.h b/drivers/net/ethernet/qlogic/qlge/qlge.h
index a131d7b5d2fe..7e8d68263963 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge.h
+++ b/drivers/net/ethernet/qlogic/qlge/qlge.h
@@ -18,7 +18,7 @@
18 */ 18 */
19#define DRV_NAME "qlge" 19#define DRV_NAME "qlge"
20#define DRV_STRING "QLogic 10 Gigabit PCI-E Ethernet Driver " 20#define DRV_STRING "QLogic 10 Gigabit PCI-E Ethernet Driver "
21#define DRV_VERSION "v1.00.00.31" 21#define DRV_VERSION "v1.00.00.32"
22 22
23#define WQ_ADDR_ALIGN 0x3 /* 4 byte alignment */ 23#define WQ_ADDR_ALIGN 0x3 /* 4 byte alignment */
24 24
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c b/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c
index 6f316ab23257..0780e039b271 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c
@@ -379,13 +379,13 @@ static int ql_get_settings(struct net_device *ndev,
379 379
380 ecmd->supported = SUPPORTED_10000baseT_Full; 380 ecmd->supported = SUPPORTED_10000baseT_Full;
381 ecmd->advertising = ADVERTISED_10000baseT_Full; 381 ecmd->advertising = ADVERTISED_10000baseT_Full;
382 ecmd->autoneg = AUTONEG_ENABLE;
383 ecmd->transceiver = XCVR_EXTERNAL; 382 ecmd->transceiver = XCVR_EXTERNAL;
384 if ((qdev->link_status & STS_LINK_TYPE_MASK) == 383 if ((qdev->link_status & STS_LINK_TYPE_MASK) ==
385 STS_LINK_TYPE_10GBASET) { 384 STS_LINK_TYPE_10GBASET) {
386 ecmd->supported |= (SUPPORTED_TP | SUPPORTED_Autoneg); 385 ecmd->supported |= (SUPPORTED_TP | SUPPORTED_Autoneg);
387 ecmd->advertising |= (ADVERTISED_TP | ADVERTISED_Autoneg); 386 ecmd->advertising |= (ADVERTISED_TP | ADVERTISED_Autoneg);
388 ecmd->port = PORT_TP; 387 ecmd->port = PORT_TP;
388 ecmd->autoneg = AUTONEG_ENABLE;
389 } else { 389 } else {
390 ecmd->supported |= SUPPORTED_FIBRE; 390 ecmd->supported |= SUPPORTED_FIBRE;
391 ecmd->advertising |= ADVERTISED_FIBRE; 391 ecmd->advertising |= ADVERTISED_FIBRE;
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
index 44cf72ac2489..87463bc701a6 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
@@ -1432,11 +1432,13 @@ map_error:
1432} 1432}
1433 1433
1434/* Categorizing receive firmware frame errors */ 1434/* Categorizing receive firmware frame errors */
1435static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err) 1435static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err,
1436 struct rx_ring *rx_ring)
1436{ 1437{
1437 struct nic_stats *stats = &qdev->nic_stats; 1438 struct nic_stats *stats = &qdev->nic_stats;
1438 1439
1439 stats->rx_err_count++; 1440 stats->rx_err_count++;
1441 rx_ring->rx_errors++;
1440 1442
1441 switch (rx_err & IB_MAC_IOCB_RSP_ERR_MASK) { 1443 switch (rx_err & IB_MAC_IOCB_RSP_ERR_MASK) {
1442 case IB_MAC_IOCB_RSP_ERR_CODE_ERR: 1444 case IB_MAC_IOCB_RSP_ERR_CODE_ERR:
@@ -1472,6 +1474,12 @@ static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
1472 struct bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring); 1474 struct bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1473 struct napi_struct *napi = &rx_ring->napi; 1475 struct napi_struct *napi = &rx_ring->napi;
1474 1476
1477 /* Frame error, so drop the packet. */
1478 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1479 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1480 put_page(lbq_desc->p.pg_chunk.page);
1481 return;
1482 }
1475 napi->dev = qdev->ndev; 1483 napi->dev = qdev->ndev;
1476 1484
1477 skb = napi_get_frags(napi); 1485 skb = napi_get_frags(napi);
@@ -1525,6 +1533,12 @@ static void ql_process_mac_rx_page(struct ql_adapter *qdev,
1525 addr = lbq_desc->p.pg_chunk.va; 1533 addr = lbq_desc->p.pg_chunk.va;
1526 prefetch(addr); 1534 prefetch(addr);
1527 1535
1536 /* Frame error, so drop the packet. */
1537 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1538 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1539 goto err_out;
1540 }
1541
1528 /* The max framesize filter on this chip is set higher than 1542 /* The max framesize filter on this chip is set higher than
1529 * MTU since FCoE uses 2k frames. 1543 * MTU since FCoE uses 2k frames.
1530 */ 1544 */
@@ -1608,6 +1622,13 @@ static void ql_process_mac_rx_skb(struct ql_adapter *qdev,
1608 memcpy(skb_put(new_skb, length), skb->data, length); 1622 memcpy(skb_put(new_skb, length), skb->data, length);
1609 skb = new_skb; 1623 skb = new_skb;
1610 1624
1625 /* Frame error, so drop the packet. */
1626 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1627 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1628 dev_kfree_skb_any(skb);
1629 return;
1630 }
1631
1611 /* loopback self test for ethtool */ 1632 /* loopback self test for ethtool */
1612 if (test_bit(QL_SELFTEST, &qdev->flags)) { 1633 if (test_bit(QL_SELFTEST, &qdev->flags)) {
1613 ql_check_lb_frame(qdev, skb); 1634 ql_check_lb_frame(qdev, skb);
@@ -1913,6 +1934,13 @@ static void ql_process_mac_split_rx_intr(struct ql_adapter *qdev,
1913 return; 1934 return;
1914 } 1935 }
1915 1936
1937 /* Frame error, so drop the packet. */
1938 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1939 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1940 dev_kfree_skb_any(skb);
1941 return;
1942 }
1943
1916 /* The max framesize filter on this chip is set higher than 1944 /* The max framesize filter on this chip is set higher than
1917 * MTU since FCoE uses 2k frames. 1945 * MTU since FCoE uses 2k frames.
1918 */ 1946 */
@@ -1994,12 +2022,6 @@ static unsigned long ql_process_mac_rx_intr(struct ql_adapter *qdev,
1994 2022
1995 QL_DUMP_IB_MAC_RSP(ib_mac_rsp); 2023 QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1996 2024
1997 /* Frame error, so drop the packet. */
1998 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1999 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2);
2000 return (unsigned long)length;
2001 }
2002
2003 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) { 2025 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
2004 /* The data and headers are split into 2026 /* The data and headers are split into
2005 * separate buffers. 2027 * separate buffers.