summaryrefslogtreecommitdiff
path: root/lib/igb/igb.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/igb/igb.c')
-rw-r--r--lib/igb/igb.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/igb/igb.c b/lib/igb/igb.c
index d59a0fcb..96e18951 100644
--- a/lib/igb/igb.c
+++ b/lib/igb/igb.c
@@ -79,6 +79,7 @@ static igb_vendor_info_t igb_vendor_info_array[] = {
{ 0x8086, E1000_DEV_ID_I210_SERDES_FLASHLESS,
PCI_ANY_ID, PCI_ANY_ID, 0},
{ 0x8086, E1000_DEV_ID_I210_SGMII, PCI_ANY_ID, PCI_ANY_ID, 0},
+ { 0x8086, E1000_DEV_ID_I210_AUTOMOTIVE, PCI_ANY_ID, PCI_ANY_ID, 0},
/* required last entry */
{ 0, 0, 0, 0, 0}
};
@@ -681,14 +682,15 @@ int igb_dma_malloc_page(device_t *dev, struct igb_dma_alloc *dma)
error = errno;
goto err;
}
- error = ioctl(adapter->ldev, IGB_MAPBUF, &ubuf);
+ error = ioctl(adapter->ldev, IGB_IOCTL_MAPBUF, &ubuf);
if (igb_unlock(dev) != 0) {
error = errno;
goto err;
}
if (error < 0) {
- error = -ENOMEM;
+ if(error != -EINVAL)
+ error = -ENOMEM;
goto err;
}
@@ -699,7 +701,7 @@ int igb_dma_malloc_page(device_t *dev, struct igb_dma_alloc *dma)
PROT_READ | PROT_WRITE,
MAP_SHARED,
adapter->ldev,
- ubuf.physaddr);
+ ubuf.pa);
if (dma->dma_vaddr == MAP_FAILED)
error = -ENOMEM;
@@ -729,7 +731,7 @@ void igb_dma_free_page(device_t *dev, struct igb_dma_alloc *dma)
if (igb_lock(dev) != 0)
goto err;
- ioctl(adapter->ldev, IGB_UNMAPBUF, &ubuf);
+ ioctl(adapter->ldev, IGB_IOCTL_UNMAPBUF, &ubuf);
if (igb_unlock(dev) != 0)
goto err;
@@ -767,8 +769,11 @@ static int igb_allocate_queues(struct adapter *adapter)
for (i = 0; i < adapter->num_queues; i++) {
ubuf.queue = i;
- error = ioctl(dev, IGB_MAPRING, &ubuf);
+ error = ioctl(dev, IGB_IOCTL_MAPRING, &ubuf);
if (error < 0) {
+ if(error == -EINVAL)
+ goto tx_fail;
+
error = EBUSY;
goto tx_desc;
}
@@ -784,7 +789,7 @@ static int igb_allocate_queues(struct adapter *adapter)
(struct e1000_tx_desc *)mmap(NULL, ubuf.mmap_size,
PROT_READ | PROT_WRITE,
MAP_SHARED, adapter->ldev,
- ubuf.physaddr);
+ ubuf.pa);
if (adapter->tx_rings[i].tx_base == MAP_FAILED) {
error = -ENOMEM;
@@ -828,7 +833,7 @@ tx_desc:
munmap(adapter->tx_rings[i].tx_base,
adapter->tx_rings[i].txdma.mmap_size);
ubuf.queue = i;
- ioctl(dev, IGB_UNMAPRING, &ubuf);
+ ioctl(dev, IGB_IOCTL_UNMAPRING, &ubuf);
};
tx_fail:
free(adapter->tx_rings);
@@ -908,7 +913,7 @@ static void igb_free_transmit_structures(struct adapter *adapter)
munmap(adapter->tx_rings[i].tx_base,
adapter->tx_rings[i].txdma.mmap_size);
ubuf.queue = i;
- ioctl(adapter->ldev, IGB_UNMAPRING, &ubuf);
+ ioctl(adapter->ldev, IGB_IOCTL_UNMAPRING, &ubuf);
free(adapter->tx_rings[i].tx_buffers);
}
@@ -1352,8 +1357,12 @@ static int igb_allocate_rx_queues(struct adapter *adapter)
}
ubuf.queue = i;
- error = ioctl(dev, IGB_MAP_RX_RING, &ubuf);
+ error = ioctl(dev, IGB_IOCTL_MAP_RX_RING, &ubuf);
if (error < 0) {
+
+ if(error == -EINVAL)
+ goto rx_fail;
+
error = EBUSY;
goto rx_desc;
}
@@ -1367,7 +1376,7 @@ static int igb_allocate_rx_queues(struct adapter *adapter)
adapter->rx_rings[i].rx_base = NULL;
adapter->rx_rings[i].rx_base =
mmap(NULL, ubuf.mmap_size, PROT_READ | PROT_WRITE,
- MAP_SHARED, adapter->ldev, ubuf.physaddr);
+ MAP_SHARED, adapter->ldev, ubuf.pa);
if (adapter->rx_rings[i].rx_base == MAP_FAILED) {
error = -ENOMEM;
@@ -1416,7 +1425,7 @@ rx_desc:
munmap(adapter->rx_rings[i].rx_base,
adapter->rx_rings[i].rxdma.mmap_size);
ubuf.queue = i;
- ioctl(dev, IGB_UNMAP_RX_RING, &ubuf);
+ ioctl(dev, IGB_IOCTL_UNMAP_RX_RING, &ubuf);
sem_destroy(&adapter->rx_rings[i].lock);
};
@@ -1571,7 +1580,7 @@ static void igb_free_receive_structures(struct adapter *adapter)
munmap(rxr->rx_base, rxr->rxdma.mmap_size);
}
ubuf.queue = i;
- ioctl(adapter->ldev, IGB_UNMAP_RX_RING, &ubuf);
+ ioctl(adapter->ldev, IGB_IOCTL_UNMAP_RX_RING, &ubuf);
igb_free_receive_buffers(rxr);
(void)sem_destroy(&adapter->rx_rings[i].lock);