diff options
author | Michael Brown <mcb30@ipxe.org> | 2020-11-17 01:26:21 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2020-11-21 13:35:11 +0000 |
commit | 03314e8da9a3c387e9bbcf3830e6517377768de4 (patch) | |
tree | 3bd743ff3ae4f7b14c945df019ac2cf66f6ac1d7 /src/drivers/net/intelxlvf.c | |
parent | 76a7bfe939b4b6ea88690e8c6960c65d57c01b5e (diff) | |
download | ipxe-03314e8da9a3c387e9bbcf3830e6517377768de4.tar.gz |
[intelxl] Update driver to use DMA API
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/intelxlvf.c')
-rw-r--r-- | src/drivers/net/intelxlvf.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/drivers/net/intelxlvf.c b/src/drivers/net/intelxlvf.c index 83e484c8d..dc2e3bf4e 100644 --- a/src/drivers/net/intelxlvf.c +++ b/src/drivers/net/intelxlvf.c @@ -298,9 +298,9 @@ void intelxlvf_admin_event ( struct net_device *netdev, if ( intelxl->vret != 0 ) { DBGC ( intelxl, "INTELXL %p admin VF command %#x " "error %d\n", intelxl, vopcode, intelxl->vret ); - DBGC_HDA ( intelxl, virt_to_bus ( evt ), evt, + DBGC_HDA ( intelxl, virt_to_phys ( evt ), evt, sizeof ( *evt ) ); - DBGC_HDA ( intelxl, virt_to_bus ( buf ), buf, + DBGC_HDA ( intelxl, virt_to_phys ( buf ), buf, le16_to_cpu ( evt->len ) ); } return; @@ -314,8 +314,10 @@ void intelxlvf_admin_event ( struct net_device *netdev, default: DBGC ( intelxl, "INTELXL %p unrecognised VF event %#x:\n", intelxl, vopcode ); - DBGC_HDA ( intelxl, 0, evt, sizeof ( *evt ) ); - DBGC_HDA ( intelxl, 0, buf, le16_to_cpu ( evt->len ) ); + DBGC_HDA ( intelxl, virt_to_phys ( evt ), evt, + sizeof ( *evt ) ); + DBGC_HDA ( intelxl, virt_to_phys ( buf ), buf, + le16_to_cpu ( evt->len ) ); break; } } @@ -378,12 +380,12 @@ 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 ( virt_to_bus ( intelxl->tx.desc.raw ) ); + buf->cfg.tx.base = cpu_to_le64 ( intelxl->tx.ring.map.addr ); 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 ( virt_to_bus ( intelxl->rx.desc.raw ) ); + buf->cfg.rx.base = cpu_to_le64 ( intelxl->rx.ring.map.addr ); /* Issue command */ if ( ( rc = intelxlvf_admin_command ( netdev ) ) != 0 ) @@ -497,11 +499,11 @@ static int intelxlvf_open ( struct net_device *netdev ) { INTELXL_ALIGN - 1 ) & ~( INTELXL_ALIGN - 1 ) ); /* Allocate transmit descriptor ring */ - if ( ( rc = intelxl_alloc_ring ( intelxl, &intelxl->tx ) ) != 0 ) + if ( ( rc = intelxl_alloc_ring ( intelxl, &intelxl->tx.ring ) ) != 0 ) goto err_alloc_tx; /* Allocate receive descriptor ring */ - if ( ( rc = intelxl_alloc_ring ( intelxl, &intelxl->rx ) ) != 0 ) + if ( ( rc = intelxl_alloc_ring ( intelxl, &intelxl->rx.ring ) ) != 0 ) goto err_alloc_rx; /* Configure queues */ @@ -527,9 +529,9 @@ static int intelxlvf_open ( struct net_device *netdev ) { err_enable: err_irq_map: err_configure: - intelxl_free_ring ( intelxl, &intelxl->rx ); + intelxl_free_ring ( intelxl, &intelxl->rx.ring ); err_alloc_rx: - intelxl_free_ring ( intelxl, &intelxl->tx ); + intelxl_free_ring ( intelxl, &intelxl->tx.ring ); err_alloc_tx: return rc; } @@ -550,13 +552,13 @@ static void intelxlvf_close ( struct net_device *netdev ) { } /* Free receive descriptor ring */ - intelxl_free_ring ( intelxl, &intelxl->rx ); + intelxl_free_ring ( intelxl, &intelxl->rx.ring ); /* Free transmit descriptor ring */ - intelxl_free_ring ( intelxl, &intelxl->tx ); + intelxl_free_ring ( intelxl, &intelxl->tx.ring ); - /* Discard any unused receive buffers */ - intelxl_empty_rx ( intelxl ); + /* Flush unused buffers */ + intelxl_flush ( intelxl ); } /** Network device operations */ @@ -596,16 +598,17 @@ static int intelxlvf_probe ( struct pci_device *pci ) { pci_set_drvdata ( pci, netdev ); netdev->dev = &pci->dev; memset ( intelxl, 0, sizeof ( *intelxl ) ); + intelxl->dma = &pci->dma; intelxl->intr = INTELXLVF_VFINT_DYN_CTL0; intelxl_init_admin ( &intelxl->command, INTELXLVF_ADMIN, &intelxlvf_admin_command_offsets ); intelxl_init_admin ( &intelxl->event, INTELXLVF_ADMIN, &intelxlvf_admin_event_offsets ); - intelxlvf_init_ring ( &intelxl->tx, INTELXL_TX_NUM_DESC, - sizeof ( intelxl->tx.desc.tx[0] ), + intelxlvf_init_ring ( &intelxl->tx.ring, INTELXL_TX_NUM_DESC, + sizeof ( intelxl->tx.ring.desc.tx[0] ), INTELXLVF_QTX_TAIL ); - intelxlvf_init_ring ( &intelxl->rx, INTELXL_RX_NUM_DESC, - sizeof ( intelxl->rx.desc.rx[0] ), + intelxlvf_init_ring ( &intelxl->rx.ring, INTELXL_RX_NUM_DESC, + sizeof ( intelxl->rx.ring.desc.rx[0] ), INTELXLVF_QRX_TAIL ); /* Fix up PCI device */ |