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