Interface ioports.h
The ioports interface provides a useful abstraction for initialising, registering and handling ioport events for a guest VM instance. This is independent from the x86 libsel4vm ioports interface. This interface is intended to be more generic and architecture independent, useful for usecases that require ioports without architecture support (virtio PCI).
Brief content:
Functions:
vmm_io_port_add_handler(io_list, ioport_range, ioport_interface, port_type)
Structs:
Functions
The interface ioports.h
defines the following functions.
Function vmm_io_port_init(io_list, ioport_alloc_addr)
Initialize the io port list manager. This is used when registering ioport handlers of type ‘IOPORT_FREE’
Parameters:
io_list {vmm_io_port_list_t **}
: Pointer to io_port list handle. This will be allocated and initialisedioport_alloc_addr {uint16_t}
: Base ioport address we can safely bump allocate from (doesn’t conflict with other ioports).
Returns:
- 0 for success, otherwise -1 for error
Back to interface description.
Function vmm_io_port_add_handler(io_list, ioport_range, ioport_interface, port_type)
Add an io port range for emulation
Parameters:
io_list {vmm_io_port_list_t *}
: Handle to ioport list. This is where the new ioport handler will be appended toioport_range {ioport_range_t}
: Range the ioport handler will emulateioport_interface {ioport_interface_t}
: IOPort emulation interfaceport_type {ioport_type_t}
: The type of ioport being registered - IOPORT_FREE, IOPORT_ADDR
Returns:
- NULL for error, otherwise pointer to newly created ioport entry
Back to interface description.
Function emulate_io_handler(io_port, port_no, is_in, size, data)
From a set of registered ioports, emulate an io instruction given a current ioport access.
Parameters:
io_port {vmm_io_port_list_t *}
: List of registered ioports with in/out handlersport_no {unsigned int}
: IOPort address being accessedis_in {bool}
: True if we are performing an io in operation, otherwise Falsesize {size_t}
: Size of io accessdata {unsigned int *}
: Pointer with the data being written if io-out op, otherwise will be populated with data from an io-in op
Returns:
- 0 if handled, 1 if unhandled, otherwise -1 for error
Back to interface description.
Structs
The interface ioports.h
defines the following structs.
Struct ioport_range
Range of ioport handler
Elements:
start {uint16_t}
: Start address of ioport rangeend {uint16_t}
: End address of ioport rangesize {uint16_t}
: Size of ioport range
Back to interface description.
Struct ioport_interface
Datastructure used for ioport emulation, containing handlers for the ioport range
Elements:
cookie {void *}
: User supplied cookie to pass onto handlersport_in {ioport_in_fn}
: IO in operation handlerport_out {ioport_out_fn}
: IO out operation handlerdesc {const char *}
: IOPort description, useful for debugging
Back to interface description.
Struct ioport_entry
Datastructure used to present a registered ioport range
Elements:
range {ioport_range_t}
: IO address range of ioport entryinterface {ioport_interface_t}
: Emulation interface for ioport range
Back to interface description.
Struct vmm_io_list
Parent datastructure used to maintain a list of registered ioports
Elements:
num_ioports {int}
: Total number of registered ioportsList {ioport_entry_t **}
: of registered ioport objectsalloc_addr {uint16_t}
: Base ioport address we can safely bump allocate from, used when registering ioport handlers of type ‘IOPORT_FREE’
Back to interface description.
Back to top.