[PATCH] use enum dma_data_direction for everything except generic pci_dma routines

Stephen Rothwell sfr at canb.auug.org.au
Thu Apr 1 14:02:15 EST 2004


Hi Anton,

This is just a clenaup to use enum dma_data_direction for all APIs
except the pci_dma_ ones (since they are defined generically).

Also make most of the functions in arch/ppc64/kernel/pci_iommu.c
static.

Relative to previous patches.

Built and booted on iSeries, build for default pSeries config, not
tested for pmac.

Let me know when I go to far ... :-)
--
Cheers,
Stephen Rothwell                    sfr at canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
-------------- next part --------------
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/iSeries_iommu.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/iSeries_iommu.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/iSeries_iommu.c	2004-03-30 12:04:37.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/iSeries_iommu.c	2004-04-01 13:25:10.000000000 +1000
@@ -33,6 +33,7 @@
 #include <linux/spinlock.h>
 #include <linux/string.h>
 #include <linux/pci.h>
+#include <linux/dma-mapping.h>
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/rtas.h>
@@ -69,7 +70,7 @@


 static void tce_build_iSeries(struct iommu_table *tbl, long index, long npages,
-			      unsigned long uaddr, int direction)
+		unsigned long uaddr, enum dma_data_direction direction)
 {
 	u64 rc;
 	union tce_entry tce;
@@ -82,12 +83,12 @@
 			/* Virtual Bus */
 			tce.te_bits.tb_valid = 1;
 			tce.te_bits.tb_allio = 1;
-			if (direction != PCI_DMA_TODEVICE)
+			if (direction != DMA_TO_DEVICE)
 				tce.te_bits.tb_rdwr = 1;
 		} else {
 			/* PCI Bus */
 			tce.te_bits.tb_rdwr = 1; /* Read allowed */
-			if (direction != PCI_DMA_TODEVICE)
+			if (direction != DMA_TO_DEVICE)
 				tce.te_bits.tb_pciwr = 1;
 		}

diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/iommu.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/iommu.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/iommu.c	2004-04-01 10:35:44.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/iommu.c	2004-04-01 13:19:08.000000000 +1000
@@ -31,7 +31,6 @@
 #include <linux/mm.h>
 #include <linux/spinlock.h>
 #include <linux/string.h>
-#include <linux/pci.h>
 #include <linux/dma-mapping.h>
 #include <linux/init.h>
 #include <asm/io.h>
@@ -142,7 +141,7 @@
 }

 dma_addr_t iommu_alloc(struct iommu_table *tbl, void *page,
-		       unsigned int npages, int direction)
+		       unsigned int npages, enum dma_data_direction direction)
 {
 	unsigned long entry, flags;
 	dma_addr_t ret = DMA_ERROR_CODE;
@@ -227,7 +226,8 @@
 }

 int iommu_alloc_sg(struct iommu_table *tbl, struct device *dev,
-		   struct scatterlist *sglist, int nelems, int direction)
+		   struct scatterlist *sglist, int nelems,
+		   enum dma_data_direction direction)
 {
 	dma_addr_t dma_next, dma_addr;
 	unsigned long flags;
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pSeries_iommu.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pSeries_iommu.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pSeries_iommu.c	2004-03-30 12:04:37.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pSeries_iommu.c	2004-04-01 13:26:11.000000000 +1000
@@ -33,6 +33,7 @@
 #include <linux/spinlock.h>
 #include <linux/string.h>
 #include <linux/pci.h>
+#include <linux/dma-mapping.h>
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/rtas.h>
@@ -46,7 +47,7 @@

 static void tce_build_pSeries(struct iommu_table *tbl, long index,
 			      long npages, unsigned long uaddr,
-			      int direction)
+			      enum dma_data_direction direction)
 {
 	union tce_entry t;
 	union tce_entry *tp;
@@ -54,7 +55,7 @@
 	t.te_word = 0;
 	t.te_rdwr = 1; // Read allowed

-	if (direction != PCI_DMA_TODEVICE)
+	if (direction != DMA_TO_DEVICE)
 		t.te_pciwr = 1;

 	tp = ((union tce_entry *)tbl->it_base) + index;
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pSeries_lpar.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pSeries_lpar.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pSeries_lpar.c	2004-03-30 12:04:37.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pSeries_lpar.c	2004-04-01 13:23:32.000000000 +1000
@@ -21,6 +21,7 @@

 #include <linux/config.h>
 #include <linux/kernel.h>
+#include <linux/dma-mapping.h>
 #include <asm/processor.h>
 #include <asm/mmu.h>
 #include <asm/page.h>
@@ -30,7 +31,6 @@
 #include <asm/mmu_context.h>
 #include <asm/ppcdebug.h>
 #include <asm/iommu.h>
-#include <linux/pci.h>
 #include <asm/naca.h>
 #include <asm/tlbflush.h>
 #include <asm/tlb.h>
@@ -129,8 +129,9 @@
 				  lbuf[1]);
 }

-static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, long npages,
-				unsigned long uaddr, int direction )
+static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum,
+		long npages, unsigned long uaddr,
+		enum dma_data_direction direction)
 {
 	u64 rc;
 	union tce_entry tce;
@@ -138,7 +139,7 @@
 	tce.te_word = 0;
 	tce.te_rpn = (virt_to_abs(uaddr)) >> PAGE_SHIFT;
 	tce.te_rdwr = 1;
-	if (direction != PCI_DMA_TODEVICE)
+	if (direction != DMA_TO_DEVICE)
 		tce.te_pciwr = 1;

 	while (npages--) {
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pci_dma_direct.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pci_dma_direct.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pci_dma_direct.c	2004-03-30 12:04:37.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pci_dma_direct.c	2004-04-01 13:50:24.000000000 +1000
@@ -18,6 +18,7 @@
 #include <linux/init.h>
 #include <linux/bootmem.h>
 #include <linux/mm.h>
+#include <linux/dma-mapping.h>

 #include <asm/sections.h>
 #include <asm/io.h>
@@ -49,18 +50,18 @@
 }

 static dma_addr_t pci_direct_map_single(struct pci_dev *hwdev, void *ptr,
-				  size_t size, int direction)
+		size_t size, enum dma_data_direction direction)
 {
 	return virt_to_abs(ptr);
 }

 static void pci_direct_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
-			      size_t size, int direction)
+		size_t size, enum dma_data_direction direction)
 {
 }

 static int pci_direct_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
-		       int nents, int direction)
+		int nents, enum dma_data_direction direction)
 {
 	int i;

@@ -73,7 +74,7 @@
 }

 static void pci_direct_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
-			  int nents, int direction)
+		int nents, enum dma_data_direction direction)
 {
 }

diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pci_iommu.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pci_iommu.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pci_iommu.c	2004-04-01 10:35:06.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pci_iommu.c	2004-04-01 13:53:18.000000000 +1000
@@ -66,7 +66,7 @@
  * Returns the virtual address of the buffer and sets dma_handle
  * to the dma address (mapping) of the first page.
  */
-void *pci_iommu_alloc_consistent(struct pci_dev *hwdev, size_t size,
+static void *pci_iommu_alloc_consistent(struct pci_dev *hwdev, size_t size,
 			   dma_addr_t *dma_handle)
 {
 	struct iommu_table *tbl;
@@ -100,7 +100,7 @@
 	memset(ret, 0, size);

 	/* Set up tces to cover the allocated range */
-	mapping = iommu_alloc(tbl, ret, npages, PCI_DMA_BIDIRECTIONAL);
+	mapping = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL);

 	if (mapping == DMA_ERROR_CODE) {
 		free_pages((unsigned long)ret, order);
@@ -112,7 +112,7 @@
 }


-void pci_iommu_free_consistent(struct pci_dev *hwdev, size_t size,
+static void pci_iommu_free_consistent(struct pci_dev *hwdev, size_t size,
 			 void *vaddr, dma_addr_t dma_handle)
 {
 	struct iommu_table *tbl;
@@ -136,15 +136,15 @@
  * need not be page aligned, the dma_addr_t returned will point to the same
  * byte within the page as vaddr.
  */
-dma_addr_t pci_iommu_map_single(struct pci_dev *hwdev, void *vaddr,
-				size_t size, int direction)
+static dma_addr_t pci_iommu_map_single(struct pci_dev *hwdev, void *vaddr,
+		size_t size, enum dma_data_direction direction)
 {
 	struct iommu_table * tbl;
 	dma_addr_t dma_handle = DMA_ERROR_CODE;
 	unsigned long uaddr;
 	unsigned int npages;

-	BUG_ON(direction == PCI_DMA_NONE);
+	BUG_ON(direction == DMA_NONE);

 	uaddr = (unsigned long)vaddr;
 	npages = PAGE_ALIGN(uaddr + size) - (uaddr & PAGE_MASK);
@@ -167,13 +167,13 @@
 }


-void pci_iommu_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_handle,
-		      size_t size, int direction)
+static void pci_iommu_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_handle,
+		size_t size, enum dma_data_direction direction)
 {
 	struct iommu_table *tbl;
 	unsigned int npages;

-	BUG_ON(direction == PCI_DMA_NONE);
+	BUG_ON(direction == DMA_NONE);

 	npages = (PAGE_ALIGN(dma_handle + size) - (dma_handle & PAGE_MASK))
 		>> PAGE_SHIFT;
@@ -185,12 +185,12 @@
 }


-int pci_iommu_map_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
-	       int direction)
+static int pci_iommu_map_sg(struct pci_dev *pdev, struct scatterlist *sglist,
+		int nelems, enum dma_data_direction direction)
 {
 	struct iommu_table * tbl;

-	BUG_ON(direction == PCI_DMA_NONE);
+	BUG_ON(direction == DMA_NONE);

 	if (nelems == 0)
 		return 0;
@@ -202,12 +202,12 @@
 	return iommu_alloc_sg(tbl, &pdev->dev, sglist, nelems, direction);
 }

-void pci_iommu_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
-		  int direction)
+static void pci_iommu_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist,
+		int nelems, enum dma_data_direction direction)
 {
 	struct iommu_table *tbl;

-	BUG_ON(direction == PCI_DMA_NONE);
+	BUG_ON(direction == DMA_NONE);

 	tbl = devnode_table(pdev);
 	if (!tbl)
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pmac_iommu.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pmac_iommu.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/pmac_iommu.c	2004-03-30 12:04:37.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/pmac_iommu.c	2004-04-01 13:27:45.000000000 +1000
@@ -33,6 +33,7 @@
 #include <linux/spinlock.h>
 #include <linux/string.h>
 #include <linux/pci.h>
+#include <linux/dma-mapping.h>
 #include <linux/vmalloc.h>
 #include <asm/io.h>
 #include <asm/prom.h>
@@ -141,7 +142,7 @@

 static void dart_build_pmac(struct iommu_table *tbl, long index,
 			    long npages, unsigned long uaddr,
-			    int direction)
+			    enum dma_data_direction direction)
 {
 	unsigned int *dp;
 	unsigned int rpn;
diff -ruN ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/vio.c ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/vio.c
--- ppc64-2.5-iseries.dma.2/arch/ppc64/kernel/vio.c	2004-04-01 11:59:33.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/arch/ppc64/kernel/vio.c	2004-04-01 13:13:53.000000000 +1000
@@ -431,7 +431,7 @@
 	tbl = dev->iommu_table;

 	if (tbl) {
-		dma_handle = iommu_alloc(tbl, vaddr, npages, (int)direction);
+		dma_handle = iommu_alloc(tbl, vaddr, npages, direction);
 		dma_handle |= (uaddr & ~PAGE_MASK);
 	}

@@ -470,7 +470,7 @@
 	if (!tbl)
 		return 0;

-	return iommu_alloc_sg(tbl, &vdev->dev, sglist, nelems, (int)direction);
+	return iommu_alloc_sg(tbl, &vdev->dev, sglist, nelems, direction);
 }
 EXPORT_SYMBOL(vio_map_sg);

@@ -515,7 +515,7 @@
 			/* Page allocation succeeded */
 			memset(ret, 0, npages << PAGE_SHIFT);
 			/* Set up tces to cover the allocated range */
-			tce = iommu_alloc(tbl, ret, npages, (int)DMA_BIDIRECTIONAL);
+			tce = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL);
 			if (tce == DMA_ERROR_CODE) {
 				PPCDBG(PPCDBG_TCE, "vio_alloc_consistent: iommu_alloc failed\n" );
 				free_pages((unsigned long)ret, order);
diff -ruN ppc64-2.5-iseries.dma.2/include/asm-ppc64/iommu.h ppc64-2.5-iseries.dma.3/include/asm-ppc64/iommu.h
--- ppc64-2.5-iseries.dma.2/include/asm-ppc64/iommu.h	2004-03-23 17:07:56.000000000 +1100
+++ ppc64-2.5-iseries.dma.3/include/asm-ppc64/iommu.h	2004-04-01 13:20:43.000000000 +1000
@@ -25,6 +25,7 @@
 #include <asm/types.h>
 #include <linux/spinlock.h>
 #include <linux/device.h>
+#include <linux/dma-mapping.h>

 /*
  * IOMAP_MAX_ORDER defines the largest contiguous block
@@ -132,14 +133,15 @@

 /* allocates a range of tces and sets them to the pages  */
 extern dma_addr_t iommu_alloc(struct iommu_table *, void *page,
-			      unsigned int numPages, int direction);
+			      unsigned int numPages,
+			      enum dma_data_direction direction);
 extern void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr,
 		       unsigned int npages);

 /* same with sg lists */
 extern int iommu_alloc_sg(struct iommu_table *table, struct device *dev,
 			  struct scatterlist *sglist, int nelems,
-			  int direction);
+			  enum dma_data_direction direction);
 extern void iommu_free_sg(struct iommu_table *tbl, struct scatterlist *sglist,
 			  int nelems);

diff -ruN ppc64-2.5-iseries.dma.2/include/asm-ppc64/machdep.h ppc64-2.5-iseries.dma.3/include/asm-ppc64/machdep.h
--- ppc64-2.5-iseries.dma.2/include/asm-ppc64/machdep.h	2004-03-23 17:07:56.000000000 +1100
+++ ppc64-2.5-iseries.dma.3/include/asm-ppc64/machdep.h	2004-04-01 13:28:36.000000000 +1000
@@ -12,6 +12,7 @@
 #include <linux/config.h>
 #include <linux/seq_file.h>
 #include <linux/irq.h>
+#include <linux/dma-mapping.h>

 struct pt_regs;
 struct pci_bus;
@@ -58,7 +59,7 @@
 				     long index,
 				     long npages,
 				     unsigned long uaddr,
-				     int direction);
+				     enum dma_data_direction direction);
 	void		(*tce_free)(struct iommu_table *tbl,
 				    long index,
 				    long npages);
diff -ruN ppc64-2.5-iseries.dma.2/include/asm-ppc64/pci-bridge.h ppc64-2.5-iseries.dma.3/include/asm-ppc64/pci-bridge.h
--- ppc64-2.5-iseries.dma.2/include/asm-ppc64/pci-bridge.h	2004-02-12 23:04:44.000000000 +1100
+++ ppc64-2.5-iseries.dma.3/include/asm-ppc64/pci-bridge.h	2004-04-01 13:30:51.000000000 +1000
@@ -2,6 +2,8 @@
 #ifndef _ASM_PCI_BRIDGE_H
 #define _ASM_PCI_BRIDGE_H

+#include <linux/pci.h>
+
 /*
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
diff -ruN ppc64-2.5-iseries.dma.2/include/asm-ppc64/pci.h ppc64-2.5-iseries.dma.3/include/asm-ppc64/pci.h
--- ppc64-2.5-iseries.dma.2/include/asm-ppc64/pci.h	2004-04-01 10:40:07.000000000 +1000
+++ ppc64-2.5-iseries.dma.3/include/asm-ppc64/pci.h	2004-04-01 13:48:08.000000000 +1000
@@ -64,13 +64,13 @@
 				       void *vaddr, dma_addr_t dma_handle);

 	dma_addr_t	(*pci_map_single)(struct pci_dev *hwdev, void *ptr,
-					  size_t size, int direction);
+					  size_t size, enum dma_data_direction direction);
 	void		(*pci_unmap_single)(struct pci_dev *hwdev, dma_addr_t dma_addr,
-					    size_t size, int direction);
+					    size_t size, enum dma_data_direction direction);
 	int		(*pci_map_sg)(struct pci_dev *hwdev, struct scatterlist *sg,
-				      int nents, int direction);
+				      int nents, enum dma_data_direction direction);
 	void		(*pci_unmap_sg)(struct pci_dev *hwdev, struct scatterlist *sg,
-					int nents, int direction);
+					int nents, enum dma_data_direction direction);
 	int		(*pci_dma_supported)(struct pci_dev *hwdev, u64 mask);
 	int		(*pci_dac_dma_supported)(struct pci_dev *hwdev, u64 mask);
 };
@@ -92,25 +92,29 @@
 static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
 					size_t size, int direction)
 {
-	return pci_dma_ops.pci_map_single(hwdev, ptr, size, direction);
+	return pci_dma_ops.pci_map_single(hwdev, ptr, size,
+			(enum dma_data_direction)direction);
 }

 static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
 				    size_t size, int direction)
 {
-	pci_dma_ops.pci_unmap_single(hwdev, dma_addr, size, direction);
+	pci_dma_ops.pci_unmap_single(hwdev, dma_addr, size,
+			(enum dma_data_direction)direction);
 }

 static inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
 			     int nents, int direction)
 {
-	return pci_dma_ops.pci_map_sg(hwdev, sg, nents, direction);
+	return pci_dma_ops.pci_map_sg(hwdev, sg, nents,
+			(enum dma_data_direction)direction);
 }

 static inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
 				int nents, int direction)
 {
-	pci_dma_ops.pci_unmap_sg(hwdev, sg, nents, direction);
+	pci_dma_ops.pci_unmap_sg(hwdev, sg, nents,
+			(enum dma_data_direction)direction);
 }

 static inline void pci_dma_sync_single_for_cpu(struct pci_dev *hwdev,



More information about the Linuxppc64-dev mailing list