From 49a3b5b8f94d661221f2bf1e4577a66b6a64204a Mon Sep 17 00:00:00 2001 From: Braiden Vasco Date: Thu, 2 Nov 2017 11:57:17 +0000 Subject: [PATCH] Add IO helper methods --- arch/io.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 arch/io.h diff --git a/arch/io.h b/arch/io.h new file mode 100644 index 0000000..2286c87 --- /dev/null +++ b/arch/io.h @@ -0,0 +1,48 @@ +#ifndef KERNELMQ_INCLUDED_IO +#define KERNELMQ_INCLUDED_IO 1 + +inline static unsigned char inb(unsigned short port); +inline static unsigned short inw(unsigned short port); +inline static unsigned int ind(unsigned short port); + +inline static void outb(unsigned short port, unsigned char value); +inline static void outw(unsigned short port, unsigned short value); +inline static void outd(unsigned short port, unsigned int value); + +unsigned char inb(unsigned short port) +{ + register unsigned char result; + asm volatile("inb %1, %0" : "=a" (result) : "dN" (port)); + return result; +} + +unsigned short inw(unsigned short port) +{ + register unsigned short result; + asm volatile("inw %1, %0" : "=a" (result) : "dN" (port)); + return result; +} + +unsigned int ind(unsigned short port) +{ + register unsigned int result; + asm volatile("ind %1, %0" : "=a" (result) : "dN" (port)); + return result; +} + +void outb(unsigned short port, unsigned char value) +{ + asm volatile("outb %1, %0" : : "dN" (port), "a" (value)); +} + +void outw(unsigned short port, unsigned short value) +{ + asm volatile("outw %1, %0" : : "dN" (port), "a" (value)); +} + +void outd(unsigned short port, unsigned int value) +{ + asm volatile("outd %1, %0" : : "dN" (port), "a" (value)); +} + +#endif