Lines Matching refs:sring

71 			   struct wil_status_ring *sring)  in wil_sring_free()  argument
76 if (!sring || !sring->va) in wil_sring_free()
79 sz = sring->elem_size * sring->size; in wil_sring_free()
82 sz, sring->va, &sring->pa); in wil_sring_free()
84 dma_free_coherent(dev, sz, (void *)sring->va, sring->pa); in wil_sring_free()
85 sring->pa = 0; in wil_sring_free()
86 sring->va = NULL; in wil_sring_free()
90 struct wil_status_ring *sring) in wil_sring_alloc() argument
93 size_t sz = sring->elem_size * sring->size; in wil_sring_alloc()
102 sring->swhead = 0; in wil_sring_alloc()
107 sring->va = dma_alloc_coherent(dev, sz, &sring->pa, GFP_KERNEL); in wil_sring_alloc()
108 if (!sring->va) in wil_sring_alloc()
111 wil_dbg_misc(wil, "status_ring[%d] 0x%p:%pad\n", sring->size, sring->va, in wil_sring_alloc()
112 &sring->pa); in wil_sring_alloc()
120 struct wil_status_ring *sring; in wil_tx_init_edma() local
139 sring = &wil->srings[ring_id]; in wil_tx_init_edma()
141 sring->is_rx = false; in wil_tx_init_edma()
142 sring->size = status_ring_size; in wil_tx_init_edma()
143 sring->elem_size = sizeof(struct wil_ring_tx_status); in wil_tx_init_edma()
144 rc = wil_sring_alloc(wil, sring); in wil_tx_init_edma()
152 sring->desc_rdy_pol = 1; in wil_tx_init_edma()
157 wil_sring_free(wil, sring); in wil_tx_init_edma()
224 void wil_get_next_rx_status_msg(struct wil_status_ring *sring, u8 *dr_bit, in wil_get_next_rx_status_msg() argument
230 (sring->va + (sring->elem_size * sring->swhead)); in wil_get_next_rx_status_msg()
234 memcpy(msg, (void *)_msg, sring->elem_size); in wil_get_next_rx_status_msg()
237 static inline void wil_sring_advance_swhead(struct wil_status_ring *sring) in wil_sring_advance_swhead() argument
239 sring->swhead = (sring->swhead + 1) % sring->size; in wil_sring_advance_swhead()
240 if (sring->swhead == 0) in wil_sring_advance_swhead()
241 sring->desc_rdy_pol = 1 - sring->desc_rdy_pol; in wil_sring_advance_swhead()
359 struct wil_status_ring *sring = &wil->srings[ring_id]; in wil_init_rx_sring() local
365 memset(&sring->rx_data, 0, sizeof(sring->rx_data)); in wil_init_rx_sring()
367 sring->is_rx = true; in wil_init_rx_sring()
368 sring->size = status_ring_size; in wil_init_rx_sring()
369 sring->elem_size = elem_size; in wil_init_rx_sring()
370 rc = wil_sring_alloc(wil, sring); in wil_init_rx_sring()
378 sring->desc_rdy_pol = 1; in wil_init_rx_sring()
382 wil_sring_free(wil, sring); in wil_init_rx_sring()
586 struct wil_status_ring *sring; in wil_is_rx_idle_edma() local
593 sring = &wil->srings[i]; in wil_is_rx_idle_edma()
594 if (!sring->va) in wil_is_rx_idle_edma()
597 wil_get_next_rx_status_msg(sring, &dr_bit, msg); in wil_is_rx_idle_edma()
600 if (dr_bit == sring->desc_rdy_pol) in wil_is_rx_idle_edma()
864 struct wil_status_ring *sring) in wil_sring_reap_rx_edma() argument
872 struct wil_ring_rx_data *rxdata = &sring->rx_data; in wil_sring_reap_rx_edma()
882 u16 sring_idx = sring - wil->srings; in wil_sring_reap_rx_edma()
887 wil_get_next_rx_status_msg(sring, &dr_bit, msg); in wil_sring_reap_rx_edma()
890 if (dr_bit != sring->desc_rdy_pol) in wil_sring_reap_rx_edma()
902 sring->swhead); in wil_sring_reap_rx_edma()
908 (sring->va + (sring->elem_size * sring->swhead)); in wil_sring_reap_rx_edma()
915 buff_id, sring->swhead); in wil_sring_reap_rx_edma()
916 wil_rx_status_reset_buff_id(sring); in wil_sring_reap_rx_edma()
917 wil_sring_advance_swhead(sring); in wil_sring_reap_rx_edma()
918 sring->invalid_buff_id_cnt++; in wil_sring_reap_rx_edma()
927 wil_rx_status_reset_buff_id(sring); in wil_sring_reap_rx_edma()
931 wil_sring_advance_swhead(sring); in wil_sring_reap_rx_edma()
932 sring->invalid_buff_id_cnt++; in wil_sring_reap_rx_edma()
936 wil_rx_status_reset_buff_id(sring); in wil_sring_reap_rx_edma()
937 wil_sring_advance_swhead(sring); in wil_sring_reap_rx_edma()
961 cid, sring->swhead); in wil_sring_reap_rx_edma()
1061 memcpy(s, msg, sring->elem_size); in wil_sring_reap_rx_edma()
1070 struct wil_status_ring *sring; in wil_rx_handle_edma() local
1081 sring = &wil->srings[i]; in wil_rx_handle_edma()
1082 if (unlikely(!sring->va)) { in wil_rx_handle_edma()
1091 wil_sring_reap_rx_edma(wil, sring)))) { in wil_rx_handle_edma()
1112 wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size); in wil_rx_handle_edma()
1143 wil_get_next_tx_status_msg(struct wil_status_ring *sring, u8 *dr_bit, in wil_get_next_tx_status_msg() argument
1147 (sring->va + (sring->elem_size * sring->swhead)); in wil_get_next_tx_status_msg()
1160 struct wil_status_ring *sring) in wil_tx_sring_handler() argument
1180 wil_get_next_tx_status_msg(sring, &dr_bit, &msg); in wil_tx_sring_handler()
1183 while (dr_bit == sring->desc_rdy_pol) { in wil_tx_sring_handler()
1299 wil_w(wil, sring->hwtail, sring->swhead); in wil_tx_sring_handler()
1301 wil_sring_advance_swhead(sring); in wil_tx_sring_handler()
1303 wil_get_next_tx_status_msg(sring, &dr_bit, &msg); in wil_tx_sring_handler()
1312 wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size); in wil_tx_sring_handler()
1592 struct wil_status_ring *sring = &wil->srings[wil->tx_sring_idx]; in wil_tx_fini_edma() local
1596 wil_sring_free(wil, sring); in wil_tx_fini_edma()
1599 static void wil_rx_data_free(struct wil_status_ring *sring) in wil_rx_data_free() argument
1601 if (!sring) in wil_rx_data_free()
1604 kfree_skb(sring->rx_data.skb); in wil_rx_data_free()
1605 sring->rx_data.skb = NULL; in wil_rx_data_free()