template <typename Config, IoRegisterType IoType>
class BasicIoProvider
The IoProvider is a template class parameterized by UartDriver::config_type,
i.e. the zbi_dcfg_*_t type for the ZBI item's format. This class is responsible
for supplying pointers to be passed to hwreg types' ReadFrom and WriteTo.
The
```
IoProvider(UartDriver::config_type, uint16_t pio_size, volatile void* base)
```
constructor initializes the object with the provided virtual base address
(in the case of MMIO), while the constructor that omits the address
initializes things for PIO or identity-mapped MMIO. Then IoProvider::io()
is called to yield the pointer to pass to hwreg calls.