pci.txt
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:10k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1.  How To Write Linux PCI Drivers
  2.    by Martin Mares <mj@ucw.cz> on 07-Feb-2000
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. The world of PCI is vast and it's full of (mostly unpleasant) surprises.
  5. Different PCI devices have different requirements and different bugs --
  6. because of this, the PCI support layer in Linux kernel is not as trivial
  7. as one would wish. This short pamphlet tries to help all potential driver
  8. authors to find their way through the deep forests of PCI handling.
  9. 0. Structure of PCI drivers
  10. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11. There exist two kinds of PCI drivers: new-style ones (which leave most of
  12. probing for devices to the PCI layer and support online insertion and removal
  13. of devices [thus supporting PCI, hot-pluggable PCI and CardBus in single
  14. driver]) and old-style ones which just do all the probing themselves. Unless
  15. you have a very good reason to do so, please don't use the old way of probing
  16. in any new code. After the driver finds the devices it wishes to operate
  17. on (either the old or the new way), it needs to perform the following steps:
  18. Enable the device
  19. Access device configuration space
  20. Discover resources (addresses and IRQ numbers) provided by the device
  21. Allocate these resources
  22. Communicate with the device
  23. Most of these topics are covered by the following sections, for the rest
  24. look at <linux/pci.h>, it's hopefully well commented.
  25. If the PCI subsystem is not configured (CONFIG_PCI is not set), most of
  26. the functions described below are defined as inline functions either completely
  27. empty or just returning an appropriate error codes to avoid lots of ifdefs
  28. in the drivers.
  29. 1. New-style drivers
  30. ~~~~~~~~~~~~~~~~~~~~
  31. The new-style drivers just call pci_register_driver during their initialization
  32. with a pointer to a structure describing the driver (struct pci_driver) which
  33. contains:
  34. name Name of the driver
  35. id_table Pointer to table of device ID's the driver is
  36. interested in.  Most drivers should export this
  37. table using MODULE_DEVICE_TABLE(pci,...).
  38. Set to NULL to call probe() function for every
  39. PCI device known to the system.
  40. probe Pointer to a probing function which gets called (during
  41. execution of pci_register_driver for already existing
  42. devices or later if a new device gets inserted) for all
  43. PCI devices which match the ID table and are not handled
  44. by the other drivers yet. This function gets passed a pointer
  45. to the pci_dev structure representing the device and also
  46. which entry in the ID table did the device match. It returns
  47. zero when the driver has accepted the device or an error
  48. code (negative number) otherwise. This function always gets
  49. called from process context, so it can sleep.
  50. remove Pointer to a function which gets called whenever a device
  51. being handled by this driver is removed (either during
  52. deregistration of the driver or when it's manually pulled
  53. out of a hot-pluggable slot). This function always gets
  54. called from process context, so it can sleep.
  55. save_state Save a device's state before it's suspend.
  56. suspend Put device into low power state.
  57. resume Wake device from low power state.
  58. enable_wake Enable device to generate wake events from a low power state.
  59. (Please see Documentation/power/pci.txt for descriptions
  60. of PCI Power Management and the related functions)
  61. The ID table is an array of struct pci_device_id ending with a all-zero entry.
  62. Each entry consists of:
  63. vendor, device Vendor and device ID to match (or PCI_ANY_ID)
  64. subvendor, Subsystem vendor and device ID to match (or PCI_ANY_ID)
  65. subdevice
  66. class, Device class to match. The class_mask tells which bits
  67. class_mask of the class are honored during the comparison.
  68. driver_data Data private to the driver.
  69. When the driver exits, it just calls pci_unregister_driver() and the PCI layer
  70. automatically calls the remove hook for all devices handled by the driver.
  71. Please mark the initialization and cleanup functions where appropriate
  72. (the corresponding macros are defined in <linux/init.h>):
  73. __init Initialization code. Thrown away after the driver
  74. initializes.
  75. __exit Exit code. Ignored for non-modular drivers.
  76. __devinit Device initialization code. Identical to __init if
  77. the kernel is not compiled with CONFIG_HOTPLUG, normal
  78. function otherwise.
  79. __devexit The same for __exit.
  80. Tips:
  81. The module_init()/module_exit() functions (and all initialization
  82.         functions called only from these) should be marked __init/exit.
  83. The struct pci_driver shouldn't be marked with any of these tags.
  84. The ID table array should be marked __devinitdata.
  85. The probe() and remove() functions (and all initialization
  86. functions called only from these) should be marked __devinit/exit.
  87. If you are sure the driver is not a hotplug driver then use only 
  88. __init/exit __initdata/exitdata.
  89.         Pointers to functions marked as __devexit must be created using
  90.         __devexit_p(function_name).  That will generate the function
  91.         name or NULL if the __devexit function will be discarded.
  92. 2. How to find PCI devices manually (the old style)
  93. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  94. PCI drivers not using the pci_register_driver() interface search
  95. for PCI devices manually using the following constructs:
  96. Searching by vendor and device ID:
  97. struct pci_dev *dev = NULL;
  98. while (dev = pci_find_device(VENDOR_ID, DEVICE_ID, dev))
  99. configure_device(dev);
  100. Searching by class ID (iterate in a similar way):
  101. pci_find_class(CLASS_ID, dev)
  102. Searching by both vendor/device and subsystem vendor/device ID:
  103. pci_find_subsys(VENDOR_ID, DEVICE_ID, SUBSYS_VENDOR_ID, SUBSYS_DEVICE_ID, dev).
  104.    You can use the constant PCI_ANY_ID as a wildcard replacement for
  105. VENDOR_ID or DEVICE_ID.  This allows searching for any device from a
  106. specific vendor, for example.
  107.    In case you need to decide according to some more complex criteria,
  108. you can walk the list of all known PCI devices yourself:
  109. struct pci_dev *dev;
  110. pci_for_each_dev(dev) {
  111. ... do anything you want with dev ...
  112. }
  113. For compatibility with device ordering in older kernels, you can also
  114. use pci_for_each_dev_reverse(dev) for walking the list in the opposite
  115. direction.
  116. 3. Enabling devices
  117. ~~~~~~~~~~~~~~~~~~~
  118.    Before you do anything with the device you've found, you need to enable
  119. it by calling pci_enable_device() which enables I/O and memory regions of
  120. the device, assigns missing resources if needed and wakes up the device
  121. if it was in suspended state. Please note that this function can fail.
  122.    If you want to use the device in bus mastering mode, call pci_set_master()
  123. which enables the bus master bit in PCI_COMMAND register and also fixes
  124. the latency timer value if it's set to something bogus by the BIOS.
  125.    If you want to use the PCI Memory-Write-Invalidate transaction,
  126. call pci_set_mwi().  This enables bit PCI_COMMAND bit for Mem-Wr-Inval
  127. and also ensures that the cache line size register is set correctly.
  128. Make sure to check the return value of pci_set_mwi(), not all architectures
  129. may support Memory-Write-Invalidate.
  130. 4. How to access PCI config space
  131. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  132.    You can use pci_(read|write)_config_(byte|word|dword) to access the config
  133. space of a device represented by struct pci_dev *. All these functions return 0
  134. when successful or an error code (PCIBIOS_...) which can be translated to a text
  135. string by pcibios_strerror. Most drivers expect that accesses to valid PCI
  136. devices don't fail.
  137.    If you access fields in the standard portion of the config header, please
  138. use symbolic names of locations and bits declared in <linux/pci.h>.
  139.    If you need to access Extended PCI Capability registers, just call
  140. pci_find_capability() for the particular capability and it will find the
  141. corresponding register block for you.
  142. 5. Addresses and interrupts
  143. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  144.    Memory and port addresses and interrupt numbers should NOT be read from the
  145. config space. You should use the values in the pci_dev structure as they might
  146. have been remapped by the kernel.
  147.    See Documentation/IO-mapping.txt for how to access device memory.
  148.    You still need to call request_region() for I/O regions and request_mem_region()
  149. for memory regions to make sure nobody else is using the same device.
  150.    All interrupt handlers should be registered with SA_SHIRQ and use the devid
  151. to map IRQs to devices (remember that all PCI interrupts are shared).
  152. 6. Other interesting functions
  153. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  154. pci_find_slot() Find pci_dev corresponding to given bus and
  155. slot numbers.
  156. pci_set_power_state() Set PCI Power Management state (0=D0 ... 3=D3)
  157. pci_find_capability() Find specified capability in device's capability
  158. list.
  159. pci_module_init() Inline helper function for ensuring correct
  160. pci_driver initialization and error handling.
  161. pci_resource_start() Returns bus start address for a given PCI region
  162. pci_resource_end() Returns bus end address for a given PCI region
  163. pci_resource_len() Returns the byte length of a PCI region
  164. pci_set_drvdata() Set private driver data pointer for a pci_dev
  165. pci_get_drvdata() Return private driver data pointer for a pci_dev
  166. pci_set_mwi() Enable Memory-Write-Invalidate transactions.
  167. pci_clear_mwi() Disable Memory-Write-Invalidate transactions.
  168. 7. Miscellaneous hints
  169. ~~~~~~~~~~~~~~~~~~~~~~
  170. When displaying PCI slot names to the user (for example when a driver wants
  171. to tell the user what card has it found), please use pci_dev->slot_name
  172. for this purpose.
  173. Always refer to the PCI devices by a pointer to the pci_dev structure.
  174. All PCI layer functions use this identification and it's the only
  175. reasonable one. Don't use bus/slot/function numbers except for very
  176. special purposes -- on systems with multiple primary buses their semantics
  177. can be pretty complex.
  178. If you're going to use PCI bus mastering DMA, take a look at
  179. Documentation/DMA-mapping.txt.
  180. 8. Obsolete functions
  181. ~~~~~~~~~~~~~~~~~~~~~
  182. There are several functions kept only for compatibility with old drivers
  183. not updated to the new PCI interface. Please don't use them in new code.
  184. pcibios_present() Since ages, you don't need to test presence
  185. of PCI subsystem when trying to talk with it.
  186. If it's not there, the list of PCI devices
  187. is empty and all functions for searching for
  188. devices just return NULL.
  189. pcibios_(read|write)_* Superseded by their pci_(read|write)_*
  190. counterparts.
  191. pcibios_find_* Superseded by their pci_find_* counterparts.