Intel IA32 systems offer a 64KB (16-bit) I/O address space. Programmed I/O devices provide access to their internal registers through this I/O address space. This scheme is sometimes also called I/O-mapped I/O.
From the driver's point of view, accessing device registers involves reading to and writing from locations (ports) in the I/O space. The operating system provides special functions such as inb( ) and outb( ) to transfer data to and from device registers. Low-end floppy disk and tape drivers use this method to move data and control information to and from the device.
Both DDI and ODDI define functions to implement PIO:
|Read a byte from an 8-bit I/O port
|Read a 32-bit word from a 32-bit I/O port
|Read a 16-bit short word from a 16-bit I/O port
|Write a byte to an 8-bit I/O port
|Write a 32-bit word to a 32-bit I/O port
|Write a 16-bit short word to a 16-bit I/O port
|Read bytes from an 8-bit I/O port to a buffer
|Read 32-bit words from a 32-bit I/O port to a buffer
|Read 16-bit short words from a 16-bit I/O port to a buffer
|Write bytes to an 8-bit I/O port from a buffer
|Write 32-bit words to a 32-bit I/O port from a buffer
|Write 16-bit short words to a 16-bit I/O port from a buffer