mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-05-24 14:35:01 -04:00
Use /dev/port to make Super IO functions work on Linux
This commit is contained in:
@@ -14,7 +14,11 @@
|
||||
|
||||
#pragma comment(lib, "inpout32.lib")
|
||||
#else
|
||||
#include <sys/io.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user