xref: /inferno-os/os/manga/inb.c (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
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