|
@@ -1212,7 +1212,8 @@ static void rtl8169_update_counters(struct net_device *dev)
|
|
|
if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
|
|
|
return;
|
|
|
|
|
|
- counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
|
|
|
+ counters = dma_alloc_coherent(&tp->pci_dev->dev, sizeof(*counters),
|
|
|
+ &paddr, GFP_KERNEL);
|
|
|
if (!counters)
|
|
|
return;
|
|
|
|
|
@@ -1233,7 +1234,8 @@ static void rtl8169_update_counters(struct net_device *dev)
|
|
|
RTL_W32(CounterAddrLow, 0);
|
|
|
RTL_W32(CounterAddrHigh, 0);
|
|
|
|
|
|
- pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
|
|
|
+ dma_free_coherent(&tp->pci_dev->dev, sizeof(*counters), counters,
|
|
|
+ paddr);
|
|
|
}
|
|
|
|
|
|
static void rtl8169_get_ethtool_stats(struct net_device *dev,
|
|
@@ -3292,15 +3294,15 @@ static int rtl8169_open(struct net_device *dev)
|
|
|
|
|
|
/*
|
|
|
* Rx and Tx desscriptors needs 256 bytes alignment.
|
|
|
- * pci_alloc_consistent provides more.
|
|
|
+ * dma_alloc_coherent provides more.
|
|
|
*/
|
|
|
- tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES,
|
|
|
- &tp->TxPhyAddr);
|
|
|
+ tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
|
|
|
+ &tp->TxPhyAddr, GFP_KERNEL);
|
|
|
if (!tp->TxDescArray)
|
|
|
goto err_pm_runtime_put;
|
|
|
|
|
|
- tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES,
|
|
|
- &tp->RxPhyAddr);
|
|
|
+ tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
|
|
|
+ &tp->RxPhyAddr, GFP_KERNEL);
|
|
|
if (!tp->RxDescArray)
|
|
|
goto err_free_tx_0;
|
|
|
|
|
@@ -3334,12 +3336,12 @@ out:
|
|
|
err_release_ring_2:
|
|
|
rtl8169_rx_clear(tp);
|
|
|
err_free_rx_1:
|
|
|
- pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
|
|
|
- tp->RxPhyAddr);
|
|
|
+ dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
|
|
|
+ tp->RxPhyAddr);
|
|
|
tp->RxDescArray = NULL;
|
|
|
err_free_tx_0:
|
|
|
- pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
|
|
|
- tp->TxPhyAddr);
|
|
|
+ dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
|
|
|
+ tp->TxPhyAddr);
|
|
|
tp->TxDescArray = NULL;
|
|
|
err_pm_runtime_put:
|
|
|
pm_runtime_put_noidle(&pdev->dev);
|
|
@@ -3975,7 +3977,7 @@ static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
|
|
|
{
|
|
|
struct pci_dev *pdev = tp->pci_dev;
|
|
|
|
|
|
- pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
|
|
|
+ dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
|
|
|
PCI_DMA_FROMDEVICE);
|
|
|
dev_kfree_skb(*sk_buff);
|
|
|
*sk_buff = NULL;
|
|
@@ -4000,7 +4002,7 @@ static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
|
|
|
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
|
|
|
struct net_device *dev,
|
|
|
struct RxDesc *desc, int rx_buf_sz,
|
|
|
- unsigned int align)
|
|
|
+ unsigned int align, gfp_t gfp)
|
|
|
{
|
|
|
struct sk_buff *skb;
|
|
|
dma_addr_t mapping;
|
|
@@ -4008,13 +4010,13 @@ static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
|
|
|
|
|
|
pad = align ? align : NET_IP_ALIGN;
|
|
|
|
|
|
- skb = netdev_alloc_skb(dev, rx_buf_sz + pad);
|
|
|
+ skb = __netdev_alloc_skb(dev, rx_buf_sz + pad, gfp);
|
|
|
if (!skb)
|
|
|
goto err_out;
|
|
|
|
|
|
skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
|
|
|
|
|
|
- mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
|
|
|
+ mapping = dma_map_single(&pdev->dev, skb->data, rx_buf_sz,
|
|
|
PCI_DMA_FROMDEVICE);
|
|
|
|
|
|
rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
|
|
@@ -4039,7 +4041,7 @@ static void rtl8169_rx_clear(struct rtl8169_private *tp)
|
|
|
}
|
|
|
|
|
|
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
|
|
|
- u32 start, u32 end)
|
|
|
+ u32 start, u32 end, gfp_t gfp)
|
|
|
{
|
|
|
u32 cur;
|
|
|
|
|
@@ -4054,7 +4056,7 @@ static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
|
|
|
|
|
|
skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
|
|
|
tp->RxDescArray + i,
|
|
|
- tp->rx_buf_sz, tp->align);
|
|
|
+ tp->rx_buf_sz, tp->align, gfp);
|
|
|
if (!skb)
|
|
|
break;
|
|
|
|
|
@@ -4082,7 +4084,7 @@ static int rtl8169_init_ring(struct net_device *dev)
|
|
|
memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
|
|
|
memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
|
|
|
|
|
|
- if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC)
|
|
|
+ if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC, GFP_KERNEL) != NUM_RX_DESC)
|
|
|
goto err_out;
|
|
|
|
|
|
rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
|
|
@@ -4099,7 +4101,8 @@ static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
|
|
|
{
|
|
|
unsigned int len = tx_skb->len;
|
|
|
|
|
|
- pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE);
|
|
|
+ dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len,
|
|
|
+ PCI_DMA_TODEVICE);
|
|
|
desc->opts1 = 0x00;
|
|
|
desc->opts2 = 0x00;
|
|
|
desc->addr = 0x00;
|
|
@@ -4243,7 +4246,8 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
|
|
|
txd = tp->TxDescArray + entry;
|
|
|
len = frag->size;
|
|
|
addr = ((void *) page_address(frag->page)) + frag->page_offset;
|
|
|
- mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE);
|
|
|
+ mapping = dma_map_single(&tp->pci_dev->dev, addr, len,
|
|
|
+ PCI_DMA_TODEVICE);
|
|
|
|
|
|
/* anti gcc 2.95.3 bugware (sic) */
|
|
|
status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
|
|
@@ -4313,7 +4317,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
|
|
|
tp->tx_skb[entry].skb = skb;
|
|
|
}
|
|
|
|
|
|
- mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
|
|
|
+ mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len,
|
|
|
+ PCI_DMA_TODEVICE);
|
|
|
|
|
|
tp->tx_skb[entry].len = len;
|
|
|
txd->addr = cpu_to_le64(mapping);
|
|
@@ -4477,8 +4482,8 @@ static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
|
|
|
if (!skb)
|
|
|
goto out;
|
|
|
|
|
|
- pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size,
|
|
|
- PCI_DMA_FROMDEVICE);
|
|
|
+ dma_sync_single_for_cpu(&tp->pci_dev->dev, addr, pkt_size,
|
|
|
+ PCI_DMA_FROMDEVICE);
|
|
|
skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
|
|
|
*sk_buff = skb;
|
|
|
done = true;
|
|
@@ -4549,11 +4554,11 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
|
|
|
rtl8169_rx_csum(skb, desc);
|
|
|
|
|
|
if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
|
|
|
- pci_dma_sync_single_for_device(pdev, addr,
|
|
|
+ dma_sync_single_for_device(&pdev->dev, addr,
|
|
|
pkt_size, PCI_DMA_FROMDEVICE);
|
|
|
rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
|
|
|
} else {
|
|
|
- pci_unmap_single(pdev, addr, tp->rx_buf_sz,
|
|
|
+ dma_unmap_single(&pdev->dev, addr, tp->rx_buf_sz,
|
|
|
PCI_DMA_FROMDEVICE);
|
|
|
tp->Rx_skbuff[entry] = NULL;
|
|
|
}
|
|
@@ -4583,7 +4588,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
|
|
|
count = cur_rx - tp->cur_rx;
|
|
|
tp->cur_rx = cur_rx;
|
|
|
|
|
|
- delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
|
|
|
+ delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx, GFP_ATOMIC);
|
|
|
if (!delta && count)
|
|
|
netif_info(tp, intr, dev, "no Rx buffer allocated\n");
|
|
|
tp->dirty_rx += delta;
|
|
@@ -4769,10 +4774,10 @@ static int rtl8169_close(struct net_device *dev)
|
|
|
|
|
|
free_irq(dev->irq, dev);
|
|
|
|
|
|
- pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
|
|
|
- tp->RxPhyAddr);
|
|
|
- pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
|
|
|
- tp->TxPhyAddr);
|
|
|
+ dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
|
|
|
+ tp->RxPhyAddr);
|
|
|
+ dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
|
|
|
+ tp->TxPhyAddr);
|
|
|
tp->TxDescArray = NULL;
|
|
|
tp->RxDescArray = NULL;
|
|
|
|