static int altera_tse_free_pkt(struct udevice *dev, uchar *packet, int length) { struct altera_tse_priv *priv = dev_get_priv(dev); struct alt_sgdma_descriptor *rx_desc = priv->rx_desc; unsigned long rx_buf = (unsigned long)priv->rx_buf; alt_sgdma_wait_transfer(priv->sgdma_rx); invalidate_dcache_range(rx_buf, rx_buf + PKTSIZE_ALIGN); alt_sgdma_construct_descriptor( rx_desc, rx_desc + 1, NULL, /* read addr */ priv->rx_buf, /* write addr */ 0, /* length or EOP */ 0, /* gen eop */ 0, /* read fixed */ 0 /* write fixed or sop */ ); /* setup the sgdma */ alt_sgdma_start_transfer(priv->sgdma_rx, rx_desc); debug("recv setup\n"); return 0; }
static int altera_tse_send(struct udevice *dev, void *packet, int length) { struct altera_tse_priv *priv = dev_get_priv(dev); struct alt_sgdma_descriptor *tx_desc = priv->tx_desc; unsigned long tx_buf = (unsigned long)packet; flush_dcache_range(tx_buf, tx_buf + length); alt_sgdma_construct_descriptor( tx_desc, tx_desc + 1, packet, /* read addr */ NULL, /* write addr */ length, /* length or EOP ,will change for each tx */ 1, /* gen eop */ 0, /* read fixed */ 1 /* write fixed or sop */ ); /* send the packet */ alt_sgdma_start_transfer(priv->sgdma_tx, tx_desc); alt_sgdma_wait_transfer(priv->sgdma_tx); debug("sent %d bytes\n", tx_desc->actual_bytes_transferred); return tx_desc->actual_bytes_transferred; }
static int altera_tse_free_pkt_sgdma(struct udevice *dev, uchar *packet, int length) { struct altera_tse_priv *priv = dev_get_priv(dev); struct alt_sgdma_descriptor *rx_desc = priv->rx_desc; alt_sgdma_construct_descriptor( rx_desc, rx_desc + 1, NULL, /* read addr */ priv->rx_buf, /* write addr */ 0, /* length or EOP */ 0, /* gen eop */ 0, /* read fixed */ 0 /* write fixed or sop */ ); /* setup the sgdma */ alt_sgdma_start_transfer(priv->sgdma_rx, rx_desc); debug("recv setup\n"); return 0; }