<!DOCTYPE Book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>

<Book id=Linux-USB-compliance>

 <BookInfo>
  <Title>Compliance testing the Linux USB sub-system</>
  <AuthorGroup>
   <Author><FirstName>Brad</><Surname>Hards</>
    </Author>
  </AuthorGroup>
  <Abstract>
   <Para>
    This document is an early draft of compliance test procedures for
the USB sub-system under Linux.
   </>
   <Para>
    Please send any corrections to the author and to
<email>linux-usb-test-devel@lists.sourceforge.net</email>
   </>
  </Abstract>
 </BookInfo>

<Part>
<Title>USB Interoperability Guidelines</>

<Chapter>
<title>Introduction</title>

<para>
This document provides a cookbook approach to performing
interoperability testing of USB devices and hubs.
The procedures assume that the reader understands which
tests are applicable, and reading the procedures before executing
them is strongly recommended.
</para>

<para>
Although these guidelines appear to be extensive, they outline
the minimum testing that should be required prior to shipping
a USB product.
</para>

<para>
It is required that prior to beginning testing, all systems
that will be used in the testing be configured with a fresh
installation of the operating system.
</para>

<para>
Two drive images will need to be captured before beginning
interoperability testing. These images provide a means for
timely recreation of a failing scenario as well as verification
of problem resolution. These images will also allow for quick
restoration of the test environment in the event of a system
lock-up or other catastrophic problem. The content of these
images will be outlined later in this document.
</para>

<para>
This document also outlines requirements for performing testing.
These requirements include:
<itemizedlist>
<listitem><para>System platforms</para></listitem>
<listitem><para>Software applications, drivers, and tools </para></listitem>
<listitem><para>Other USB devices, other than the Device Under Test
or the Hub Under Test.</para></listitem>
</itemizedlist>
</para>

<para>
It is recommended that these be procured prior to beginning
testing in order to expedite the testing process.
</para>
</Chapter>

<Chapter>
<title>Overview</title>
<para>
USB interoperability is the ability of a USB device to operate,
without side effects, in the presence of other USB devices.
</para>

<para>
Interoperability testing of USB is necessary because of the nature
of the architecture. USB provides the opportunity for an end-user
to add and remove devices to a system without ever opening up the
system  chassis or removing power from the system. There are few
limitations of the architecture, and therefore the number of
devices and the variation of device mix are virtually unpredictable.
</para>

<para>
This document is intended to provide a cookbook approach for
performing interoperability testing for:
<itemizedlist>
<listitem><para>A USB device without other USB devices</para></listitem>
<listitem><para>A USB device with other USB devices</para></listitem>
<listitem><para>A USB hub-type device</para></listitem>
</itemizedlist>
</para>

<Sect1><title>USB Unique Features</title>
<para>
There are some features of USB that add complexity to interoperability testing.
</para>

<Sect2><title>Power Management</title>
<para>
Device driver must be able to handle system power state change
 requests gracefully. While idle, a device driver must allow
the system to enter a sleep state. However, while idle there
are cases in which a device driver might be allowed to prevent
the system from entering a sleep state. For more information on
this topic, see the white paper, Understanding WDM Power Management, in
the whitepapers section on USB-IF website at
<ulink url="http://www.usb.org/developers/whitpapr.html">
http://www.usb.org/developers/whitpapr.html</ulink>.
</para>
</Sect2>

<Sect2><title>Hot attach and detach</title>
<para>
Since USB has dynamic plug and play capability, the system hardware
and operating system immediately detect a device attached to or
removed from the system. This requires a device driver to be
dynamically loaded and unloaded.
</para>

<para>
In addition, an end-user has the ability to add and remove devices to the system configuration or
reboot the system at any time. This also provides opportunity to have a dynamic system topology,
where the end-user can move devices from one place to another.
</para>
</Sect2>

<Sect2><title>Bus expandability</title>
<para>
An end-user has the ability to expand the number of devices added to a system. Typically the
system has two USB ports, and the end-user can add additional ports to the system by use of USB
hubs, allowing up to 126 devices to be added behind a single USB host controller.
</para>
</Sect2>

<Sect2><title>Limited Bandwidth</title>
<para>
USB has limited bandwidth. This bandwidth is dynamic, meaning that bandwidth can be
consumed as devices become active and also may not be available when a device attempts to
activate. Device drivers must be aware of this and handle the situation gracefully.
</para>
</Sect2>

</Sect1>
</Chapter>

<Chapter><title>Requirements</title>
<para>
The following tables outline the minimum list of items that must be
available in order to complete USB interoperability testing.
Additional devices can be added to this configuration to expand
the testing environment.
</para>

<Sect1><title>System Requirements</title>
<para>
<informaltable>
<tgroup cols=4>
<tbody>
<row><entry>How many</entry>
     <entry>Device</entry>
     <entry>Manufacturer</entry>
     <entry> Description</entry>
</row>
<row><entry>1</entry>
     <entry> UHCI host controller</entry>
     <entry>   </entry>
     <entry> UHCI system or add-in card</entry>
</row>
<row><entry>1</entry>
     <entry> OHCI host controller</entry>
     <entry>   </entry>
     <entry> OHCI system or add-in card</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</Sect1>

<Sect1><title>Software Requirements</title>
<para>
<informaltable>
<tgroup cols=4>
<tbody>
<row><entry>Software</entry>
     <entry> Version</entry>
     <entry> Description</entry>
     <entry> Location</entry>
</row>
<row><entry>Windows 98</entry>
     <entry>  SE 4.10.2222A</entry>
     <entry>  USB-IF compliance tool environment </entry>
     <entry> </entry>
</row>
<row><entry>UsbCheck.exe</entry>
     <entry>  3.2 or later</entry>
     <entry>  USB-IF compliance test</entry>
     <entry>  <ulink url="http://www.usb.org/developers/tools.html">
                   http://www.usb.org/developers/tools.html </ulink></entry>
</row>
<row><entry>Hidview.exe</entry>
     <entry>  3.6 or later</entry>
     <entry>  USB-IF compliance test</entry>
     <entry>  <ulink url="http://www.usb.org/developers/tools.html">
                   http://www.usb.org/developers/tools.html </ulink></entry>
</row>
<row><entry>Linux</entry>
     <entry>2.3.99 or later</entry>
     <entry>Operating System kernel</entry>
     <entry><ulink url="http://www.kernel.org">http://www.kernel.org</ulink></entry>
</row>
<row><entry>GNU/Linux distribution</entry>
     <entry>To be specified</entry>
     <entry>Linux user environment</entry>
     <entry> </entry>
</row>
<row><entry>Additional Device Driver</entry>
     <entry> </entry>
     <entry> </entry>
     <entry>  (if any)</entry>
</row>
<row><entry>Test Application </entry>
     <entry> </entry>
     <entry> </entry>
     <entry> (if any)</entry>
</row>
<row><entry>isoc-soak</entry>
     <entry> </entry>
     <entry>  Linux bandwidth consumption program</entry>
     <entry> Not yet available</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</Sect1>

<Sect1><title>Suggested Devices</title>
<para>
Below is a listing of suggested devices used for testing. These
devices are not required, but are suggested. What is required is
that the selected devices provide data transfers via isochronous,
bulk, and interrupt protocols.
</para>

<para>
<informaltable>
<tgroup cols=4>
<tbody>
<row><entry>How many </entry>
     <entry> Device</entry>
     <entry>  Manufacturer</entry>
     <entry>  Description </entry>
</row>
<row><entry>2</entry>
     <entry>  Device Under Test</entry>
     <entry>  Device to be tested </entry>
     <entry>  </entry>
</row>
<row><entry>1</entry>
     <entry>  Similar device</entry>
     <entry>  Same class device as Device Under Test</entry>
     <entry>  Not required for hub testing</entry>
</row>
<row><entry>1</entry>
     <entry>  Internet Keyboard Pro</entry>
     <entry>  Microsoft</entry>
     <entry>  Composite Keyboard/Hub </entry>
</row>
<row><entry>1</entry>
     <entry>  M-BA47</entry>
     <entry>  Logitech </entry>
     <entry>  Wheel Mouse</entry>
</row>
<row><entry> 3</entry>
     <entry> Hub</entry>
     <entry> </entry>
     <entry> 4 (or more) port self-powered or bus-powered and self-powered hub </entry>
</row>
<row><entry>1</entry>
     <entry> Hub </entry>
     <entry> </entry>
     <entry> 4 port bus-powered or bus-powered and self-powered hub  </entry>
</row>
<row><entry> 1 </entry>
    <entry> DSS350</entry>
     <entry> Philips</entry>
     <entry> Speakers </entry>
</row>
<row><entry>1 </entry>
     <entry> Zip 250 Drive </entry>
     <entry> Iomega </entry>
     <entry> Mass Storage  </entry>
</row>
<row><entry>1</entry>
     <entry> HP895C</entry>
     <entry> Hewlett Packard  </entry>
     <entry> Printer</entry>
</row>
<row><entry>1</entry>
     <entry> 1595 </entry>
     <entry> Zoom Telephonics </entry>
     <entry> Digital video camera  </entry>
</row>
<row><entry>5</entry>
     <entry> 5 metre cable </entry>
     <entry>  </entry>
     <entry> USB A-B cable  </entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</Sect1>
</Chapter>

<Chapter><title>About Interoperability</title>
<Sect1><title>So what is device interoperability?</title>
<para>
For the purposes of this document, USB interoperability
is the defined as the ability of one USB device to operate,
without side effects, in the presence of other USB devices.
The goal is an enjoyable end-user experience. USB devices
should operate as the end-user would expect.
</para>
</Sect1>

<Sect1>
<title>Who should do interoperability?</title>
<para>
All hub vendors and device vendors should do device
interoperability testing. Performing interoperability
testing in all hardware areas will ensure the overall
 health of the USB technology. Broad consumer
acceptance of USB should be the goal of the entire USB community.
</para>
</Sect1>

<Sect1><title>When should interoperability be done?</title>
<para>
Interoperability testing should be done as part of the
development cycle. Due to the time involved in doing
this testing, it is recommended that this testing be
done a minimum of three times in the development
phase. Interoperability testing can flush out problems
with hardware, device drivers, and application software.
</para>

<para>
Interoperability testing is not intended to be part of
the manufacturing process.
</para>
</Sect1>

</Chapter>

<Chapter><title>Undesirable Side Effects</title>
<para>
The following is a list of side effects that must not occur
during USB interoperability testing. This is a list of the most
frequent side effects, and is not meant to be a complete list.
Any side effect in addition to those on this list must be
resolved prior to production release of the Device Under Test.
</para>

<Sect1><title>Kernel oopses and panics</title>
<para>
Core dumps, kernel oopses and kernel panics are never acceptable.
Host controller drivers, device drivers and applications
should handle all situations gracefully, informing the end-user of any
issues that occur with either a device or limited resources.
</para>
</Sect1>

<Sect1><title>System reboots</title>
<para>
Device attach and device driver load should not cause or require
the system to reboot. Linux systems should require reboot only after
a kernel upgrade.
</para>
</Sect1>

<Sect1><title>System hangs</title>
<para>
At no time should a device or device driver cause the operating
system to hang. Again, the end-user should be informed of limitations
on required resources, system resources or USB resources.
</para>
</Sect1>

<Sect1><title>Device not detected</title>
<para>
USB devices are expected to be available at all times after the
device is attached. Application software should check to ensure
that the USB device is available before attempting to connect the
device driver to the USB device. The end-user should be informed
of any issues when connecting to the device.
</para>
</Sect1>

<Sect1><title>The most important issue</title>
<para>
To re-iterate, <emphasis>the ultimate concern is the end-user
experience</emphasis>. In short, the device and associated software
should operate as the end-user would expect.
</para>
</Sect1>
</Chapter>

<Chapter><title>Typical end-user scenarios</title>
<para>
Again, remembering that USB is a dynamic plug and play bus,
several end-user scenarios are required to be tested.
</para>

<Sect1><title>Hot attach</title>
<para>
The end-user plugs the device into a USB port while the system is
powered. The system hardware and system software will recognize the
device, and load the appropriate device drivers as necessary.
</para>
<note> <para>
Device drivers MUST be able to be loaded without any application
software being installed. This means that device drivers MUST be
outside any application setup program.
</para> </note>
</Sect1>

<Sect1><title>Application installation (if applicable)</title>
<para>
If the device requires application software in order to operate,
then application software will be required to be loaded.
</para>
<para>
The USB device, device driver, and application software <emphasis>must
</emphasis> be able operate directly after application installation.
</para>
<note> <para>
Application installation <emphasis>cannot</emphasis> be required
prior to attaching the device to the system. Device drivers
<emphasis>must</emphasis> be outside any application setup program.
</para> </note>
</Sect1>

<Sect1><title>Warm reboot</title>
<para>
After the device is attached to the system, the end-user
 may reboot the system without turning off power to the system.
This is referred to as a <emphasis>warm</emphasis> reboot.
</para>
<para>
The USB device, device driver, and application software
<emphasis>must</emphasis> be able operate after the warm reboot.
</para>
</Sect1>

<Sect1><title>Cold boot</title>
<para>
After the device is attached to the system, the end-user may shut
down the system, that is turn off power, and power the system up
again. This is referred to as a <emphasis>cold</emphasis> boot.
</para>
<para>
The USB device, device driver, and application software
<emphasis>must</emphasis> be able operate after the cold boot.
</para>
</Sect1>

<Sect1><title>Asynchronous detach and reattach</title>
<para>
After the device is attached to the system, the end-user may
detach the device at any time, then reattach the device. This is
referred to as asynchronous device detach and reattach to the
same USB port. <emphasis>No driver installation disk should be required
after reattach</emphasis>.
</para>
<para>
The USB device, device driver, and application software
<emphasis>must</emphasis> be able operate after device detach and
reattach.
</para>
</Sect1>

<Sect1><title>USB topology change</title>
<para>
After a device is attached to the system, the end-user can detach
the device and attach it at another port in the USB topology.
</para>
<para>
The USB device, device driver, and application software
<emphasis>must</emphasis> be able operate after USB topology changes.
</para>
<para>
The USB device and device driver <emphasis>must</emphasis> be able to
operate after device topology changes.
</para>
</Sect1>

<Sect1><title>Application Removal</title>
<para>
The end-user may choose to remove the application software associated
with the device. The application software removal process needs to be
tested to ensure that it is clean and complete.
</para>
<para>
Application software removal <emphasis>must not</emphasis> cause other
devices in the system to stop operating.
</para>
</Sect1>

</Chapter>

<Chapter><title>Device Operability - the basis of interoperability</title>
<para>
Device interoperability starts with device operability. Device
operability is defined as a device operating, without side effects,
 in typical end-user scenarios, without the presence of other
USB devices. A USB device must be able to operate by itself in a
system prior to pursuing device interoperability.
</para>

<para>
Device operability tests will ensure solid robust operation before moving on
to interoperability testing.
</para>

<Sect1><title>Drive Images</title>
<para>
There are two drive images that will be used when performing device
operability and interoperability testing. These images are used to
quickly refresh the system after lock-ups or system instability. These
images would also be used after problem identification and resolution
have been completed and retest is required.
</para>

<para>
By using these drive images, problems can be reproduced quickly and
easily. Before each test in the checklists in Appendix B, there will
be a statement as to which drive image to use prior to beginning testing.
</para>

<Sect2><title>CleanOsBuild</title>
<para>
This disk image is created from a fresh Linux distribution installed,
possibly with a kernel upgrade performed. The USB drivers that are required
to be installed are the UHCI host controller driver, the OHCI host controller
driver and the usbdevfs driver. For non-hub devices, the appropriate kernel
driver should also be installed.
</para>
<para>
The primary purpose of this drive image is to allow for initial device
operability testing. This image will also be used when performing Device
Under Test
installation prior to the Gold Tree device installation. This image is
taken immediately after operating system configuration and
installation has completed.
</para>
</Sect2>

<Sect2><title>GoldTreeBuild</title>
<para>
This disk image is created from a fresh Linux distribution installation,
with additional Gold Tree device drivers and associated applications installed
if not already included.
</para>
<para>
The purpose of this drive image is for Gold Tree device
interoperability testing.
This image is taken after the operating system is
installed and appropriate drivers are configured,
 and the entire Gold Tree of devices is attached
and associated applications are installed.
</para>
</Sect2>

<Sect2><title>Making test images</title>
<para>
It is assumed that the test machine has at least two partitions, one for
the test configuration, and one as a test management environment. The
space available for the test management environment needs to be contain
sufficient free space to contain two additional files, each the size of
the test configuration partition.
</para>

<para>
For example, given a 6G hard drive, create
a 1G partition and a 5G partition. Install the development / test management
environment on the 5G partition, ensuring that at least 2G remains free on this
partition. Then install the test configuration on the 1G hard drive. Depending
the Linux distribution installed, it may be neccessary to
perform a kernel upgrade as described in the
<ulink url="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">
Linux Kernel HOWTO</ulink>.
</para>

<para>
Make the first test image using <Command>dd</Command>. Typical usage, if
the test configuration is installed on the first extended partition of
the first ide drive would be
<command>dd if=/dev/hda5 of=CleanOSBuild bs=8192</command>.
</para>

<para>
Install any additional drivers neccessary for the Gold Tree. With the
 standard Gold Tree, this should only require building and installing
the drivers present in the kernel tree.
</para>

<para>
Make the second test image using <Command>dd</Command>. Typical usage, if
the test configuration is installed on the first extended partition of
the first ide drive would be
<command>dd if=/dev/hda5 of=GoldTreeBuild bs=8192</command>.
</para>

</Sect2>
</Sect1>

</Chapter>

<Chapter><title>Non-hub device tests</title>

<Sect1><title>Test Configuration Recording</title>
<para>
Record the following information:
<itemizedlist>
<listitem><para>Manufacturer, part number and serial number of Device(s) Under Test</para></listitem>
<listitem><para>Manufacturer, part number and serial number of similar device</para></listitem>
<listitem><para>Full details of Gold Tree devices and host controllers</para> </listitem>
<listitem><para>Linux kernel version and contents of /usr/src/linux/.config</para></listitem>
<listitem><para>Linux distribution tested</para></listitem>
<listitem><para>Date and time of test start</para></listitem>
</itemizedlist>
</para>

</Sect1>

<Sect1><title>Compliance tests</title>

<para>
Device compliance tests are essentially independent of the operating system
environment and other devices. If compliance testing has been previously
completed, it need not be repeated.
</para>

<para>
The compliance tests applicable to devices are:
<itemizedlist>
<listitem><para>Power consumption requirements, which is to be performed
in accordance with <ulink url="http://www.usb.org/developers/data/currentDraw.pdf">
http://www.usb.org/developers/data/currentDraw.pdf</ulink></para></listitem>
<listitem><para>Device framework (Chapter 9 tests) in accordance with
<ulink url="http://www.usb.org/developers/data/usbcomp.exe">
http://www.usb.org/developers/data/usbcomp.exe</ulink>, including HIDview
testing if applicable.</para></listitem>
<listitem><para>Signal quality in accordance with
<ulink url="http://www.usb.org/developers/data/usbsignalquality.pdf">
http://www.usb.org/developers/data/usbsignalquality.pdf</ulink></para></listitem>
</itemizedlist>
</para>

<para>
The USB-IF compliance tests verify that a device responds correctly to USB
device commands, and any failures or other problem indications must be
resolved before continuing with later tests.
</para>
</Sect1>

<Sect1><title>Bandwidth degradation (isochronous devices only)</title>

<note><para>
This process can not be performed with Linux at this time, and is provided
in anticipation of a suitable tool being developed.
</para></note>

<para>
Run the isoc-soak program and verify that the Device Under
Test gracefully handles limited
isochronous bandwidth situations. This application will consume increasingly
larger amounts of USB bandwidth, and should be started just  prior to plugging
the Device Under Test. Isochronous device applications are
required to notify the user of this limited bandwidth issue
and provide possible resolutions.
</para>
</Sect1>

<Sect1><title>Root hub operation - UHCI </title>

<note><para>
This test is designed to show basic operation, and is primarily to ensure
that the Device Under Test and driver combination is functional before
later tests.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Perform all typical end-user scenarios at one root port on the UHCI controller
in the system:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>

</Sect1>

<Sect1><title>Root hub operation - OHCI </title>

<note><para>
This test is designed to show basic operation, and is primarily to ensure
that the Device Under Test and driver combination is functional before
later tests.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Perform all typical end-user scenarios at one root port on the OHCI controller
in the system:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>

</Sect1>

<Sect1><title>Fifth tier operation - UHCI</title>

<note><para>
This test is designed to show operation under moderate signal and timing
stress.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Construct a hub tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a UHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 1 on the tier four hub. This self-powered hub is the tier
five hub.</para></listitem>
</itemizedlist>
</para>

<para>
Perform all typical end-user scenarios at the ports behind
the tier five hub downstream in the system. This should use a five metre
cable if the Device Under Test has a removable cable.
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If the device operates successfully when attached to the root hub, but
does not operate correctly behind external hubs, the most likely problem
is the Device Under Test drawing excessive current.
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>
</Sect1>
<Sect1><title>Fifth tier operation - OHCI</title>

<note><para>
This test is designed to show operation under moderate signal and timing
stress.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Construct a hub tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a OHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 1 on the tier four hub. This self-powered hub is the tier
five hub.</para></listitem>
</itemizedlist>
</para>

<para>
Perform all typical end-user scenarios at the ports behind
the tier five hub downstream in the system. This should use a five metre
cable if the Device Under Test has a removable cable.
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
Devices that do not operating behind a hub, but do operate behind the
system root port, are typically due to over-current failures.
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>
</Sect1>

<Sect1><title>Multiple identical devices - UHCI</title>

<note><para>
The end user may have a requirement to have more than one identical
device attached to the system. Verify that the device application and
device driver operate with multiple identical devices attached to
the system.
</para></note>

<para>
Using the same hub tree as the Fifth Tier Operation - UHCI test, add the
second Device Under Test using a five metre cable to a spare port on the
tier five hub. If applicable, add the "similar device" to a spare port on the
tier five hub.
</para>

<para>
Ensure all three devices are fully functional:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
<listitem><para>Suspend / Resume - functional after resume</para></listitem>
<listitem><para>Suspend / Remote-wake (if applicable) - functional after wake-up</para></listitem>
</itemizedlist>
</para>

</Sect1>

<Sect1><title>Multiple identical devices - OHCI</title>

<note><para>
The end user may have a requirement to have more than one identical
device attached to the system. Verify that the device application and
device driver operate with multiple identical devices attached to
the system.
</para></note>

<para>
Using the same hub tree as the Fifth Tier Operation - OHCI test, add the
second Device Under Test using a five metre cable to a spare port on the
tier five hub. If applicable, add the "similar device" to a spare port on the
tier five hub.
</para>

<para>
Ensure all three devices are fully functional:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

</Sect1>
</Chapter>

<Chapter><title>Non-hub Device Interoperability</title>

<Sect1><title>Introduction</title>
<para>
The philosophy behind device interoperability is to start with a
known good topology, known as a Gold Tree. The Gold Tree is a group of
devices that have been proven to have no interoperability problems.
</para>

<para>
It is permissable to use an alternate tree to that described in this
procedure, however this must be fully recorded and any major variances
justified.
</para>
</Sect1>

<Sect1><title>System configuration with UHCI</title>

<para>
Construct the Gold Tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a UHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 1 on the tier four hub. This self-powered hub is the tier
five hub.</para></listitem>
<listitem><para>Add the Logitech Wheel Mouse to port 1 on the tier one
hub.</para></listitem>
<listitem><para>Add the Iomega Zip250 drive to port 2 on the tier three
hub.</para></listitem>
<listitem><para>Add the Philips DSS350 speakers to port 2 on the tier four
(bus powered) hub.</para></listitem>
<listitem><para>Add the Zoom 1595 camera to port 1 on the tier five
hub.</para></listitem>
</itemizedlist>
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>

<para>
If the Device Under Test has a detachable cable, remove the supplied cable and
use a five metre cable for tests.
</para>
</Sect1>

<Sect1><title>Enumeration test with UHCI</title>
<para>
Connect the Device Under Test to a spare port on each hub. Ensure that the
Device Under Test is fully and correctly enumerated at each port. It may
be neccessary to check the contents of <filename>/proc/bus/usb/devices</filename>
to verify this. Also check that if an appropriate driver is built into the
kernel, the device is correctly associated with the driver, or that
if an appropriate driver is not built into the kernel, the user is
provided with instructions on what action is required.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>device is incorrectly enumerated</para></listitem>
<listitem><para>device will not fully enumerate</para></listitem>
<listitem><para>kernel oops, panics, locks up or reboots</para></listitem>
<listitem><para>device is not associated with a driver and does not make it
clear what action the user needs to take to install a driver</para></listitem>
<listitem><para>user action required involves a reboot</para></listitem>
</itemizedlist>
</para>

</Sect1>

<Sect1><title>Additional Software installation</title>
<para>
If neccessary, install the required user space software.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>installation does not complete without core dump</para></listitem>
<listitem><para>installation requires reboot</para></listitem>
<listitem><para>library dependencies or other installation conflicts cannot be
automatically resolved</para></listitem>
</itemizedlist>
</para>
</Sect1>

<Sect1><title>Specific driver installation with UHCI</title>
<para>
If the device is provided with specific drivers that are meant to be used
instead of the normal kernel drivers, install them now. The new driver should
be recognised by the kernel and reported in <filename>/proc/bus/usb/drivers
</filename>.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>installation does not complete without kernel
oopses, panics, reboots or lock-ups</para></listitem>
<listitem><para>installation requires reboot</para></listitem>
<listitem><para>any device stops working</para></listitem>
</itemizedlist>
</para>
</Sect1>

<Sect1><title>System configuration with OHCI</title>
<para>
Disconnect the USB Gold Tree from the root hub on the UHCI controller
and connect the whole tree to a root hub port on the OHCI controller.
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>
</Sect1>


<Sect1><title>Enumeration test with OHCI</title>
<para>
Connect the Device Under Test to a spare port on each hub. Ensure that the
Device Under Test is fully and correctly enumerated at each port. It may
be neccessary to check the contents of <filename>/proc/bus/usb/devices</filename>
to verify this. Also check that if an appropriate driver is built into the
kernel, that the device is correctly associated with the driver, or that
if an appropriate driver is not built into the kernel, that the user is
provided with instructions on what action is required.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>device is incorrectly enumerated</para></listitem>
<listitem><para>device will not fully enumerate</para></listitem>
<listitem><para>kernel oops, panics, locks up or reboots</para></listitem>
<listitem><para>device is not associated with a driver and does not make it
clear what action the user needs to take to install a driver</para></listitem>
<listitem><para>user action required involves a reboot</para></listitem>
</itemizedlist>
</para>

</Sect1>

<Sect1><title>Additional Software installation</title>
<para>
If neccessary, install the required user space software.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>installation does not complete without core dump</para></listitem>
<listitem><para>installation requires reboot</para></listitem>
<listitem><para>library dependencies or other installation conflicts cannot be
automatically resolved</para></listitem>
</itemizedlist>
</para>
</Sect1>

<Sect1><title>Specific driver installation with OHCI</title>
<para>
If the device is provided with specific drivers that are meant to be used
instead of the normal kernel drivers, install them now. The new driver should
be recognised by the kernel and reported in <filename>/proc/bus/usb/drivers
</filename>.
</para>

<para>
This test shall be recorded as a failure if any of the following occur:
<itemizedlist>
<listitem><para>installation does not complete without kernel
oopses, panics, reboots or lock-ups</para></listitem>
<listitem><para>installation requires reboot</para></listitem>
<listitem><para>any device stops working</para></listitem>
</itemizedlist>
</para>
</Sect1>


<Sect1><title>System functionality test</title>
<para>
Ensure that all devices in the Gold Tree are fully functional. If any
device is not fully functional, or causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>
</Sect1>
<Sect1><title>Function under load test</title>
<para>
Set system to play an MP3 (of Van Halen's "Dreams") from the Zip250 drive
to the USB speakers. Display streaming video from the Zoom 1595 camera.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the tier one hub and plug it into
the spare port on the tier two hub.
</para>

<para>
Ensure that the Device Under Test continues to operate normally under
this load. Ensure that the Gold Tree devices continue to operate normally.
</para>

</Sect1>


<Sect1><title>Inactive Detach / Reattach</title>
<para>
Ensure that Device Under Test is stopped.
</para>

<para>
Detach Device Under Test. Reattach Device Under Test to the hub port it
was detached from. If the Device Under Test is not fully functional, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect1>

<Sect1><title>Active Detach / Reattach</title>
<para>
Ensure that Device Under Test is in use.
</para>

<para>
Detach Device Under Test. Reattach Device Under Test to the hub port it
was detached from. If the Device Under Test is not fully functional
and has not recovered from the detach, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect1>
<Sect1><title>Topology change</title>
<para>
Ensure that Device Under Test is stopped.
</para>

<para>
Detach Device Under Test from the tier five hub . Reattach Device Under Test
to port 3 of the tier three hub. If the Device Under Test is not fully
functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect1>

<Sect1><title>Warm boot test</title>
<para>
Sync filesystems and reboot system using the <command>reboot</command>
command.
</para>
<para>
When system is restarted, ensure that the Device Under Test is fully
functional. Test is to be recorded as failed if Device Under Test
is not fully functional.
</para>
</Sect1>

<Sect1><title>Cold boot test</title>
<para>
Sync filesystems and halt system using the <command>halt</command>
command. When system is halted, power system off. Wait two minutes.
Power system back up and boot into test configuration.
</para>
<para>
When system is restarted, ensure that the Device Under Test is fully
functional. Test is to be recorded as failed if Device Under Test
is not fully functional.
</para>
</Sect1>

<Sect1><title>Test Configuration Recording</title>
<para>
Record the date and time the test finished and summarise test results.
</para>
</Sect1>
</Chapter>

<Chapter><title>Hub device tests</title>

<Sect1><title>Test Configuration Recording</title>
<para>
Record the following information:
<itemizedlist>
<listitem><para>Manufacturer, part number and serial numbers of Hubs Under Test</para></listitem>
<listitem><para>Full details of Gold Tree devices and host controllers</para> </listitem>
<listitem><para>Linux kernel version and contents of /usr/src/linux/.config</para></listitem>
<listitem><para>Linux distribution tested</para></listitem>
<listitem><para>Date and time of test start</para></listitem>
</itemizedlist>
</para>

</Sect1>

<Sect1><title>Hub Compliance tests</title>

<para>
Hub compliance tests are essentially independent of the operating system
environment and other devices. If compliance testing has been previously
completed, it need not be repeated.
</para>

<para>
The compliance tests applicable to hubs are:
<itemizedlist>
<listitem><para>Power consumption requirements, which is to be performed
in accordance with <ulink url="http://www.usb.org/developers/data/currentDraw.pdf">
http://www.usb.org/developers/data/currentDraw.pdf</ulink></para></listitem>
<listitem><para>Device framework (Chapter 9 and Chapter 11 tests) in accordance with
<ulink url="http://www.usb.org/developers/data/usbcomp.exe">
http://www.usb.org/developers/data/usbcomp.exe</ulink></para></listitem>
<listitem><para>Signal quality in accordance with
<ulink url="http://www.usb.org/developers/data/usbsignalquality.pdf">
http://www.usb.org/developers/data/usbsignalquality.pdf</ulink></para></listitem>
<listitem><para>Droop / drop testing in accordance with
<ulink url="http://www.usb.org/developers/data/dropDroop_99.pdf">
http://www.usb.org/developers/data/dropDroop_99.pdf</ulink></para></listitem>
</itemizedlist>
</para>

<para>
The USB-IF compliance tests verify that a hub responds correctly to USB
device commands, and any failures or other problem indications must be
resolved before continuing with later tests.
</para>
</Sect1>

<Sect1><title>Root hub operation - UHCI </title>

<note><para>
This test is designed to show basic operation, and is primarily to ensure
that the Hub Under Test and driver combination is functional before
later tests.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Perform all typical end-user scenarios at one root port on the UHCI controller
in the system:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change (switch ports) - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>

</Sect1>

<Sect1><title>Root hub operation - OHCI </title>

<note><para>
This test is designed to show basic operation, and is primarily to ensure
that the Hub Under Test and driver combination is functional before
later tests.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Perform all typical end-user scenarios at one root port on the OHCI controller
in the system:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>

</Sect1>

<Sect1><title>Fifth tier operation - UHCI</title>

<note><para>
This test is designed to show operation under moderate signal and timing
stress.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Construct a hub tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a UHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the Hub Under Test
to port 1 on the tier four hub.</para></listitem>
</itemizedlist>
</para>

<para>
Perform all typical end-user scenarios at the ports behind
the tier four hub in the system
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>.
</para>

<para>
If the Hub Under Test operates correctly when attached to the root hub, but
does not work correctly when attached to the tier four hub, the most likely
cause is excessive current draw.
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>
</Sect1>

<Sect1><title>Fifth tier operation - OHCI</title>

<note><para>
This test is designed to show operation under moderate signal and timing
stress.
</para></note>

<para>
Install the CleanOSBuild image using something like the following command:
<Command>dd if=CleanOSBuild of=/dev/hda5 bs=8192</Command>.
</para>

<para>
Construct a hub tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a OHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the Hub Under Test
to port 1 on the tier four hub.</para></listitem>
</itemizedlist>
</para>

<para>
Perform all typical end-user scenarios at the ports behind
the tier five hub downstream in the system.
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

<para>
If the Hub Under Test operates correctly when attached to the root hub, but
does not work correctly when attached to the tier four hub, the most likely
cause is excessive current draw.
</para>

<para>
If any problems occur during this scenario, they need to be resolved prior
to continuing to subsequent tests.
</para>
</Sect1>

<Sect1><title>Multiple identical hubs - UHCI</title>

<note><para>
The end user may have a requirement to have more than one identical
hub attached to the system. Therefore, it is important to
verify that the device application and
device driver operate with multiple identical hubs attached to
the system.
</para></note>

<para>
Using the same hub tree as the Fifth Tier Operation - UHCI test, add the
second Hub Under Test using a five metre cable to a spare port on the
tier four hub.
</para>

<para>
Ensure both hubs are fully functional:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>.
</para>

</Sect1>

<Sect1><title>Multiple identical devices - OHCI</title>

<note><para>
The end user may have a requirement to have more than one identical
hub attached to the system. Therefore, it is important to
verify that the device application and
device driver operate with multiple identical hubs attached to
the system.
</para></note>

<para>
Using the same hub tree as the Fifth Tier Operation - OHCI test, add the
second Hub Under Test using a five metre cable to a spare port on the
tier four hub.
</para>

<para>
Ensure both hubs are fully functional:
<itemizedlist>
<listitem><para>Hot attach - no installation is required.</para></listitem>
<listitem><para>Application installation - if required to show functionality</para></listitem>
<listitem><para>Warm boot - system remains functional</para></listitem>
<listitem><para>Cold boot - system remains functional</para></listitem>
<listitem><para>Asynchronous detach and reattach</para></listitem>
<listitem><para>USB topology change - no driver modification required</para></listitem>
</itemizedlist>
</para>

</Sect1>
</Chapter>

<Chapter><title>Hub Interoperability</title>

<Sect1><title>Introduction</title>
<para>
The philosophy behind hub interoperability is to start with a
known good topology, known as a Gold Tree. The Gold Tree is a group of
devices that have been proven to have no interoperability problems.
</para>

<para>
It is permissable to use an alternate tree to that described in this
procedure, however this must be fully recorded and any major variances
justified.
</para>
</Sect1>
<Sect1><title>System configuration with UHCI - self powered</title>

<para>
Construct the self-powered Gold Tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to a UHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the self-powered
Hub Under Test to port 1 on the tier four hub.</para></listitem>
<listitem><para>Add the Logitech Wheel Mouse to port 1 on the tier one
hub.</para></listitem>
<listitem><para>Add the Iomega Zip250 drive to port 2 on the tier three
hub.</para></listitem>
<listitem><para>Add the Zoom 1595 camera to port 1 on the Hub Under Test (tier five
hub).</para></listitem>
<listitem><para>Add the Philips DSS350 speakers to port 2 on the Hub Under
Test (tier five hub).</para></listitem>
<listitem><para>Add the Hewlett Packard HP895C printer to port 3 on the
Hub Under Test (tier five hub).</para></listitem>
</itemizedlist>
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration. Do not load any other software.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>

<para>
Check the contents of <filename>/proc/bus/usb/devices</filename> to ensure
that all devices are correctly enumerated.
</para>


<Sect2><title>System functionality test</title>
<para>
Ensure that all devices in the Gold Tree are fully functional. If any
device is not detected, is not fully functional, or causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>
</Sect2>

<Sect2><title>Function under load test</title>
<para>
Set system to play an MP3 (of Van Halen's "Dreams") from the Zip250 drive
to the USB speakers. Display streaming video from the Zoom 1595 camera.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the tier one hub and plug it into
port 4 (the spare port) on the Hub Under Test (tier five hub).
</para>

<para>
Ensure that the Hub Under Test continues to operate normally under
this load. Ensure that the Gold Tree devices continue to operate normally.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the Hub Under Test (tier five hub)
and plug it into port 1 on the tier one hub.
</para>

</Sect2>


<Sect2><title>Inactive Detach / Reattach</title>
<para>
Ensure that all device attached to the Hub Under Test (tier five hub) are
not in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device, is not fully
functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Active Detach / Reattach</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device,
is not fully functional
and has not recovered from the detach, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Topology change</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are not in use.
</para>

<para>
Detach Hub Under Test from the tier four hub. Reattach Hub Under Test
to port 3 of the tier three hub. If the Hub Under Test, or any other device
is not fully functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

<para>
Detach Hub Under Test from the tier three hub, and attach Hub Under Test to
port 1 of the tier four hub.
</para>
</Sect2>

<Sect2><title>Warm boot test</title>
<para>
Sync filesystems and reboot system using the <command>reboot</command>
command.
</para>
<para>
When system is restarted, ensure that the Hub Under Test (tier five hub) is fully
functional. Test is to be recorded as failed if the Hub Under Test, or any other
device, is not fully functional.
</para>
</Sect2>

<Sect2><title>Cold boot test</title>
<para>
Sync filesystems and halt system using the <command>halt</command>
command. When system is halted, power system off. Wait two minutes.
Power system back up and boot into test configuration.
</para>
<para>
When system is restarted, ensure that the Hub Under Test is fully
functional. Test is to be recorded as failed if the Hub Under Test, or
any other device, is not fully functional.
</para>
</Sect2>

</Sect1>


<Sect1><title>System configuration with OHCI - self powered</title>

<para>
Construct the self-powered Gold Tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one self-powered
hub to an OHCI root hub port. This self-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 2 of the tier one
hub. This keyboard / hub is the tier two hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier two hub. This self-powered hub is the tier
three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to port 1 on the tier three hub. This bus-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the self-powered
Hub Under Test to port 1 on the tier four hub.</para></listitem>
<listitem><para>Add the Logitech Wheel Mouse to port 1 on the tier one
hub.</para></listitem>
<listitem><para>Add the Iomega Zip250 drive to port 2 on the tier three
hub.</para></listitem>
<listitem><para>Add the Zoom 1595 camera to port 1 on the Hub Under Test (tier five
hub).</para></listitem>
<listitem><para>Add the Philips DSS350 speakers to port 2 on the Hub Under
Test (tier five hub).</para></listitem>
<listitem><para>Add the Hewlett Packard HP895C printer to port 3 on the
Hub Under Test (tier five hub).</para></listitem>
</itemizedlist>
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration. Do not load any other software.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>

<para>
Check the contents of <filename>/proc/bus/usb/devices</filename> to ensure
that all devices are correctly enumerated.
</para>


<Sect2><title>System functionality test</title>
<para>
Ensure that all devices in the Gold Tree are fully functional. If any
device is not detected, is not fully functional, or causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>
</Sect2>

<Sect2><title>Function under load test</title>
<para>
Set system to play an MP3 (of Van Halen's "Dreams") from the Zip250 drive
to the USB speakers. Display streaming video from the Zoom 1595 camera.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the tier one hub and plug it into
port 4 (the spare port) on the Hub Under Test (tier five hub).
</para>

<para>
Ensure that the Hub Under Test continues to operate normally under
this load. Ensure that the Gold Tree devices continue to operate normally.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the Hub Under Test (tier five hub)
and plug it into port 1 on the tier one hub.
</para>

</Sect2>


<Sect2><title>Inactive Detach / Reattach</title>
<para>
Ensure that all device attached to the Hub Under Test (tier five hub) are
not in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device, is not fully
functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Active Detach / Reattach</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device,
is not fully functional
and has not recovered from the detach, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Topology change</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are not in use.
</para>

<para>
Detach Hub Under Test from the tier four hub. Reattach Hub Under Test
to port 3 of the tier three hub. If the Hub Under Test, or any other device
is not fully functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

<para>
Detach Hub Under Test from the tier three hub, and attach Hub Under Test to
port 1 of the tier four hub.
</para>

</Sect2>

<Sect2><title>Warm boot test</title>
<para>
Sync filesystems and reboot system using the <command>reboot</command>
command.
</para>
<para>
When system is restarted, ensure that the Hub Under Test (tier five hub) is fully
functional. Test is to be recorded as failed if the Hub Under Test, or any other
device, is not fully functional.
</para>
</Sect2>

<Sect2><title>Cold boot test</title>
<para>
Sync filesystems and halt system using the <command>halt</command>
command. When system is halted, power system off. Wait two minutes.
Power system back up and boot into test configuration.
</para>
<para>
When system is restarted, ensure that the Hub Under Test is fully
functional. Test is to be recorded as failed if the Hub Under Test, or
any other device, is not fully functional.
</para>
</Sect2>

</Sect1>

<Sect1><title>System configuration with UHCI - bus powered</title>

<para>
Construct the bus-powered Gold Tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to a UHCI root hub port. This bus-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier one hub. This self-powered hub is the tier
two hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 1 of the tier two
hub. This keyboard / hub is the tier three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 1 on the tier three hub. This self-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the bus-powered
Hub Under Test to port 1 on the tier four hub.</para></listitem>
<listitem><para>Add the Logitech Wheel Mouse to port 1 on the tier one
hub.</para></listitem>
<listitem><para>Add the Iomega Zip250 drive to port 2 on the tier two
hub.</para></listitem>
<listitem><para>Add the Zoom 1595 camera to port 2 on the tier four
hub.</para></listitem>
<listitem><para>FixME - additional isoc IN device required.</para></listitem>
<listitem><para>Add the Philips DSS350 speakers to port 2 on the Hub Under
Test (tier five hub).</para></listitem>
<listitem><para>Add the Hewlett Packard HP895C printer to port 3 on the
Hub Under Test (tier five hub).</para></listitem>
</itemizedlist>
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration. Do not load any other software.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>

<para>
Check the contents of <filename>/proc/bus/usb/devices</filename> to ensure
that all devices are correctly enumerated.
</para>


<Sect2><title>System functionality test</title>
<para>
Ensure that all devices in the Gold Tree are fully functional. If any
device is not detected, is not fully functional, or causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>
</Sect2>

<Sect2><title>Function under load test</title>
<para>
Set system to play an MP3 (of Van Halen's "Dreams") from the Zip250 drive
to the USB speakers. Display streaming video from the Zoom 1595 camera.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the tier one hub and plug it into
port 4 (the spare port) on the Hub Under Test (tier five hub).
</para>

<para>
Ensure that the Hub Under Test continues to operate normally under
this load. Ensure that the Gold Tree devices continue to operate normally.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the Hub Under Test (tier five hub)
and plug it into port 1 on the tier one hub.
</para>

</Sect2>


<Sect2><title>Inactive Detach / Reattach</title>
<para>
Ensure that all device attached to the Hub Under Test (tier five hub) are
not in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device, is not fully
functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Active Detach / Reattach</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device,
is not fully functional
and has not recovered from the detach, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Topology change</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are not in use.
</para>

<para>
Detach Hub Under Test from the tier four hub. Reattach Hub Under Test
to port 3 of the tier two hub. If the Hub Under Test, or any other device
is not fully functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

<para>
Detach Hub Under Test from the tier two hub, and attach Hub Under Test to
port 1 of the tier four hub.
</para>

</Sect2>

<Sect2><title>Warm boot test</title>
<para>
Sync filesystems and reboot system using the <command>reboot</command>
command.
</para>
<para>
When system is restarted, ensure that the Hub Under Test (tier five hub) is fully
functional. Test is to be recorded as failed if the Hub Under Test, or any other
device, is not fully functional.
</para>
</Sect2>

<Sect2><title>Cold boot test</title>
<para>
Sync filesystems and halt system using the <command>halt</command>
command. When system is halted, power system off. Wait two minutes.
Power system back up and boot into test configuration.
</para>
<para>
When system is restarted, ensure that the Hub Under Test is fully
functional. Test is to be recorded as failed if the Hub Under Test, or
any other device, is not fully functional.
</para>
</Sect2>

</Sect1>


<Sect1><title>System configuration with OHCI - bus powered</title>

<para>
Construct the bus-powered Gold Tree as follows:
<itemizedlist>
<listitem><para>Using a five metre cable, connect one bus-powered
hub to an OHCI root hub port. This bus-powered hub is the tier one
hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 2 on the tier one hub. This self-powered hub is the tier
two hub.</para></listitem>
<listitem><para>Connect combined keyboard / hub to port 1 of the tier two
hub. This keyboard / hub is the tier three hub.</para></listitem>
<listitem><para>Using a five metre cable, connect one self-powered
hub to port 1 on the tier three hub. This self-powered hub is the tier
four hub.</para></listitem>
<listitem><para>Using a five metre cable, connect the bus-powered
Hub Under Test to port 1 on the tier four hub.</para></listitem>
<listitem><para>Add the Logitech Wheel Mouse to port 1 on the tier one
hub.</para></listitem>
<listitem><para>Add the Iomega Zip250 drive to port 2 on the tier two
hub.</para></listitem>
<listitem><para>Add the Zoom 1595 camera to port 2 on the tier four
hub.</para></listitem>
<listitem><para>FixME - additional isoc IN device required.</para></listitem>
<listitem><para>Add the Philips DSS350 speakers to port 2 on the Hub Under
Test (tier five hub).</para></listitem>
<listitem><para>Add the Hewlett Packard HP895C printer to port 3 on the
Hub Under Test (tier five hub).</para></listitem>
</itemizedlist>
</para>

<para>
Load the GoldTreeBuild image using something like the following command:
<Command>dd if=GoldTreeBuild of=/dev/hda5 bs=8192</Command>. Boot to
the Gold Tree configuration. Do not load any other software.
</para>

<para>
If not already mounted, mount the usbdevfs file system using the following
command: <command>mount -t usbdevfs usbdevfs /proc/bus/usb</command>.
</para>

<para>
Check the contents of <filename>/proc/bus/usb/devices</filename> to ensure
that all devices are correctly enumerated.
</para>


<Sect2><title>System functionality test</title>
<para>
Ensure that all devices in the Gold Tree are fully functional. If any
device is not detected, is not fully functional, or causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>
</Sect2>

<Sect2><title>Function under load test</title>
<para>
Set system to play an MP3 (of Van Halen's "Dreams") from the Zip250 drive
to the USB speakers. Display streaming video from the Zoom 1595 camera.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the tier one hub and plug it into
port 4 (the spare port) on the Hub Under Test (tier five hub).
</para>

<para>
Ensure that the Hub Under Test continues to operate normally under
this load. Ensure that the Gold Tree devices continue to operate normally.
</para>

<para>
Disconnect the Logitech Wheel Mouse from the Hub Under Test (tier five hub)
and plug it into port 1 on the tier one hub.
</para>

</Sect2>


<Sect2><title>Inactive Detach / Reattach</title>
<para>
Ensure that all device attached to the Hub Under Test (tier five hub) are
not in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device, is not fully
functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Active Detach / Reattach</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are in use.
</para>

<para>
Detach Hub Under Test. Reattach Hub Under Test to the hub port it
was detached from. If the Hub Under Test, or any other device,
is not fully functional
and has not recovered from the detach, or
the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

</Sect2>

<Sect2><title>Topology change</title>
<para>
Ensure that the devices attached to the Hub Under Test (tier five hub)
are not in use.
</para>

<para>
Detach Hub Under Test from the tier four hub. Reattach Hub Under Test
to port 3 of the tier two hub. If the Hub Under Test, or any other device
is not fully functional, or the Detach / Reattach causes a kernel oops, panic,
reboot or lock-up during operation, record this test as a failure.
</para>

<para>
Detach Hub Under Test from the tier two hub, and attach Hub Under Test to
port 1 of the tier four hub.
</para>
</Sect2>

<Sect2><title>Warm boot test</title>
<para>
Sync filesystems and reboot system using the <command>reboot</command>
command.
</para>
<para>
When system is restarted, ensure that the Hub Under Test (tier five hub) is fully
functional. Test is to be recorded as failed if the Hub Under Test, or any other
device, is not fully functional.
</para>
</Sect2>

<Sect2><title>Cold boot test</title>
<para>
Sync filesystems and halt system using the <command>halt</command>
command. When system is halted, power system off. Wait two minutes.
Power system back up and boot into test configuration.
</para>
<para>
When system is restarted, ensure that the Hub Under Test is fully
functional. Test is to be recorded as failed if the Hub Under Test, or
any other device, is not fully functional.
</para>
</Sect2>

</Sect1>
<Sect1><title>Test Configuration Recording</title>
<para>
Record the date and time the test finished and summarise test results.
</para>
</Sect1>

</Chapter>

<Chapter><title>Disk Image Utilities</title>
<para>
dd is a standard part of all unix installations, and is a utility program
that, amongst other attributes, allows the user to capture a snapshot of
the hard drive (or partition) and restore it quickly and easily.
</para>
<para>
By using dd, interoperability problem scenarios can be quickly
reproduced and retested after solutions have been implemented.
There are other disk image capture utilities on the market. Determine which
utility is best for your environment.
</para>
</Chapter>

</Part>

<Part><Title>About this Document</>

<Chapter><title>Contributors</title>

<Para>
I am indebted to all the developers who have worked on Linux USB.
</para>
</Chapter>

<Chapter>
<title>Licensing and Copyright</title>

<Sect1><title>License</title>

<para>
This document is based on the USB Interoperability Guidelines
written by Daniel J Phelps and others of Intel Corporation.
</para>

<para>
Changes to make this document applicable to Linux are
Copyright (C) Brad Hards (2000).
</para>

<para>
This document may be distributed only subject to the terms
and conditions set forth in the Linux Documentation Project License
as detailed at  <ulink url="http://www.linuxdoc.org/COPYRIGHT.html">
http://www.linuxdoc.org/COPYRIGHT.html</ulink>.
</para>
</Sect1>

</Chapter>

<Chapter><title>Corrections</>
<Para>
Please send comments on this document to the author, preferably by
E-Mail (<Email>bradh@dynamite.com.au</Email>), including the version
number: (Revision: 0.2).
If the change is more than simply editorial, please also send a copy to
<email>linux-usb-test-devel@lists.sourceforge.net</email>.
</>
</Chapter>

</Part>
</Book>

