From 3948e7471190774f3e41f453469fb2a4f59c081e Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 11 Feb 2020 20:25:28 -0600 Subject: [PATCH] Use /dev/port to make Super IO functions work on Linux --- super_io/super_io.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/super_io/super_io.cpp b/super_io/super_io.cpp index 6de0de57..0a5c8232 100644 --- a/super_io/super_io.cpp +++ b/super_io/super_io.cpp @@ -14,7 +14,11 @@ #pragma comment(lib, "inpout32.lib") #else -#include +#include +#include +#include + +int dev_port_fd; #endif /******************************************************************************************\ @@ -31,8 +35,13 @@ void superio_enter(int ioreg) Out32(ioreg, 0x87); Out32(ioreg, 0x87); #else - outb_p(0x87, ioreg); - outb_p(0x87, ioreg); + unsigned char temp = 0x87; + dev_port_fd = open("/dev/port", O_RDWR, "rw"); + lseek(dev_port_fd, ioreg, SEEK_CUR); + write(dev_port_fd, &temp, 1); + lseek(dev_port_fd, ioreg, SEEK_CUR); + write(dev_port_fd, &temp, 1); + close(dev_port_fd); #endif } @@ -51,8 +60,11 @@ void superio_outb(int ioreg, int reg, int val) Out32(ioreg, reg); Out32(ioreg + 1, val); #else - outb_p(reg, ioreg); - outb_p(val, ioreg + 1); + dev_port_fd = open("/dev/port", O_RDWR, "rw"); + lseek(dev_port_fd, ioreg, SEEK_CUR); + write(dev_port_fd, ®, 1); + write(dev_port_fd, &val, 1); + close(dev_port_fd); #endif } @@ -71,7 +83,12 @@ int superio_inb(int ioreg, int reg) Out32(ioreg, reg); return Inp32(ioreg + 1); #else - outb_p(reg, ioreg); - return inb_p(ioreg + 1); + unsigned char temp; + dev_port_fd = open("/dev/port", O_RDWR, "rw"); + lseek(dev_port_fd, ioreg, SEEK_CUR); + write(dev_port_fd, ®, 1); + read(dev_port_fd, &temp, 1); + close(dev_port_fd); + return((int)temp); #endif } \ No newline at end of file