diff options
author | Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> | 2013-08-02 00:57:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-02 02:04:27 -0400 |
commit | b9c119844c42a46a6c6006d158ee33af81fe76ae (patch) | |
tree | e8db9809165139efc42c619e2137af369e6162f6 /drivers/net | |
parent | a594e4f8c31c400024293b2e97fc7d3faaae74da (diff) |
qlcnic: Enhance diagnostic loopback error codes.
o Enhanced the driver to use standard Linux error codes
o Return a unique error code to indicate loopback is in progress
Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 23 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 6 |
4 files changed, 22 insertions, 19 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h index b00cf5665eab..aa0e68e1af73 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | |||
@@ -950,12 +950,6 @@ struct qlcnic_ipaddr { | |||
950 | #define QLCNIC_READD_AGE 20 | 950 | #define QLCNIC_READD_AGE 20 |
951 | #define QLCNIC_LB_MAX_FILTERS 64 | 951 | #define QLCNIC_LB_MAX_FILTERS 64 |
952 | #define QLCNIC_LB_BUCKET_SIZE 32 | 952 | #define QLCNIC_LB_BUCKET_SIZE 32 |
953 | |||
954 | /* QLCNIC Driver Error Code */ | ||
955 | #define QLCNIC_FW_NOT_RESPOND 51 | ||
956 | #define QLCNIC_TEST_IN_PROGRESS 52 | ||
957 | #define QLCNIC_UNDEFINED_ERROR 53 | ||
958 | #define QLCNIC_LB_CABLE_NOT_CONN 54 | ||
959 | #define QLCNIC_ILB_MAX_RCV_LOOP 10 | 953 | #define QLCNIC_ILB_MAX_RCV_LOOP 10 |
960 | 954 | ||
961 | struct qlcnic_filter { | 955 | struct qlcnic_filter { |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index 0913c623a67e..cda188d1dda5 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | |||
@@ -1652,7 +1652,7 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode) | |||
1652 | if (ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { | 1652 | if (ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { |
1653 | netdev_warn(netdev, | 1653 | netdev_warn(netdev, |
1654 | "Loopback test not supported in non privileged mode\n"); | 1654 | "Loopback test not supported in non privileged mode\n"); |
1655 | return ret; | 1655 | return -ENOTSUPP; |
1656 | } | 1656 | } |
1657 | 1657 | ||
1658 | if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { | 1658 | if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { |
@@ -1686,13 +1686,13 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode) | |||
1686 | if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { | 1686 | if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { |
1687 | netdev_info(netdev, | 1687 | netdev_info(netdev, |
1688 | "Device is resetting, free LB test resources\n"); | 1688 | "Device is resetting, free LB test resources\n"); |
1689 | ret = -EIO; | 1689 | ret = -EBUSY; |
1690 | goto free_diag_res; | 1690 | goto free_diag_res; |
1691 | } | 1691 | } |
1692 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { | 1692 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { |
1693 | netdev_info(netdev, | 1693 | netdev_info(netdev, |
1694 | "Firmware didn't sent link up event to loopback request\n"); | 1694 | "Firmware didn't sent link up event to loopback request\n"); |
1695 | ret = -QLCNIC_FW_NOT_RESPOND; | 1695 | ret = -ETIMEDOUT; |
1696 | qlcnic_83xx_clear_lb_mode(adapter, mode); | 1696 | qlcnic_83xx_clear_lb_mode(adapter, mode); |
1697 | goto free_diag_res; | 1697 | goto free_diag_res; |
1698 | } | 1698 | } |
@@ -1729,6 +1729,15 @@ int qlcnic_83xx_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode) | |||
1729 | return status; | 1729 | return status; |
1730 | 1730 | ||
1731 | config = ahw->port_config; | 1731 | config = ahw->port_config; |
1732 | |||
1733 | /* Check if port is already in loopback mode */ | ||
1734 | if ((config & QLC_83XX_CFG_LOOPBACK_HSS) || | ||
1735 | (config & QLC_83XX_CFG_LOOPBACK_EXT)) { | ||
1736 | netdev_err(netdev, | ||
1737 | "Port already in Loopback mode.\n"); | ||
1738 | return -EINPROGRESS; | ||
1739 | } | ||
1740 | |||
1732 | set_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1741 | set_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1733 | 1742 | ||
1734 | if (mode == QLCNIC_ILB_MODE) | 1743 | if (mode == QLCNIC_ILB_MODE) |
@@ -1756,14 +1765,14 @@ int qlcnic_83xx_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode) | |||
1756 | netdev_info(netdev, | 1765 | netdev_info(netdev, |
1757 | "Device is resetting, free LB test resources\n"); | 1766 | "Device is resetting, free LB test resources\n"); |
1758 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1767 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1759 | return -EIO; | 1768 | return -EBUSY; |
1760 | } | 1769 | } |
1761 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { | 1770 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { |
1762 | netdev_err(netdev, | 1771 | netdev_err(netdev, |
1763 | "Did not receive IDC completion AEN\n"); | 1772 | "Did not receive IDC completion AEN\n"); |
1764 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1773 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1765 | qlcnic_83xx_clear_lb_mode(adapter, mode); | 1774 | qlcnic_83xx_clear_lb_mode(adapter, mode); |
1766 | return -EIO; | 1775 | return -ETIMEDOUT; |
1767 | } | 1776 | } |
1768 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); | 1777 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); |
1769 | 1778 | ||
@@ -1805,14 +1814,14 @@ int qlcnic_83xx_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode) | |||
1805 | netdev_info(netdev, | 1814 | netdev_info(netdev, |
1806 | "Device is resetting, free LB test resources\n"); | 1815 | "Device is resetting, free LB test resources\n"); |
1807 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1816 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1808 | return -EIO; | 1817 | return -EBUSY; |
1809 | } | 1818 | } |
1810 | 1819 | ||
1811 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { | 1820 | if (loop++ > QLC_83XX_LB_WAIT_COUNT) { |
1812 | netdev_err(netdev, | 1821 | netdev_err(netdev, |
1813 | "Did not receive IDC completion AEN\n"); | 1822 | "Did not receive IDC completion AEN\n"); |
1814 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); | 1823 | clear_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status); |
1815 | return -EIO; | 1824 | return -ETIMEDOUT; |
1816 | } | 1825 | } |
1817 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); | 1826 | } while (test_bit(QLC_83XX_IDC_COMP_AEN, &ahw->idc.status)); |
1818 | 1827 | ||
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c index 700a46324d09..94a728da3eb1 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | |||
@@ -980,9 +980,9 @@ int qlcnic_loopback_test(struct net_device *netdev, u8 mode) | |||
980 | msleep(500); | 980 | msleep(500); |
981 | qlcnic_process_rcv_ring_diag(sds_ring); | 981 | qlcnic_process_rcv_ring_diag(sds_ring); |
982 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { | 982 | if (loop++ > QLCNIC_ILB_MAX_RCV_LOOP) { |
983 | netdev_info(netdev, "firmware didnt respond to loopback" | 983 | netdev_info(netdev, |
984 | " configure request\n"); | 984 | "Firmware didn't sent link up event to loopback request\n"); |
985 | ret = -QLCNIC_FW_NOT_RESPOND; | 985 | ret = -ETIMEDOUT; |
986 | goto free_res; | 986 | goto free_res; |
987 | } else if (adapter->ahw->diag_cnt) { | 987 | } else if (adapter->ahw->diag_cnt) { |
988 | ret = adapter->ahw->diag_cnt; | 988 | ret = adapter->ahw->diag_cnt; |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c index d3f8797efcc3..1994b446c9e7 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | |||
@@ -919,17 +919,17 @@ static void qlcnic_handle_fw_message(int desc_cnt, int index, | |||
919 | break; | 919 | break; |
920 | case 1: | 920 | case 1: |
921 | dev_info(dev, "loopback already in progress\n"); | 921 | dev_info(dev, "loopback already in progress\n"); |
922 | adapter->ahw->diag_cnt = -QLCNIC_TEST_IN_PROGRESS; | 922 | adapter->ahw->diag_cnt = -EINPROGRESS; |
923 | break; | 923 | break; |
924 | case 2: | 924 | case 2: |
925 | dev_info(dev, "loopback cable is not connected\n"); | 925 | dev_info(dev, "loopback cable is not connected\n"); |
926 | adapter->ahw->diag_cnt = -QLCNIC_LB_CABLE_NOT_CONN; | 926 | adapter->ahw->diag_cnt = -ENODEV; |
927 | break; | 927 | break; |
928 | default: | 928 | default: |
929 | dev_info(dev, | 929 | dev_info(dev, |
930 | "loopback configure request failed, err %x\n", | 930 | "loopback configure request failed, err %x\n", |
931 | ret); | 931 | ret); |
932 | adapter->ahw->diag_cnt = -QLCNIC_UNDEFINED_ERROR; | 932 | adapter->ahw->diag_cnt = -EIO; |
933 | break; | 933 | break; |
934 | } | 934 | } |
935 | break; | 935 | break; |