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
#include <sys/io.h>
unsigned char
inb( |
unsigned short int port) ; |
unsigned char
inb_p( |
unsigned short int port) ; |
unsigned short int
inw( |
unsigned short int port) ; |
unsigned short int
inw_p( |
unsigned short int port) ; |
unsigned int
inl( |
unsigned short int port) ; |
unsigned int
inl_p( |
unsigned short int port) ; |
void
outb( |
unsigned char value, |
unsigned short int port) ; |
void
outb_p( |
unsigned char value, |
unsigned short int port) ; |
void
outw( |
unsigned short int value, |
unsigned short int port) ; |
void
outw_p( |
unsigned short int value, |
unsigned short int port) ; |
void
outl( |
unsigned int value, |
unsigned short int port) ; |
void
outl_p( |
unsigned int value, |
unsigned short int port) ; |
void
insb( |
unsigned short int port, |
void *addr, | |
unsigned long int count) ; |
void
insw( |
unsigned short int port, |
void *addr, | |
unsigned long int count) ; |
void
insl( |
unsigned short int port, |
void *addr, | |
unsigned long int count) ; |
void
outsb( |
unsigned short int port, |
const void *addr, | |
unsigned long int count) ; |
void
outsw( |
unsigned short int port, |
const void *addr, | |
unsigned long int count) ; |
void
outsl( |
unsigned short int port, |
const void *addr, | |
unsigned long int count) ; |
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.
They are primarily designed for internal kernel use, but can be used from user space.
You must compile with −O
or −O2
or similar. The
functions are defined as inline macros, and will not be
substituted in without optimization enabled, causing
unresolved references at link time.
You use ioperm(2) or alternatively 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.
outb
() and friends are
hardware-specific. The value
argument is passed first
and the port
argument
is passed second, which is the opposite order from most DOS
implementations.
This page is part of release 4.07 of the Linux man-pages
project. A
description of the project, information about reporting bugs,
and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.
Copyright (c) 1995 Paul Gortmaker (gpg109rsphy1.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 |