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