diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-07-23 16:54:53 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-07-23 16:54:53 -0400 |
commit | d426b045332718ae6d42237303d657fd97c51455 (patch) | |
tree | 5399f0e33644483d99ca9376c2abbc8929c219ec | |
parent | 53147f902b7f84d8108bd9738641a53722a4a205 (diff) | |
download | musl-d426b045332718ae6d42237303d657fd97c51455.tar.gz musl-d426b045332718ae6d42237303d657fd97c51455.tar.xz musl-d426b045332718ae6d42237303d657fd97c51455.zip |
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...
-rw-r--r-- | include/sys/io.h | 13 | ||||
-rw-r--r-- | src/linux/ioperm.c | 9 | ||||
-rw-r--r-- | src/linux/iopl.c | 9 |
3 files changed, 31 insertions, 0 deletions
diff --git a/include/sys/io.h b/include/sys/io.h new file mode 100644 index 00000000..a6ba4674 --- /dev/null +++ b/include/sys/io.h @@ -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 diff --git a/src/linux/ioperm.c b/src/linux/ioperm.c new file mode 100644 index 00000000..6d7c37d0 --- /dev/null +++ b/src/linux/ioperm.c @@ -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 diff --git a/src/linux/iopl.c b/src/linux/iopl.c new file mode 100644 index 00000000..5a626e16 --- /dev/null +++ b/src/linux/iopl.c @@ -0,0 +1,9 @@ +#include <sys/io.h> +#include "syscall.h" + +#ifdef SYS_iopl +int iopl(int level) +{ + return syscall(SYS_iopl, level); +} +#endif |