20 #define PREP_ISA_IO_BASE 0x80000000 21 #define PREP_ISA_MEM_BASE 0xc0000000 22 #define PREP_PCI_DRAM_OFFSET 0x80000000 24 #define CHRP_ISA_IO_BASE 0xfe000000 25 #define CHRP_ISA_MEM_BASE 0xfd000000 26 #define CHRP_PCI_DRAM_OFFSET 0x00000000 41 #define inb(port) in_8((uint8_t *)((port)+_IO_BASE)) 42 #define outb(val, port) out_8((uint8_t *)((port)+_IO_BASE), (val)) 43 #define inw(port) in_le16((uint16_t *)((port)+_IO_BASE)) 44 #define outw(val, port) out_le16((uint16_t *)((port)+_IO_BASE), (val)) 45 #define inl(port) in_le32((uint32_t *)((port)+_IO_BASE)) 46 #define outl(val, port) out_le32((uint32_t *)((port)+_IO_BASE), (val)) 53 static inline void eieio(
void)
62 #define iobarrier_rw() eieio() 63 #define iobarrier_r() eieio() 64 #define iobarrier_w() eieio() 69 static inline uint8_t in_8(
const volatile uint8_t *addr)
73 __asm__ __volatile__(
"lbz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
77 static inline void out_8(
volatile uint8_t *addr, uint8_t val)
79 __asm__ __volatile__(
"stb%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));
82 static inline uint16_t in_le16(
const volatile uint16_t *addr)
86 __asm__ __volatile__(
"lhbrx %0,0,%1; eieio" :
"=r" (ret) :
87 "r" (addr),
"m" (*addr));
91 static inline uint16_t in_be16(
const volatile uint16_t *addr)
95 __asm__ __volatile__(
"lhz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
99 static inline void out_le16(
volatile uint16_t *addr, uint16_t val)
101 __asm__ __volatile__(
"sthbrx %1,0,%2; eieio" :
"=m" (*addr) :
102 "r" (val),
"r" (addr));
105 static inline void out_be16(
volatile uint16_t *addr, uint16_t val)
107 __asm__ __volatile__(
"sth%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));
110 static inline uint32_t in_le32(
const volatile uint32_t *addr)
114 __asm__ __volatile__(
"lwbrx %0,0,%1; eieio" :
"=r" (ret) :
115 "r" (addr),
"m" (*addr));
119 static inline uint32_t in_be32(
const volatile uint32_t *addr)
123 __asm__ __volatile__(
"lwz%U1%X1 %0,%1; eieio" :
"=r" (ret) :
"m" (*addr));
127 static inline void out_le32(
volatile uint32_t *addr, uint32_t val)
129 __asm__ __volatile__(
"stwbrx %1,0,%2; eieio" :
"=m" (*addr) :
130 "r" (val),
"r" (addr));
133 static inline void out_be32(
volatile uint32_t *addr, uint32_t val)
135 __asm__ __volatile__(
"stw%U0%X0 %1,%0; eieio" :
"=m" (*addr) :
"r" (val));
register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__("g6")
The pointer to the current per-CPU control is available via register g6.