Provided by: freebsd-manpages_8.2-1_all
pbio — 8255 parallel peripheral interface basic I/O driver
The pbio driver supports direct access to the Intel 8255A programmable
peripheral interface (PPI) chip running in mode 0 (simple I/O). Such an
interface provides 24 digital I/O lines. The driver is designed for
performing I/O under program control using peripherals such as the
Advantech PCL-724 card, which emulates the Intel 8255A PPI in mode 0.
Other 8255A-based peripherals such as the BMC Messsysteme PIO24II card
have also been reported to work.
The PPI provides two 8-bit ports (port A and port B) and two 4-bit ports
(port C upper, port C lower). Each port can be individually programmed
for input and (latched) output, and appears at a different offset of the
device's base I/O address.
A separate register allows the configuration of ports for input or
output. The device is so simple, that reliably probing for it when input
data arrives at its terminals is impossible; therefore the kernel
configuration has to specify the device's base address. The device
driver provides four character devices that correspond to the
peripheral's I/O ports. Opening a device for read or write automatically
configures the corresponding hardware port for input or output. At boot
time all ports are set configured for input to avoid damaging external
A set of ioctl(2) requests allow polled input and paced output to be
efficiently performed at the driver level without expensive user/kernel
context switching. The driver can perform I/O in three different ways:
Basic The read or write operation returns immediately after
reading or writing the data to the port at bus speed.
Paced Data is transferred from or to the port at intervals
specified by a separate ioctl(2) call.
Differential (Input only.) Only port values that differ from the
previous port value are returned.
The pacing interval is specified in Hz unit increments. Setting a pace
of n seconds will result in no more than one value being read or written
every n seconds. Single byte read/write operations will take at least n
seconds to complete.
The following ioctl(2) calls are supported:
PBIO_SETDIFF accepts a pointer to an integer as the third argument, and
sets the driver for differential input if the integer is
non-zero. The input pace speed determines the periodic
interval the driver will use to examine the port for a
PBIO_GETDIFF accepts a pointer to an integer as the third argument, and
sets the integer to the last set value for differential
PBIO_SETIPACE accepts a pointer to an integer as the third argument, and
sets the driver's input pacing speed to the value of that
PBIO_GETIPACE accepts a pointer to an integer as the third argument, and
sets the integer to the last set value for the input pace.
PBIO_SETOPACE accepts a pointer to an integer as the third argument, and
sets the driver's output pacing speed to the value of that
PBIO_GETOPACE accepts a pointer to an integer as the third argument, and
sets the integer to the last set value for the output
/dev/pbio0a Port A (8 bit I/O).
/dev/pbio0b Port B (8 bit I/O).
/dev/pbio0ch Port C upper (4 bit I/O).
/dev/pbio0cl Port C lower (4 bit I/O).
Diomidis Spinellis, "The information furnace: Consolidated home control",
Personal and Ubiquitous Computing, 1, 7, 53-69, 2003.
The pbio device was first used under FreeBSD 4.1.
Diomidis D. Spinellis ⟨firstname.lastname@example.org⟩
One of the PCL-724 card's inputs can optionally be wired to generate an
interrupt. This feature is not supported.