|
@@ -635,7 +635,11 @@ static void atl1e_clean_tx_ring(struct atl1e_adapter *adapter)
|
|
for (index = 0; index < ring_count; index++) {
|
|
for (index = 0; index < ring_count; index++) {
|
|
tx_buffer = &tx_ring->tx_buffer[index];
|
|
tx_buffer = &tx_ring->tx_buffer[index];
|
|
if (tx_buffer->dma) {
|
|
if (tx_buffer->dma) {
|
|
- pci_unmap_page(pdev, tx_buffer->dma,
|
|
|
|
|
|
+ if (tx_buffer->flags & ATL1E_TX_PCIMAP_SINGLE)
|
|
|
|
+ pci_unmap_single(pdev, tx_buffer->dma,
|
|
|
|
+ tx_buffer->length, PCI_DMA_TODEVICE);
|
|
|
|
+ else if (tx_buffer->flags & ATL1E_TX_PCIMAP_PAGE)
|
|
|
|
+ pci_unmap_page(pdev, tx_buffer->dma,
|
|
tx_buffer->length, PCI_DMA_TODEVICE);
|
|
tx_buffer->length, PCI_DMA_TODEVICE);
|
|
tx_buffer->dma = 0;
|
|
tx_buffer->dma = 0;
|
|
}
|
|
}
|
|
@@ -1220,7 +1224,11 @@ static bool atl1e_clean_tx_irq(struct atl1e_adapter *adapter)
|
|
while (next_to_clean != hw_next_to_clean) {
|
|
while (next_to_clean != hw_next_to_clean) {
|
|
tx_buffer = &tx_ring->tx_buffer[next_to_clean];
|
|
tx_buffer = &tx_ring->tx_buffer[next_to_clean];
|
|
if (tx_buffer->dma) {
|
|
if (tx_buffer->dma) {
|
|
- pci_unmap_page(adapter->pdev, tx_buffer->dma,
|
|
|
|
|
|
+ if (tx_buffer->flags & ATL1E_TX_PCIMAP_SINGLE)
|
|
|
|
+ pci_unmap_single(adapter->pdev, tx_buffer->dma,
|
|
|
|
+ tx_buffer->length, PCI_DMA_TODEVICE);
|
|
|
|
+ else if (tx_buffer->flags & ATL1E_TX_PCIMAP_PAGE)
|
|
|
|
+ pci_unmap_page(adapter->pdev, tx_buffer->dma,
|
|
tx_buffer->length, PCI_DMA_TODEVICE);
|
|
tx_buffer->length, PCI_DMA_TODEVICE);
|
|
tx_buffer->dma = 0;
|
|
tx_buffer->dma = 0;
|
|
}
|
|
}
|
|
@@ -1741,6 +1749,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
|
|
tx_buffer->length = map_len;
|
|
tx_buffer->length = map_len;
|
|
tx_buffer->dma = pci_map_single(adapter->pdev,
|
|
tx_buffer->dma = pci_map_single(adapter->pdev,
|
|
skb->data, hdr_len, PCI_DMA_TODEVICE);
|
|
skb->data, hdr_len, PCI_DMA_TODEVICE);
|
|
|
|
+ ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
|
|
mapped_len += map_len;
|
|
mapped_len += map_len;
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
@@ -1766,6 +1775,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
|
|
tx_buffer->dma =
|
|
tx_buffer->dma =
|
|
pci_map_single(adapter->pdev, skb->data + mapped_len,
|
|
pci_map_single(adapter->pdev, skb->data + mapped_len,
|
|
map_len, PCI_DMA_TODEVICE);
|
|
map_len, PCI_DMA_TODEVICE);
|
|
|
|
+ ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE);
|
|
mapped_len += map_len;
|
|
mapped_len += map_len;
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
@@ -1801,6 +1811,7 @@ static void atl1e_tx_map(struct atl1e_adapter *adapter,
|
|
(i * MAX_TX_BUF_LEN),
|
|
(i * MAX_TX_BUF_LEN),
|
|
tx_buffer->length,
|
|
tx_buffer->length,
|
|
PCI_DMA_TODEVICE);
|
|
PCI_DMA_TODEVICE);
|
|
|
|
+ ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_PAGE);
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma);
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) |
|
|
((cpu_to_le32(tx_buffer->length) &
|
|
((cpu_to_le32(tx_buffer->length) &
|