aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/cmd.c
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2007-12-17 23:48:31 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:07:49 -0500
commit3fbe104cecdb8c812976fdb0cc41be65491b85ee (patch)
tree768ab4fb16f26289f0ad5dc6d413fc5a0cf1eaf5 /drivers/net/wireless/libertas/cmd.c
parent6e5cc4fb35c45a8f8478d25c4e89e8d9c543056e (diff)
libertas: convert SLEEP_PARAMS to a direct command
Signed-off-by: David Woodhouse <dwmw2@infradead.org> 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.c56
1 files changed, 32 insertions, 24 deletions
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 57d17077a6d8..3d9ad0ec9542 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -198,33 +198,45 @@ int lbs_cmd_802_11_inactivity_timeout(struct lbs_private *priv,
198 return 0; 198 return 0;
199} 199}
200 200
201static int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, 201int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action,
202 struct cmd_ds_command *cmd, 202 struct sleep_params *sp)
203 u16 cmd_action)
204{ 203{
205 struct cmd_ds_802_11_sleep_params *sp = &cmd->params.sleep_params; 204 struct cmd_ds_802_11_sleep_params cmd;
205 int ret;
206 206
207 lbs_deb_enter(LBS_DEB_CMD); 207 lbs_deb_enter(LBS_DEB_CMD);
208 208
209 cmd->size = cpu_to_le16((sizeof(struct cmd_ds_802_11_sleep_params)) +
210 S_DS_GEN);
211 cmd->command = cpu_to_le16(CMD_802_11_SLEEP_PARAMS);
212
213 if (cmd_action == CMD_ACT_GET) { 209 if (cmd_action == CMD_ACT_GET) {
214 memset(&priv->sp, 0, sizeof(struct sleep_params)); 210 memset(&cmd, 0, sizeof(cmd));
215 memset(sp, 0, sizeof(struct cmd_ds_802_11_sleep_params)); 211 } else {
216 sp->action = cpu_to_le16(cmd_action); 212 cmd.error = cpu_to_le16(sp->sp_error);
217 } else if (cmd_action == CMD_ACT_SET) { 213 cmd.offset = cpu_to_le16(sp->sp_offset);
218 sp->action = cpu_to_le16(cmd_action); 214 cmd.stabletime = cpu_to_le16(sp->sp_stabletime);
219 sp->error = cpu_to_le16(priv->sp.sp_error); 215 cmd.calcontrol = sp->sp_calcontrol;
220 sp->offset = cpu_to_le16(priv->sp.sp_offset); 216 cmd.externalsleepclk = sp->sp_extsleepclk;
221 sp->stabletime = cpu_to_le16(priv->sp.sp_stabletime); 217 cmd.reserved = cpu_to_le16(sp->sp_reserved);
222 sp->calcontrol = (u8) priv->sp.sp_calcontrol;
223 sp->externalsleepclk = (u8) priv->sp.sp_extsleepclk;
224 sp->reserved = cpu_to_le16(priv->sp.sp_reserved);
225 } 218 }
219 cmd.hdr.size = cpu_to_le16(sizeof(cmd));
220 cmd.action = cpu_to_le16(cmd_action);
226 221
227 lbs_deb_leave(LBS_DEB_CMD); 222 ret = lbs_cmd_with_response(priv, CMD_802_11_SLEEP_PARAMS, &cmd);
223
224 if (!ret) {
225 lbs_deb_cmd("error 0x%x, offset 0x%x, stabletime 0x%x, "
226 "calcontrol 0x%x extsleepclk 0x%x\n",
227 le16_to_cpu(cmd.error), le16_to_cpu(cmd.offset),
228 le16_to_cpu(cmd.stabletime), cmd.calcontrol,
229 cmd.externalsleepclk);
230
231 sp->sp_error = le16_to_cpu(cmd.error);
232 sp->sp_offset = le16_to_cpu(cmd.offset);
233 sp->sp_stabletime = le16_to_cpu(cmd.stabletime);
234 sp->sp_calcontrol = cmd.calcontrol;
235 sp->sp_extsleepclk = cmd.externalsleepclk;
236 sp->sp_reserved = le16_to_cpu(cmd.reserved);
237 }
238
239 lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
228 return 0; 240 return 0;
229} 241}
230 242
@@ -1520,10 +1532,6 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
1520 cmd_no, cmd_action); 1532 cmd_no, cmd_action);
1521 break; 1533 break;
1522 1534
1523 case CMD_802_11_SLEEP_PARAMS:
1524 ret = lbs_cmd_802_11_sleep_params(priv, cmdptr, cmd_action);
1525 break;
1526
1527 case CMD_802_11_TPC_CFG: 1535 case CMD_802_11_TPC_CFG:
1528 cmdptr->command = cpu_to_le16(CMD_802_11_TPC_CFG); 1536 cmdptr->command = cpu_to_le16(CMD_802_11_TPC_CFG);
1529 cmdptr->size = 1537 cmdptr->size =