Lines Matching full:fdma
15 #define FDMA_PRIV(fdma) ((struct sparx5 *)((fdma)->priv)) argument
17 static int lan969x_fdma_tx_dataptr_cb(struct fdma *fdma, int dcb, int db, in lan969x_fdma_tx_dataptr_cb() argument
20 *dataptr = FDMA_PRIV(fdma)->tx.dbs[dcb].dma_addr; in lan969x_fdma_tx_dataptr_cb()
25 static int lan969x_fdma_rx_dataptr_cb(struct fdma *fdma, int dcb, int db, in lan969x_fdma_rx_dataptr_cb() argument
28 struct sparx5_rx *rx = &FDMA_PRIV(fdma)->rx; in lan969x_fdma_rx_dataptr_cb()
44 struct fdma *fdma = &tx->fdma; in lan969x_fdma_get_next_dcb() local
46 for (int i = 0; i < fdma->n_dcbs; ++i) in lan969x_fdma_get_next_dcb()
47 if (!tx->dbs[i].used && !fdma_is_last(fdma, &fdma->dcbs[i])) in lan969x_fdma_get_next_dcb()
55 struct fdma *fdma = &sparx5->tx.fdma; in lan969x_fdma_tx_clear_buf() local
62 for (i = 0; i < fdma->n_dcbs; ++i) { in lan969x_fdma_tx_clear_buf()
68 if (!fdma_db_is_done(fdma_db_get(fdma, i, 0))) in lan969x_fdma_tx_clear_buf()
91 struct fdma *fdma = &rx->fdma; in lan969x_fdma_free_pages() local
93 for (int i = 0; i < fdma->n_dcbs; ++i) { in lan969x_fdma_free_pages()
94 for (int j = 0; j < fdma->n_dbs; ++j) in lan969x_fdma_free_pages()
104 struct fdma *fdma = &rx->fdma; in lan969x_fdma_rx_get_frame() local
111 db = &fdma->dcbs[fdma->dcb_index].db[fdma->db_index]; in lan969x_fdma_rx_get_frame()
112 page = rx->page[fdma->dcb_index][fdma->db_index]; in lan969x_fdma_rx_get_frame()
120 skb = build_skb(page_address(page), fdma->db_size); in lan969x_fdma_rx_get_frame()
153 struct fdma *fdma = &rx->fdma; in lan969x_fdma_rx_alloc() local
159 .pool_size = fdma->n_dcbs * fdma->n_dbs, in lan969x_fdma_rx_alloc()
164 .max_len = fdma->db_size - in lan969x_fdma_rx_alloc()
172 err = fdma_alloc_coherent(sparx5->dev, fdma); in lan969x_fdma_rx_alloc()
176 fdma_dcbs_init(fdma, in lan969x_fdma_rx_alloc()
177 FDMA_DCB_INFO_DATAL(fdma->db_size), in lan969x_fdma_rx_alloc()
186 struct fdma *fdma = &tx->fdma; in lan969x_fdma_tx_alloc() local
189 tx->dbs = kcalloc(fdma->n_dcbs, in lan969x_fdma_tx_alloc()
195 err = fdma_alloc_coherent(sparx5->dev, fdma); in lan969x_fdma_tx_alloc()
201 fdma_dcbs_init(fdma, in lan969x_fdma_tx_alloc()
202 FDMA_DCB_INFO_DATAL(fdma->db_size), in lan969x_fdma_tx_alloc()
210 struct fdma *fdma = &sparx5->rx.fdma; in lan969x_fdma_rx_init() local
212 fdma->channel_id = FDMA_XTR_CHANNEL; in lan969x_fdma_rx_init()
213 fdma->n_dcbs = FDMA_DCB_MAX; in lan969x_fdma_rx_init()
214 fdma->n_dbs = 1; in lan969x_fdma_rx_init()
215 fdma->priv = sparx5; in lan969x_fdma_rx_init()
216 fdma->size = fdma_get_size(fdma); in lan969x_fdma_rx_init()
217 fdma->db_size = PAGE_SIZE; in lan969x_fdma_rx_init()
218 fdma->ops.dataptr_cb = &lan969x_fdma_rx_dataptr_cb; in lan969x_fdma_rx_init()
219 fdma->ops.nextptr_cb = &fdma_nextptr_cb; in lan969x_fdma_rx_init()
234 struct fdma *fdma = &sparx5->tx.fdma; in lan969x_fdma_tx_init() local
236 fdma->channel_id = FDMA_INJ_CHANNEL; in lan969x_fdma_tx_init()
237 fdma->n_dcbs = FDMA_DCB_MAX; in lan969x_fdma_tx_init()
238 fdma->n_dbs = 1; in lan969x_fdma_tx_init()
239 fdma->priv = sparx5; in lan969x_fdma_tx_init()
240 fdma->size = fdma_get_size(fdma); in lan969x_fdma_tx_init()
241 fdma->db_size = PAGE_SIZE; in lan969x_fdma_tx_init()
242 fdma->ops.dataptr_cb = &lan969x_fdma_tx_dataptr_cb; in lan969x_fdma_tx_init()
243 fdma->ops.nextptr_cb = &fdma_nextptr_cb; in lan969x_fdma_tx_init()
251 struct fdma *fdma = &rx->fdma; in lan969x_fdma_napi_poll() local
254 dcb_reload = fdma->dcb_index; in lan969x_fdma_napi_poll()
260 if (!fdma_has_frames(fdma)) in lan969x_fdma_napi_poll()
269 fdma_db_advance(fdma); in lan969x_fdma_napi_poll()
272 if (fdma_dcb_is_reusable(fdma)) in lan969x_fdma_napi_poll()
275 fdma_db_reset(fdma); in lan969x_fdma_napi_poll()
276 fdma_dcb_advance(fdma); in lan969x_fdma_napi_poll()
280 while (dcb_reload != fdma->dcb_index) { in lan969x_fdma_napi_poll()
284 dcb_reload &= fdma->n_dcbs - 1; in lan969x_fdma_napi_poll()
286 fdma_dcb_add(fdma, in lan969x_fdma_napi_poll()
288 FDMA_DCB_INFO_DATAL(fdma->db_size), in lan969x_fdma_napi_poll()
291 sparx5_fdma_reload(sparx5, fdma); in lan969x_fdma_napi_poll()
305 struct fdma *fdma = &tx->fdma; in lan969x_fdma_xmit() local
349 fdma_dcb_advance(fdma); in lan969x_fdma_xmit()
350 fdma_dcb_add(fdma, next_dcb, 0, status); in lan969x_fdma_xmit()
352 sparx5_fdma_reload(sparx5, fdma); in lan969x_fdma_xmit()
368 dev_err(sparx5->dev, "Failed to set 64-bit FDMA mask"); in lan969x_fdma_init()
381 fdma_free_coherent(sparx5->dev, &rx->fdma); in lan969x_fdma_init()
387 /* Reset FDMA state */ in lan969x_fdma_init()
400 fdma_free_coherent(sparx5->dev, &tx->fdma); in lan969x_fdma_deinit()
401 fdma_free_coherent(sparx5->dev, &rx->fdma); in lan969x_fdma_deinit()