diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-alpha/io.h | 11 | ||||
| -rw-r--r-- | include/asm-arm/io.h | 11 | ||||
| -rw-r--r-- | include/asm-arm26/io.h | 11 | ||||
| -rw-r--r-- | include/asm-cris/io.h | 11 | ||||
| -rw-r--r-- | include/asm-frv/io.h | 12 | ||||
| -rw-r--r-- | include/asm-h8300/io.h | 11 | ||||
| -rw-r--r-- | include/asm-i386/io.h | 11 | ||||
| -rw-r--r-- | include/asm-ia64/uaccess.h | 36 | ||||
| -rw-r--r-- | include/asm-m32r/io.h | 11 | ||||
| -rw-r--r-- | include/asm-m68k/io.h | 14 | ||||
| -rw-r--r-- | include/asm-m68knommu/io.h | 11 | ||||
| -rw-r--r-- | include/asm-mips/io.h | 11 | ||||
| -rw-r--r-- | include/asm-parisc/io.h | 11 | ||||
| -rw-r--r-- | include/asm-ppc/io.h | 11 | ||||
| -rw-r--r-- | include/asm-ppc64/io.h | 11 | ||||
| -rw-r--r-- | include/asm-s390/io.h | 11 | ||||
| -rw-r--r-- | include/asm-sparc/io.h | 13 | ||||
| -rw-r--r-- | include/asm-sparc64/io.h | 11 | ||||
| -rw-r--r-- | include/asm-um/io.h | 11 | ||||
| -rw-r--r-- | include/asm-v850/io.h | 11 | ||||
| -rw-r--r-- | include/asm-x86_64/io.h | 11 | ||||
| -rw-r--r-- | include/linux/page-flags.h | 6 |
22 files changed, 267 insertions, 1 deletions
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h index 68907d940af1..871dd7ad909d 100644 --- a/include/asm-alpha/io.h +++ b/include/asm-alpha/io.h @@ -666,6 +666,17 @@ isa_memcpy_toio(unsigned long offset, const void *src, long n) #define writeq writeq #define readq readq +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* __ALPHA_IO_H */ diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h index 4fdff0484a32..69bc7a3e8160 100644 --- a/include/asm-arm/io.h +++ b/include/asm-arm/io.h @@ -271,5 +271,16 @@ extern void __iounmap(void __iomem *addr); #define BIOVEC_MERGEABLE(vec1, vec2) \ ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2))) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* __ASM_ARM_IO_H */ diff --git a/include/asm-arm26/io.h b/include/asm-arm26/io.h index bc20793f9f4f..02f94d88a124 100644 --- a/include/asm-arm26/io.h +++ b/include/asm-arm26/io.h @@ -420,5 +420,16 @@ extern void consistent_sync(void *vaddr, size_t size, int rw); #define BIOVEC_MERGEABLE(vec1, vec2) \ ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2))) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* __ASM_ARM_IO_H */ diff --git a/include/asm-cris/io.h b/include/asm-cris/io.h index b7222312be27..1d2b51701e8d 100644 --- a/include/asm-cris/io.h +++ b/include/asm-cris/io.h @@ -86,4 +86,15 @@ extern void iounmap(void *addr); #define outsw(x,y,z) #define outsl(x,y,z) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif diff --git a/include/asm-frv/io.h b/include/asm-frv/io.h index e5812fbd35aa..48829f727242 100644 --- a/include/asm-frv/io.h +++ b/include/asm-frv/io.h @@ -273,6 +273,18 @@ static inline void flush_write_buffers(void) __asm__ __volatile__ ("membar" : : :"memory"); } + +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* _ASM_IO_H */ diff --git a/include/asm-h8300/io.h b/include/asm-h8300/io.h index 57574c8aefa4..1773e373e9c6 100644 --- a/include/asm-h8300/io.h +++ b/include/asm-h8300/io.h @@ -317,6 +317,17 @@ static __inline__ void ctrl_outl(unsigned long b, unsigned long addr) #define virt_to_bus virt_to_phys #define bus_to_virt phys_to_virt +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* _H8300_IO_H */ diff --git a/include/asm-i386/io.h b/include/asm-i386/io.h index 479e976ed86c..7babb97a02eb 100644 --- a/include/asm-i386/io.h +++ b/include/asm-i386/io.h @@ -49,6 +49,17 @@ #include <linux/vmalloc.h> +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + /** * virt_to_phys - map virtual addresses to physical * @address: address to remap diff --git a/include/asm-ia64/uaccess.h b/include/asm-ia64/uaccess.h index 1ffc804e0f16..d8563cd3adf4 100644 --- a/include/asm-ia64/uaccess.h +++ b/include/asm-ia64/uaccess.h @@ -35,6 +35,8 @@ #include <linux/compiler.h> #include <linux/errno.h> #include <linux/sched.h> +#include <linux/page-flags.h> +#include <linux/mm.h> #include <asm/intrinsics.h> #include <asm/pgtable.h> @@ -367,4 +369,38 @@ ia64_done_with_exception (struct pt_regs *regs) return 0; } +#define ARCH_HAS_TRANSLATE_MEM_PTR 1 +static __inline__ char * +xlate_dev_mem_ptr (unsigned long p) +{ + struct page *page; + char * ptr; + + page = pfn_to_page(p >> PAGE_SHIFT); + if (PageUncached(page)) + ptr = (char *)p + __IA64_UNCACHED_OFFSET; + else + ptr = __va(p); + + return ptr; +} + +/* + * Convert a virtual cached kernel memory pointer to an uncached pointer + */ +static __inline__ char * +xlate_dev_kmem_ptr (char * p) +{ + struct page *page; + char * ptr; + + page = virt_to_page((unsigned long)p >> PAGE_SHIFT); + if (PageUncached(page)) + ptr = (char *)__pa(p) + __IA64_UNCACHED_OFFSET; + else + ptr = p; + + return ptr; +} + #endif /* _ASM_IA64_UACCESS_H */ diff --git a/include/asm-m32r/io.h b/include/asm-m32r/io.h index a5d3abee0ef4..8e9e481e6996 100644 --- a/include/asm-m32r/io.h +++ b/include/asm-m32r/io.h @@ -216,6 +216,17 @@ memcpy_toio(volatile void __iomem *dst, const void *src, int count) memcpy((void __force *) dst, src, count); } +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* _ASM_M32R_IO_H */ diff --git a/include/asm-m68k/io.h b/include/asm-m68k/io.h index c963b138a142..6bb8b0d8f99d 100644 --- a/include/asm-m68k/io.h +++ b/include/asm-m68k/io.h @@ -359,4 +359,18 @@ extern void dma_cache_inv(unsigned long start, unsigned long size); #endif #endif /* __KERNEL__ */ + +#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 + +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* _IO_H */ diff --git a/include/asm-m68knommu/io.h b/include/asm-m68knommu/io.h index e14f03e3ac1e..30fade4149b8 100644 --- a/include/asm-m68knommu/io.h +++ b/include/asm-m68knommu/io.h @@ -187,6 +187,17 @@ extern void iounmap(void *addr); #define virt_to_bus virt_to_phys #define bus_to_virt phys_to_virt +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* _M68KNOMMU_IO_H */ diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index 8e5ac32ae857..039845f2e6b0 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h @@ -616,4 +616,15 @@ extern void (*_dma_cache_inv)(unsigned long start, unsigned long size); #define csr_out32(v,a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST) = (v)) #define csr_in32(a) (*(volatile u32 *)((unsigned long)(a) + __CSR_32_ADJUST)) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* _ASM_IO_H */ diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h index c137a955c5ef..b9bb5946ecc9 100644 --- a/include/asm-parisc/io.h +++ b/include/asm-parisc/io.h @@ -404,4 +404,15 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); #include <asm-generic/iomap.h> +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h index e0c38f4b90f0..7eb7cf6360bd 100644 --- a/include/asm-ppc/io.h +++ b/include/asm-ppc/io.h @@ -552,4 +552,15 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *); #include <asm/mpc8260_pci9.h> #endif +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ diff --git a/include/asm-ppc64/io.h b/include/asm-ppc64/io.h index 7a1194f606be..aba1dfa388ba 100644 --- a/include/asm-ppc64/io.h +++ b/include/asm-ppc64/io.h @@ -442,6 +442,17 @@ out: extern int check_legacy_ioport(unsigned long base_port); +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif /* _PPC64_IO_H */ diff --git a/include/asm-s390/io.h b/include/asm-s390/io.h index 60342a587a3c..8188fdc9884f 100644 --- a/include/asm-s390/io.h +++ b/include/asm-s390/io.h @@ -107,6 +107,17 @@ extern void iounmap(void *addr); #define mmiowb() +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif diff --git a/include/asm-sparc/io.h b/include/asm-sparc/io.h index f98570f54b53..a42df208d590 100644 --- a/include/asm-sparc/io.h +++ b/include/asm-sparc/io.h @@ -274,4 +274,17 @@ extern void sbus_iounmap(volatile void __iomem *vaddr, unsigned long size); #endif +#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 + +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* !(__SPARC_IO_H) */ diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index 6661a23b6883..afdcea90707a 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h @@ -485,6 +485,17 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *); #define dma_cache_wback(_start,_size) do { } while (0) #define dma_cache_wback_inv(_start,_size) do { } while (0) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif #endif /* !(__SPARC64_IO_H) */ diff --git a/include/asm-um/io.h b/include/asm-um/io.h index 62d6f2423ea6..90674056dcef 100644 --- a/include/asm-um/io.h +++ b/include/asm-um/io.h @@ -22,4 +22,15 @@ static inline void * phys_to_virt(unsigned long address) return __va(address); } +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif diff --git a/include/asm-v850/io.h b/include/asm-v850/io.h index ad9d60703b6f..bb5efd1b4b7d 100644 --- a/include/asm-v850/io.h +++ b/include/asm-v850/io.h @@ -119,4 +119,15 @@ outsl (unsigned long port, const void *src, unsigned long count) #define memcpy_fromio(dst, src, len) memcpy (dst, (void *)src, len) #define memcpy_toio(dst, src, len) memcpy ((void *)dst, src, len) +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __V850_IO_H__ */ diff --git a/include/asm-x86_64/io.h b/include/asm-x86_64/io.h index 734db492e889..cc2bdb5da086 100644 --- a/include/asm-x86_64/io.h +++ b/include/asm-x86_64/io.h @@ -329,6 +329,17 @@ out: extern int iommu_bio_merge; #define BIO_VMERGE_BOUNDARY iommu_bio_merge +/* + * Convert a physical pointer to a virtual kernel pointer for /dev/mem + * access + */ +#define xlate_dev_mem_ptr(p) __va(p) + +/* + * Convert a virtual cached pointer to an uncached pointer + */ +#define xlate_dev_kmem_ptr(p) p + #endif /* __KERNEL__ */ #endif diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6ab9cc46640f..f257c4c0d706 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -75,7 +75,7 @@ #define PG_mappedtodisk 17 /* Has blocks allocated on-disk */ #define PG_reclaim 18 /* To be reclaimed asap */ #define PG_nosave_free 19 /* Free, should not be written */ - +#define PG_uncached 20 /* Page has been mapped as uncached */ /* * Global page accounting. One instance per CPU. Only unsigned longs are @@ -301,6 +301,10 @@ extern void __mod_page_state(unsigned offset, unsigned long delta); #define PageSwapCache(page) 0 #endif +#define PageUncached(page) test_bit(PG_uncached, &(page)->flags) +#define SetPageUncached(page) set_bit(PG_uncached, &(page)->flags) +#define ClearPageUncached(page) clear_bit(PG_uncached, &(page)->flags) + struct page; /* forward declaration */ int test_clear_page_dirty(struct page *page); |
