NAME¶
pbio
—
8255 parallel peripheral interface basic I/O
driver
SYNOPSIS¶
device pbio
In
/boot/device.hints:
hint.pbio.0.at="isa"
hint.pbio.0.port="0x360"
#include
<dev/pbio/pbioio.h>
DESCRIPTION¶
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 circuitry.
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 changed value.
PBIO_GETDIFF
- accepts a pointer to an integer as the third argument, and sets the
integer to the last set value for differential input.
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 integer.
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 integer.
PBIO_GETOPACE
- accepts a pointer to an integer as the third argument, and sets the
integer to the last set value for the output pace.
FILES¶
- /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).
SEE ALSO¶
Diomidis Spinellis,
The information furnace: Consolidated home control,
Personal and Ubiquitous Computing,
1, 7,
53-69, 2003.
HISTORY¶
The
pbio
device was first used under
FreeBSD 4.1.
AUTHORS¶
Diomidis D. Spinellis
⟨dds@aueb.gr⟩
BUGS¶
One of the PCL-724 card's inputs can optionally be wired to generate an
interrupt. This feature is not supported.