glenda.party
term% ls -F
term% cat index.txt
ARCH(3)                    Library Functions Manual                    ARCH(3)



NAME
       arch - architecture-specific information and control

SYNOPSIS
       bind -a #P /dev
       /dev/archctl
       /dev/cputype
       /dev/ioalloc
       /dev/iob
       /dev/iol
       /dev/iow
       /dev/irqalloc

DESCRIPTION
       This  device  presents textual information about PC hardware and allows
       user-level control of the I/O ports on x86-class machines.

       Reads from cputype recover the processor type and clock  rate  in  MHz.
       Reads from archctl yield at least data of this form:

              cpu AMD64 2201 pge
              pge on
              coherence mfence
              cmpswap cmpswap486
              i8253set on
              cache default uc
              cache 0x0 1073741824 wb
              cache 0x3ff00000 1048576 uc

       Where  is  the  processor  type,  is the processor speed in MHz, and is
       present only if the `page global extension' capability is present;  the
       next  line  reflects its setting.  is followed by one of or showing the
       form of memory barrier used by the kernel.  is followed by or  reflect‐
       ing  the form of `compare and swap' used by the kernel.  is a flag, in‐
       dicating the need to explicitly set the Intel 8253 or equivalent timer.
       There  may  be  lines  starting  with  that reflect the state of memory
       caching via MTRRs (memory-type region registers).  The second  word  on
       the  line  is or a C-style number which is the base physical address of
       the region; the third is a C-style length of the region; and the fourth
       is  one  of  (for uncachable), (write-back), (write-combining), (write-
       protected), or (write-through).  A region may be a  subset  of  another
       region,  and  the smaller region takes precedence.  This may be used to
       make I/O registers uncachable in the midst of a write-combining  region
       mostly used for a video framebuffer, for example.  Control messages may
       be written to archctl and use the same syntax as  the  data  read  from
       archctl.  Known commands include and

       Reads  from 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.

       Reads  from irqalloc return the enabled interrupts, one line per inter‐
       rupt.  Each line contains three fields separated by  white  space:  the
       trap  number, the IRQ it is assigned to, and the name of the device us‐
       ing it.

       Reads and writes to iob, iow, and 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.

EXAMPLE
       The following code reads from an x86 byte I/O port.

              uchar
              inportb(unsigned port)
              {
                  uchar data;

                  if(iobfd == -1)
                      iobfd = open("#P/iob", ORDWR);

                  seek(iobfd, port, 0);
                  if(read(iobfd, &data, sizeof(data)) != sizeof(data))
                      sysfatal("inportb(0x%4.4ux): %r", port);
                  return data;
              }

SOURCE
       /sys/src/9/pc/devarch.c



                                                                       ARCH(3)