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

Commit 4da12942 authored by Dhananjay Phadke's avatar Dhananjay Phadke Committed by David S. Miller
Browse files

netxen: advertise wake-on-lan support



Add ethtool wake on lan support.

Signed-off-by: default avatarDhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ba599d4f
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -810,6 +810,53 @@ static int netxen_nic_set_tso(struct net_device *dev, u32 data)
	return 0;
}

static void
netxen_nic_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{
	struct netxen_adapter *adapter = netdev_priv(dev);
	u32 wol_cfg = 0;

	wol->supported = 0;
	wol->wolopts = 0;

	if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
		return;

	wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG_NV);
	if (wol_cfg & (1UL << adapter->portnum))
		wol->supported |= WAKE_MAGIC;

	wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG);
	if (wol_cfg & (1UL << adapter->portnum))
		wol->wolopts |= WAKE_MAGIC;
}

static int
netxen_nic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
{
	struct netxen_adapter *adapter = netdev_priv(dev);
	u32 wol_cfg = 0;

	if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
		return -EOPNOTSUPP;

	if (wol->wolopts & ~WAKE_MAGIC)
		return -EOPNOTSUPP;

	wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG_NV);
	if (!(wol_cfg & (1 << adapter->portnum)))
		return -EOPNOTSUPP;

	wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG);
	if (wol->wolopts & WAKE_MAGIC)
		wol_cfg |= 1UL << adapter->portnum;
	else
		wol_cfg &= ~(1UL << adapter->portnum);
	netxen_nic_reg_write(adapter, NETXEN_WOL_CONFIG, wol_cfg);

	return 0;
}

/*
 * Set the coalescing parameters. Currently only normal is supported.
 * If rx_coalesce_usecs == 0 or rx_max_coalesced_frames == 0 then set the
@@ -916,6 +963,8 @@ struct ethtool_ops netxen_nic_ethtool_ops = {
	.set_sg = ethtool_op_set_sg,
	.get_tso = netxen_nic_get_tso,
	.set_tso = netxen_nic_set_tso,
	.get_wol = netxen_nic_get_wol,
	.set_wol = netxen_nic_set_wol,
	.self_test = netxen_nic_diag_test,
	.get_strings = netxen_nic_get_strings,
	.get_ethtool_stats = netxen_nic_get_ethtool_stats,
+3 −0
Original line number Diff line number Diff line
@@ -858,6 +858,9 @@ enum {
#define NETXEN_PORT_MODE_ADDR		(NETXEN_CAM_RAM(0x24))
#define NETXEN_WOL_PORT_MODE		(NETXEN_CAM_RAM(0x198))

#define NETXEN_WOL_CONFIG_NV		(NETXEN_CAM_RAM(0x184))
#define NETXEN_WOL_CONFIG		(NETXEN_CAM_RAM(0x188))

#define NX_PEG_TUNE_MN_PRESENT		0x1
#define NX_PEG_TUNE_CAPABILITY		(NETXEN_CAM_RAM(0x02c))