aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJitendra Kalsaria <jitendra.kalsaria@qlogic.com>2012-07-10 10:57:33 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-11 02:28:33 -0400
commit206d78e0c5e9eff0b025e54ff2825d90a0df77db (patch)
tree616da58155a81e943ca4c04eb0c5e18e94bf6023
parentd0de73096e6da4f71cc83623930edcc389a44ca6 (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.h2
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c20
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,
388static void ql_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) 388static 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
397static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) 401static 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;