diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-16 11:27:10 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-16 11:27:10 -0400 |
| commit | ab86e5765d41a5eb4239a1c04d613db87bea5ed8 (patch) | |
| tree | a41224d4874c2f90e0b423786f00bedf6f3e8bfa | |
| parent | 7ea61767e41e2baedd6a968d13f56026522e1207 (diff) | |
| parent | 2b2af54a5bb6f7e80ccf78f20084b93c398c3a8b (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6:
Driver Core: devtmpfs - kernel-maintained tmpfs-based /dev
debugfs: Modify default debugfs directory for debugging pktcdvd.
debugfs: Modified default dir of debugfs for debugging UHCI.
debugfs: Change debugfs directory of IWMC3200
debugfs: Change debuhgfs directory of trace-events-sample.h
debugfs: Fix mount directory of debugfs by default in events.txt
hpilo: add poll f_op
hpilo: add interrupt handler
hpilo: staging for interrupt handling
driver core: platform_device_add_data(): use kmemdup()
Driver core: Add support for compatibility classes
uio: add generic driver for PCI 2.3 devices
driver-core: move dma-coherent.c from kernel to driver/base
mem_class: fix bug
mem_class: use minor as index instead of searching the array
driver model: constify attribute groups
UIO: remove 'default n' from Kconfig
Driver core: Add accessor for device platform data
Driver core: move dev_get/set_drvdata to drivers/base/dd.c
Driver core: add new device to bus's list before probing
59 files changed, 1287 insertions, 239 deletions
diff --git a/Documentation/DocBook/uio-howto.tmpl b/Documentation/DocBook/uio-howto.tmpl index 8f6e3b2403c7..4d4ce0e61e42 100644 --- a/Documentation/DocBook/uio-howto.tmpl +++ b/Documentation/DocBook/uio-howto.tmpl | |||
| @@ -25,6 +25,10 @@ | |||
| 25 | <year>2006-2008</year> | 25 | <year>2006-2008</year> |
| 26 | <holder>Hans-Jürgen Koch.</holder> | 26 | <holder>Hans-Jürgen Koch.</holder> |
| 27 | </copyright> | 27 | </copyright> |
| 28 | <copyright> | ||
| 29 | <year>2009</year> | ||
| 30 | <holder>Red Hat Inc, Michael S. Tsirkin (mst@redhat.com)</holder> | ||
| 31 | </copyright> | ||
| 28 | 32 | ||
| 29 | <legalnotice> | 33 | <legalnotice> |
| 30 | <para> | 34 | <para> |
| @@ -42,6 +46,13 @@ GPL version 2. | |||
| 42 | 46 | ||
| 43 | <revhistory> | 47 | <revhistory> |
| 44 | <revision> | 48 | <revision> |
| 49 | <revnumber>0.9</revnumber> | ||
| 50 | <date>2009-07-16</date> | ||
| 51 | <authorinitials>mst</authorinitials> | ||
| 52 | <revremark>Added generic pci driver | ||
| 53 | </revremark> | ||
| 54 | </revision> | ||
| 55 | <revision> | ||
| 45 | <revnumber>0.8</revnumber> | 56 | <revnumber>0.8</revnumber> |
| 46 | <date>2008-12-24</date> | 57 | <date>2008-12-24</date> |
| 47 | <authorinitials>hjk</authorinitials> | 58 | <authorinitials>hjk</authorinitials> |
| @@ -809,6 +820,158 @@ framework to set up sysfs files for this region. Simply leave it alone. | |||
| 809 | 820 | ||
| 810 | </chapter> | 821 | </chapter> |
| 811 | 822 | ||
| 823 | <chapter id="uio_pci_generic" xreflabel="Using Generic driver for PCI cards"> | ||
| 824 | <?dbhtml filename="uio_pci_generic.html"?> | ||
| 825 | <title>Generic PCI UIO driver</title> | ||
| 826 | <para> | ||
| 827 | The generic driver is a kernel module named uio_pci_generic. | ||
| 828 | It can work with any device compliant to PCI 2.3 (circa 2002) and | ||
| 829 | any compliant PCI Express device. Using this, you only need to | ||
| 830 | write the userspace driver, removing the need to write | ||
| 831 | a hardware-specific kernel module. | ||
| 832 | </para> | ||
| 833 | |||
| 834 | <sect1 id="uio_pci_generic_binding"> | ||
| 835 | <title>Making the driver recognize the device</title> | ||
| 836 | <para> | ||
| 837 | Since the driver does not declare any device ids, it will not get loaded | ||
| 838 | automatically and will not automatically bind to any devices, you must load it | ||
| 839 | and allocate id to the driver yourself. For example: | ||
| 840 | <programlisting> | ||
| 841 | modprobe uio_pci_generic | ||
| 842 | echo "8086 10f5" > /sys/bus/pci/drivers/uio_pci_generic/new_id | ||
| 843 | </programlisting> | ||
| 844 | </para> | ||
| 845 | <para> | ||
| 846 | If there already is a hardware specific kernel driver for your device, the | ||
| 847 | generic driver still won't bind to it, in this case if you want to use the | ||
| 848 | generic driver (why would you?) you'll have to manually unbind the hardware | ||
| 849 | specific driver and bind the generic driver, like this: | ||
| 850 | <programlisting> | ||
| 851 | echo -n 0000:00:19.0 > /sys/bus/pci/drivers/e1000e/unbind | ||
| 852 | echo -n 0000:00:19.0 > /sys/bus/pci/drivers/uio_pci_generic/bind | ||
| 853 | </programlisting> | ||
| 854 | </para> | ||
| 855 | <para> | ||
| 856 | You can verify that the device has been bound to the driver | ||
| 857 | by looking for it in sysfs, for example like the following: | ||
| 858 | <programlisting> | ||
| 859 | ls -l /sys/bus/pci/devices/0000:00:19.0/driver | ||
| 860 | </programlisting> | ||
| 861 | Which if successful should print | ||
| 862 | <programlisting> | ||
| 863 | .../0000:00:19.0/driver -> ../../../bus/pci/drivers/uio_pci_generic | ||
| 864 | </programlisting> | ||
| 865 | Note that the generic driver will not bind to old PCI 2.2 devices. | ||
| 866 | If binding the device failed, run the following command: | ||
| 867 | <programlisting> | ||
| 868 | dmesg | ||
| 869 | </programlisting> | ||
| 870 | and look in the output for failure reasons | ||
| 871 | </para> | ||
| 872 | </sect1> | ||
| 873 | |||
| 874 | <sect1 id="uio_pci_generic_internals"> | ||
| 875 | <title>Things to know about uio_pci_generic</title> | ||
| 876 | <para> | ||
| 877 | Interrupts are handled using the Interrupt Disable bit in the PCI command | ||
| 878 | register and Interrupt Status bit in the PCI status register. All devices | ||
| 879 | compliant to PCI 2.3 (circa 2002) and all compliant PCI Express devices should | ||
| 880 | support these bits. uio_pci_generic detects this support, and won't bind to | ||
