io_remap_pfn_range():
  add io_remap_pfn_range() for all arches;
  eliminate the <iospace> parameter from sparc/sparc64;
  add MK_IOSPACE_PFN(), GET_IOSPACE(), and GET_PFN()
        for all arches but primarily for sparc32/64's extended IO space,
  sparc: kill the hack of using low bit of <offset> to mean
        write_combine or set side-effect (_PAGE_E) bit;
  future: convert remaining callers of io_remap_page_range() to
        io_remap_pfn_range() and deprecate io_remap_page_range();

 arch/sparc/kernel/sparc_ksyms.c     |    1 
 arch/sparc/mm/generic.c             |   34 ++++++++++++++++++++++++
 arch/sparc64/kernel/pci.c           |   15 +++++-----
 arch/sparc64/kernel/sparc64_ksyms.c |    6 +++-
 arch/sparc64/mm/generic.c           |   50 ++++++++++++++++++++++++++++--------
 drivers/char/drm/drm_vm.c           |    6 ++--
 drivers/sbus/char/vfc_dev.c         |    6 ++--
 drivers/video/fbmem.c               |    6 ++--
 drivers/video/sbuslib.c             |    8 +++--
 include/asm-alpha/pgtable.h         |    7 +++++
 include/asm-arm/pgtable.h           |    7 +++++
 include/asm-arm26/pgtable.h         |    7 +++++
 include/asm-frv/pgtable.h           |    7 +++++
 include/asm-h8300/pgtable.h         |    7 +++++
 include/asm-i386/pgtable.h          |    7 +++++
 include/asm-ia64/pgtable.h          |    7 +++++
 include/asm-m32r/pgtable.h          |    7 +++++
 include/asm-m68k/pgtable.h          |    7 +++++
 include/asm-m68knommu/pgtable.h     |    7 +++++
 include/asm-mips/pgtable.h          |   18 ++++++++++++
 include/asm-parisc/pgtable.h        |    7 +++++
 include/asm-ppc/pgtable.h           |   16 +++++++++++
 include/asm-ppc64/pgtable.h         |    7 +++++
 include/asm-sh/pgtable.h            |    7 +++++
 include/asm-sh64/pgtable.h          |    8 +++++
 include/asm-sparc/pgtable.h         |   14 +++++++++-
 include/asm-sparc64/pgtable.h       |   12 ++++++++
 include/asm-x86_64/pgtable.h        |    7 +++++
 28 files changed, 266 insertions(+), 32 deletions(-)

diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/arch/sparc/kernel/sparc_ksyms.c 
linux-2611-bk3-pfn/arch/sparc/kernel/sparc_ksyms.c
--- linux-2611-bk3-pv/arch/sparc/kernel/sparc_ksyms.c   2005-03-01 
23:37:48.000000000 -0800
+++ linux-2611-bk3-pfn/arch/sparc/kernel/sparc_ksyms.c  2005-03-07 
11:04:59.000000000 -0800
@@ -164,6 +164,7 @@ EXPORT_SYMBOL(get_auxio);
 #endif
 EXPORT_SYMBOL(request_fast_irq);
 EXPORT_SYMBOL(io_remap_page_range);
+EXPORT_SYMBOL(io_remap_pfn_range);
   /* P3: iounit_xxx may be needed, sun4d users */
 /* EXPORT_SYMBOL(iounit_map_dma_init); */
 /* EXPORT_SYMBOL(iounit_map_dma_page); */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/arch/sparc/mm/generic.c 
linux-2611-bk3-pfn/arch/sparc/mm/generic.c
--- linux-2611-bk3-pv/arch/sparc/mm/generic.c   2005-03-07 11:02:16.000000000 
-0800
+++ linux-2611-bk3-pfn/arch/sparc/mm/generic.c  2005-03-07 13:23:18.000000000 
-0800
@@ -118,3 +118,37 @@ int io_remap_page_range(struct vm_area_s
        flush_tlb_range(vma, beg, end);
        return error;
 }
+
+int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
+                       unsigned long pfn, unsigned long size, pgprot_t prot)
+{
+       int error = 0;
+       pgd_t * dir;
+       unsigned long beg = from;
+       unsigned long end = from + size;
+       struct mm_struct *mm = vma->vm_mm;
+       int space = GET_IOSPACE(pfn);
+       unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
+
+       prot = __pgprot(pg_iobits);
+       offset -= from;
+       dir = pgd_offset(mm, from);
+       flush_cache_range(vma, beg, end);
+
+       spin_lock(&mm->page_table_lock);
+       while (from < end) {
+               pmd_t *pmd = pmd_alloc(current->mm, dir, from);
+               error = -ENOMEM;
+               if (!pmd)
+                       break;
+               error = io_remap_pmd_range(mm, pmd, from, end - from, offset + 
from, prot, space);
+               if (error)
+                       break;
+               from = (from + PGDIR_SIZE) & PGDIR_MASK;
+               dir++;
+       }
+       spin_unlock(&mm->page_table_lock);
+
+       flush_tlb_range(vma, beg, end);
+       return error;
+}
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/arch/sparc64/kernel/pci.c 
linux-2611-bk3-pfn/arch/sparc64/kernel/pci.c
--- linux-2611-bk3-pv/arch/sparc64/kernel/pci.c 2005-03-07 11:02:16.000000000 
-0800
+++ linux-2611-bk3-pfn/arch/sparc64/kernel/pci.c        2005-03-07 
11:04:59.000000000 -0800
@@ -18,6 +18,7 @@
 
 #include <asm/uaccess.h>
 #include <asm/pbm.h>
+#include <asm/pgtable.h>
 #include <asm/irq.h>
 #include <asm/ebus.h>
 #include <asm/isa.h>
@@ -734,12 +735,10 @@ static void __pci_mmap_set_flags(struct 
 static void __pci_mmap_set_pgprot(struct pci_dev *dev, struct vm_area_struct 
*vma,
                                             enum pci_mmap_state mmap_state)
 {
-       /* Our io_remap_page_range takes care of this, do nothing. */
+       /* Our io_remap_page_range/io_remap_pfn_range takes care of this,
+          do nothing. */
 }
 
-extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, 
unsigned long offset,
-                              unsigned long size, pgprot_t prot, int space);
-
 /* Perform the actual remap of the pages for a PCI device mapping, as 
appropriate
  * for this architecture.  The region in the process to map is described by 
vm_start
  * and vm_end members of VMA, the base physical address is found in vm_pgoff.
@@ -761,10 +760,10 @@ int pci_mmap_page_range(struct pci_dev *
        __pci_mmap_set_flags(dev, vma, mmap_state);
        __pci_mmap_set_pgprot(dev, vma, mmap_state);
 
-       ret = io_remap_page_range(vma, vma->vm_start,
-                                 (vma->vm_pgoff << PAGE_SHIFT |
-                                  (write_combine ? 0x1UL : 0x0UL)),
-                                 vma->vm_end - vma->vm_start, 
vma->vm_page_prot, 0);
+       ret = io_remap_pfn_range(vma, vma->vm_start,
+                                vma->vm_pgoff,
+                                vma->vm_end - vma->vm_start,
+                                vma->vm_page_prot);
        if (ret)
                return ret;
 
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/arch/sparc64/kernel/sparc64_ksyms.c 
linux-2611-bk3-pfn/arch/sparc64/kernel/sparc64_ksyms.c
--- linux-2611-bk3-pv/arch/sparc64/kernel/sparc64_ksyms.c       2005-03-01 
23:38:20.000000000 -0800
+++ linux-2611-bk3-pfn/arch/sparc64/kernel/sparc64_ksyms.c      2005-03-07 
11:04:59.000000000 -0800
@@ -87,7 +87,10 @@ extern int svr4_setcontext(svr4_ucontext
 extern int compat_sys_ioctl(unsigned int fd, unsigned int cmd, u32 arg);
 extern int (*handle_mathemu)(struct pt_regs *, struct fpustate *);
 extern long sparc32_open(const char __user * filename, int flags, int mode);
-extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, 
unsigned long offset, unsigned long size, pgprot_t prot, int space);
+extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from,
+       unsigned long offset, unsigned long size, pgprot_t prot, int space);
+extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
+       unsigned long pfn, unsigned long size, pgprot_t prot);
 extern void (*prom_palette)(int);
 
 extern int __ashrdi3(int, int);
@@ -254,6 +257,7 @@ EXPORT_SYMBOL(pci_dma_supported);
 
 /* I/O device mmaping on Sparc64. */
 EXPORT_SYMBOL(io_remap_page_range);
+EXPORT_SYMBOL(io_remap_pfn_range);
 
 /* Solaris/SunOS binary compatibility */
 EXPORT_SYMBOL(_sigpause_common);
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/arch/sparc64/mm/generic.c 
linux-2611-bk3-pfn/arch/sparc64/mm/generic.c
--- linux-2611-bk3-pv/arch/sparc64/mm/generic.c 2005-03-07 11:02:16.000000000 
-0800
+++ linux-2611-bk3-pfn/arch/sparc64/mm/generic.c        2005-03-07 
13:27:06.000000000 -0800
@@ -20,10 +20,6 @@
  *
  * They use a pgprot that sets PAGE_IO and does not check the
  * mem_map table as this is independent of normal memory.
- *
- * As a special hack if the lowest bit of offset is set the
- * side-effect bit will be turned off.  This is used as a
- * performance improvement on FFB/AFB. -DaveM
  */
 static inline void io_remap_pte_range(struct mm_struct *mm, pte_t * pte,
                                      unsigned long address,
@@ -33,6 +29,8 @@ static inline void io_remap_pte_range(st
 {
        unsigned long end;
 
+       /* clear hack bit that was used as a write_combine side-effect flag */
+       offset &= ~0x1UL;
        address &= ~PMD_MASK;
        end = address + size;
        if (end > PMD_SIZE)
@@ -41,22 +39,22 @@ static inline void io_remap_pte_range(st
                pte_t entry;
                unsigned long curend = address + PAGE_SIZE;
                
-               entry = mk_pte_io((offset & ~(0x1UL)), prot, space);
+               entry = mk_pte_io(offset, prot, space);
                if (!(address & 0xffff)) {
                        if (!(address & 0x3fffff) && !(offset & 0x3ffffe) && 
end >= address + 0x400000) {
-                               entry = mk_pte_io((offset & ~(0x1UL)),
+                               entry = mk_pte_io(offset,
                                                  __pgprot(pgprot_val (prot) | 
_PAGE_SZ4MB),
                                                  space);
                                curend = address + 0x400000;
                                offset += 0x400000;
                        } else if (!(address & 0x7ffff) && !(offset & 0x7fffe) 
&& end >= address + 0x80000) {
-                               entry = mk_pte_io((offset & ~(0x1UL)),
+                               entry = mk_pte_io(offset,
                                                  __pgprot(pgprot_val (prot) | 
_PAGE_SZ512K),
                                                  space);
                                curend = address + 0x80000;
                                offset += 0x80000;
                        } else if (!(offset & 0xfffe) && end >= address + 
0x10000) {
-                               entry = mk_pte_io((offset & ~(0x1UL)),
+                               entry = mk_pte_io(offset,
                                                  __pgprot(pgprot_val (prot) | 
_PAGE_SZ64K),
                                                  space);
                                curend = address + 0x10000;
@@ -66,8 +64,6 @@ static inline void io_remap_pte_range(st
                } else
                        offset += PAGE_SIZE;
 
-               if (offset & 0x1UL)
-                       pte_val(entry) &= ~(_PAGE_E);
                do {
                        BUG_ON(!pte_none(*pte));
                        set_pte_at(mm, address, pte, entry);
@@ -150,3 +146,37 @@ int io_remap_page_range(struct vm_area_s
 
        return error;
 }
+
+int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
+               unsigned long pfn, unsigned long size, pgprot_t prot)
+{
+       int error = 0;
+       pgd_t * dir;
+       unsigned long beg = from;
+       unsigned long end = from + size;
+       struct mm_struct *mm = vma->vm_mm;
+       int space = GET_IOSPACE(pfn);
+       unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
+
+       prot = __pgprot(pg_iobits);
+       offset -= from;
+       dir = pgd_offset(mm, from);
+       flush_cache_range(vma, beg, end);
+
+       spin_lock(&mm->page_table_lock);
+       while (from < end) {
+               pud_t *pud = pud_alloc(current->mm, dir, from);
+               error = -ENOMEM;
+               if (!pud)
+                       break;
+               error = io_remap_pud_range(mm, pud, from, end - from, offset + 
from, prot, space);
+               if (error)
+                       break;
+               from = (from + PGDIR_SIZE) & PGDIR_MASK;
+               dir++;
+       }
+       flush_tlb_range(vma, beg, end);
+       spin_unlock(&mm->page_table_lock);
+
+       return error;
+}
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/drivers/char/drm/drm_vm.c 
linux-2611-bk3-pfn/drivers/char/drm/drm_vm.c
--- linux-2611-bk3-pv/drivers/char/drm/drm_vm.c 2005-03-01 23:38:33.000000000 
-0800
+++ linux-2611-bk3-pfn/drivers/char/drm/drm_vm.c        2005-03-07 
11:04:59.000000000 -0800
@@ -625,10 +625,10 @@ int drm_mmap(struct file *filp, struct v
 #endif
                offset = dev->driver->get_reg_ofs(dev);
 #ifdef __sparc__
-               if (io_remap_page_range(DRM_RPR_ARG(vma) vma->vm_start,
-                                       VM_OFFSET(vma) + offset,
+               if (io_remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start,
+                                       (VM_OFFSET(vma) + offset) >> PAGE_SHIFT,
                                        vma->vm_end - vma->vm_start,
-                                       vma->vm_page_prot, 0))
+                                       vma->vm_page_prot))
 #else
                if (remap_pfn_range(DRM_RPR_ARG(vma) vma->vm_start,
                                     (VM_OFFSET(vma) + offset) >> PAGE_SHIFT,
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/drivers/sbus/char/vfc_dev.c 
linux-2611-bk3-pfn/drivers/sbus/char/vfc_dev.c
--- linux-2611-bk3-pv/drivers/sbus/char/vfc_dev.c       2005-03-01 
23:38:10.000000000 -0800
+++ linux-2611-bk3-pfn/drivers/sbus/char/vfc_dev.c      2005-03-07 
11:04:59.000000000 -0800
@@ -626,8 +626,10 @@ static int vfc_mmap(struct file *file, s
        vma->vm_flags |=
                (VM_SHM | VM_LOCKED | VM_IO | VM_MAYREAD | VM_MAYWRITE | 
VM_MAYSHARE);
        map_offset = (unsigned int) (long)dev->phys_regs;
-       ret = io_remap_page_range(vma, vma->vm_start, map_offset, map_size, 
-                                 vma->vm_page_prot, dev->which_io);
+       ret = io_remap_pfn_range(vma, vma->vm_start,
+                                 MK_IOSPACE_PFN(dev->which_io,
+                                       map_offset >> PAGE_SHIFT),
+                                 map_size, vma->vm_page_prot);
 
        if(ret)
                return -EAGAIN;
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/drivers/video/fbmem.c linux-2611-bk3-pfn/drivers/video/fbmem.c
--- linux-2611-bk3-pv/drivers/video/fbmem.c     2005-03-01 23:37:30.000000000 
-0800
+++ linux-2611-bk3-pfn/drivers/video/fbmem.c    2005-03-07 11:04:59.000000000 
-0800
@@ -941,8 +941,8 @@ fb_mmap(struct file *file, struct vm_are
        /* This is an IO map - tell maydump to skip this VMA */
        vma->vm_flags |= VM_IO | VM_RESERVED;
 #if defined(__sparc_v9__)
-       if (io_remap_page_range(vma, vma->vm_start, off,
-                               vma->vm_end - vma->vm_start, vma->vm_page_prot, 
0))
+       if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
+                               vma->vm_end - vma->vm_start, vma->vm_page_prot))
                return -EAGAIN;
 #else
 #if defined(__mc68000__)
@@ -978,7 +978,7 @@ fb_mmap(struct file *file, struct vm_are
 #else
 #warning What do we have to do here??
 #endif
-       if (io_remap_page_range(vma, vma->vm_start, off,
+       if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
                             vma->vm_end - vma->vm_start, vma->vm_page_prot))
                return -EAGAIN;
 #endif /* !__sparc_v9__ */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/drivers/video/sbuslib.c 
linux-2611-bk3-pfn/drivers/video/sbuslib.c
--- linux-2611-bk3-pv/drivers/video/sbuslib.c   2005-03-01 23:37:52.000000000 
-0800
+++ linux-2611-bk3-pfn/drivers/video/sbuslib.c  2005-03-07 11:04:59.000000000 
-0800
@@ -74,10 +74,12 @@ int sbusfb_mmap_helper(struct sbus_mmap_
                }
                if (page + map_size > size)
                        map_size = size - page;
-               r = io_remap_page_range(vma,
+               r = io_remap_pfn_range(vma,
                                        vma->vm_start + page,
-                                       map_offset, map_size,
-                                       vma->vm_page_prot, iospace);
+                                       MK_IOSPACE_PFN(iospace,
+                                               map_offset >> PAGE_SHIFT),
+                                       map_size,
+                                       vma->vm_page_prot);
                if (r)
                        return -EAGAIN;
                page += map_size;
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-alpha/pgtable.h 
linux-2611-bk3-pfn/include/asm-alpha/pgtable.h
--- linux-2611-bk3-pv/include/asm-alpha/pgtable.h       2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-alpha/pgtable.h      2005-03-07 
11:04:59.000000000 -0800
@@ -340,6 +340,13 @@ extern inline pte_t mk_swap_pte(unsigned
        remap_pfn_range(vma, start, pfn, size, prot);           \
 })
 
+#define io_remap_pfn_range(vma, start, pfn, size, prot)        \
+               remap_pfn_range(vma, start, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define pte_ERROR(e) \
        printk("%s:%d: bad pte %016lx.\n", __FILE__, __LINE__, pte_val(e))
 #define pmd_ERROR(e) \
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-arm/pgtable.h 
linux-2611-bk3-pfn/include/asm-arm/pgtable.h
--- linux-2611-bk3-pv/include/asm-arm/pgtable.h 2005-03-07 11:02:18.000000000 
-0800
+++ linux-2611-bk3-pfn/include/asm-arm/pgtable.h        2005-03-07 
11:04:59.000000000 -0800
@@ -419,6 +419,13 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD
 #define io_remap_page_range(vma,from,phys,size,prot) \
                remap_pfn_range(vma, from, (phys) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma,from,phys,size,prot) \
+               remap_pfn_range(vma, from, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define pgtable_cache_init() do { } while (0)
 
 #endif /* !__ASSEMBLY__ */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-arm26/pgtable.h 
linux-2611-bk3-pfn/include/asm-arm26/pgtable.h
--- linux-2611-bk3-pv/include/asm-arm26/pgtable.h       2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-arm26/pgtable.h      2005-03-07 
11:04:59.000000000 -0800
@@ -293,6 +293,13 @@ static inline pte_t mk_pte_phys(unsigned
 #define io_remap_page_range(vma,from,phys,size,prot) \
                remap_pfn_range(vma, from, (phys) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma,from,pfn,size,prot) \
+               remap_pfn_range(vma, from, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* _ASMARM_PGTABLE_H */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-frv/pgtable.h 
linux-2611-bk3-pfn/include/asm-frv/pgtable.h
--- linux-2611-bk3-pv/include/asm-frv/pgtable.h 2005-03-07 11:02:18.000000000 
-0800
+++ linux-2611-bk3-pfn/include/asm-frv/pgtable.h        2005-03-07 
11:04:59.000000000 -0800
@@ -503,6 +503,13 @@ static inline int pte_file(pte_t pte)
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
 #define __HAVE_ARCH_PTEP_GET_AND_CLEAR
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-h8300/pgtable.h 
linux-2611-bk3-pfn/include/asm-h8300/pgtable.h
--- linux-2611-bk3-pv/include/asm-h8300/pgtable.h       2005-03-01 
23:38:07.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-h8300/pgtable.h      2005-03-07 
11:04:59.000000000 -0800
@@ -55,6 +55,13 @@ extern int is_in_rom(unsigned long);
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /*
  * All 32bit addresses are effectively valid for vmalloc...
  * Sort of meaningless for non-VM targets.
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-i386/pgtable.h 
linux-2611-bk3-pfn/include/asm-i386/pgtable.h
--- linux-2611-bk3-pv/include/asm-i386/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-i386/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -405,6 +405,13 @@ extern void noexec_setup(const char *str
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
 #define __HAVE_ARCH_PTEP_GET_AND_CLEAR
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-ia64/pgtable.h 
linux-2611-bk3-pfn/include/asm-ia64/pgtable.h
--- linux-2611-bk3-pv/include/asm-ia64/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-ia64/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -447,6 +447,13 @@ extern void paging_init (void);
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /*
  * ZERO_PAGE is a global shared page that is always zero: used
  * for zero-mapped memory areas etc..
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-m32r/pgtable.h 
linux-2611-bk3-pfn/include/asm-m32r/pgtable.h
--- linux-2611-bk3-pv/include/asm-m32r/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-m32r/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -381,6 +381,13 @@ static inline void pmd_set(pmd_t * pmdp,
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)     \
        remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)        \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
 #define __HAVE_ARCH_PTEP_GET_AND_CLEAR
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-m68k/pgtable.h 
linux-2611-bk3-pfn/include/asm-m68k/pgtable.h
--- linux-2611-bk3-pv/include/asm-m68k/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-m68k/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -144,6 +144,13 @@ static inline void update_mmu_cache(stru
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /* MMU-specific headers */
 
 #ifdef CONFIG_SUN3
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-m68knommu/pgtable.h 
linux-2611-bk3-pfn/include/asm-m68knommu/pgtable.h
--- linux-2611-bk3-pv/include/asm-m68knommu/pgtable.h   2005-03-01 
23:38:10.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-m68knommu/pgtable.h  2005-03-07 
11:04:59.000000000 -0800
@@ -59,6 +59,13 @@ extern int is_in_rom(unsigned long);
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /*
  * All 32bit addresses are effectively valid for vmalloc...
  * Sort of meaningless for non-VM targets.
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-mips/pgtable.h 
linux-2611-bk3-pfn/include/asm-mips/pgtable.h
--- linux-2611-bk3-pv/include/asm-mips/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-mips/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -367,11 +367,27 @@ static inline int io_remap_page_range(st
        phys_t phys_addr_high = fixup_bigphys_addr(paddr, size);
        return remap_pfn_range(vma, vaddr, phys_addr_high >> PAGE_SHIFT, size, 
prot);
 }
+
+static inline int io_remap_pfn_range(struct vm_area_struct *vma,
+               unsigned long vaddr,
+               unsigned long pfn,
+               unsigned long size,
+               pgprot_t prot)
+{
+       phys_t phys_addr_high = fixup_bigphys_addr(pfn << PAGE_SHIFT, size);
+       return remap_pfn_range(vma, vaddr, pfn, size, prot);
+}
 #else
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
-       remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
+               remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
 #endif
 
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #include <asm-generic/pgtable.h>
 
 /*
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-parisc/pgtable.h 
linux-2611-bk3-pfn/include/asm-parisc/pgtable.h
--- linux-2611-bk3-pv/include/asm-parisc/pgtable.h      2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-parisc/pgtable.h     2005-03-07 
11:04:59.000000000 -0800
@@ -501,6 +501,13 @@ static inline void ptep_set_wrprotect(st
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /* We provide our own get_unmapped_area to provide cache coherency */
 
 #define HAVE_ARCH_UNMAPPED_AREA
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-ppc/pgtable.h 
linux-2611-bk3-pfn/include/asm-ppc/pgtable.h
--- linux-2611-bk3-pv/include/asm-ppc/pgtable.h 2005-03-07 11:02:18.000000000 
-0800
+++ linux-2611-bk3-pfn/include/asm-ppc/pgtable.h        2005-03-07 
11:04:59.000000000 -0800
@@ -735,11 +735,27 @@ static inline int io_remap_page_range(st
        phys_addr_t paddr64 = fixup_bigphys_addr(paddr, size);
        return remap_pfn_range(vma, vaddr, paddr64 >> PAGE_SHIFT, size, prot);
 }
+
+static inline int io_remap_pfn_range(struct vm_area_struct *vma,
+                                       unsigned long vaddr,
+                                       unsigned long pfn,
+                                       unsigned long size,
+                                       pgprot_t prot)
+{
+       phys_addr_t paddr64 = fixup_bigphys_addr(pfn << PAGE_SHIFT, size);
+       return remap_pfn_range(vma, vaddr, pfn, size, prot);
+}
 #else
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
 #endif
 
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /*
  * No page table caches to initialise
  */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-ppc64/pgtable.h 
linux-2611-bk3-pfn/include/asm-ppc64/pgtable.h
--- linux-2611-bk3-pv/include/asm-ppc64/pgtable.h       2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-ppc64/pgtable.h      2005-03-07 
11:04:59.000000000 -0800
@@ -518,6 +518,13 @@ extern void update_mmu_cache(struct vm_a
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 void pgtable_cache_init(void);
 
 extern void hpte_init_native(void);
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-sh/pgtable.h 
linux-2611-bk3-pfn/include/asm-sh/pgtable.h
--- linux-2611-bk3-pv/include/asm-sh/pgtable.h  2005-03-07 11:02:18.000000000 
-0800
+++ linux-2611-bk3-pfn/include/asm-sh/pgtable.h 2005-03-07 11:04:59.000000000 
-0800
@@ -279,6 +279,13 @@ typedef pte_t *pte_addr_t;
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 /*
  * No page table caches to initialise
  */
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-sh64/pgtable.h 
linux-2611-bk3-pfn/include/asm-sh64/pgtable.h
--- linux-2611-bk3-pv/include/asm-sh64/pgtable.h        2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-sh64/pgtable.h       2005-03-07 
11:04:59.000000000 -0800
@@ -484,6 +484,14 @@ extern void update_mmu_cache(struct vm_a
 
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
+
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #endif /* !__ASSEMBLY__ */
 
 /*
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-sparc/pgtable.h 
linux-2611-bk3-pfn/include/asm-sparc/pgtable.h
--- linux-2611-bk3-pv/include/asm-sparc/pgtable.h       2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-sparc/pgtable.h      2005-03-07 
11:04:59.000000000 -0800
@@ -454,8 +454,20 @@ extern unsigned long *sparc_valid_addr_b
 #define kern_addr_valid(addr) \
        (test_bit(__pa((unsigned long)(addr))>>20, sparc_valid_addr_bitmap))
 
-extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from, 
unsigned long to,
+extern int io_remap_page_range(struct vm_area_struct *vma,
+                              unsigned long from, unsigned long to,
                               unsigned long size, pgprot_t prot, int space);
+extern int io_remap_pfn_range(struct vm_area_struct *vma,
+                             unsigned long from, unsigned long pfn,
+                             unsigned long size, pgprot_t prot);
+
+/*
+ * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in
+ * its high 4 bits.  These macros/functions put it there or get it from there.
+ */
+#define MK_IOSPACE_PFN(space, pfn)     (pfn | (space << (BITS_PER_LONG - 4)))
+#define GET_IOSPACE(pfn)               (pfn >> (BITS_PER_LONG - 4))
+#define GET_PFN(pfn)                   (pfn & 0x0fffffffUL)
 
 #include <asm-generic/pgtable.h>
 
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-sparc64/pgtable.h 
linux-2611-bk3-pfn/include/asm-sparc64/pgtable.h
--- linux-2611-bk3-pv/include/asm-sparc64/pgtable.h     2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-sparc64/pgtable.h    2005-03-07 
11:08:06.000000000 -0800
@@ -16,6 +16,7 @@
 
 #include <linux/config.h>
 #include <linux/compiler.h>
+#include <asm/types.h>
 #include <asm/spitfire.h>
 #include <asm/asi.h>
 #include <asm/system.h>
@@ -431,6 +432,17 @@ extern unsigned long *sparc64_valid_addr
 extern int io_remap_page_range(struct vm_area_struct *vma, unsigned long from,
                               unsigned long offset,
                               unsigned long size, pgprot_t prot, int space);
+extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
+                              unsigned long pfn,
+                              unsigned long size, pgprot_t prot);
+
+/*
+ * For sparc32&64, the pfn in io_remap_pfn_range() carries <iospace> in
+ * its high 4 bits.  These macros/functions put it there or get it from there.
+ */
+#define MK_IOSPACE_PFN(space, pfn)     (pfn | (space << (BITS_PER_LONG - 4)))
+#define GET_IOSPACE(pfn)               (pfn >> (BITS_PER_LONG - 4))
+#define GET_PFN(pfn)                   (pfn & 0x0fffffffffffffffUL)
 
 #include <asm-generic/pgtable.h>
 
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl 
linux-2611-bk3-pv/include/asm-x86_64/pgtable.h 
linux-2611-bk3-pfn/include/asm-x86_64/pgtable.h
--- linux-2611-bk3-pv/include/asm-x86_64/pgtable.h      2005-03-07 
11:02:18.000000000 -0800
+++ linux-2611-bk3-pfn/include/asm-x86_64/pgtable.h     2005-03-07 
11:04:59.000000000 -0800
@@ -405,6 +405,13 @@ extern int kern_addr_valid(unsigned long
 #define io_remap_page_range(vma, vaddr, paddr, size, prot)             \
                remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
 
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)                \
+               remap_pfn_range(vma, vaddr, pfn, size, prot)
+
+#define MK_IOSPACE_PFN(space, pfn)     (pfn)
+#define GET_IOSPACE(pfn)               0
+#define GET_PFN(pfn)                   (pfn)
+
 #define HAVE_ARCH_UNMAPPED_AREA
 
 #define pgtable_cache_init()   do { } while (0)


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

Reply via email to