[PARISC] Add CONFIG_HPPA_IOREMAP to conditionally enable ioremap
Helge Deller [Tue, 7 Mar 2006 21:12:13 +0000 (14:12 -0700)]
Instead of making it a #define in asm/io.h, allow user to select
to turn on IOREMAP from the config menu.

Signed-off-by: Helge Deller <deller@parisc-linux.org>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>

arch/parisc/Kconfig
arch/parisc/mm/ioremap.c
include/asm-parisc/io.h

index 6b3c509..fc5755d 100644 (file)
@@ -138,6 +138,17 @@ config 64BIT
          enable this option otherwise. The 64bit kernel is significantly bigger
          and slower than the 32bit one.
 
+config HPPA_IOREMAP
+       bool "Enable IOREMAP functionality (EXPERIMENTAL)"
+       depends on EXPERIMENTAL
+       default n
+       help
+         Enable this option if you want to enable real IOREMAPPING on PA-RISC.
+         Currently we just "simulate" I/O remapping, and enabling this option
+         will just crash your machine.
+
+         Say N here, unless you are a real PA-RISC Linux kernel hacker.
+
 config SMP
        bool "Symmetric multi-processing support"
        ---help---
index edd9a95..0287721 100644 (file)
@@ -72,7 +72,7 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
        return 0;
 }
 
-#if USE_HPPA_IOREMAP
+#ifdef CONFIG_HPPA_IOREMAP
 static int 
 remap_area_pages(unsigned long address, unsigned long phys_addr,
                 unsigned long size, unsigned long flags)
@@ -114,7 +114,7 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,
 
        return error;
 }
-#endif /* USE_HPPA_IOREMAP */
+#endif /* CONFIG_HPPA_IOREMAP */
 
 #ifdef CONFIG_DEBUG_IOREMAP
 static unsigned long last = 0;
@@ -154,8 +154,7 @@ EXPORT_SYMBOL(__raw_bad_addr);
  */
 void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
 {
-#if !(USE_HPPA_IOREMAP)
-
+#if !defined(CONFIG_HPPA_IOREMAP)
        unsigned long end = phys_addr + size - 1;
        /* Support EISA addresses */
        if ((phys_addr >= 0x00080000 && end < 0x000fffff)
@@ -222,10 +221,10 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
 
 void iounmap(void __iomem *addr)
 {
-#if !(USE_HPPA_IOREMAP)
-       return;
-#else
+#ifdef CONFIG_HPPA_IOREMAP
        if (addr > high_memory)
                return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
+#else
+       return;
 #endif
 }
index be0c723..2fb2532 100644 (file)
@@ -26,11 +26,7 @@ extern unsigned long parisc_vmerge_max_size;
  */
 
 #ifdef CONFIG_DEBUG_IOREMAP
-#ifdef CONFIG_64BIT
-#define NYBBLE_SHIFT 60
-#else
-#define NYBBLE_SHIFT 28
-#endif
+#define NYBBLE_SHIFT (BITS_PER_LONG - 4)
 extern void gsc_bad_addr(unsigned long addr);
 extern void __raw_bad_addr(const volatile void __iomem *addr);
 #define gsc_check_addr(addr)                                   \
@@ -181,13 +177,11 @@ extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
 extern void iounmap(void __iomem *addr);
 
 /*
- * USE_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
+ * CONFIG_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
  * functionality.  It's currently disabled because it may not work on some
  * machines.
  */
-#define USE_HPPA_IOREMAP 0
-
-#if USE_HPPA_IOREMAP
+#ifdef CONFIG_HPPA_IOREMAP
 static inline unsigned char __raw_readb(const volatile void __iomem *addr)
 {
        return (*(volatile unsigned char __force *) (addr));
@@ -221,7 +215,7 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
 {
        *(volatile unsigned long long __force *) addr = b;
 }
-#else /* !USE_HPPA_IOREMAP */
+#else /* !CONFIG_HPPA_IOREMAP */
 static inline unsigned char __raw_readb(const volatile void __iomem *addr)
 {
        __raw_check_addr(addr);
@@ -271,7 +265,7 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
 
        gsc_writeq(b, (unsigned long) addr);
 }
-#endif /* !USE_HPPA_IOREMAP */
+#endif /* !CONFIG_HPPA_IOREMAP */
 
 /* readb can never be const, so use __fswab instead of le*_to_cpu */
 #define readb(addr) __raw_readb(addr)