Lines Matching refs:wil
53 static int wil_find_free_sring(struct wil6210_priv *wil) in wil_find_free_sring() argument
58 if (!wil->srings[i].va) in wil_find_free_sring()
65 static void wil_sring_free(struct wil6210_priv *wil, in wil_sring_free() argument
68 struct device *dev = wil_to_dev(wil); in wil_sring_free()
76 wil_dbg_misc(wil, "status_ring_free, size(bytes)=%zu, 0x%p:%pad\n", in wil_sring_free()
84 static int wil_sring_alloc(struct wil6210_priv *wil, in wil_sring_alloc() argument
87 struct device *dev = wil_to_dev(wil); in wil_sring_alloc()
90 wil_dbg_misc(wil, "status_ring_alloc: size=%zu\n", sz); in wil_sring_alloc()
93 wil_err(wil, "Cannot allocate a zero size status ring\n"); in wil_sring_alloc()
106 wil_dbg_misc(wil, "status_ring[%d] 0x%p:%pad\n", sring->size, sring->va, in wil_sring_alloc()
112 static int wil_tx_init_edma(struct wil6210_priv *wil) in wil_tx_init_edma() argument
114 int ring_id = wil_find_free_sring(wil); in wil_tx_init_edma()
119 if (wil->tx_status_ring_order < WIL_SRING_SIZE_ORDER_MIN || in wil_tx_init_edma()
120 wil->tx_status_ring_order > WIL_SRING_SIZE_ORDER_MAX) in wil_tx_init_edma()
121 wil->tx_status_ring_order = WIL_TX_SRING_SIZE_ORDER_DEFAULT; in wil_tx_init_edma()
123 status_ring_size = 1 << wil->tx_status_ring_order; in wil_tx_init_edma()
125 wil_dbg_misc(wil, "init TX sring: size=%u, ring_id=%u\n", in wil_tx_init_edma()
134 sring = &wil->srings[ring_id]; in wil_tx_init_edma()
139 rc = wil_sring_alloc(wil, sring); in wil_tx_init_edma()
143 rc = wil_wmi_tx_sring_cfg(wil, ring_id); in wil_tx_init_edma()
148 wil->tx_sring_idx = ring_id; in wil_tx_init_edma()
152 wil_sring_free(wil, sring); in wil_tx_init_edma()
159 static int wil_ring_alloc_skb_edma(struct wil6210_priv *wil, in wil_ring_alloc_skb_edma() argument
162 struct device *dev = wil_to_dev(wil); in wil_ring_alloc_skb_edma()
163 unsigned int sz = ALIGN(wil->rx_buf_len, 4); in wil_ring_alloc_skb_edma()
166 struct list_head *active = &wil->rx_buff_mgmt.active; in wil_ring_alloc_skb_edma()
167 struct list_head *free = &wil->rx_buff_mgmt.free; in wil_ring_alloc_skb_edma()
169 struct wil_rx_buff *buff_arr = wil->rx_buff_mgmt.buff_arr; in wil_ring_alloc_skb_edma()
176 wil->rx_buff_mgmt.free_list_empty_cnt++; in wil_ring_alloc_skb_edma()
232 static int wil_rx_refill_edma(struct wil6210_priv *wil) in wil_rx_refill_edma() argument
234 struct wil_ring *ring = &wil->ring_rx; in wil_rx_refill_edma()
241 rc = wil_ring_alloc_skb_edma(wil, ring, ring->swhead); in wil_rx_refill_edma()
244 wil_dbg_txrx(wil, "No free buffer ID found\n"); in wil_rx_refill_edma()
246 wil_err_ratelimited(wil, in wil_rx_refill_edma()
258 wil_w(wil, ring->hwtail, ring->swhead); in wil_rx_refill_edma()
263 static void wil_move_all_rx_buff_to_free_list(struct wil6210_priv *wil, in wil_move_all_rx_buff_to_free_list() argument
266 struct device *dev = wil_to_dev(wil); in wil_move_all_rx_buff_to_free_list()
288 if (buff_id >= wil->rx_buff_mgmt.size) { in wil_move_all_rx_buff_to_free_list()
289 wil_err(wil, "invalid buff_id %d\n", buff_id); in wil_move_all_rx_buff_to_free_list()
292 skb = wil->rx_buff_mgmt.buff_arr[buff_id].skb; in wil_move_all_rx_buff_to_free_list()
293 wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; in wil_move_all_rx_buff_to_free_list()
295 wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); in wil_move_all_rx_buff_to_free_list()
300 list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, in wil_move_all_rx_buff_to_free_list()
301 &wil->rx_buff_mgmt.free); in wil_move_all_rx_buff_to_free_list()
305 static void wil_free_rx_buff_arr(struct wil6210_priv *wil) in wil_free_rx_buff_arr() argument
307 struct wil_ring *ring = &wil->ring_rx; in wil_free_rx_buff_arr()
309 if (!wil->rx_buff_mgmt.buff_arr) in wil_free_rx_buff_arr()
315 wil_move_all_rx_buff_to_free_list(wil, ring); in wil_free_rx_buff_arr()
317 kfree(wil->rx_buff_mgmt.buff_arr); in wil_free_rx_buff_arr()
318 wil->rx_buff_mgmt.buff_arr = NULL; in wil_free_rx_buff_arr()
321 static int wil_init_rx_buff_arr(struct wil6210_priv *wil, in wil_init_rx_buff_arr() argument
325 struct list_head *active = &wil->rx_buff_mgmt.active; in wil_init_rx_buff_arr()
326 struct list_head *free = &wil->rx_buff_mgmt.free; in wil_init_rx_buff_arr()
329 wil->rx_buff_mgmt.buff_arr = kcalloc(size, sizeof(struct wil_rx_buff), in wil_init_rx_buff_arr()
331 if (!wil->rx_buff_mgmt.buff_arr) in wil_init_rx_buff_arr()
339 buff_arr = wil->rx_buff_mgmt.buff_arr; in wil_init_rx_buff_arr()
345 wil->rx_buff_mgmt.size = size; in wil_init_rx_buff_arr()
350 static int wil_init_rx_sring(struct wil6210_priv *wil, in wil_init_rx_sring() argument
355 struct wil_status_ring *sring = &wil->srings[ring_id]; in wil_init_rx_sring()
358 wil_dbg_misc(wil, "init RX sring: size=%u, ring_id=%u\n", sring->size, in wil_init_rx_sring()
366 rc = wil_sring_alloc(wil, sring); in wil_init_rx_sring()
370 rc = wil_wmi_rx_sring_add(wil, ring_id); in wil_init_rx_sring()
378 wil_sring_free(wil, sring); in wil_init_rx_sring()
382 static int wil_ring_alloc_desc_ring(struct wil6210_priv *wil, in wil_ring_alloc_desc_ring() argument
385 struct device *dev = wil_to_dev(wil); in wil_ring_alloc_desc_ring()
388 wil_dbg_misc(wil, "alloc_desc_ring:\n"); in wil_ring_alloc_desc_ring()
411 wil_dbg_misc(wil, "%s ring[%d] 0x%p:%pad 0x%p\n", in wil_ring_alloc_desc_ring()
427 static void wil_ring_free_edma(struct wil6210_priv *wil, struct wil_ring *ring) in wil_ring_free_edma() argument
429 struct device *dev = wil_to_dev(wil); in wil_ring_free_edma()
438 lockdep_assert_held(&wil->mutex); in wil_ring_free_edma()
440 wil_dbg_misc(wil, "free Rx ring [%d] 0x%p:%pad 0x%p\n", in wil_ring_free_edma()
444 wil_move_all_rx_buff_to_free_list(wil, ring); in wil_ring_free_edma()
449 ring_index = ring - wil->ring_tx; in wil_ring_free_edma()
451 wil_dbg_misc(wil, "free Tx ring %d [%d] 0x%p:%pad 0x%p\n", in wil_ring_free_edma()
465 wil_dbg_txrx(wil, in wil_ring_free_edma()
486 static int wil_init_rx_desc_ring(struct wil6210_priv *wil, u16 desc_ring_size, in wil_init_rx_desc_ring() argument
489 struct wil_ring *ring = &wil->ring_rx; in wil_init_rx_desc_ring()
492 wil_dbg_misc(wil, "init RX desc ring\n"); in wil_init_rx_desc_ring()
496 rc = wil_ring_alloc_desc_ring(wil, ring); in wil_init_rx_desc_ring()
500 rc = wil_wmi_rx_desc_ring_add(wil, status_ring_id); in wil_init_rx_desc_ring()
506 wil_ring_free_edma(wil, ring); in wil_init_rx_desc_ring()
510 static void wil_get_reorder_params_edma(struct wil6210_priv *wil, in wil_get_reorder_params_edma() argument
520 *seq = le16_to_cpu(wil_rx_status_get_seq(wil, s)); in wil_get_reorder_params_edma()
534 static int wil_rx_crypto_check_edma(struct wil6210_priv *wil, in wil_rx_crypto_check_edma() argument
545 if (wil->use_rx_hw_reordering) in wil_rx_crypto_check_edma()
554 s = &wil->sta[cid]; in wil_rx_crypto_check_edma()
560 wil_err_ratelimited(wil, in wil_rx_crypto_check_edma()
567 wil_err_ratelimited(wil, in wil_rx_crypto_check_edma()
577 static bool wil_is_rx_idle_edma(struct wil6210_priv *wil) in wil_is_rx_idle_edma() argument
585 for (i = 0; i < wil->num_rx_status_rings; i++) { in wil_is_rx_idle_edma()
586 sring = &wil->srings[i]; in wil_is_rx_idle_edma()
601 static void wil_rx_buf_len_init_edma(struct wil6210_priv *wil) in wil_rx_buf_len_init_edma() argument
603 wil->rx_buf_len = rx_large_buf ? in wil_rx_buf_len_init_edma()
607 static int wil_rx_init_edma(struct wil6210_priv *wil, u16 desc_ring_size) in wil_rx_init_edma() argument
610 struct wil_ring *ring = &wil->ring_rx; in wil_rx_init_edma()
612 size_t elem_size = wil->use_compressed_rx_status ? in wil_rx_init_edma()
619 if (wil->use_compressed_rx_status && !wil->use_rx_hw_reordering) { in wil_rx_init_edma()
620 wil_err(wil, in wil_rx_init_edma()
625 if (wil->rx_status_ring_order < WIL_SRING_SIZE_ORDER_MIN || in wil_rx_init_edma()
626 wil->rx_status_ring_order > WIL_SRING_SIZE_ORDER_MAX) in wil_rx_init_edma()
627 wil->rx_status_ring_order = WIL_RX_SRING_SIZE_ORDER_DEFAULT; in wil_rx_init_edma()
629 status_ring_size = 1 << wil->rx_status_ring_order; in wil_rx_init_edma()
631 wil_dbg_misc(wil, in wil_rx_init_edma()
635 wil_rx_buf_len_init_edma(wil); in wil_rx_init_edma()
637 max_rx_pl_per_desc = ALIGN(wil->rx_buf_len, 4); in wil_rx_init_edma()
640 if (wil->num_rx_status_rings > WIL6210_MAX_STATUS_RINGS - 1) in wil_rx_init_edma()
641 wil->num_rx_status_rings = WIL6210_MAX_STATUS_RINGS - 1; in wil_rx_init_edma()
643 wil_dbg_misc(wil, "rx_init: allocate %d status rings\n", in wil_rx_init_edma()
644 wil->num_rx_status_rings); in wil_rx_init_edma()
646 rc = wil_wmi_cfg_def_rx_offload(wil, max_rx_pl_per_desc); in wil_rx_init_edma()
651 for (i = 0; i < wil->num_rx_status_rings; i++) { in wil_rx_init_edma()
652 int sring_id = wil_find_free_sring(wil); in wil_rx_init_edma()
658 rc = wil_init_rx_sring(wil, status_ring_size, elem_size, in wil_rx_init_edma()
665 rc = wil_init_rx_desc_ring(wil, desc_ring_size, in wil_rx_init_edma()
670 if (wil->rx_buff_id_count >= status_ring_size) { in wil_rx_init_edma()
671 wil_info(wil, in wil_rx_init_edma()
673 wil->rx_buff_id_count, status_ring_size, in wil_rx_init_edma()
675 wil->rx_buff_id_count = status_ring_size - 1; in wil_rx_init_edma()
679 rc = wil_init_rx_buff_arr(wil, wil->rx_buff_id_count); in wil_rx_init_edma()
684 rc = wil_rx_refill_edma(wil); in wil_rx_init_edma()
690 wil_free_rx_buff_arr(wil); in wil_rx_init_edma()
692 wil_ring_free_edma(wil, ring); in wil_rx_init_edma()
694 for (i = 0; i < wil->num_rx_status_rings; i++) in wil_rx_init_edma()
695 wil_sring_free(wil, &wil->srings[i]); in wil_rx_init_edma()
703 struct wil6210_priv *wil = vif_to_wil(vif); in wil_ring_init_tx_edma() local
705 struct wil_ring *ring = &wil->ring_tx[ring_id]; in wil_ring_init_tx_edma()
706 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ring_id]; in wil_ring_init_tx_edma()
708 lockdep_assert_held(&wil->mutex); in wil_ring_init_tx_edma()
710 wil_dbg_misc(wil, in wil_ring_init_tx_edma()
712 ring_id, cid, tid, wil->tx_sring_idx); in wil_ring_init_tx_edma()
716 rc = wil_ring_alloc_desc_ring(wil, ring); in wil_ring_init_tx_edma()
720 wil->ring2cid_tid[ring_id][0] = cid; in wil_ring_init_tx_edma()
721 wil->ring2cid_tid[ring_id][1] = tid; in wil_ring_init_tx_edma()
727 wil_err(wil, "WMI_TX_DESC_RING_ADD_CMD failed\n"); in wil_ring_init_tx_edma()
732 wil_addba_tx_request(wil, ring_id, agg_wsize); in wil_ring_init_tx_edma()
740 wil_ring_free_edma(wil, ring); in wil_ring_init_tx_edma()
741 wil->ring2cid_tid[ring_id][0] = WIL6210_MAX_CID; in wil_ring_init_tx_edma()
742 wil->ring2cid_tid[ring_id][1] = 0; in wil_ring_init_tx_edma()
749 static int wil_check_bar(struct wil6210_priv *wil, void *msg, int cid, in wil_check_bar() argument
759 ftype = wil_rx_status_get_frame_type(wil, msg); in wil_check_bar()
763 fc1 = wil_rx_status_get_fc1(wil, msg); in wil_check_bar()
766 seq = le16_to_cpu(wil_rx_status_get_seq(wil, msg)); in wil_check_bar()
767 vif = wil->vifs[mid]; in wil_check_bar()
770 wil_dbg_txrx(wil, "RX descriptor with invalid mid %d", mid); in wil_check_bar()
774 wil_dbg_txrx(wil, in wil_check_bar()
780 wil_dbg_txrx(wil, in wil_check_bar()
783 wil_rx_bar(wil, vif, cid, tid, seq); in wil_check_bar()
785 u32 sz = wil->use_compressed_rx_status ? in wil_check_bar()
792 wil_dbg_txrx(wil, in wil_check_bar()
804 static int wil_rx_error_check_edma(struct wil6210_priv *wil, in wil_rx_error_check_edma() argument
822 wil_dbg_txrx(wil, "L2 RX error, l2_rx_status=0x%x\n", in wil_rx_error_check_edma()
826 wil_dbg_txrx(wil, in wil_rx_error_check_edma()
831 wil_dbg_txrx(wil, "L2 KEY error, dropping packet\n"); in wil_rx_error_check_edma()
835 wil_dbg_txrx(wil, in wil_rx_error_check_edma()
840 wil_dbg_txrx(wil, in wil_rx_error_check_edma()
862 static struct sk_buff *wil_sring_reap_rx_edma(struct wil6210_priv *wil, in wil_sring_reap_rx_edma() argument
865 struct device *dev = wil_to_dev(wil); in wil_sring_reap_rx_edma()
872 unsigned int sz = ALIGN(wil->rx_buf_len, 4); in wil_sring_reap_rx_edma()
881 u16 sring_idx = sring - wil->srings; in wil_sring_reap_rx_edma()
895 if (unlikely(!wil_val_in_range(buff_id, 0, wil->rx_buff_mgmt.size))) { in wil_sring_reap_rx_edma()
896 wil_err(wil, "Corrupt buff_id=%d, sring->swhead=%d\n", in wil_sring_reap_rx_edma()
905 skb = wil->rx_buff_mgmt.buff_arr[buff_id].skb; in wil_sring_reap_rx_edma()
906 wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; in wil_sring_reap_rx_edma()
908 wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); in wil_sring_reap_rx_edma()
916 trace_wil6210_rx_status(wil, wil->use_compressed_rx_status, buff_id, in wil_sring_reap_rx_edma()
918 wil_dbg_txrx(wil, "Rx, buff_id=%u, sring_idx=%u, dmalen=%u bytes\n", in wil_sring_reap_rx_edma()
921 (const void *)msg, wil->use_compressed_rx_status ? in wil_sring_reap_rx_edma()
926 list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, in wil_sring_reap_rx_edma()
927 &wil->rx_buff_mgmt.free); in wil_sring_reap_rx_edma()
933 wil_err(wil, "Corrupt cid=%d, sring->swhead=%d\n", in wil_sring_reap_rx_edma()
938 stats = &wil->sta[cid].stats; in wil_sring_reap_rx_edma()
941 wil_dbg_txrx(wil, "Short frame, len = %d\n", skb->len); in wil_sring_reap_rx_edma()
948 wil_err(wil, "Rx size too large: %d bytes!\n", dmalen); in wil_sring_reap_rx_edma()
983 wil_err(wil, "failed to merge skbs!\n"); in wil_sring_reap_rx_edma()
1006 if (!wil->use_rx_hw_reordering && !wil->use_compressed_rx_status && in wil_sring_reap_rx_edma()
1007 wil_check_bar(wil, msg, cid, skb, stats) == -EAGAIN) { in wil_sring_reap_rx_edma()
1018 wil_err(wil, "Unexpected data offset %d\n", data_offset); in wil_sring_reap_rx_edma()
1037 void wil_rx_handle_edma(struct wil6210_priv *wil, int *quota) in wil_rx_handle_edma() argument
1040 struct wil_ring *ring = &wil->ring_rx; in wil_rx_handle_edma()
1046 wil_err(wil, "Rx IRQ while Rx not yet initialized\n"); in wil_rx_handle_edma()
1049 wil_dbg_txrx(wil, "rx_handle\n"); in wil_rx_handle_edma()
1051 for (i = 0; i < wil->num_rx_status_rings; i++) { in wil_rx_handle_edma()
1052 sring = &wil->srings[i]; in wil_rx_handle_edma()
1054 wil_err(wil, in wil_rx_handle_edma()
1062 wil_sring_reap_rx_edma(wil, sring)))) { in wil_rx_handle_edma()
1064 if (wil->use_rx_hw_reordering) { in wil_rx_handle_edma()
1067 struct wil6210_vif *vif = wil->vifs[mid]; in wil_rx_handle_edma()
1070 wil_dbg_txrx(wil, in wil_rx_handle_edma()
1079 wil_rx_reorder(wil, skb); in wil_rx_handle_edma()
1083 wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size); in wil_rx_handle_edma()
1086 wil_rx_refill_edma(wil); in wil_rx_handle_edma()
1127 int wil_tx_sring_handler(struct wil6210_priv *wil, in wil_tx_sring_handler() argument
1131 struct device *dev = wil_to_dev(wil); in wil_tx_sring_handler()
1155 wil_err(wil, "invalid num_descs 0\n"); in wil_tx_sring_handler()
1163 wil_err(wil, "invalid ring id %d\n", ring_id); in wil_tx_sring_handler()
1166 ring = &wil->ring_tx[ring_id]; in wil_tx_sring_handler()
1168 wil_err(wil, "Tx irq[%d]: ring not initialized\n", in wil_tx_sring_handler()
1172 txdata = &wil->ring_tx_data[ring_id]; in wil_tx_sring_handler()
1174 wil_info(wil, "Tx irq[%d]: ring disabled\n", ring_id); in wil_tx_sring_handler()
1177 vif = wil->vifs[txdata->mid]; in wil_tx_sring_handler()
1179 wil_dbg_txrx(wil, "invalid MID %d for ring %d\n", in wil_tx_sring_handler()
1186 cid = wil->ring2cid_tid[ring_id][0]; in wil_tx_sring_handler()
1188 stats = &wil->sta[cid].stats; in wil_tx_sring_handler()
1190 wil_dbg_txrx(wil, in wil_tx_sring_handler()
1208 wil_dbg_txrx(wil, in wil_tx_sring_handler()
1228 wil_tx_latency_calc(wil, skb, in wil_tx_sring_handler()
1229 &wil->sta[cid]); in wil_tx_sring_handler()
1253 if (wil_val_in_range(wil->ring_idle_trsh, in wil_tx_sring_handler()
1255 wil_dbg_txrx(wil, "Ring[%2d] idle %d -> %d\n", in wil_tx_sring_handler()
1269 wil_update_net_queues(wil, vif, NULL, false); in wil_tx_sring_handler()
1272 wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size); in wil_tx_sring_handler()
1313 static int wil_tx_tso_gen_desc(struct wil6210_priv *wil, void *buff_addr, in wil_tx_tso_gen_desc() argument
1320 struct device *dev = wil_to_dev(wil); in wil_tx_tso_gen_desc()
1324 int ring_index = ring - wil->ring_tx; in wil_tx_tso_gen_desc()
1338 wil_err(wil, "TSO: Skb DMA map error\n"); in wil_tx_tso_gen_desc()
1342 wil->txrx_ops.tx_desc_map((union wil_tx_desc *)d, pa, in wil_tx_tso_gen_desc()
1364 static int __wil_tx_ring_tso_edma(struct wil6210_priv *wil, in __wil_tx_ring_tso_edma() argument
1369 int ring_index = ring - wil->ring_tx; in __wil_tx_ring_tso_edma()
1370 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ring_index]; in __wil_tx_ring_tso_edma()
1384 wil_dbg_txrx(wil, "tx_ring_tso: %d bytes to ring %d\n", skb->len, in __wil_tx_ring_tso_edma()
1391 wil_err_ratelimited(wil, in __wil_tx_ring_tso_edma()
1422 wil_dbg_txrx(wil, "TSO: process header descriptor, hdrlen %u\n", in __wil_tx_ring_tso_edma()
1424 rc = wil_tx_tso_gen_desc(wil, skb->data, hdrlen, swhead, in __wil_tx_ring_tso_edma()
1433 wil_dbg_txrx(wil, "TSO: process skb head, headlen %u\n", headlen); in __wil_tx_ring_tso_edma()
1434 rc = wil_tx_tso_gen_desc(wil, skb->data + hdrlen, headlen, in __wil_tx_ring_tso_edma()
1448 wil_dbg_txrx(wil, "TSO: frag[%d]: len %u, descs_used %d\n", f, in __wil_tx_ring_tso_edma()
1451 rc = wil_tx_tso_gen_desc(wil, NULL, len, in __wil_tx_ring_tso_edma()
1464 if (wil_val_in_range(wil->ring_idle_trsh, in __wil_tx_ring_tso_edma()
1467 wil_dbg_txrx(wil, "Ring[%2d] not idle %d -> %d\n", in __wil_tx_ring_tso_edma()
1473 wil_dbg_txrx(wil, "TSO: Tx swhead %d -> %d\n", swhead, ring->swhead); in __wil_tx_ring_tso_edma()
1480 if (wil->tx_latency) in __wil_tx_ring_tso_edma()
1485 wil_w(wil, ring->hwtail, ring->swhead); in __wil_tx_ring_tso_edma()
1491 struct device *dev = wil_to_dev(wil); in __wil_tx_ring_tso_edma()
1511 struct wil6210_priv *wil = vif_to_wil(vif); in wil_ring_init_bcast_edma() local
1512 struct wil_ring *ring = &wil->ring_tx[ring_id]; in wil_ring_init_bcast_edma()
1514 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ring_id]; in wil_ring_init_bcast_edma()
1516 wil_dbg_misc(wil, "init bcast: ring_id=%d, sring_id=%d\n", in wil_ring_init_bcast_edma()
1517 ring_id, wil->tx_sring_idx); in wil_ring_init_bcast_edma()
1519 lockdep_assert_held(&wil->mutex); in wil_ring_init_bcast_edma()
1524 rc = wil_ring_alloc_desc_ring(wil, ring); in wil_ring_init_bcast_edma()
1528 wil->ring2cid_tid[ring_id][0] = WIL6210_MAX_CID; /* CID */ in wil_ring_init_bcast_edma()
1529 wil->ring2cid_tid[ring_id][1] = 0; /* TID */ in wil_ring_init_bcast_edma()
1544 wil_ring_free_edma(wil, ring); in wil_ring_init_bcast_edma()
1550 static void wil_tx_fini_edma(struct wil6210_priv *wil) in wil_tx_fini_edma() argument
1552 struct wil_status_ring *sring = &wil->srings[wil->tx_sring_idx]; in wil_tx_fini_edma()
1554 wil_dbg_misc(wil, "free TX sring\n"); in wil_tx_fini_edma()
1556 wil_sring_free(wil, sring); in wil_tx_fini_edma()
1568 static void wil_rx_fini_edma(struct wil6210_priv *wil) in wil_rx_fini_edma() argument
1570 struct wil_ring *ring = &wil->ring_rx; in wil_rx_fini_edma()
1573 wil_dbg_misc(wil, "rx_fini_edma\n"); in wil_rx_fini_edma()
1575 wil_ring_free_edma(wil, ring); in wil_rx_fini_edma()
1577 for (i = 0; i < wil->num_rx_status_rings; i++) { in wil_rx_fini_edma()
1578 wil_rx_data_free(&wil->srings[i]); in wil_rx_fini_edma()
1579 wil_sring_free(wil, &wil->srings[i]); in wil_rx_fini_edma()
1582 wil_free_rx_buff_arr(wil); in wil_rx_fini_edma()
1585 void wil_init_txrx_ops_edma(struct wil6210_priv *wil) in wil_init_txrx_ops_edma() argument
1587 wil->txrx_ops.configure_interrupt_moderation = in wil_init_txrx_ops_edma()
1590 wil->txrx_ops.ring_init_tx = wil_ring_init_tx_edma; in wil_init_txrx_ops_edma()
1591 wil->txrx_ops.ring_fini_tx = wil_ring_free_edma; in wil_init_txrx_ops_edma()
1592 wil->txrx_ops.ring_init_bcast = wil_ring_init_bcast_edma; in wil_init_txrx_ops_edma()
1593 wil->txrx_ops.tx_init = wil_tx_init_edma; in wil_init_txrx_ops_edma()
1594 wil->txrx_ops.tx_fini = wil_tx_fini_edma; in wil_init_txrx_ops_edma()
1595 wil->txrx_ops.tx_desc_map = wil_tx_desc_map_edma; in wil_init_txrx_ops_edma()
1596 wil->txrx_ops.tx_desc_unmap = wil_tx_desc_unmap_edma; in wil_init_txrx_ops_edma()
1597 wil->txrx_ops.tx_ring_tso = __wil_tx_ring_tso_edma; in wil_init_txrx_ops_edma()
1599 wil->txrx_ops.rx_init = wil_rx_init_edma; in wil_init_txrx_ops_edma()
1600 wil->txrx_ops.wmi_addba_rx_resp = wmi_addba_rx_resp_edma; in wil_init_txrx_ops_edma()
1601 wil->txrx_ops.get_reorder_params = wil_get_reorder_params_edma; in wil_init_txrx_ops_edma()
1602 wil->txrx_ops.get_netif_rx_params = wil_get_netif_rx_params_edma; in wil_init_txrx_ops_edma()
1603 wil->txrx_ops.rx_crypto_check = wil_rx_crypto_check_edma; in wil_init_txrx_ops_edma()
1604 wil->txrx_ops.rx_error_check = wil_rx_error_check_edma; in wil_init_txrx_ops_edma()
1605 wil->txrx_ops.is_rx_idle = wil_is_rx_idle_edma; in wil_init_txrx_ops_edma()
1606 wil->txrx_ops.rx_fini = wil_rx_fini_edma; in wil_init_txrx_ops_edma()