Home | History | Annotate | Line # | Download | only in boot
      1 /*	$NetBSD: io.c,v 1.1 2007/12/17 19:09:50 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 
     12 volatile u_char *MCA_io  = (u_char *)0xe0000000;
     13 
     14 /* hardcode for now */
     15 int
     16 setup_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 
     31 void
     32 outb(int port, char val)
     33 {
     34 
     35 	MCA_io[port] = val;
     36 }
     37 
     38 inline void
     39 outw(int port, u_int16_t val)
     40 {
     41         outb(port, val>>8);
     42         outb(port+1, val);
     43 }
     44 
     45 u_char
     46 inb(int port)
     47 {
     48 
     49 	return (MCA_io[port]);
     50 }
     51