Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 206d78e0 authored by Jitendra Kalsaria's avatar Jitendra Kalsaria Committed by David S. Miller
Browse files

qlge: Fix ethtool WOL calls to operate only on devices that support WOL.

parent d0de7309
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,8 @@
#define QLGE_VENDOR_ID    0x1077
#define QLGE_VENDOR_ID    0x1077
#define QLGE_DEVICE_ID_8012	0x8012
#define QLGE_DEVICE_ID_8012	0x8012
#define QLGE_DEVICE_ID_8000	0x8000
#define QLGE_DEVICE_ID_8000	0x8000
#define QLGE_MEZZ_SSYS_ID_068	0x0068
#define QLGE_MEZZ_SSYS_ID_180	0x0180
#define MAX_CPUS 8
#define MAX_CPUS 8
#define MAX_TX_RINGS MAX_CPUS
#define MAX_TX_RINGS MAX_CPUS
#define MAX_RX_RINGS ((MAX_CPUS * 2) + 1)
#define MAX_RX_RINGS ((MAX_CPUS * 2) + 1)
+16 −4
Original line number Original line Diff line number Diff line
@@ -388,17 +388,29 @@ static void ql_get_drvinfo(struct net_device *ndev,
static void ql_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
static void ql_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
{
{
	struct ql_adapter *qdev = netdev_priv(ndev);
	struct ql_adapter *qdev = netdev_priv(ndev);
	/* What we support. */
	unsigned short ssys_dev = qdev->pdev->subsystem_device;

	/* WOL is only supported for mezz card. */
	if (ssys_dev == QLGE_MEZZ_SSYS_ID_068 ||
			ssys_dev == QLGE_MEZZ_SSYS_ID_180) {
		wol->supported = WAKE_MAGIC;
		wol->supported = WAKE_MAGIC;
	/* What we've currently got set. */
		wol->wolopts = qdev->wol;
		wol->wolopts = qdev->wol;
	}
	}
}


static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
static int ql_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
{
{
	struct ql_adapter *qdev = netdev_priv(ndev);
	struct ql_adapter *qdev = netdev_priv(ndev);
	int status;
	int status;
	unsigned short ssys_dev = qdev->pdev->subsystem_device;


	/* WOL is only supported for mezz card. */
	if (ssys_dev != QLGE_MEZZ_SSYS_ID_068 ||
			ssys_dev != QLGE_MEZZ_SSYS_ID_180) {
		netif_info(qdev, drv, qdev->ndev,
				"WOL is only supported for mezz card\n");
		return -EOPNOTSUPP;
	}
	if (wol->wolopts & ~WAKE_MAGIC)
	if (wol->wolopts & ~WAKE_MAGIC)
		return -EINVAL;
		return -EINVAL;
	qdev->wol = wol->wolopts;
	qdev->wol = wol->wolopts;