]> pd.if.org Git - zos/commitdiff
ioport assembly routines
authorNathan Wagner <nw@hydaspes.if.org>
Tue, 25 Oct 2016 01:30:13 +0000 (20:30 -0500)
committerNathan Wagner <nw@hydaspes.if.org>
Tue, 25 Oct 2016 01:40:31 +0000 (20:40 -0500)
ioport.h [new file with mode: 0644]
ioport.s [new file with mode: 0644]

diff --git a/ioport.h b/ioport.h
new file mode 100644 (file)
index 0000000..a1ba6c6
--- /dev/null
+++ b/ioport.h
@@ -0,0 +1,21 @@
+#ifndef IOPORT_H_
+#define IOPORT_H_
+
+#include <stdint.h>
+
+uint8_t outport8(uint16_t port, uint8_t value) ;
+uint16_t outport16(uint16_t port, uint16_t value) ;
+uint32_t outport32(uint16_t port, uint32_t value) ;
+uint8_t inport8(uint16_t port) ;
+uint16_t inport16(uint16_t port) ;
+uint32_t inport32(uint16_t port) ;
+
+/* TODO use int, uint32_t ? */
+void outport_buf8(uint64_t bufelems, uint8_t *buf, uint16_t port);
+void outport_buf16(uint64_t bufelems, uint16_t *buf, uint16_t port);
+void outport_buf32(uint64_t bufelems, uint32_t *buf, uint16_t port);
+void inport_buf8(uint64_t bufelems, uint8_t *buf, uint16_t port);
+void inport_buf16(uint64_t bufelems, uint16_t *buf, uint16_t port);
+void inport_buf32(uint64_t bufelems, uint32_t *buf, uint16_t port);
+
+#endif
diff --git a/ioport.s b/ioport.s
new file mode 100644 (file)
index 0000000..7e15f43
--- /dev/null
+++ b/ioport.s
@@ -0,0 +1,88 @@
+global outport8:function
+global outport16:function
+global outport32:function
+global inport8:function
+global inport16:function
+global inport32:function
+global outport_buf8:function
+global outport_buf16:function
+global outport_buf32:function
+global inport_buf8:function
+global inport_buf16:function
+global inport_buf32:function
+
+; rdi = buf len
+; rsi = buffer address
+; rdx = port addr
+
+inport_buf8:
+       mov rcx, rdi
+       cld
+       rep insb
+       ret
+
+inport_buf16:
+       mov rcx, rdi
+       cld
+       rep insw
+       ret
+
+inport_buf32:
+       mov rcx, rdi
+       cld
+       rep insd
+       ret
+
+outport_buf8:
+       mov rcx, rdi
+       cld
+       rep outsb
+       ret
+
+outport_buf16:
+       mov rcx, rdi
+       cld
+       rep outsw
+       ret
+
+outport_buf32:
+       mov rcx, rdi
+       cld
+       rep outsd
+       ret
+
+outport8:
+       mov rdx, rdi
+       mov rax, rsi
+       and rax, 0xff
+       out dx, al
+       ret
+
+outport16:
+       mov rdx, rdi
+       mov rax, rsi
+       and rax, 0xffff
+       out dx, ax
+       ret
+
+outport32:
+       mov rdx, rdi
+       mov rax, rsi
+       and rax, 0xffffffff
+       out dx, eax
+       ret
+
+inport8:
+       mov rdx, rdi
+       in al, dx
+       ret
+
+inport16:
+       mov rdx, rdi
+       in ax, dx
+       ret
+
+inport32:
+       mov rdx, rdi
+       in eax, dx
+       ret