Lines Matching defs:tx_ring

11 static void nfp_nfd3_xsk_tx_bufs_free(struct nfp_net_tx_ring *tx_ring)
16 while (tx_ring->rd_p != tx_ring->wr_p) {
17 idx = D_IDX(tx_ring, tx_ring->rd_p);
18 txbuf = &tx_ring->txbufs[idx];
22 tx_ring->qcp_rd_p++;
23 tx_ring->rd_p++;
25 if (tx_ring->r_vec->xsk_pool) {
29 xsk_tx_completed(tx_ring->r_vec->xsk_pool, 1);
37 * @tx_ring: TX ring structure
42 nfp_nfd3_tx_ring_reset(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
47 while (!tx_ring->is_xdp && tx_ring->rd_p != tx_ring->wr_p) {
52 idx = D_IDX(tx_ring, tx_ring->rd_p);
53 tx_buf = &tx_ring->txbufs[idx];
55 skb = tx_ring->txbufs[idx].skb;
77 tx_ring->qcp_rd_p++;
78 tx_ring->rd_p++;
81 if (tx_ring->is_xdp)
82 nfp_nfd3_xsk_tx_bufs_free(tx_ring);
84 memset(tx_ring->txds, 0, tx_ring->size);
85 tx_ring->wr_p = 0;
86 tx_ring->rd_p = 0;
87 tx_ring->qcp_rd_p = 0;
88 tx_ring->wr_ptr_add = 0;
90 if (tx_ring->is_xdp || !dp->netdev)
93 nd_q = netdev_get_tx_queue(dp->netdev, tx_ring->idx);
99 * @tx_ring: TX ring to free
101 static void nfp_nfd3_tx_ring_free(struct nfp_net_tx_ring *tx_ring)
103 struct nfp_net_r_vector *r_vec = tx_ring->r_vec;
106 kvfree(tx_ring->txbufs);
108 if (tx_ring->txds)
109 dma_free_coherent(dp->dev, tx_ring->size,
110 tx_ring->txds, tx_ring->dma);
112 tx_ring->cnt = 0;
113 tx_ring->txbufs = NULL;
114 tx_ring->txds = NULL;
115 tx_ring->dma = 0;
116 tx_ring->size = 0;
122 * @tx_ring: TX Ring structure to allocate
127 nfp_nfd3_tx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_tx_ring *tx_ring)
129 struct nfp_net_r_vector *r_vec = tx_ring->r_vec;
131 tx_ring->cnt = dp->txd_cnt;
133 tx_ring->size = array_size(tx_ring->cnt, sizeof(*tx_ring->txds));
134 tx_ring->txds = dma_alloc_coherent(dp->dev, tx_ring->size,
135 &tx_ring->dma,
137 if (!tx_ring->txds) {
139 tx_ring->cnt);
143 tx_ring->txbufs = kvcalloc(tx_ring->cnt, sizeof(*tx_ring->txbufs),
145 if (!tx_ring->txbufs)
148 if (!tx_ring->is_xdp && dp->netdev)
150 tx_ring->idx);
155 nfp_nfd3_tx_ring_free(tx_ring);
161 struct nfp_net_tx_ring *tx_ring)
165 if (!tx_ring->is_xdp)
168 for (i = 0; i < tx_ring->cnt; i++) {
169 if (!tx_ring->txbufs[i].frag)
172 nfp_net_dma_unmap_rx(dp, tx_ring->txbufs[i].dma_addr);
173 __free_page(virt_to_page(tx_ring->txbufs[i].frag));
179 struct nfp_net_tx_ring *tx_ring)
181 struct nfp_nfd3_tx_buf *txbufs = tx_ring->txbufs;
184 if (!tx_ring->is_xdp)
187 for (i = 0; i < tx_ring->cnt; i++) {
190 nfp_nfd3_tx_ring_bufs_free(dp, tx_ring);
201 struct nfp_net_tx_ring *tx_ring,
205 u32 txd_cnt = tx_ring->cnt;
212 txd = &tx_ring->txds[i];
217 if (!tx_ring->is_xdp) {
218 skb = READ_ONCE(tx_ring->txbufs[i].skb);
223 xdp = READ_ONCE(tx_ring->txbufs[i].xdp);
228 if (tx_ring->txbufs[i].dma_addr)
230 &tx_ring->txbufs[i].dma_addr);
232 if (i == tx_ring->rd_p % txd_cnt)
234 if (i == tx_ring->wr_p % txd_cnt)