aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhananjay Phadke <dhananjay@netxen.com>2009-02-24 19:38:44 -0500
committerDavid S. Miller <davem@davemloft.net>2009-02-24 19:38:44 -0500
commit4da129421f898147235a3e6b40234d789df208b7 (patch)
tree228a1ee837ddeff591cd4c420e3a2c850ae7075c
parentba599d4f0d2071abc049cb6345eab510a8a3643e (diff)
netxen: advertise wake-on-lan support
Add ethtool wake on lan support. Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/netxen/netxen_nic_ethtool.c49
-rw-r--r--drivers/net/netxen/netxen_nic_hdr.h3
2 files changed, 52 insertions, 0 deletions
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c
index 0894a7be0225..0012b3172f90 100644
--- a/drivers/net/netxen/netxen_nic_ethtool.c
+++ b/drivers/net/netxen/netxen_nic_ethtool.c
@@ -810,6 +810,53 @@ static int netxen_nic_set_tso(struct net_device *dev, u32 data)
810 return 0; 810 return 0;
811} 811}
812 812
813static void
814netxen_nic_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
815{
816 struct netxen_adapter *adapter = netdev_priv(dev);
817 u32 wol_cfg = 0;
818
819 wol->supported = 0;
820 wol->wolopts = 0;
821
822 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
823 return;
824
825 wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG_NV);
826 if (wol_cfg & (1UL << adapter->portnum))
827 wol->supported |= WAKE_MAGIC;
828
829 wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG);
830 if (wol_cfg & (1UL << adapter->portnum))
831 wol->wolopts |= WAKE_MAGIC;
832}
833
834static int
835netxen_nic_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
836{
837 struct netxen_adapter *adapter = netdev_priv(dev);
838 u32 wol_cfg = 0;
839
840 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
841 return -EOPNOTSUPP;
842
843 if (wol->wolopts & ~WAKE_MAGIC)
844 return -EOPNOTSUPP;
845
846 wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG_NV);
847 if (!(wol_cfg & (1 << adapter->portnum)))
848 return -EOPNOTSUPP;
849
850 wol_cfg = netxen_nic_reg_read(adapter, NETXEN_WOL_CONFIG);
851 if (wol->wolopts & WAKE_MAGIC)
852 wol_cfg |= 1UL << adapter->portnum;
853 else
854 wol_cfg &= ~(1UL << adapter->portnum);
855 netxen_nic_reg_write(adapter, NETXEN_WOL_CONFIG, wol_cfg);
856
857 return 0;
858}
859
813/* 860/*
814 * Set the coalescing parameters. Currently only normal is supported. 861 * Set the coalescing parameters. Currently only normal is supported.
815 * If rx_coalesce_usecs == 0 or rx_max_coalesced_frames == 0 then set the 862 * 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 = {
916 .set_sg = ethtool_op_set_sg, 963 .set_sg = ethtool_op_set_sg,
917 .get_tso = netxen_nic_get_tso, 964 .get_tso = netxen_nic_get_tso,
918 .set_tso = netxen_nic_set_tso, 965 .set_tso = netxen_nic_set_tso,
966 .get_wol = netxen_nic_get_wol,
967 .set_wol = netxen_nic_set_wol,
919 .self_test = netxen_nic_diag_test, 968 .self_test = netxen_nic_diag_test,
920 .get_strings = netxen_nic_get_strings, 969 .get_strings = netxen_nic_get_strings,
921 .get_ethtool_stats = netxen_nic_get_ethtool_stats, 970 .get_ethtool_stats = netxen_nic_get_ethtool_stats,
diff --git a/drivers/net/netxen/netxen_nic_hdr.h b/drivers/net/netxen/netxen_nic_hdr.h
index 269a1f706889..4695246072f6 100644
--- a/drivers/net/netxen/netxen_nic_hdr.h
+++ b/drivers/net/netxen/netxen_nic_hdr.h
@@ -858,6 +858,9 @@ enum {
858#define NETXEN_PORT_MODE_ADDR (NETXEN_CAM_RAM(0x24)) 858#define NETXEN_PORT_MODE_ADDR (NETXEN_CAM_RAM(0x24))
859#define NETXEN_WOL_PORT_MODE (NETXEN_CAM_RAM(0x198)) 859#define NETXEN_WOL_PORT_MODE (NETXEN_CAM_RAM(0x198))
860 860
861#define NETXEN_WOL_CONFIG_NV (NETXEN_CAM_RAM(0x184))
862#define NETXEN_WOL_CONFIG (NETXEN_CAM_RAM(0x188))
863
861#define NX_PEG_TUNE_MN_PRESENT 0x1 864#define NX_PEG_TUNE_MN_PRESENT 0x1
862#define NX_PEG_TUNE_CAPABILITY (NETXEN_CAM_RAM(0x02c)) 865#define NX_PEG_TUNE_CAPABILITY (NETXEN_CAM_RAM(0x02c))
863 866