shithub: purgatorio

ref: d3d1b3b47ff80f451c6c9f8b7f1262fef6545f2b
dir: /man/3/arch/

View raw version
.TH ARCH 3 x86
.SH NAME
arch \- x86 architecture-specific information and control
.SH SYNOPSIS
.nf
.B bind -a #P /dev

.B /dev/cputype
.B /dev/ioalloc
.B /dev/iob
.B /dev/iol
.B /dev/iow
.B /dev/irqalloc
.SH DESCRIPTION
This device presents textual information about PC hardware and allows
user-level control of the I/O ports on x86-class machines.
.PP
Reads from
.I cputype
recover the processor type and clock rate.
.PP
Reads from
.I ioalloc
return I/O ranges used by each device, one line
per range.  Each line contains three fields separated by white space: first address
in hexadecimal,
last address, name of device.
.PP
Reads from
.I irqalloc
return the enabled interrupts, one line per
interrupt.  Each line contains three fields separated by white space:
the trap number, the IRQ it is assigned to, and the name of
the device using it.
.PP
Reads and writes to
.IR iob ,
.IR iow ,
and
.I iol
cause 8-bit wide, 16-bit wide, and 32-bit wide requests to
I/O ports.
The port accessed is determined by the byte offset of the
file descriptor.
.SH EXAMPLE
The following Limbo code reads from an x86 byte I/O port.
.IP
.EX
inportb(port: int): byte
{
    data := array[1] of byte;

    if(iobfd == nil)
        iobfd = sys->open("#P/iob", Sys->ORDWR);

    sys->seek(iobfd, port, 0);
    if(sys->read(iobfd, data, len data) != len data)
        fatal(sys->sprint("inportb(16r%4.4x): %r\en", port));
    return data[0];
}
.EE
.SH SOURCE
.B /os/pc/devarch.c