| Rev | Author | # | Line |
|---|---|---|---|
| 1 | perry | 1 | !!NAME |
| 2 | PerryLorier | 2 | iopl - change I/O privilege level |
| 1 | perry | 3 | |
| 4 | !!SYNOPSIS | ||
| 2 | PerryLorier | 5 | __#include <sys/io.h>__ |
| 1 | perry | 6 | |
| 2 | PerryLorier | 7 | __int iopl(int__ ''level''__);__ |
| 1 | perry | 8 | !!DESCRIPTION |
| 2 | PerryLorier | 9 | iopl(2) changes the I/O privilege level of the current process, as specified in ''level''. |
| 1 | perry | 10 | |
| 2 | PerryLorier | 11 | 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(2) call is not |
| 1 | perry | 12 | sufficient. |
| 13 | |||
| 2 | PerryLorier | 14 | In addition to granting unrestricted I/O port access, running at a higher I/O privilege level also allows the process to disable interrupts. This will probably crash the system, and is not recommended. |
| 1 | perry | 15 | |
| 16 | Permissions are inherited by fork and exec. | ||
| 17 | |||
| 2 | PerryLorier | 18 | The I/O privilege level for a normal process is 0. |
| 1 | perry | 19 | |
| 20 | !!RETURN VALUE | ||
| 2 | PerryLorier | 21 | On success, zero is returned. On error, -1 is returned, and ''errno'' is set appropriately. |
| 1 | perry | 22 | !!ERRORS |
| 2 | PerryLorier | 23 | ;[EINVAL]: ''level'' is greater than 3. |
| 24 | ;[EPERM]: The current user is not the super-user. | ||
| 1 | perry | 25 | |
| 26 | !!NOTES FROM THE KERNEL SOURCE | ||
| 2 | PerryLorier | 27 | iopl(2) 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. |
| 1 | perry | 28 | |
| 29 | !!CONFORMING TO | ||
| 2 | PerryLorier | 30 | iopl(2) is Linux specific and should not be used in processes intended to be portable. |
| 1 | perry | 31 | |
| 32 | !!COMPATIBILITY | ||
| 2 | PerryLorier | 33 | Under libc5, the prototype for __iopl__() was given 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. |
| 1 | perry | 34 | |
| 35 | !!SEE ALSO | ||
| 36 | ioperm(2) |
lib/blame.php:177: Warning: Invalid argument supplied for foreach() (...repeated 9 times)