提交 b8ce0aad 编写于 作者: H Helge Deller 提交者: Kyle McMartin

[PARISC] Add CONFIG_HPPA_IOREMAP to conditionally enable ioremap

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: NHelge Deller <deller@parisc-linux.org>
Signed-off-by: NKyle McMartin <kyle@parisc-linux.org>
上级 b31059f7
......@@ -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---
......
......@@ -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
}
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册