1.\" pnp(4) - manual page for the scanner device driver `asc' 2.\" 3.\" 4.\" Copyright (c) 1997 Luigi Rizzo 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 3. All advertising materials mentioning features or use of this software 15.\" must display the following acknowledgements: 16.\" This product includes software developed by Luigi Rizzo. 17.\" 4. The name of the author may not be used to endorse or promote products 18.\" derived from this software without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30.\" 31.\" $FreeBSD$ 32.\" 33.Dd September 7, 1997 34.Dt PNP 4 i386 35.Os FreeBSD 36.Sh NAME 37.Nm pnp 38.Nd support for PnP devices 39.Sh SYNOPSIS 40.Cd controller pnp0 41.Sh DESCRIPTION 42Support for PnP devices in 43.Fx 44allows the user to override the 45configuration of PnP cards, and device drivers to fetch/modify 46parameters in the card's configuration space. 47.Pp 48The manual override mechanism requires the kernel to be compiled with 49.Cd options USERCONFIG . 50In this case, the kernel keeps a table of fixed size (20 entries as a 51default) where configuration data are held for PnP devices. 52Each 53PnP card can contain several independent devices (5 or 6 is not 54unusual). 55.Pp 56By booting the kernel with the 57.Dq Fl c 58flag, commands are available to 59modify the configuration of PnP cards. 60Commands start with the 61sequence: 62.Dl pnp CSN LDN 63where CSN and LDN are the Card Select Number and Logical Device Number 64associated to the device. 65Following this sequence any combination of 66the following commands can be used: 67.Bl -tag -width "mmmmmmmmmm"" 68.It Dv irqN line 69Sets the irq line for interrupt 0 or 1 on the card. 70Line=0 means the line 71is unused. 72.It Dv drqN n 73Sets the drq channel used for DMA 0 or 1 on the card. 74Channel=4 means 75the channel is unused. 76.It Dv portN address 77Sets the base address for the N-th port's range (N=0..7). address=0 78means that the port is not used. 79.It Dv memN address 80Sets the base address for the N-th memory's range (N=0..3). address=0 81means that the memory range is not used. 82.It Dv bios 83Makes the PnP device use the configuration set by the BIOS. 84This 85is the default, and is generally ok if your BIOS has PnP support. 86If BIOS is used, then other parameters are ignored except "flags". 87.It Dv os 88Makes the PnP device to use the configuration specified in this entry. 89.It Dv enable 90Enables the PnP device. 91.It Dv disable 92Disables the PnP device. 93.It Dv delete 94Frees the entry used for the device, so that it can be used for 95another device with a different CSN/LDN pair. 96.It Dv flags 97Sets the value of a 32-bit flags entry which is passed to the device 98driver. 99This can be used to set special operation modes (e.g. SB vs. WSS 100emulation on some sound cards, etc.). 101.El 102.Pp 103The current content of the table can be printed using the 104.Ic ls 105command in userconfig. 106In addition to modifications done by the user, 107the table contains an entry for 108all logical devices accessed by a PnP device driver. 109.Pp 110Modifications to 111the table will be saved to the boot image on the filesystem by the 112.Xr kget 8 113command. 114.Pp 115.Sh DEVICE DRIVER SUPPORT FOR PnP 116PnP devices are automatically recognized and configured by the kernel. 117A PnP device is identified by the following data structure: 118.Bd -literal 119struct pnp_device { 120 char *pd_name; 121 char *(*pd_probe ) (u_long csn, u_long vendor_id); 122 void (*pd_attach ) (u_long csn, u_long vend_id, char * name, 123 struct isa_device *dev); 124 u_long *pd_count; 125 u_int *imask; 126 struct isa_device dev; 127}; 128.Ed 129.Pp 130The probe routine must check that the vendor_id passed is a 131recognized one, that any necessary devices on the card are enabled, 132and returns a NULL value in case of failure or a non-NULL value 133(generally a pointer to the device name) unpon success. In the probe 134routine, the function 135.Fn read_pnp_parms 136can be used to check that the logical devices are enabled. 137.Pp 138The attach routine should do all the necessary initialization, enable 139the PnP card to ISA accesses, fetch the configuration, and call the ISA 140driver for the device. 141.Pp 142The following routines and data structures can be used: 143.Bl -tag -width "xxxxxxxxxx" 144.It Dv struct pnp_cinfo 145This data structure (defined in /sys/i386/isa/pnp.h) contains all 146informations related to a PnP logical device. 147.It Fn read_pnp_parms "struct pnp_cinfo *d" "int ldn" 148This function returns the configuration of the requested 149logical device. 150It is not possible to specify a CSN since this function 151is only meant to be used during probe and attach routines 152.It Fn write_pnp_parms "struct pnp_cinfo *d" "int ldn" 153This function sets the parameters of the requested logical device. 154At 155the same time, it updates the entry in the kernel override table. 156Device drivers in general should 157.Em not 158modify the configuration of a device, since either the BIOS or the user 159(through userconfig) should know better what to do. 160In particular, 161device driver 162.Em should not enable 163a logical device which has 164been found disabled, 165since this would defeat the override mechanism in userconfig. 166Device 167drivers may disable a logical device, or a port range, etc, but should 168do so only that particular device or parameter is known to cause 169troubles. 170.It Fn enable_pnp_card void 171This function 172.Em must 173be used in the attach routine 174.Em only , 175before accessing the card's ISA ports/memory address ranges. 176.El 177.Pp 178.Sh SEE ALSO 179.Xr kget 8 180.Sh BUGS 181There is no support for visual configuration of PnP devices. 182It would be nice to have commands in userconfig to fetch the 183configuration of PnP devices. 184.Sh AUTHORS 185.An -nosplit 186PnP support was written by 187.An Luigi Rizzo , 188based on initial work done by 189.An Sujal Patel . 190.Sh HISTORY 191The 192.Nm 193driver first appeared in 194.Fx 2.2.5 . 195