aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorJitendra Kalsaria <jitendra.kalsaria@qlogic.com>2013-08-02 00:57:39 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-02 02:04:27 -0400
commitb9c119844c42a46a6c6006d158ee33af81fe76ae (patch)
treee8db9809165139efc42c619e2137af369e6162f6 /drivers/net
parenta594e4f8c31c400024293b2e97fc7d3faaae74da (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.h6
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c23
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c6
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c6
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
961struct qlcnic_filter { 955struct 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;