aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/net/intelxlvf.c
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2020-11-25 15:52:00 +0000
committerMichael Brown <mcb30@ipxe.org>2020-11-25 16:15:55 +0000
commitcf12a41703a8b2292e5d2d7528c2733c37869681 (patch)
tree72e60b6240cdd10816b7dce5fcc98822ae94e957 /src/drivers/net/intelxlvf.c
parent24ef743778fb47958441d8891e5104135ac4c168 (diff)
downloadipxe-cf12a41703a8b2292e5d2d7528c2733c37869681.tar.gz
[dma] Modify DMA API to simplify calculation of medial addresses
Redefine the value stored within a DMA mapping to be the offset between physical addresses and DMA addresses within the mapped region. Provide a dma() wrapper function to calculate the DMA address for any pointer within a mapped region, thereby simplifying the use cases when a device needs to be given addresses other than the region start address. On a platform using the "flat" DMA implementation the DMA offset for any mapped region is always zero, with the result that dma_map() can be optimised away completely and dma() reduces to a straightforward call to virt_to_phys(). Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/intelxlvf.c')
-rw-r--r--src/drivers/net/intelxlvf.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/drivers/net/intelxlvf.c b/src/drivers/net/intelxlvf.c
index 61ac5e5c0..f944b4daa 100644
--- a/src/drivers/net/intelxlvf.c
+++ b/src/drivers/net/intelxlvf.c
@@ -380,12 +380,14 @@ static int intelxlvf_admin_configure ( struct net_device *netdev ) {
buf->cfg.count = cpu_to_le16 ( 1 );
buf->cfg.tx.vsi = cpu_to_le16 ( intelxl->vsi );
buf->cfg.tx.count = cpu_to_le16 ( INTELXL_TX_NUM_DESC );
- buf->cfg.tx.base = cpu_to_le64 ( intelxl->tx.ring.map.addr );
+ buf->cfg.tx.base = cpu_to_le64 ( dma ( &intelxl->tx.ring.map,
+ intelxl->tx.ring.desc.raw ) );
buf->cfg.rx.vsi = cpu_to_le16 ( intelxl->vsi );
buf->cfg.rx.count = cpu_to_le32 ( INTELXL_RX_NUM_DESC );
buf->cfg.rx.len = cpu_to_le32 ( intelxl->mfs );
buf->cfg.rx.mfs = cpu_to_le32 ( intelxl->mfs );
- buf->cfg.rx.base = cpu_to_le64 ( intelxl->rx.ring.map.addr );
+ buf->cfg.rx.base = cpu_to_le64 ( dma ( &intelxl->rx.ring.map,
+ intelxl->rx.ring.desc.raw ) );
/* Issue command */
if ( ( rc = intelxlvf_admin_command ( netdev ) ) != 0 )