Forward port of ioremap.patch to x86 tree.
Shared code across i386 and x86_64 are in shared files ioremap.c and io.h.

Signed-off-by: Venkatesh Pallipadi <[EMAIL PROTECTED]>
Signed-off-by: Suresh Siddha <[EMAIL PROTECTED]>
Index: linux-2.6.git/arch/x86/mm/ioremap_64.c
===================================================================
--- linux-2.6.git.orig/arch/x86/mm/ioremap_64.c 2008-01-08 05:12:14.000000000 
-0800
+++ linux-2.6.git/arch/x86/mm/ioremap_64.c      2008-01-08 05:15:56.000000000 
-0800
@@ -127,7 +127,7 @@
 EXPORT_SYMBOL(__ioremap);
 
 /**
- * ioremap_nocache     -   map bus memory into CPU space
+ * ioremap_nocache     -   map bus memory into CPU space uncached
  * @offset:    bus address of the memory
  * @size:      size of the resource to map
  *
@@ -154,6 +154,7 @@
 }
 EXPORT_SYMBOL(ioremap_nocache);
 
+
 /**
  * iounmap - Free a IO remapping
  * @addr: virtual address from ioremap_*
Index: linux-2.6.git/include/asm-x86/io_64.h
===================================================================
--- linux-2.6.git.orig/include/asm-x86/io_64.h  2008-01-08 03:41:30.000000000 
-0800
+++ linux-2.6.git/include/asm-x86/io_64.h       2008-01-08 05:15:56.000000000 
-0800
@@ -165,7 +165,7 @@
  * it's useful if some control registers are in such an area and write 
combining
  * or read caching is not desirable:
  */
-extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long 
size);
+extern void __iomem * ioremap_nocache(unsigned long offset, unsigned long 
size);
 extern void iounmap(volatile void __iomem *addr);
 extern void __iomem *fix_ioremap(unsigned idx, unsigned long phys);
 
Index: linux-2.6.git/include/asm-generic/iomap.h
===================================================================
--- linux-2.6.git.orig/include/asm-generic/iomap.h      2008-01-08 
03:31:37.000000000 -0800
+++ linux-2.6.git/include/asm-generic/iomap.h   2008-01-08 05:15:56.000000000 
-0800
@@ -65,4 +65,8 @@
 extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long 
max);
 extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
 
+#ifndef ioremap_wc
+#define ioremap_wc ioremap_nocache
+#endif
+
 #endif
Index: linux-2.6.git/arch/x86/mm/Makefile_32
===================================================================
--- linux-2.6.git.orig/arch/x86/mm/Makefile_32  2008-01-08 04:43:09.000000000 
-0800
+++ linux-2.6.git/arch/x86/mm/Makefile_32       2008-01-08 05:16:50.000000000 
-0800
@@ -2,7 +2,7 @@
 # Makefile for the linux i386-specific parts of the memory manager.
 #
 
-obj-y  := init_32.o pgtable_32.o fault_32.o ioremap_32.o extable.o 
pageattr_32.o mmap.o pat.o
+obj-y  := init_32.o pgtable_32.o fault_32.o ioremap_32.o extable.o 
pageattr_32.o mmap.o pat.o ioremap.o
 
 obj-$(CONFIG_NUMA) += discontig_32.o
 obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
Index: linux-2.6.git/arch/x86/mm/Makefile_64
===================================================================
--- linux-2.6.git.orig/arch/x86/mm/Makefile_64  2008-01-08 04:32:05.000000000 
-0800
+++ linux-2.6.git/arch/x86/mm/Makefile_64       2008-01-08 05:16:32.000000000 
-0800
@@ -2,7 +2,7 @@
 # Makefile for the linux x86_64-specific parts of the memory manager.
 #
 
-obj-y   := init_64.o fault_64.o ioremap_64.o extable.o pageattr_64.o mmap.o 
pat.o
+obj-y   := init_64.o fault_64.o ioremap_64.o extable.o pageattr_64.o mmap.o 
pat.o ioremap.o
 obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
 obj-$(CONFIG_NUMA) += numa_64.o
 obj-$(CONFIG_K8_NUMA) += k8topology_64.o
Index: linux-2.6.git/arch/x86/mm/ioremap.c
===================================================================
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.git/arch/x86/mm/ioremap.c 2008-01-08 05:15:56.000000000 -0800
@@ -0,0 +1,31 @@
+#include <linux/module.h>
+
+#include <asm/io.h>
+#include <asm/pgtable.h>
+#include <asm/processor.h>
+
+/**
+ * ioremap_wc    -   map bus memory into CPU space write combined
+ * @offset:    bus address of the memory
+ * @size:      size of the resource to map
+ *
+ * ioremap_wc performs a platform specific sequence of operations to
+ * make bus memory CPU accessible via the readb/readw/readl/writeb/
+ * writew/writel functions and the other mmio helpers. The returned
+ * address is not guaranteed to be usable directly as a virtual
+ * address.
+ *
+ * This version of ioremap ensures that the memory is marked write combining.
+ * Write combining allows faster writes to some hardware devices.
+ * See also iounmap_nocache for more details.
+ *
+ * Must be freed with iounmap.
+ */
+void __iomem *ioremap_wc(unsigned long phys_addr, unsigned long size)
+{
+       if (pat_wc_enabled)
+               return __ioremap(phys_addr, size, _PAGE_WC);
+       else
+               return ioremap_nocache(phys_addr, size);
+}
+EXPORT_SYMBOL(ioremap_wc);
Index: linux-2.6.git/include/asm-x86/io.h
===================================================================
--- linux-2.6.git.orig/include/asm-x86/io.h     2008-01-08 03:31:38.000000000 
-0800
+++ linux-2.6.git/include/asm-x86/io.h  2008-01-08 05:15:56.000000000 -0800
@@ -1,5 +1,14 @@
+#ifndef _ASM_X86_IO_H
+#define _ASM_X86_IO_H
+
+#define ioremap_wc ioremap_wc
+
 #ifdef CONFIG_X86_32
 # include "io_32.h"
 #else
 # include "io_64.h"
 #endif
+
+extern void __iomem * ioremap_wc(unsigned long offset, unsigned long size);
+
+#endif

-- 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to