summaryrefslogtreecommitdiff
path: root/src/include/io.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/io.h')
-rw-r--r--src/include/io.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/include/io.h b/src/include/io.h
new file mode 100644
index 0000000..fb19bdc
--- /dev/null
+++ b/src/include/io.h
@@ -0,0 +1,38 @@
+#ifndef io_header
+#define io_header
+
+#include <stdint.h>
+#include <printf.h>
+
+static inline void outb(uint16_t port, uint8_t value) {
+ asm volatile("outb %1, %0" :: "a"(value), "Nd"(port));
+}
+
+static inline uint8_t inb(uint16_t port) {
+ uint8_t ret;
+ asm volatile("inb %0, %1" : "=a"(ret) : "Nd"(port));
+ return(ret);
+}
+
+static inline void io_wait() {
+ asm volatile("outb 0x80, %%al"::"a"(0));
+}
+
+static inline uint64_t read_tsc() {
+ uint64_t time;
+ asm volatile("xor rax, rax\n"
+ "rdtsc\n"
+ "shl rdx, 32\n"
+ "or rax, rdx\n"
+ "mov %0, rax\n"
+ :"=r"(time):);
+ return time;
+
+}
+
+void outb_wait(uint16_t port, uint8_t value);
+void read_msr(uint32_t addr, uint64_t *value);
+void write_msr(uint32_t addr, uint64_t value);
+void hlt();
+uint64_t get_rip();
+#endif