diff options
-rw-r--r-- | drivers/net/wireless/libertas/cmd.c | 32 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/cmdresp.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/dev.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/hostcmd.h | 9 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 17 |
5 files changed, 32 insertions, 48 deletions
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 6e7bfb36b49..dbaf8b9e47d 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c | |||
@@ -1802,38 +1802,27 @@ void lbs_send_iwevcustom_event(struct lbs_private *priv, s8 *str) | |||
1802 | lbs_deb_leave(LBS_DEB_WEXT); | 1802 | lbs_deb_leave(LBS_DEB_WEXT); |
1803 | } | 1803 | } |
1804 | 1804 | ||
1805 | static int sendconfirmsleep(struct lbs_private *priv, u8 *cmdptr, u16 size) | 1805 | static void lbs_send_confirmsleep(struct lbs_private *priv) |
1806 | { | 1806 | { |
1807 | unsigned long flags; | 1807 | unsigned long flags; |
1808 | int ret = 0; | 1808 | int ret; |
1809 | 1809 | ||
1810 | lbs_deb_enter(LBS_DEB_HOST); | 1810 | lbs_deb_enter(LBS_DEB_HOST); |
1811 | lbs_deb_hex(LBS_DEB_HOST, "sleep confirm command", cmdptr, size); | 1811 | lbs_deb_hex(LBS_DEB_HOST, "sleep confirm", (u8 *) &confirm_sleep, |
1812 | 1812 | sizeof(confirm_sleep)); | |
1813 | ret = priv->hw_host_to_card(priv, MVMS_CMD, cmdptr, size); | ||
1814 | 1813 | ||
1815 | spin_lock_irqsave(&priv->driver_lock, flags); | 1814 | ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) &confirm_sleep, |
1816 | if (priv->intcounter || priv->currenttxskb) | 1815 | sizeof(confirm_sleep)); |
1817 | lbs_deb_host("SEND_SLEEPC_CMD: intcounter %d, currenttxskb %p\n", | ||
1818 | priv->intcounter, priv->currenttxskb); | ||
1819 | spin_unlock_irqrestore(&priv->driver_lock, flags); | ||
1820 | 1816 | ||
1821 | if (ret) { | 1817 | if (ret) { |
1822 | lbs_pr_alert( | 1818 | lbs_pr_alert("confirm_sleep failed\n"); |
1823 | "SEND_SLEEPC_CMD: Host to Card failed for Confirm Sleep\n"); | ||
1824 | } else { | 1819 | } else { |
1825 | spin_lock_irqsave(&priv->driver_lock, flags); | 1820 | spin_lock_irqsave(&priv->driver_lock, flags); |
1826 | if (!priv->intcounter) { | 1821 | if (!priv->intcounter) |
1827 | priv->psstate = PS_STATE_SLEEP; | 1822 | priv->psstate = PS_STATE_SLEEP; |
1828 | } else { | ||
1829 | lbs_deb_host("SEND_SLEEPC_CMD: after sent, intcounter %d\n", | ||
1830 | priv->intcounter); | ||
1831 | } | ||
1832 | spin_unlock_irqrestore(&priv->driver_lock, flags); | 1823 | spin_unlock_irqrestore(&priv->driver_lock, flags); |
1833 | } | 1824 | } |
1834 | 1825 | lbs_deb_leave(LBS_DEB_HOST); | |
1835 | lbs_deb_leave_args(LBS_DEB_HOST, "ret %d", ret); | ||
1836 | return ret; | ||
1837 | } | 1826 | } |
1838 | 1827 | ||
1839 | void lbs_ps_sleep(struct lbs_private *priv, int wait_option) | 1828 | void lbs_ps_sleep(struct lbs_private *priv, int wait_option) |
@@ -1906,8 +1895,7 @@ void lbs_ps_confirm_sleep(struct lbs_private *priv) | |||
1906 | 1895 | ||
1907 | if (allowed) { | 1896 | if (allowed) { |
1908 | lbs_deb_host("sending lbs_ps_confirm_sleep\n"); | 1897 | lbs_deb_host("sending lbs_ps_confirm_sleep\n"); |
1909 | sendconfirmsleep(priv, (u8 *) & priv->lbs_ps_confirm_sleep, | 1898 | lbs_send_confirmsleep(priv); |
1910 | sizeof(struct PS_CMD_ConfirmSleep)); | ||
1911 | } else { | 1899 | } else { |
1912 | lbs_deb_host("sleep confirm has been delayed\n"); | 1900 | lbs_deb_host("sleep confirm has been delayed\n"); |
1913 | } | 1901 | } |
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 8b5d1a55a0e..e60d03bf8d1 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c | |||
@@ -548,21 +548,20 @@ done: | |||
548 | 548 | ||
549 | static int lbs_send_confirmwake(struct lbs_private *priv) | 549 | static int lbs_send_confirmwake(struct lbs_private *priv) |
550 | { | 550 | { |
551 | struct cmd_header *cmd = &priv->lbs_ps_confirm_wake; | 551 | struct cmd_header cmd; |
552 | int ret = 0; | 552 | int ret = 0; |
553 | 553 | ||
554 | lbs_deb_enter(LBS_DEB_HOST); | 554 | lbs_deb_enter(LBS_DEB_HOST); |
555 | 555 | ||
556 | cmd->command = cpu_to_le16(CMD_802_11_WAKEUP_CONFIRM); | 556 | cmd.command = cpu_to_le16(CMD_802_11_WAKEUP_CONFIRM); |
557 | cmd->size = cpu_to_le16(sizeof(*cmd)); | 557 | cmd.size = cpu_to_le16(sizeof(cmd)); |
558 | cmd->seqnum = cpu_to_le16(++priv->seqnum); | 558 | cmd.seqnum = cpu_to_le16(++priv->seqnum); |
559 | cmd->result = 0; | 559 | cmd.result = 0; |
560 | 560 | ||
561 | lbs_deb_host("SEND_WAKEC_CMD: before download\n"); | 561 | lbs_deb_hex(LBS_DEB_HOST, "wake confirm", (u8 *) &cmd, |
562 | sizeof(cmd)); | ||
562 | 563 | ||
563 | lbs_deb_hex(LBS_DEB_HOST, "wake confirm command", (void *)cmd, sizeof(*cmd)); | 564 | ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) &cmd, sizeof(cmd)); |
564 | |||
565 | ret = priv->hw_host_to_card(priv, MVMS_CMD, (void *)cmd, sizeof(*cmd)); | ||
566 | if (ret) | 565 | if (ret) |
567 | lbs_pr_alert("SEND_WAKEC_CMD: Host to Card failed for Confirm Wake\n"); | 566 | lbs_pr_alert("SEND_WAKEC_CMD: Host to Card failed for Confirm Wake\n"); |
568 | 567 | ||
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 8e770dd6ef6..3f3e7f6e68b 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h | |||
@@ -267,9 +267,6 @@ struct lbs_private { | |||
267 | char ps_supported; | 267 | char ps_supported; |
268 | u8 needtowakeup; | 268 | u8 needtowakeup; |
269 | 269 | ||
270 | struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep; | ||
271 | struct cmd_header lbs_ps_confirm_wake; | ||
272 | |||
273 | struct assoc_request * pending_assoc_req; | 270 | struct assoc_request * pending_assoc_req; |
274 | struct assoc_request * in_progress_assoc_req; | 271 | struct assoc_request * in_progress_assoc_req; |
275 | 272 | ||
@@ -326,6 +323,8 @@ struct lbs_private { | |||
326 | u8 fw_ready; | 323 | u8 fw_ready; |
327 | }; | 324 | }; |
328 | 325 | ||
326 | extern struct cmd_confirm_sleep confirm_sleep; | ||
327 | |||
329 | /** Association request | 328 | /** Association request |
330 | * | 329 | * |
331 | * Encapsulates all the options that describe a specific assocation request | 330 | * Encapsulates all the options that describe a specific assocation request |
diff --git a/drivers/net/wireless/libertas/hostcmd.h b/drivers/net/wireless/libertas/hostcmd.h index 9256daba48f..f29bc5bbda3 100644 --- a/drivers/net/wireless/libertas/hostcmd.h +++ b/drivers/net/wireless/libertas/hostcmd.h | |||
@@ -480,14 +480,11 @@ struct cmd_ds_802_11_ps_mode { | |||
480 | __le16 locallisteninterval; | 480 | __le16 locallisteninterval; |
481 | }; | 481 | }; |
482 | 482 | ||
483 | struct PS_CMD_ConfirmSleep { | 483 | struct cmd_confirm_sleep { |
484 | __le16 command; | 484 | struct cmd_header hdr; |
485 | __le16 size; | ||
486 | __le16 seqnum; | ||
487 | __le16 result; | ||
488 | 485 | ||
489 | __le16 action; | 486 | __le16 action; |
490 | __le16 reserved1; | 487 | __le16 nullpktinterval; |
491 | __le16 multipledtim; | 488 | __le16 multipledtim; |
492 | __le16 reserved; | 489 | __le16 reserved; |
493 | __le16 locallisteninterval; | 490 | __le16 locallisteninterval; |
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index d0e4c3b6dea..efff63fb6b6 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -37,6 +37,11 @@ EXPORT_SYMBOL_GPL(lbs_debug); | |||
37 | module_param_named(libertas_debug, lbs_debug, int, 0644); | 37 | module_param_named(libertas_debug, lbs_debug, int, 0644); |
38 | 38 | ||
39 | 39 | ||
40 | /* This global structure is used to send the confirm_sleep command as | ||
41 | * fast as possible down to the firmware. */ | ||
42 | struct cmd_confirm_sleep confirm_sleep; | ||
43 | |||
44 | |||
40 | #define LBS_TX_PWR_DEFAULT 20 /*100mW */ | 45 | #define LBS_TX_PWR_DEFAULT 20 /*100mW */ |
41 | #define LBS_TX_PWR_US_DEFAULT 20 /*100mW */ | 46 | #define LBS_TX_PWR_US_DEFAULT 20 /*100mW */ |
42 | #define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */ | 47 | #define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */ |
@@ -1013,14 +1018,6 @@ static int lbs_init_adapter(struct lbs_private *priv) | |||
1013 | &priv->network_free_list); | 1018 | &priv->network_free_list); |
1014 | } | 1019 | } |
1015 | 1020 | ||
1016 | priv->lbs_ps_confirm_sleep.seqnum = cpu_to_le16(++priv->seqnum); | ||
1017 | priv->lbs_ps_confirm_sleep.command = | ||
1018 | cpu_to_le16(CMD_802_11_PS_MODE); | ||
1019 | priv->lbs_ps_confirm_sleep.size = | ||
1020 | cpu_to_le16(sizeof(struct PS_CMD_ConfirmSleep)); | ||
1021 | priv->lbs_ps_confirm_sleep.action = | ||
1022 | cpu_to_le16(CMD_SUBCMD_SLEEP_CONFIRMED); | ||
1023 | |||
1024 | memset(priv->current_addr, 0xff, ETH_ALEN); | 1021 | memset(priv->current_addr, 0xff, ETH_ALEN); |
1025 | 1022 | ||
1026 | priv->connect_status = LBS_DISCONNECTED; | 1023 | priv->connect_status = LBS_DISCONNECTED; |
@@ -1462,6 +1459,10 @@ EXPORT_SYMBOL_GPL(lbs_interrupt); | |||
1462 | static int __init lbs_init_module(void) | 1459 | static int __init lbs_init_module(void) |
1463 | { | 1460 | { |
1464 | lbs_deb_enter(LBS_DEB_MAIN); | 1461 | lbs_deb_enter(LBS_DEB_MAIN); |
1462 | memset(&confirm_sleep, 0, sizeof(confirm_sleep)); | ||
1463 | confirm_sleep.hdr.command = cpu_to_le16(CMD_802_11_PS_MODE); | ||
1464 | confirm_sleep.hdr.size = cpu_to_le16(sizeof(confirm_sleep)); | ||
1465 | confirm_sleep.action = cpu_to_le16(CMD_SUBCMD_SLEEP_CONFIRMED); | ||
1465 | lbs_debugfs_init(); | 1466 | lbs_debugfs_init(); |
1466 | lbs_deb_leave(LBS_DEB_MAIN); | 1467 | lbs_deb_leave(LBS_DEB_MAIN); |
1467 | return 0; | 1468 | return 0; |