add ioperm/iopl syscalls

based on patches by orc and Isaac Dunham, with some fixes. sys/io.h
exists and contains prototypes for these functions regardless of
whether the target arch has them; this is a bit unorthodox but I don't
think it will break anything. the function definitions do not exist
unless the appropriate SYS_* syscall number macro is defined, which
should make sure configure scripts looking for these functions don't
find them on other systems.

presently, sys/io.h does not have the inb/outb/etc. port io
macros/functions. I'd be surprised if ioperm/iopl are useful without
them, so they probably need to be added at some point in appropriate
bits/io.h files...
This commit is contained in:
Rich Felker 2012-07-23 16:54:53 -04:00
parent 53147f902b
commit d426b04533
3 changed files with 31 additions and 0 deletions

13
include/sys/io.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef _SYS_IO_H
#define _SYS_IO_H
#ifdef __cplusplus
extern "C" {
#endif
int ioperm(unsigned long, unsigned long, int);
int iopl(int);
#ifdef __cplusplus
}
#endif
#endif

9
src/linux/ioperm.c Normal file
View File

@ -0,0 +1,9 @@
#include <sys/io.h>
#include "syscall.h"
#ifdef SYS_ioperm
int ioperm(unsigned long from, unsigned long num, int turn_on)
{
return syscall(SYS_ioperm, from, num, turn_on);
}
#endif

9
src/linux/iopl.c Normal file
View File

@ -0,0 +1,9 @@
#include <sys/io.h>
#include "syscall.h"
#ifdef SYS_iopl
int iopl(int level)
{
return syscall(SYS_iopl, level);
}
#endif