isapnp.txt
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
  2. =========================================================
  3. Modified by Ed Okerson <eokerson@quicknet.net> to work with the 2.2.x
  4. series of Linux kernels. 11/17/99
  5. =====================================================================
  6. Interface /proc/isapnp
  7. ======================
  8. Read commands:
  9. --------------
  10. No comment..
  11. Write commands:
  12. ---------------
  13. With the write interface you can simply activate or modify the configuration
  14. for ISA Plug & Play devices. It is mainly useable for drivers which don't
  15. use the ISA Plug & Play kernel support yet.
  16. card <idx> <vendor> - select PnP device by vendor identification
  17. csn <CSN> - select PnP device by CSN
  18. dev <idx> <logdev> - select logical device
  19. auto - run autoconfigure
  20. activate - activate logical device
  21. deactivate - deactivate logical device
  22. port <idx> <value> - set port 0-7 to value
  23. irq <idx> <value> - set IRQ 0-1 to value
  24. dma <idx> <value> - set DMA 0-1 to value
  25. memory <idx> <value> - set memory 0-3 to value
  26. poke <reg> <value> - poke configuration byte to selected register
  27. pokew <reg> <value> - poke configuration word to selected register
  28. poked <reg> <value> - poke configuration dword to selected register
  29. Explanation:
  30. - variable <idx> begins with zero
  31. - variable <CSN> begins with one
  32. - <vendor> is in form 'PNP0000'
  33. - <logdev> is in form 'PNP0000'
  34. Example:
  35. cat > /proc/isapnp <<EOF
  36. card 0 CSC7537
  37. dev 0 CSC0000
  38. port 0 0x534
  39. port 1 0x388
  40. port 2 0x220
  41. irq 0 5
  42. dma 0 1
  43. dma 1 3
  44. poke 0x70 9
  45. activate
  46. logdev 0 CSC0001
  47. port 0 0x240
  48. activate
  49. EOF
  50. Information for developers
  51. ==========================
  52. Finding appropriate device
  53. --------------------------
  54. extern struct pnp_bus *isapnp_find_card(unsigned short vendor,
  55.                                         unsigned short device,
  56.                                         struct pnp_bus *from);
  57. The above function finds a ISA PnP card. For the vendor device should
  58. be used ISAPNP_VENDOR(a,b,c) where a,b,c are characters or integers.
  59. For the device number should be used ISAPNP_DEVICE(x) macro where x is
  60. integer value. Both vendor and device numbers can be get from contents
  61. of the /proc/isapnp file.
  62. extern struct pnp_dev *isapnp_find_dev(struct pnp_bus *card,
  63.                                        unsigned short vendor,
  64.                                        unsigned short function,
  65.                                        struct pnp_dev *from);
  66. The above function finds the ISA PnP device. If card is NULL, then
  67. the global search mode is used (all devices are used for the searching).
  68. Otherwise only devices which belongs to the specified card are verified.
  69. For the function number can be used ISAPNP_FUNCTION(x) macro which works
  70. similarly as the ISAPNP_DEVICE(x) macro.
  71. ISA PnP configuration
  72. =====================
  73. There are two ways how can be ISA PnP interface used.
  74. First way is lowlevel
  75. ---------------------
  76. All ISA PNP configuration registers are accessible via lowlevel
  77. isapnp_(read|write)_(byte|word|dword) functions.
  78. The function isapnp_cfg_begin() must be called before any lowlevel function.
  79. The function isapnp_cfg_end() must be always called after configuration
  80. otherwise the access to the ISA PnP configuration functions will be blocked.
  81. Second way is auto-configuration
  82. --------------------------------
  83. These two functions gives to the driver the real power of the ISA PnP
  84. feature. First function dev->prepare() only initialize the resource
  85. members in the device structure. This structure contains all resources
  86. set to auto configuration values after the initialization. The driver for
  87. ISA PnP device may modify (or not) some resources to skip auto configuration
  88. for the given resource.
  89. The function isapnp_configure does:
  90. - resources which have the auto configuration value are configured
  91. - the auto configuration is created using ISA PnP resource map
  92. - the function writes configuration to ISA PnP configuration registers
  93. - the function returns to the caller actual used resources
  94. Example (game port initialization)
  95. ==================================
  96. /*** initialization ***/
  97. struct pnp_dev *dev;
  98. /* find the first game port, use standard PnP IDs */
  99. dev = isapnp_find_dev(NULL,
  100.       ISAPNP_VENDOR('P','N','P'),
  101.       ISAPNP_FUNCTION(0xb02f),
  102.       NULL);
  103. if (!dev)
  104. return -ENODEV;
  105. if (dev->prepare(dev)<0)
  106. return -EAGAIN;
  107. if (!(dev->resource[0].flags & IORESOURCE_IO))
  108. return -ENODEV;
  109. if (!dev->ro) {
  110. /* override resource */
  111. if (user_port != USER_PORT_AUTO_VALUE)
  112. isapnp_resource_change(&dev->resource[0], user_port, 1);
  113. }
  114. if (dev->activate(dev)<0) {
  115. printk("isapnp configure failed (out of resources?)n");
  116. return -ENOMEM;
  117. }
  118. user_port = dev->resource[0].start; /* get real port */
  119. /*** deactivation ***/
  120. /* to deactivate use: */
  121.   if (dev)
  122.   dev->deactivate(dev);