The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/Documentation/isapnp.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
    2 ==========================================================
    3 
    4 Interface /proc/isapnp
    5 ======================
    6 
    7 Read commands:
    8 --------------
    9 
   10 No comment.
   11 
   12 Write commands:
   13 ---------------
   14 
   15 With the write interface you can activate or modify the configuration of
   16 ISA Plug & Play devices.  It is mainly useful for drivers which have not
   17 been rewritten to use the ISA Plug & Play kernel support yet.
   18 
   19 card <idx> <vendor>     - select PnP device by vendor identification
   20 csn <CSN>               - select PnP device by CSN
   21 dev <idx> <logdev>      - select logical device
   22 auto                    - run autoconfigure
   23 activate                - activate logical device
   24 deactivate              - deactivate logical device
   25 port <idx> <value>      - set port 0-7 to value
   26 irq <idx> <value>       - set IRQ 0-1 to value
   27 dma <idx> <value>       - set DMA 0-1 to value
   28 memory <idx> <value>    - set memory 0-3 to value
   29 poke <reg> <value>      - poke configuration byte to selected register
   30 pokew <reg> <value>     - poke configuration word to selected register
   31 poked <reg> <value>     - poke configuration dword to selected register
   32 allow_dma0 <value>      - allow dma channel 0 during auto activation: 0=off, 1=on
   33 
   34 Explanation:
   35         - variable <idx> begins with zero
   36         - variable <CSN> begins with one
   37         - <vendor> is in the standard format 'ABC1234'
   38         - <logdev> is in the standard format 'ABC1234'
   39 
   40 Example:
   41 
   42 cat > /proc/isapnp <<EOF
   43 card 0 CSC7537
   44 dev 0 CSC0000
   45 port 0 0x534
   46 port 1 0x388
   47 port 2 0x220
   48 irq 0 5
   49 dma 0 1
   50 dma 1 3
   51 poke 0x70 9
   52 activate
   53 logdev 0 CSC0001
   54 port 0 0x240
   55 activate
   56 EOF
   57 
   58 
   59 Information for developers
   60 ==========================
   61 
   62 Finding a device
   63 ----------------
   64 
   65 extern struct pci_bus *isapnp_find_card(unsigned short vendor,
   66                                         unsigned short device,
   67                                         struct pci_bus *from);
   68 
   69 This function finds an ISA PnP card.  For the vendor argument, the
   70 ISAPNP_VENDOR(a,b,c) macro should be used, where a,b,c are characters or
   71 integers.  For the device argument the ISAPNP_DEVICE(x) macro should be
   72 used, where x is an integer value.  Both vendor and device arguments
   73 can be taken from contents of the /proc/isapnp file.
   74 
   75 extern struct pci_dev *isapnp_find_dev(struct pci_bus *card,
   76                                        unsigned short vendor,
   77                                        unsigned short function,
   78                                        struct pci_dev *from);
   79 
   80 This function finds an ISA PnP device. If card is NULL, then the global
   81 search mode is used (all devices are used for the searching).  Otherwise
   82 only devices which belong to the specified card are checked.  For the
   83 function number the ISAPNP_FUNCTION(x) macro can be used; it works
   84 similarly to the ISAPNP_DEVICE(x) macro.
   85 
   86 extern int isapnp_probe_cards(const struct isapnp_card_id *ids,
   87                               int (*probe)(struct pci_bus *card,
   88                               const struct isapnp_card_id *id));
   89 
   90 
   91 This function is a helper for drivers which need to use more than
   92 one device from an ISA PnP card.  The probe callback is called with
   93 appropriate arguments for each card.
   94 
   95 Example for ids parameter initialization:
   96 
   97 static struct isapnp_card_id card_ids[] __devinitdata = {
   98         {
   99                 ISAPNP_CARD_ID('A','D','V', 0x550a),
  100                 devs: {
  101                         ISAPNP_DEVICE_ID('A', 'D', 'V', 0x0010),
  102                         ISAPNP_DEVICE_ID('A', 'D', 'V', 0x0011)
  103                 },
  104                 driver_data: 0x1234,
  105         },
  106         {
  107                 ISAPNP_CARD_END,
  108         }
  109 };
  110 ISAPNP_CARD_TABLE(card_ids);
  111 
  112 extern int isapnp_probe_devs(const struct isapnp_device_id *ids,
  113                              int (*probe)(struct pci_bus *card,
  114                              const struct isapnp_device_id *id));
  115 
  116 
  117 This function is a helper for drivers which need to use one
  118 device from an ISA PnP card.  The probe callback is called with
  119 appropriate arguments for each matched device.
  120 
  121 Example for ids parameter initialization:
  122 
  123 static struct isapnp_device_id device_ids[] __devinitdata = {
  124         { ISAPNP_DEVICE_SINGLE('E','S','S', 0x0968, 'E','S','S', 0x0968), },
  125         { ISAPNP_DEVICE_SINGLE_END, }
  126 };
  127 MODULE_DEVICE_TABLE(isapnp, device_ids);
  128 
  129 
  130 ISA PnP configuration
  131 =====================
  132 
  133 There are two ways in which the ISA PnP interface can be used.
  134 
  135 First way: low-level
  136 --------------------
  137 
  138 All ISA PNP configuration registers are accessible via the low-level
  139 isapnp_(read|write)_(byte|word|dword) functions.
  140 
  141 The function isapnp_cfg_begin() must be called before any lowlevel function.
  142 The function isapnp_cfg_end() must be always called after configuration
  143 otherwise the access to the ISA PnP configuration functions will be blocked.
  144 
  145 Second way: auto-configuration
  146 ------------------------------
  147 
  148 This feature gives to the driver the real power of the ISA PnP driver.
  149 The function dev->prepare() initializes the resource members in the device
  150 structure.  This structure contains all resources set to auto configuration
  151 values after the initialization.  The device driver may modify some resources
  152 to skip the auto configuration for a given resource.
  153 
  154 Once the device structure contains all requested resource values, the function
  155 dev->activate() must be called to assign free resources to resource members
  156 with the auto configuration value.
  157 
  158 Function dev->activate() does:
  159    - resources with the auto configuration value are configured
  160    - the auto configuration is created using ISA PnP resource map
  161    - the function writes configuration to ISA PnP configuration registers
  162    - the function returns to the caller actual used resources
  163 
  164 When the device driver is removed, function dev->deactivate() has to be
  165 called to free all assigned resources.
  166 
  167 Example (game port initialization)
  168 ==================================
  169 
  170 /*** initialization ***/
  171 
  172         struct pci_dev *dev;
  173 
  174         /* find the first game port, use standard PnP IDs */
  175         dev = isapnp_find_dev(NULL,
  176                               ISAPNP_VENDOR('P','N','P'),
  177                               ISAPNP_FUNCTION(0xb02f),
  178                               NULL);
  179         if (!dev)
  180                 return -ENODEV;
  181         if (dev->active)
  182                 return -EBUSY;
  183         if (dev->prepare(dev)<0)
  184                 return -EAGAIN;
  185         if (!(dev->resource[0].flags & IORESOURCE_IO))
  186                 return -ENODEV;
  187         if (!dev->ro) {
  188                 /* override resource */
  189                 if (user_port != USER_PORT_AUTO_VALUE)
  190                         isapnp_resource_change(&dev->resource[0], user_port, 1);
  191         }
  192         if (dev->activate(dev)<0) {
  193                 printk("isapnp configure failed (out of resources?)\n");
  194                 return -ENOMEM;
  195         }
  196         user_port = dev->resource[0].start;             /* get real port */
  197 
  198 /*** deactivation ***/
  199 
  200         /* to deactivate use: */
  201         if (dev)
  202                 dev->deactivate(dev);

Cache object: c46f31dffc1561cb925dd23e146f60f1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.