aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorEyal Shapira <eyal@wizery.com>2012-01-31 04:57:20 -0500
committerLuciano Coelho <coelho@ti.com>2012-02-15 01:38:31 -0500
commitd6bf9ada92c113e56151b6a993b9b9d5d03f1365 (patch)
treeed3fb37b10d1ab38cb6ec522031e659b92a45e4c /drivers/net
parent8332f0f6dc017aef9aa4a95a6a2bd6eba4c82d0a (diff)
wl12xx: remove PS management code
Removal of PS management code from the driver as PS is handled by the FW (dynamic PS) Signed-off-by: Eyal Shapira <eyal@wizery.com> Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/wl12xx/boot.c1
-rw-r--r--drivers/net/wireless/wl12xx/conf.h7
-rw-r--r--drivers/net/wireless/wl12xx/debugfs.c1
-rw-r--r--drivers/net/wireless/wl12xx/event.c143
-rw-r--r--drivers/net/wireless/wl12xx/event.h5
-rw-r--r--drivers/net/wireless/wl12xx/main.c81
-rw-r--r--drivers/net/wireless/wl12xx/wl12xx.h6
7 files changed, 5 insertions, 239 deletions
diff --git a/drivers/net/wireless/wl12xx/boot.c b/drivers/net/wireless/wl12xx/boot.c
index eea2dda6e6e7..954101d03f06 100644
--- a/drivers/net/wireless/wl12xx/boot.c
+++ b/drivers/net/wireless/wl12xx/boot.c
@@ -448,7 +448,6 @@ static int wl1271_boot_run_firmware(struct wl1271 *wl)
448 /* unmask required mbox events */ 448 /* unmask required mbox events */
449 wl->event_mask = BSS_LOSE_EVENT_ID | 449 wl->event_mask = BSS_LOSE_EVENT_ID |
450 SCAN_COMPLETE_EVENT_ID | 450 SCAN_COMPLETE_EVENT_ID |
451 PS_REPORT_EVENT_ID |
452 ROLE_STOP_COMPLETE_EVENT_ID | 451 ROLE_STOP_COMPLETE_EVENT_ID |
453 RSSI_SNR_TRIGGER_0_EVENT_ID | 452 RSSI_SNR_TRIGGER_0_EVENT_ID |
454 PSPOLL_DELIVERY_FAILURE_EVENT_ID | 453 PSPOLL_DELIVERY_FAILURE_EVENT_ID |
diff --git a/drivers/net/wireless/wl12xx/conf.h b/drivers/net/wireless/wl12xx/conf.h
index 1bcfb017058d..47cf80f0b036 100644
--- a/drivers/net/wireless/wl12xx/conf.h
+++ b/drivers/net/wireless/wl12xx/conf.h
@@ -868,13 +868,6 @@ struct conf_conn_settings {
868 u8 ps_poll_threshold; 868 u8 ps_poll_threshold;
869 869
870 /* 870 /*
871 * PS Poll failure recovery ACTIVE period length
872 *
873 * Range: u32 (ms)
874 */
875 u32 ps_poll_recovery_period;
876
877 /*
878 * Configuration of signal average weights. 871 * Configuration of signal average weights.
879 */ 872 */
880 struct conf_sig_weights sig_weights; 873 struct conf_sig_weights sig_weights;
diff --git a/drivers/net/wireless/wl12xx/debugfs.c b/drivers/net/wireless/wl12xx/debugfs.c
index 15eb3a9c30ca..5e96e059f2b5 100644
--- a/drivers/net/wireless/wl12xx/debugfs.c
+++ b/drivers/net/wireless/wl12xx/debugfs.c
@@ -471,7 +471,6 @@ static ssize_t vifs_state_read(struct file *file, char __user *user_buf,
471 VIF_STATE_PRINT_INT(default_key); 471 VIF_STATE_PRINT_INT(default_key);
472 VIF_STATE_PRINT_INT(aid); 472 VIF_STATE_PRINT_INT(aid);
473 VIF_STATE_PRINT_INT(session_counter); 473 VIF_STATE_PRINT_INT(session_counter);
474 VIF_STATE_PRINT_INT(ps_poll_failures);
475 VIF_STATE_PRINT_INT(psm_entry_retry); 474 VIF_STATE_PRINT_INT(psm_entry_retry);
476 VIF_STATE_PRINT_INT(power_level); 475 VIF_STATE_PRINT_INT(power_level);
477 VIF_STATE_PRINT_INT(rssi_thold); 476 VIF_STATE_PRINT_INT(rssi_thold);
diff --git a/drivers/net/wireless/wl12xx/event.c b/drivers/net/wireless/wl12xx/event.c
index cfc38ea21e4a..05cd2ce927c6 100644
--- a/drivers/net/wireless/wl12xx/event.c
+++ b/drivers/net/wireless/wl12xx/event.c
@@ -30,133 +30,6 @@
30#include "scan.h" 30#include "scan.h"
31#include "wl12xx_80211.h" 31#include "wl12xx_80211.h"
32 32
33void wl1271_pspoll_work(struct work_struct *work)
34{
35 struct ieee80211_vif *vif;
36 struct wl12xx_vif *wlvif;
37 struct delayed_work *dwork;
38 struct wl1271 *wl;
39 int ret;
40
41 dwork = container_of(work, struct delayed_work, work);
42 wlvif = container_of(dwork, struct wl12xx_vif, pspoll_work);
43 vif = container_of((void *)wlvif, struct ieee80211_vif, drv_priv);
44 wl = wlvif->wl;
45
46 wl1271_debug(DEBUG_EVENT, "pspoll work");
47
48 mutex_lock(&wl->mutex);
49
50 if (unlikely(wl->state == WL1271_STATE_OFF))
51 goto out;
52
53 if (!test_and_clear_bit(WLVIF_FLAG_PSPOLL_FAILURE, &wlvif->flags))
54 goto out;
55
56 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
57 goto out;
58
59 /*
60 * if we end up here, then we were in powersave when the pspoll
61 * delivery failure occurred, and no-one changed state since, so
62 * we should go back to powersave.
63 */
64 ret = wl1271_ps_elp_wakeup(wl);
65 if (ret < 0)
66 goto out;
67
68 wl1271_ps_set_mode(wl, wlvif, STATION_POWER_SAVE_MODE,
69 wlvif->basic_rate, true);
70
71 wl1271_ps_elp_sleep(wl);
72out:
73 mutex_unlock(&wl->mutex);
74};
75
76static void wl1271_event_pspoll_delivery_fail(struct wl1271 *wl,
77 struct wl12xx_vif *wlvif)
78{
79 int delay = wl->conf.conn.ps_poll_recovery_period;
80 int ret;
81
82 wlvif->ps_poll_failures++;
83 if (wlvif->ps_poll_failures == 1)
84 wl1271_info("AP with dysfunctional ps-poll, "
85 "trying to work around it.");
86
87 /* force active mode receive data from the AP */
88 if (test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
89 ret = wl1271_ps_set_mode(wl, wlvif, STATION_ACTIVE_MODE,
90 wlvif->basic_rate, true);
91 if (ret < 0)
92 return;
93 set_bit(WLVIF_FLAG_PSPOLL_FAILURE, &wlvif->flags);
94 ieee80211_queue_delayed_work(wl->hw, &wlvif->pspoll_work,
95 msecs_to_jiffies(delay));
96 }
97
98 /*
99 * If already in active mode, lets we should be getting data from
100 * the AP right away. If we enter PSM too fast after this, and data
101 * remains on the AP, we will get another event like this, and we'll
102 * go into active once more.
103 */
104}
105
106static int wl1271_event_ps_report(struct wl1271 *wl,
107 struct wl12xx_vif *wlvif,
108 struct event_mailbox *mbox,
109 bool *beacon_loss)
110{
111 int ret = 0;
112 u32 total_retries = wl->conf.conn.psm_entry_retries;
113
114 wl1271_debug(DEBUG_EVENT, "ps_status: 0x%x", mbox->ps_status);
115
116 switch (mbox->ps_status) {
117 case EVENT_ENTER_POWER_SAVE_FAIL:
118 wl1271_debug(DEBUG_PSM, "PSM entry failed");
119
120 if (!test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
121 /* remain in active mode */
122 wlvif->psm_entry_retry = 0;
123 break;
124 }
125
126 if (wlvif->psm_entry_retry < total_retries) {
127 wlvif->psm_entry_retry++;
128 ret = wl1271_ps_set_mode(wl, wlvif,
129 STATION_POWER_SAVE_MODE,
130 wlvif->basic_rate, true);
131 } else {
132 wl1271_info("No ack to nullfunc from AP.");
133 wlvif->psm_entry_retry = 0;
134 *beacon_loss = true;
135 }
136 break;
137 case EVENT_ENTER_POWER_SAVE_SUCCESS:
138 wlvif->psm_entry_retry = 0;
139
140 /*
141 * BET has only a minor effect in 5GHz and masks
142 * channel switch IEs, so we only enable BET on 2.4GHz
143 */
144 if (wlvif->band == IEEE80211_BAND_2GHZ)
145 /* enable beacon early termination */
146 ret = wl1271_acx_bet_enable(wl, wlvif, true);
147
148 if (wlvif->ps_compl) {
149 complete(wlvif->ps_compl);
150 wlvif->ps_compl = NULL;
151 }
152 break;
153 default:
154 break;
155 }
156
157 return ret;
158}
159
160static void wl1271_event_rssi_trigger(struct wl1271 *wl, 33static void wl1271_event_rssi_trigger(struct wl1271 *wl,
161 struct wl12xx_vif *wlvif, 34 struct wl12xx_vif *wlvif,
162 struct event_mailbox *mbox) 35 struct event_mailbox *mbox)
@@ -237,7 +110,6 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
237{ 110{
238 struct ieee80211_vif *vif; 111 struct ieee80211_vif *vif;
239 struct wl12xx_vif *wlvif; 112 struct wl12xx_vif *wlvif;
240 int ret;
241 u32 vector; 113 u32 vector;
242 bool beacon_loss = false; 114 bool beacon_loss = false;
243 bool disconnect_sta = false; 115 bool disconnect_sta = false;
@@ -293,21 +165,6 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
293 beacon_loss = true; 165 beacon_loss = true;
294 } 166 }
295 167
296 if (vector & PS_REPORT_EVENT_ID) {
297 wl1271_debug(DEBUG_EVENT, "PS_REPORT_EVENT");
298 wl12xx_for_each_wlvif_sta(wl, wlvif) {
299 ret = wl1271_event_ps_report(wl, wlvif,
300 mbox, &beacon_loss);
301 if (ret < 0)
302 return ret;
303 }
304 }
305
306 if (vector & PSPOLL_DELIVERY_FAILURE_EVENT_ID)
307 wl12xx_for_each_wlvif_sta(wl, wlvif) {
308 wl1271_event_pspoll_delivery_fail(wl, wlvif);
309 }
310
311 if (vector & RSSI_SNR_TRIGGER_0_EVENT_ID) { 168 if (vector & RSSI_SNR_TRIGGER_0_EVENT_ID) {
312 /* TODO: check actual multi-role support */ 169 /* TODO: check actual multi-role support */
313 wl1271_debug(DEBUG_EVENT, "RSSI_SNR_TRIGGER_0_EVENT"); 170 wl1271_debug(DEBUG_EVENT, "RSSI_SNR_TRIGGER_0_EVENT");
diff --git a/drivers/net/wireless/wl12xx/event.h b/drivers/net/wireless/wl12xx/event.h
index b41f730f11dd..057d193d3525 100644
--- a/drivers/net/wireless/wl12xx/event.h
+++ b/drivers/net/wireless/wl12xx/event.h
@@ -51,7 +51,7 @@ enum {
51 SCAN_COMPLETE_EVENT_ID = BIT(10), 51 SCAN_COMPLETE_EVENT_ID = BIT(10),
52 WFD_DISCOVERY_COMPLETE_EVENT_ID = BIT(11), 52 WFD_DISCOVERY_COMPLETE_EVENT_ID = BIT(11),
53 AP_DISCOVERY_COMPLETE_EVENT_ID = BIT(12), 53 AP_DISCOVERY_COMPLETE_EVENT_ID = BIT(12),
54 PS_REPORT_EVENT_ID = BIT(13), 54 RESERVED1 = BIT(13),
55 PSPOLL_DELIVERY_FAILURE_EVENT_ID = BIT(14), 55 PSPOLL_DELIVERY_FAILURE_EVENT_ID = BIT(14),
56 ROLE_STOP_COMPLETE_EVENT_ID = BIT(15), 56 ROLE_STOP_COMPLETE_EVENT_ID = BIT(15),
57 RADAR_DETECTED_EVENT_ID = BIT(16), 57 RADAR_DETECTED_EVENT_ID = BIT(16),
@@ -96,7 +96,7 @@ struct event_mailbox {
96 s8 rssi_snr_trigger_metric[NUM_OF_RSSI_SNR_TRIGGERS]; 96 s8 rssi_snr_trigger_metric[NUM_OF_RSSI_SNR_TRIGGERS];
97 u8 change_auto_mode_timeout; 97 u8 change_auto_mode_timeout;
98 u8 scheduled_scan_status; 98 u8 scheduled_scan_status;
99 u8 ps_status; 99 u8 reserved4;
100 /* tuned channel (roc) */ 100 /* tuned channel (roc) */
101 u8 roc_channel; 101 u8 roc_channel;
102 102
@@ -135,6 +135,5 @@ struct event_mailbox {
135int wl1271_event_unmask(struct wl1271 *wl); 135int wl1271_event_unmask(struct wl1271 *wl);
136void wl1271_event_mbox_config(struct wl1271 *wl); 136void wl1271_event_mbox_config(struct wl1271 *wl);
137int wl1271_event_handle(struct wl1271 *wl, u8 mbox); 137int wl1271_event_handle(struct wl1271 *wl, u8 mbox);
138void wl1271_pspoll_work(struct work_struct *work);
139 138
140#endif 139#endif
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index a339a85ecfb0..74d4abb25ab1 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -235,7 +235,6 @@ static struct conf_drv_settings default_conf = {
235 .broadcast_timeout = 20000, 235 .broadcast_timeout = 20000,
236 .rx_broadcast_in_ps = 1, 236 .rx_broadcast_in_ps = 1,
237 .ps_poll_threshold = 10, 237 .ps_poll_threshold = 10,
238 .ps_poll_recovery_period = 700,
239 .bet_enable = CONF_BET_MODE_ENABLE, 238 .bet_enable = CONF_BET_MODE_ENABLE,
240 .bet_max_consecutive = 50, 239 .bet_max_consecutive = 50,
241 .psm_entry_retries = 8, 240 .psm_entry_retries = 8,
@@ -1570,57 +1569,6 @@ static struct notifier_block wl1271_dev_notifier = {
1570}; 1569};
1571 1570
1572#ifdef CONFIG_PM 1571#ifdef CONFIG_PM
1573static int wl1271_configure_suspend_sta(struct wl1271 *wl,
1574 struct wl12xx_vif *wlvif)
1575{
1576 int ret = 0;
1577
1578 mutex_lock(&wl->mutex);
1579
1580 if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags))
1581 goto out_unlock;
1582
1583 ret = wl1271_ps_elp_wakeup(wl);
1584 if (ret < 0)
1585 goto out_unlock;
1586
1587 /* enter psm if needed*/
1588 if (!test_bit(WLVIF_FLAG_PSM, &wlvif->flags)) {
1589 DECLARE_COMPLETION_ONSTACK(compl);
1590
1591 wlvif->ps_compl = &compl;
1592 ret = wl1271_ps_set_mode(wl, wlvif, STATION_POWER_SAVE_MODE,
1593 wlvif->basic_rate, true);
1594 if (ret < 0)
1595 goto out_sleep;
1596
1597 /* we must unlock here so we will be able to get events */
1598 wl1271_ps_elp_sleep(wl);
1599 mutex_unlock(&wl->mutex);
1600
1601 ret = wait_for_completion_timeout(
1602 &compl, msecs_to_jiffies(WL1271_PS_COMPLETE_TIMEOUT));
1603
1604 mutex_lock(&wl->mutex);
1605 if (ret <= 0) {
1606 wl1271_warning("couldn't enter ps mode!");
1607 ret = -EBUSY;
1608 goto out_cleanup;
1609 }
1610
1611 ret = wl1271_ps_elp_wakeup(wl);
1612 if (ret < 0)
1613 goto out_cleanup;
1614 }
1615out_sleep:
1616 wl1271_ps_elp_sleep(wl);
1617out_cleanup:
1618 wlvif->ps_compl = NULL;
1619out_unlock:
1620 mutex_unlock(&wl->mutex);
1621 return ret;
1622
1623}
1624 1572
1625static int wl1271_configure_suspend_ap(struct wl1271 *wl, 1573static int wl1271_configure_suspend_ap(struct wl1271 *wl,
1626 struct wl12xx_vif *wlvif) 1574 struct wl12xx_vif *wlvif)
@@ -1648,8 +1596,6 @@ out_unlock:
1648static int wl1271_configure_suspend(struct wl1271 *wl, 1596static int wl1271_configure_suspend(struct wl1271 *wl,
1649 struct wl12xx_vif *wlvif) 1597 struct wl12xx_vif *wlvif)
1650{ 1598{
1651 if (wlvif->bss_type == BSS_TYPE_STA_BSS)
1652 return wl1271_configure_suspend_sta(wl, wlvif);
1653 if (wlvif->bss_type == BSS_TYPE_AP_BSS) 1599 if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1654 return wl1271_configure_suspend_ap(wl, wlvif); 1600 return wl1271_configure_suspend_ap(wl, wlvif);
1655 return 0; 1601 return 0;
@@ -1659,10 +1605,9 @@ static void wl1271_configure_resume(struct wl1271 *wl,
1659 struct wl12xx_vif *wlvif) 1605 struct wl12xx_vif *wlvif)
1660{ 1606{
1661 int ret; 1607 int ret;
1662 bool is_sta = wlvif->bss_type == BSS_TYPE_STA_BSS;
1663 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS; 1608 bool is_ap = wlvif->bss_type == BSS_TYPE_AP_BSS;
1664 1609
1665 if (!is_sta && !is_ap) 1610 if (!is_ap)
1666 return; 1611 return;
1667 1612
1668 mutex_lock(&wl->mutex); 1613 mutex_lock(&wl->mutex);
@@ -1670,14 +1615,7 @@ static void wl1271_configure_resume(struct wl1271 *wl,
1670 if (ret < 0) 1615 if (ret < 0)
1671 goto out; 1616 goto out;
1672 1617
1673 if (is_sta) { 1618 wl1271_acx_beacon_filter_opt(wl, wlvif, false);
1674 /* exit psm if it wasn't configured */
1675 if (!test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags))
1676 wl1271_ps_set_mode(wl, wlvif, STATION_ACTIVE_MODE,
1677 wlvif->basic_rate, true);
1678 } else if (is_ap) {
1679 wl1271_acx_beacon_filter_opt(wl, wlvif, false);
1680 }
1681 1619
1682 wl1271_ps_elp_sleep(wl); 1620 wl1271_ps_elp_sleep(wl);
1683out: 1621out:
@@ -1719,9 +1657,6 @@ static int wl1271_op_suspend(struct ieee80211_hw *hw,
1719 1657
1720 wl1271_enable_interrupts(wl); 1658 wl1271_enable_interrupts(wl);
1721 flush_work(&wl->tx_work); 1659 flush_work(&wl->tx_work);
1722 wl12xx_for_each_wlvif(wl, wlvif) {
1723 flush_delayed_work(&wlvif->pspoll_work);
1724 }
1725 flush_delayed_work(&wl->elp_work); 1660 flush_delayed_work(&wl->elp_work);
1726 1661
1727 return 0; 1662 return 0;
@@ -1994,7 +1929,6 @@ static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)
1994 wl1271_rx_streaming_enable_work); 1929 wl1271_rx_streaming_enable_work);
1995 INIT_WORK(&wlvif->rx_streaming_disable_work, 1930 INIT_WORK(&wlvif->rx_streaming_disable_work,
1996 wl1271_rx_streaming_disable_work); 1931 wl1271_rx_streaming_disable_work);
1997 INIT_DELAYED_WORK(&wlvif->pspoll_work, wl1271_pspoll_work);
1998 INIT_LIST_HEAD(&wlvif->list); 1932 INIT_LIST_HEAD(&wlvif->list);
1999 1933
2000 setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer, 1934 setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer,
@@ -2278,10 +2212,10 @@ deinit:
2278 wl->sta_count--; 2212 wl->sta_count--;
2279 2213
2280 mutex_unlock(&wl->mutex); 2214 mutex_unlock(&wl->mutex);
2215
2281 del_timer_sync(&wlvif->rx_streaming_timer); 2216 del_timer_sync(&wlvif->rx_streaming_timer);
2282 cancel_work_sync(&wlvif->rx_streaming_enable_work); 2217 cancel_work_sync(&wlvif->rx_streaming_enable_work);
2283 cancel_work_sync(&wlvif->rx_streaming_disable_work); 2218 cancel_work_sync(&wlvif->rx_streaming_disable_work);
2284 cancel_delayed_work_sync(&wlvif->pspoll_work);
2285 2219
2286 mutex_lock(&wl->mutex); 2220 mutex_lock(&wl->mutex);
2287} 2221}
@@ -2528,13 +2462,6 @@ static int wl12xx_config_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2528 } 2462 }
2529 } 2463 }
2530 2464
2531 /*
2532 * if mac80211 changes the PSM mode, make sure the mode is not
2533 * incorrectly changed after the pspoll failure active window.
2534 */
2535 if (changed & IEEE80211_CONF_CHANGE_PS)
2536 clear_bit(WLVIF_FLAG_PSPOLL_FAILURE, &wlvif->flags);
2537
2538 if (conf->flags & IEEE80211_CONF_PS && 2465 if (conf->flags & IEEE80211_CONF_PS &&
2539 !test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) { 2466 !test_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags)) {
2540 set_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags); 2467 set_bit(WLVIF_FLAG_PSM_REQUESTED, &wlvif->flags);
@@ -3708,8 +3635,6 @@ sta_not_found:
3708 wlvif->aid = bss_conf->aid; 3635 wlvif->aid = bss_conf->aid;
3709 set_assoc = true; 3636 set_assoc = true;
3710 3637
3711 wlvif->ps_poll_failures = 0;
3712
3713 /* 3638 /*
3714 * use basic rates from AP, and determine lowest rate 3639 * use basic rates from AP, and determine lowest rate
3715 * to use with control frames. 3640 * to use with control frames.
diff --git a/drivers/net/wireless/wl12xx/wl12xx.h b/drivers/net/wireless/wl12xx/wl12xx.h
index b9bfbfffc5c0..e18e6160fdab 100644
--- a/drivers/net/wireless/wl12xx/wl12xx.h
+++ b/drivers/net/wireless/wl12xx/wl12xx.h
@@ -565,12 +565,6 @@ struct wl12xx_vif {
565 /* Session counter for the chipset */ 565 /* Session counter for the chipset */
566 int session_counter; 566 int session_counter;
567 567
568 struct completion *ps_compl;
569 struct delayed_work pspoll_work;
570
571 /* counter for ps-poll delivery failures */
572 int ps_poll_failures;
573
574 /* retry counter for PSM entries */ 568 /* retry counter for PSM entries */
575 u8 psm_entry_retry; 569 u8 psm_entry_retry;
576 570