Universal Serial Bus (USB) was developed by the PC industry to provide a low-cost solution for attaching peripheral devices, such as keyboards, mouse devices, and printers, to a system.
USB connectors are designed to fit only one type of cable, one way. Devices can connect to hub devices, which connect several devices, including other hub devices. The primary design motivation for USB is to alleviate the need for multiple connector types for different devices, thereby reducing the clutter on the back panel of a system. Additional advantages of using USB devices are:
USB devices are hot-pluggable. See Hot-Plugging USB Devices for more information.
Supports a maximum of 126 devices in the Solaris environment.
Supports low speed (1.5 Mbit/sec) and full speed (12 Mbit/sec) devices.
The bus can be easily extended by adding low-cost external hubs. Hubs can be connected to hubs to form a tree topology.
Sun Microsystems support for USB devices includes the following:
Sun BladeTM 100 and Sun Blade 1000 systems that run the Solaris 8 10/00, Solaris 8 1/01, Solaris 8 4/01, Solaris 8 7/01, or the Solaris 8 10/01 release provide USB device support.
Sun RayTM systems also support USB devices.
IA systems that run the Solaris 8 Intel Platform Edition provide USB support for keyboard and mouse devices, and for certain mass-storage devices, such as Zip drives. See scsa2usb(7D) for more information.
This table provides a listing of specific USB devices that are supported in the Solaris environment.
These USB Devices |
Are Supported on These Systems |
---|---|
Keyboards and mouse devices |
SPARC systems with Sun USB support based on the ohci(7D) controller. IA systems with a USB bus based on the uhci(7D) controller. Only onboard USB controllers are supported. Plug-in host controller PCI cards are not supported. |
Mass storage |
SPARC and IA. |
Printers |
SPARC and IA. |
Hub |
SPARC and IA. |
The following table describes the USB acronyms that are used in the Solaris environment. See http://www.usb.org for a complete description of USB components and acronyms.
Acronym |
Definition |
---|---|
USB |
Universal Serial Bus |
USBA |
Universal Serial Bus Architecture (Solaris) |
USBAI |
USBA Client Driver Interface (Solaris) |
HCD |
USB host controller driver |
The USB specification is openly available and free of royalties. The specification defines the electrical and mechanical interfaces of the bus and the connectors.
USB employs a topology in which hubs provide attachment points for USB devices. The host controller contains the root hub, which is the origin of all USB ports in the system. See USB Hub Devices for more information about hubs.
The previous example shows a system with three active USB ports. The first USB port has a Zip drive that does not have an embedded hub, so you cannot attach additional devices. The second USB port has a hub with a Jaz drive and a composite keyboard/mouse device connected. One of the ports from the secondary hub has a keyboard with an embedded hub where the mouse is attached.
The device tree path name for some of the devices that are displayed in the previous example are listed in this table.
Zip drive |
/pci@1f,4000/usb@5/storage@1 |
Keyboard |
/pci@1f,4000/usb@5/hub@2/keyboard@1 |
Mouse |
/pci@1f,4000/usb@5/hub@2/mouse@2 |
Jaz drive |
/pci@1f,4000/usb@5/hub@2/storage@3 |
Printer |
/pci@1f,4000/usb@5/hub@3/printer@1 |
The USB devices are divided into device classes. Each device class has a corresponding driver. Devices within a class are managed by the same device driver. However, the USB specification also allows for vendor-specific devices that are not part of a specific class. Devices with similar attributes and services are grouped.
The Human Interface Device (HID) class contains devices that are user controlled such as keyboards, mouse devices, and joysticks. The Communication Device class contains devices that connect to a telephone, such as modems or an ISDN interface. Other device classes include the Audio, Monitor, Printer, and Storage Device classes. Each USB device contains descriptors that reflect the class of the device. A device class specifies how its members should behave in configuration and data transfer. You can obtain additional class information from the http://www.usb.org site.
USB devices are represented as two levels of device tree nodes. A device node represents the entire USB device, and one or more child interface nodes represent the individual USB interfaces on the device. For special cases, the device and interface nodes are combined into a single combined node.
Driver binding is achieved by using the compatible name properties. Refer to 3.2.2.1 of the IEEE 1275 USB binding and Writing Device Drivers for more information. A driver can either bind to the entire device and control all the interfaces, or a driver can bind to just one interface, for example, a keyboard or mouse. If no vendor or class driver claims the entire device, a generic USB multi-interface driver is bound to the device-level node. This driver attempts to bind drivers to each interface by using compatible names properties, as defined in section 3.3.2.1 of the 1275 binding.
Figure 1–1 shows an example of a hub and printer as a compound device. Both the hub and the printer are enclosed in the same plastic case, but the hub and the printer have separate USB bus addresses. The same diagram shows an example of a composite device. The composite keyboard and controller are also enclosed in the same plastic case, but they have the same USB bus address. A cable connects the USB mouse to the composite keyboard/controller in this example.
The Solaris USB Architecture (USBA) adheres to the USB 1.0 and 1.1 specification plus Solaris driver requirements. The USBA model is similar to Sun Common SCSI Architecture (SCSA). The USBA is a thin layer that provides a generic USB transport-layer abstraction to the client driver.
The differences between SCSA and USBA are that the SCSA relies on .conf files to probe the bus, while USB hub drivers are self-probing nexus drivers.