PBIO(4)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1

okay bestie, welcome to the pbio(4) page from the i386 Kernel Interfaces Manual πŸ¦‹ β€” this one is lowkey iconic if you're into direct hardware vibes.

✨ 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 πŸ’–

okay so the pbio driver gives you 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 β€” slay 🫢.

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 β€” protect the circuitry, bestie 🫢.

A set of ioctl(2) requests allows 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 β€” so close, but no πŸ’€.


mwah πŸ’‹ β€” this page is the Debian version, dated January 14, 2005, and it's PBIO(4) 🫢.

πŸ“¦ where this page comes from