aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/net/intel.h
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2020-11-13 19:55:22 +0000
committerMichael Brown <mcb30@ipxe.org>2020-11-13 19:55:22 +0000
commit5439329c9964eca519017d1c550deb55e0746893 (patch)
tree9677fdc524fca760143fa075e85c814d23d6aa12 /src/drivers/net/intel.h
parent0e26220902592fb3066d2043dec212d957215b79 (diff)
downloadipxe-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.h51
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 );