1 1.1.8.2 yamt /* $NetBSD: io.c,v 1.1.8.2 2008/01/21 09:39:03 yamt Exp $ */ 2 1.1.8.2 yamt 3 1.1.8.2 yamt 4 1.1.8.2 yamt #include <lib/libsa/stand.h> 5 1.1.8.2 yamt #include <sys/bswap.h> 6 1.1.8.2 yamt #include "boot.h" 7 1.1.8.2 yamt 8 1.1.8.2 yamt #define POW_IOCC_SEG 0x820C00E0 9 1.1.8.2 yamt #define IOCC_SEG 0x82000080 10 1.1.8.2 yamt #define PSL_DR (1<<4) 11 1.1.8.2 yamt 12 1.1.8.2 yamt volatile u_char *MCA_io = (u_char *)0xe0000000; 13 1.1.8.2 yamt 14 1.1.8.2 yamt /* hardcode for now */ 15 1.1.8.2 yamt int 16 1.1.8.2 yamt setup_iocc(void) 17 1.1.8.2 yamt { 18 1.1.8.2 yamt register_t savemsr, msr; 19 1.1.8.2 yamt 20 1.1.8.2 yamt __asm volatile ("mfmsr %0" : "=r"(savemsr)); 21 1.1.8.2 yamt msr = savemsr & ~PSL_DR; 22 1.1.8.2 yamt __asm volatile ("mtmsr %0" : : "r"(msr)); 23 1.1.8.2 yamt 24 1.1.8.2 yamt __asm volatile ("mtsr 14,%0" : : "r"(IOCC_SEG)); 25 1.1.8.2 yamt __asm volatile ("mtmsr %0" : : "r"(msr|PSL_DR)); 26 1.1.8.2 yamt __asm volatile ("isync"); 27 1.1.8.2 yamt __asm volatile ("mtmsr %0;isync" : : "r"(savemsr)); 28 1.1.8.2 yamt return 1; 29 1.1.8.2 yamt } 30 1.1.8.2 yamt 31 1.1.8.2 yamt void 32 1.1.8.2 yamt outb(int port, char val) 33 1.1.8.2 yamt { 34 1.1.8.2 yamt 35 1.1.8.2 yamt MCA_io[port] = val; 36 1.1.8.2 yamt } 37 1.1.8.2 yamt 38 1.1.8.2 yamt inline void 39 1.1.8.2 yamt outw(int port, u_int16_t val) 40 1.1.8.2 yamt { 41 1.1.8.2 yamt outb(port, val>>8); 42 1.1.8.2 yamt outb(port+1, val); 43 1.1.8.2 yamt } 44 1.1.8.2 yamt 45 1.1.8.2 yamt u_char 46 1.1.8.2 yamt inb(int port) 47 1.1.8.2 yamt { 48 1.1.8.2 yamt 49 1.1.8.2 yamt return (MCA_io[port]); 50 1.1.8.2 yamt } 51