summaryrefslogtreecommitdiff
path: root/kernel/x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/x86.h')
-rw-r--r--kernel/x86.h43
1 files changed, 8 insertions, 35 deletions
diff --git a/kernel/x86.h b/kernel/x86.h
index 1f2179d..425ab38 100644
--- a/kernel/x86.h
+++ b/kernel/x86.h
@@ -3,40 +3,13 @@
#include "kernel.h"
-void x86_outb(int port, uint8_t data)
-{
- __asm __volatile("outb %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint8_t x86_inb(int port)
-{
- uint8_t data;
- __asm __volatile("inb %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
-
-void x86_outw(int port, uint16_t data)
-{
- __asm __volatile("outw %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint16_t x86_inw(int port)
-{
- uint16_t data;
- __asm __volatile("inw %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
-
-void x86_outl(int port, uint32_t data)
-{
- __asm __volatile("outl %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint32_t x86_inl(int port)
-{
- uint32_t data;
- __asm __volatile("inl %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
+#define X86_IRQ_BEGIN asm("cli\npusha");
+#define X86_IRQ_END asm("mov $0x20, %al\nout %al, $0x20\npopa\nsti\nleave\niret");
+void x86_outb(int port, uint8_t data);
+uint8_t x86_inb(int port);
+void x86_outw(int port, uint16_t data);
+uint16_t x86_inw(int port);
+void x86_outl(int port, uint32_t data);
+uint32_t x86_inl(int port);
#endif