| .\" Copyright (c) 1995 Paul Gortmaker |
| .\" (gpg109@rsphy1.anu.edu.au) |
| .\" Wed Nov 29 10:58:54 EST 1995 |
| .\" |
| .\" %%%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 |
| .\" |
| .TH OUTB 2 2020-11-01 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| outb, outw, outl, outsb, outsw, outsl, |
| inb, inw, inl, insb, insw, insl, |
| outb_p, outw_p, outl_p, inb_p, inw_p, inl_p \- port I/O |
| .SH SYNOPSIS |
| .nf |
| .B #include <sys/io.h> |
| .PP |
| .BI "unsigned char inb(unsigned short " port ); |
| .BI "unsigned char inb_p(unsigned short " port ); |
| .BI "unsigned short inw(unsigned short " port ); |
| .BI "unsigned short inw_p(unsigned short " port ); |
| .BI "unsigned int inl(unsigned short " port ); |
| .BI "unsigned int inl_p(unsigned short " port ); |
| .PP |
| .BI "void outb(unsigned char " value ", unsigned short " port ); |
| .BI "void outb_p(unsigned char " value ", unsigned short " port ); |
| .BI "void outw(unsigned short " value ", unsigned short " port ); |
| .BI "void outw_p(unsigned short " value ", unsigned short " port ); |
| .BI "void outl(unsigned int " value ", unsigned short " port ); |
| .BI "void outl_p(unsigned int " value ", unsigned short " port ); |
| .PP |
| .BI "void insb(unsigned short " port ", void *" addr , |
| .BI " unsigned long " count ); |
| .BI "void insw(unsigned short " port ", void *" addr , |
| .BI " unsigned long " count ); |
| .BI "void insl(unsigned short " port ", void *" addr , |
| .BI " unsigned long " count ); |
| .BI "void outsb(unsigned short " port ", const void *" addr , |
| .BI " unsigned long " count ); |
| .BI "void outsw(unsigned short " port ", const void *" addr , |
| .BI " unsigned long " count ); |
| .BI "void outsl(unsigned short " port ", const void *" addr , |
| .BI " unsigned long " count ); |
| .fi |
| .SH DESCRIPTION |
| This family of functions is used to do low-level port input and output. |
| The out* functions do port output, the in* functions do port input; |
| the b-suffix functions are byte-width and the w-suffix functions |
| word-width; the _p-suffix functions pause until the I/O completes. |
| .PP |
| They are primarily designed for internal kernel use, |
| but can be used from user space. |
| .\" , given the following information |
| .\" in addition to that given in |
| .\" .BR outb (9). |
| .PP |
| You must compile with \fB\-O\fP or \fB\-O2\fP or similar. |
| The functions |
| are defined as inline macros, and will not be substituted in without |
| optimization enabled, causing unresolved references at link time. |
| .PP |
| You use |
| .BR ioperm (2) |
| or alternatively |
| .BR iopl (2) |
| to tell the kernel to allow the user space application to access the |
| I/O ports in question. |
| Failure to do this will cause the application |
| to receive a segmentation fault. |
| .SH CONFORMING TO |
| .BR outb () |
| and friends are hardware-specific. |
| The |
| .I value |
| argument is passed first and the |
| .I port |
| argument is passed second, |
| which is the opposite order from most DOS implementations. |
| .SH SEE ALSO |
| .BR ioperm (2), |
| .BR iopl (2) |