22#define PREP_ISA_IO_BASE 0x80000000
23#define PREP_ISA_MEM_BASE 0xc0000000
24#define PREP_PCI_DRAM_OFFSET 0x80000000
26#define CHRP_ISA_IO_BASE 0xfe000000
27#define CHRP_ISA_MEM_BASE 0xfd000000
28#define CHRP_PCI_DRAM_OFFSET 0x00000000
43#define inb(port) in_8((uint8_t *)((port)+_IO_BASE))
44#define outb(val, port) out_8((uint8_t *)((port)+_IO_BASE), (val))
45#define inw(port) in_le16((uint16_t *)((port)+_IO_BASE))
46#define outw(val, port) out_le16((uint16_t *)((port)+_IO_BASE), (val))
47#define inl(port) in_le32((uint32_t *)((port)+_IO_BASE))
48#define outl(val, port) out_le32((uint32_t *)((port)+_IO_BASE), (val))
55static inline void io_eieio(
void)
57 __asm__ __volatile__ (
"eieio");
64#define iobarrier_rw() io_eieio()
65#define iobarrier_r() io_eieio()
66#define iobarrier_w() io_eieio()
71static inline uint8_t in_8(
const volatile uint8_t *addr)
75 __asm__ __volatile__(
"lbz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
79static inline void out_8(
volatile uint8_t *addr, uint8_t val)
81 __asm__ __volatile__(
"stb%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));
84static inline uint16_t in_le16(
const volatile uint16_t *addr)
88 __asm__ __volatile__(
"lhbrx %0,0,%1; eieio" :
"=r" (ret) :
89 "r" (addr),
"m" (*addr));
93static inline uint16_t in_be16(
const volatile uint16_t *addr)
97 __asm__ __volatile__(
"lhz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
101static inline void out_le16(
volatile uint16_t *addr, uint16_t val)
103 __asm__ __volatile__(
"sthbrx %1,0,%2; eieio" :
"=m" (*addr) :
104 "r" (val),
"r" (addr));
107static inline void out_be16(
volatile uint16_t *addr, uint16_t val)
109 __asm__ __volatile__(
"sth%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));
113static inline uint32_t in_le32(
const volatile uint32_t *addr)
117 __asm__ __volatile__(
"lwbrx %0,0,%1; eieio" :
"=r" (ret) :
118 "r" (addr),
"m" (*addr));
124static inline uint32_t in_be32(
const volatile uint32_t *addr)
128 __asm__ __volatile__(
"lwz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
134static inline void out_le32(
volatile uint32_t *addr, uint32_t val)
136 __asm__ __volatile__(
"stwbrx %1,0,%2; eieio" :
"=m" (*addr) :
137 "r" (val),
"r" (addr));
142static inline void out_be32(
volatile uint32_t *addr, uint32_t val)
144 __asm__ __volatile__(
"stw%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));