aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorHimanshu Madhani <himanshu.madhani@qlogic.com>2013-03-08 04:53:50 -0500
committerDavid S. Miller <davem@davemloft.net>2013-03-09 16:09:18 -0500
commitd16951d94aabb72245319679036125b8d7efead9 (patch)
tree55772b7c09bceb9f03884bb48eba1c4df0220f3d /drivers/net/ethernet
parenta96227e66f0a0361d96885042629bf60eb6a4b39 (diff)
qlcnic: Enable LED test support for 83xx adapter
o Add support for LED test on 83xx series adapters Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com> Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c45
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h1
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c3
3 files changed, 48 insertions, 1 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 41c02ba7648c..c08fa20dd5f0 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -1432,6 +1432,51 @@ mbx_err:
1432 } 1432 }
1433} 1433}
1434 1434
1435int qlcnic_83xx_set_led(struct net_device *netdev,
1436 enum ethtool_phys_id_state state)
1437{
1438 struct qlcnic_adapter *adapter = netdev_priv(netdev);
1439 int err = -EIO, active = 1;
1440
1441 if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) {
1442 netdev_warn(netdev,
1443 "LED test is not supported in non-privileged mode\n");
1444 return -EOPNOTSUPP;
1445 }
1446
1447 switch (state) {
1448 case ETHTOOL_ID_ACTIVE:
1449 if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state))
1450 return -EBUSY;
1451
1452 if (test_bit(__QLCNIC_RESETTING, &adapter->state))
1453 break;
1454
1455 err = qlcnic_83xx_config_led(adapter, active, 0);
1456 if (err)
1457 netdev_err(netdev, "Failed to set LED blink state\n");
1458 break;
1459 case ETHTOOL_ID_INACTIVE:
1460 active = 0;
1461
1462 if (test_bit(__QLCNIC_RESETTING, &adapter->state))
1463 break;
1464
1465 err = qlcnic_83xx_config_led(adapter, active, 0);
1466 if (err)
1467 netdev_err(netdev, "Failed to reset LED blink state\n");
1468 break;
1469
1470 default:
1471 return -EINVAL;
1472 }
1473
1474 if (!active || err)
1475 clear_bit(__QLCNIC_LED_ENABLE, &adapter->state);
1476
1477 return err;
1478}
1479
1435void qlcnic_83xx_register_nic_idc_func(struct qlcnic_adapter *adapter, 1480void qlcnic_83xx_register_nic_idc_func(struct qlcnic_adapter *adapter,
1436 int enable) 1481 int enable)
1437{ 1482{
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
index 94e3ee0a7aa6..648a73f904ee 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
@@ -449,5 +449,6 @@ int qlcnic_83xx_get_regs_len(struct qlcnic_adapter *);
449int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *); 449int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *);
450int qlcnic_83xx_loopback_test(struct net_device *, u8); 450int qlcnic_83xx_loopback_test(struct net_device *, u8);
451int qlcnic_83xx_interrupt_test(struct net_device *); 451int qlcnic_83xx_interrupt_test(struct net_device *);
452int qlcnic_83xx_set_led(struct net_device *, enum ethtool_phys_id_state);
452int qlcnic_83xx_flash_test(struct qlcnic_adapter *); 453int qlcnic_83xx_flash_test(struct qlcnic_adapter *);
453#endif 454#endif
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 5641f8ec49ab..ba1502acc84a 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -1176,7 +1176,8 @@ static int qlcnic_set_led(struct net_device *dev,
1176 int err = -EIO, active = 1; 1176 int err = -EIO, active = 1;
1177 1177
1178 if (qlcnic_83xx_check(adapter)) 1178 if (qlcnic_83xx_check(adapter))
1179 return -EOPNOTSUPP; 1179 return qlcnic_83xx_set_led(dev, state);
1180
1180 if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { 1181 if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) {
1181 netdev_warn(dev, "LED test not supported for non " 1182 netdev_warn(dev, "LED test not supported for non "
1182 "privilege function\n"); 1183 "privilege function\n");