From 34f9912a1dfc1726a105e50c99ca9476f4095e2b Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 24 Feb 2023 12:39:38 +0200 Subject: [PATCH] Kernel: Add IO functions inl, outl, and ins{b,w,l} to read into buffer --- kernel/include/kernel/IO.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/kernel/include/kernel/IO.h b/kernel/include/kernel/IO.h index 711953e4..81eafe12 100644 --- a/kernel/include/kernel/IO.h +++ b/kernel/include/kernel/IO.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace IO { @@ -29,6 +30,33 @@ namespace IO return ret; } + static inline void outl(uint16_t port, uint32_t val) + { + asm volatile("outl %0, %1" : : "a"(val), "Nd"(port)); + } + + static inline uint32_t inl(uint16_t port) + { + uint32_t ret; + asm volatile("inl %1, %0" : "=a"(ret) : "Nd"(port)); + return ret; + } + + static inline void insb(uint16_t port, uint8_t* buffer, size_t count) + { + asm volatile("rep insb" : "+D"(buffer), "+c"(count), "=m"(*buffer) : "Nd"(port) : "memory"); + } + + static inline void insw(uint16_t port, uint16_t* buffer, size_t count) + { + asm volatile("rep insw" : "+D"(buffer), "+c"(count), "=m"(*buffer) : "Nd"(port) : "memory"); + } + + static inline void insl(uint16_t port, uint32_t* buffer, size_t count) + { + asm volatile("rep insl" : "+D"(buffer), "+c"(count), "=m"(*buffer) : "Nd"(port) : "memory"); + } + static inline void io_wait() { outb(0x80, 0);