Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.


This feature permits the platform to attach to an USB host as a mass storage device or an ethernet device.

Release Note

The following SW will be provided:

  1. One new USB peripheral controller kernel driver.
  2. One patch to CDC-EEM/RNIDS gadget kernel driver.
  3. One patch to file-backed storage gadget kernel driver.
  4. One patch to gadget kernel makefile.
  5. One sample suite of both client and host applications available that use the above kernel components to create a specific solution. This solution will include a client side application that will allow the user to select which folder to share, and then use this information to setup a network share drive. The solution will also include a host side utility that will be presented to the host system via the mass storage device. If this host application were run by the host then the host will setup the network over USB connection and mount the shared drive that the client side utility recently made available. The host application can work on Ubuntu MID distro.


This is a common feature for current non-Linux based handheld platform and is expected by users.

Use Cases

* Scenario #1 – Data transfer/synchronize: As a companion device, MID can transfer/synchronize data to/from PC or another MID. MID’s data exposes to Host side (PC, UMPC or another MID) as a hard drive or network sharing folder.

* Scenario #2 - Internet connection sharing (ICS): (optional) If one of the two devices (MID and PC/MID and MID) either has no connection to the internet or has a slower or more expensive connection than the other, the optimal connection could be shared through the USB Client cable connection


The USB Client hardware is Intel Poulsbo. The composite device mode of both mass storage device and Ethernet device enabled at the same time is not supported.

The composite device mode of both mass storage device and Ethernet device enabled at the same time is not supported.



The design is based on Linux USB gadget API framework. The peripheral controller driver implements the following functions according to Poulsbo USB client controller hardware:

  • Initialize/de-initialize the PCI resources (memory, interrupt and DMA)
  • Handle the USB device enumeration and USB bus events
  • Transmit the data packets through USB endpoints
  • Call back the upper level USB client device driver whenever necessary

Mass storage gadget driver follows the protocol USB Mass Storage Bulk-Only Transport. It handles SCSI commands from host and USB requests bypassed from controller for device/config/interface descriptor setting.

CDC-EEM/RNDIS gadget driver follows Microsoft Remote NDIS Specification. It is responsible for the following operations:

  • Provide the media state information to the host network stack by answering the RNDIS messages
  • Works as an Ethernet interface device from remote host stand point of view, transmit the encapsulated 802.3 frames between host and the simulated Ethernet network in the format of the RNDIS messages
  • Monitor the USB bus events including connect, disconnect, suspend, resume, reset, and remote wakeup, and translate those events to corresponding actions to the Showwell NDIS stack
  • Communicate through the PCI Network Interface, which provides the network adapter instance to the upper network stack on the client side OS

Utility provides end-user an easy way to use exposed device by gadget drivers. It will use samba service to mount shared image file and DHCP to set IP address.


USB Client support is being implemented by an Intel SW team in China and provided to the Ubuntu team for integration.

UI Changes

Code Changes


Test/Demo Plan

Intel SW team in China will do the testing work.

Outstanding Issues

BoF agenda and discussion


MobileAndEmbedded/USBClient (last edited 2008-08-06 16:16:56 by localhost)