| .\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) |
| .\" Portions extracted from linux/kernel/ioport.c (no copyright notice). |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of this |
| .\" manual under the conditions for verbatim copying, provided that the |
| .\" entire resulting derived work is distributed under the terms of a |
| .\" permission notice identical to this one. |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume no |
| .\" responsibility for errors or omissions, or for damages resulting from |
| .\" the use of the information contained herein. The author(s) may not |
| .\" have taken the same level of care in the production of this manual, |
| .\" which is licensed free of charge, as they might when working |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .\" Modified Tue Aug 1 16:47 1995 by Jochen Karrer |
| .\" <cip307@cip.physik.uni-wuerzburg.de> |
| .\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com> |
| .\" Modified Fri Nov 27 14:50:36 CET 1998 by Andries Brouwer <aeb@cwi.nl> |
| .\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" Added notes on capability requirements |
| .\" |
| .TH IOPL 2 2021-03-22 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| iopl \- change I/O privilege level |
| .SH SYNOPSIS |
| .nf |
| .B #include <sys/io.h> |
| .PP |
| .BI "int iopl(int " level ); |
| .fi |
| .SH DESCRIPTION |
| .BR iopl () |
| changes the I/O privilege level of the calling thread, |
| as specified by the two least significant bits in |
| .IR level . |
| .PP |
| The I/O privilege level for a normal thread is 0. |
| Permissions are inherited from parents to children. |
| .PP |
| This call is deprecated, is significantly slower than |
| .BR ioperm (2), |
| and is only provided for older X servers which require |
| access to all 65536 I/O ports. |
| It is mostly for the i386 architecture. |
| On many other architectures it does not exist or will always |
| return an error. |
| .SH RETURN VALUE |
| On success, zero is returned. |
| On error, \-1 is returned, and |
| .I errno |
| is set to indicate the error. |
| .SH ERRORS |
| .TP |
| .B EINVAL |
| .I level |
| is greater than 3. |
| .TP |
| .B ENOSYS |
| This call is unimplemented. |
| .TP |
| .B EPERM |
| The calling thread has insufficient privilege to call |
| .BR iopl (); |
| the |
| .B CAP_SYS_RAWIO |
| capability is required to raise the I/O privilege level |
| above its current value. |
| .SH CONFORMING TO |
| .BR iopl () |
| is Linux-specific and should not be used in programs that are |
| intended to be portable. |
| .SH NOTES |
| .\" Libc5 treats it as a system call and has a prototype in |
| .\" .IR <unistd.h> . |
| .\" Glibc1 does not have a prototype. |
| Glibc2 has a prototype both in |
| .I <sys/io.h> |
| and in |
| .IR <sys/perm.h> . |
| Avoid the latter, it is available on i386 only. |
| .PP |
| Prior to Linux 5.5 |
| .BR iopl () |
| allowed the thread to disable interrupts while running |
| at a higher I/O privilege level. |
| This will probably crash the system, and is not recommended. |
| .PP |
| Prior to Linux 3.7, |
| on some architectures (such as i386), permissions |
| .I were |
| inherited by the child produced by |
| .BR fork (2) |
| and were preserved across |
| .BR execve (2). |
| This behavior was inadvertently changed in Linux 3.7, |
| and won't be reinstated. |
| .SH SEE ALSO |
| .BR ioperm (2), |
| .BR outb (2), |
| .BR capabilities (7) |