Lines Matching refs:priv

142 void mwifiex_ralist_add(struct mwifiex_private *priv, const u8 *ra)  in mwifiex_ralist_add()  argument
146 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_ralist_add()
162 if (!mwifiex_queuing_ra_based(priv)) { in mwifiex_ralist_add()
163 if (mwifiex_get_tdls_link_status(priv, ra) == in mwifiex_ralist_add()
167 mwifiex_tdls_peer_11n_enabled(priv, ra); in mwifiex_ralist_add()
169 ra_list->is_11n_enabled = IS_11N_ENABLED(priv); in mwifiex_ralist_add()
172 spin_lock_irqsave(&priv->sta_list_spinlock, flags); in mwifiex_ralist_add()
173 node = mwifiex_get_sta_entry(priv, ra); in mwifiex_ralist_add()
175 mwifiex_is_sta_11n_enabled(priv, node); in mwifiex_ralist_add()
178 spin_unlock_irqrestore(&priv->sta_list_spinlock, flags); in mwifiex_ralist_add()
190 &priv->wmm.tid_tbl_ptr[i].ra_list); in mwifiex_ralist_add()
197 static void mwifiex_wmm_default_queue_priorities(struct mwifiex_private *priv) in mwifiex_wmm_default_queue_priorities() argument
200 priv->wmm.queue_priority[0] = WMM_AC_VO; in mwifiex_wmm_default_queue_priorities()
201 priv->wmm.queue_priority[1] = WMM_AC_VI; in mwifiex_wmm_default_queue_priorities()
202 priv->wmm.queue_priority[2] = WMM_AC_BE; in mwifiex_wmm_default_queue_priorities()
203 priv->wmm.queue_priority[3] = WMM_AC_BK; in mwifiex_wmm_default_queue_priorities()
210 mwifiex_wmm_queue_priorities_tid(struct mwifiex_private *priv) in mwifiex_wmm_queue_priorities_tid() argument
212 struct mwifiex_wmm_desc *wmm = &priv->wmm; in mwifiex_wmm_queue_priorities_tid()
222 priv->tos_to_tid_inv[tos_to_tid[i]] = (u8)i; in mwifiex_wmm_queue_priorities_tid()
231 mwifiex_wmm_setup_queue_priorities(struct mwifiex_private *priv, in mwifiex_wmm_setup_queue_priorities() argument
238 if (!wmm_ie || !priv->wmm_enabled) { in mwifiex_wmm_setup_queue_priorities()
240 mwifiex_wmm_default_queue_priorities(priv); in mwifiex_wmm_setup_queue_priorities()
244 dev_dbg(priv->adapter->dev, "info: WMM Parameter IE: version=%d, " in mwifiex_wmm_setup_queue_priorities()
257 priv->wmm.queue_priority[ac_idx] = ac_idx; in mwifiex_wmm_setup_queue_priorities()
260 dev_dbg(priv->adapter->dev, in mwifiex_wmm_setup_queue_priorities()
272 swap(priv->wmm.queue_priority[j - 1], in mwifiex_wmm_setup_queue_priorities()
273 priv->wmm.queue_priority[j]); in mwifiex_wmm_setup_queue_priorities()
275 if (priv->wmm.queue_priority[j - 1] in mwifiex_wmm_setup_queue_priorities()
276 < priv->wmm.queue_priority[j]) in mwifiex_wmm_setup_queue_priorities()
277 swap(priv->wmm.queue_priority[j - 1], in mwifiex_wmm_setup_queue_priorities()
278 priv->wmm.queue_priority[j]); in mwifiex_wmm_setup_queue_priorities()
283 mwifiex_wmm_queue_priorities_tid(priv); in mwifiex_wmm_setup_queue_priorities()
293 mwifiex_wmm_eval_downgrade_ac(struct mwifiex_private *priv, in mwifiex_wmm_eval_downgrade_ac() argument
300 ac_status = &priv->wmm.ac_status[eval_ac]; in mwifiex_wmm_eval_downgrade_ac()
317 ac_status = &priv->wmm.ac_status[down_ac]; in mwifiex_wmm_eval_downgrade_ac()
332 mwifiex_wmm_setup_ac_downgrade(struct mwifiex_private *priv) in mwifiex_wmm_setup_ac_downgrade() argument
336 dev_dbg(priv->adapter->dev, "info: WMM: AC Priorities:" in mwifiex_wmm_setup_ac_downgrade()
339 if (!priv->wmm_enabled) { in mwifiex_wmm_setup_ac_downgrade()
342 priv->wmm.ac_down_graded_vals[ac_val] = in mwifiex_wmm_setup_ac_downgrade()
346 priv->wmm.ac_down_graded_vals[ac_val] in mwifiex_wmm_setup_ac_downgrade()
347 = mwifiex_wmm_eval_downgrade_ac(priv, in mwifiex_wmm_setup_ac_downgrade()
349 dev_dbg(priv->adapter->dev, in mwifiex_wmm_setup_ac_downgrade()
351 ac_val, priv->wmm.ac_down_graded_vals[ac_val]); in mwifiex_wmm_setup_ac_downgrade()
386 u8 mwifiex_wmm_downgrade_tid(struct mwifiex_private *priv, u32 tid) in mwifiex_wmm_downgrade_tid() argument
391 ac = mwifiex_wmm_convert_tos_to_ac(priv->adapter, tid); in mwifiex_wmm_downgrade_tid()
392 ac_down = priv->wmm.ac_down_graded_vals[ac]; in mwifiex_wmm_downgrade_tid()
410 struct mwifiex_private *priv; in mwifiex_wmm_init() local
413 priv = adapter->priv[j]; in mwifiex_wmm_init()
414 if (!priv) in mwifiex_wmm_init()
420 priv->aggr_prio_tbl[i].amsdu = in mwifiex_wmm_init()
421 priv->tos_to_tid_inv[i]; in mwifiex_wmm_init()
423 priv->aggr_prio_tbl[i].amsdu = in mwifiex_wmm_init()
425 priv->aggr_prio_tbl[i].ampdu_ap = in mwifiex_wmm_init()
426 priv->tos_to_tid_inv[i]; in mwifiex_wmm_init()
427 priv->aggr_prio_tbl[i].ampdu_user = in mwifiex_wmm_init()
428 priv->tos_to_tid_inv[i]; in mwifiex_wmm_init()
431 mwifiex_set_ba_params(priv); in mwifiex_wmm_init()
432 mwifiex_reset_11n_rx_seq_num(priv); in mwifiex_wmm_init()
434 atomic_set(&priv->wmm.tx_pkts_queued, 0); in mwifiex_wmm_init()
435 atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID); in mwifiex_wmm_init()
446 struct mwifiex_private *priv; in mwifiex_wmm_lists_empty() local
449 priv = adapter->priv[i]; in mwifiex_wmm_lists_empty()
450 if (priv && atomic_read(&priv->wmm.tx_pkts_queued)) in mwifiex_wmm_lists_empty()
465 mwifiex_wmm_del_pkts_in_ralist_node(struct mwifiex_private *priv, in mwifiex_wmm_del_pkts_in_ralist_node() argument
468 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_wmm_del_pkts_in_ralist_node()
482 mwifiex_wmm_del_pkts_in_ralist(struct mwifiex_private *priv, in mwifiex_wmm_del_pkts_in_ralist() argument
488 mwifiex_wmm_del_pkts_in_ralist_node(priv, ra_list); in mwifiex_wmm_del_pkts_in_ralist()
494 static void mwifiex_wmm_cleanup_queues(struct mwifiex_private *priv) in mwifiex_wmm_cleanup_queues() argument
499 mwifiex_wmm_del_pkts_in_ralist(priv, &priv->wmm.tid_tbl_ptr[i]. in mwifiex_wmm_cleanup_queues()
502 atomic_set(&priv->wmm.tx_pkts_queued, 0); in mwifiex_wmm_cleanup_queues()
503 atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID); in mwifiex_wmm_cleanup_queues()
509 static void mwifiex_wmm_delete_all_ralist(struct mwifiex_private *priv) in mwifiex_wmm_delete_all_ralist() argument
515 dev_dbg(priv->adapter->dev, in mwifiex_wmm_delete_all_ralist()
518 &priv->wmm.tid_tbl_ptr[i].ra_list, in mwifiex_wmm_delete_all_ralist()
524 INIT_LIST_HEAD(&priv->wmm.tid_tbl_ptr[i].ra_list); in mwifiex_wmm_delete_all_ralist()
546 mwifiex_clean_txrx(struct mwifiex_private *priv) in mwifiex_clean_txrx() argument
551 mwifiex_11n_cleanup_reorder_tbl(priv); in mwifiex_clean_txrx()
552 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); in mwifiex_clean_txrx()
554 mwifiex_wmm_cleanup_queues(priv); in mwifiex_clean_txrx()
555 mwifiex_11n_delete_all_tx_ba_stream_tbl(priv); in mwifiex_clean_txrx()
557 if (priv->adapter->if_ops.cleanup_mpa_buf) in mwifiex_clean_txrx()
558 priv->adapter->if_ops.cleanup_mpa_buf(priv->adapter); in mwifiex_clean_txrx()
560 mwifiex_wmm_delete_all_ralist(priv); in mwifiex_clean_txrx()
563 if (priv->adapter->if_ops.clean_pcie_ring && in mwifiex_clean_txrx()
564 !priv->adapter->surprise_removed) in mwifiex_clean_txrx()
565 priv->adapter->if_ops.clean_pcie_ring(priv->adapter); in mwifiex_clean_txrx()
566 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_clean_txrx()
568 skb_queue_walk_safe(&priv->tdls_txq, skb, tmp) in mwifiex_clean_txrx()
569 mwifiex_write_data_complete(priv->adapter, skb, 0, -1); in mwifiex_clean_txrx()
571 idr_for_each(&priv->ack_status_frames, mwifiex_free_ack_frame, NULL); in mwifiex_clean_txrx()
572 idr_destroy(&priv->ack_status_frames); in mwifiex_clean_txrx()
580 mwifiex_wmm_get_ralist_node(struct mwifiex_private *priv, u8 tid, in mwifiex_wmm_get_ralist_node() argument
585 list_for_each_entry(ra_list, &priv->wmm.tid_tbl_ptr[tid].ra_list, in mwifiex_wmm_get_ralist_node()
602 mwifiex_wmm_get_queue_raptr(struct mwifiex_private *priv, u8 tid, in mwifiex_wmm_get_queue_raptr() argument
607 ra_list = mwifiex_wmm_get_ralist_node(priv, tid, ra_addr); in mwifiex_wmm_get_queue_raptr()
610 mwifiex_ralist_add(priv, ra_addr); in mwifiex_wmm_get_queue_raptr()
612 return mwifiex_wmm_get_ralist_node(priv, tid, ra_addr); in mwifiex_wmm_get_queue_raptr()
620 mwifiex_wmm_del_peer_ra_list(struct mwifiex_private *priv, const u8 *ra_addr) in mwifiex_wmm_del_peer_ra_list() argument
626 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); in mwifiex_wmm_del_peer_ra_list()
629 ra_list = mwifiex_wmm_get_ralist_node(priv, i, ra_addr); in mwifiex_wmm_del_peer_ra_list()
633 mwifiex_wmm_del_pkts_in_ralist_node(priv, ra_list); in mwifiex_wmm_del_peer_ra_list()
634 atomic_sub(ra_list->total_pkt_count, &priv->wmm.tx_pkts_queued); in mwifiex_wmm_del_peer_ra_list()
638 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_wmm_del_peer_ra_list()
646 mwifiex_is_ralist_valid(struct mwifiex_private *priv, in mwifiex_is_ralist_valid() argument
651 list_for_each_entry(rlist, &priv->wmm.tid_tbl_ptr[ptr_index].ra_list, in mwifiex_is_ralist_valid()
670 mwifiex_wmm_add_buf_txqueue(struct mwifiex_private *priv, in mwifiex_wmm_add_buf_txqueue() argument
673 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_wmm_add_buf_txqueue()
685 if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA && in mwifiex_wmm_add_buf_txqueue()
690 else if (memcmp(priv->cfg_bssid, ra, ETH_ALEN)) in mwifiex_wmm_add_buf_txqueue()
691 tdls_status = mwifiex_get_tdls_link_status(priv, ra); in mwifiex_wmm_add_buf_txqueue()
694 if (!priv->media_connected && !mwifiex_is_skb_mgmt_frame(skb)) { in mwifiex_wmm_add_buf_txqueue()
702 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); in mwifiex_wmm_add_buf_txqueue()
704 tid_down = mwifiex_wmm_downgrade_tid(priv, tid); in mwifiex_wmm_add_buf_txqueue()
709 if (!mwifiex_queuing_ra_based(priv) && in mwifiex_wmm_add_buf_txqueue()
713 ra_list = mwifiex_wmm_get_queue_raptr(priv, tid_down, in mwifiex_wmm_add_buf_txqueue()
718 skb_queue_tail(&priv->tdls_txq, skb); in mwifiex_wmm_add_buf_txqueue()
719 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_wmm_add_buf_txqueue()
723 list_head = priv->wmm.tid_tbl_ptr[tid_down].ra_list; in mwifiex_wmm_add_buf_txqueue()
736 ra_list = mwifiex_wmm_get_queue_raptr(priv, tid_down, ra); in mwifiex_wmm_add_buf_txqueue()
740 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_wmm_add_buf_txqueue()
750 if (atomic_read(&priv->wmm.highest_queued_prio) < in mwifiex_wmm_add_buf_txqueue()
751 priv->tos_to_tid_inv[tid_down]) in mwifiex_wmm_add_buf_txqueue()
752 atomic_set(&priv->wmm.highest_queued_prio, in mwifiex_wmm_add_buf_txqueue()
753 priv->tos_to_tid_inv[tid_down]); in mwifiex_wmm_add_buf_txqueue()
755 atomic_inc(&priv->wmm.tx_pkts_queued); in mwifiex_wmm_add_buf_txqueue()
757 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_wmm_add_buf_txqueue()
771 int mwifiex_ret_wmm_get_status(struct mwifiex_private *priv, in mwifiex_ret_wmm_get_status() argument
783 dev_dbg(priv->adapter->dev, "info: WMM: WMM_GET_STATUS cmdresp received: %d\n", in mwifiex_ret_wmm_get_status()
798 dev_dbg(priv->adapter->dev, in mwifiex_ret_wmm_get_status()
805 ac_status = &priv->wmm.ac_status[tlv_wmm_qstatus-> in mwifiex_ret_wmm_get_status()
826 dev_dbg(priv->adapter->dev, in mwifiex_ret_wmm_get_status()
832 memcpy((u8 *) &priv->curr_bss_params.bss_descriptor. in mwifiex_ret_wmm_get_status()
847 mwifiex_wmm_setup_queue_priorities(priv, wmm_param_ie); in mwifiex_ret_wmm_get_status()
848 mwifiex_wmm_setup_ac_downgrade(priv); in mwifiex_ret_wmm_get_status()
861 mwifiex_wmm_process_association_req(struct mwifiex_private *priv, in mwifiex_wmm_process_association_req() argument
878 dev_dbg(priv->adapter->dev, in mwifiex_wmm_process_association_req()
882 if ((priv->wmm_required || in mwifiex_wmm_process_association_req()
883 (ht_cap && (priv->adapter->config_bands & BAND_GN || in mwifiex_wmm_process_association_req()
884 priv->adapter->config_bands & BAND_AN))) && in mwifiex_wmm_process_association_req()
894 - sizeof(priv->wmm_qosinfo)), in mwifiex_wmm_process_association_req()
895 &priv->wmm_qosinfo, sizeof(priv->wmm_qosinfo)); in mwifiex_wmm_process_association_req()
916 mwifiex_wmm_compute_drv_pkt_delay(struct mwifiex_private *priv, in mwifiex_wmm_compute_drv_pkt_delay() argument
928 ret_val = (u8) (min(queue_delay, priv->wmm.drv_pkt_delay_max) >> 1); in mwifiex_wmm_compute_drv_pkt_delay()
930 dev_dbg(priv->adapter->dev, "data: WMM: Pkt Delay: %d ms," in mwifiex_wmm_compute_drv_pkt_delay()
941 struct mwifiex_private **priv, int *tid) in mwifiex_wmm_get_highest_priolist_ptr() argument
957 priv_tmp = adapter->bss_prio_tbl[j].bss_prio_cur->priv; in mwifiex_wmm_get_highest_priolist_ptr()
997 *priv = priv_tmp; in mwifiex_wmm_get_highest_priolist_ptr()
1012 void mwifiex_rotate_priolists(struct mwifiex_private *priv, in mwifiex_rotate_priolists() argument
1016 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_rotate_priolists()
1018 struct mwifiex_tid_tbl *tid_ptr = &priv->wmm.tid_tbl_ptr[tid]; in mwifiex_rotate_priolists()
1021 spin_lock_irqsave(&tbl[priv->bss_priority].bss_prio_lock, flags); in mwifiex_rotate_priolists()
1026 list_move(&tbl[priv->bss_priority].bss_prio_head, in mwifiex_rotate_priolists()
1027 &tbl[priv->bss_priority].bss_prio_cur->list); in mwifiex_rotate_priolists()
1028 spin_unlock_irqrestore(&tbl[priv->bss_priority].bss_prio_lock, flags); in mwifiex_rotate_priolists()
1030 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); in mwifiex_rotate_priolists()
1031 if (mwifiex_is_ralist_valid(priv, ra, tid)) { in mwifiex_rotate_priolists()
1032 priv->wmm.packets_out[tid]++; in mwifiex_rotate_priolists()
1036 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_rotate_priolists()
1043 mwifiex_is_11n_aggragation_possible(struct mwifiex_private *priv, in mwifiex_is_11n_aggragation_possible() argument
1051 if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP && priv->ap_11n_enabled && in mwifiex_is_11n_aggragation_possible()
1072 mwifiex_send_single_packet(struct mwifiex_private *priv, in mwifiex_send_single_packet() argument
1075 __releases(&priv->wmm.ra_list_spinlock) in mwifiex_send_single_packet()
1079 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_send_single_packet()
1083 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_single_packet()
1101 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, ra_list_flags); in mwifiex_send_single_packet()
1106 if (mwifiex_process_tx(priv, skb, &tx_param) == -EBUSY) { in mwifiex_send_single_packet()
1108 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, ra_list_flags); in mwifiex_send_single_packet()
1110 if (!mwifiex_is_ralist_valid(priv, ptr, ptr_index)) { in mwifiex_send_single_packet()
1111 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_single_packet()
1122 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_single_packet()
1125 mwifiex_rotate_priolists(priv, ptr, ptr_index); in mwifiex_send_single_packet()
1126 atomic_dec(&priv->wmm.tx_pkts_queued); in mwifiex_send_single_packet()
1135 mwifiex_is_ptr_processed(struct mwifiex_private *priv, in mwifiex_is_ptr_processed() argument
1158 mwifiex_send_processed_packet(struct mwifiex_private *priv, in mwifiex_send_processed_packet() argument
1161 __releases(&priv->wmm.ra_list_spinlock) in mwifiex_send_processed_packet()
1164 struct mwifiex_adapter *adapter = priv->adapter; in mwifiex_send_processed_packet()
1170 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_processed_packet()
1178 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_processed_packet()
1192 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, ra_list_flags); in mwifiex_send_processed_packet()
1209 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, ra_list_flags); in mwifiex_send_processed_packet()
1211 if (!mwifiex_is_ralist_valid(priv, ptr, ptr_index)) { in mwifiex_send_processed_packet()
1212 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_processed_packet()
1221 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, in mwifiex_send_processed_packet()
1241 mwifiex_rotate_priolists(priv, ptr, ptr_index); in mwifiex_send_processed_packet()
1242 atomic_dec(&priv->wmm.tx_pkts_queued); in mwifiex_send_processed_packet()
1254 struct mwifiex_private *priv = NULL; in mwifiex_dequeue_tx_packet() local
1260 ptr = mwifiex_wmm_get_highest_priolist_ptr(adapter, &priv, &ptr_index); in mwifiex_dequeue_tx_packet()
1268 spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags); in mwifiex_dequeue_tx_packet()
1269 if (!mwifiex_is_ralist_valid(priv, ptr, ptr_index)) { in mwifiex_dequeue_tx_packet()
1270 spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags); in mwifiex_dequeue_tx_packet()
1274 if (mwifiex_is_ptr_processed(priv, ptr)) { in mwifiex_dequeue_tx_packet()
1275 mwifiex_send_processed_packet(priv, ptr, ptr_index, flags); in mwifiex_dequeue_tx_packet()
1283 priv->wps.session_enable) { in mwifiex_dequeue_tx_packet()
1287 mwifiex_is_amsdu_allowed(priv, tid) && in mwifiex_dequeue_tx_packet()
1288 mwifiex_is_11n_aggragation_possible(priv, ptr, in mwifiex_dequeue_tx_packet()
1290 mwifiex_11n_aggregate_pkt(priv, ptr, ptr_index, flags); in mwifiex_dequeue_tx_packet()
1295 mwifiex_send_single_packet(priv, ptr, ptr_index, flags); in mwifiex_dequeue_tx_packet()
1300 if (mwifiex_is_ampdu_allowed(priv, ptr, tid) && in mwifiex_dequeue_tx_packet()
1303 mwifiex_create_ba_tbl(priv, ptr->ra, tid, in mwifiex_dequeue_tx_packet()
1305 mwifiex_send_addba(priv, tid, ptr->ra); in mwifiex_dequeue_tx_packet()
1307 (priv, tid, &tid_del, ra)) { in mwifiex_dequeue_tx_packet()
1308 mwifiex_create_ba_tbl(priv, ptr->ra, tid, in mwifiex_dequeue_tx_packet()
1310 mwifiex_send_delba(priv, tid_del, ra, 1); in mwifiex_dequeue_tx_packet()
1313 if (mwifiex_is_amsdu_allowed(priv, tid) && in mwifiex_dequeue_tx_packet()
1314 mwifiex_is_11n_aggragation_possible(priv, ptr, in mwifiex_dequeue_tx_packet()
1316 mwifiex_11n_aggregate_pkt(priv, ptr, ptr_index, flags); in mwifiex_dequeue_tx_packet()
1320 mwifiex_send_single_packet(priv, ptr, ptr_index, flags); in mwifiex_dequeue_tx_packet()