<chapter id="devusbover-24"><title>Using USB Devices (Overview)</title><highlights><para>This chapter provides an overview of Universal Serial Bus (USB) devices
in the Solaris OS.</para><para>This is a list of the overview information in this chapter.</para><itemizedlist><listitem><para><olink targetptr="gafhv" remap="internal">What's New in USB Devices?</olink></para>
</listitem><listitem><para><olink targetptr="devusbover-2" remap="internal">Overview of USB Devices</olink></para>
</listitem><listitem><para><olink targetptr="devusbover-9" remap="internal">About USB in the Solaris OS</olink></para>
</listitem>
</itemizedlist><para>For recent information about USB devices, go to the following site:</para><para><ulink url="http://www.sun.com/io_technologies/usb/USB-Faq.html" type="url">http://www.sun.com/io_technologies/usb/USB-Faq.html</ulink></para><para>For general information about USB devices, go to the following site:</para><para><ulink url="http://developers.sun.com/solaris/developer/support/driver/usb.html" type="url">http://developers.sun.com/solaris/developer/support/driver/usb.html</ulink></para><para>For step-by-step instructions on using USB devices in the Solaris OS,
see <olink targetptr="devusbtasks-1" remap="internal">Chapter&nbsp;8, Using USB Devices (Tasks)</olink>.</para><para>For general information about dynamic reconfiguration and hot-plugging,
see <olink targetptr="devconfig2-1" remap="internal">Chapter&nbsp;6, Dynamically Configuring
Devices (Tasks)</olink>.</para><para>For information on configuring USB printers, see <olink targetdoc="sysadprtsvcs" remap="external"><citetitle remap="book">System Administration Guide: Solaris Printing</citetitle></olink>.</para>
</highlights><sect1 id="gafhv"><title>What's New in USB Devices?</title><para>The following section describes new USB features in the Solaris release.</para><itemizedlist><listitem><para><olink targetptr="gfakm" remap="internal">USB Interface Association Descriptor Support</olink></para>
</listitem><listitem><para><olink targetptr="gdbhi" remap="internal">EHCI Isochronous Transfer Support</olink></para>
</listitem><listitem><para><olink targetptr="gdbhq" remap="internal">Support for CDC ACM Devices</olink></para>
</listitem><listitem><para><olink targetptr="gdbhp" remap="internal">Changed USB Device Hotpluggable Behavior</olink></para>
</listitem><listitem><para><olink targetptr="gdqla" remap="internal">USB Power Budgeting</olink></para>
</listitem><listitem><para><olink targetptr="gdbhh" remap="internal">ZFS Support on USB Devices</olink></para>
</listitem><listitem><para><olink targetptr="gdbhz" remap="internal">Support
for Prolific and Keyspan Serial Adapters</olink></para>
</listitem><listitem><para><olink targetptr="gafiv" remap="internal">Support for USB CDs and DVDs in GRUB-Based
Booting</olink></para>
</listitem><listitem><para><olink targetptr="gafim" remap="internal">USB Virtual Keyboard and Mouse Support</olink></para>
</listitem><listitem><para><olink targetptr="gafiu" remap="internal">vold Provides Awareness of Hot-Plugged
USB Devices</olink></para>
</listitem>
</itemizedlist><para>For a complete listing of new Solaris features and a description of
Solaris releases, see <olink targetdoc="solwhatsnew" remap="external"><citetitle remap="book">Solaris Express Developer Edition What&rsquo;s New</citetitle></olink>.</para><sect2 id="gfakm"><title>USB Interface Association Descriptor Support</title><para><emphasis role="strong">Solaris Express Developer Edition
5/07</emphasis>: A USB device node type, IA node, is created for Interface
Association Descriptor (IAD) support. This feature means that a driver might
support multiple interfaces for the same device, such as the video and audio
interfaces of a webcam. If no driver is found for an IA node, a nexus driver, <literal>usb_ia</literal>, is bound to the IA node to create the interface nodes. For
more information, see <olink targetdoc="refman7" targetptr="usb-ia-7d" remap="external"><citerefentry><refentrytitle>usb_ia</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</sect2><sect2 id="gdbhi"><title>EHCI Isochronous Transfer Support</title><para><emphasis role="strong">Solaris Express Developer Edition 5/07</emphasis>: USB EHCI
host controller driver provides isochronous transfer support for USB 2.0 or
high-speed isochronous devices. For more information, see <olink targetdoc="refman9s" targetptr="usb-isoc-request-9s" remap="external"><citerefentry><refentrytitle>usb_isoc_request</refentrytitle><manvolnum>9S</manvolnum></citerefentry></olink>.</para>
</sect2><sect2 id="gdbhq"><title>Support for CDC ACM Devices</title><para><emphasis role="strong">Solaris Express Developer Edition 5/07</emphasis>:Support for CDC ACM devices
is provided in this release. For more information, see <olink targetptr="fpkbw" remap="internal">USB
Driver Enhancements</olink>.</para>
</sect2><sect2 id="gdbhp"><title>Changed USB Device Hotpluggable Behavior</title><para><emphasis role="strong">Solaris Express 6/06</emphasis>: This feature information has
been revised in the Solaris Express 10/06 release.</para><para>This Solaris release introduces a new device attribute, <emphasis>hotpluggable</emphasis>, to identify those devices that can be connected or disconnected
without rebooting the system and configured or unconfigured automatically
without user intervention. All USB and 1394 devices are identified as hotpluggable
devices to gain those benefits described in <olink targetptr="devusbtasks-12" remap="internal">Using
USB Mass Storage Devices</olink>. In addition, non-removable media USB and
1394 devices are no longer identified as removable-media devices and no longer
have a <emphasis>removable-media</emphasis> attribute.</para><para>The changes are primarily made at the kernel level to improve support
for non-removable media USB and 1394 devices, and improve the performance
for those devices. However, theses changes do not impact the use of these
devices. For example, the responsibility of mounting and unmounting these
devices is controlled by <command>rmvolmgr</command>. From a user's perspective, the only visible changes are
the hotpluggable and removable-media attributes of a device.</para><para>For more information, see <olink targetptr="gcajp" remap="internal">USB and 1394 (FireWire)
Support Enhancements</olink>.</para>
</sect2><sect2 id="gdbhh"><title>ZFS Support on USB Devices</title><para><emphasis role="strong">Solaris Express 6/06</emphasis>: This information has been revised
in the Solaris Express 10/06 release. </para><para>You can create and mount ZFS file systems on USB mass storage devices.
For information about using USB mass storage devices, see <olink targetptr="devusbtasks-12" remap="internal">Using USB Mass Storage Devices</olink>.</para><para>For information about creating and mounting ZFS file systems, see <olink targetdoc="refman1m" targetptr="zfs-1m" remap="external"><citerefentry><refentrytitle>zfs</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> and <olink targetdoc="refman1m" targetptr="zpool-1m" remap="external"><citerefentry><refentrytitle>zpool</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para>
</sect2><sect2 id="gdbhz"><title>Support for Prolific and Keyspan Serial Adapters</title><para><emphasis role="strong">Solaris Express 1/06</emphasis>: Support for Prolific and Keyspan
serial adapters is provided in this release. For more information, see <olink targetptr="fpkbw" remap="internal">USB Driver Enhancements</olink>.</para>
</sect2><sect2 id="gdqla"><title>USB Power Budgeting</title><para><emphasis role="strong">Solaris Express 1/06</emphasis>: This Solaris release includes
power budgeting of USB devices to better manage the power that is distributed
to USB devices. Power budget control helps prevent over-current conditions
from occurring and generally makes using USB devices safer. For more information
about Solaris USB power budgeting limitations, see <olink targetptr="devusbover-44" remap="internal">Bus-Powered Devices</olink>.</para>
</sect2><sect2 id="gafiv" arch="x86"><title>Support for USB CDs and DVDs in GRUB-Based
Booting</title><para><emphasis role="strong">Solaris Express 6/05</emphasis>: You can use the following
USB features in the GRUB-based booting environment:</para><itemizedlist><listitem><para>Installing from USB CD or DVD drives</para>
</listitem><listitem><para>Booting from USB storage devices. You must install the Solaris
release on the USB drive before you can boot from it.</para>
</listitem>
</itemizedlist><para>For more information about GRUB-based booting, see <olink targetdoc="sysadv1" targetptr="hboverview-25463" remap="external">Chapter 8, <citetitle remap="chapter">Shutting Down and Booting a System (Overview),</citetitle> in <citetitle remap="book">System Administration Guide: Basic Administration</citetitle></olink>.</para>
</sect2><sect2 id="gafim"><title>USB Virtual Keyboard and Mouse Support</title><para><emphasis role="strong">Solaris Express 6/05</emphasis>: USB virtual keyboard and
mouse support enables you to hook up multiple keyboards and multiple mice,
where the set of keyboards or mice behave as one virtual keyboard or mouse.
This means that the input of each physical device is coalesced into a single
input stream. For example, if you type SHIFT on one keyboard and A on another,
the character echoed is an uppercase A.</para><para>Also supported is the ability to add a USB keyboard or mouse to a laptop
and have these devices work as one device with the laptop's PS/2 keyboard
and pad.</para><para>In addition, support for barcode readers is provided by the virtual
keyboard and mouse feature.</para><para>For more information, refer to <olink targetdoc="refman7" targetptr="virtualkm-7d" remap="external"><citerefentry><refentrytitle>virtualkm</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</sect2><sect2 id="gafiu"><title><command>vold</command> Provides Awareness of Hot-Plugged
USB Devices</title><para><emphasis role="strong">Solaris
Express 12/06:</emphasis> The <command>vold</command> features are removed
in this release. For information about managing removable media with <command>vold</command> in the Solaris 10 releases, see <olink targetdoc="817-5093" remap="external"><citetitle remap="book">System Administration Guide: Devices and File Systems</citetitle></olink>.</para><para>For information about new removable media management services
in the Solaris Express release, see <olink targetptr="gbppr" remap="internal">Changes and Improvements
to Removable Media Management</olink>.</para><para><emphasis role="strong">Solaris Express 6/05:</emphasis> The removable media manager
(<command>vold</command>) is now hotplug aware. There is no need to restart
this daemon to mount a USB mass storage device that has been hot-inserted.
However, for some devices, it might still be necessary to manually mount the
devices as <command>vold</command> is not always successful. In the case where <command>vold</command> fails to automatically mount a USB device, stop <command>vold</command>,
like this:</para><screen># <userinput>/etc/init.d/volmgt stop</userinput></screen><para>For information about manually mounting a USB mass storage device, see <olink targetptr="devusbtasks-22" remap="internal">How to Mount or Unmount a USB Mass Storage Device</olink>.</para>
</sect2>
</sect1><sect1 id="devusbover-28"><title>Solaris Support for USB Devices</title><para>Use the following
table to identify Solaris support information for specific USB 1.1 and USB
2.0 devices.</para><informaltable frame="topbot"><tgroup cols="5" colsep="0" rowsep="0"><colspec colname="colspec0" colwidth="31.66*"/><colspec colname="colspec1" colwidth="22.91*"/><colspec colname="colspec2" colwidth="22.74*"/><colspec colname="colspec3" colwidth="23.79*"/><colspec colname="colspec4" colwidth="23.96*"/><thead><row rowsep="1"><entry><para></para>
</entry><entry><para>Solaris 8 HW 5/03 and Later Releases</para>
</entry><entry><para>Solaris 9 Releases</para>
</entry><entry><para>Solaris 10 Releases</para>
</entry><entry><para>Solaris Express Releases</para>
</entry>
</row>
</thead><tbody><row><entry><para><emphasis role="strong">General USB 1.1 device support</emphasis></para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para><emphasis role="strong">General USB 2.0 device support</emphasis></para>
</entry><entry><para>SPARC only</para>
</entry><entry><para>SPARC and x86 (Solaris 9 4/04)</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para><emphasis role="strong">Specific USB 1.1 and USB 2.0 device support</emphasis></para>
</entry><entry>
</entry><entry>
</entry><entry>
</entry><entry>
</entry>
</row><row><entry><para>audio devices (See notes below.)</para>
</entry><entry><para><emphasis role="strong">USB 1.1 only</emphasis>:</para><para>Not supported on a USB 2.0 hub</para>
</entry><entry><para><emphasis role="strong">USB 1.1 only</emphasis>:</para><para>Not supported on a USB 2.0 hub</para>
</entry><entry><para><emphasis role="strong">USB 1.1 only</emphasis>:</para><para>Supported on a USB 2.0 hub</para>
</entry><entry><para><emphasis role="strong">USB 1.1 only:</emphasis></para><para>Supported on a USB 2.0 hub</para>
</entry>
</row><row><entry><para>generic USB driver (<olink targetdoc="refman7" targetptr="ugen-7d" remap="external"><citerefentry><refentrytitle>ugen</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>SPARC only</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>hid devices (keyboard and mouse devices, <olink targetdoc="refman7" targetptr="hid-7d" remap="external"><citerefentry><refentrytitle>hid</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>hubs (<olink targetdoc="refman7" targetptr="hubd-7d" remap="external"><citerefentry><refentrytitle>hubd</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>printers</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>serial devices (Edgeport (<olink targetdoc="refman7" targetptr="usbser-edge-7d" remap="external"><citerefentry><refentrytitle>usbser_edge</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>), Prolific (<olink targetdoc="refman7" targetptr="usbsprl-7d" remap="external"><citerefentry><refentrytitle>usbsprl</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>), Keyspan (<olink targetdoc="refman7" targetptr="usbsksp-7d" remap="external"><citerefentry><refentrytitle>usbsksp</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>storage devices (<olink targetdoc="refman7" targetptr="scsa2usb-7d" remap="external"><citerefentry><refentrytitle>scsa2usb</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row><row><entry><para>user-space USB device management library (<olink targetdoc="refman3f" targetptr="libusb-3lib" remap="external"><citerefentry><refentrytitle>libusb</refentrytitle><manvolnum>3LIB</manvolnum></citerefentry></olink>)</para>
</entry><entry><para>Not supported </para>
</entry><entry><para>Not supported </para>
</entry><entry><para>SPARC and x86</para>
</entry><entry><para>SPARC and x86</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable><para><emphasis role="strong">Notes:</emphasis></para><itemizedlist><listitem><para>Only USB 1.x audio devices are supported. No USB 2.0 audio
devices are supported.</para>
</listitem><listitem><para>A USB 1.x audio device that is connected to a USB 2.0 hub,
which is connected to a USB 2.0 port, can be used in the Solaris 10 and
Solaris Express releases only. For more information, see <olink targetdoc="refman7" targetptr="usb-ac-7d" remap="external"><citerefentry><refentrytitle>usb_ac</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink> and <olink targetdoc="refman7" targetptr="usb-as-7d" remap="external"><citerefentry><refentrytitle>usb_as</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>Devices that are not supported by a USB driver might have <literal>libusb</literal> applications such as <command>gphoto2</command>, <command>gtkam</command>,
and <command>pilotlink</command>. For more information, refer to <filename>/usr/sfw/share/doc/libusb/libusb.txt</filename>.</para>
</listitem><listitem><para><emphasis role="strong">Solaris 8 and Solaris 9 releases</emphasis> &ndash;
For USB dual framework issues, refer to the following site:</para><para><ulink url="http://www.sun.com/io_technologies/usb/USB-Faq.html" type="url">http://www.sun.com/io_technologies/usb/USB-Faq.html</ulink></para>
</listitem>
</itemizedlist><para>For task information associated with mass storage devices, see <olink targetptr="devusbtasks-1" remap="internal">Chapter&nbsp;8, Using USB Devices (Tasks)</olink>.</para><para>For more information about <literal>ugen</literal>, see <olink targetptr="fpkbw" remap="internal">USB Driver Enhancements</olink>.</para>
</sect1><sect1 id="devusbover-2"><title>Overview of USB Devices</title><para>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.</para><para>USB connectors are designed to fit only one type of cable, in one way.
The primary design motivation for USB was to alleviate the need for multiple
connector types for different devices. This design reduces the clutter on
the back panel of a system.</para><para>Devices connect to USB ports on external USB hubs, or on a root hub
that is located on the computer itself. Since hubs have several ports, several
branches of a device tree can stem from a hub.</para><para>For more information, see <olink targetdoc="refman7" targetptr="usba-7d" remap="external"><citerefentry><refentrytitle>usba</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink> or
go to the following site:</para><para><ulink url="http://www.usb.org" type="url"></ulink></para><sect2 id="devusbover-7"><title>Commonly Used USB Acronyms</title><para>The following table describes the USB acronyms that are used in
the Solaris OS. For a complete description of USB components and acronyms,
go to:</para><para><ulink url="http://www.usb.org" type="url"></ulink></para><informaltable frame="topbot"><tgroup cols="3" colsep="0" rowsep="0"><colspec colname="colspec0" colwidth="92.88*"/><colspec colname="colspec1" colwidth="317.08*"/><colspec colname="colspec2" colwidth="289.03*"/><thead><row rowsep="1"><entry><para>Acronym</para>
</entry><entry><para>Definition</para>
</entry><entry><para>For More Information</para>
</entry>
</row>
</thead><tbody><row><entry><para>UGEN</para>
</entry><entry><para>USB generic driver</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="ugen-7d" remap="external"><citerefentry><refentrytitle>ugen</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row><row><entry><para>USB</para>
</entry><entry><para>Universal Serial Bus</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="usb-7d" remap="external"><citerefentry><refentrytitle>usb</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row><row><entry><para>USBA</para>
</entry><entry><para>Universal Serial Bus Architecture (Solaris)</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="usba-7d" remap="external"><citerefentry><refentrytitle>usba</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row><row><entry><para>USBAI</para>
</entry><entry><para>USBA Client Driver Interface (Solaris)</para>
</entry><entry><para>N/A</para>
</entry>
</row><row><entry><para>HCD</para>
</entry><entry><para>USB host controller driver</para>
</entry><entry><para>N/A</para>
</entry>
</row><row><entry><para>EHCI</para>
</entry><entry><para>Enhanced Host Controller Interface</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="ehci-7d" remap="external"><citerefentry><refentrytitle>ehci</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row><row><entry><para>OHCI</para>
</entry><entry><para>Open Host Controller Interface</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="ohci-7d" remap="external"><citerefentry><refentrytitle>ohci</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row><row><entry><para>UHCI</para>
</entry><entry><para>Universal Host Controller Interface</para>
</entry><entry><para><olink targetdoc="refman7" targetptr="uhci-7d" remap="external"><citerefentry><refentrytitle>uhci</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink></para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2><sect2 id="devusbover-8"><title>USB Bus Description</title><para>The USB specification is openly available and free of royalties.
The specification defines the electrical and mechanical interfaces of the
bus and the connectors.</para><para>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. For more information about
hubs, see <olink targetptr="devusbover-17" remap="internal">USB Host Controller and Hubs</olink>.</para><figure id="devusbover-fig-20"><title>USB Physical Device Hierarchy</title><mediaobject><imageobject><imagedata entityref="usbtop"/>
</imageobject><textobject><simpara>Diagram shows a system with three active USB ports that
includes a compound device (hub and printer) and composite device (keyboard
and mouse).</simpara>
</textobject>
</mediaobject>
</figure><para><olink targetptr="devusbover-fig-20" remap="internal">Figure&nbsp;7&ndash;1</olink> shows
a system with three active USB ports. The first USB port connects a USB memory
stick. The second USB port connects an external hub, which in turn, connects
a cdrw device and a composite keyboard/mouse device. As a <emphasis>composite
device</emphasis>, this keyboard contains a USB controller, which operates
both the keyboard and an attached mouse. The keyboard and the mouse share
a common USB bus address because they are directed by the same USB controller.</para><para><olink targetptr="devusbover-fig-20" remap="internal">Figure&nbsp;7&ndash;1</olink> also shows an example of a hub and a printer as a <emphasis>compound
device</emphasis>. The hub is an external hub that is enclosed in the same
casing as the printer. The printer is permanently connected to the hub. The
hub and printer have separate USB bus addresses. </para><para>The device tree path name for some of the devices that are displayed
in <olink targetptr="devusbover-fig-20" remap="internal">Figure&nbsp;7&ndash;1</olink> are
listed here.</para><variablelist><varlistentry><term>Memory stick</term><listitem><para><literal>/pci@1f,4000/usb@5/storage@1</literal></para>
</listitem>
</varlistentry><varlistentry><term>Keyboard</term><listitem><para><literal>/pci@1f,4000/usb@5/hub@2/device@1/keyboard@0</literal></para>
</listitem>
</varlistentry><varlistentry><term>Mouse</term><listitem><para><literal>/pci@1f,4000/usb@5/hub@2/device@1/mouse@1</literal></para>
</listitem>
</varlistentry><varlistentry><term>cdrw device</term><listitem><para><literal>/pci@1f,4000/usb@5/hub@2/storage@3</literal></para>
</listitem>
</varlistentry><varlistentry><term>Printer</term><listitem><para><literal>/pci@1f,4000/usb@5/hub@3/printer@1</literal></para>
</listitem>
</varlistentry>
</variablelist><sect3 id="devusbover-18"><title>USB Devices and Drivers</title><para>USB devices with similar attributes and services are grouped into
device classes.  Devices
within a class are managed by the same device driver pair. However, the USB
specification also allows for vendor-specific devices that are not part of
a specific class.</para><para>The Human Interface Device (HID) class contains devices that are user-controlled
such as the following devices:</para><itemizedlist><listitem><para>Keyboards</para>
</listitem><listitem><para>Mouse devices</para>
</listitem><listitem><para>Joysticks</para>
</listitem>
</itemizedlist><para>The Communication Device class includes the following devices:</para><itemizedlist><listitem><para>Modems</para>
</listitem><listitem><para>Ethernet adapters</para>
</listitem>
</itemizedlist><para>Other device classes include the following classes:</para><itemizedlist><listitem><para>Audio</para>
</listitem><listitem><para>Monitor</para>
</listitem><listitem><para>Printer</para>
</listitem><listitem><para>Storage Device</para>
</listitem>
</itemizedlist><para>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:</para><para><ulink url="http://www.usb.org" type="url">http://www.usb.org</ulink></para><para>For more information about USB devices supported in the Solaris release,
see <olink targetdoc="refman7" targetptr="usb-7d" remap="external"><citerefentry><refentrytitle>usb</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</sect3><sect3 id="fpkbw"><title>USB Driver Enhancements</title><para>The following USB driver enhancements are included.</para><itemizedlist><listitem><para><emphasis role="strong">USB CDC ACM device support &ndash;</emphasis> The <literal>acm</literal> driver can work with devices that are compliant with the USB
Communication Class Device specification's Abstract Control Model and some
PCMCIA cards that have modem capabilities.</para><para>The <command>pppd</command> daemon
can access these devices through the <filename>/dev/term/[0~9]</filename>*
entries. For more information, see <olink targetdoc="refman1m" targetptr="pppd-1m" remap="external"><citerefentry><refentrytitle>pppd</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para><para>For more information, see <olink targetdoc="refman7" targetptr="usbsacm-7d" remap="external"><citerefentry><refentrytitle>usbsacm</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para><emphasis role="strong">Generic USB driver &ndash;</emphasis> USB
devices can now be accessed and manipulated by applications using standard <trademark class="registered">UNIX</trademark> read(2) and write(2) system calls, and
without writing a special kernel driver. Additional features include:</para><itemizedlist><listitem><para>Applications have access to raw device data and device status.</para>
</listitem><listitem><para>The driver supports control, bulk, and interrupt (in and out)
transfers.</para>
</listitem>
</itemizedlist><para>Starting in the Solaris 10 6/06 release, the <literal>ugen</literal> driver
no longer needs to bind explicitly to a device. By default, <literal>usb_mid</literal> binds
to devices that lack a class driver and exports a <literal>ugen</literal> interface
that works with <literal>libusb</literal>. For example, you can plug in a
USB camera that is not a mass-storage device and use a <literal>libusb</literal> application
to access it. In addition, both <literal>scsa2usb</literal> and <literal>usbprn</literal> drivers
export <literal>ugen</literal> interfaces and <literal>libusb</literal> applications
can be used on these classes of devices directly.</para><para>For more information,
refer to <olink targetdoc="refman7" targetptr="ugen-7d" remap="external"><citerefentry><refentrytitle>ugen</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para><emphasis role="strong">USB serial driver support</emphasis></para><itemizedlist><listitem><para>Digi Edgeport USB support &ndash; The Edgeport USB driver
only works with Edgeport devices and not with other USB serial devices.</para><itemizedlist><listitem><para>New devices are accessed as <literal>/dev/term/[0-9]*</literal> and <literal>/dev/cua/[0-9]*</literal>.</para>
</listitem><listitem><para>USB serial ports are usable as any other serial port would
be, except that they cannot serve as a local serial console. The fact that
their data is run through a USB port is transparent to the user.</para>
</listitem>
</itemizedlist><para>For more information, see <olink targetdoc="refman7" targetptr="usbser-edge-7d" remap="external"><citerefentry><refentrytitle>usbser_edge</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>, or go to the following sites:</para><itemizedlist><listitem><para><ulink url="http://www.digi.com" type="url">http://www.digi.com</ulink></para>
</listitem><listitem><para><ulink url="http://www.sun.com/io" type="url">http://www.sun.com/io</ulink></para>
</listitem>
</itemizedlist>
</listitem><listitem><para>Keyspan &ndash; The Keyspan USB serial driver only works with
Keyspan devices, which currently supports the USA-19HS and USA-49WLC models.</para><para>For more information, see <olink targetdoc="refman7" targetptr="usbsksp-7d" remap="external"><citerefentry><refentrytitle>usbsksp</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>Prolific &ndash; The Prolific USB serial driver only works
with devices based on the PL2303 chipset.</para><para>For more information,
see <olink targetdoc="refman7" targetptr="usbsprl-7d" remap="external"><citerefentry><refentrytitle>usbsprl</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem>
</itemizedlist><para>For more information about the USB to serial devices support, go to
the following site:</para><para><ulink url="http://www.sun.com/io_technologies/usb/USB-Faq.html" type="url">http://www.sun.com/io_technologies/usb/USB-Faq.html</ulink></para>
</listitem><listitem><para><emphasis role="strong">Documentation and binary support for
user-written kernel and userland drivers &ndash;</emphasis> For up-to-date
information on USB driver development, go to:</para><itemizedlist><listitem><para><ulink url="http://www.sun.com/io_technologies/usb/USB-Faq.html" type="url">http://www.sun.com/io_technologies/usb/USB-Faq.html</ulink></para>
</listitem><listitem><para><ulink url="http://developers.sun.com/solaris/developer/support/driver/usb.html" type="text">http://developers.sun.com/solaris/developer/support/driver/usb.html</ulink></para>
</listitem><listitem><para><olink targetdoc="driver" targetptr="usb-1" remap="external">Chapter 20, <citetitle remap="chapter">USB Drivers,</citetitle> in <citetitle remap="book">Writing
Device Drivers</citetitle></olink></para>
</listitem><listitem><para><olink targetdoc="driver" targetptr="lp64-35004" remap="external">Appendix
C, <citetitle remap="appendix">Making a Device Driver 64-Bit Ready,</citetitle> in <citetitle remap="book">Writing Device Drivers</citetitle></olink></para>
</listitem><listitem><para><olink targetdoc="drivertut" remap="external"><citetitle remap="book">Device
Driver Tutorial</citetitle></olink></para>
</listitem><listitem><para><olink targetdoc="refman7" targetptr="intro-7" remap="external"><citerefentry><refentrytitle>Intro</refentrytitle><manvolnum>7</manvolnum></citerefentry></olink>, <olink targetdoc="refman9f" targetptr="intro-9f" remap="external"><citerefentry><refentrytitle>Intro</refentrytitle><manvolnum>9F</manvolnum></citerefentry></olink>, and <olink targetdoc="refman9s" targetptr="intro-9s" remap="external"><citerefentry><refentrytitle>Intro</refentrytitle><manvolnum>9S</manvolnum></citerefentry></olink></para>
</listitem><listitem><para><ulink url="http://developers.sun.com/prodtech/solaris/driverdev/reference/codesamples/usb_security/index.html" type="url">http://developers.sun.com/prodtech/solaris/driverdev/reference/codesamples/usb_security/index.html </ulink></para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist><sect4 id="fpkea"><title>The EHCI, OHCI, and UHCI Drivers</title><para>Features of the EHCI driver include:</para><itemizedlist><listitem><para>Complies with enhanced host controller interface that supports
USB 2.0.</para>
</listitem><listitem><para>Supports high-speed control, bulk, interrupt, and isochronous
transfers.</para>
</listitem>
</itemizedlist><itemizedlist><listitem><para>The USB 2.0 chip has one EHCI controller and one or more OHCI
or UHCI controllers.</para>
</listitem><listitem><para>A USB 1.1 device is dynamically assigned to the OHCI  or UHCI
controller when it is plugged in. A USB 2.0 device is dynamically assigned
to the EHCI controller when it is plugged in.</para>
</listitem>
</itemizedlist><para>Use the <command>prtconf</command> command output to identify whether
your system supports USB 1.1 or USB 2.0 devices. For example:</para><screen># prtconf  -D | egrep "ehci|ohci|uhci"</screen><para>If your <command>prtconf</command> output identifies an EHCI controller,
your system supports USB 2.0 devices.</para><para>If your <command>prtconf</command> output identifies an OHCI or UHCI
controller, your system supports USB 1.1 devices.</para>
</sect4>
</sect3><sect3 id="devusbover-19"><title>Solaris USB Architecture (USBA)</title><para>USB devices can be represented
as two levels of device tree nodes. A device node represents the entire USB <replaceable>device</replaceable>. One or more child <replaceable>interface</replaceable> nodes
represent the individual USB interfaces on the device. </para><para>Driver binding is achieved by using the compatible name properties.
For more information, refer to 3.2.2.1 of the IEEE 1275 USB binding and <olink targetdoc="driver" remap="external"><citetitle remap="book">Writing Device Drivers</citetitle></olink>.
A driver can either bind to the entire device and control all the interfaces,
or can bind to just one interface. 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 IEEE 1275 binding specification.</para><para>The Solaris USB Architecture (USBA) adheres to the USB 1.1 and USB 2.0
specifications and is part of the Solaris  Device Driver Interface (DDI).
The USBA model is similar to Sun Common SCSI Architecture (SCSA). As the following
figure shows, the USBA is a thin layer that provides a generic USB transport-layer
abstraction to client drivers, providing them with services that implement
core generic USB functionality.</para><figure id="devusbover-fig-36"><title>Solaris USB Architecture (USBA)</title><mediaobject><imageobject><imagedata entityref="usba-fw"/>
</imageobject><textobject><simpara>Diagram shows the relationship between client drivers,
USBA framework, host controller drivers, and the device bus.</simpara>
</textobject>
</mediaobject>
</figure>
</sect3>
</sect2>
</sect1><sect1 id="devusbover-9"><title>About USB in the Solaris OS</title><para>This section describes information you should know about USB in the Solaris OS.</para><sect2 id="eveon"><title>USB 2.0 Features</title><para>The following USB 2.0 features are included:</para><itemizedlist><listitem><para><emphasis role="strong">Better performance</emphasis> &ndash;
Increased data throughput for devices connected to USB 2.0 controllers, up
to 40 times faster than USB 1.1 devices.</para><para>You
can take advantage of the high-speed USB protocol when accessing high-speed
USB devices, such as DVDs and hard disks.</para>
</listitem><listitem><para><emphasis role="strong">Backward Compatibility</emphasis> &ndash;
Compatibility with 1.0 and 1.1 devices and drivers so that you can use the
same cables, connectors, and software interfaces.</para>
</listitem>
</itemizedlist><para>For a description of USB devices and terminology, see <olink targetptr="devusbover-2" remap="internal">Overview of USB Devices</olink>.</para><sect3 id="devusbover-40"><title>USB 2.0 Device Features and Compatibility
Issues</title><para>USB 2.0 devices are defined as high-speed devices that follow the USB
2.0 specification. You can refer to the USB 2.0 specification at <ulink url="http://www.usb.org" type="url">http://www.usb.org</ulink>.</para><para>To identify the speed of your USB device in the Solaris 10 releases,
check the <filename>/var/adm/messages</filename> file for messages similar
to the following:</para><screen>Dec 13 17:05:57 mysystem usba: [ID 912658 kern.info] USB 2.0 device
(usb50d,249) operating at hi speed (USB 2.x) on USB 2.0 external hub:
storage@4, scsa2usb0 at bus address 4</screen><para>Here are some of the USB devices that are supported in this Solaris
release:</para><itemizedlist><listitem><para>Mass storage devices, such as CD-RWs, hard disks, DVDs, digital
cameras, diskettes, tape drives, memory sticks, and multi-format card readers</para>
</listitem><listitem><para>Keyboards and mouse devices</para>
</listitem><listitem><para>Audio devices, such as speakers and microphones</para>
</listitem>
</itemizedlist><para>For a full listing of USB devices that have been verified on the Solaris
release, go to:</para><para><ulink url="http://www.sun.com/io_technologies/USB.html" type="url">http://www.sun.com/io_technologies/USB.html</ulink></para><para>Additional storage devices might work by modifying the <literal>scsa2usb.conf</literal> file. For more information, see <olink targetdoc="refman7" targetptr="scsa2usb-7d" remap="external"><citerefentry><refentrytitle>scsa2usb</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para><para>Solaris USB 2.0 device support includes the following features:</para><itemizedlist><listitem><para>Increased USB bus speed from 12 Mbyte/sec to 480 Mbyte/sec.
This increase means devices that support the USB 2.0 specification can run
significantly faster than their USB 1.1 counterparts, when they are connected
to a USB 2.0 port.</para><para>A USB 2.0 port might be one of the following
possibilities:</para><itemizedlist><listitem><para>A port on a USB 2.0 PCI card</para>
</listitem><listitem><para>A port on a USB 2.0 hub that is connected to USB 2.0 port</para>
</listitem><listitem><para>A port on a SPARC or x86 computer motherboard</para>
</listitem>
</itemizedlist><para>A USB 2.0 PCI card  might be needed for older SPARC platforms.</para>
</listitem><listitem><para>For a list of USB 2.0 PCI cards that have been verified for
the Solaris release, go to:</para><para><ulink url="http://www.sun.com/io_technologies/USB.html" type="url">http://www.sun.com/io_technologies/USB.html</ulink></para>
</listitem><listitem><para>USB 1.1 devices work as they have in the past, even if you
have both USB 1.1 and USB 2.0 devices on the same system.</para>
</listitem><listitem><para>While USB 2.0 devices operate on a USB 1.x port, their performance
is significantly better when they are connected to a USB 2.0 port.</para>
</listitem><listitem><para>A USB 2.0 host controller has one high-speed Enhanced Host
Controller Interface (EHCI) and one or more OpenHCI Host Controller Interface
(OHCI) or Universal Host Controller Interface (UHCI) embedded controllers.
Devices connected to a USB 2.0 port are dynamically assigned to either an
EHCI or OHCI controller, depending on whether they support USB 2.0.</para><note><para>USB 2.0 storage devices that are connected to a port on a USB
2.0 PCI card, and that were used with a prior Solaris release in the same
hardware configuration, can change device names after upgrading to this release.
This change occurs because these devices are now seen as USB 2.0 devices and
are taken over by the EHCI controller. The controller number, <replaceable>w</replaceable> in <literal>/dev/[</literal><replaceable>r</replaceable><literal>]dsk/c</literal><replaceable>w</replaceable><literal>t</literal><replaceable>x</replaceable><literal>d</literal><replaceable>y</replaceable><literal>s</literal><replaceable>z</replaceable>, is changed
for these devices.</para><para>Also note that the speed of a USB device is
limited to what the parent port can support. For example, if a USB 2.0 external
hub is followed by	 a USB 1.x hub and a USB 2.0 device downstream, devices
that are connected to the USB 2.0 external hub run at full speed and not high
speed.</para>
</note>
</listitem>
</itemizedlist><para>For more information on USB 2.0 device support, see <olink targetdoc="refman7" targetptr="ehci-7d" remap="external"><citerefentry><refentrytitle>ehci</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink> and <olink targetdoc="refman7" targetptr="usba-7d" remap="external"><citerefentry><refentrytitle>usba</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</sect3><sect3 id="devusbover-44"><title>Bus-Powered Devices</title><para>Bus-powered hubs use power from the USB bus to which they are connected,
to power devices connected to them. Special care must be taken to not overload
these hubs, because the power these hubs offer to their downstream devices
is limited.</para><para>Starting in the Solaris Express release,
power budgeting is implemented for USB devices. This feature has the following
limitations:</para><itemizedlist><listitem><para>Cascading two bus-powered hubs is prohibited.</para>
</listitem><listitem><para>Each bus-powered hub is allowed a maximum of 100 mA only for
each port.</para>
</listitem><listitem><para>Only self-powered or low bus-powered devices are allowed to
connect to a bus-powered hub. High bus-powered devices are denied the connection.
Some hubs or devices can report a false power source, such that the connection
might be unpredictable.</para>
</listitem>
</itemizedlist>
</sect3>
</sect2><sect2 id="devusbover-25"><title>USB Keyboards and Mouse Devices</title><para>Keep the following issues in mind when using
USB keyboards and mouse devices:</para><itemizedlist><listitem><para>Do not move the keyboard and mouse <emphasis>during</emphasis> a
reboot or at the <literal>ok</literal> prompt on a SPARC system. You can move
the keyboard and mouse to another hub at any time <emphasis>after</emphasis> a
system reboot. After you plug in a keyboard and mouse, they are fully functional
again.</para>
</listitem><listitem><para>The keys just to the left of the keypad might not function
on some third-party USB keyboards.</para>
</listitem><listitem><para><emphasis role="strong">SPARC</emphasis> &ndash; Keep the
following issues in mind when using USB keyboards and mouse devices on SPARC
systems: </para><itemizedlist><listitem><para>The power key on a USB keyboard behaves differently than the
power key on the Sun type 5 keyboard. On a USB keyboard, you can suspend or
shut down the system by using the SUSPEND/SHUTDOWN key. However, you cannot
use that key to power up the system.</para>
</listitem><listitem><para>Before the boot process finishes, the OpenBoot PROM (OBP)
limits keyboard and mouse devices to the motherboard root hub ports only.</para>
</listitem><listitem><para>USB keyboard and mouse devices cannot be used simultaneously
with Sun Type 3, 4, or 5 keyboards on legacy SPARC systems, such as the Ultra
80.</para>
</listitem>
</itemizedlist>
</listitem><listitem><para>For information about multiple keyboard and mouse device support,
see <olink targetdoc="refman7" targetptr="virtualkm-7d" remap="external"><citerefentry><refentrytitle>virtualkm</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</listitem>
</itemizedlist><sect3 id="fpkdm"><title>USB Wheel Mouse Support</title><para>Starting in the Solaris 9 9/04 release, the following wheel mouse features
are supported:</para><itemizedlist><listitem><para>Support for more than 3 buttons is available on USB or PS/2
mouse devices.</para>
</listitem><listitem><para>Wheel mouse scrolling is available on a USB or PS/2 mouse
device. This support means that rolling the wheel on a USB or a PS/2 mouse
results in a scroll  in the application or window under mouse focus. <trademark>StarOffice</trademark>, Firefox, and GNOME applications support wheel mouse scrolling.
 However, other applications might not support wheel mouse scrolling.</para>
</listitem>
</itemizedlist>
</sect3>
</sect2><sect2 id="devusbover-17"><title>USB Host Controller and Hubs</title><para>A USB hub is responsible for the following:</para><itemizedlist><listitem><para>Monitoring the insertion or removal of a device on its ports</para>
</listitem><listitem><para>Power managing individual devices on its ports</para>
</listitem><listitem><para>Controlling power to its ports</para>
</listitem>
</itemizedlist><para>The USB host controller has an embedded
hub called the <emphasis>root hub</emphasis>. The ports that are visible at
the system's back panel are the ports of the root hub. The USB host controller
is responsible for the following:</para><itemizedlist><listitem><para>Directing the USB bus. Individual devices cannot arbitrate
for the bus.</para>
</listitem><listitem><para>Polling the devices by using a polling interval that is determined
by the device. The device is assumed to have sufficient buffering to account
for the time between the polls.</para>
</listitem><listitem><para>Sending data between the USB host controller and its attached
devices. Peer-to-peer communication is not supported.</para>
</listitem>
</itemizedlist><sect3 id="devusbover-21"><title>USB Hub Devices</title><itemizedlist><listitem><para>Do not cascade hubs beyond four levels on either SPARC based
systems or x86 based systems. On SPARC systems, the <trademark>OpenBoot</trademark> PROM
cannot reliably probe beyond four levels of devices. </para>
</listitem><listitem><para>Do not plug a bus-powered hub into another bus-powered hub
in a cascading style. A bus-powered hub does not have its own power supply.</para>
</listitem><listitem><para>Do not connect a device that requires a large amount of power
to a bus-powered hub. These devices might be denied connection to bus-powered
hubs or might drain the hub of power for other devices. An example of such
a device is a USB diskette device.</para>
</listitem>
</itemizedlist>
</sect3><sect3 id="devusbover-23" arch="sparc"><title>USB Power Management</title><para>Suspending and resuming USB devices is fully supported on SPARC systems.
However, do not suspend a device that is busy and never remove a device when
the system is powered off under a suspend shutdown.</para><para>The USB framework makes a best effort to power manage all devices on
SPARC based systems with power management enabled. Power managing a USB device
means that the hub driver suspends the port to which the device is connected.
Devices that support <emphasis>remote wake up</emphasis> can notify the system
to wake up everything in the device's path so that the device can be used.
The host system could also wake up the device if an application sends an I/O
to the device.</para><para>All HID devices (keyboard, mouse, hub, and storage devices), hub devices,
and storage devices are power managed by default if they support remote wake-up
capability. A USB printer is power managed only between two print jobs. Devices
that are managed by the generic USB driver (UGEN) are power managed only when
they are closed.</para><para>When power management is running to reduce power consumption,
USB leaf devices are powered down first. After all devices that are connected
to a hub's ports are powered down, the hub is powered down after some delay.
To achieve the most efficient power management, do not cascade many hubs.</para><para>For information about using the SUSPEND/SHUTDOWN key on SPARC systems,
see <olink targetptr="devusbover-25" remap="internal">USB Keyboards and Mouse Devices</olink>.</para>
</sect3>
</sect2><sect2 id="devusbover-15"><title>Guidelines for USB Cables</title><para>Keep the following guidelines in mind when connecting USB cables:</para><itemizedlist><listitem><para>Always use USB 2.0 compliant, fully rated (480
Mbit/sec) 20/28 AWG cables for connecting USB 2.0 devices.</para>
</listitem><listitem><para>The maximum cable length that is supported is 5 meters.</para>
</listitem><listitem><para>Do not use cable extenders. For best results, use a self-powered
hub to extend cable length.</para>
</listitem>
</itemizedlist><para>For more information, go to:</para><para><ulink url="http://www.usb.org/about/faq/ans5" type="url">http://www.usb.org/about/faq/ans5</ulink></para>
</sect2>
</sect1>
</chapter>