If your request is specifically regarding the software implementation of the driver in a Linux environment, you should refer to the kernel documentation rather than a white paper.
Title: Serial Drivers
Source: Linux Kernel Documentation (Documentation/driver-api/serial/driver.rst) 16c95x serial port driver
The XR16C95x is typically supported under the standard 8250 driver framework in Linux. If your request is specifically regarding the software
Application (getty, custom app)
|
TTY Layer
|
Line Discipline
|
serial_core (uart_ops)
|
16C95x Driver <-- Our focus
|
UART Hardware
The 16C95x driver implements the struct uart_ops callbacks: .startup(), .shutdown(), .start_tx(), .stop_rx(), .set_termios(), and .tx_empty(). These features shift the driver’s bottleneck from I/O
Before examining the driver, one must understand the hardware enhancements over the 16550:
These features shift the driver’s bottleneck from I/O latency to memory bandwidth and interrupt management.
The 16C95x typically interfaces with the host system via a parallel bus (ISA/PCI local bus) and appears to the system as a set of I/O ports or memory-mapped registers.