Lines Matching full:sparx5

15 #define FDMA_PRIV(fdma) ((struct sparx5 *)((fdma)->priv))
53 static void lan969x_fdma_tx_clear_buf(struct sparx5 *sparx5, int weight) in lan969x_fdma_tx_clear_buf() argument
55 struct fdma *fdma = &sparx5->tx.fdma; in lan969x_fdma_tx_clear_buf()
60 spin_lock_irqsave(&sparx5->tx_lock, flags); in lan969x_fdma_tx_clear_buf()
63 db = &sparx5->tx.dbs[i]; in lan969x_fdma_tx_clear_buf()
73 sparx5->tx.packets++; in lan969x_fdma_tx_clear_buf()
75 dma_unmap_single(sparx5->dev, in lan969x_fdma_tx_clear_buf()
86 spin_unlock_irqrestore(&sparx5->tx_lock, flags); in lan969x_fdma_tx_clear_buf()
100 static struct sk_buff *lan969x_fdma_rx_get_frame(struct sparx5 *sparx5, in lan969x_fdma_rx_get_frame() argument
103 const struct sparx5_consts *consts = sparx5->data->consts; in lan969x_fdma_rx_get_frame()
114 sparx5_ifh_parse(sparx5, page_address(page), &fi); in lan969x_fdma_rx_get_frame()
115 port = fi.src_port < consts->n_ports ? sparx5->ports[fi.src_port] : in lan969x_fdma_rx_get_frame()
133 sparx5_ptp_rxtstamp(sparx5, skb, fi.timestamp); in lan969x_fdma_rx_get_frame()
136 if (test_bit(port->portno, sparx5->bridge_mask)) in lan969x_fdma_rx_get_frame()
150 static int lan969x_fdma_rx_alloc(struct sparx5 *sparx5) in lan969x_fdma_rx_alloc() argument
152 struct sparx5_rx *rx = &sparx5->rx; in lan969x_fdma_rx_alloc()
161 .dev = sparx5->dev, in lan969x_fdma_rx_alloc()
172 err = fdma_alloc_coherent(sparx5->dev, fdma); in lan969x_fdma_rx_alloc()
183 static int lan969x_fdma_tx_alloc(struct sparx5 *sparx5) in lan969x_fdma_tx_alloc() argument
185 struct sparx5_tx *tx = &sparx5->tx; in lan969x_fdma_tx_alloc()
195 err = fdma_alloc_coherent(sparx5->dev, fdma); in lan969x_fdma_tx_alloc()
208 static void lan969x_fdma_rx_init(struct sparx5 *sparx5) in lan969x_fdma_rx_init() argument
210 struct fdma *fdma = &sparx5->rx.fdma; in lan969x_fdma_rx_init()
215 fdma->priv = sparx5; in lan969x_fdma_rx_init()
222 for (int idx = 0; idx < sparx5->data->consts->n_ports; ++idx) { in lan969x_fdma_rx_init()
223 struct sparx5_port *port = sparx5->ports[idx]; in lan969x_fdma_rx_init()
226 sparx5->rx.ndev = port->ndev; in lan969x_fdma_rx_init()
232 static void lan969x_fdma_tx_init(struct sparx5 *sparx5) in lan969x_fdma_tx_init() argument
234 struct fdma *fdma = &sparx5->tx.fdma; in lan969x_fdma_tx_init()
239 fdma->priv = sparx5; in lan969x_fdma_tx_init()
249 struct sparx5 *sparx5 = container_of(rx, struct sparx5, rx); in lan969x_fdma_napi_poll() local
256 lan969x_fdma_tx_clear_buf(sparx5, weight); in lan969x_fdma_napi_poll()
263 skb = lan969x_fdma_rx_get_frame(sparx5, rx); in lan969x_fdma_napi_poll()
291 sparx5_fdma_reload(sparx5, fdma); in lan969x_fdma_napi_poll()
295 spx5_wr(0xff, sparx5, FDMA_INTR_DB_ENA); in lan969x_fdma_napi_poll()
300 int lan969x_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb, in lan969x_fdma_xmit() argument
304 struct sparx5_tx *tx = &sparx5->tx; in lan969x_fdma_xmit()
327 db_buf->dma_addr = dma_map_single(sparx5->dev, in lan969x_fdma_xmit()
331 if (dma_mapping_error(sparx5->dev, db_buf->dma_addr)) in lan969x_fdma_xmit()
352 sparx5_fdma_reload(sparx5, fdma); in lan969x_fdma_xmit()
357 int lan969x_fdma_init(struct sparx5 *sparx5) in lan969x_fdma_init() argument
359 struct sparx5_rx *rx = &sparx5->rx; in lan969x_fdma_init()
362 lan969x_fdma_rx_init(sparx5); in lan969x_fdma_init()
363 lan969x_fdma_tx_init(sparx5); in lan969x_fdma_init()
364 sparx5_fdma_injection_mode(sparx5); in lan969x_fdma_init()
366 err = dma_set_mask_and_coherent(sparx5->dev, DMA_BIT_MASK(64)); in lan969x_fdma_init()
368 dev_err(sparx5->dev, "Failed to set 64-bit FDMA mask"); in lan969x_fdma_init()
372 err = lan969x_fdma_rx_alloc(sparx5); in lan969x_fdma_init()
374 dev_err(sparx5->dev, "Failed to allocate RX buffers: %d\n", in lan969x_fdma_init()
379 err = lan969x_fdma_tx_alloc(sparx5); in lan969x_fdma_init()
381 fdma_free_coherent(sparx5->dev, &rx->fdma); in lan969x_fdma_init()
382 dev_err(sparx5->dev, "Failed to allocate TX buffers: %d\n", in lan969x_fdma_init()
388 spx5_wr(FDMA_CTRL_NRESET_SET(0), sparx5, FDMA_CTRL); in lan969x_fdma_init()
389 spx5_wr(FDMA_CTRL_NRESET_SET(1), sparx5, FDMA_CTRL); in lan969x_fdma_init()
394 int lan969x_fdma_deinit(struct sparx5 *sparx5) in lan969x_fdma_deinit() argument
396 struct sparx5_rx *rx = &sparx5->rx; in lan969x_fdma_deinit()
397 struct sparx5_tx *tx = &sparx5->tx; in lan969x_fdma_deinit()
399 sparx5_fdma_stop(sparx5); in lan969x_fdma_deinit()
400 fdma_free_coherent(sparx5->dev, &tx->fdma); in lan969x_fdma_deinit()
401 fdma_free_coherent(sparx5->dev, &rx->fdma); in lan969x_fdma_deinit()