diff options
author | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-12 04:50:12 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-12 04:50:12 +0100 |
commit | c630ae9a173a2154177f47780e8d1e2cab6532a8 (patch) | |
tree | b0857995d20ca4a6bb9414a894c50007976f2095 /stage3/io.h | |
parent | 146c09dd040150dfd81c1f611b01a2a7fc5e5ddc (diff) | |
download | cuddles-c630ae9a173a2154177f47780e8d1e2cab6532a8.tar.xz |
add io.h
Diffstat (limited to 'stage3/io.h')
-rw-r--r-- | stage3/io.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/stage3/io.h b/stage3/io.h new file mode 100644 index 0000000..1265043 --- /dev/null +++ b/stage3/io.h @@ -0,0 +1,61 @@ +#ifndef IO_H +#define IO_H + +#include "def.h" + +static inline void outb(u16 port, u8 val) +{ + asm volatile("outb %0, %1" : : "a"(val), "Nd"(port) : "memory"); +} + +static inline u8 inb(u16 port) +{ + u8 val; + asm volatile("inb %1, %0" : "=a"(val) : "dN"(port) : "memory"); + return val; +} + +static inline void outw(u16 port, u16 val) +{ + asm volatile("outw %0, %1" : : "a"(val), "Nd"(port) : "memory"); +} + +static inline u16 inw(u16 port) +{ + u16 val; + asm volatile("inw %1, %0" : "=a"(val) : "dN"(port) : "memory"); + return val; +} + +static inline void outl(u16 port, u32 val) +{ + asm volatile("outl %0, %1" : : "a"(val), "Nd"(port) : "memory"); +} + +static inline u32 inl(u16 port) +{ + u32 val; + asm volatile("inl %1, %0" : "=a"(val) : "dN"(port) : "memory"); + return val; +} + +static inline void hlt() +{ + asm volatile("hlt"); +} + +typedef enum { + IO_PIC1_CTRL = 0x20, + IO_PIC1_DATA = 0x21, + IO_PIC2_CTRL = 0xA0, + IO_PIC2_DATA = 0xA1, + IO_PS2_DATA = 0x60, + IO_PS2_CTRL = 0x64, +} io_port; + +static inline void io_wait(void) +{ + outb(0x80, 0); +} + +#endif |