patch-2.3.14 linux/Documentation/isapnp.txt

Next file: linux/Documentation/isdn/CREDITS
Previous file: linux/Documentation/fb/modedb.txt
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.13/linux/Documentation/isapnp.txt linux/Documentation/isapnp.txt
@@ -0,0 +1,147 @@
+ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
+=========================================================
+
+Interface /proc/isapnp
+======================
+
+Read commands:
+--------------
+
+No comment..
+
+Write commands:
+---------------
+
+With the write interface you can simply activate or modify the configuration
+for ISA Plug & Play devices. It is mainly useable for drivers which don't
+use the ISA Plug & Play kernel support yet.
+
+card <idx> <vendor>	- select PnP device by vendor identification
+csn <CSN>		- select PnP device by CSN
+dev <idx> <logdev>	- select logical device
+auto			- run autoconfigure
+activate		- activate logical device
+deactivate		- deactivate logical device
+port <idx> <value>	- set port 0-7 to value
+irq <idx> <value>	- set IRQ 0-1 to value
+dma <idx> <value>	- set DMA 0-1 to value
+memory <idx> <value>	- set memory 0-3 to value
+poke <reg> <value>	- poke configuration byte to selected register
+pokew <reg> <value>	- poke configuration word to selected register
+poked <reg> <value>	- poke configuration dword to selected register
+
+Explanation:
+	- variable <idx> begins with zero
+	- variable <CSN> begins with one
+	- <vendor> is in form 'PNP0000'
+	- <logdev> is in form 'PNP0000'
+
+Example:
+
+cat > /proc/isapnp <<EOF
+card 0 CSC7537
+dev 0 CSC0000
+port 0 0x534
+port 1 0x388
+port 2 0x220
+irq 0 5
+dma 0 1
+dma 1 3
+poke 0x70 9
+activate
+logdev 0 CSC0001
+port 0 0x240
+activate
+EOF
+
+Information for developers
+==========================
+
+Finding appropriate device
+--------------------------
+
+extern struct pci_bus *isapnp_find_card(unsigned short vendor,
+                                        unsigned short device,
+                                        struct pci_bus *from);
+
+The above function finds a ISA PnP card. For the vendor device should
+be used ISAPNP_VENDOR(a,b,c) where a,b,c are characters or integers.
+For the device number should be used ISAPNP_DEVICE(x) macro where x is
+integer value. Both vendor and device numbers can be get from contents
+of the /proc/isapnp file.
+
+extern struct pci_dev *isapnp_find_dev(struct pci_bus *card,
+                                       unsigned short vendor,
+                                       unsigned short function,
+                                       struct pci_dev *from);
+
+The above function finds the ISA PnP device. If card is NULL, then
+the global search mode is used (all devices are used for the searching).
+Otherwise only devices which belongs to the specified card are verified.
+For the function number can be used ISAPNP_FUNCTION(x) macro which works
+similarly as the ISAPNP_DEVICE(x) macro.
+
+ISA PnP configuration
+=====================
+
+There are two ways how can be ISA PnP interface used.
+
+First way is lowlevel
+---------------------
+
+All ISA PNP configuration registers are accessible via lowlevel
+isapnp_cfg_(set|get)_(byte|word|dword) functions.
+
+Before any lowlevel function 
+The function isapnp_cfg_begin() must be called before any lowlevel function.
+The function isapnp_cfg_end() must be always called after configuration
+otherwise the access to the ISA PnP configuration functions will be blocked.
+
+Second way is auto-configuration
+--------------------------------
+
+These two functions gives to the driver the real power of the ISA PnP
+feature. First function dev->prepare() only initialize the resource
+members in the device structure. This structure contains all resources
+set to auto configuration values after the initialization. The driver for
+ISA PnP device may modify (or not) some resources to skip auto configuration
+for the given resource.
+
+The function isapnp_configure does:
+	- resources which have the auto configuration value are configured
+	- the auto configuration is created using ISA PnP resource map
+	- the function writes configuration to ISA PnP configuration registers
+	- the function returns to the caller actual used resources
+
+Example (game port initialization)
+==================================
+
+/*** initialization ***/
+
+	struct pci_dev *dev;
+
+	/* find the first game port, use standard PnP IDs */
+	dev = isapnp_find_dev(NULL,
+			      ISAPNP_VENDOR('P','N','P'),
+			      ISAPNP_FUNCTION(0xb02f),
+			      NULL);
+	if (!dev)
+		return -ENODEV;
+	if (dev->prepare(dev)<0)
+		return -EAGAIN;
+	if (!dev->ro) {
+		/* override resource */
+		if (user_port != USER_PORT_AUTO_VALUE)
+			dev->resource[0].start = user_port;
+	}
+	if (dev->activate(dev)<0) {
+		printk("isapnp configure failed (out of resources?)\n");
+		return -ENOMEM;
+	}
+	user_port = dev->resource[0].start;		/* get real port */
+
+/*** deactivation ***/
+
+	/* to deactivate use: */
+ 	if (dev)
+ 		dev->deactivate(dev);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)