diff options
author | Michael Brown <mcb30@ipxe.org> | 2020-11-13 19:55:22 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2020-11-13 19:55:22 +0000 |
commit | 5439329c9964eca519017d1c550deb55e0746893 (patch) | |
tree | 9677fdc524fca760143fa075e85c814d23d6aa12 /src/drivers/net/intel.h | |
parent | 0e26220902592fb3066d2043dec212d957215b79 (diff) | |
download | ipxe-5439329c9964eca519017d1c550deb55e0746893.tar.gz |
[intel] Update driver to use DMA API
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/intel.h')
-rw-r--r-- | src/drivers/net/intel.h | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/src/drivers/net/intel.h b/src/drivers/net/intel.h index 9d740efc3..731b5f225 100644 --- a/src/drivers/net/intel.h +++ b/src/drivers/net/intel.h @@ -12,6 +12,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <stdint.h> #include <ipxe/if_ether.h> #include <ipxe/nvs.h> +#include <ipxe/dma.h> /** Intel BAR size */ #define INTEL_BAR_SIZE ( 128 * 1024 ) @@ -212,6 +213,8 @@ union intel_receive_address { struct intel_ring { /** Descriptors */ struct intel_descriptor *desc; + /** Descriptor ring DMA mapping */ + struct dma_mapping map; /** Producer index */ unsigned int prod; /** Consumer index */ @@ -273,10 +276,30 @@ intel_init_mbox ( struct intel_mailbox *mbox, unsigned int ctrl, mbox->mem = mem; } +/** Transmit ring */ +struct intel_tx_ring { + /** Descriptor ring */ + struct intel_ring ring; + /** DMA mappings */ + struct dma_mapping map[INTEL_NUM_TX_DESC]; +}; + +/** Receive ring */ +struct intel_rx_ring { + /** Descriptor ring */ + struct intel_ring ring; + /** I/O buffers */ + struct io_buffer *iobuf[INTEL_NUM_RX_DESC]; + /** DMA mappings */ + struct dma_mapping map[INTEL_NUM_RX_DESC]; +}; + /** An Intel network card */ struct intel_nic { /** Registers */ void *regs; + /** DMA device */ + struct dma_device *dma; /** Port number (for multi-port devices) */ unsigned int port; /** Flags */ @@ -294,12 +317,10 @@ struct intel_nic { /** Mailbox */ struct intel_mailbox mbox; - /** Transmit descriptor ring */ - struct intel_ring tx; - /** Receive descriptor ring */ - struct intel_ring rx; - /** Receive I/O buffers */ - struct io_buffer *rx_iobuf[INTEL_NUM_RX_DESC]; + /** Transmit ring */ + struct intel_tx_ring tx; + /** Receive ring */ + struct intel_rx_ring rx; }; /** Driver flags */ @@ -328,14 +349,14 @@ static inline void intel_diag ( struct intel_nic *intel ) { DBGC ( intel, "INTEL %p TX %04x(%02x)/%04x(%02x) " "RX %04x(%02x)/%04x(%02x)\n", intel, - ( intel->tx.cons & 0xffff ), - readl ( intel->regs + intel->tx.reg + INTEL_xDH ), - ( intel->tx.prod & 0xffff ), - readl ( intel->regs + intel->tx.reg + INTEL_xDT ), - ( intel->rx.cons & 0xffff ), - readl ( intel->regs + intel->rx.reg + INTEL_xDH ), - ( intel->rx.prod & 0xffff ), - readl ( intel->regs + intel->rx.reg + INTEL_xDT ) ); + ( intel->tx.ring.cons & 0xffff ), + readl ( intel->regs + intel->tx.ring.reg + INTEL_xDH ), + ( intel->tx.ring.prod & 0xffff ), + readl ( intel->regs + intel->tx.ring.reg + INTEL_xDT ), + ( intel->rx.ring.cons & 0xffff ), + readl ( intel->regs + intel->rx.ring.reg + INTEL_xDH ), + ( intel->rx.ring.prod & 0xffff ), + readl ( intel->regs + intel->rx.ring.reg + INTEL_xDT ) ); } extern void intel_describe_tx ( struct intel_descriptor *tx, @@ -350,7 +371,7 @@ extern int intel_create_ring ( struct intel_nic *intel, extern void intel_destroy_ring ( struct intel_nic *intel, struct intel_ring *ring ); extern void intel_refill_rx ( struct intel_nic *intel ); -extern void intel_empty_rx ( struct intel_nic *intel ); +extern void intel_flush ( struct intel_nic *intel ); extern int intel_transmit ( struct net_device *netdev, struct io_buffer *iobuf ); extern void intel_poll_tx ( struct net_device *netdev ); |