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 6e7bfb36b491..dbaf8b9e47d5 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 8b5d1a55a0e9..e60d03bf8d11 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 8e770dd6ef6b..3f3e7f6e68b3 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 9256daba48fc..f29bc5bbda3e 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 d0e4c3b6deaa..efff63fb6b66 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; |
