iopl - change I/O privilege level


SYNOPSIS

       #include <unistd.h> /* for libc5 */
       #include <sys/io.h> /* for glibc */

       int iopl(int level);


DESCRIPTION

       iopl  changes  the I/O privilege level of the current pro­
       cess, as specified in level.

       This call is necessary to allow 8514-compatible X  servers
       to  run under Linux.  Since these X servers require access
       to all 65536 I/O ports, the ioperm call is not sufficient.

       In addition to granting unrestricted I/O port access, run­
       ning at a higher I/O privilege level also allows the  pro­
       cess  to disable interrupts.  This will probably crash the
       system, and is not recommended.

       Permissions are inherited by fork and exec.

       The I/O privilege level for a normal process is 0.


RETURN VALUE

       On success, zero is returned.  On error, -1  is  returned,
       and errno is set appropriately.


ERRORS

       EINVAL level is greater than 3.

       EPERM  The current user is not the super-user.


NOTES FROM THE KERNEL SOURCE

       iopl  has to be used when you want to access the I/O ports
       beyond the 0x3ff  range:  to  get  the  full  65536  ports
       bitmapped  you'd  need  8kB of bitmaps/process, which is a
       bit excessive.


CONFORMING TO

       iopl is Linux specific and should not be used in processes
       intended to be portable.


NOTES

       Libc5  treats  it  as a system call and has a prototype in
       <unistd.h>.  Glibc1 does not have a prototype. Glibc2  has
       a prototype both in <sys/io.h> and in <sys/perm.h>.  Avoid
       the latter, it is available on i386 only.


SEE ALSO

       ioperm(2)