diff options
author | Himanshu Madhani <himanshu.madhani@qlogic.com> | 2013-03-08 04:53:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-09 16:09:18 -0500 |
commit | d16951d94aabb72245319679036125b8d7efead9 (patch) | |
tree | 55772b7c09bceb9f03884bb48eba1c4df0220f3d /drivers/net/ethernet | |
parent | a96227e66f0a0361d96885042629bf60eb6a4b39 (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.c | 45 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 3 |
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 | ||
1435 | int 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 | |||
1435 | void qlcnic_83xx_register_nic_idc_func(struct qlcnic_adapter *adapter, | 1480 | void 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 *); | |||
449 | int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *); | 449 | int qlcnic_83xx_get_registers(struct qlcnic_adapter *, u32 *); |
450 | int qlcnic_83xx_loopback_test(struct net_device *, u8); | 450 | int qlcnic_83xx_loopback_test(struct net_device *, u8); |
451 | int qlcnic_83xx_interrupt_test(struct net_device *); | 451 | int qlcnic_83xx_interrupt_test(struct net_device *); |
452 | int qlcnic_83xx_set_led(struct net_device *, enum ethtool_phys_id_state); | ||
452 | int qlcnic_83xx_flash_test(struct qlcnic_adapter *); | 453 | int 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"); |