|
|
|
/*
|
|
|
|
* linux/include/asm-arm/arch-shark/io.h
|
|
|
|
*
|
|
|
|
* by Alexander Schulz
|
|
|
|
*
|
|
|
|
* derived from:
|
|
|
|
* linux/include/asm-arm/arch-ebsa110/io.h
|
|
|
|
* Copyright (C) 1997,1998 Russell King
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __ASM_ARM_ARCH_IO_H
|
|
|
|
#define __ASM_ARM_ARCH_IO_H
|
|
|
|
|
|
|
|
#include <asm/hardware.h>
|
|
|
|
|
|
|
|
#define IO_SPACE_LIMIT 0xffffffff
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We use two different types of addressing - PC style addresses, and ARM
|
|
|
|
* addresses. PC style accesses the PC hardware with the normal PC IO
|
|
|
|
* addresses, eg 0x3f8 for serial#1. ARM addresses are 0x80000000+
|
|
|
|
* and are translated to the start of IO.
|
|
|
|
*/
|
|
|
|
#define __PORT_PCIO(x) (!((x) & 0x80000000))
|
|
|
|
|
|
|
|
#define __io(a) ((void __iomem *)(PCIO_BASE + (a)))
|
|
|
|
|
|
|
|
|
|
|
|
static inline unsigned int __ioaddr (unsigned int port) \
|
|
|
|
{ \
|
|
|
|
if (__PORT_PCIO(port)) \
|
|
|
|
return (unsigned int)(PCIO_BASE + (port)); \
|
|
|
|
else \
|
|
|
|
return (unsigned int)(IO_BASE + (port)); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define __mem_pci(addr) (addr)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Translated address IO functions
|
|
|
|
*
|
|
|
|
* IO address has already been translated to a virtual address
|
|
|
|
*/
|
|
|
|
#define outb_t(v,p) \
|
|
|
|
(*(volatile unsigned char *)(p) = (v))
|
|
|
|
|
|
|
|
#define inb_t(p) \
|
|
|
|
(*(volatile unsigned char *)(p))
|
|
|
|
|
|
|
|
#define outl_t(v,p) \
|
|
|
|
(*(volatile unsigned long *)(p) = (v))
|
|
|
|
|
|
|
|
#define inl_t(p) \
|
|
|
|
(*(volatile unsigned long *)(p))
|
|
|
|
|
|
|
|
#endif
|