diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 15 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_main.c | 36 |
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, | |||
2944 | void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data) | 2950 | void 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"); | ||
2979 | out: | 2984 | out: |
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 */ |
1435 | static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err) | 1435 | static 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. |