patch-2.3.32 linux/include/asm-arm/arch-ebsa285/io.h
Next file: linux/include/asm-arm/arch-nexuspci/io.h
Previous file: linux/include/asm-arm/arch-ebsa285/hardware.h
Back to the patch index
Back to the overall index
- Lines: 152
- Date:
Mon Dec 13 16:26:27 1999
- Orig file:
v2.3.31/linux/include/asm-arm/arch-ebsa285/io.h
- Orig date:
Fri Oct 22 13:21:53 1999
diff -u --recursive --new-file v2.3.31/linux/include/asm-arm/arch-ebsa285/io.h linux/include/asm-arm/arch-ebsa285/io.h
@@ -10,92 +10,91 @@
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
-#include <asm/dec21285.h>
+#define IO_SPACE_LIMIT 0xffff
/*
- * This architecture does not require any delayed IO, and
- * has the constant-optimised IO
+ * Translation of various region addresses to virtual addresses
*/
-#undef ARCH_IO_DELAY
-#define ARCH_READWRITE
+#define __io_pci(a) (PCIO_BASE + (a))
+#if 0
+#define __mem_pci(a) ((unsigned long)(a))
+#define __mem_isa(a) (PCIMEM_BASE + (unsigned long)(a))
+#else
+
+extern __inline__ unsigned long ___mem_pci(unsigned long a)
+{
+ if (a <= 0xc0000000 || a >= 0xe0000000)
+ BUG();
+ return a;
+}
-#define __pci_io_addr(x) (PCIO_BASE + (unsigned int)(x))
+extern __inline__ unsigned long ___mem_isa(unsigned long a)
+{
+ if (a >= 16*1048576)
+ BUG();
+ return PCIMEM_BASE + a;
+}
+#define __mem_pci(a) ___mem_pci((unsigned long)(a))
+#define __mem_isa(a) ___mem_isa((unsigned long)(a))
+#endif
-#define __inb(p) (*(volatile unsigned char *)__pci_io_addr(p))
-#define __inl(p) (*(volatile unsigned long *)__pci_io_addr(p))
+/* the following macro is depreciated */
+#define __ioaddr(p) __io_pci(p)
+
+/*
+ * Generic virtual read/write
+ */
+#define __arch_getb(a) (*(volatile unsigned char *)(a))
+#define __arch_getl(a) (*(volatile unsigned long *)(a))
-extern __inline__ unsigned int __inw(unsigned int port)
+extern __inline__ unsigned int __arch_getw(unsigned long a)
{
unsigned int value;
- __asm__ __volatile__(
- "ldr%?h %0, [%1, %2] @ inw"
- : "=&r" (value)
- : "r" (PCIO_BASE), "r" (port));
+ __asm__ __volatile__("ldr%?h %0, [%1, #0] @ getw"
+ : "=&r" (value)
+ : "r" (a));
return value;
}
-#define __outb(v,p) (*(volatile unsigned char *)__pci_io_addr(p) = (v))
-#define __outl(v,p) (*(volatile unsigned long *)__pci_io_addr(p) = (v))
+#define __arch_putb(v,a) (*(volatile unsigned char *)(a) = (v))
+#define __arch_putl(v,a) (*(volatile unsigned long *)(a) = (v))
-extern __inline__ void __outw(unsigned int value, unsigned int port)
+extern __inline__ void __arch_putw(unsigned int value, unsigned long a)
{
- __asm__ __volatile__(
- "str%?h %0, [%1, %2] @ outw"
- : : "r" (value), "r" (PCIO_BASE), "r" (port));
+ __asm__ __volatile__("str%?h %0, [%1, #0] @ putw"
+ : : "r" (value), "r" (a));
}
-#define __ioaddr(p) __pci_io_addr(p)
+#define inb(p) __arch_getb(__io_pci(p))
+#define inw(p) __arch_getw(__io_pci(p))
+#define inl(p) __arch_getl(__io_pci(p))
+
+#define outb(v,p) __arch_putb(v,__io_pci(p))
+#define outw(v,p) __arch_putw(v,__io_pci(p))
+#define outl(v,p) __arch_putl(v,__io_pci(p))
+
+#include <asm/dec21285.h>
/*
* ioremap support - validate a PCI memory address,
* and convert a PCI memory address to a physical
* address for the page tables.
*/
-#define valid_ioaddr(iomem,size) ((iomem) < 0x80000000 && (iomem) + (size) <= 0x80000000)
-#define io_to_phys(iomem) ((iomem) + DC21285_PCI_MEM)
-
-/*
- * Fudge up IO addresses by this much. Once we're confident that nobody
- * is using read*() and so on with addresses they didn't get from ioremap
- * this can go away.
- */
-#define IO_FUDGE_FACTOR PCIMEM_BASE
-
-#define __pci_mem_addr(x) ((void *)(IO_FUDGE_FACTOR + (unsigned long)(x)))
+#define valid_ioaddr(off,sz) ((off) < 0x80000000 && (off) + (sz) <= 0x80000000)
+#define io_to_phys(off) ((off) + DC21285_PCI_MEM)
/*
* ioremap takes a PCI memory address, as specified in
* linux/Documentation/IO-mapping.txt
*/
-#define ioremap(iomem_addr,size) \
-({ \
- unsigned long _addr = (iomem_addr), _size = (size); \
- void *_ret = NULL; \
- if (valid_ioaddr(_addr, _size)) { \
- _addr = io_to_phys(_addr); \
- _ret = __ioremap(_addr, _size, 0); \
- if (_ret) \
- _ret = (void *)((int) _ret - IO_FUDGE_FACTOR); \
- } \
- _ret; })
-
-#define ioremap_nocache(iomem_addr,size) ioremap((iomem_addr),(size))
-
-#define iounmap(_addr) do { __iounmap(__pci_mem_addr((_addr))); } while (0)
-
-#define readb(addr) (*(volatile unsigned char *)__pci_mem_addr(addr))
-#define readw(addr) (*(volatile unsigned short *)__pci_mem_addr(addr))
-#define readl(addr) (*(volatile unsigned long *)__pci_mem_addr(addr))
-
-#define writeb(b,addr) (*(volatile unsigned char *)__pci_mem_addr(addr) = (b))
-#define writew(b,addr) (*(volatile unsigned short *)__pci_mem_addr(addr) = (b))
-#define writel(b,addr) (*(volatile unsigned long *)__pci_mem_addr(addr) = (b))
-
-#define memset_io(a,b,c) memset(__pci_mem_addr(a),(b),(c))
-#define memcpy_fromio(a,b,c) memcpy((a),__pci_mem_addr(b),(c))
-#define memcpy_toio(a,b,c) memcpy(__pci_mem_addr(a),(b),(c))
-
-#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__pci_mem_addr(b),(c),(d))
+#define __arch_ioremap(off,size,nocache) \
+({ \
+ unsigned long _off = (off), _size = (size); \
+ void *_ret = NULL; \
+ if (valid_ioaddr(_off, _size)) \
+ _ret = __ioremap(io_to_phys(_off), _size, 0); \
+ _ret; \
+})
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)