Portable interrupt-driven serial runtime primitives.
The reusable stack is intentionally split by synchronization ownership:
raw UART drivers expose only register-level operations, TxQueue and
RxQueue own independent lock-free software queues, SerialPort owns the
task/worker control path, and SerialIrqHandler is the IRQ-only endpoint.
OS glue must route hardware IRQs and control/service calls to the configured
owner CPU and pass an OwnerLease. Task context drains RxItems and
enqueues TX bytes through the queues, while worker context uses SerialPort
for bounded soft service. Neither TX nor RX queues poll the shared UART
IRQ/status register to rediscover readiness. This keeps the fast path bounded
and leaves wakeups, wait queues, poll sets, and line discipline processing to
OS-specific layers above this crate.