vdev exhci

Updated: April 19, 2023

Emulate a USB host controller

Synopsis

vdev exhci intr guest_intr loc addr [name path]

Options

intr guest_intr
(Mandatory) Set the guest interrupt for this vdev. The guest_intr argument consists of two parts, separated by a colon. The first part identifies the name of the guest device Programmable Interrupt Controller (PIC); the second identifies the input line that is asserted when the interrupting device wishes to raise an interrupt. For example: gic:5
The second part of the guest_intr argument must match the corresponding argument given to the guest's USB stack; see below for more information.
loc addr
(Mandatory) Set the base address of the device registers to addr (default space is io:).
The addr argument is specified in hexadecimal and must match the corresponding argument given to the guest's USB stack; see below for more information.
name path
(Mandatory if there are multiple vdevs, otherwise optional) Specify the path for storing the PPS objects that the enumerator can use to connect and disconnect USB devices from guest instances, and to monitor device connection statuses.
The path argument must contain a valid filename. For information about valid filenames, see Filename rules in the QNX Neutrino User's Guide. The filename must be unique among all vdev exhci instances. Typically, each guest may run an instance of the vdev and each may be given a different name.
More information on the PPS objects is given below.

Description

(ARM and x86) The xHCI vdev emulates a USB host controller. It presents the guest with a memory-mapped I/O interface that complies with the eXtensible Host Controller Interface (xHCI) specification. As a result, the guest can use its existing xHCI drivers, without modifications.

loc and intr options

The loc and intr options specify the memory-mapped I/O region for the xHCI interface. The guest must start its xHCI driver with base address and IRQ parameters corresponding to these option settings. For Android guests, the VM provides the guest with these settings in the form of device tree information and thus, xHCI discovery (including driver-launching) should work without manual OS configuration. For information on other how guest types might do xHCI discovery, contact QNX Engineering Services.

Note:

For more information on setting guest interrupts, see the “Configuration” chapter in the QNX Hypervisor User's Guide.

name option

The vdev creates two PPS objects: one to control device attachments and the other to report the connection status of each device. The names of these objects are determined by the name option argument. For instance, if you specify exhci_0, the vdev creates a control object named /pps/usb_vdev/exhci_0/ctrl and a status object named /pps/usb_vdev/exhci_0/status.

You will see these objects in the host filesystem, but you don't need to write to or read from them. They're used internally by the vdev and the enumerator.

See the PPS Developer's Guide for information on starting and configuring the PPS service.

Example

To create and configure an xHCI vdev, specify the following in the VM configuration file:

vdev exhci
    loc 0xfc000000
    intr gic:5
    name exhci_0

In this example, the xHCI driver on the guest must be started with options to register the USB controller base address as 0xfc000000 and to use IRQ 5.