---
name: "pbio"
section: "4"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/pbio"
---

# pbio(4)

8255 parallel peripheral interface basic I/O driver

## 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)](/ioctl/2.md) 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)](/ioctl/2.md) 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)](/ioctl/2.md) 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*, 7, 1, 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.
