From owner-svn-src-head@FreeBSD.ORG Tue Jun 1 18:27:48 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C82761065670; Tue, 1 Jun 2010 18:27:48 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (unknown [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id ACA1E8FC1E; Tue, 1 Jun 2010 18:27:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o51IRmPW010152; Tue, 1 Jun 2010 18:27:48 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o51IRmO0010150; Tue, 1 Jun 2010 18:27:48 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201006011827.o51IRmO0010150@svn.freebsd.org> From: Attilio Rao Date: Tue, 1 Jun 2010 18:27:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r208716 - head/share/man/man4 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Jun 2010 18:27:49 -0000 Author: attilio Date: Tue Jun 1 18:27:48 2010 New Revision: 208716 URL: http://svn.freebsd.org/changeset/base/208716 Log: Adjust the manpage after r207329. Sponsored by: Sandvine Incorporated Reviewed by: cpercival, emaste, marcel X-MFC: r207329 Modified: head/share/man/man4/io.4 Modified: head/share/man/man4/io.4 ============================================================================== --- head/share/man/man4/io.4 Tue Jun 1 16:04:01 2010 (r208715) +++ head/share/man/man4/io.4 Tue Jun 1 18:27:48 2010 (r208716) @@ -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