Lines Matching refs:vring
81 struct wil_ring *vring = &wil->ring_tx[i]; in wil_is_tx_idle() local
82 int vring_index = vring - wil->ring_tx; in wil_is_tx_idle()
88 if (!vring->va || !txdata->enabled) { in wil_is_tx_idle()
96 while (!wil_ring_is_empty(vring)) { in wil_is_tx_idle()
109 if (!vring->va || !txdata->enabled) in wil_is_tx_idle()
120 static int wil_vring_alloc(struct wil6210_priv *wil, struct wil_ring *vring) in wil_vring_alloc() argument
123 size_t sz = vring->size * sizeof(vring->va[0]); in wil_vring_alloc()
128 BUILD_BUG_ON(sizeof(vring->va[0]) != 32); in wil_vring_alloc()
130 vring->swhead = 0; in wil_vring_alloc()
131 vring->swtail = 0; in wil_vring_alloc()
132 vring->ctx = kcalloc(vring->size, sizeof(vring->ctx[0]), GFP_KERNEL); in wil_vring_alloc()
133 if (!vring->ctx) { in wil_vring_alloc()
134 vring->va = NULL; in wil_vring_alloc()
153 vring->va = dma_alloc_coherent(dev, sz, &vring->pa, GFP_KERNEL); in wil_vring_alloc()
154 if (!vring->va) { in wil_vring_alloc()
155 kfree(vring->ctx); in wil_vring_alloc()
156 vring->ctx = NULL; in wil_vring_alloc()
168 for (i = 0; i < vring->size; i++) { in wil_vring_alloc()
170 &vring->va[i].tx.legacy; in wil_vring_alloc()
175 wil_dbg_misc(wil, "vring[%d] 0x%p:%pad 0x%p\n", vring->size, in wil_vring_alloc()
176 vring->va, &vring->pa, vring->ctx); in wil_vring_alloc()
200 static void wil_vring_free(struct wil6210_priv *wil, struct wil_ring *vring) in wil_vring_free() argument
203 size_t sz = vring->size * sizeof(vring->va[0]); in wil_vring_free()
206 if (!vring->is_rx) { in wil_vring_free()
207 int vring_index = vring - wil->ring_tx; in wil_vring_free()
210 vring_index, vring->size, vring->va, in wil_vring_free()
211 &vring->pa, vring->ctx); in wil_vring_free()
214 vring->size, vring->va, in wil_vring_free()
215 &vring->pa, vring->ctx); in wil_vring_free()
218 while (!wil_ring_is_empty(vring)) { in wil_vring_free()
223 if (!vring->is_rx) { in wil_vring_free()
226 &vring->va[vring->swtail].tx.legacy; in wil_vring_free()
228 ctx = &vring->ctx[vring->swtail]; in wil_vring_free()
232 vring->swtail); in wil_vring_free()
233 vring->swtail = wil_ring_next_tail(vring); in wil_vring_free()
240 vring->swtail = wil_ring_next_tail(vring); in wil_vring_free()
244 &vring->va[vring->swhead].rx.legacy; in wil_vring_free()
246 ctx = &vring->ctx[vring->swhead]; in wil_vring_free()
252 wil_ring_advance_head(vring, 1); in wil_vring_free()
255 dma_free_coherent(dev, sz, (void *)vring->va, vring->pa); in wil_vring_free()
256 kfree(vring->ctx); in wil_vring_free()
257 vring->pa = 0; in wil_vring_free()
258 vring->va = NULL; in wil_vring_free()
259 vring->ctx = NULL; in wil_vring_free()
267 static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct wil_ring *vring, in wil_vring_alloc_skb() argument
273 volatile struct vring_rx_desc *_d = &vring->va[i].rx.legacy; in wil_vring_alloc_skb()
303 vring->ctx[i].skb = skb; in wil_vring_alloc_skb()
453 struct wil_ring *vring) in wil_vring_reap_rx() argument
473 if (unlikely(wil_ring_is_empty(vring))) in wil_vring_reap_rx()
476 i = (int)vring->swhead; in wil_vring_reap_rx()
477 _d = &vring->va[i].rx.legacy; in wil_vring_reap_rx()
483 skb = vring->ctx[i].skb; in wil_vring_reap_rx()
484 vring->ctx[i].skb = NULL; in wil_vring_reap_rx()
485 wil_ring_advance_head(vring, 1); in wil_vring_reap_rx()
1083 struct wil_ring *vring = &wil->ring_rx; in wil_rx_init() local
1088 if (vring->va) { in wil_rx_init()
1095 vring->size = 1 << order; in wil_rx_init()
1096 vring->is_rx = true; in wil_rx_init()
1097 rc = wil_vring_alloc(wil, vring); in wil_rx_init()
1101 rc = wmi_rx_chain_add(wil, vring); in wil_rx_init()
1105 rc = wil_rx_refill(wil, vring->size); in wil_rx_init()
1111 wil_vring_free(wil, vring); in wil_rx_init()
1118 struct wil_ring *vring = &wil->ring_rx; in wil_rx_fini() local
1122 if (vring->va) in wil_rx_fini()
1123 wil_vring_free(wil, vring); in wil_rx_fini()
1196 struct wil_ring *vring = &wil->ring_tx[id]; in wil_vring_init_tx() local
1211 if (vring->va) { in wil_vring_init_tx()
1218 vring->is_rx = false; in wil_vring_init_tx()
1219 vring->size = size; in wil_vring_init_tx()
1220 rc = wil_vring_alloc(wil, vring); in wil_vring_init_tx()
1227 cmd.vring_cfg.tx_sw_ring.ring_mem_base = cpu_to_le64(vring->pa); in wil_vring_init_tx()
1245 vring->hwtail = le32_to_cpu(reply.cmd.tx_vring_tail_ptr); in wil_vring_init_tx()
1259 wil_vring_free(wil, vring); in wil_vring_init_tx()
1299 struct wil_ring *vring = &wil->ring_tx[ring_id]; in wil_tx_vring_modify() local
1306 if (!vring->va) { in wil_tx_vring_modify()
1318 cmd.vring_cfg.tx_sw_ring.ring_mem_base = cpu_to_le64(vring->pa); in wil_tx_vring_modify()
1373 struct wil_ring *vring = &wil->ring_tx[id]; in wil_vring_init_bcast() local
1380 if (vring->va) { in wil_vring_init_bcast()
1387 vring->is_rx = false; in wil_vring_init_bcast()
1388 vring->size = size; in wil_vring_init_bcast()
1389 rc = wil_vring_alloc(wil, vring); in wil_vring_init_bcast()
1396 cmd.vring_cfg.tx_sw_ring.ring_mem_base = cpu_to_le64(vring->pa); in wil_vring_init_bcast()
1415 vring->hwtail = le32_to_cpu(reply.cmd.tx_vring_tail_ptr); in wil_vring_init_bcast()
1426 wil_vring_free(wil, vring); in wil_vring_init_bcast()
1731 struct wil_ring *vring, struct sk_buff *skb) in __wil_tx_vring_tso() argument
1750 u32 swhead = vring->swhead; in __wil_tx_vring_tso()
1751 int used, avail = wil_ring_avail_tx(vring); in __wil_tx_vring_tso()
1756 int vring_index = vring - wil->ring_tx; in __wil_tx_vring_tso()
1825 _hdr_desc = &vring->va[i].tx.legacy; in __wil_tx_vring_tso()
1839 vring->ctx[i].mapped_as = wil_mapped_as_single; in __wil_tx_vring_tso()
1840 hdr_ctx = &vring->ctx[i]; in __wil_tx_vring_tso()
1868 i = (swhead + descs_used) % vring->size; in __wil_tx_vring_tso()
1875 vring->ctx[i].mapped_as = wil_mapped_as_page; in __wil_tx_vring_tso()
1882 vring->ctx[i].mapped_as = wil_mapped_as_single; in __wil_tx_vring_tso()
1891 _desc = &vring->va[i].tx.legacy; in __wil_tx_vring_tso()
1895 first_ctx = &vring->ctx[i]; in __wil_tx_vring_tso()
1980 vring->ctx[i].skb = skb_get(skb); in __wil_tx_vring_tso()
1983 used = wil_ring_used_tx(vring); in __wil_tx_vring_tso()
1999 wil_ring_advance_head(vring, descs_used); in __wil_tx_vring_tso()
2000 wil_dbg_txrx(wil, "TSO: Tx swhead %d -> %d\n", swhead, vring->swhead); in __wil_tx_vring_tso()
2012 wil_w(wil, vring->hwtail, vring->swhead); in __wil_tx_vring_tso()
2019 i = (swhead + descs_used - 1) % vring->size; in __wil_tx_vring_tso()
2020 d = (struct vring_tx_desc *)&vring->va[i].tx.legacy; in __wil_tx_vring_tso()
2021 _desc = &vring->va[i].tx.legacy; in __wil_tx_vring_tso()
2024 ctx = &vring->ctx[i]; in __wil_tx_vring_tso()
2432 struct wil_ring *vring = &wil->ring_tx[ringid]; in wil_tx_complete() local
2441 if (unlikely(!vring->va)) { in wil_tx_complete()
2453 used_before_complete = wil_ring_used_tx(vring); in wil_tx_complete()
2458 while (!wil_ring_is_empty(vring)) { in wil_tx_complete()
2460 struct wil_ctx *ctx = &vring->ctx[vring->swtail]; in wil_tx_complete()
2466 int lf = (vring->swtail + ctx->nr_frags) % vring->size; in wil_tx_complete()
2469 _d = &vring->va[lf].tx.legacy; in wil_tx_complete()
2473 new_swtail = (lf + 1) % vring->size; in wil_tx_complete()
2474 while (vring->swtail != new_swtail) { in wil_tx_complete()
2479 ctx = &vring->ctx[vring->swtail]; in wil_tx_complete()
2481 _d = &vring->va[vring->swtail].tx.legacy; in wil_tx_complete()
2486 trace_wil6210_tx_done(ringid, vring->swtail, dmalen, in wil_tx_complete()
2490 ringid, vring->swtail, dmalen, in wil_tx_complete()
2533 vring->swtail = wil_ring_next_tail(vring); in wil_tx_complete()
2539 used_new = wil_ring_used_tx(vring); in wil_tx_complete()
2549 wil_update_net_queues(wil, vif, vring, false); in wil_tx_complete()