Lines Matching refs:priv
24 static int cw1200_handle_action_rx(struct cw1200_common *priv,
27 cw1200_get_tx_rate(const struct cw1200_common *priv,
33 static inline void cw1200_tx_queues_lock(struct cw1200_common *priv) in cw1200_tx_queues_lock() argument
37 cw1200_queue_lock(&priv->tx_queue[i]); in cw1200_tx_queues_lock()
40 static inline void cw1200_tx_queues_unlock(struct cw1200_common *priv) in cw1200_tx_queues_unlock() argument
44 cw1200_queue_unlock(&priv->tx_queue[i]); in cw1200_tx_queues_unlock()
68 static void tx_policy_build(const struct cw1200_common *priv, in tx_policy_build() argument
73 unsigned limit = priv->short_frame_max_tx_count; in tx_policy_build()
173 policy->defined = cw1200_get_tx_rate(priv, &rates[0])->hw_value + 1; in tx_policy_build()
178 rateid = cw1200_get_tx_rate(priv, &rates[i])->hw_value; in tx_policy_build()
253 void tx_policy_clean(struct cw1200_common *priv) in tx_policy_clean() argument
256 struct tx_policy_cache *cache = &priv->tx_policy_cache; in tx_policy_clean()
259 cw1200_tx_queues_lock(priv); in tx_policy_clean()
275 cw1200_tx_queues_unlock(priv); in tx_policy_clean()
277 cw1200_tx_queues_unlock(priv); in tx_policy_clean()
284 void tx_policy_init(struct cw1200_common *priv) in tx_policy_init() argument
286 struct tx_policy_cache *cache = &priv->tx_policy_cache; in tx_policy_init()
299 static int tx_policy_get(struct cw1200_common *priv, in tx_policy_get() argument
304 struct tx_policy_cache *cache = &priv->tx_policy_cache; in tx_policy_get()
307 tx_policy_build(priv, &wanted, rates, count); in tx_policy_get()
334 cw1200_tx_queues_lock(priv); in tx_policy_get()
340 static void tx_policy_put(struct cw1200_common *priv, int idx) in tx_policy_put() argument
343 struct tx_policy_cache *cache = &priv->tx_policy_cache; in tx_policy_put()
350 cw1200_tx_queues_unlock(priv); in tx_policy_put()
355 static int tx_policy_upload(struct cw1200_common *priv) in tx_policy_upload() argument
357 struct tx_policy_cache *cache = &priv->tx_policy_cache; in tx_policy_upload()
371 dst->short_retries = priv->short_frame_max_tx_count; in tx_policy_upload()
372 dst->long_retries = priv->long_frame_max_tx_count; in tx_policy_upload()
383 cw1200_debug_tx_cache_miss(priv); in tx_policy_upload()
385 return wsm_set_tx_rate_retry_policy(priv, &arg); in tx_policy_upload()
390 struct cw1200_common *priv = in tx_policy_upload_work() local
394 tx_policy_upload(priv); in tx_policy_upload_work()
396 wsm_unlock_tx(priv); in tx_policy_upload_work()
397 cw1200_tx_queues_unlock(priv); in tx_policy_upload_work()
416 u32 cw1200_rate_mask_to_wsm(struct cw1200_common *priv, u32 rates) in cw1200_rate_mask_to_wsm() argument
422 ret |= BIT(priv->rates[i].hw_value); in cw1200_rate_mask_to_wsm()
428 cw1200_get_tx_rate(const struct cw1200_common *priv, in cw1200_get_tx_rate() argument
434 return &priv->mcs_rates[rate->idx]; in cw1200_get_tx_rate()
435 return &priv->hw->wiphy->bands[priv->channel->band]-> in cw1200_get_tx_rate()
440 cw1200_tx_h_calc_link_ids(struct cw1200_common *priv, in cw1200_tx_h_calc_link_ids() argument
447 else if (priv->mode != NL80211_IFTYPE_AP) in cw1200_tx_h_calc_link_ids()
451 if (priv->enable_beacon) { in cw1200_tx_h_calc_link_ids()
459 t->txpriv.link_id = cw1200_find_link_id(priv, t->da); in cw1200_tx_h_calc_link_ids()
461 t->txpriv.link_id = cw1200_alloc_link_id(priv, t->da); in cw1200_tx_h_calc_link_ids()
463 wiphy_err(priv->hw->wiphy, in cw1200_tx_h_calc_link_ids()
470 priv->link_id_db[t->txpriv.raw_link_id - 1].timestamp = in cw1200_tx_h_calc_link_ids()
478 cw1200_tx_h_pm(struct cw1200_common *priv, in cw1200_tx_h_pm() argument
483 spin_lock_bh(&priv->ps_state_lock); in cw1200_tx_h_pm()
484 priv->sta_asleep_mask &= mask; in cw1200_tx_h_pm()
485 priv->pspoll_mask &= mask; in cw1200_tx_h_pm()
486 spin_unlock_bh(&priv->ps_state_lock); in cw1200_tx_h_pm()
491 cw1200_tx_h_calc_tid(struct cw1200_common *priv, in cw1200_tx_h_calc_tid() argument
503 cw1200_tx_h_crypt(struct cw1200_common *priv, in cw1200_tx_h_crypt() argument
520 cw1200_tx_h_align(struct cw1200_common *priv, in cw1200_tx_h_align() argument
530 wiphy_err(priv->hw->wiphy, in cw1200_tx_h_align()
537 wiphy_err(priv->hw->wiphy, in cw1200_tx_h_align()
546 cw1200_debug_tx_align(priv); in cw1200_tx_h_align()
551 cw1200_tx_h_action(struct cw1200_common *priv, in cw1200_tx_h_action() argument
565 cw1200_tx_h_wsm(struct cw1200_common *priv, in cw1200_tx_h_wsm() argument
571 wiphy_err(priv->hw->wiphy, in cw1200_tx_h_wsm()
588 cw1200_tx_h_bt(struct cw1200_common *priv, in cw1200_tx_h_bt() argument
594 if (!priv->bt_present) in cw1200_tx_h_bt()
611 priv->listen_interval) { in cw1200_tx_h_bt()
613 priv->listen_interval, in cw1200_tx_h_bt()
618 mgt_frame->u.assoc_req.listen_interval = cpu_to_le16(priv->listen_interval); in cw1200_tx_h_bt()
641 cw1200_tx_h_rate_policy(struct cw1200_common *priv, in cw1200_tx_h_rate_policy() argument
647 t->txpriv.rate_id = tx_policy_get(priv, in cw1200_tx_h_rate_policy()
655 t->rate = cw1200_get_tx_rate(priv, in cw1200_tx_h_rate_policy()
659 if (cw1200_ht_greenfield(&priv->ht_info)) in cw1200_tx_h_rate_policy()
673 wsm_lock_tx_async(priv); in cw1200_tx_h_rate_policy()
674 cw1200_tx_queues_lock(priv); in cw1200_tx_h_rate_policy()
675 if (queue_work(priv->workqueue, in cw1200_tx_h_rate_policy()
676 &priv->tx_policy_upload_work) <= 0) { in cw1200_tx_h_rate_policy()
677 cw1200_tx_queues_unlock(priv); in cw1200_tx_h_rate_policy()
678 wsm_unlock_tx(priv); in cw1200_tx_h_rate_policy()
685 cw1200_tx_h_pm_state(struct cw1200_common *priv, in cw1200_tx_h_pm_state() argument
691 !priv->buffered_multicasts) { in cw1200_tx_h_pm_state()
692 priv->buffered_multicasts = true; in cw1200_tx_h_pm_state()
693 if (priv->sta_asleep_mask) in cw1200_tx_h_pm_state()
694 queue_work(priv->workqueue, in cw1200_tx_h_pm_state()
695 &priv->multicast_start_work); in cw1200_tx_h_pm_state()
699 was_buffered = priv->link_id_db[t->txpriv.raw_link_id - 1].buffered[t->txpriv.tid]++; in cw1200_tx_h_pm_state()
710 struct cw1200_common *priv = dev->priv; in cw1200_tx() local
725 if (priv->bh_error) in cw1200_tx()
738 ret = cw1200_tx_h_calc_link_ids(priv, &t); in cw1200_tx()
746 cw1200_tx_h_pm(priv, &t); in cw1200_tx()
747 cw1200_tx_h_calc_tid(priv, &t); in cw1200_tx()
748 ret = cw1200_tx_h_crypt(priv, &t); in cw1200_tx()
751 ret = cw1200_tx_h_align(priv, &t, &flags); in cw1200_tx()
754 ret = cw1200_tx_h_action(priv, &t); in cw1200_tx()
757 wsm = cw1200_tx_h_wsm(priv, &t); in cw1200_tx()
763 cw1200_tx_h_bt(priv, &t, wsm); in cw1200_tx()
764 ret = cw1200_tx_h_rate_policy(priv, &t, wsm); in cw1200_tx()
771 spin_lock_bh(&priv->ps_state_lock); in cw1200_tx()
773 tid_update = cw1200_tx_h_pm_state(priv, &t); in cw1200_tx()
774 BUG_ON(cw1200_queue_put(&priv->tx_queue[t.queue], in cw1200_tx()
777 spin_unlock_bh(&priv->ps_state_lock); in cw1200_tx()
784 cw1200_bh_wakeup(priv); in cw1200_tx()
789 cw1200_skb_dtor(priv, skb, &t.txpriv); in cw1200_tx()
795 static int cw1200_handle_action_rx(struct cw1200_common *priv, in cw1200_handle_action_rx() argument
807 static int cw1200_handle_pspoll(struct cw1200_common *priv, in cw1200_handle_pspoll() argument
817 if (priv->join_status != CW1200_JOIN_STATUS_AP) in cw1200_handle_pspoll()
819 if (memcmp(priv->vif->addr, pspoll->bssid, ETH_ALEN)) in cw1200_handle_pspoll()
823 sta = ieee80211_find_sta(priv->vif, pspoll->ta); in cw1200_handle_pspoll()
834 priv->pspoll_mask |= pspoll_mask; in cw1200_handle_pspoll()
839 if (cw1200_queue_get_num_queued(&priv->tx_queue[i], in cw1200_handle_pspoll()
841 cw1200_bh_wakeup(priv); in cw1200_handle_pspoll()
853 void cw1200_tx_confirm_cb(struct cw1200_common *priv, in cw1200_tx_confirm_cb() argument
858 struct cw1200_queue *queue = &priv->tx_queue[queue_id]; in cw1200_tx_confirm_cb()
865 if (priv->mode == NL80211_IFTYPE_UNSPECIFIED) { in cw1200_tx_confirm_cb()
884 cw1200_suspend_resume(priv, &suspend); in cw1200_tx_confirm_cb()
885 wiphy_warn(priv->hw->wiphy, "Requeue for link_id %d (try %d). STAs asleep: 0x%.8X\n", in cw1200_tx_confirm_cb()
888 priv->sta_asleep_mask); in cw1200_tx_confirm_cb()
890 spin_lock_bh(&priv->ps_state_lock); in cw1200_tx_confirm_cb()
892 priv->buffered_multicasts = true; in cw1200_tx_confirm_cb()
893 if (priv->sta_asleep_mask) { in cw1200_tx_confirm_cb()
894 queue_work(priv->workqueue, in cw1200_tx_confirm_cb()
895 &priv->multicast_start_work); in cw1200_tx_confirm_cb()
898 spin_unlock_bh(&priv->ps_state_lock); in cw1200_tx_confirm_cb()
906 if (cw1200_ht_greenfield(&priv->ht_info)) in cw1200_tx_confirm_cb()
909 spin_lock(&priv->bss_loss_lock); in cw1200_tx_confirm_cb()
910 if (priv->bss_loss_state && in cw1200_tx_confirm_cb()
911 arg->packet_id == priv->bss_loss_confirm_id) { in cw1200_tx_confirm_cb()
914 __cw1200_cqm_bssloss_sm(priv, 0, 0, 1); in cw1200_tx_confirm_cb()
917 __cw1200_cqm_bssloss_sm(priv, 0, 1, 0); in cw1200_tx_confirm_cb()
920 spin_unlock(&priv->bss_loss_lock); in cw1200_tx_confirm_cb()
925 cw1200_debug_txed(priv); in cw1200_tx_confirm_cb()
931 cw1200_debug_txed_agg(priv); in cw1200_tx_confirm_cb()
962 cw1200_bh_wakeup(priv); in cw1200_tx_confirm_cb()
965 static void cw1200_notify_buffered_tx(struct cw1200_common *priv, in cw1200_notify_buffered_tx() argument
974 buffered = priv->link_id_db in cw1200_notify_buffered_tx()
977 spin_lock_bh(&priv->ps_state_lock); in cw1200_notify_buffered_tx()
980 spin_unlock_bh(&priv->ps_state_lock); in cw1200_notify_buffered_tx()
985 sta = ieee80211_find_sta(priv->vif, hdr->addr1); in cw1200_notify_buffered_tx()
993 void cw1200_skb_dtor(struct cw1200_common *priv, in cw1200_skb_dtor() argument
999 cw1200_notify_buffered_tx(priv, skb, in cw1200_skb_dtor()
1001 tx_policy_put(priv, txpriv->rate_id); in cw1200_skb_dtor()
1003 ieee80211_tx_status(priv->hw, skb); in cw1200_skb_dtor()
1006 void cw1200_rx_cb(struct cw1200_common *priv, in cw1200_rx_cb() argument
1019 bool p2p = priv->vif && priv->vif->p2p; in cw1200_rx_cb()
1023 if (priv->mode == NL80211_IFTYPE_UNSPECIFIED) { in cw1200_rx_cb()
1029 entry = &priv->link_id_db[link_id - 1]; in cw1200_rx_cb()
1038 WARN_ON(work_pending(&priv->linkid_reset_work)); in cw1200_rx_cb()
1039 memcpy(&priv->action_frame_sa[0], in cw1200_rx_cb()
1041 priv->action_linkid = 0; in cw1200_rx_cb()
1042 schedule_work(&priv->linkid_reset_work); in cw1200_rx_cb()
1051 WARN_ON(work_pending(&priv->linkid_reset_work)); in cw1200_rx_cb()
1052 memcpy(&priv->action_frame_sa[0], in cw1200_rx_cb()
1054 priv->action_linkid = link_id; in cw1200_rx_cb()
1055 schedule_work(&priv->linkid_reset_work); in cw1200_rx_cb()
1072 wiphy_warn(priv->hw->wiphy, "Mailformed SDU rx'ed. Size is lesser than IEEE header.\n"); in cw1200_rx_cb()
1077 if (cw1200_handle_pspoll(priv, skb)) in cw1200_rx_cb()
1139 wiphy_warn(priv->hw->wiphy, "Malformed SDU rx'ed. Size is lesser than crypto headers.\n"); in cw1200_rx_cb()
1159 cw1200_debug_rxed(priv); in cw1200_rx_cb()
1161 cw1200_debug_rxed_agg(priv); in cw1200_rx_cb()
1165 if (cw1200_handle_action_rx(priv, skb)) in cw1200_rx_cb()
1168 !arg->status && priv->vif && in cw1200_rx_cb()
1169 ether_addr_equal(ieee80211_get_SA(frame), priv->vif->bss_conf.bssid)) { in cw1200_rx_cb()
1180 if (priv->join_dtim_period != tim->dtim_period) { in cw1200_rx_cb()
1181 priv->join_dtim_period = tim->dtim_period; in cw1200_rx_cb()
1182 queue_work(priv->workqueue, in cw1200_rx_cb()
1183 &priv->set_beacon_wakeup_period_work); in cw1200_rx_cb()
1188 if (priv->disable_beacon_filter && in cw1200_rx_cb()
1189 (priv->vif->bss_conf.assoc || in cw1200_rx_cb()
1190 priv->vif->bss_conf.ibss_joined)) { in cw1200_rx_cb()
1191 priv->disable_beacon_filter = false; in cw1200_rx_cb()
1192 queue_work(priv->workqueue, in cw1200_rx_cb()
1193 &priv->update_filtering_work); in cw1200_rx_cb()
1207 cw1200_pm_stay_awake(&priv->pm_state, grace_period); in cw1200_rx_cb()
1210 spin_lock_bh(&priv->ps_state_lock); in cw1200_rx_cb()
1215 ieee80211_rx_irqsafe(priv->hw, skb); in cw1200_rx_cb()
1216 spin_unlock_bh(&priv->ps_state_lock); in cw1200_rx_cb()
1218 ieee80211_rx_irqsafe(priv->hw, skb); in cw1200_rx_cb()
1232 int cw1200_alloc_key(struct cw1200_common *priv) in cw1200_alloc_key() argument
1236 idx = ffs(~priv->key_map) - 1; in cw1200_alloc_key()
1240 priv->key_map |= BIT(idx); in cw1200_alloc_key()
1241 priv->keys[idx].index = idx; in cw1200_alloc_key()
1245 void cw1200_free_key(struct cw1200_common *priv, int idx) in cw1200_free_key() argument
1247 BUG_ON(!(priv->key_map & BIT(idx))); in cw1200_free_key()
1248 memset(&priv->keys[idx], 0, sizeof(priv->keys[idx])); in cw1200_free_key()
1249 priv->key_map &= ~BIT(idx); in cw1200_free_key()
1252 void cw1200_free_keys(struct cw1200_common *priv) in cw1200_free_keys() argument
1254 memset(&priv->keys, 0, sizeof(priv->keys)); in cw1200_free_keys()
1255 priv->key_map = 0; in cw1200_free_keys()
1258 int cw1200_upload_keys(struct cw1200_common *priv) in cw1200_upload_keys() argument
1262 if (priv->key_map & BIT(idx)) { in cw1200_upload_keys()
1263 ret = wsm_add_key(priv, &priv->keys[idx]); in cw1200_upload_keys()
1273 struct cw1200_common *priv = in cw1200_link_id_reset() local
1277 if (!priv->action_linkid) { in cw1200_link_id_reset()
1279 temp_linkid = cw1200_alloc_link_id(priv, in cw1200_link_id_reset()
1280 &priv->action_frame_sa[0]); in cw1200_link_id_reset()
1284 flush_workqueue(priv->workqueue); in cw1200_link_id_reset()
1286 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_reset()
1287 priv->link_id_db[temp_linkid - 1].prev_status = in cw1200_link_id_reset()
1288 priv->link_id_db[temp_linkid - 1].status; in cw1200_link_id_reset()
1289 priv->link_id_db[temp_linkid - 1].status = in cw1200_link_id_reset()
1291 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_reset()
1292 wsm_lock_tx_async(priv); in cw1200_link_id_reset()
1293 if (queue_work(priv->workqueue, in cw1200_link_id_reset()
1294 &priv->link_id_work) <= 0) in cw1200_link_id_reset()
1295 wsm_unlock_tx(priv); in cw1200_link_id_reset()
1298 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_reset()
1299 priv->link_id_db[priv->action_linkid - 1].prev_status = in cw1200_link_id_reset()
1300 priv->link_id_db[priv->action_linkid - 1].status; in cw1200_link_id_reset()
1301 priv->link_id_db[priv->action_linkid - 1].status = in cw1200_link_id_reset()
1303 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_reset()
1304 wsm_lock_tx_async(priv); in cw1200_link_id_reset()
1305 if (queue_work(priv->workqueue, &priv->link_id_work) <= 0) in cw1200_link_id_reset()
1306 wsm_unlock_tx(priv); in cw1200_link_id_reset()
1307 flush_workqueue(priv->workqueue); in cw1200_link_id_reset()
1311 int cw1200_find_link_id(struct cw1200_common *priv, const u8 *mac) in cw1200_find_link_id() argument
1314 spin_lock_bh(&priv->ps_state_lock); in cw1200_find_link_id()
1316 if (!memcmp(mac, priv->link_id_db[i].mac, ETH_ALEN) && in cw1200_find_link_id()
1317 priv->link_id_db[i].status) { in cw1200_find_link_id()
1318 priv->link_id_db[i].timestamp = jiffies; in cw1200_find_link_id()
1323 spin_unlock_bh(&priv->ps_state_lock); in cw1200_find_link_id()
1327 int cw1200_alloc_link_id(struct cw1200_common *priv, const u8 *mac) in cw1200_alloc_link_id() argument
1333 spin_lock_bh(&priv->ps_state_lock); in cw1200_alloc_link_id()
1335 if (!priv->link_id_db[i].status) { in cw1200_alloc_link_id()
1338 } else if (priv->link_id_db[i].status != CW1200_LINK_HARD && in cw1200_alloc_link_id()
1339 !priv->tx_queue_stats.link_map_cache[i + 1]) { in cw1200_alloc_link_id()
1341 now - priv->link_id_db[i].timestamp; in cw1200_alloc_link_id()
1349 struct cw1200_link_entry *entry = &priv->link_id_db[ret - 1]; in cw1200_alloc_link_id()
1355 wsm_lock_tx_async(priv); in cw1200_alloc_link_id()
1356 if (queue_work(priv->workqueue, &priv->link_id_work) <= 0) in cw1200_alloc_link_id()
1357 wsm_unlock_tx(priv); in cw1200_alloc_link_id()
1359 wiphy_info(priv->hw->wiphy, in cw1200_alloc_link_id()
1363 spin_unlock_bh(&priv->ps_state_lock); in cw1200_alloc_link_id()
1369 struct cw1200_common *priv = in cw1200_link_id_work() local
1371 wsm_flush_tx(priv); in cw1200_link_id_work()
1372 cw1200_link_id_gc_work(&priv->link_id_gc_work.work); in cw1200_link_id_work()
1373 wsm_unlock_tx(priv); in cw1200_link_id_work()
1378 struct cw1200_common *priv = in cw1200_link_id_gc_work() local
1393 if (priv->join_status != CW1200_JOIN_STATUS_AP) in cw1200_link_id_gc_work()
1396 wsm_lock_tx(priv); in cw1200_link_id_gc_work()
1397 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1401 if (priv->link_id_db[i].status == CW1200_LINK_RESERVE || in cw1200_link_id_gc_work()
1402 (priv->link_id_db[i].status == CW1200_LINK_HARD && in cw1200_link_id_gc_work()
1403 !(priv->link_id_map & mask))) { in cw1200_link_id_gc_work()
1404 if (priv->link_id_map & mask) { in cw1200_link_id_gc_work()
1405 priv->sta_asleep_mask &= ~mask; in cw1200_link_id_gc_work()
1406 priv->pspoll_mask &= ~mask; in cw1200_link_id_gc_work()
1409 priv->link_id_map |= mask; in cw1200_link_id_gc_work()
1410 if (priv->link_id_db[i].status != CW1200_LINK_HARD) in cw1200_link_id_gc_work()
1411 priv->link_id_db[i].status = CW1200_LINK_SOFT; in cw1200_link_id_gc_work()
1412 memcpy(map_link.mac_addr, priv->link_id_db[i].mac, in cw1200_link_id_gc_work()
1414 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1417 wsm_reset(priv, &reset); in cw1200_link_id_gc_work()
1420 wsm_map_link(priv, &map_link); in cw1200_link_id_gc_work()
1422 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1423 } else if (priv->link_id_db[i].status == CW1200_LINK_SOFT) { in cw1200_link_id_gc_work()
1424 ttl = priv->link_id_db[i].timestamp - now + in cw1200_link_id_gc_work()
1428 priv->link_id_db[i].status = CW1200_LINK_OFF; in cw1200_link_id_gc_work()
1429 priv->link_id_map &= ~mask; in cw1200_link_id_gc_work()
1430 priv->sta_asleep_mask &= ~mask; in cw1200_link_id_gc_work()
1431 priv->pspoll_mask &= ~mask; in cw1200_link_id_gc_work()
1433 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1435 wsm_reset(priv, &reset); in cw1200_link_id_gc_work()
1436 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1440 } else if (priv->link_id_db[i].status == CW1200_LINK_RESET || in cw1200_link_id_gc_work()
1441 priv->link_id_db[i].status == in cw1200_link_id_gc_work()
1443 int status = priv->link_id_db[i].status; in cw1200_link_id_gc_work()
1444 priv->link_id_db[i].status = in cw1200_link_id_gc_work()
1445 priv->link_id_db[i].prev_status; in cw1200_link_id_gc_work()
1446 priv->link_id_db[i].timestamp = now; in cw1200_link_id_gc_work()
1448 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1449 wsm_reset(priv, &reset); in cw1200_link_id_gc_work()
1452 priv->link_id_db[i].mac, in cw1200_link_id_gc_work()
1455 wsm_map_link(priv, &map_link); in cw1200_link_id_gc_work()
1459 spin_lock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1462 skb_queue_purge(&priv->link_id_db[i].rx_queue); in cw1200_link_id_gc_work()
1467 spin_unlock_bh(&priv->ps_state_lock); in cw1200_link_id_gc_work()
1469 queue_delayed_work(priv->workqueue, in cw1200_link_id_gc_work()
1470 &priv->link_id_gc_work, next_gc); in cw1200_link_id_gc_work()
1471 wsm_unlock_tx(priv); in cw1200_link_id_gc_work()