IOPL(2)             Linux Programmer's Manual             IOPL(2)

NAME
       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)

Linux 0.99.11              24 July 1993                         1