Commit e059c6f3 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by David S. Miller
Browse files

tulip: switch from 'pci_' to 'dma_' API



The wrappers in include/linux/pci-dma-compat.h should go away.

The patch has been generated with the coccinelle script below and has been
hand modified to replace GFP_ with a correct flag.
It has been compile tested.

When memory is allocated in 'tulip_init_one()' GFP_KERNEL can be used
because it is a probe function and no lock is taken in the between.

@@
@@
-    PCI_DMA_BIDIRECTIONAL
+    DMA_BIDIRECTIONAL

@@
@@
-    PCI_DMA_TODEVICE
+    DMA_TO_DEVICE

@@
@@
-    PCI_DMA_FROMDEVICE
+    DMA_FROM_DEVICE

@@
@@
-    PCI_DMA_NONE
+    DMA_NONE

@@
expression e1, e2, e3;
@@
-    pci_alloc_consistent(e1, e2, e3)
+    dma_alloc_coherent(&e1->dev, e2, e3, GFP_)

@@
expression e1, e2, e3;
@@
-    pci_zalloc_consistent(e1, e2, e3)
+    dma_alloc_coherent(&e1->dev, e2, e3, GFP_)

@@
expression e1, e2, e3, e4;
@@
-    pci_free_consistent(e1, e2, e3, e4)
+    dma_free_coherent(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_map_single(e1, e2, e3, e4)
+    dma_map_single(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_single(e1, e2, e3, e4)
+    dma_unmap_single(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4, e5;
@@
-    pci_map_page(e1, e2, e3, e4, e5)
+    dma_map_page(&e1->dev, e2, e3, e4, e5)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_page(e1, e2, e3, e4)
+    dma_unmap_page(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_map_sg(e1, e2, e3, e4)
+    dma_map_sg(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_sg(e1, e2, e3, e4)
+    dma_unmap_sg(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_single_for_cpu(e1, e2, e3, e4)
+    dma_sync_single_for_cpu(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_single_for_device(e1, e2, e3, e4)
+    dma_sync_single_for_device(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_sg_for_cpu(e1, e2, e3, e4)
+    dma_sync_sg_for_cpu(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_sg_for_device(e1, e2, e3, e4)
+    dma_sync_sg_for_device(&e1->dev, e2, e3, e4)

@@
expression e1, e2;
@@
-    pci_dma_mapping_error(e1, e2)
+    dma_mapping_error(&e1->dev, e2)

@@
expression e1, e2;
@@
-    pci_set_dma_mask(e1, e2)
+    dma_set_mask(&e1->dev, e2)

@@
expression e1, e2;
@@
-    pci_set_consistent_dma_mask(e1, e2)
+    dma_set_coherent_mask(&e1->dev, e2)

Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7a1fe380
Loading
Loading
Loading
Loading
+32 −24
Original line number Diff line number Diff line
@@ -74,8 +74,8 @@ int tulip_refill_rx(struct net_device *dev)
			if (skb == NULL)
				break;

			mapping = pci_map_single(tp->pdev, skb->data, PKT_BUF_SZ,
						 PCI_DMA_FROMDEVICE);
			mapping = dma_map_single(&tp->pdev->dev, skb->data,
						 PKT_BUF_SZ, DMA_FROM_DEVICE);
			if (dma_mapping_error(&tp->pdev->dev, mapping)) {
				dev_kfree_skb(skb);
				tp->rx_buffers[entry].skb = NULL;
@@ -210,9 +210,10 @@ int tulip_poll(struct napi_struct *napi, int budget)
                               if (pkt_len < tulip_rx_copybreak &&
                                   (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) {
                                       skb_reserve(skb, 2);    /* 16 byte align the IP header */
                                       pci_dma_sync_single_for_cpu(tp->pdev,
					dma_sync_single_for_cpu(&tp->pdev->dev,
								tp->rx_buffers[entry].mapping,
								   pkt_len, PCI_DMA_FROMDEVICE);
								pkt_len,
								DMA_FROM_DEVICE);
#if ! defined(__alpha__)
                                       skb_copy_to_linear_data(skb, tp->rx_buffers[entry].skb->data,
                                                        pkt_len);
@@ -222,9 +223,10 @@ int tulip_poll(struct napi_struct *napi, int budget)
                                                    tp->rx_buffers[entry].skb->data,
                                                    pkt_len);
#endif
                                       pci_dma_sync_single_for_device(tp->pdev,
					dma_sync_single_for_device(&tp->pdev->dev,
								   tp->rx_buffers[entry].mapping,
								      pkt_len, PCI_DMA_FROMDEVICE);
								   pkt_len,
								   DMA_FROM_DEVICE);
                               } else {        /* Pass up the skb already on the Rx ring. */
                                       char *temp = skb_put(skb = tp->rx_buffers[entry].skb,
                                                            pkt_len);
@@ -240,8 +242,10 @@ int tulip_poll(struct napi_struct *napi, int budget)
                                       }
#endif

                                       pci_unmap_single(tp->pdev, tp->rx_buffers[entry].mapping,
                                                        PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
					dma_unmap_single(&tp->pdev->dev,
							 tp->rx_buffers[entry].mapping,
							 PKT_BUF_SZ,
							 DMA_FROM_DEVICE);

                                       tp->rx_buffers[entry].skb = NULL;
                                       tp->rx_buffers[entry].mapping = 0;
@@ -436,9 +440,10 @@ static int tulip_rx(struct net_device *dev)
			if (pkt_len < tulip_rx_copybreak &&
			    (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) {
				skb_reserve(skb, 2);	/* 16 byte align the IP header */
				pci_dma_sync_single_for_cpu(tp->pdev,
				dma_sync_single_for_cpu(&tp->pdev->dev,
							tp->rx_buffers[entry].mapping,
							    pkt_len, PCI_DMA_FROMDEVICE);
							pkt_len,
							DMA_FROM_DEVICE);
#if ! defined(__alpha__)
				skb_copy_to_linear_data(skb, tp->rx_buffers[entry].skb->data,
						 pkt_len);
@@ -448,9 +453,10 @@ static int tulip_rx(struct net_device *dev)
					     tp->rx_buffers[entry].skb->data,
					     pkt_len);
#endif
				pci_dma_sync_single_for_device(tp->pdev,
				dma_sync_single_for_device(&tp->pdev->dev,
							   tp->rx_buffers[entry].mapping,
							       pkt_len, PCI_DMA_FROMDEVICE);
							   pkt_len,
							   DMA_FROM_DEVICE);
			} else { 	/* Pass up the skb already on the Rx ring. */
				char *temp = skb_put(skb = tp->rx_buffers[entry].skb,
						     pkt_len);
@@ -466,8 +472,9 @@ static int tulip_rx(struct net_device *dev)
				}
#endif

				pci_unmap_single(tp->pdev, tp->rx_buffers[entry].mapping,
						 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
				dma_unmap_single(&tp->pdev->dev,
						 tp->rx_buffers[entry].mapping,
						 PKT_BUF_SZ, DMA_FROM_DEVICE);

				tp->rx_buffers[entry].skb = NULL;
				tp->rx_buffers[entry].mapping = 0;
@@ -597,10 +604,10 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance)
				if (tp->tx_buffers[entry].skb == NULL) {
					/* test because dummy frames not mapped */
					if (tp->tx_buffers[entry].mapping)
						pci_unmap_single(tp->pdev,
						dma_unmap_single(&tp->pdev->dev,
								 tp->tx_buffers[entry].mapping,
								 sizeof(tp->setup_frame),
							 PCI_DMA_TODEVICE);
								 DMA_TO_DEVICE);
					continue;
				}

@@ -629,9 +636,10 @@ irqreturn_t tulip_interrupt(int irq, void *dev_instance)
					dev->stats.tx_packets++;
				}

				pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
				dma_unmap_single(&tp->pdev->dev,
						 tp->tx_buffers[entry].mapping,
						 tp->tx_buffers[entry].skb->len,
						 PCI_DMA_TODEVICE);
						 DMA_TO_DEVICE);

				/* Free the original skb. */
				dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
+34 −31
Original line number Diff line number Diff line
@@ -350,9 +350,9 @@ static void tulip_up(struct net_device *dev)
		*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
		*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];

		mapping = pci_map_single(tp->pdev, tp->setup_frame,
		mapping = dma_map_single(&tp->pdev->dev, tp->setup_frame,
					 sizeof(tp->setup_frame),
					 PCI_DMA_TODEVICE);
					 DMA_TO_DEVICE);
		tp->tx_buffers[tp->cur_tx].skb = NULL;
		tp->tx_buffers[tp->cur_tx].mapping = mapping;

@@ -630,8 +630,8 @@ static void tulip_init_ring(struct net_device *dev)
		tp->rx_buffers[i].skb = skb;
		if (skb == NULL)
			break;
		mapping = pci_map_single(tp->pdev, skb->data,
					 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
		mapping = dma_map_single(&tp->pdev->dev, skb->data,
					 PKT_BUF_SZ, DMA_FROM_DEVICE);
		tp->rx_buffers[i].mapping = mapping;
		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
@@ -664,8 +664,8 @@ tulip_start_xmit(struct sk_buff *skb, struct net_device *dev)
	entry = tp->cur_tx % TX_RING_SIZE;

	tp->tx_buffers[entry].skb = skb;
	mapping = pci_map_single(tp->pdev, skb->data,
				 skb->len, PCI_DMA_TODEVICE);
	mapping = dma_map_single(&tp->pdev->dev, skb->data, skb->len,
				 DMA_TO_DEVICE);
	tp->tx_buffers[entry].mapping = mapping;
	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);

@@ -716,16 +716,17 @@ static void tulip_clean_tx_ring(struct tulip_private *tp)
		if (tp->tx_buffers[entry].skb == NULL) {
			/* test because dummy frames not mapped */
			if (tp->tx_buffers[entry].mapping)
				pci_unmap_single(tp->pdev,
				dma_unmap_single(&tp->pdev->dev,
						 tp->tx_buffers[entry].mapping,
						 sizeof(tp->setup_frame),
					PCI_DMA_TODEVICE);
						 DMA_TO_DEVICE);
			continue;
		}

		pci_unmap_single(tp->pdev, tp->tx_buffers[entry].mapping,
		dma_unmap_single(&tp->pdev->dev,
				 tp->tx_buffers[entry].mapping,
				 tp->tx_buffers[entry].skb->len,
				PCI_DMA_TODEVICE);
				 DMA_TO_DEVICE);

		/* Free the original skb. */
		dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
@@ -795,8 +796,8 @@ static void tulip_free_ring (struct net_device *dev)
		/* An invalid address. */
		tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
		if (skb) {
			pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
					 PCI_DMA_FROMDEVICE);
			dma_unmap_single(&tp->pdev->dev, mapping, PKT_BUF_SZ,
					 DMA_FROM_DEVICE);
			dev_kfree_skb (skb);
		}
	}
@@ -805,8 +806,9 @@ static void tulip_free_ring (struct net_device *dev)
		struct sk_buff *skb = tp->tx_buffers[i].skb;

		if (skb != NULL) {
			pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
					 skb->len, PCI_DMA_TODEVICE);
			dma_unmap_single(&tp->pdev->dev,
					 tp->tx_buffers[i].mapping, skb->len,
					 DMA_TO_DEVICE);
			dev_kfree_skb (skb);
		}
		tp->tx_buffers[i].skb = NULL;
@@ -1149,9 +1151,10 @@ static void set_rx_mode(struct net_device *dev)

			tp->tx_buffers[entry].skb = NULL;
			tp->tx_buffers[entry].mapping =
				pci_map_single(tp->pdev, tp->setup_frame,
				dma_map_single(&tp->pdev->dev,
					       tp->setup_frame,
					       sizeof(tp->setup_frame),
					       PCI_DMA_TODEVICE);
					       DMA_TO_DEVICE);
			/* Put the setup frame on the Tx list. */
			if (entry == TX_RING_SIZE-1)
				tx_flags |= DESC_RING_WRAP;		/* Wrap ring. */
@@ -1422,10 +1425,10 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
	tp = netdev_priv(dev);
	tp->dev = dev;

	tp->rx_ring = pci_alloc_consistent(pdev,
	tp->rx_ring = dma_alloc_coherent(&pdev->dev,
					 sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
					 sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
					   &tp->rx_ring_dma);
					 &tp->rx_ring_dma, GFP_KERNEL);
	if (!tp->rx_ring)
		goto err_out_mtable;
	tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
@@ -1757,7 +1760,7 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
	return 0;

err_out_free_ring:
	pci_free_consistent (pdev,
	dma_free_coherent(&pdev->dev,
			  sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
			  sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
			  tp->rx_ring, tp->rx_ring_dma);
@@ -1878,7 +1881,7 @@ static void tulip_remove_one(struct pci_dev *pdev)

	tp = netdev_priv(dev);
	unregister_netdev(dev);
	pci_free_consistent (pdev,
	dma_free_coherent(&pdev->dev,
			  sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
			  sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
			  tp->rx_ring, tp->rx_ring_dma);