1 #include "u.h"
2 #include "../port/lib.h"
3 #include "mem.h"
4 #include "dat.h"
5 #include "fns.h"
6 #include "io.h"
7 #include "../port/error.h"
8
9 #define KIOP(port) KADDR(PHYSPCIIO+(port))
10
11 int
inb(ulong p)12 inb(ulong p)
13 {
14 return *(uchar*)KIOP(p);
15 }
16
17 int
ins(ulong p)18 ins(ulong p)
19 {
20 return *(ushort*)KIOP(p);
21 }
22
23 ulong
inl(ulong p)24 inl(ulong p)
25 {
26 return *(ulong*)KIOP(p);
27 }
28
29 void
outb(ulong p,int v)30 outb(ulong p, int v)
31 {
32 *(uchar*)KIOP(p) = v;
33 }
34
35 void
outs(ulong p,int v)36 outs(ulong p, int v)
37 {
38 *(ushort*)KIOP(p) = v;
39 }
40
41 void
outl(ulong p,ulong v)42 outl(ulong p, ulong v)
43 {
44 *(ulong*)KIOP(p) = v;
45 }
46
47 void
inss(ulong p,void * buf,int ns)48 inss(ulong p, void* buf, int ns)
49 {
50 ushort *addr;
51
52 addr = (ushort*)buf;
53 for(;ns > 0; ns--)
54 *addr++ = *(ushort*)KIOP(p);
55 }
56
57 void
outss(ulong p,void * buf,int ns)58 outss(ulong p, void* buf, int ns)
59 {
60 ushort *addr;
61
62 addr = (ushort*)buf;
63 for(;ns > 0; ns--)
64 *(ushort*)KIOP(p) = *addr++;
65 }
66
67 void
insb(ulong p,void * buf,int ns)68 insb(ulong p, void* buf, int ns)
69 {
70 uchar *addr;
71
72 addr = (uchar*)buf;
73 for(;ns > 0; ns--)
74 *addr++ = *(uchar*)KIOP(p);
75 }
76
77 void
outsb(ulong p,void * buf,int ns)78 outsb(ulong p, void* buf, int ns)
79 {
80 uchar *addr;
81
82 addr = (uchar*)buf;
83 for(;ns > 0; ns--)
84 *(uchar*)KIOP(p) = *addr++;
85 }
86