summaryrefslogtreecommitdiffstats
path: root/share/man/man4/io.4
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2010-06-01 18:27:48 +0000
committerattilio <attilio@FreeBSD.org>2010-06-01 18:27:48 +0000
commit74a35cff029a00a2ae1f33698259bad0ea1c9a61 (patch)
tree26ad6238fc3c04481486927bf30adf81e7b8cc8c /share/man/man4/io.4
parent7f5d6a35d6fa3ee4e0f0629aa54dbe3c7549b664 (diff)
downloadFreeBSD-src-74a35cff029a00a2ae1f33698259bad0ea1c9a61.zip
FreeBSD-src-74a35cff029a00a2ae1f33698259bad0ea1c9a61.tar.gz
Adjust the manpage after r207329.
Sponsored by: Sandvine Incorporated Reviewed by: cpercival, emaste, marcel X-MFC: r207329
Diffstat (limited to 'share/man/man4/io.4')
-rw-r--r--share/man/man4/io.481
1 files changed, 69 insertions, 12 deletions
diff --git a/share/man/man4/io.4 b/share/man/man4/io.4
index a54b9fd..31766da 100644
--- a/share/man/man4/io.4
+++ b/share/man/man4/io.4
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 8, 2010
+.Dd June 01, 2010
.Dt IO 4
.Os
.Sh NAME
@@ -35,32 +35,89 @@
.Nd I/O privilege file
.Sh SYNOPSIS
.Cd "device io"
+.Pp
+.In sys/types.h
+.In sys/ioctl.h
+.In dev/io/iodev.h
+.In machine/iodev.h
+.Pp
+.Bd -literal
+struct iodev_pio_req {
+ u_int access;
+ u_int port;
+ u_int width;
+ u_int val;
+};
.Sh DESCRIPTION
The special file
.Pa /dev/io
is a controlled security hole that allows a process to gain I/O
privileges
(which are normally reserved for kernel-internal code).
-Any process that holds a file descriptor on
-.Pa /dev/io
-open will get its
-.Em IOPL
-bits in the flag register set, thus allowing it to perform direct
-I/O operations.
This can be useful in order to write userland
programs that handle some hardware directly.
-Note that even read-only access will grant the full I/O privileges.
+.Pp
+The usual operations on the device are to open it via the
+.Xr open 2
+interface and to send I/O requests to the file descriptor using the
+.Xr ioctl 2
+syscall.
+.Pp
+The
+.Xr ioctl 2
+requests available for
+.Pa /dev/io
+are mostly platform dependent, but there are also some in common between
+all of them.
+The
+.Dv IODEV_PIO
+is used by all the architectures in order to request that an I/O operation
+be performed. It takes a 'struct iodev_pio_req' argument
+that must be previously setup.
+.Pp
+The
+.Fa access
+member specifies the type of operation requested. It may be:
+.Bl -tag -width IODEV_PIO_WRITE
+.It Dv IODEV_PIO_READ
+The operation is an "in" type. A value will be read from the specified port
+(retrieved from the
+.Fa port
+member) and the result will be stored in the
+.Fa val
+member.
+.It Dv IODEV_PIO_WRITE
+The operation is a "out" type. The value will be fetched from the
+.Fa val
+member and will be written out to the specified port (defined as the
+.Fa port
+member).
+.El
+.Pp
+Finally, the
+.Fa width
+member specifies the size of the operand to be read/written, expressed
+in bytes.
.Pp
In addition to any file access permissions on
.Pa /dev/io ,
the kernel enforces that only the super-user may open this device.
-.Sh FILES
-.Bl -tag -width Pa -compact
-.It Pa /dev/io
-.El
+.Sh LEGACY
+The
+.Pa /dev/io
+interface used to be very i386 specific and worked differently. The initial
+implementation, in fact, simply raised the
+.Em IOPL
+of the current thread when
+.Xr open 2
+was called on the file. This behaviour is retained in the current
+implementation as legacy support for both i386 and amd64 architectures.
.Sh SEE ALSO
+.Xr close 2 ,
.Xr i386_get_ioperm 2 ,
.Xr i386_set_ioperm 2 ,
+.Xr ioctl 2 ,
+.Xr open 2 ,
.Xr mem 4
.Sh HISTORY
The
OpenPOWER on IntegriCloud