Commit 93ed07a2 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'asm-generic-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic

Pull asm-generic updates from Arnd Bergmann:
 "This contains a series from Linus Walleij to unify the linux/io.h
  interface by making the ia64, alpha, parisc and sparc include
  asm-generic/io.h.

  All functions provided by the generic header are now available to all
  drivers, but the architectures can still override this.

  For the moment, mips and sh still don't include asm-generic/io.h but
  provide a full set of functions themselves.

  There are also a few minor cleanups unrelated to this"

* tag 'asm-generic-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
  alpha: add full ioread64/iowrite64 implementation
  parisc: Drop homebrewn io[read|write]64_[lo_hi|hi_lo]
  parisc: hide ioread64 declaration on 32-bit
  ia64: export memory_add_physaddr_to_nid to fix cxl build error
  asm-generic: Remove empty #ifdef SA_RESTORER
  parisc: Use the generic IO helpers
  parisc: Remove 64bit access on 32bit machines
  sparc: Fix the generic IO helpers
  alpha: Use generic <asm-generic/io.h>
parents 18fd0497 e19d4ebc
...@@ -384,7 +384,7 @@ struct el_apecs_procdata ...@@ -384,7 +384,7 @@ struct el_apecs_procdata
} \ } \
} while (0) } while (0)
__EXTERN_INLINE unsigned int apecs_ioread8(const void __iomem *xaddr) __EXTERN_INLINE u8 apecs_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -420,7 +420,7 @@ __EXTERN_INLINE void apecs_iowrite8(u8 b, void __iomem *xaddr) ...@@ -420,7 +420,7 @@ __EXTERN_INLINE void apecs_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int apecs_ioread16(const void __iomem *xaddr) __EXTERN_INLINE u16 apecs_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -456,7 +456,7 @@ __EXTERN_INLINE void apecs_iowrite16(u16 b, void __iomem *xaddr) ...@@ -456,7 +456,7 @@ __EXTERN_INLINE void apecs_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int apecs_ioread32(const void __iomem *xaddr) __EXTERN_INLINE u32 apecs_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < APECS_DENSE_MEM) if (addr < APECS_DENSE_MEM)
...@@ -472,6 +472,22 @@ __EXTERN_INLINE void apecs_iowrite32(u32 b, void __iomem *xaddr) ...@@ -472,6 +472,22 @@ __EXTERN_INLINE void apecs_iowrite32(u32 b, void __iomem *xaddr)
*(vuip)addr = b; *(vuip)addr = b;
} }
__EXTERN_INLINE u64 apecs_ioread64(const void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < APECS_DENSE_MEM)
addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18;
return *(vulp)addr;
}
__EXTERN_INLINE void apecs_iowrite64(u64 b, void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < APECS_DENSE_MEM)
addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18;
*(vulp)addr = b;
}
__EXTERN_INLINE void __iomem *apecs_ioportmap(unsigned long addr) __EXTERN_INLINE void __iomem *apecs_ioportmap(unsigned long addr)
{ {
return (void __iomem *)(addr + APECS_IO); return (void __iomem *)(addr + APECS_IO);
......
...@@ -342,7 +342,7 @@ struct el_CIA_sysdata_mcheck { ...@@ -342,7 +342,7 @@ struct el_CIA_sysdata_mcheck {
#define vuip volatile unsigned int __force * #define vuip volatile unsigned int __force *
#define vulp volatile unsigned long __force * #define vulp volatile unsigned long __force *
__EXTERN_INLINE unsigned int cia_ioread8(const void __iomem *xaddr) __EXTERN_INLINE u8 cia_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -374,7 +374,7 @@ __EXTERN_INLINE void cia_iowrite8(u8 b, void __iomem *xaddr) ...@@ -374,7 +374,7 @@ __EXTERN_INLINE void cia_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int cia_ioread16(const void __iomem *xaddr) __EXTERN_INLINE u16 cia_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -404,7 +404,7 @@ __EXTERN_INLINE void cia_iowrite16(u16 b, void __iomem *xaddr) ...@@ -404,7 +404,7 @@ __EXTERN_INLINE void cia_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int cia_ioread32(const void __iomem *xaddr) __EXTERN_INLINE u32 cia_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < CIA_DENSE_MEM) if (addr < CIA_DENSE_MEM)
...@@ -420,6 +420,22 @@ __EXTERN_INLINE void cia_iowrite32(u32 b, void __iomem *xaddr) ...@@ -420,6 +420,22 @@ __EXTERN_INLINE void cia_iowrite32(u32 b, void __iomem *xaddr)
*(vuip)addr = b; *(vuip)addr = b;
} }
__EXTERN_INLINE u64 cia_ioread64(const void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < CIA_DENSE_MEM)
addr = ((addr - CIA_IO) << 5) + CIA_IO + 0x18;
return *(vulp)addr;
}
__EXTERN_INLINE void cia_iowrite64(u64 b, void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < CIA_DENSE_MEM)
addr = ((addr - CIA_IO) << 5) + CIA_IO + 0x18;
*(vulp)addr = b;
}
__EXTERN_INLINE void __iomem *cia_ioportmap(unsigned long addr) __EXTERN_INLINE void __iomem *cia_ioportmap(unsigned long addr)
{ {
return (void __iomem *)(addr + CIA_IO); return (void __iomem *)(addr + CIA_IO);
......
...@@ -230,7 +230,7 @@ union el_lca { ...@@ -230,7 +230,7 @@ union el_lca {
} while (0) } while (0)
__EXTERN_INLINE unsigned int lca_ioread8(const void __iomem *xaddr) __EXTERN_INLINE u8 lca_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -266,7 +266,7 @@ __EXTERN_INLINE void lca_iowrite8(u8 b, void __iomem *xaddr) ...@@ -266,7 +266,7 @@ __EXTERN_INLINE void lca_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int lca_ioread16(const void __iomem *xaddr) __EXTERN_INLINE u16 lca_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
unsigned long result, base_and_type; unsigned long result, base_and_type;
...@@ -302,7 +302,7 @@ __EXTERN_INLINE void lca_iowrite16(u16 b, void __iomem *xaddr) ...@@ -302,7 +302,7 @@ __EXTERN_INLINE void lca_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + base_and_type) = w; *(vuip) ((addr << 5) + base_and_type) = w;
} }
__EXTERN_INLINE unsigned int lca_ioread32(const void __iomem *xaddr) __EXTERN_INLINE u32 lca_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
if (addr < LCA_DENSE_MEM) if (addr < LCA_DENSE_MEM)
...@@ -318,6 +318,22 @@ __EXTERN_INLINE void lca_iowrite32(u32 b, void __iomem *xaddr) ...@@ -318,6 +318,22 @@ __EXTERN_INLINE void lca_iowrite32(u32 b, void __iomem *xaddr)
*(vuip)addr = b; *(vuip)addr = b;
} }
__EXTERN_INLINE u64 lca_ioread64(const void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < LCA_DENSE_MEM)
addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18;
return *(vulp)addr;
}
__EXTERN_INLINE void lca_iowrite64(u64 b, void __iomem *xaddr)
{
unsigned long addr = (unsigned long) xaddr;
if (addr < LCA_DENSE_MEM)
addr = ((addr - LCA_IO) << 5) + LCA_IO + 0x18;
*(vulp)addr = b;
}
__EXTERN_INLINE void __iomem *lca_ioportmap(unsigned long addr) __EXTERN_INLINE void __iomem *lca_ioportmap(unsigned long addr)
{ {
return (void __iomem *)(addr + LCA_IO); return (void __iomem *)(addr + LCA_IO);
......
...@@ -332,10 +332,10 @@ struct io7 { ...@@ -332,10 +332,10 @@ struct io7 {
#define vucp volatile unsigned char __force * #define vucp volatile unsigned char __force *
#define vusp volatile unsigned short __force * #define vusp volatile unsigned short __force *
extern unsigned int marvel_ioread8(const void __iomem *); extern u8 marvel_ioread8(const void __iomem *);
extern void marvel_iowrite8(u8 b, void __iomem *); extern void marvel_iowrite8(u8 b, void __iomem *);
__EXTERN_INLINE unsigned int marvel_ioread16(const void __iomem *addr) __EXTERN_INLINE u16 marvel_ioread16(const void __iomem *addr)
{ {
return __kernel_ldwu(*(vusp)addr); return __kernel_ldwu(*(vusp)addr);
} }
......
...@@ -248,6 +248,7 @@ struct el_MCPCIA_uncorrected_frame_mcheck { ...@@ -248,6 +248,7 @@ struct el_MCPCIA_uncorrected_frame_mcheck {
#define vip volatile int __force * #define vip volatile int __force *
#define vuip volatile unsigned int __force * #define vuip volatile unsigned int __force *
#define vulp volatile unsigned long __force *
#ifndef MCPCIA_ONE_HAE_WINDOW #ifndef MCPCIA_ONE_HAE_WINDOW
#define MCPCIA_FROB_MMIO \ #define MCPCIA_FROB_MMIO \
...@@ -267,7 +268,7 @@ extern inline int __mcpcia_is_mmio(unsigned long addr) ...@@ -267,7 +268,7 @@ extern inline int __mcpcia_is_mmio(unsigned long addr)
return (addr & 0x80000000UL) == 0; return (addr & 0x80000000UL) == 0;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread8(const void __iomem *xaddr) __EXTERN_INLINE u8 mcpcia_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK; unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK;
unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK; unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK;
...@@ -291,7 +292,7 @@ __EXTERN_INLINE void mcpcia_iowrite8(u8 b, void __iomem *xaddr) ...@@ -291,7 +292,7 @@ __EXTERN_INLINE void mcpcia_iowrite8(u8 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + hose + 0x00) = w; *(vuip) ((addr << 5) + hose + 0x00) = w;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread16(const void __iomem *xaddr) __EXTERN_INLINE u16 mcpcia_ioread16(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK; unsigned long addr = (unsigned long)xaddr & MCPCIA_MEM_MASK;
unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK; unsigned long hose = (unsigned long)xaddr & ~MCPCIA_MEM_MASK;
...@@ -315,7 +316,7 @@ __EXTERN_INLINE void mcpcia_iowrite16(u16 b, void __iomem *xaddr) ...@@ -315,7 +316,7 @@ __EXTERN_INLINE void mcpcia_iowrite16(u16 b, void __iomem *xaddr)
*(vuip) ((addr << 5) + hose + 0x08) = w; *(vuip) ((addr << 5) + hose + 0x08) = w;
} }
__EXTERN_INLINE unsigned int mcpcia_ioread32(const void __iomem *xaddr) __EXTERN_INLINE u32 mcpcia_ioread32(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long)xaddr; unsigned long addr = (unsigned long)xaddr;
...@@ -335,6 +336,26 @@ __EXTERN_INLINE void mcpcia_iowrite32(u32 b, void __iomem *xaddr) ...@@ -335,6 +336,26 @@ __EXTERN_INLINE void mcpcia_iowrite32(u32 b, void __iomem *xaddr)
*(vuip)addr = b; *(vuip)addr = b;
} }
__EXTERN_INLINE u64 mcpcia_ioread64(const void __iomem *xaddr)
{
unsigned long addr = (unsigned long)xaddr;
if (!__mcpcia_is_mmio(addr))
addr = ((addr & 0xffff) << 5) + (addr & ~0xfffful) + 0x18;
return *(vulp)addr;
}
__EXTERN_INLINE void mcpcia_iowrite64(u64 b, void __iomem *xaddr)
{
unsigned long addr = (unsigned long)xaddr;
if (!__mcpcia_is_mmio(addr))
addr = ((addr & 0xffff) << 5) + (addr & ~0xfffful) + 0x18;
*(vulp)addr = b;
}
__EXTERN_INLINE void __iomem *mcpcia_ioportmap(unsigned long addr) __EXTERN_INLINE void __iomem *mcpcia_ioportmap(unsigned long addr)
{ {
...@@ -362,6 +383,7 @@ __EXTERN_INLINE int mcpcia_is_mmio(const volatile void __iomem *xaddr) ...@@ -362,6 +383,7 @@ __EXTERN_INLINE int mcpcia_is_mmio(const volatile void __iomem *xaddr)
#undef vip #undef vip
#undef vuip #undef vuip
#undef vulp
#undef __IO_PREFIX #undef __IO_PREFIX
#define __IO_PREFIX mcpcia #define __IO_PREFIX mcpcia
......
...@@ -360,6 +360,7 @@ struct el_t2_frame_corrected { ...@@ -360,6 +360,7 @@ struct el_t2_frame_corrected {
#define vip volatile int * #define vip volatile int *
#define vuip volatile unsigned int * #define vuip volatile unsigned int *
#define vulp volatile unsigned long *
extern inline u8 t2_inb(unsigned long addr) extern inline u8 t2_inb(unsigned long addr)
{ {
...@@ -402,6 +403,17 @@ extern inline void t2_outl(u32 b, unsigned long addr) ...@@ -402,6 +403,17 @@ extern inline void t2_outl(u32 b, unsigned long addr)
mb(); mb();
} }
extern inline u64 t2_inq(unsigned long addr)
{
return *(vulp) ((addr << 5) + T2_IO + 0x18);
}
extern inline void t2_outq(u64 b, unsigned long addr)
{
*(vulp) ((addr << 5) + T2_IO + 0x18) = b;
mb();
}
/* /*
* Memory functions. * Memory functions.
...@@ -572,7 +584,7 @@ __EXTERN_INLINE int t2_is_mmio(const volatile void __iomem *addr) ...@@ -572,7 +584,7 @@ __EXTERN_INLINE int t2_is_mmio(const volatile void __iomem *addr)
it doesn't make sense to merge the pio and mmio routines. */ it doesn't make sense to merge the pio and mmio routines. */
#define IOPORT(OS, NS) \ #define IOPORT(OS, NS) \
__EXTERN_INLINE unsigned int t2_ioread##NS(const void __iomem *xaddr) \ __EXTERN_INLINE u##NS t2_ioread##NS(const void __iomem *xaddr) \
{ \ { \
if (t2_is_mmio(xaddr)) \ if (t2_is_mmio(xaddr)) \
return t2_read##OS(xaddr); \ return t2_read##OS(xaddr); \
...@@ -590,11 +602,13 @@ __EXTERN_INLINE void t2_iowrite##NS(u##NS b, void __iomem *xaddr) \ ...@@ -590,11 +602,13 @@ __EXTERN_INLINE void t2_iowrite##NS(u##NS b, void __iomem *xaddr) \
IOPORT(b, 8) IOPORT(b, 8)
IOPORT(w, 16) IOPORT(w, 16)
IOPORT(l, 32) IOPORT(l, 32)
IOPORT(q, 64)
#undef IOPORT #undef IOPORT
#undef vip #undef vip
#undef vuip #undef vuip
#undef vulp
#undef __IO_PREFIX #undef __IO_PREFIX
#define __IO_PREFIX t2 #define __IO_PREFIX t2
......
...@@ -90,6 +90,8 @@ static inline void * phys_to_virt(unsigned long address) ...@@ -90,6 +90,8 @@ static inline void * phys_to_virt(unsigned long address)
} }
#endif #endif
#define virt_to_phys virt_to_phys
#define phys_to_virt phys_to_virt
#define page_to_phys(page) page_to_pa(page) #define page_to_phys(page) page_to_pa(page)
/* Maximum PIO space address supported? */ /* Maximum PIO space address supported? */
...@@ -153,6 +155,7 @@ static inline void generic_##NAME(TYPE b, QUAL void __iomem *addr) \ ...@@ -153,6 +155,7 @@ static inline void generic_##NAME(TYPE b, QUAL void __iomem *addr) \
REMAP1(unsigned int, ioread8, const) REMAP1(unsigned int, ioread8, const)
REMAP1(unsigned int, ioread16, const) REMAP1(unsigned int, ioread16, const)
REMAP1(unsigned int, ioread32, const) REMAP1(unsigned int, ioread32, const)
REMAP1(u64, ioread64, const)
REMAP1(u8, readb, const volatile) REMAP1(u8, readb, const volatile)
REMAP1(u16, readw, const volatile) REMAP1(u16, readw, const volatile)
REMAP1(u32, readl, const volatile) REMAP1(u32, readl, const volatile)
...@@ -161,6 +164,7 @@ REMAP1(u64, readq, const volatile) ...@@ -161,6 +164,7 @@ REMAP1(u64, readq, const volatile)
REMAP2(u8, iowrite8, /**/) REMAP2(u8, iowrite8, /**/)
REMAP2(u16, iowrite16, /**/) REMAP2(u16, iowrite16, /**/)
REMAP2(u32, iowrite32, /**/) REMAP2(u32, iowrite32, /**/)
REMAP2(u64, iowrite64, /**/)
REMAP2(u8, writeb, volatile) REMAP2(u8, writeb, volatile)
REMAP2(u16, writew, volatile) REMAP2(u16, writew, volatile)
REMAP2(u32, writel, volatile) REMAP2(u32, writel, volatile)
...@@ -242,6 +246,12 @@ extern u32 inl(unsigned long port); ...@@ -242,6 +246,12 @@ extern u32 inl(unsigned long port);
extern void outb(u8 b, unsigned long port); extern void outb(u8 b, unsigned long port);
extern void outw(u16 b, unsigned long port); extern void outw(u16 b, unsigned long port);
extern void outl(u32 b, unsigned long port); extern void outl(u32 b, unsigned long port);
#define inb inb
#define inw inw
#define inl inl
#define outb outb
#define outw outw
#define outl outl
extern u8 readb(const volatile void __iomem *addr); extern u8 readb(const volatile void __iomem *addr);
extern u16 readw(const volatile void __iomem *addr); extern u16 readw(const volatile void __iomem *addr);
...@@ -251,6 +261,14 @@ extern void writeb(u8 b, volatile void __iomem *addr); ...@@ -251,6 +261,14 @@ extern void writeb(u8 b, volatile void __iomem *addr);
extern void writew(u16 b, volatile void __iomem *addr); extern void writew(u16 b, volatile void __iomem *addr);
extern void writel(u32 b, volatile void __iomem *addr); extern void writel(u32 b, volatile void __iomem *addr);
extern void writeq(u64 b, volatile void __iomem *addr); extern void writeq(u64 b, volatile void __iomem *addr);
#define readb readb
#define readw readw
#define readl readl
#define readq readq
#define writeb writeb
#define writew writew
#define writel writel
#define writeq writeq
extern u8 __raw_readb(const volatile void __iomem *addr); extern u8 __raw_readb(const volatile void __iomem *addr);
extern u16 __raw_readw(const volatile void __iomem *addr); extern u16 __raw_readw(const volatile void __iomem *addr);
...@@ -260,6 +278,14 @@ extern void __raw_writeb(u8 b, volatile void __iomem *addr); ...@@ -260,6 +278,14 @@ extern void __raw_writeb(u8 b, volatile void __iomem *addr);
extern void __raw_writew(u16 b, volatile void __iomem *addr); extern void __raw_writew(u16 b, volatile void __iomem *addr);
extern void __raw_writel(u32 b, volatile void __iomem *addr); extern void __raw_writel(u32 b, volatile void __iomem *addr);
extern void __raw_writeq(u64 b, volatile void __iomem *addr); extern void __raw_writeq(u64 b, volatile void __iomem *addr);
#define __raw_readb __raw_readb
#define __raw_readw __raw_readw
#define __raw_readl __raw_readl
#define __raw_readq __raw_readq
#define __raw_writeb __raw_writeb
#define __raw_writew __raw_writew
#define __raw_writel __raw_writel
#define __raw_writeq __raw_writeq
/* /*
* Mapping from port numbers to __iomem space is pretty easy. * Mapping from port numbers to __iomem space is pretty easy.
...@@ -277,6 +303,9 @@ extern inline void ioport_unmap(void __iomem *addr) ...@@ -277,6 +303,9 @@ extern inline void ioport_unmap(void __iomem *addr)
{ {
} }
#define ioport_map ioport_map
#define ioport_unmap ioport_unmap
static inline void __iomem *ioremap(unsigned long port, unsigned long size) static inline void __iomem *ioremap(unsigned long port, unsigned long size)
{ {
return IO_CONCAT(__IO_PREFIX,ioremap) (port, size); return IO_CONCAT(__IO_PREFIX,ioremap) (port, size);
...@@ -358,6 +387,11 @@ extern inline void outw(u16 b, unsigned long port) ...@@ -358,6 +387,11 @@ extern inline void outw(u16 b, unsigned long port)
} }
#endif #endif
#define ioread8 ioread8
#define ioread16 ioread16
#define iowrite8 iowrite8
#define iowrite16 iowrite16
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq) #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
extern inline unsigned int ioread32(const void __iomem *addr) extern inline unsigned int ioread32(const void __iomem *addr)
{ {
...@@ -368,12 +402,27 @@ extern inline unsigned int ioread32(const void __iomem *addr) ...@@ -368,12 +402,27 @@ extern inline unsigned int ioread32(const void __iomem *addr)
return ret; return ret;
} }
extern inline u64 ioread64(const void __iomem *addr)
{
unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread64)(addr);
mb();
return ret;
}
extern inline void iowrite32(u32 b, void __iomem *addr) extern inline void iowrite32(u32 b, void __iomem *addr)
{ {
mb(); mb();
IO_CONCAT(__IO_PREFIX, iowrite32)(b, addr); IO_CONCAT(__IO_PREFIX, iowrite32)(b, addr);
} }
extern inline void iowrite64(u64 b, void __iomem *addr)
{
mb();
IO_CONCAT(__IO_PREFIX, iowrite64)(b, addr);
}
extern inline u32 inl(unsigned long port) extern inline u32 inl(unsigned long port)
{ {
return ioread32(ioport_map(port, 4)); return ioread32(ioport_map(port, 4));
...@@ -385,6 +434,11 @@ extern inline void outl(u32 b, unsigned long port) ...@@ -385,6 +434,11 @@ extern inline void outl(u32 b, unsigned long port)
} }
#endif #endif
#define ioread32 ioread32
#define ioread64 ioread64
#define iowrite32 iowrite32
#define iowrite64 iowrite64
#if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1 #if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
extern inline u8 __raw_readb(const volatile void __iomem *addr) extern inline u8 __raw_readb(const volatile void __iomem *addr)
{ {
...@@ -505,6 +559,10 @@ extern u8 readb_relaxed(const volatile void __iomem *addr); ...@@ -505,6 +559,10 @@ extern u8 readb_relaxed(const volatile void __iomem *addr);
extern u16 readw_relaxed(const volatile void __iomem *addr); extern u16 readw_relaxed(const volatile void __iomem *addr);
extern u32 readl_relaxed(const volatile void __iomem *addr); extern u32 readl_relaxed(const volatile void __iomem *addr);
extern u64 readq_relaxed(const volatile void __iomem *addr); extern u64 readq_relaxed(const volatile void __iomem *addr);
#define readb_relaxed readb_relaxed
#define readw_relaxed readw_relaxed
#define readl_relaxed readl_relaxed
#define readq_relaxed readq_relaxed
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
extern inline u8 readb_relaxed(const volatile void __iomem *addr) extern inline u8 readb_relaxed(const volatile void __iomem *addr)
...@@ -557,6 +615,10 @@ static inline void memsetw_io(volatile void __iomem *addr, u16 c, long len) ...@@ -557,6 +615,10 @@ static inline void memsetw_io(volatile void __iomem *addr, u16 c, long len)
_memset_c_io(addr, 0x0001000100010001UL * c, len); _memset_c_io(addr, 0x0001000100010001UL * c, len);
} }
#define memset_io memset_io
#define memcpy_fromio memcpy_fromio
#define memcpy_toio memcpy_toio
/* /*
* String versions of in/out ops: * String versions of in/out ops:
*/ */
...@@ -567,6 +629,13 @@ extern void outsb (unsigned long port, const void *src, unsigned long count); ...@@ -567,6 +629,13 @@ extern void outsb (unsigned long port, const void *src, unsigned long count);
extern void outsw (unsigned long port, const void *src, unsigned long count); extern void outsw (unsigned long port, const void *src, unsigned long count);
extern void outsl (unsigned long port, const void *src, unsigned long count); extern void outsl (unsigned long port, const void *src, unsigned long count);
#define insb insb
#define insw insw
#define insl insl
#define outsb outsb
#define outsw outsw
#define outsl outsl
/* /*
* The Alpha Jensen hardware for some rather strange reason puts * The Alpha Jensen hardware for some rather strange reason puts
* the RTC clock at 0x170 instead of 0x70. Probably due to some * the RTC clock at 0x170 instead of 0x70. Probably due to some
...@@ -586,22 +655,30 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); ...@@ -586,22 +655,30 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
#endif #endif
#define RTC_ALWAYS_BCD 0 #define RTC_ALWAYS_BCD 0
/*
* Some mucking forons use if[n]def writeq to check if platform has it.
* It's a bloody bad idea and we probably want ARCH_HAS_WRITEQ for them
* to play with; for now just use cpp anti-recursion logics and make sure
* that damn thing is defined and expands to itself.
*/
#define writeq writeq
#define readq readq
/* /*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem * Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access * access
*/ */
#define xlate_dev_mem_ptr(p) __va(p) #define xlate_dev_mem_ptr(p) __va(p)
/*
* These get provided from <asm-generic/iomap.h> since alpha does not
* select GENERIC_IOMAP.
*/
#define ioread64 ioread64
#define iowrite64 iowrite64
#define ioread64be ioread64be
#define iowrite64be iowrite64be
#define ioread8_rep ioread8_rep
#define ioread16_rep ioread16_rep
#define ioread32_rep ioread32_rep
#define iowrite8_rep iowrite8_rep
#define iowrite16_rep iowrite16_rep
#define iowrite32_rep iowrite32_rep
#define pci_iounmap pci_iounmap
#include <asm-generic/io.h>
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* __ALPHA_IO_H */ #endif /* __ALPHA_IO_H */
...@@ -6,13 +6,13 @@ ...@@ -6,13 +6,13 @@
/* This file may be included multiple times. */ /* This file may be included multiple times. */
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
__EXTERN_INLINE unsigned int __EXTERN_INLINE u8
IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread8)(const void __iomem *a)
{ {
return __kernel_ldbu(*(const volatile u8 __force *)a); return __kernel_ldbu(*(const volatile u8 __force *)a);
} }
__EXTERN_INLINE unsigned int __EXTERN_INLINE u16
IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread16)(const void __iomem *a)
{ {
return __kernel_ldwu(*(const volatile u16 __force *)a); return __kernel_ldwu(*(const volatile u16 __force *)a);
...@@ -32,7 +32,7 @@ IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a) ...@@ -32,7 +32,7 @@ IO_CONCAT(__IO_PREFIX,iowrite16)(u16 b, void __iomem *a)
#endif #endif
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq) #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
__EXTERN_INLINE unsigned int __EXTERN_INLINE u32
IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a) IO_CONCAT(__IO_PREFIX,ioread32)(const void __iomem *a)
{ {
return *(const volatile u32 __force *)a; return *(const volatile u32 __force *)a;
...@@ -43,6 +43,18 @@ IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a) ...@@ -43,6 +43,18 @@ IO_CONCAT(__IO_PREFIX,iowrite32)(u32 b, void __iomem *a)
{ {
*(volatile u32 __force *)a = b; *(volatile u32 __force *)a = b;
} }
__EXTERN_INLINE u64
IO_CONCAT(__IO_PREFIX,ioread64)(const void __iomem *a)
{
return *(const volatile u64 __force *)a;
}
__EXTERN_INLINE void
IO_CONCAT(__IO_PREFIX,iowrite64)(u64 b, void __iomem *a)
{
*(volatile u64 __force *)a = b;
}
#endif #endif
#if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1 #if IO_CONCAT(__IO_PREFIX,trivial_rw_bw) == 1
......
...@@ -98,6 +98,7 @@ __EXTERN_INLINE void jensen_set_hae(unsigned long addr) ...@@ -98,6 +98,7 @@ __EXTERN_INLINE void jensen_set_hae(unsigned long addr)
} }
#define vuip volatile unsigned int * #define vuip volatile unsigned int *
#define vulp volatile unsigned long *
/* /*
* IO functions * IO functions
...@@ -183,6 +184,12 @@ __EXTERN_INLINE u32 jensen_inl(unsigned long addr) ...@@ -183,6 +184,12 @@ __EXTERN_INLINE u32 jensen_inl(unsigned long addr)
return *(vuip) ((addr << 7) + EISA_IO + 0x60); return *(vuip) ((addr << 7) + EISA_IO + 0x60);
} }
__EXTERN_INLINE u64 jensen_inq(unsigned long addr)
{
jensen_set_hae(0);
return *(vulp) ((addr << 7) + EISA_IO + 0x60);
}
__EXTERN_INLINE void jensen_outw(u16 b, unsigned long addr) __EXTERN_INLINE void jensen_outw(u16 b, unsigned long addr)
{ {
jensen_set_hae(0); jensen_set_hae(0);
...@@ -197,6 +204,13 @@ __EXTERN_INLINE void jensen_outl(u32 b, unsigned long addr) ...@@ -197,6 +204,13 @@ __EXTERN_INLINE void jensen_outl(u32 b, unsigned long addr)
mb(); mb();
} }
__EXTERN_INLINE void jensen_outq(u64 b, unsigned long addr)
{
jensen_set_hae(0);
*(vulp) ((addr << 7) + EISA_IO + 0x60) = b;
mb();
}
/* /*
* Memory functions. * Memory functions.
*/ */
...@@ -305,7 +319,7 @@ __EXTERN_INLINE int jensen_is_mmio(const volatile void __iomem *addr) ...@@ -305,7 +319,7 @@ __EXTERN_INLINE int jensen_is_mmio(const volatile void __iomem *addr)
that it doesn't make sense to merge them. */ that it doesn't make sense to merge them. */
#define IOPORT(OS, NS) \ #define IOPORT(OS, NS) \
__EXTERN_INLINE unsigned int jensen_ioread##NS(const void __iomem *xaddr) \ __EXTERN_INLINE u##NS jensen_ioread##NS(const void __iomem *xaddr) \
{ \ { \
if (jensen_is_mmio(xaddr)) \ if (jensen_is_mmio(xaddr)) \
return jensen_read##OS(xaddr - 0x100000000ul); \ return jensen_read##OS(xaddr - 0x100000000ul); \
...@@ -323,10 +337,12 @@ __EXTERN_INLINE void jensen_iowrite##NS(u##NS b, void __iomem *xaddr) \ ...@@ -323,10 +337,12 @@ __EXTERN_INLINE void jensen_iowrite##NS(u##NS b, void __iomem *xaddr) \
IOPORT(b, 8) IOPORT(b, 8)
IOPORT(w, 16) IOPORT(w, 16)
IOPORT(l, 32) IOPORT(l, 32)
IOPORT(q, 64)
#undef IOPORT #undef IOPORT
#undef vuip #undef vuip
#undef vulp
#undef __IO_PREFIX #undef __IO_PREFIX
#define __IO_PREFIX jensen #define __IO_PREFIX jensen
......
...@@ -46,13 +46,15 @@ struct alpha_machine_vector ...@@ -46,13 +46,15 @@ struct alpha_machine_vector
void (*mv_pci_tbi)(struct pci_controller *hose, void (*mv_pci_tbi)(struct pci_controller *hose,
dma_addr_t start, dma_addr_t end); dma_addr_t start, dma_addr_t end);
unsigned int (*mv_ioread8)(const void __iomem *); u8 (*mv_ioread8)(const void __iomem *);
unsigned int (*mv_ioread16)(const void __iomem *); u16 (*mv_ioread16)(const void __iomem *);
unsigned int (*mv_ioread32)(const void __iomem *); u32 (*mv_ioread32)(const void __iomem *);
u64 (*mv_ioread64)(const void __iomem *);
void (*mv_iowrite8)(u8, void __iomem *); void (*mv_iowrite8)(u8, void __iomem *);
void (*mv_iowrite16)(u16, void __iomem *); void (*mv_iowrite16)(u16, void __iomem *);
void (*mv_iowrite32)(u32, void __iomem *); void (*mv_iowrite32)(u32, void __iomem *);
void (*mv_iowrite64)(u64, void __iomem *);
u8 (*mv_readb)(const volatile void __iomem *); u8 (*mv_readb)(const volatile void __iomem *);
u16 (*mv_readw)(const volatile void __iomem *); u16 (*mv_readw)(const volatile void __iomem *);
......
...@@ -803,7 +803,7 @@ void __iomem *marvel_ioportmap (unsigned long addr) ...@@ -803,7 +803,7 @@ void __iomem *marvel_ioportmap (unsigned long addr)
return (void __iomem *)addr; return (void __iomem *)addr;
} }
unsigned int unsigned u8
marvel_ioread8(const void __iomem *xaddr) marvel_ioread8(const void __iomem *xaddr)
{ {
unsigned long addr = (unsigned long) xaddr; unsigned long addr = (unsigned long) xaddr;
......
...@@ -41,6 +41,15 @@ unsigned int ioread32(const void __iomem *addr) ...@@ -41,6 +41,15 @@ unsigned int ioread32(const void __iomem *addr)
return ret; return ret;
} }
u64 ioread64(const void __iomem *addr)
{
unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread64)(addr);
mb();
return ret;
}
void iowrite8(u8 b, void __iomem *addr) void iowrite8(u8 b, void __iomem *addr)
{ {
mb(); mb();
...@@ -59,12 +68,20 @@ void iowrite32(u32 b, void __iomem *addr) ...@@ -59,12 +68,20 @@ void iowrite32(u32 b, void __iomem *addr)
IO_CONCAT(__IO_PREFIX,iowrite32)(b, addr); IO_CONCAT(__IO_PREFIX,iowrite32)(b, addr);
} }
void iowrite64(u64 b, void __iomem *addr)
{
mb();
IO_CONCAT(__IO_PREFIX,iowrite64)(b, addr);
}
EXPORT_SYMBOL(ioread8); EXPORT_SYMBOL(ioread8);
EXPORT_SYMBOL(ioread16); EXPORT_SYMBOL(ioread16);
EXPORT_SYMBOL(ioread32); EXPORT_SYMBOL(ioread32);
EXPORT_SYMBOL(ioread64);
EXPORT_SYMBOL(iowrite8); EXPORT_SYMBOL(iowrite8);
EXPORT_SYMBOL(iowrite16); EXPORT_SYMBOL(iowrite16);
EXPORT_SYMBOL(iowrite32); EXPORT_SYMBOL(iowrite32);
EXPORT_SYMBOL(iowrite64);
u8 inb(unsigned long port) u8 inb(unsigned long port)
{ {
......
...@@ -78,9 +78,11 @@ ...@@ -78,9 +78,11 @@
.mv_ioread8 = CAT(low,_ioread8), \ .mv_ioread8 = CAT(low,_ioread8), \
.mv_ioread16 = CAT(low,_ioread16), \ .mv_ioread16 = CAT(low,_ioread16), \
.mv_ioread32 = CAT(low,_ioread32), \ .mv_ioread32 = CAT(low,_ioread32), \
.mv_ioread64 = CAT(low,_ioread64), \
.mv_iowrite8 = CAT(low,_iowrite8), \ .mv_iowrite8 = CAT(low,_iowrite8), \
.mv_iowrite16 = CAT(low,_iowrite16), \ .mv_iowrite16 = CAT(low,_iowrite16), \
.mv_iowrite32 = CAT(low,_iowrite32), \ .mv_iowrite32 = CAT(low,_iowrite32), \
.mv_iowrite64 = CAT(low,_iowrite64), \
.mv_readb = CAT(low,_readb), \ .mv_readb = CAT(low,_readb), \
.mv_readw = CAT(low,_readw), \ .mv_readw = CAT(low,_readw), \
.mv_readl = CAT(low,_readl), \ .mv_readl = CAT(low,_readl), \
......
...@@ -75,5 +75,6 @@ int memory_add_physaddr_to_nid(u64 addr) ...@@ -75,5 +75,6 @@ int memory_add_physaddr_to_nid(u64 addr)
return 0; return 0;
return nid; return nid;
} }
EXPORT_SYMBOL(memory_add_physaddr_to_nid);
#endif #endif
#endif #endif
...@@ -128,98 +128,16 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr) ...@@ -128,98 +128,16 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
void __iomem *ioremap(unsigned long offset, unsigned long size); void __iomem *ioremap(unsigned long offset, unsigned long size);
#define ioremap_wc ioremap #define ioremap_wc ioremap
#define ioremap_uc ioremap #define ioremap_uc ioremap
#define pci_iounmap pci_iounmap
extern void iounmap(const volatile void __iomem *addr); extern void iounmap(const volatile void __iomem *addr);
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
{
return (*(volatile unsigned char __force *) (addr));
}
static inline unsigned short __raw_readw(const volatile void __iomem *addr)
{
return *(volatile unsigned short __force *) addr;
}
static inline unsigned int __raw_readl(const volatile void __iomem *addr)
{
return *(volatile unsigned int __force *) addr;
}
static inline unsigned long long __raw_readq(const volatile void __iomem *addr)
{
return *(volatile unsigned long long __force *) addr;
}
static inline void __raw_writeb(unsigned char b, volatile void __iomem *addr)
{
*(volatile unsigned char __force *) addr = b;
}
static inline void __raw_writew(unsigned short b, volatile void __iomem *addr)
{
*(volatile unsigned short __force *) addr = b;
}
static inline void __raw_writel(unsigned int b, volatile void __iomem *addr)
{
*(volatile unsigned int __force *) addr = b;
}
static inline void __raw_writeq(unsigned long long b, volatile void __iomem *addr)
{
*(volatile unsigned long long __force *) addr = b;
}
static inline unsigned char readb(const volatile void __iomem *addr)
{
return __raw_readb(addr);
}
static inline unsigned short readw(const volatile void __iomem *addr)
{
return le16_to_cpu((__le16 __force) __raw_readw(addr));
}
static inline unsigned int readl(const volatile void __iomem *addr)
{
return le32_to_cpu((__le32 __force) __raw_readl(addr));
}
static inline unsigned long long readq(const volatile void __iomem *addr)
{
return le64_to_cpu((__le64 __force) __raw_readq(addr));
}
static inline void writeb(unsigned char b, volatile void __iomem *addr)
{
__raw_writeb(b, addr);
}
static inline void writew(unsigned short w, volatile void __iomem *addr)
{
__raw_writew((__u16 __force) cpu_to_le16(w), addr);
}
static inline void writel(unsigned int l, volatile void __iomem *addr)
{
__raw_writel((__u32 __force) cpu_to_le32(l), addr);
}
static inline void writeq(unsigned long long q, volatile void __iomem *addr)
{
__raw_writeq((__u64 __force) cpu_to_le64(q), addr);
}
#define readb readb
#define readw readw
#define readl readl
#define readq readq
#define writeb writeb
#define writew writew
#define writel writel
#define writeq writeq
#define readb_relaxed(addr) readb(addr)
#define readw_relaxed(addr) readw(addr)
#define readl_relaxed(addr) readl(addr)
#define readq_relaxed(addr) readq(addr)
#define writeb_relaxed(b, addr) writeb(b, addr)
#define writew_relaxed(w, addr) writew(w, addr)
#define writel_relaxed(l, addr) writel(l, addr)
#define writeq_relaxed(q, addr) writeq(q, addr)
void memset_io(volatile void __iomem *addr, unsigned char val, int count); void memset_io(volatile void __iomem *addr, unsigned char val, int count);
void memcpy_fromio(void *dst, const volatile void __iomem *src, int count); void memcpy_fromio(void *dst, const volatile void __iomem *src, int count);
void memcpy_toio(volatile void __iomem *dst, const void *src, int count); void memcpy_toio(volatile void __iomem *dst, const void *src, int count);
#define memset_io memset_io
#define memcpy_fromio memcpy_fromio
#define memcpy_toio memcpy_toio
/* Port-space IO */ /* Port-space IO */
...@@ -241,10 +159,15 @@ extern void eisa_out32(unsigned int data, unsigned short port); ...@@ -241,10 +159,15 @@ extern void eisa_out32(unsigned int data, unsigned short port);
extern unsigned char inb(int addr); extern unsigned char inb(int addr);
extern unsigned short inw(int addr); extern unsigned short inw(int addr);
extern unsigned int inl(int addr); extern unsigned int inl(int addr);
extern void outb(unsigned char b, int addr); extern void outb(unsigned char b, int addr);
extern void outw(unsigned short b, int addr); extern void outw(unsigned short b, int addr);
extern void outl(unsigned int b, int addr); extern void outl(unsigned int b, int addr);
#define inb inb
#define inw inw
#define inl inl
#define outb outb
#define outw outw
#define outl outl
#elif defined(CONFIG_EISA) #elif defined(CONFIG_EISA)
#define inb eisa_in8 #define inb eisa_in8
#define inw eisa_in16 #define inw eisa_in16
...@@ -270,7 +193,9 @@ static inline int inl(unsigned long addr) ...@@ -270,7 +193,9 @@ static inline int inl(unsigned long addr)
BUG(); BUG();
return -1; return -1;
} }
#define inb inb
#define inw inw
#define inl inl
#define outb(x, y) ({(void)(x); (void)(y); BUG(); 0;}) #define outb(x, y) ({(void)(x); (void)(y); BUG(); 0;})
#define outw(x, y) ({(void)(x); (void)(y); BUG(); 0;}) #define outw(x, y) ({(void)(x); (void)(y); BUG(); 0;})
#define outl(x, y) ({(void)(x); (void)(y); BUG(); 0;}) #define outl(x, y) ({(void)(x); (void)(y); BUG(); 0;})
...@@ -285,7 +210,12 @@ extern void insl (unsigned long port, void *dst, unsigned long count); ...@@ -285,7 +210,12 @@ extern void insl (unsigned long port, void *dst, unsigned long count);
extern void outsb (unsigned long port, const void *src, unsigned long count); extern void outsb (unsigned long port, const void *src, unsigned long count);
extern void outsw (unsigned long port, const void *src, unsigned long count); extern void outsw (unsigned long port, const void *src, unsigned long count);
extern void outsl (unsigned long port, const void *src, unsigned long count); extern void outsl (unsigned long port, const void *src, unsigned long count);
#define insb insb
#define insw insw
#define insl insl
#define outsb outsb
#define outsw outsw
#define outsl outsl
/* IO Port space is : BBiiii where BB is HBA number. */ /* IO Port space is : BBiiii where BB is HBA number. */
#define IO_SPACE_LIMIT 0x00ffffff #define IO_SPACE_LIMIT 0x00ffffff
...@@ -297,6 +227,7 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); ...@@ -297,6 +227,7 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
* value for either 32 or 64 bit mode */ * value for either 32 or 64 bit mode */
#define F_EXTEND(x) ((unsigned long)((x) | (0xffffffff00000000ULL))) #define F_EXTEND(x) ((unsigned long)((x) | (0xffffffff00000000ULL)))
#ifdef CONFIG_64BIT
#define ioread64 ioread64 #define ioread64 ioread64
#define ioread64be ioread64be #define ioread64be ioread64be
#define iowrite64 iowrite64 #define iowrite64 iowrite64
...@@ -305,8 +236,31 @@ extern u64 ioread64(const void __iomem *addr); ...@@ -305,8 +236,31 @@ extern u64 ioread64(const void __iomem *addr);
extern u64 ioread64be(const void __iomem *addr); extern u64 ioread64be(const void __iomem *addr);
extern void iowrite64(u64 val, void __iomem *addr); extern void iowrite64(u64 val, void __iomem *addr);
extern void iowrite64be(u64 val, void __iomem *addr); extern void iowrite64be(u64 val, void __iomem *addr);
#endif
#include <asm-generic/iomap.h> #include <asm-generic/iomap.h>
/*
* These get provided from <asm-generic/iomap.h> since parisc does not
* select GENERIC_IOMAP.
*/
#define ioport_map ioport_map
#define ioport_unmap ioport_unmap
#define ioread8 ioread8
#define ioread16 ioread16
#define ioread32 ioread32
#define ioread16be ioread16be
#define ioread32be ioread32be
#define iowrite8 iowrite8
#define iowrite16 iowrite16
#define iowrite32 iowrite32
#define iowrite16be iowrite16be
#define iowrite32be iowrite32be
#define ioread8_rep ioread8_rep
#define ioread16_rep ioread16_rep
#define ioread32_rep ioread32_rep
#define iowrite8_rep iowrite8_rep
#define iowrite16_rep iowrite16_rep
#define iowrite32_rep iowrite32_rep
/* /*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem * Convert a physical pointer to a virtual kernel pointer for /dev/mem
...@@ -316,4 +270,6 @@ extern void iowrite64be(u64 val, void __iomem *addr); ...@@ -316,4 +270,6 @@ extern void iowrite64be(u64 val, void __iomem *addr);
extern int devmem_is_allowed(unsigned long pfn); extern int devmem_is_allowed(unsigned long pfn);
#include <asm-generic/io.h>
#endif #endif
...@@ -48,15 +48,19 @@ struct iomap_ops { ...@@ -48,15 +48,19 @@ struct iomap_ops {
unsigned int (*read16be)(const void __iomem *); unsigned int (*read16be)(const void __iomem *);
unsigned int (*read32)(const void __iomem *); unsigned int (*read32)(const void __iomem *);
unsigned int (*read32be)(const void __iomem *); unsigned int (*read32be)(const void __iomem *);
#ifdef CONFIG_64BIT
u64 (*read64)(const void __iomem *); u64 (*read64)(const void __iomem *);
u64 (*read64be)(const void __iomem *); u64 (*read64be)(const void __iomem *);
#endif
void (*write8)(u8, void __iomem *); void (*write8)(u8, void __iomem *);
void (*write16)(u16, void __iomem *); void (*write16)(u16, void __iomem *);
void (*write16be)(u16, void __iomem *); void (*write16be)(u16, void __iomem *);
void (*write32)(u32, void __iomem *); void (*write32)(u32, void __iomem *);
void (*write32be)(u32, void __iomem *); void (*write32be)(u32, void __iomem *);
#ifdef CONFIG_64BIT
void (*write64)(u64, void __iomem *); void (*write64)(u64, void __iomem *);
void (*write64be)(u64, void __iomem *); void (*write64be)(u64, void __iomem *);
#endif
void (*read8r)(const void __iomem *, void *, unsigned long); void (*read8r)(const void __iomem *, void *, unsigned long);
void (*read16r)(const void __iomem *, void *, unsigned long); void (*read16r)(const void __iomem *, void *, unsigned long);
void (*read32r)(const void __iomem *, void *, unsigned long); void (*read32r)(const void __iomem *, void *, unsigned long);
...@@ -175,6 +179,7 @@ static unsigned int iomem_read32be(const void __iomem *addr) ...@@ -175,6 +179,7 @@ static unsigned int iomem_read32be(const void __iomem *addr)
return __raw_readl(addr); return __raw_readl(addr);
} }
#ifdef CONFIG_64BIT
static u64 iomem_read64(const void __iomem *addr) static u64 iomem_read64(const void __iomem *addr)
{ {
return readq(addr); return readq(addr);
...@@ -184,6 +189,7 @@ static u64 iomem_read64be(const void __iomem *addr) ...@@ -184,6 +189,7 @@ static u64 iomem_read64be(const void __iomem *addr)
{ {
return __raw_readq(addr); return __raw_readq(addr);
} }
#endif
static void iomem_write8(u8 datum, void __iomem *addr) static void iomem_write8(u8 datum, void __iomem *addr)
{ {
...@@ -210,15 +216,17 @@ static void iomem_write32be(u32 datum, void __iomem *addr) ...@@ -210,15 +216,17 @@ static void iomem_write32be(u32 datum, void __iomem *addr)
__raw_writel(datum, addr); __raw_writel(datum, addr);
} }
#ifdef CONFIG_64BIT
static void iomem_write64(u64 datum, void __iomem *addr) static void iomem_write64(u64 datum, void __iomem *addr)
{ {
writel(datum, addr); writeq(datum, addr);
} }
static void iomem_write64be(u64 datum, void __iomem *addr) static void iomem_write64be(u64 datum, void __iomem *addr)
{ {
__raw_writel(datum, addr); __raw_writeq(datum, addr);
} }
#endif
static void iomem_read8r(const void __iomem *addr, void *dst, unsigned long count) static void iomem_read8r(const void __iomem *addr, void *dst, unsigned long count)
{ {
...@@ -274,15 +282,19 @@ static const struct iomap_ops iomem_ops = { ...@@ -274,15 +282,19 @@ static const struct iomap_ops iomem_ops = {
.read16be = iomem_read16be, .read16be = iomem_read16be,
.read32 = iomem_read32, .read32 = iomem_read32,
.read32be = iomem_read32be, .read32be = iomem_read32be,
#ifdef CONFIG_64BIT
.read64 = iomem_read64, .read64 = iomem_read64,
.read64be = iomem_read64be, .read64be = iomem_read64be,
#endif
.write8 = iomem_write8, .write8 = iomem_write8,
.write16 = iomem_write16, .write16 = iomem_write16,
.write16be = iomem_write16be, .write16be = iomem_write16be,
.write32 = iomem_write32, .write32 = iomem_write32,
.write32be = iomem_write32be, .write32be = iomem_write32be,
#ifdef CONFIG_64BIT
.write64 = iomem_write64, .write64 = iomem_write64,
.write64be = iomem_write64be, .write64be = iomem_write64be,
#endif
.read8r = iomem_read8r, .read8r = iomem_read8r,
.read16r = iomem_read16r, .read16r = iomem_read16r,
.read32r = iomem_read32r, .read32r = iomem_read32r,
...@@ -332,6 +344,7 @@ unsigned int ioread32be(const void __iomem *addr) ...@@ -332,6 +344,7 @@ unsigned int ioread32be(const void __iomem *addr)
return *((u32 *)addr); return *((u32 *)addr);
} }
#ifdef CONFIG_64BIT
u64 ioread64(const void __iomem *addr) u64 ioread64(const void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) if (unlikely(INDIRECT_ADDR(addr)))
...@@ -345,26 +358,7 @@ u64 ioread64be(const void __iomem *addr) ...@@ -345,26 +358,7 @@ u64 ioread64be(const void __iomem *addr)
return iomap_ops[ADDR_TO_REGION(addr)]->read64be(addr); return iomap_ops[ADDR_TO_REGION(addr)]->read64be(addr);
return *((u64 *)addr); return *((u64 *)addr);
} }
#endif
u64 ioread64_lo_hi(const void __iomem *addr)
{
u32 low, high;
low = ioread32(addr);
high = ioread32(addr + sizeof(u32));
return low + ((u64)high << 32);
}
u64 ioread64_hi_lo(const void __iomem *addr)
{
u32 low, high;
high = ioread32(addr + sizeof(u32));
low = ioread32(addr);
return low + ((u64)high << 32);
}
void iowrite8(u8 datum, void __iomem *addr) void iowrite8(u8 datum, void __iomem *addr)
{ {
...@@ -411,6 +405,7 @@ void iowrite32be(u32 datum, void __iomem *addr) ...@@ -411,6 +405,7 @@ void iowrite32be(u32 datum, void __iomem *addr)
} }
} }
#ifdef CONFIG_64BIT
void iowrite64(u64 datum, void __iomem *addr) void iowrite64(u64 datum, void __iomem *addr)
{ {
if (unlikely(INDIRECT_ADDR(addr))) { if (unlikely(INDIRECT_ADDR(addr))) {
...@@ -428,18 +423,7 @@ void iowrite64be(u64 datum, void __iomem *addr) ...@@ -428,18 +423,7 @@ void iowrite64be(u64 datum, void __iomem *addr)
*((u64 *)addr) = datum; *((u64 *)addr) = datum;
} }
} }
#endif
void iowrite64_lo_hi(u64 val, void __iomem *addr)
{
iowrite32(val, addr);
iowrite32(val >> 32, addr + sizeof(u32));
}
void iowrite64_hi_lo(u64 val, void __iomem *addr)
{
iowrite32(val >> 32, addr + sizeof(u32));
iowrite32(val, addr);
}
/* Repeating interfaces */ /* Repeating interfaces */
...@@ -544,19 +528,19 @@ EXPORT_SYMBOL(ioread16); ...@@ -544,19 +528,19 @@ EXPORT_SYMBOL(ioread16);
EXPORT_SYMBOL(ioread16be); EXPORT_SYMBOL(ioread16be);
EXPORT_SYMBOL(ioread32); EXPORT_SYMBOL(ioread32);
EXPORT_SYMBOL(ioread32be); EXPORT_SYMBOL(ioread32be);
#ifdef CONFIG_64BIT
EXPORT_SYMBOL(ioread64); EXPORT_SYMBOL(ioread64);
EXPORT_SYMBOL(ioread64be); EXPORT_SYMBOL(ioread64be);
EXPORT_SYMBOL(ioread64_lo_hi); #endif
EXPORT_SYMBOL(ioread64_hi_lo);
EXPORT_SYMBOL(iowrite8); EXPORT_SYMBOL(iowrite8);
EXPORT_SYMBOL(iowrite16); EXPORT_SYMBOL(iowrite16);
EXPORT_SYMBOL(iowrite16be); EXPORT_SYMBOL(iowrite16be);
EXPORT_SYMBOL(iowrite32); EXPORT_SYMBOL(iowrite32);
EXPORT_SYMBOL(iowrite32be); EXPORT_SYMBOL(iowrite32be);
#ifdef CONFIG_64BIT
EXPORT_SYMBOL(iowrite64); EXPORT_SYMBOL(iowrite64);
EXPORT_SYMBOL(iowrite64be); EXPORT_SYMBOL(iowrite64be);
EXPORT_SYMBOL(iowrite64_lo_hi); #endif
EXPORT_SYMBOL(iowrite64_hi_lo);
EXPORT_SYMBOL(ioread8_rep); EXPORT_SYMBOL(ioread8_rep);
EXPORT_SYMBOL(ioread16_rep); EXPORT_SYMBOL(ioread16_rep);
EXPORT_SYMBOL(ioread32_rep); EXPORT_SYMBOL(ioread32_rep);
......
...@@ -19,4 +19,6 @@ ...@@ -19,4 +19,6 @@
#define writel_be(__w, __addr) __raw_writel(__w, __addr) #define writel_be(__w, __addr) __raw_writel(__w, __addr)
#define writew_be(__l, __addr) __raw_writew(__l, __addr) #define writew_be(__l, __addr) __raw_writew(__l, __addr)
#include <asm-generic/io.h>
#endif #endif
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <asm/page.h> /* IO address mapping routines need this */ #include <asm/page.h> /* IO address mapping routines need this */
#include <asm/asi.h> #include <asm/asi.h>
#include <asm-generic/pci_iomap.h> #include <asm-generic/pci_iomap.h>
#define pci_iomap pci_iomap
/* BIO layer definitions. */ /* BIO layer definitions. */
extern unsigned long kern_base, kern_size; extern unsigned long kern_base, kern_size;
...@@ -239,38 +240,51 @@ static inline void outl(u32 l, unsigned long addr) ...@@ -239,38 +240,51 @@ static inline void outl(u32 l, unsigned long addr)
void outsb(unsigned long, const void *, unsigned long); void outsb(unsigned long, const void *, unsigned long);
void outsw(unsigned long, const void *, unsigned long); void outsw(unsigned long, const void *, unsigned long);
void outsl(unsigned long, const void *, unsigned long); void outsl(unsigned long, const void *, unsigned long);
#define outsb outsb
#define outsw outsw
#define outsl outsl
void insb(unsigned long, void *, unsigned long); void insb(unsigned long, void *, unsigned long);
void insw(unsigned long, void *, unsigned long); void insw(unsigned long, void *, unsigned long);
void insl(unsigned long, void *, unsigned long); void insl(unsigned long, void *, unsigned long);
#define insb insb
#define insw insw
#define insl insl
static inline void readsb(void __iomem *port, void *buf, unsigned long count) static inline void readsb(void __iomem *port, void *buf, unsigned long count)
{ {
insb((unsigned long __force)port, buf, count); insb((unsigned long __force)port, buf, count);
} }
#define readsb readsb
static inline void readsw(void __iomem *port, void *buf, unsigned long count) static inline void readsw(void __iomem *port, void *buf, unsigned long count)
{ {
insw((unsigned long __force)port, buf, count); insw((unsigned long __force)port, buf, count);
} }
#define readsw readsw
static inline void readsl(void __iomem *port, void *buf, unsigned long count) static inline void readsl(void __iomem *port, void *buf, unsigned long count)
{ {
insl((unsigned long __force)port, buf, count); insl((unsigned long __force)port, buf, count);
} }
#define readsl readsl
static inline void writesb(void __iomem *port, const void *buf, unsigned long count) static inline void writesb(void __iomem *port, const void *buf, unsigned long count)
{ {
outsb((unsigned long __force)port, buf, count); outsb((unsigned long __force)port, buf, count);
} }
#define writesb writesb
static inline void writesw(void __iomem *port, const void *buf, unsigned long count) static inline void writesw(void __iomem *port, const void *buf, unsigned long count)
{ {
outsw((unsigned long __force)port, buf, count); outsw((unsigned long __force)port, buf, count);
} }
#define writesw writesw
static inline void writesl(void __iomem *port, const void *buf, unsigned long count) static inline void writesl(void __iomem *port, const void *buf, unsigned long count)
{ {
outsl((unsigned long __force)port, buf, count); outsl((unsigned long __force)port, buf, count);
} }
#define writesl writesl
#define ioread8_rep(p,d,l) readsb(p,d,l) #define ioread8_rep(p,d,l) readsb(p,d,l)
#define ioread16_rep(p,d,l) readsw(p,d,l) #define ioread16_rep(p,d,l) readsw(p,d,l)
...@@ -344,6 +358,7 @@ static inline void memset_io(volatile void __iomem *dst, int c, __kernel_size_t ...@@ -344,6 +358,7 @@ static inline void memset_io(volatile void __iomem *dst, int c, __kernel_size_t
d++; d++;
} }
} }
#define memset_io memset_io
static inline void sbus_memcpy_fromio(void *dst, const volatile void __iomem *src, static inline void sbus_memcpy_fromio(void *dst, const volatile void __iomem *src,
__kernel_size_t n) __kernel_size_t n)
...@@ -369,6 +384,7 @@ static inline void memcpy_fromio(void *dst, const volatile void __iomem *src, ...@@ -369,6 +384,7 @@ static inline void memcpy_fromio(void *dst, const volatile void __iomem *src,
src++; src++;
} }
} }
#define memcpy_fromio memcpy_fromio
static inline void sbus_memcpy_toio(volatile void __iomem *dst, const void *src, static inline void sbus_memcpy_toio(volatile void __iomem *dst, const void *src,
__kernel_size_t n) __kernel_size_t n)
...@@ -395,6 +411,7 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, ...@@ -395,6 +411,7 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src,
d++; d++;
} }
} }
#define memcpy_toio memcpy_toio
#ifdef __KERNEL__ #ifdef __KERNEL__
...@@ -412,7 +429,9 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size) ...@@ -412,7 +429,9 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
static inline void __iomem *ioremap_np(unsigned long offset, unsigned long size) static inline void __iomem *ioremap_np(unsigned long offset, unsigned long size)
{ {
return NULL; return NULL;
} }
#define ioremap_np ioremap_np
static inline void iounmap(volatile void __iomem *addr) static inline void iounmap(volatile void __iomem *addr)
{ {
...@@ -432,10 +451,13 @@ static inline void iounmap(volatile void __iomem *addr) ...@@ -432,10 +451,13 @@ static inline void iounmap(volatile void __iomem *addr)
/* Create a virtual mapping cookie for an IO port range */ /* Create a virtual mapping cookie for an IO port range */
void __iomem *ioport_map(unsigned long port, unsigned int nr); void __iomem *ioport_map(unsigned long port, unsigned int nr);
void ioport_unmap(void __iomem *); void ioport_unmap(void __iomem *);
#define ioport_map ioport_map
#define ioport_unmap ioport_unmap
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
struct pci_dev; struct pci_dev;
void pci_iounmap(struct pci_dev *dev, void __iomem *); void pci_iounmap(struct pci_dev *dev, void __iomem *);
#define pci_iounmap pci_iounmap
static inline int sbus_can_dma_64bit(void) static inline int sbus_can_dma_64bit(void)
{ {
......
...@@ -28,6 +28,12 @@ ...@@ -28,6 +28,12 @@
#include <linux/dma-map-ops.h> #include <linux/dma-map-ops.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <linux/iommu-helper.h> #include <linux/iommu-helper.h>
/*
* The semantics of 64 register access on 32bit systems can't be guaranteed
* by the C standard, we hope the _lo_hi() macros defining readq and writeq
* here will behave as expected.
*/
#include <linux/io-64-nonatomic-lo-hi.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <asm/io.h> #include <asm/io.h>
......
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
#include <uapi/asm-generic/signal.h> #include <uapi/asm-generic/signal.h>
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#ifdef SA_RESTORER
#endif
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
#undef __HAVE_ARCH_SIG_BITOPS #undef __HAVE_ARCH_SIG_BITOPS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment