<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>

<book id="USBDeviceDriver">
 <bookinfo>
  <title>Writing USB Device Drivers</title>
  
  <authorgroup>
   <author>
    <firstname>Greg</firstname>
    <surname>Kroah-Hartman</surname>
    <affiliation>
     <address>
      <email>greg@kroah.com</email>
     </address>
    </affiliation>
   </author>
  </authorgroup>

  <copyright>
   <year>2001-2002</year>
   <holder>Greg Kroah-Hartman</holder>
  </copyright>

  <legalnotice>
   <para>
     This documentation is free software; you can redistribute
     it and/or modify it under the terms of the GNU General Public
     License as published by the Free Software Foundation; either
     version 2 of the License, or (at your option) any later
     version.
   </para>
      
   <para>
     This program is distributed in the hope that it will be
     useful, but WITHOUT ANY WARRANTY; without even the implied
     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     See the GNU General Public License for more details.
   </para>
      
   <para>
     You should have received a copy of the GNU General Public
     License along with this program; if not, write to the Free
     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
     MA 02111-1307 USA
   </para>
      
   <para>
     For more details see the file COPYING in the source
     distribution of Linux.
   </para>

   <para>
     This documentation is based on an article published in 
     Linux Journal Magazine, October 2001, Issue 90.
   </para>
  </legalnotice>
 </bookinfo>

<toc></toc>

  <chapter id="intro">
      <title>Introduction</title>
  <para>
      The Linux USB subsystem has grown from supporting only two different
      types of devices in the 2.2.7 kernel (mice and keyboards), to over 20
      different types of devices in the 2.4 kernel. Linux currently supports
      almost all USB class devices (standard types of devices like keyboards,
      mice, modems, printers and speakers) and an ever-growing number of
      vendor-specific devices (such as USB to serial converters, digital
      cameras, Ethernet devices and MP3 players). For a full list of the
      different USB devices currently supported, see Resources.
  </para>
  <para>
      The remaining kinds of USB devices that do not have support on Linux are
      almost all vendor-specific devices. Each vendor decides to implement a
      custom protocol to talk to their device, so a custom driver usually needs
      to be created. Some vendors are open with their USB protocols and help
      with the creation of Linux drivers, while others do not publish them, and
      developers are forced to reverse-engineer. See Resources for some links
      to handy reverse-engineering tools.
  </para>
  <para>
      Because each different protocol causes a new driver to be created, I have
      written a generic USB driver skeleton, modeled after the pci-skeleton.c
      file in the kernel source tree upon which many PCI network drivers have
      been based. This USB skeleton can be found at drivers/usb/usb-skeleton.c
      in the kernel source tree. In this article I will walk through the basics
      of the skeleton driver, explaining the different pieces and what needs to
      be done to customize it to your specific device.
  </para>
  </chapter>

  <chapter id="basics">
      <title>Linux USB Basics</title>
  <para>
      If you are going to write a Linux USB driver, please become familiar with
      the USB protocol specification. It can be found, along with many other
      useful documents, at the USB home page (see Resources). An excellent
      introduction to the Linux USB subsystem can be found at the USB Working
      Devices List (see Resources). It explains how the Linux USB subsystem is
      structured and introduces the reader to the concept of USB urbs, which
      are essential to USB drivers.
  </para>
  <para>
      The first thing a Linux USB driver needs to do is register itself with
      the Linux USB subsystem, giving it some information about which devices
      the driver supports and which functions to call when a device supported
      by the driver is inserted or removed from the system. All of this
      information is passed to the USB subsystem in the usb_driver structure.
      The skeleton driver declares a usb_driver as:
  </para>
  <programlisting>
static struct usb_driver skel_driver = {
        .name        = "skeleton",
        .probe       = skel_probe,
        .disconnect  = skel_disconnect,
        .fops        = &amp;skel_fops,
        .minor       = USB_SKEL_MINOR_BASE,
        .id_table    = skel_table,
};
  </programlisting>
  <para>
      The variable name is a string that describes the driver. It is used in
      informational messages printed to the system log. The probe and
      disconnect function pointers are called when a device that matches the
      information provided in the id_table variable is either seen or removed.
  </para>
  <para>
      The fops and minor variables are optional. Most USB drivers hook into
      another kernel subsystem, such as the SCSI, network or TTY subsystem.
      These types of drivers register themselves with the other kernel
      subsystem, and any user-space interactions are provided through that
      interface. But for drivers that do not have a matching kernel subsystem,
      such as MP3 players or scanners, a method of interacting with user space
      is needed. The USB subsystem provides a way to register a minor device
      number and a set of file_operations function pointers that enable this
      user-space interaction. The skeleton driver needs this kind of interface,
      so it provides a minor starting number and a pointer to its
      file_operations functions.
  </para>
  <para>
      The USB driver is then registered with a call to usb_register, usually in
      the driver's init function, as shown here:
  </para>
  <programlisting>
static int __init usb_skel_init(void)
{
        int result;

        /* register this driver with the USB subsystem */
        result = usb_register(&amp;skel_driver);
        if (result &lt; 0) {
                err(&quot;usb_register failed for the &quot;__FILE__ &quot;driver.&quot;
                    &quot;Error number %d&quot;, result);
                return -1;
        }

        return 0;
}
module_init(usb_skel_init);
  </programlisting>
  <para>
      When the driver is unloaded from the system, it needs to unregister
      itself with the USB subsystem. This is done with the usb_unregister
      function:
  </para>
  <programlisting>
static void __exit usb_skel_exit(void)
{
        /* deregister this driver with the USB subsystem */
        usb_deregister(&amp;skel_driver);
}
module_exit(usb_skel_exit);
  </programlisting>
  <para>
     To enable the linux-hotplug system to load the driver automatically when
     the device is plugged in, you need to create a MODULE_DEVICE_TABLE. The
     following code tells the hotplug scripts that this module supports a
     single device with a specific vendor and product ID:
  </para>
  <programlisting>
/* table of devices that work with this driver */
static struct usb_device_id skel_table [] = {
        { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
        { }                      /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, skel_table);
  </programlisting>
  <para>
     There are other macros that can be used in describing a usb_device_id for
     drivers that support a whole class of USB drivers. See usb.h for more
     information on this.
  </para>
  </chapter>

  <chapter id="device">
      <title>Device operation</title>
  <para>
     When a device is plugged into the USB bus that matches the device ID
     pattern that your driver registered with the USB core, the probe function
     is called. The usb_device structure, interface number and the interface ID
     are passed to the function:
  </para>
  <programlisting>
static int skel_probe(struct usb_interface *interface,
    const struct usb_device_id *id)
  </programlisting>
  <para>
     The driver now needs to verify that this device is actually one that it
     can accept. If so, it returns 0.
     If not, or if any error occurs during initialization, an errorcode
     (such as <literal>-ENOMEM</literal> or <literal>-ENODEV</literal>)
     is returned from the probe function.
  </para>
  <para>
     In the skeleton driver, we determine what end points are marked as bulk-in
     and bulk-out. We create buffers to hold the data that will be sent and
     received from the device, and a USB urb to write data to the device is
     initialized.
  </para>
  <para>
     Conversely, when the device is removed from the USB bus, the disconnect
     function is called with the device pointer. The driver needs to clean any
     private data that has been allocated at this time and to shut down any
     pending urbs that are in the USB system. The driver also unregisters
     itself from the devfs subsystem with the call:
  </para>
  <programlisting>
/* remove our devfs node */
devfs_unregister(skel->devfs);
  </programlisting>
  <para>
     Now that the device is plugged into the system and the driver is bound to
     the device, any of the functions in the file_operations structure that
     were passed to the USB subsystem will be called from a user program trying
     to talk to the device. The first function called will be open, as the
     program tries to open the device for I/O. We increment our private usage
     count and save off a pointer to our internal structure in the file
     structure. This is done so that future calls to file operations will
     enable the driver to determine which device the user is addressing.  All
     of this is done with the following code:
  </para>
  <programlisting>
/* increment our usage count for the module */
++skel->open_count;

/* save our object in the file's private structure */
file->private_data = dev;
  </programlisting>
  <para>
     After the open function is called, the read and write functions are called
     to receive and send data to the device. In the skel_write function, we
     receive a pointer to some data that the user wants to send to the device
     and the size of the data. The function determines how much data it can
     send to the device based on the size of the write urb it has created (this
     size depends on the size of the bulk out end point that the device has).
     Then it copies the data from user space to kernel space, points the urb to
     the data and submits the urb to the USB subsystem.  This can be shown in
     he following code:
  </para>
  <programlisting>
/* we can only write as much as 1 urb will hold */
bytes_written = (count > skel->bulk_out_size) ? skel->bulk_out_size : count;

/* copy the data from user space into our urb */
copy_from_user(skel->write_urb->transfer_buffer, buffer, bytes_written);

/* set up our urb */
usb_fill_bulk_urb(skel->write_urb,
                  skel->dev,
                  usb_sndbulkpipe(skel->dev, skel->bulk_out_endpointAddr),
                  skel->write_urb->transfer_buffer,
                  bytes_written,
                  skel_write_bulk_callback,
                  skel);

/* send the data out the bulk port */
result = usb_submit_urb(skel->write_urb);
if (result) {
        err(&quot;Failed submitting write urb, error %d&quot;, result);
}
  </programlisting>
  <para>
     When the write urb is filled up with the proper information using the
     usb_fill_bulk_urb function, we point the urb's completion callback to call our
     own skel_write_bulk_callback function. This function is called when the
     urb is finished by the USB subsystem. The callback function is called in
     interrupt context, so caution must be taken not to do very much processing
     at that time. Our implementation of skel_write_bulk_callback merely
     reports if the urb was completed successfully or not and then returns.
  </para>
  <para>
     The read function works a bit differently from the write function in that
     we do not use an urb to transfer data from the device to the driver.
     Instead we call the usb_bulk_msg function, which can be used to send or
     receive data from a device without having to create urbs and handle
     urb completion callback functions. We call the usb_bulk_msg function,
     giving it a buffer into which to place any data received from the device
     and a timeout value. If the timeout period expires without receiving any
     data from the device, the function will fail and return an error message.
     This can be shown with the following code:
  </para>
  <programlisting>
/* do an immediate bulk read to get data from the device */
retval = usb_bulk_msg (skel->dev,
                       usb_rcvbulkpipe (skel->dev,
                       skel->bulk_in_endpointAddr),
                       skel->bulk_in_buffer,
                       skel->bulk_in_size,
                       &amp;count, HZ*10);
/* if the read was successful, copy the data to user space */
if (!retval) {
        if (copy_to_user (buffer, skel->bulk_in_buffer, count))
                retval = -EFAULT;
        else
                retval = count;
}
  </programlisting>
  <para>
     The usb_bulk_msg function can be very useful for doing single reads or
     writes to a device; however, if you need to read or write constantly to a
     device, it is recommended to set up your own urbs and submit them to the
     USB subsystem.
  </para>
  <para>
     When the user program releases the file handle that it has been using to
     talk to the device, the release function in the driver is called. In this
     function we decrement our private usage count and wait for possible
     pending writes:
  </para>
  <programlisting>
/* decrement our usage count for the device */
--skel->open_count;
  </programlisting>
  <para>
     One of the more difficult problems that USB drivers must be able to handle
     smoothly is the fact that the USB device may be removed from the system at
     any point in time, even if a program is currently talking to it. It needs
     to be able to shut down any current reads and writes and notify the
     user-space programs that the device is no longer there. The following
     code (function <function>skel_delete</function>)
     is an example of how to do this: </para>
  <programlisting>
static inline void skel_delete (struct usb_skel *dev)
{
    if (dev->bulk_in_buffer != NULL)
        kfree (dev->bulk_in_buffer);
    if (dev->bulk_out_buffer != NULL)
        usb_buffer_free (dev->udev, dev->bulk_out_size,
            dev->bulk_out_buffer,
            dev->write_urb->transfer_dma);
    if (dev->write_urb != NULL)
        usb_free_urb (dev->write_urb);
    kfree (dev);
}
  </programlisting>
  <para>
     If a program currently has an open handle to the device, we reset the flag
     <literal>device_present</literal>. For
     every read, write, release and other functions that expect a device to be
     present, the driver first checks this flag to see if the device is
     still present. If not, it releases that the device has disappeared, and a
     -ENODEV error is returned to the user-space program. When the release
     function is eventually called, it determines if there is no device
     and if not, it does the cleanup that the skel_disconnect
     function normally does if there are no open files on the device (see
     Listing 5).
  </para>
  </chapter>

  <chapter id="iso">
      <title>Isochronous Data</title>
  <para>
     This usb-skeleton driver does not have any examples of interrupt or
     isochronous data being sent to or from the device. Interrupt data is sent
     almost exactly as bulk data is, with a few minor exceptions.  Isochronous
     data works differently with continuous streams of data being sent to or
     from the device. The audio and video camera drivers are very good examples
     of drivers that handle isochronous data and will be useful if you also
     need to do this.
  </para>
  </chapter>
  
  <chapter id="Conclusion">
      <title>Conclusion</title>
  <para>
     Writing Linux USB device drivers is not a difficult task as the
     usb-skeleton driver shows. This driver, combined with the other current
     USB drivers, should provide enough examples to help a beginning author
     create a working driver in a minimal amount of time. The linux-usb-devel
     mailing list archives also contain a lot of helpful information.
  </para>
  </chapter>

  <chapter id="resources">
      <title>Resources</title>
  <para>
     The Linux USB Project: <ulink url="http://www.linux-usb.org">http://www.linux-usb.org/</ulink>
  </para>
  <para>
     Linux Hotplug Project: <ulink url="http://linux-hotplug.sourceforge.net">http://linux-hotplug.sourceforge.net/</ulink>
  </para>
  <para>
     Linux USB Working Devices List: <ulink url="http://www.qbik.ch/usb/devices">http://www.qbik.ch/usb/devices/</ulink>
  </para>
  <para>
     linux-usb-devel Mailing List Archives: <ulink url="http://marc.theaimsgroup.com/?l=linux-usb-devel">http://marc.theaimsgroup.com/?l=linux-usb-devel</ulink>
  </para>
  <para>
     Programming Guide for Linux USB Device Drivers: <ulink url="http://usb.cs.tum.edu/usbdoc">http://usb.cs.tum.edu/usbdoc</ulink>
  </para>
  <para>
     USB Home Page: <ulink url="http://www.usb.org">http://www.usb.org</ulink>
  </para>
  </chapter>

</book>
