| .\" Copyright (c) 1993 Michael Haardt |
| .\" (michael@moria.de) |
| .\" Fri Apr 2 11:32:09 MET DST 1993 |
| .\" |
| .\" %%%LICENSE_START(GPLv2+_DOC_FULL) |
| .\" This is free documentation; you can redistribute it and/or |
| .\" modify it under the terms of the GNU General Public License as |
| .\" published by the Free Software Foundation; either version 2 of |
| .\" the License, or (at your option) any later version. |
| .\" |
| .\" The GNU General Public License's references to "object code" |
| .\" and "executables" are to be interpreted as the output of any |
| .\" document formatting or typesetting system, including |
| .\" intermediate and printed output. |
| .\" |
| .\" This manual is distributed in the hope that it will be useful, |
| .\" but WITHOUT ANY WARRANTY; without even the implied warranty of |
| .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| .\" GNU General Public License for more details. |
| .\" |
| .\" You should have received a copy of the GNU General Public |
| .\" License along with this manual; if not, see |
| .\" <http://www.gnu.org/licenses/>. |
| .\" %%%LICENSE_END |
| .\" |
| .\" Modified Sat Jul 24 15:12:05 1993 by Rik Faith <faith@cs.unc.edu> |
| .\" Modified Tue Aug 1 16:27 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 Mon Feb 15 17:28:41 CET 1999 by Andries E. Brouwer <aeb@cwi.nl> |
| .\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" Added notes on capability requirements |
| .\" |
| .TH IOPERM 2 2021-03-22 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| ioperm \- set port input/output permissions |
| .SH SYNOPSIS |
| .nf |
| .BR "#include <sys/io.h>" " /* for glibc */" |
| .PP |
| .BI "int ioperm(unsigned long " from ", unsigned long " num ", int " turn_on ); |
| .fi |
| .SH DESCRIPTION |
| .BR ioperm () |
| sets the port access permission bits for the calling thread for |
| .I num |
| bits starting from port address |
| .IR from . |
| If |
| .I turn_on |
| is nonzero, then permission for the specified bits is enabled; |
| otherwise it is disabled. |
| If |
| .I turn_on |
| is nonzero, the calling thread must be privileged |
| .RB ( CAP_SYS_RAWIO ). |
| .PP |
| Before Linux 2.6.8, |
| only the first 0x3ff I/O ports could be specified in this manner. |
| For more ports, the |
| .BR iopl (2) |
| system call had to be used (with a |
| .I level |
| argument of 3). |
| Since Linux 2.6.8, 65,536 I/O ports can be specified. |
| .PP |
| Permissions are inherited by the child created by |
| .BR fork (2) |
| (but see NOTES). |
| Permissions are preserved across |
| .BR execve (2); |
| this is useful for giving port access permissions to unprivileged |
| programs. |
| .PP |
| This call 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 |
| Invalid values for |
| .I from |
| or |
| .IR num . |
| .TP |
| .B EIO |
| (on PowerPC) This call is not supported. |
| .TP |
| .B ENOMEM |
| .\" Could not allocate I/O bitmap. |
| Out of memory. |
| .TP |
| .B EPERM |
| The calling thread has insufficient privilege. |
| .SH CONFORMING TO |
| .BR ioperm () |
| is Linux-specific and should not be used in programs |
| intended to be portable. |
| .SH NOTES |
| The |
| .I /proc/ioports |
| file shows the I/O ports that are currently allocated on the system. |
| .PP |
| Before Linux 2.4, |
| permissions were not inherited by a child created by |
| .BR fork (2). |
| .PP |
| Glibc has an |
| .BR ioperm () |
| prototype both in |
| .I <sys/io.h> |
| and in |
| .IR <sys/perm.h> . |
| Avoid the latter, it is available on i386 only. |
| .SH SEE ALSO |
| .BR iopl (2), |
| .BR outb (2), |
| .BR capabilities (7) |