diff options
author | Anna Neal <anna@cozybit.com> | 2008-10-20 19:46:56 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-21 11:06:03 -0500 |
commit | 582c1b538fb47a2d6a41dbdadb031086c49446c1 (patch) | |
tree | 04c84b61e6af5256e685c69bc195aee0b948adc5 /drivers/net/wireless/libertas/cmd.c | |
parent | 50da3ead624d46f1b9f1007a184691bbb841eba7 (diff) |
libertas: Fine grained configuration of wake-on-lan.
Based on a patch from Shailendra Govardhan <shailen@marvell.com>.
This patch allows implementation of more specific wake-on-lan rules than those
of ethtool.
Please note that only firmware 5.110.22.p20 and above supports this feature.
This patch only implements the driver/firmware interface, not the
userspace/driver interface.
Signed-off-by: Anna Neal <anna@cozybit.com>
Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/cmd.c')
-rw-r--r-- | drivers/net/wireless/libertas/cmd.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 957fd5a10a8d..639dd02d3d31 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c | |||
@@ -159,7 +159,8 @@ out: | |||
159 | return ret; | 159 | return ret; |
160 | } | 160 | } |
161 | 161 | ||
162 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria) | 162 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, |
163 | struct wol_config *p_wol_config) | ||
163 | { | 164 | { |
164 | struct cmd_ds_host_sleep cmd_config; | 165 | struct cmd_ds_host_sleep cmd_config; |
165 | int ret; | 166 | int ret; |
@@ -169,10 +170,21 @@ int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria) | |||
169 | cmd_config.gpio = priv->wol_gpio; | 170 | cmd_config.gpio = priv->wol_gpio; |
170 | cmd_config.gap = priv->wol_gap; | 171 | cmd_config.gap = priv->wol_gap; |
171 | 172 | ||
173 | if (p_wol_config != NULL) | ||
174 | memcpy((uint8_t *)&cmd_config.wol_conf, (uint8_t *)p_wol_config, | ||
175 | sizeof(struct wol_config)); | ||
176 | else | ||
177 | cmd_config.wol_conf.action = CMD_ACT_ACTION_NONE; | ||
178 | |||
172 | ret = lbs_cmd_with_response(priv, CMD_802_11_HOST_SLEEP_CFG, &cmd_config); | 179 | ret = lbs_cmd_with_response(priv, CMD_802_11_HOST_SLEEP_CFG, &cmd_config); |
173 | if (!ret) { | 180 | if (!ret) { |
174 | lbs_deb_cmd("Set WOL criteria to %x\n", criteria); | 181 | if (criteria) { |
175 | priv->wol_criteria = criteria; | 182 | lbs_deb_cmd("Set WOL criteria to %x\n", criteria); |
183 | priv->wol_criteria = criteria; | ||
184 | } else | ||
185 | memcpy((uint8_t *) p_wol_config, | ||
186 | (uint8_t *)&cmd_config.wol_conf, | ||
187 | sizeof(struct wol_config)); | ||
176 | } else { | 188 | } else { |
177 | lbs_pr_info("HOST_SLEEP_CFG failed %d\n", ret); | 189 | lbs_pr_info("HOST_SLEEP_CFG failed %d\n", ret); |
178 | } | 190 | } |