summaryrefslogtreecommitdiff
path: root/os/manga/inb.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/manga/inb.c')
-rw-r--r--os/manga/inb.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/os/manga/inb.c b/os/manga/inb.c
new file mode 100644
index 00000000..26c45825
--- /dev/null
+++ b/os/manga/inb.c
@@ -0,0 +1,85 @@
+#include "u.h"
+#include "../port/lib.h"
+#include "mem.h"
+#include "dat.h"
+#include "fns.h"
+#include "io.h"
+#include "../port/error.h"
+
+#define KIOP(port) KADDR(PHYSPCIIO+(port))
+
+int
+inb(ulong p)
+{
+ return *(uchar*)KIOP(p);
+}
+
+int
+ins(ulong p)
+{
+ return *(ushort*)KIOP(p);
+}
+
+ulong
+inl(ulong p)
+{
+ return *(ulong*)KIOP(p);
+}
+
+void
+outb(ulong p, int v)
+{
+ *(uchar*)KIOP(p) = v;
+}
+
+void
+outs(ulong p, int v)
+{
+ *(ushort*)KIOP(p) = v;
+}
+
+void
+outl(ulong p, ulong v)
+{
+ *(ulong*)KIOP(p) = v;
+}
+
+void
+inss(ulong p, void* buf, int ns)
+{
+ ushort *addr;
+
+ addr = (ushort*)buf;
+ for(;ns > 0; ns--)
+ *addr++ = *(ushort*)KIOP(p);
+}
+
+void
+outss(ulong p, void* buf, int ns)
+{
+ ushort *addr;
+
+ addr = (ushort*)buf;
+ for(;ns > 0; ns--)
+ *(ushort*)KIOP(p) = *addr++;
+}
+
+void
+insb(ulong p, void* buf, int ns)
+{
+ uchar *addr;
+
+ addr = (uchar*)buf;
+ for(;ns > 0; ns--)
+ *addr++ = *(uchar*)KIOP(p);
+}
+
+void
+outsb(ulong p, void* buf, int ns)
+{
+ uchar *addr;
+
+ addr = (uchar*)buf;
+ for(;ns > 0; ns--)
+ *(uchar*)KIOP(p) = *addr++;
+}