USBA_DEVICE(9S)          Data Structures for Drivers         USBA_DEVICE(9S)
NAME
     usba_device, 
usba_device_t - USBA Device Data Structure
SYNOPSIS
     #include <sys/usb/usba/hcdi.h>INTERFACE LEVEL
     Volatile - illumos USB HCD private
     This is a private data structure that is not part of the stable DDI.
     It may be removed or changed at any time.
DESCRIPTION
     The 
usba_device_t structure is used by the illumos USB Architecture
     (USBA) to represent a physical USB device.  While a given USB device
     may be a composite device, a USB device that implements two or more
     classes, there will still only be a single device structure.  A USB
     device is always plugged into a port on some hub, excepting the root
     hub, and has an address on the USB fabric.
     Many of the USB HCD driver operations pass a 
usba_device_t to the HCD
     driver.  The 
usba_device_t should be used by an HCD driver in a     
read-only fashion.  A subset of the structure's fields that are useful
     for HCD drivers to read are listed below.
     In addition, there are two optional HCD entry points that interact with
     this structure and give the change for a driver to store per-device
     state.  If the driver implements the 
usba_hcdi_device_init(9E) and     
usba_hcdi_device_fini(9E) functions, then the private data stored from     
usba_hcdi_device_init(9E) can be retrieved with     
usba_hcdi_get_device_private(9F).
STRUCTURE MEMBERS
     The 
usba_device_t structure includes the following members:
           dev_info_t              *usb_dip
           usba_hubdi_t            *usb_hubdi;
           usb_addr_t              usb_addr;
           usb_dev_descr_t         *usb_dev_descr;
           char                    *usb_mfg_str;
           char                    *usb_product_str;
           char                    *usb_serialno_str;
           usb_port_status_t       usb_port_status;
           usb_port_t              usb_port;
           usba_device_t           *usb_hs_hub_usba_dev;
           usba_device_t           *usb_parent_hub;
     The 
usb_dip member is a pointer to the device's 
dev_info_t structure.
     This generally is used if the HCD driver wants to get naming
     information for diagnostic purposes.  When duplicating requests for
     isochronous and interrupt requests, HCD drivers should use the     
dev_info_t from the 
usba_pipe_handle_data_t(9S).
     The 
usb_hubdi member can be used to determine whether or not the     
usba_device_t in question is a hub or not.  HCD drivers should compare
     this member to NULL.  If the member is not NULL, then this USB device
     corresponds to a hub.
     the 
usb_addr member indicates the address of the USB device on the
     broader USB bus.  Note, that the actual address assigned to the device
     may be different, especially if the HCD driver implements the optional     
usba_hcdi_device_address(9E) entry point.  See the section 
USB     addressing in 
usba_hcdi(9E) for more information.
     The 
usb_dev_descr member points to the device descriptor for a given
     device.  This structure is documented in 
usb_dev_descr(9S).  This
     member may be NULL as it may not have been populated during device
     attachment.  This member may be NULL.  HCD drivers should always check
     for NULL before dereferencing it.
     The 
usb_mfg_str member may contain a pointer to a character string with
     the name of the manufacturer as retrieved from the device.  This member
     may be NULL.  HCD drivers should always check for NULL before
     dereferencing it.
     The 
usb_product_str member may contain a pointer to a character string
     with the name of the product as retrieved from the device.  This member
     may be NULL.  HCD drivers should always check for NULL before
     dereferencing it.
     The 
usb_serialno_str member may contain a pointer to a character string
     with the serial number of the device as retrieved from the device.
     This member may be NULL.  HCD drivers should always check for NULL
     before dereferencing it.
     The 
usb_port_status contains a 
usb_port_status_t entry, which describes
     the current negotiated speed of the device.  See 
usba_hcdi(9E) for more
     information on the values and types.
     The 
usb_port member contains the port on a hub that the device is
     plugged into.  Ports are always numbered starting at 1.
     The 
usb_hs_hub_usba_dev member is set when there is a parent high-speed
     hub.  This is most notable for low- and full- speed devices which
     require split transaction support.  This points to the 
usb_device_t     structure that is the closest high-speed parent hub.  This member
     should always be set to NULL for super-speed devices.  A device
     operating a super-speed can never be plugged into a high-speed hub.
     The 
usb_parent_hub member points to the 
usba_device_t structure that
     the device in question is plugged into.  If the device represents the
     root hub, then this field will be NULL.
SEE ALSO
     usba_hcdi(9E), 
usba_hcdi_device_address(9E), 
usba_hcdi_device_fini(9E),     
usba_hcdi_device_init(9E), 
usba_pipe_handle_data_t(9S)illumos                       December 20, 2016                      illumos