diff options
author | Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> | 2012-07-10 10:57:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-11 02:28:33 -0400 |
commit | 206d78e0c5e9eff0b025e54ff2825d90a0df77db (patch) | |
tree | 616da58155a81e943ca4c04eb0c5e18e94bf6023 | |
parent | d0de73096e6da4f71cc83623930edcc389a44ca6 (diff) |
qlge: Fix ethtool WOL calls to operate only on devices that support WOL.
Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c | 20 |
2 files changed, 18 insertions, 4 deletions
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge.h b/drivers/net/ethernet/qlogic/qlge/qlge.h index 6e7050c7127d..02fd96bb7db6 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge.h +++ b/drivers/net/ethernet/qlogic/qlge/qlge.h | |||
@@ -25,6 +25,8 @@ | |||
25 | #define QLGE_VENDOR_ID 0x1077 | 25 | #define QLGE_VENDOR_ID 0x1077 |
26 | #define QLGE_DEVICE_ID_8012 0x8012 | 26 | #define QLGE_DEVICE_ID_8012 0x8012 |
27 | #define QLGE_DEVICE_ID_8000 0x8000 | 27 | #define QLGE_DEVICE_ID_8000 0x8000 |
28 | #define QLGE_MEZZ_SSYS_ID_068 0x0068 | ||
29 | #define QLGE_MEZZ_SSYS_ID_180 0x0180 | ||
28 | #define MAX_CPUS 8 | 30 | #define MAX_CPUS 8 |
29 | #define MAX_TX_RINGS MAX_CPUS | 31 | #define MAX_TX_RINGS MAX_CPUS |
30 | #define MAX_RX_RINGS ((MAX_CPUS * 2) + 1) | 32 | #define MAX_RX_RINGS ((MAX_CPUS * 2) + 1) |
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c b/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c index 8e2c2a74f3a5..c2adfa26906d 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c | |||
@@ -388,17 +388,29 @@ static void ql_get_drvinfo(struct net_device *ndev, | |||
388 | static void ql_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) | 388 | static void ql_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) |
389 | { | 389 | { |
390 | struct ql_adapter *qdev = netdev_priv(ndev); | 390 | struct ql_adapter *qdev = netdev_priv(ndev); |
391 | /* What we support. */ | 391 | unsigned short ssys_dev = qdev->pdev->subsystem_device; |
392 | wol->supported = WAKE_MAGIC; | 392 | |
393 | /* What we've currently got set. */ | 393 | /* WOL is only supported for mezz card. */ |
394 | wol->wolopts = qdev->wol; | 394 | if (ssys_dev == QLGE_MEZZ_SSYS_ID_068 || |
395 | ssys_dev == QLGE_MEZZ_SSYS_ID_180) { | ||
396 | wol->supported = WAKE_MAGIC; | ||
397 | wol->wolopts = qdev->wol; | ||
398 | } | ||
395 | } | 399 | } |
396 | 400 | ||
397 | static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) | 401 | static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) |
398 | { | 402 | { |
399 | struct ql_adapter *qdev = netdev_priv(ndev); | 403 | struct ql_adapter *qdev = netdev_priv(ndev); |
400 | int status; | 404 | int status; |
405 | unsigned short ssys_dev = qdev->pdev->subsystem_device; | ||
401 | 406 | ||
407 | /* WOL is only supported for mezz card. */ | ||
408 | if (ssys_dev != QLGE_MEZZ_SSYS_ID_068 || | ||
409 | ssys_dev != QLGE_MEZZ_SSYS_ID_180) { | ||
410 | netif_info(qdev, drv, qdev->ndev, | ||
411 | "WOL is only supported for mezz card\n"); | ||
412 | return -EOPNOTSUPP; | ||
413 | } | ||
402 | if (wol->wolopts & ~WAKE_MAGIC) | 414 | if (wol->wolopts & ~WAKE_MAGIC) |
403 | return -EINVAL; | 415 | return -EINVAL; |
404 | qdev->wol = wol->wolopts; | 416 | qdev->wol = wol->wolopts; |