  FAQ for isapnptools
  $Author: fox $
  $Date: 2001/04/11 21:46:28 $

  Answers to Frequently Asked Questions about isapnptools. $Revision:
  0.17 $
  ______________________________________________________________________

  Table of Contents



  1. General
     1.1 Where can I get the latest FAQ ?
     1.2 Support contacts
     1.3 What do isapnptools do ?
     1.4 How do I use isapnptools to configure my ISA PnP cards ?
     1.5 Who wrote/maintains isapnptools ?
     1.6 What is the latest version, and where can I get it from ?
     1.7 What version do I have ?
     1.8 What about security ?
     1.9 Can isapnptools be used to configure PCI hardware.
     1.10 Is there a version of isapnptools for PCI ?
     1.11 NT,WIN95,...  works ok now, will running isapnp screw it up ?
     1.12 Isn't there a better way to configure PnP cards ?
     1.13 How do I find out if my card is supported ?
     1.14 Where can I find out more ?
     1.15 Is there a mailing list for isapnptools ?
     1.16 My card works, but it's not in the Hardware-HOWTO (appendix C).

  2. General - Fundamentals
     2.1 What is a driver (module) ?
     2.2 What is a logical device ?

  3. General - Compilation/installation
     3.1 What configuration options are there when compiling ?
     3.2 I get lots of link errors
     3.3 Why does make give a "segmentation violation" ?
     3.4 I've got the binary distribution and the binaries won't run.
        3.4.1 Linux
        3.4.2 DOS
     3.5 I get warnings about implicit declaration of snprintf when compiling.
     3.6 I get './libisapnp.a: could not read symbols: ... add one' when cross compiling.
     3.7 Problems compiling for 2.1.x kernels
     3.8 I've upgraded my library/C-compiler and now have problems compiling the programs.
     3.9 Problems compiling for 2.2.11 kernels
     3.10 Can isapnptools be used with operating systems other than Linux.
     3.11 What do I do if I think I've found a bug or got some other problem ?
     3.12 How do I make a statically linked binary ?
     3.13 How can I make a non-native binary ?

  4. General - Running
     4.1 Which kernel do I need ?
     4.2 I get "Permission denied" when trying to run the programs.
     4.3 The program crashes with a "Segmentation fault"
     4.4 Where can I get example configuration files ?
     4.5 How can I find out how the card is configured ?
     4.6 Isapnp fails with error "Error occurred executing request 'ISOLATE' on or around line 13 --- further action aborted"
     4.7 What is a good readport address to use ?
     4.8 Pnpdump doesn't find all the PnP boards in the system.
     4.9 Pnpdump doesn't find a particular board in the system.
     4.10 Pnpdump messes up with more than one PnP board.
     4.11 Pnpdump cannot see the boards after using the -r option.
     4.12 Pnpdump reports "No boards found"
     4.13 Pnpdump reports "Ident Byte x, (..) differs from resource data (..)"
     4.14 Pnpdump reports "Unknown tag .., Resource data dump aborted"
     4.15 What does "Don't know what to do with ... on or around line x" mean ?
     4.16 What does "Error occurred executing request 'LD 2' on or around line..." mean ?
     4.17 What does "End tag checksum 0xb8 (BAD)" mean (in the pnpdump output) ?
     4.18 What does "IO range check attempted while device activated" mean (from isapnp) ?
     4.19 What does "IO range check failed for n bytes of IO at addr" mean (from isapnp) ?
     4.20 I think I've configured the board correctly, but the driver still can't find it.
     4.21 What does "/proc/bus/pci/devices not found, so PCI resource conflict not checked" mean ?
     4.22 What causes lots of errors running the script generated by pnpdump -s ?
     4.23 Do I have to reboot after running isapnp or pnpdump ?

  5. General - Kernel/Driver issues
     5.1 Do I need to configure CONFIG_PNP in the kernel ?
     5.2 I've configured my ... using isapnptools, but the kernel doesn't recognise it.
     5.3 I get the error message "... module support already loaded" when trying to load the ... module.
     5.4 I'm having trouble getting interrupts to work.
     5.5 I've configured the card, but /proc/interrupts still shows the interrupt as unused.
     5.6 The driver for my card cannot be built as a module.
     5.7 As soon as I run isapnp, my machine locks up.
     5.8 How can I stop isapnp and pnpdump using certain addresses for the READPORT.

  6. Upgrading
     6.1 I've upgraded isapnptools from my favourite distribution and it has wiped out my isapnp.conf file.
     6.2 What should I do to upgrade isapnptools.
     6.3 I've upgraded isapnptools, and now isapnp gives errors.
     6.4 I've upgraded my motherboard, and now isapnp can't find my boards.
     6.5 I've upgraded my kernel to 2.4.x, now isapnp can't initialise my Sondblaster AWE.

  7. Resources
     7.1 Determining resource usage (linux).
     7.2 I've configured the card but the /proc entries haven't changed.
     7.3 I've got a ..., which runs fine under Win95, how can I find out the port settings ?
     7.4 Examining Win95 resource settings.
     7.5 The windows CTPNP.CFG file.
     7.6 How can I prevent pnpdump allocating certain resources with the -c flag.
     7.7 Common problems
     7.8 What does isapnp mean by "Fatal - resource conflict allocating DMA1".
     7.9 Do I have to configure all the devices.
     7.10 How can I reconfigure a device.

  8. Advanced usage.
     8.1 Common configurations on multiple machines, Version 1.11 and earlier.
     8.2 Common configurations on multiple machines, Version 1.12 and later.
     8.3 Sending a RESET CSN command.
     8.4 Dumping the boards configuration registers.
     8.5 Displaying a list of isapnp boards in the system.

  9. Soundcards.
     9.1 I've got an AWE32/AWE64, but Linux doesn't recognise it.
        9.1.1 The output from pnpdump (before configuration).
        9.1.2 The editted configuration file for isapnp.
        9.1.3 An extract of the bootup script to configure sound.
     9.2 Problems with the Aztech Sound Galaxy 16 III-3D PnP sound card.
     9.3 CD sound doesn't work (one channel or no channels).
     9.4 What to do about "sb: Interrupt test on IRQ10 failed - device disabled."
     9.5 Soundblaster site.
     9.6 Sound works if I boot straight into Linux, but not if booting from Win98.

  10. Modems.
     10.1 See also.
     10.2 I've got a WinModem, and I've followed all the instructions, but it still doesn't work.
     10.3 I've got a PCI modem - what about that ?
     10.4 I've got a modem that works in DOS and Windows, but not Linux.
     10.5 I've configured the device, but it is really SLOW.
     10.6 I've configured the device, but it doesn't work.
     10.7 I've configured the device, it seems to send ok, but not receive.
     10.8 What's this about not using /dev/cua1 ?
     10.9 How can I check the modem is working ?
     10.10 Thunderlink modems (PCT3880).
     10.11 USR Robotics Sportster.
     10.12 General help on setting up internet dial up link.

  11. Network cards.
     11.1 The card supports non PnP configuration.

  12. IDE ports.
  13. PCMCIA cards.
  14. Disclaimers etc.

  ______________________________________________________________________

  11..  GGeenneerraall

  11..11..  WWhheerree ccaann II ggeett tthhee llaatteesstt FFAAQQ ??

  The latest FAQ is available from the isapnptools home websitein
  various forms: isapnpfaq as a text file
  <http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.txt> (this is
  the form it is included as in the distribution), iaspnpfaq as a set of
  html files
  <http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.html.tar.gz>,
  or the iaspnpfaq as sgml source
  <http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.sgml>.


  The text version is designed to be piped through less to give
  highlighting etc. If you want to strip out the control characters,
  pipe it through sed thus:



       cat isapnpfaq.txt | sed 's/^H.//g' > isapnpfaq.clean.txt



  Where ^H above is control-H. (You may need to prefix it with ^V when
  entering it on the command line).


  To see if the one on the website is newer, compare the revision with
  the revision of this document.


  You may also find the Plug-and-Play-HOWTO
  <http://www.linuxdoc.org/HOWTO/Plug-and-Play-HOWTO.html> useful.


  11..22..  SSuuppppoorrtt ccoonnttaaccttss

  See ``Disclaimers''.


  11..33..  WWhhaatt ddoo iissaappnnppttoooollss ddoo ??

  Isapnptools allow you to configure the ISA PnP cards complying with
  the Plug and Play ISA Specification Version 1.0a, which may be
  obtained from ftp://ftp.microsoft.com/developr/drg/Plug-and-
  Play/Pnpspecs/ <ftp://ftp.microsoft.com/developr/drg/Plug-and-
  Play/Pnpspecs/>.

  These boards use registers instead of jumpers to set the board
  address, interrupt assignments etc (resource allocations). In
  addition, the board contains a description of the resources that need
  to be allocated, with limits on the settings allowable.

  In other words, isapnptools allow you to examine and change 'virtual
  jumpers' on the board. Note that you will need to know what other
  hardware is in your PC and what their 'jumper' settings are, including
  any devices built into the motherboard. The BIOS setup screens will
  help with this.

  The BIOS (or any other PnP configuration program such as Win95 or
  isapnptools) uses a special protocol described in the specification to
  discover all the PnP boards, and allocate the resources so that there
  are no conflicts.

  Because the BIOS rarely does the job properly, it is better to get it
  to do as little as possible, and use isapnptools to configure the
  resource settings. This is not always possible with newer BIOSes, so
  see also ``Pnpdump reports "No boards found"''.


  11..44..  HHooww ddoo II uussee iissaappnnppttoooollss ttoo ccoonnffiigguurree mmyy IISSAA PPnnPP ccaarrddss ??

  See the instructions in the INSTALL <INSTALL> file for the overall
  process. See the various README files for examples and specific
  details. See the FAQ too, particularly for sound cards.


  The basic idea is you run pnpdump <pnpdump.8.html> to scan your PnP
  boards and produce a skeleton configuration file. You then uncomment
  lines as required to setup the boards.


  Uncommenting lines has the same function as moving jumpers on a non-
  PnP card. Generally, for each logical device you will want to
  uncomment one each of the resources, and maybe change the value for
  the resource within the range of the comments immediately above, such
  that when you've finished there are no conflicts.


  You then run isapnp <isapnp.8.html> with the configuration file on
  each boot, and it will configure the boards like you asked. This is
  done by editing the boot up scripts to add the appropriate command.


  You also need to arrange to load the appropriate kernel driver
  modules, after configuring the boards, to allow programs to access the
  boards. In some cases the driver may already be in the kernel and you
  can just run a program to tell it about the new hardware. Again, this
  is done by adding the appropriate commands to your system boot up
  scripts.


  If you don't know how to recompile the kernel to make drivers modules
  rather than built-in etc, refer to the Kernel-HOWTO
  <http://MetaLab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html>.


  In the event of difficulties, see the FAQ first for answers.


  11..55..  WWhhoo wwrroottee//mmaaiinnttaaiinnss iissaappnnppttoooollss ??

  Peter Fox, with some help and suggestions from many others. See the
  README <README>. Contributors with useful suggestions and improvements
  may have their name and email address added to the README, if you
  don't want this to happen, please tell me.


  11..66..  WWhhaatt iiss tthhee llaatteesstt vveerrssiioonn,, aanndd wwhheerree ccaann II ggeett iitt ffrroomm ??

  See the isapnptools home site
  <http://www.roestock.demon.co.uk/isapnptools/index.html>



  11..77..  WWhhaatt vveerrssiioonn ddoo II hhaavvee ??

  For isapnptools release 1.19 and later, simply run pnpdump --version,
  the isapnptools release will be given.


  For earlier versions, you can run


       strings `which pnpdump` | grep '\$Id'



  which should give an output like


       $Id: isapnpfaq.sgml,v 0.17 2001/04/11 21:46:28 fox Exp $
       $Id: isapnpfaq.sgml,v 0.17 2001/04/11 21:46:28 fox Exp $
       $Id: isapnpfaq.sgml,v 0.17 2001/04/11 21:46:28 fox Exp $



  The isapnptools version will be the same as the pnpdump.c,v version
  for versions 1.14 and later, and one greater earlier than that. You
  can compare the version number against the CHANGES file (NEWS file
  since 1.23).


  11..88..  WWhhaatt aabboouutt sseeccuurriittyy ??

  Isapnptools must be run as root, and should not be made setuid root.
  The configuration files used, such as /etc/isapnp.conf and
  /etc/isapnp.gone should be owned by, and writeable only by, root.


  This should minimize any interest in buffer overflow problems, as you
  have to be root in the first place.


  In an attempt to prevent trojans being introduced into the isapnptools
  programs, I maintain md5sums of all the files on my web site, see
  md5.txt <http://www.roestock.demon.co.uk/isapnptools/md5.txt>


  If you suspect the md5 sums have been tampered with, please tell me,
  and I can check against the originals.


  md5sum is part of the GNU textutils package.


  If you are worried about security, I suggest you maintain isapnptools
  my compiling from source. After doing an exhaustive check for trojans,
  you can then simply produce diffs of the new version against the old
  and check that.


  11..99..  CCaann iissaappnnppttoooollss bbee uusseedd ttoo ccoonnffiigguurree PPCCII hhaarrddwwaarree..

  No.



  11..1100..  IIss tthheerree aa vveerrssiioonn ooff iissaappnnppttoooollss ffoorr PPCCII ??

  The nearest equivalent is pciutils. Have a look at freshmeat; see
  http://freshmeat.net/news/1999/01/28/917541046.html for instance.


  11..1111..  NNTT,,WWIINN9955,,......  wwoorrkkss ookk nnooww,, wwiillll rruunnnniinngg iissaappnnpp ssccrreeww iitt uupp ??

  No. isapnp <isapnp.8.html> only configures the cards for Linux. When
  you reboot, the BIOS will restore the card's settings. Note that Win95
  will carry out the function of the BIOS (in terms of locating and
  configuring PnP boards) on PCs without a PnP BIOS.

  Having said that, you must be careful using the REG
  <isapnp.conf.5.html#REG> and POKE <isapnp.conf.5.html#POKE> keywords
  that you don't write to some register that corrupts the board resource
  data. (The resource data is often in EEPROM, and can be written to by
  suitable software to initialise it).  See also ``What does "End tag
  checksum 0xb8 (BAD)" mean (in the pnpdump output) ?''.


  11..1122..  IIssnn''tt tthheerree aa bbeetttteerr wwaayy ttoo ccoonnffiigguurree PPnnPP ccaarrddss ??

  Well, I quite like isapnptools as it is predictable, and doesn't make
  the kernel any bigger (but then, I may be slightly biased).

  However, you may want to check out a configuration manager for linux
  which now supports 2.0.30: CM for linux <http://lucifer.hemmet.s-
  hem.chalmers.se/~dwh>.


  You also might want to look at Tom Lees' kernel PnP suite at
  <http://www-jcr.lmh.ox.ac.uk/~pnp/>, the files are in
  <ftp.lmh.ox.ac.uk:/pub/linux/pnp/>.


  Work is underway to integrate PnP support into the kernel. See
  http://www.cs.utwente.nl/~vanrein/vha/
  <http://www.cs.utwente.nl/~vanrein/vha/>.  As this involves changing
  all the drivers, it may take a while.


  It now looks like linux 2.4.x will support ISA PnP in the kernel if
  you want to use it. Even now (2.2.14), some drivers do their own PnP
  support, particularly the ALSA sound drivers.


  A /proc based interface has been developed for v2.2 kernels, see
  isapnp-2.2-V0.1.tgz
  <ftp://ftp.quicknet.net/Developer/Linux/Drivers/isapnp/>.


  11..1133..  HHooww ddoo II ffiinndd oouutt iiff mmyy ccaarrdd iiss ssuuppppoorrtteedd ??

  Note that the following are ideas. Linux is a fast moving world, and
  due to the age of this document, likely to be out of date. New
  hardware is gaining support all the time.


  See the Hardware-HOWTO.


  Check your linux distribution's hardware compatibility list.  For
  example, Redhat 5.2's is at Redhat 5.2 support
  <http://www.redhat.com/support/docs/rhl/intel/rh52-hardware-
  intel-13.html>.
  Refer to the card vendor and manufacturer for Linux support
  information. If they won't support linux, tell your friends, and tell
  them you're telling your friends. Assuming you specified that the card
  was for use with Linux, you should be able to change it without too
  much trouble (having been sold a product unfit for purpose etc).


  See also ``Where can I find out more ?''


  See also the device specific sections of this FAQ below.


  11..1144..  WWhheerree ccaann II ffiinndd oouutt mmoorree ??

  A good place to find out more about PC hardware in general is the pc-
  hardware-faq, regularly posted to the newsgroups:
  comp.sys.ibm.pc.hardware.video, comp.sys.ibm.pc.hardware.comm,
  comp.sys.ibm.pc.hardware.storage, comp.sys.ibm.pc.hardware.cd-rom,
  comp.sys.ibm.pc.hardware.systems, comp.sys.ibm.pc.hardware.networking,
  comp.sys.ibm.pc.hardware.chips, comp.sys.ibm.pc.hardware.misc,
  comp.answers, news.answers.


  A good place to find out about Linux configuration etc are the HOWTOs
  and mini-HOWTOS. These can be found on the MetaLab HOWTO website
  <http://MetaLab.unc.edu/LDP/HOWTO/> or from the TSX-11 HOWTO ftpsite
  <ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO/> or try http://www.linux-
  howto.com/ <http://www.linux-howto.com/>.

  These are also normally supplied with standard Linux distributions.


  A more practical guide to using these tools (and fixing other
  configuration problems) can be found on the SuSe Linux support
  database. See /usr/doc/support-db/sdb_e/rb_isapnp.html
  <file:/usr/doc/support-db/sdb_e/rb_isapnp.html> if you've installed
  their database, or http://www.suse.de/ <http://www.suse.de/>.


  See if you can find any information/statements on the vendor websites.


  For example the soundblaster linux website
  <http://developer.soundblaster.com/linux/>.


  For PnP DOS utilities etc, see the phoenix utilites website
  <http://www.phoenix.com/products/util.html>. Craig Hart's website
  <http://members.hyperlink.net.au/~chart/> also contains useful pnp
  stuff, including a list of pnp ids.


  11..1155..  IIss tthheerree aa mmaaiilliinngg lliisstt ffoorr iissaappnnppttoooollss ??

  There used to be a mailing list for all pnp issues, including
  isapnptools, at pnp-list@redhat.com, but it shut down on 3-Nov-1999.
  So the answer is not that I am aware of.


  If you would like to receive release announcements for isapnptools by
  email (releases are normally announced to comp.os.linux.announce
  anyway), then send an email to isapnp-announce@roestock.demon.co.uk,
  wwiitthh tthhee ssuubbjjeecctt ""ssuubbssccrriibbee iissaappnnpp--aannnnoouunnccee"", giving the details of
  your email address.

  11..1166..  MMyy ccaarrdd wwoorrkkss,, bbuutt iitt''ss nnoott iinn tthhee HHaarrddwwaarree--HHOOWWTTOO ((aappppeennddiixx CC))..

  Tell the Hardware-HOWTO <http://MetaLab.unc.edu/LDP/HOWTO/Hardware-
  HOWTO.html> maintainer !



  22..  GGeenneerraall -- FFuunnddaammeennttaallss

  22..11..  WWhhaatt iiss aa ddrriivveerr ((mmoodduullee)) ??

  If you don't know what this is, I suggest you start by reading the
  Kernel-HOWTO available from the MetaLab website Kernel-HOWTO
  <http://MetaLab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html> or from the
  TSX-11 ftpsite Kernel-HOWTO
  <ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO/Kernel-HOWTO>, or from
  their respective mirrors.  See also www.linux-howto.com
  <http://www.linux-howto.com/>.


  22..22..  WWhhaatt iiss aa llooggiiccaall ddeevviiccee ??

  The functionality of a card is split into many different logical
  devices for convenience. The idea is that each logical device is
  independent and has it's own driver.


  This way, the user can decide to use as much or as little of the card
  functionality as required, and also allows common drivers for many
  different boards (the drivers being written for each logical device
  function).


  So for example a soundcard will typically have at least four different
  logical devices:

  1. The basic soundcard

  2. Soundcard extensions such as wave table

  3. A game port

  4. A CD-rom port.


  The logical devices are numbered starting from 0, incrementing by 1.
  The first entry in the resource data applies to logical device 0, the
  next to logical device 1, and so on.


  Each logical device has its own set of resources ( IO
  <isapnp.conf.5.html#IO> addresses, INT
  <isapnp.conf.5.html#INT>errupts, DMA <isapnp.conf.5.html#DMA> channels
  etc) to program, and isapnp <isapnp.8.html> uses the LD
  <isapnp.conf.5.html#LD> command to select the logical device to be
  configured.



  33..  GGeenneerraall -- CCoommppiillaattiioonn//iinnssttaallllaattiioonn

  33..11..  WWhhaatt ccoonnffiigguurraattiioonn ooppttiioonnss aarree tthheerree wwhheenn ccoommppiilliinngg ??

  Use the --help option to configure to get the latest list.


  33..22..  II ggeett lloottss ooff lliinnkk eerrrroorrss

  Linking gives loads of errors such as


       pnpdump.o: In function `dumpdata':
       pnpdump.o(.text+0x11b0): undefined reference to `__outbc'
       pnpdump.o(.text+0x11c4): undefined reference to `__outb'
       pnpdump.o(.text+0x11db): undefined reference to `__outbc'
       pnpdump.o(.text+0x11ef): undefined reference to `__outb'
       pnpdump.o(.text+0x1374): undefined reference to `__outbc'
       pnpdump.o(.text+0x1388): undefined reference to `__outb'



  Chances are the -O2 compiler option is missing.


  33..33..  WWhhyy ddooeess mmaakkee ggiivvee aa ""sseeggmmeennttaattiioonn vviioollaattiioonn"" ??

  Your make program is not recent enough. I've seen make 3.74 do this.


  Type


       make -v



  to find out what version you have. Make 3.76.1 seems ok.


  33..44..  II''vvee ggoott tthhee bbiinnaarryy ddiissttrriibbuuttiioonn aanndd tthhee bbiinnaarriieess wwoonn''tt rruunn..

  33..44..11..  LLiinnuuxx

  If you get messages such as:



       bash: ./sbin/pnpdump: No such file or directory



  or



       bash: ./isapnp: No such file or directory.



  when attempting to run the precompiled binaries, then chances are you
  haven't got the required C libraries.


  To check this, change to the sbin directory and type



  ldd pnpdump
  ldd isapnp



  You should get something like



               libc.so.5 => /lib/libc.so.5



  for each one. If you get "not found" then you will have to recompile.
  Note that the precompiled binaries in my binary distributions are
  compiled for libc5. If you want binaries for glibc systems, Redhat 5.2
  on, Suse 6.0 on etc, you'll have to go elsewhere (probably to your
  distribution's web site).


  The best thing to do is to delete the binaries in the distribution and
  try to compile your own anyway.


  33..44..22..  DDOOSS

  If you get a complaint along the lines of cannot find DPMI, then you
  need to get hold of a DPMI host software. See the FAQ on the DJGPP
  site <http://www.delorie.com/djgpp> for details (follow the path
  through Running --- Distributing).  This is most likely to occur on a
  pure DOS machine. Win95 for example includes a DPMI host.


  The free DPMI server (cwsdpmi) is normally part of the djgpp
  distribution. For example, my ISP mirrors it in the
  <ftp://ftp.demon.co.uk/pub/mirrors/coast/vendors/djgpp/v2misc/> and
  <ftp://ftp.demon.co.uk/pub/mirrors/simtelnet/gnu/djgpp/v2misc/>
  directories.


  33..55..  II ggeett wwaarrnniinnggss aabboouutt iimmpplliicciitt ddeeccllaarraattiioonn ooff ssnnpprriinnttff wwhheenn ccoomm--
  ppiilliinngg..

  You need to edit the makefile so that -DNEEDSNPRINTF is included in
  PNPFLAGS.


  In isapnptools-1.23 on, using configure, this #define has been changed
  to HAVE_SNPRINTF and has the opposite sense. The configure script
  should detect the setting automatically when cross compiling.


  33..66..  II ggeett ''..//lliibbiissaappnnpp..aa:: ccoouulldd nnoott rreeaadd ssyymmbboollss:: ...... aadddd oonnee'' wwhheenn
  ccrroossss ccoommppiilliinngg..

  You need to set the GNUTARGET environment variable then rebuild:



       export GNUTARGET=coff-i386
       make clean
       make CC=gcc-dos

  See also ``How can I make a non-native binary ?''.


  33..77..  PPrroobblleemmss ccoommppiilliinngg ffoorr 22..11..xx kkeerrnneellss

  The latest kernels (2.1.7x ish) have problems with the header files.
  If you are playing with these kernels, you really ought to know how to
  fix this yourself. I've been told that adding a -D__KERNEL__ to the
  Makefile fixes it.


  33..88..  II''vvee uuppggrraaddeedd mmyy lliibbrraarryy//CC--ccoommppiilleerr aanndd nnooww hhaavvee pprroobblleemmss ccoomm--
  ppiilliinngg tthhee pprrooggrraammss..

  If you've change from libc5 to glibc, or want to use EGCS, you could
  look at http://huizen.dds.nl/~frodol/glibc/problems.html
  <http://huizen.dds.nl/~frodol/glibc/problems.html> for some help.


  See also the ``The program crashes with a "Segmentation fault"''
  section.


  33..99..  PPrroobblleemmss ccoommppiilliinngg ffoorr 22..22..1111 kkeerrnneellss

  There have been reported some problems getting isapnptools 1.18 to
  compile with kernel 2.2.11. I quote Juergen Rose:



       I still played a little bit with your and with the linux sources. If I
       change in pnpdump.c and isapnp.y the order of

       #  include <linux/sched.h>
       #  include <sys/time.h>

       to

       #  include <sys/time.h>
       #  include <linux/sched.h>

       isapnptools-1.18 compiles, but with warnings. The warnings are due to the
       facts, that:

       - /usr/include/asm/processor.h is included in /usr/include/linux/sched.h
         at line 74 and needs "struct task_struct"
       - "struct task_struct" is defined in /usr/include/linux/sched.h at line
       218

       So I moved the line in /usr/include/linux/sched.h

       #include /usr/include/asm/processor.h

       below the definition of "struct task_struct". And could compile
       isapnptools-1.18 even without warnings.



  I thought this looked like kernel include file failings.


  33..1100..  CCaann iissaappnnppttoooollss bbee uusseedd wwiitthh ooppeerraattiinngg ssyysstteemmss ootthheerr tthhaann
  LLiinnuuxx..


  No, or at least not easily. Issues that require addressing include


  1. Isapnptools needs to be able to get direct IO access privileges.
     (Not a problem with DOS, hence the DOS port). I suspect that this
     will require a device driver of some sort under windows NT.

  2. Some mechanism is needed to start up the device driver after isapnp
     <isapnp.8.html> has run.


  33..1111..  WWhhaatt ddoo II ddoo iiff II tthhiinnkk II''vvee ffoouunndd aa bbuugg oorr ggoott ssoommee ootthheerr
  pprroobblleemm ??

  Check the web site to see if the bug has already been reported.


  Check the FAQ to see if the problem is operator error.


  Check all the READMEs and INSTALL file to see if the answer is there.


  If the program doesn't seem to obey the documentation, please look at
  the source to identify the cause of the discrepancy, and report the
  problem.


  If nothing shows in the above, please report the problem, including
  the following information as appropriate:


  +o  Output of 'cat /proc/cpuinfo'

  +o  Output of 'cat /proc/pci'

  +o  Output of 'cat /proc/interrupts'

  +o  Output of 'cat /proc/ioports'

  +o  Output of 'cat /proc/devices'

  +o  Output of 'cat /etc/isapnp.gone'

  +o  Your configuration file (/etc/isapnp.conf), before and/or after
     editting.

  +o  Output of 'cat /usr/include/kernel/autoconf.h' (or the autoconf.h
     for the kernel you're running).

  +o  Output of 'lsmod' if you use kernel modules

  +o  The command lines used to install the relevant device driver kernel
     modules, or configure the built in device driver (eg setserial).

  +o  Output of 'dmesg'

  +o  Output of 'gcc -v'

  +o  Output of 'ldd prog' where prog is the program giving trouble.

  +o  Inputs and Outputs of the program giving trouble:


       prog args.. > prog.stdout 2> prog.stderr

  +o  The patch that cures the problem !


  Note that if you provide a useful contribution to isapnptools as a
  result of you report, you will automatically get added to the
  announcements mailing list (see ``Is there a mailing list for
  isapnptools ?''), unless you request otherwise. Also your name may get
  added to the README list of credits.


  33..1122..  HHooww ddoo II mmaakkee aa ssttaattiiccaallllyy lliinnkkeedd bbiinnaarryy ??

  A statically linked binary should work on many different linux systems
  with the same processor type. This is because all the standard library
  functions required have been extracted and included in the binary
  executable. The disadvantage is that the binaries are a lot bigger.


  Add the -static flag to LDFLAGS in the makefile. This could be done
  for instance by adding the following line to the Makefile:



       LDFLAGS += -static



  or my setting it when running make:



       make LDFLAGS+="-static"



  33..1133..  HHooww ccaann II mmaakkee aa nnoonn--nnaattiivvee bbiinnaarryy ??

  Isapnptools-1.23 and later use autoconf for configuring the programs
  for building. This makes it very easy to build programs for machines
  other than the one you are building on.


  For example, on my machine I have got a djgpp cross-compiler set up so
  that I can make DOS executables. In this case, I use the following
  commands:



       CC="gcc -b i386-go32-msdos" configure --disable-realtime --disable-proc --disable-pci
       make GNUTARGET=coff-i386



  I also have an old machine which still runs a.out binaries. In that
  case I use:



       CC="gcc -b i486-linuxaout" configure --disable-pci --prefix=/
       make

  44..  GGeenneerraall -- RRuunnnniinngg

  44..11..  WWhhiicchh kkeerrnneell ddoo II nneeeedd ??

  Any kernel should do. The real time stuff may not exist in older
  kernels (1.2.13 and before), but just compile without it.


  If you have new hardware, you may need a later kernel anyway.


  Note that more and more drivers in newer kernels carry out their own
  PnP activity, so some ISA PnP cards may not even require isapnptools
  to configure, though isapnptools can still be useful for diagnosing
  things.


  Version 2.4.x of the kernel will basically have the functionality of
  isapnptools built in.


  44..22..  II ggeett ""PPeerrmmiissssiioonn ddeenniieedd"" wwhheenn ttrryyiinngg ttoo rruunn tthhee pprrooggrraammss..

  You must be root to run isapnp <isapnp.8.html> and pnpdump
  <pnpdump.8.html> because the program requires direct access to the IO
  ports.


  44..33..  TThhee pprrooggrraamm ccrraasshheess wwiitthh aa ""SSeeggmmeennttaattiioonn ffaauulltt""

  If you compiled the program using gcc2.8.0 this is very likely due to
  a bug in the compiler's IO port handling.


  Recompile using gcc2.7.2.


  If you really must use gcc.2.8.x (like egcs) then you can try
  recompiling the KERNEL with the ioport.c from one of the later 2.1.xxx
  kernels, or 2.2.x kernels.


  Another cause would appear to be using a binary from one linux
  distribution on another. In this case (and as I recommend everywhere),
  simply download the latest version and compile it yourself. It really
  isn't that difficult.


  See also ``Making a static binary''.


  44..44..  WWhheerree ccaann II ggeett eexxaammppllee ccoonnffiigguurraattiioonn ffiilleess ??

  The output of pnpdump <pnpdump.8.html> should give you the examples
  you need for your hardware. If you run it with the -c (--config) flag,
  it should even show how to configure your hardware in the output. The
  output of pnpdump is supposed to be used as the input to isapnp
  <isapnp.8.html> after editing.

  See also README.modules <README.modules> and INSTALL <INSTALL>.


  44..55..  HHooww ccaann II ffiinndd oouutt hhooww tthhee ccaarrdd iiss ccoonnffiigguurreedd ??

  Use the -di options with pnpdump <pnpdump.8.html>.

  The output dumps all the configuration registers for each device, you
  will have to interpret the results against the PnP spec, but it's
  mostly obvious.


  If you do this before running isapnp <isapnp.8.html> you can see the
  BIOS/power up defaults.


  Note that unused registers generally return all zeros. Unused DMA
  slots should return 4, though some devices erroneously return 0 (which
  is a valid used DMA channel).


  44..66..  IIssaappnnpp ffaaiillss wwiitthh eerrrroorr ""EErrrroorr ooccccuurrrreedd eexxeeccuuttiinngg rreeqquueesstt ''IISSOO--
  LLAATTEE'' oonn oorr aarroouunndd lliinnee 1133 ------ ffuurrtthheerr aaccttiioonn aabboorrtteedd""

  This means no boards were found.


  If you have just added a new card into an ISA bus slot, it may be
  conflicting with the readport address in your /etc/isapnp.conf file.
  You will need to check the resource assignments in your configuration
  file to make sure they don't clash with the new card.

  Try re-running pnpdump to see if it comes up with a different readport
  address, then use the new readport address in you configuration file.
  If the new card is also PnP, you may also need to copy the
  configuration instructions across too.

  Similarly, if you have changed your motherboard, it may have something
  clashing with your readport address.


  See also ``Pnpdump reports "No boards found"''


  44..77..  WWhhaatt iiss aa ggoooodd rreeaaddppoorrtt aaddddrreessss ttoo uussee ??

  A popular READPORT <isapnp.conf.5.html#READPORT> address seems to be
  0x273 or 0x277.  You shouldn't need to explicitly specify one though
  as pnpdump <pnpdump.8.html> can find one automatically.


  44..88..  PPnnppdduummpp ddooeessnn''tt ffiinndd aallll tthhee PPnnPP bbooaarrddss iinn tthhee ssyysstteemm..

  Are you sure the missing board is configured as PnP ? Many PnP boards
  come with a DOS utility which allows them to be configured as non PnP,
  or has jumpers which can be used instead of PnP.


  See also ``Pnpdump reports "No boards found"''


  44..99..  PPnnppdduummpp ddooeessnn''tt ffiinndd aa ppaarrttiiccuullaarr bbooaarrdd iinn tthhee ssyysstteemm..

  Are you sure the board is ISA PnP ? If the board is PCI, it won't be
  found, neither will it be found if it is not PnP, which could well be
  the case for older boards. Note that for some cards with similar
  names, one could be ISA PnP, and one not.


  See also ``Pnpdump doesn't find all the PnP boards in the system.''



  See also ``Pnpdump reports "No boards found"''


  44..1100..  PPnnppdduummpp mmeesssseess uupp wwiitthh mmoorree tthhaann oonnee PPnnPP bbooaarrdd..

  There was a bug in pnpdump somewhere between isapnptools version 1.9
  and 1.15 which resulted in incorrect handling of multiple boards (the
  logical device count for each board was not reset, so only the first
  board found was correct). I suggest you upgrade to the lastest
  version.


  44..1111..  PPnnppdduummpp ccaannnnoott sseeee tthhee bbooaarrddss aafftteerr uussiinngg tthhee --rr ooppttiioonn..

  Use the -i (--ignorecsum) flag to pnpdump <pnpdump.8.html>. This flag
  was added in version 1.18 of isapnptools.


  See also ``Pnpdump reports "No boards found"''


  44..1122..  PPnnppdduummpp rreeppoorrttss ""NNoo bbooaarrddss ffoouunndd""

  This means that you have no ISA PnP boards in your system. That's easy
  then, you don't need isapnptools...


  If, in fact, you think you should have some ISA PnP boards, there are
  a few possibilities:


  +o  The board is broken --- unlikely.

  +o  There is a conflict in the system resulting in no suitable READPORT
     <isapnp.conf.5.html#READPORT> address being available.

     Although this is unlikely, a faulty PnP device can give a fault
     which causes all READPORT addresses to fail. To see if this is the
     case, use the -i (--ignorecsum) flag to pnpdump <pnpdump.8.html>.
     This flag was added in version 1.18 of isapnptools.

  +o  You specified two arguments to pnpdump <pnpdump.8.html>, and the
     READPORT <isapnp.conf.5.html#READPORT> address didn't match the
     value used by the earlier PnP isolator.


     If you did this, and you used two arguments to prevent pnpdump
     <pnpdump.8.html> from resetting some device's configuration,
     upgrade to Version 1.13 of isapnptools, which will do it's own
     isolation without resetting any device's configuration, even with
     less than two arguments.


     Alternatively, if you are running the DOS version under windows 95,
     see the  <README.DOS> file in the distribution.


     If you don't care if the boards configuration is reset, just run
     pnpdump <pnpdump.8.html> with fewer arguments.


  +o  The board's PnP capability is configurable. This feature is
     provided by some boards to support legacy systems. It allows a
     board to be set to fixed address/interrupt settings, or it can be
     set to PnP mode allowing standard software reconfiguration.

     If the board has been configured to a fixed setting, pnpdump
     <pnpdump.8.html> won't find it. The thing to do is to find the (DOS
     based probably) configuration software and run it to check the
     board settings.


     If the board is this type, there are two courses of action:


     1. Use the configuration software to set the board to a suitable
        set of addresses and interrupts. This will allow the use of
        built-in kernel drivers as the board will be present at power
        up.

     2. Use the configuration software to set the board to PnP mode,
        then use isapnptools to configure the board after the kernel is
        running.


  +o  The board disappears after being configured (by the BIOS). Try the
     --reset option to pnpdump <pnpdump.8.html>.

  +o  You have a new computer, like my recent motherboard upgrade, and
     the BIOS lists the card during bootup, but isapnp <isapnp.8.html>
     can't see it.


     I've got this too, and it appears that some sort of conflict is
     occurring during the isolation sequence for the first (of two)
     boards, causing the checksum to fail for every readport address
     tried. I've added the -i (--ignorecsum) flag to pnpdump
     <pnpdump.8.html> in version 1.18 of isapnptools to allow the
     isolation process to complete in the presence of this fault.


     The fault I've seen looks like there is some sort of bus contention
     going on, with lower priority devices not dropping out like they
     should during the isolation sequence: this results in a checksum
     error on every readport address tried, because the first byte read
     on the isolation sequence looks like the logical OR of each devices
     first byte.


  +o  Another thing to try is to play with the BIOS PnP settings. I've
     had a report that setting the 'PnP aware OS' setting to YES made
     things work (this was for an ASUS TX-97 E motherboard). In my case,
     I've found that I need to set it to NO to make things work. In fact
     it's even worse than that: if I set any interrupt to non PnP,
     except IRQ10 which has my (non PnP) network card on, nothing works
     even then. And when it is working, if I ever try a full reset,
     nothing works from then on until I reboot. (My motherboard chipset
     is ACER LABS ALADDIN IV, reported by cat /proc/pci, with AMI BIOS).

  +o  Try specifying a readport address such as 0x273 manually. It may be
     that there is a PnP device at the auto selected address which is
     causing mysterious problems.

  +o  Version 1.19 and later of isapnptools adds the -D --debug-isolate
     option to pnpdump. This allows you to see the details of the
     isolation process in action. By studying the results, and the ISA
     PnP spec, you may be able to figure out what is going wrong. The
     code for this is in res-access.c.

  +o  It may be worth checking your hardware by seeing if windows 95/98
     can see it, if you have the option.

  +o  If the card came with DOS drivers etc, it might be worth checking
     they can access the card (running under DOS).  If so, can you run
     the DOS programs in DOSEMU and get them to still work (this will be
     difficult) ?  If so, can you trace the IO accesses to see how the
     DOS program accesses the card (V. difficult) ? If you can do all
     this, send me the patches to fix isapnptools please !

  +o  You could try getting a known good ISA PnP card and trying that in
     the system. This will tell you if there is something wrong with the
     original board.

  See also ``I've got a ..., which runs fine under Win95, how can I find
  out the port settings'' and ``Examining Win95 resource settings''.


  44..1133..  PPnnppdduummpp rreeppoorrttss ""IIddeenntt BByyttee xx,, ((....)) ddiiffffeerrss ffrroomm rreessoouurrccee ddaattaa
  ((....))""

  and goes on .. "Assuming the card is broken".


  What is supposed to happen, is that when reading the resource data,
  the first few bytes should be the same as the serial identifier (see
  section 4.5 of the PnP spec). (In the hardware they come from the same
  eeprom).


  Some cards are broken, and don't reset the eeprom read pointer when
  reading after the sleep state, in this case (detected by the ident
  byte 0 differs from resource data), we assume the ident stuff has been
  skipped and we are into resource data proper.


  44..1144..  PPnnppdduummpp rreeppoorrttss ""UUnnkknnoowwnn ttaagg ....,, RReessoouurrccee ddaattaa dduummpp aabboorrtteedd""

  This often comes after ``Pnpdump reports "Ident Byte x, (..) differs
  from resource data (..)"''.


  This means that an invalid tag was encountered in the board's resource
  data. There is no mechanism for re-synchronising, so the resource data
  dump for that card has been aborted.


  There's not much you can do about this. See also ``What does "End tag
  checksum 0xb8 (BAD)" mean (in the pnpdump output) ?''.



  44..1155..  WWhhaatt ddooeess ""DDoonn''tt kknnooww wwhhaatt ttoo ddoo wwiitthh ...... oonn oorr aarroouunndd lliinnee xx""
  mmeeaann ??

  If the word is a valid one, then it could just be that the braces are
  mismatched in your configuration file. The best solution is to strip
  out all the comments and examine what is left (the problem may then be
  obvious). You can do this easily:



       cat isapnp.conf | grep -v '^#' | sed '/^$/d' | less



  44..1166..  WWhhaatt ddooeess ""EErrrroorr ooccccuurrrreedd eexxeeccuuttiinngg rreeqquueesstt ''LLDD 22'' oonn oorr aarroouunndd
  lliinnee......"" mmeeaann ??

  This means that attempting to read back the logical device number
  failed.  The specification is rather unclear on whether this is
  guaranteed to work, and in any event, it doesn't appear to work with
  some devices.


  There are two solutions:


  1. Get isapnp <isapnp.8.html> version 1.10 or later which supports
     VERIFYLD <isapnp.conf.5.html#VERIFYLD>.

  2. Use direct register access to select the logical device. So instead
     of configuring each logical device as normal:



       (CONFIGURE CTL009c/481377 (LD 0
       ... LD 0 settings
       (ACT Y))
       (LD 1
       ... LD 1 settings
       (ACT Y))
       (LD 2
       ... LD 2 settings
       (ACT Y))
       (LD 3
       ... LD 3 settings
       (ACT Y))
       )



  pretend they are all logical device 0, and then change the logical
  device by directly POKEing <isapnp.conf.5.html#POKE> the logical
  device register (REGister 7).



       (CONFIGURE CTL009c/481377 (LD 0
       ... LD 0 settings
       (ACT Y)
       (REG 7 (POKE 1) (PEEK)) # Set logical device 1, but no check
       ... LD 1 settings
       (ACT Y)
       (REG 7 (POKE 2) (PEEK)) # Set logical device 2, but no check
       ... LD 2 settings
       (ACT Y)
       (REG 7 (POKE 3) (PEEK)) # Set logical device 3, but no check
       ... LD 3 settings
       (ACT Y)
       ))



  44..1177..  WWhhaatt ddooeess ""EEnndd ttaagg cchheecckkssuumm 00xxbb88 ((BBAADD))"" mmeeaann ((iinn tthhee ppnnppdduummpp
  oouuttppuutt)) ??

  It means that the resource data read from the board was corrupt, which
  in turn means that the resource data dump may be wrong. If you know
  what the card resources really are, you can still configure it with
  isapnp.

  The resource data is often stored in EEPROM, and can be written to via
  the appropriate accesses. It can be corrupted by a faulty windows 95
  driver, or driver crash for example.


  See also ``NT,WIN95,...  works ok now, will running isapnp screw it up
  ?''.



  44..1188..  WWhhaatt ddooeess ""IIOO rraannggee cchheecckk aatttteemmpptteedd wwhhiillee ddeevviiccee aaccttiivvaatteedd""
  mmeeaann ((ffrroomm iissaappnnpp)) ??

  This means you have attempted to CHECK <isapnp.conf.5.html#CHECK> the
  device resource allocation for conflicts using the IO range feature,
  but the device has already been activated. Either remove the check, or
  put (ACT N) before the IO allocation.


  Note that activated here means the board has been configured and is
  available for use, it does not mean it is in use. It may or may not
  have a driver installed in the kernel to use it, and there is no easy
  way to find out.


  If you rerun isapnp, this is very likely to occur. You must first
  deactivate any drivers using the board. Then, when you rerun isapnp,
  make sure there is an (ACT N) at the beginning of the device
  configuration, configure and check the settings, then (ACT Y) and the
  end to reactivate it. You can then restart the drivers for the board.


  44..1199..  WWhhaatt ddooeess ""IIOO rraannggee cchheecckk ffaaiilleedd ffoorr nn bbyytteess ooff IIOO aatt aaddddrr""
  mmeeaann ((ffrroomm iissaappnnpp)) ??

  This means you have attempted to CHECK <isapnp.conf.5.html#CHECK> the
  device resource allocation for conflicts using the IO range feature,
  but the check failed. Either: the device doesn't support IO range
  checks (which you can find out from the pnpdump output), in which case
  remove the check; or the device SIZE <isapnp.conf.5.html#SIZE> is too
  large, in which case correct it; or the test has failed due to a
  resource conflict, in which case change the IO BASE
  <isapnp.conf.5.html#BASE> address.


  In versions of isapnp in isapnptools-1.18 and earlier, there was a bug
  which caused this to occur anyway. A patch to fix it was produced in
  June 1999. Later versions should work properly.


  44..2200..  II tthhiinnkk II''vvee ccoonnffiigguurreedd tthhee bbooaarrdd ccoorrrreeccttllyy,, bbuutt tthhee ddrriivveerr
  ssttiillll ccaann''tt ffiinndd iitt..

  The configuration file must end in WAITFORKEY
  <isapnp.conf.5.html#WAITFORKEY>.



  pnpdump <pnpdump.8.html> from isapnptools 1.9 neglected to put this at
  the end of the generated configuration script.


  44..2211..  WWhhaatt ddooeess ""//pprroocc//bbuuss//ppccii//ddeevviicceess nnoott ffoouunndd,, ssoo PPCCII rreessoouurrccee
  ccoonnfflliicctt nnoott cchheecckkeedd"" mmeeaann ??

  This message occurs if running kernels before the later 2.1.xxx
  series.  /proc/bus/pci/devices appears in later kernels to allow the
  PCI device information to be read. If you have disabled the proc
  filesystem, or are running an older kernel, then the isapnptools
  programs cannot check resource allocations against those assigned to
  PCI devices.


  This is unlikely to be a problem, because the resources are likely to
  be shown used in /proc/interrupts and /proc/ioports etc if a driver is
  using them. If this isn't good enough, and you still get a problem
  with resource clashes, just add the PCI resources used to the
  /etc/isapnp.gone file.


  44..2222..  WWhhaatt ccaauusseess lloottss ooff eerrrroorrss rruunnnniinngg tthhee ssccrriipptt ggeenneerraatteedd bbyy
  ppnnppdduummpp --ss ??

  Running a shell script generated by pnpdump -s gives lots of errors
  like:


       ./pnp.sh: dev_ids[0]=CTL0043: command not found
       ./pnp.sh: irq[0]=9: command not found
       ./pnp.sh: irq_flags[0]=0x0a: command not found
       ./pnp.sh: dma[0]=0: command not found
       ./pnp.sh: dma_flags[0]=0x08: command not found
       ./pnp.sh: io_start[0]=0x0240: command not found
       ./pnp.sh: io_len[0]=16: command not found
       ./pnp.sh: io_flags[0]=0x01: command not found
       ./pnp.sh: ${dev_ids[$i]}: bad substitution



  This is due to the shell not understanding array variables. You need a
  newer shell, such as bash 2.0.x.


  44..2233..  DDoo II hhaavvee ttoo rreebboooott aafftteerr rruunnnniinngg iissaappnnpp oorr ppnnppdduummpp ??

  No. You won't normally need to reboot. Only if you do something silly
  like reset the PnP hardware while a driver is trying to use it.

  The thing to do is to do all your experimenting with the programs and
  configuration files first. Only when you have the right settings, load
  the kernel drivers etc. If you want to experiment some more, unload
  the drivers first.


  55..  GGeenneerraall -- KKeerrnneell//DDrriivveerr iissssuueess

  55..11..  DDoo II nneeeedd ttoo ccoonnffiigguurree CCOONNFFIIGG__PPNNPP iinn tthhee kkeerrnneell ??

  This applies to 2.1.xxx and later kernels. They now include a
  configuration option CONFIG_PNP. This is intended to enable the kernel
  to configure some PnP devices, but there is little or no support in
  the kernel (2.1.131).

  If you're using isapnptools, it would probably be better to set this
  value to N, to prevent bad interactions when it does do something.


  55..22..  II''vvee ccoonnffiigguurreedd mmyy ...... uussiinngg iissaappnnppttoooollss,, bbuutt tthhee kkeerrnneell ddooeessnn''tt
  rreeccooggnniissee iitt..

  There are lots of possibilities for this, just remember:


  1. isapnp <isapnp.8.html> must be run before the driver initialises,
     unless a separate program is available to initialise drivers later
     (eg. _s_e_t_s_e_r_i_a_l).  (See the  <README.modules> file provided with the
     distribution).

  2. The settings for the board specified to isapnp <isapnp.8.html> must
     match those of the driver for the board.

  3. You must load a driver for the card. It is not sufficient to have
     an entry in dev/.


  55..33..  II ggeett tthhee eerrrroorr mmeessssaaggee ""...... mmoodduullee ssuuppppoorrtt aallrreeaaddyy llooaaddeedd"" wwhheenn
  ttrryyiinngg ttoo llooaadd tthhee ...... mmoodduullee..

  This means that the driver module has already been loaded or is built
  into the kernel. Try typing "cat proc/devices/" to see what devices
  are already loaded before insmodding the driver.

  This could also be due to not rebooting after rebuilding the kernel
  with module support for the required driver.


  55..44..  II''mm hhaavviinngg ttrroouubbllee ggeettttiinngg iinntteerrrruuppttss ttoo wwoorrkk..

  A bug has been discovered in isapnp for Version 1.11 of isapnptools,
  relating to the setting of interrupt edges. This is unlikely to be a
  problem for most hardware because the hardware doesn't allow anything
  other that +ve edge interrupts, however, as Kevin Bowman has pointed
  out, some hardware, such as that using the Fujitsu MB86701 does allow
  the interrupt line to be programmed. In this case, try upgrading to
  Version 1.13 or later.


  55..55..  II''vvee ccoonnffiigguurreedd tthhee ccaarrdd,, bbuutt //pprroocc//iinntteerrrruuppttss ssttiillll sshhoowwss tthhee
  iinntteerrrruupptt aass uunnuusseedd..

  /proc/interupts still lists the IRQ I am choosing as unused and the
  same for the IO ports. Does this mean the installation has failed ?


  Not necessarily. Until you load a device driver that uses them, the
  resources remain unused. You can use pnpdump -d to check the
  programming if you have a version that supports the --dumpregs option.


  55..66..  TThhee ddrriivveerr ffoorr mmyy ccaarrdd ccaannnnoott bbee bbuuiilltt aass aa mmoodduullee..

  If the driver you want to use can only be built into the kernel, then
  you may want to consider using the DOS version of isapnptools, then
  booting Linux via loadlin. See  <README.DOS> in the distribution for
  details.



  55..77..  AAss ssoooonn aass II rruunn iissaappnnpp,, mmyy mmaacchhiinnee lloocckkss uupp..

  You have SCSI disks on a PnP adapter card - right ? In this case you
  must be doing a full reset of the ISA PnP hardware, which is making
  the disks disappear. Alternatively, you may have a PnP network card
  and a built-in kernel driver.

  Make sure your configuration file doesn't contain (ISOLATE
  <isapnp.conf.5.html#ISOLATE> PRESERVE).

  For the network card case, you can still do a full ISA PnP reset if
  you remove the network card driver from the kernel and use a module
  instead (and load it after running isapnp).


  55..88..  HHooww ccaann II ssttoopp iissaappnnpp  aanndd ppnnppdduummpp  uussiinngg cceerrttaaiinn aaddddrreesssseess ffoorr
  tthhee RREEAADDPPOORRTT ..

  Get isapnptools 1.16 or later, and put the port addresses you want to
  avoid in the /etc/isapnp.gone file. This assumes you want to try lots
  of addresses, but skip certain ones. If you just want to use a
  specific address, specify the address as the last argument.



  66..  UUppggrraaddiinngg

  66..11..  II''vvee uuppggrraaddeedd iissaappnnppttoooollss ffrroomm mmyy ffaavvoouurriittee ddiissttrriibbuuttiioonn aanndd iitt
  hhaass wwiippeedd oouutt mmyy iissaappnnpp..ccoonnff  ffiillee..

  This has been reported as a side effect of upgrading Slackware 3.4 to
  3.5. I'm sorry, but it must be a bug in the distribution, as upgrading
  from the isapnptools source will not do this. Please notify your
  distribution supplier as they should not stomp on user generated files
  during a package update.


  If you get the latest isapnptools, it should be possible to generate a
  good isapnp.conf file without editting, though you may need cleverer
  boot up scripts to discover the resource allocations.


  66..22..  WWhhaatt sshhoouulldd II ddoo ttoo uuppggrraaddee iissaappnnppttoooollss..

  If you are updating using a non source version of isapnptools, I
  suggest you make a copy of the /etc/isapnp.conf and /etc/isapnp.gone
  files if present, just in case they get overwritten.


  You may want to regenerate the /etc/isapnp.conf file to take advantage
  of new keywords which may have been introduced. In this case run
  pnpdump -c and capture the output, then edit it in comparison to the
  previous /etc/isapnp.conf file to make the hardware configuration the
  same.


  66..33..  II''vvee uuppggrraaddeedd iissaappnnppttoooollss,, aanndd nnooww iissaappnnpp ggiivveess eerrrroorrss..

  Since version 1.16 of isapnptools, resource checking has been added.
  If your isapnp.conf file contained resource errors, these would have
  been invisible until you upgraded isapnptools. Note that due to bugs
  in the resource checking in versions prior to 1.19, resource conflicts
  may be indicated erroneously.

  Adding the line

  (CONFLICT (IO WARNING)(IRQ WARNING)(DMA WARNING)(MEM WARNING))



  near the beginning of the isapnp.conf file would allow you to restore
  the previous behaviour.


  66..44..  II''vvee uuppggrraaddeedd mmyy mmootthheerrbbooaarrdd,, aanndd nnooww iissaappnnpp ccaann''tt ffiinndd mmyy
  bbooaarrddss..

  This could be due to you specifying a READPORT address which is no
  longer free.


  See also ``Pnpdump reports "No boards found"''


  66..55..  II''vvee uuppggrraaddeedd mmyy kkeerrnneell ttoo 22..44..xx,, nnooww iissaappnnpp ccaann''tt iinniittiiaalliissee mmyy
  SSoonnddbbllaasstteerr AAWWEE..

  This has been reported with isapnp v1.18. It appears the default
  readport of 0x203 clashes somehow with the 2.4.1 kernel, even though
  it has been compiled without kernel PnP support. The solution was to
  change the readport address to 0x273 (which has been the default since
  version 1.19).


  77..  RReessoouurrcceess

  It is very important that the resource settings you specify in the
  isapnp.conf file avoid conflict with any other devices, Plug and Play
  or otherwise. If you fail to do this, the system may fail to work
  properly, crash, or lock up.


  77..11..  DDeetteerrmmiinniinngg rreessoouurrccee uussaaggee ((lliinnuuxx))..

  The easiest way to avoid conflict is to make a list of all the devices
  in your system and the resources they use.


  To help in this task, try booting the system with no PnP devices
  configured, then examine the resources the kernel is using via the
  proc filesystem (which must be mounted, obviously).


  You can also follow these instructions after configuring the PnP
  hardware and loading the appropriate driver modules to check that the
  drivers have been configured properly.


  To check the proc file system is mounted, type mount at the shell
  prompt, and somewhere in the response should be a line similar to the
  one in the example below:



       $ mount
       ...
       /proc on /proc type proc (rw)
       ...
       $


  From now on, I shall assume you have the proc filesystem is mounted on
  proc/. In addition, if you use driver modules you should ensure that
  they are all loaded so that they grab the resources they require. You
  may want to print the results obtained below:


  To see what IIOO aaddddrreesssseess are used, type "catproc/ioports/". This will
  provide a list of IO ports and the drivers that use them.


  To see what iinntteerrrruuppttss are used, type "catproc/interrupts/". This must
  be done with all your devices in use, (for example, mount a floppy
  disk so that the floppy disk interrupt is in use, and open all the
  serial ports, for example using the command "(cat < dev/ttyS1) &/").


  To see what DDMMAA cchhaannnneellss are used, type "catproc/dma/".


  Note also that some device drivers do not allocate resources unless a
  process has ooppeenneedd tthhee ddeevviiccee. This is normally the case for the
  floppy driver and serial drivers for example. This means that the
  above commands will probably not locate all the resources used by all
  the hardware, so you may still have to change some resource
  allocations to get things to work.


  Another useful command to try is



       dmesg | grep -i irq



  which will trawl through the kernel bootup messages for lines
  containing irq.  This finds resources used by kernel drivers.


  These commands will give a good idea of which resources are in use,
  but they may miss something if the device doesn't have a driver for
  example, or the BIOS has allocated the resources for some other
  purpose. So it is a good idea to check the BIOS settings when
  rebooting - particularly look for interrupt lines allocated to PCI
  devices, you may want to deallocate some of these if your PnP card
  needs a interrupt.


  Another possibility is to use the --dumpregs command to pnpdump
  <pnpdump.8.html> to see what the BIOS has allocated.


  For further information on standard motherboard resource settings and
  interrupt assignments, see the pc-hardware-faq (posted regularly to
  the comp.sys.ibm.pc.hardware.* news groups).


  77..22..  II''vvee ccoonnffiigguurreedd tthhee ccaarrdd bbuutt tthhee //pprroocc eennttrriieess hhaavveenn''tt cchhaannggeedd..

  The /proc filesystem only reports resources actually in use by a
  driver.


  So for example, if you configure a modem, nothing will change. If you
  then run setserial, to tell the kernel driver about the new port, you
  will see the IO ports in use in /proc/ioports, but there will still be
  no change in /proc/interrupts. It's only after you OPEN the serial
  port for the modem that the modem IRQ will be registered as in use.


  Similarly, if you configure a device which uses a kernel module
  driver, nothing will change until you load the driver module, and even
  then, not all the resources the device uses may be shown as used. Some
  resources (particularly IRQ and DMA channels) will only be shown in
  use after a program opens the device and starts using it.


  77..33..  II''vvee ggoott aa ......,, wwhhiicchh rruunnss ffiinnee uunnddeerr WWiinn9955,, hhooww ccaann II ffiinndd oouutt
  tthhee ppoorrtt sseettttiinnggss ??

  Using the PEEK <isapnp.conf.5.html#PEEK> command in an isapnp
  <isapnp.8.html> script allows the existing configuration register
  settings to be examined. Assuming that the settings don't change
  between booting Win95 and booting Linux, this script can be used to
  find the settings.


  IIff yyoouu bboooott ssttrraaiigghhtt iinnttoo LLiinnuuxx,, ssoommee ddeevviicceess mmaayy nnoott bbee ccoonnffiigguurreedd.


  To find out the card settings, and then to generate a script to
  reproduce them, follow these instructions:


  1. To find out what configuration registers the card has, you must
     first run pnpdump <pnpdump.8.html> with the two optional arguments.
     With pnpdump <pnpdump.8.html> from release 1.12 or later you don't
     need the additional two arguments, though a single argument may be
     useful to set the READPORT <isapnp.conf.5.html#READPORT> address.
     See  <README.DOS> for instructions on how to obtain the READPORT
     address that Win95 uses.

  2. Then examine the output to identify the number of logical devices,
     and the resources used by each one. For this it is best to pipe the
     pnpdump <pnpdump.8.html> output through grep to remove most of the
     comments thus:



       pnpdump 2 0x3bb | grep -v '# [ A-Z]' | grep -v '^#$' | grep -v '^$' > pnpdump.res



  On my system I have two cards, and pnpdump.res looks like this:



  #
  # (DEBUG)
  (READPORT 0x03bb)
  (CSN 2)
  (IDENTIFY *)
  (CONFIGURE EDI0119/236861364 (LD 0
  # (IO 0 (BASE 0x0240))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (MEM 0 (BASE 0x0c0000) (MODE bu) (UPPER 0x0c4000))
  # (MEM 0 (BASE 0x0c0000) (MODE br) (UPPER 0x004000))
  # (ACT Y)
  ))
  (CONFIGURE DFX0000/1493 (LD 0
  # (IO 0 (BASE 0x02f8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x02f8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x02f8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x03e8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x03e8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x02e8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x02e8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x03f8))
  # (INT 0 (IRQ 4 (MODE +E)))
  # (IO 0 (BASE 0x03f8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (IO 0 (BASE 0x03f8))
  # (INT 0 (IRQ 3 (MODE +E)))
  # (ACT Y)
  ))
  (CONFIGURE DFX0000/1493 (LD 1
  # (DMA 0 (CHANNEL 3))
  # (DMA 0 (CHANNEL 1))
  # (DMA 0 (CHANNEL 4))
  # (ACT Y)
  ))



  3. Edit this to remove the duplicates, remove the (ACT
     <isapnp.conf.5.html#ACT>) commands, uncomment each resource and
     change the resource assignment commands to (PEEK
     <isapnp.conf.5.html#PEEK>), thus:



  (READPORT 0x03bb)
  (CSN 2)
  (IDENTIFY *)
  (CONFIGURE EDI0119/236861364 (LD 0
  (IO 0 (PEEK))
  (INT 0 (PEEK))
  (MEM 0 (PEEK))
  ))
  (CONFIGURE DFX0000/1493 (LD 0
  (IO 0 (PEEK))
  (INT 0 (PEEK))
  ))
  (CONFIGURE DFX0000/1493 (LD 1
  (DMA 0 (PEEK))
  ))



  This shows the ethernet card (EDI0119/236861364) has a single logical
  device which uses one each IO <isapnp.conf.5.html#IO>, INT
  <isapnp.conf.5.html#INT>, and MEM <isapnp.conf.5.html#MEM> resource,
  while the PnP modem (DFX0000/1493) has two logical devices:


     a. (LD <isapnp.conf.5.html#LD> 0), which uses an IO
        <isapnp.conf.5.html#IO> resource, and an INT
        <isapnp.conf.5.html#INT> resource,

     b. (LD <isapnp.conf.5.html#LD> 1), which uses a single 8 bit DMA
        <isapnp.conf.5.html#DMA> channel.


  4. Run isapnp <isapnp.8.html> on this script, and the following output
     is obtained:



       Board 1 has Identity 13 0e 1e 37 b4 19 01 89 14:  EDI0119 Serial No 236861364 [checksum 13]
       Board 2 has Identity 6e 00 00 05 d5 00 00 d8 10:  DFX0000 Serial No 1493 [checksum 6e]
       Peek(EDI0119/236861364)[0][0x60](IO  0) is 0x0340, (3,64)
       Peek(EDI0119/236861364)[0][0x70](INT 0) is 0x0A02, (10,2)
       Peek(EDI0119/236861364)[0][0x40](MEM 0) is 0x0000000000000000, (0,0,0,0,0,0,0,0)
       Peek(DFX0000/1493)[0][0x60](IO  0) is 0x03E8, (3,232)
       Peek(DFX0000/1493)[0][0x70](INT 0) is 0x0C02, (12,2)
       Peek(DFX0000/1493)[1][0x74](DMA 0) is 0x04, (4)



  From this you can see that the modem card is configured at IO
  <isapnp.conf.5.html#IO> address 0x3E8, and uses interrupt 12.  The 2
  in the bottom half of the INT <isapnp.conf.5.html#INT> register means
  +ve edge trigger and is unlikely to ever be different. The DMA
  <isapnp.conf.5.html#DMA> channel is set to 4, which means DMA not
  used.


  Also you can see that the ethernet card is configured at IO
  <isapnp.conf.5.html#IO> address 0x340, and uses interrupt 10. The MEM
  <isapnp.conf.5.html#MEM> resource is all 0, which means it is not
  used.


  5. So to program these cards like this, use the script:



       (READPORT 0x3bb)
       (CSN 2)
       (IDENTIFY *)
       (CONFIGURE EDI0119/236861364
               (LD 0
                       (IO 0 (BASE 0x0340))
                       (INT 0 (IRQ 10 (MODE +E)))
                       (ACT Y)))
       (CONFIGURE DFX0000/1493
               (LD 0
                       (IO 0 (BASE 0x3e8))
                       (INT 0 (IRQ 12 (MODE +E)))
                       (ACT Y)))
       (WAITFORKEY)



  77..44..  EExxaammiinniinngg WWiinn9955 rreessoouurrccee sseettttiinnggss..

  Alternatively, for the device of interest:


  1. Right click on My Computer

  2. Click on Properties->Device Manager

  3. Select the device of interest, then click on Properties->Resources.


     Make a note of the resources used.



  77..55..  TThhee wwiinnddoowwss CCTTPPNNPP..CCFFGG ffiillee..

  Some machines may have a CTPNP.CFG file containing PnP resource
  information. Have a look. If you've got one, it may be best to use the
  READPORT address in there.


  77..66..  HHooww ccaann II pprreevveenntt ppnnppdduummpp  aallllooccaattiinngg cceerrttaaiinn rreessoouurrcceess wwiitthh tthhee
  --cc  ffllaagg..

  Get isapnptools 1.16 or later, and put the resources you want to avoid
  in the /etc/isapnp.gone file.


  77..77..  CCoommmmoonn pprroobblleemmss

  The usual source of conflicts in the sound card with something else,
  tyically the network card. This is because network cards like to be at
  addresses 0x300,0x320,0x340,etc, and sound cards use IO addresses all
  over the place, including (in my system) 0x0220-022f, 0x0330-0333,
  0x0388-038b.


  If you have a system with a network card, and then add a sound card
  later, it is quite likely that the network card is using addresses
  0x0320-033f which will be clobbered by the sound card. The solution is
  to move the network card, and in my system I have it at 0x0340-035f.


  Another common problem is to forget to configure one or more of the
  cards resources. This is particularly likely with sound cards which
  require so many. See ``How can I find out how the card is configured
  ?'' to see how you can check these.



  77..88..  WWhhaatt ddooeess iissaappnnpp mmeeaann bbyy ""FFaattaall -- rreessoouurrccee ccoonnfflliicctt aallllooccaattiinngg
  DDMMAA11""..

  This means you are trying to allocate DMA1 to a PnP device, but the
  DMA resource has already been allocated to another device.


  Similar messages can occur for IO ports or interrupts.


  You need to find out what other device is using the resource, in case
  it turns out that the device you are trying to configure has already
  been configured by the BIOS, and a kernel driver has found it and is
  using it.


  To find out what is using it, look in /proc/dma, /proc/ioports,
  /proc/interrupts as appropriate, or /etc/isapnp.gone.


  If it is in use by another (different) device, then you must change
  your resource allocation.


  If is in use by the device you are trying to configure, then you
  probably don't need to configure the device using isapnptools. Simply
  make sure the kernel driver settings match those allocated by the
  BIOS.


  77..99..  DDoo II hhaavvee ttoo ccoonnffiigguurree aallll tthhee ddeevviicceess..

  No. More modern BIOSes seem to configure almost all devices, so you
  don't need to run isapnptools at all. If a device is not configured
  how you want, you can just reconfigure that one. Note that if you do
  reconfigure a device, it must not have a driver running on it.  This
  means the driver must not be built into the kernel, and any driver
  modules for the device must be unloaded.


  77..1100..  HHooww ccaann II rreeccoonnffiigguurree aa ddeevviiccee..

  See also ``Do I have to configure all the devices.''


  Reconfiguring a device is almost the same as configuring one.  Points
  to watch out for are:


  1. A device driver must not be using the device. This means you must
     unload the driver module. If the device driver is built into the
     kernel, and it has detected the hardware, you must not reconfigure
     the device.

  2. If you want to IO range CHECK <isapnp.conf.5.html#CHECK> the
     device, you must remember to deactivate it first. See ``What does
     "IO range check attempted while device activated" mean (from
     isapnp) ?''.


  88..  AAddvvaanncceedd uussaaggee..

  88..11..  CCoommmmoonn ccoonnffiigguurraattiioonnss oonn mmuullttiippllee mmaacchhiinneess,, VVeerrssiioonn 11..1111 aanndd
  eeaarrlliieerr..

  It is not possible to use the same configuration file on multiple
  machines with these earlier versions of isapnptools.


  However, it is possible to concoct something with a few scripts etc.
  The key is to split off each board's configuration into it's own file,
  then use an empty run of isapnp with just an IDENTIFY
  <isapnp.conf.5.html#IDENTIFY> to discover which board configurations
  need to be used. Here is what I said to someone with this problem:


  I suggest you run isapnp twice (or more!):


  1. The first time, do a probe to find out which cards are present, ie,
     remove all the (CONFIGURE <isapnp.conf.5.html#CONFIGURE>...)
     sections. Use the output of the (IDENTIFY
     <isapnp.conf.5.html#IDENTIFY>) command in the isapnp script to
     choose the next script.

  2. Run the script selected by the above. Note that the second isapnp
     scripts don't need to run (ISOLATE <isapnp.conf.5.html#ISOLATE>),
     just do a (CSN <isapnp.conf.5.html#CSN> x)(IDENTIFY
     <isapnp.conf.5.html#IDENTIFY>) instead.

  If you do this, it may be advisable to fix the READPORT
  <isapnp.conf.5.html#READPORT> in all four scripts.


  Using this method, you could have an individual script for each board,
  and if you named them by the compacted ident, you could get a list of
  files to configure thus:



       BOARDS=`isapnp probe.conf | grep '^Board' | cut -c22,23,25,26,28,29,31,32,34,35,37,38,40,41,43,44,46,47`
       for board in $BOARDS
       do
               isapnp $board.conf
       done



  where probe.conf is little more than



       (READPORT 0x3bb) # or whatever
       (ISOLATE)
       (IDENTIFY *)
       (WAITFORKEY)



  Note that if you were to use this method with isapnptools version 1.12
  or later, you could skip the grep and cut by using an appropriate
  IDENTIFYFORMAT <isapnp.conf.5.html#IDENTIFYFORMAT> command.


  And each of the board scripts fit the following skeleton:



       (READPORT 0x3bb) # or whatever
       (CSN 10)         # or whatever
       (IDENTIFY *)
       (CONFIGURE ....)
       (WAITFORKEY)



  88..22..  CCoommmmoonn ccoonnffiigguurraattiioonnss oonn mmuullttiippllee mmaacchhiinneess,, VVeerrssiioonn 11..1122 aanndd
  llaatteerr..

  With version 1.12 and later, CONFIGURE <isapnp.conf.5.html#CONFIGURE>
  blocks for boards not present will be skipped, so you can just have a
  single file containing the configurations for all boards in all
  systems.


  If you have machines with the same or similar setup of PnP cards, then
  this can be further optimised by having a single configuration for
  each type of card, using #1,#2,etc instead of the real serial numbers.
  Any systems with a non-standard setup could be overridden by a later
  CONFIGURE <isapnp.conf.5.html#CONFIGURE> specifying the card's full
  serial number.


  88..33..  SSeennddiinngg aa RREESSEETT CCSSNN ccoommmmaanndd..


       Is there a way to issue a "Reset CSN Command", as described
       in Section 4.3 (p15) of the "Plug and Play ISA Specification
       1.0a" using isapnptools?



  Sure, just poke the register using the REG <isapnp.conf.5.html#REG>
  command: after selecting a device and logical device (it doesn't
  matter which !) do



       (REG 2 (POKE 4))



  See section A.1 on page 51 also.


  This might be a good use for CSN <isapnp.conf.5.html#CSN>, as in



       (CSN 1 (LD 0 (REG 2 (POKE 4))))


  You may have to reconfigure the cards again afterwards if you want to
  fiddle with the PnP registers.


  88..44..  DDuummppiinngg tthhee bbooaarrddss ccoonnffiigguurraattiioonn rreeggiisstteerrss..

  For isapnptools up to 1.15 you can modify the Makefile to uncomment
  the line



       PNPDUMPFLAGS += -DDUMPREGS



  this will cause pnpdump will dump all the standard configuration
  registers for each board.

  For isapnptools 1.16 and later, just give the option --dumpregs to
  pnpdump to get this dump.

  Note that this dump is dumping the physical registers, and will thus
  show the settings that have been put in there by the BIOS, or some
  cards will put a default setting in. Unused registers read back as 0.

  But for example, the missing two IO resources on an AWE32 have been
  reported to show up this way.

  It is also handy to check that isapnp <isapnp.8.html> has done the
  right thing.


  88..55..  DDiissppllaayyiinngg aa lliisstt ooff iissaappnnpp bbooaarrddss iinn tthhee ssyysstteemm..

  The following shell script will display a list of ISA PnP boards in
  your system:



       #!/bin/bash
       cat << _EOT | isapnp -
       #(DEBUG)
       (IGNORECRC)
       (IDENTIFY-FORMAT "\"%v/%s\"\n" )
       (ISOLATE PRESERVE)
       (IDENTIFY *)
       (WAITFORKEY)
       _EOT



  on my system this gives:


       "DFX0000/1493"
       "CMI0001/16777472"



  99..  SSoouunnddccaarrddss..

  These seem to be the cause of most problems. Just remember that for a
  card to work, the card must be accessible to the kernel (that's what
  isapnp <isapnp.8.html> is for) aanndd it must have the correct driver aanndd
  it mustn't conflict with any other devices.


  If you suspect driver problems etc, you may wish to join the sound
  mailing list at linux-sound@vger.rutgers.edu.


  The later 2.1 kernels have a new sound driver, see the documentation
  in the /usr/src/linux/Documentation/sound directory.


  Sound drivers have greatly improved with the v2.2 kernels, so you may
  find it worthwhile investigating these. Look in the kernel sources at
  Documentation/sound/Introduction, and any other documentation in there
  relevant to your card.


  See also the http://www.linux.org.uk/OSS/
  <http://www.linux.org.uk/OSS/> for sound drivers etc.


  For the latest sound drivers, look at http://www.alsa-project.org/
  <http://www.alsa-project.org/>. These drivers can be built to do their
  own PnP, so if all you have is a sound card, you may not even need to
  use isapnptools.


  There is an article on configuring ISA PnP sound cards at
  http://www2.linuxjournal.com/lj-issues/issue64/3269.html
  <http://www2.linuxjournal.com/lj-issues/issue64/3269.html>, in the
  August 1999 on-line issue of the Linux Journal (issue #64).


  See also ``Common problems''.



  99..11..  II''vvee ggoott aann AAWWEE3322//AAWWEE6644,, bbuutt LLiinnuuxx ddooeessnn''tt rreeccooggnniissee iitt..

  [According to Stefan Markgraf, the AWE64 suffers the same problem
  described below, where the two ports at 0xA20 and 0xE20 are not
  mentioned in the resource dump.]


  It turns out tthhiiss iiss tthhee ccaassee ffoorr aallll CCTTLL00002211 ddeevviicceess whether on an
  AWE32, AWE64 or other. You will have to manually add the missing
  ports.


  I've had some great feedback from agriffin@cpcug.org on this: (and a
  couple of corrections from Takashi Iwai <http://bahamut.mm.t.u-
  tokyo.ac.jp/~iwai/>)


  I have been able to get my SoundBlaster AWE 32 pnp configured and with
  drivers from Takashi Iwai, I now get some of the best sounds ever.
  (At least on any of the machines here.)


  I have included both the original output from pnpdump <pnpdump.8.html>
  and the conf that I use to get things working.  NNoottee that the dump
  does not detect the I/O ports at 0xA20 and 0xE20.  The manual that
  came with the card lists these ports and a note in one of the
  newsgroups show that all three of the AWE I/O ports need to be
  configured.



  Before adding the two I/O ports, the isapnp <isapnp.8.html>
  /etc/<pnpdump created file editted to activate the card> does not
  report anything unusual, but when I modprobe -a sound, syslog contains
  two lines:



               AWE32 not found
               AWE32: not detected



  and the output from  cat /dev/sndstst in this case is:



       Sound Driver:3.5.4-960630 (Tue Jan 28 21:37:47 EST 1997 root,
       Linux palis 2.1.23 #1 Tue Jan 28 19:29:03 EST 1997 i586)
       Kernel: Linux palis 2.0.28 #3 Tue Jan 28 21:38:48 EST 1997 i586
       Config options: a80002

       Installed drivers:
       Type 1: OPL-2/OPL-3 FM
       Type 2: Sound Blaster
       Type 7: SB MPU-401

       Card config:
       Sound Blaster at 0x220 irq 5 drq 1,5
       SB MPU-401 at 0x330 irq 5 drq 0
       OPL-2/OPL-3 FM at 0x388 drq 0

       Audio devices:
       0: Sound Blaster 16 (4.13)

       Synth devices:
       0: Yamaha OPL-3

       Midi devices:
       0: Sound Blaster 16

       Timers:
       0: System clock

       Mixers:
       0: Sound Blaster



  Now, when the two I/O ports (0xA20 and 0XE20) are included in the
  isapnp.conf,  syslog has:


               AWE32 Sound Driver v0.3.2 (DRAM 2048K)



  and the output from  /dev/sndstat shows:



       Sound Driver:3.5.4-960630 (Tue Jan 28 21:37:47 EST 1997 root,
       Linux palis 2.1.23 #1 Tue Jan 28 19:29:03 EST 1997 i586)
       Kernel: Linux palis 2.0.28 #3 Tue Jan 28 21:38:48 EST 1997 i586
       Config options: a80002

       Installed drivers:
       Type 1: OPL-2/OPL-3 FM
       Type 2: Sound Blaster
       Type 7: SB MPU-401

       Card config:
       Sound Blaster at 0x220 irq 5 drq 1,5
       SB MPU-401 at 0x330 irq 5 drq 0
       OPL-2/OPL-3 FM at 0x388 drq 0

       Audio devices:
       0: Sound Blaster 16 (4.13)

       Synth devices:
       0: Yamaha OPL-3
       1: AWE32 Driver v0.3.2 (DRAM 2048k)

       Midi devices:
       0: Sound Blaster 16

       Timers:
       0: System clock

       Mixers:
       0: Sound Blaster



  99..11..11..  TThhee oouuttppuutt ffrroomm ppnnppdduummpp ((bbeeffoorree ccoonnffiigguurraattiioonn))..



  # This is free software, see the sources for details.
  # This software has NO WARRANTY, use at your OWN RISK
  #
  # For details of this file format, see isapnp.conf(5)
  #
  # Compiler flags: -DREALTIME -DNEEDSETSCHEDULER
  #
  # Trying port address 0203
  # Board 1 has serial identifier 0d 00 00 d5 88 43 00 8c 0e

  # (DEBUG)
  (READPORT 0x0203)
  (ISOLATE)
  (IDENTIFY *)

  # Card 1: (serial identifier 0d 00 00 d5 88 43 00 8c 0e)
  # CTL0043 Serial No 54664 [checksum 0d]
  # Version 1.0, Vendor version 1.0
  # ANSI string -->Creative SB AWE32 PnP<--
  #
  # Logical device id CTL0031
  #
  # Edit the entries below to uncomment out the configuration required.
  # Note that only the first value of any range is given, this may be changed if required
  # Don't forget to uncomment the activate (ACT Y) when happy

  (CONFIGURE CTL0043/54664 (LD 0
  #     ANSI string -->Audio<--

  # Multiple choice time, choose one only !

  #     Start dependent functions: priority preferred
  #       IRQ 5.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 1.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 1))
  #       Next DMA channel 5.
  #             16 bit DMA only
  #             Logical device is not a bus master
  #             DMA may not execute in count by byte mode
  #             DMA may execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 1 (CHANNEL 5))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0220
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0330
  #             Maximum IO base address 0x0330
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0330))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0388
  #             Maximum IO base address 0x0388
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 4
  # (IO 2 (BASE 0x0388))

  #       Start dependent functions: priority acceptable
  #       IRQ 5, 7 or 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Next DMA channel 5, 6 or 7.
  #             16 bit DMA only
  #             Logical device is not a bus master
  #             DMA may not execute in count by byte mode
  #             DMA may execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 1 (CHANNEL 5))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x0330
  #             IO base alignment 48 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0388
  #             Maximum IO base address 0x0388
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 4
  # (IO 2 (BASE 0x0388))

  #       Start dependent functions: priority acceptable
  #       IRQ 5, 7 or 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Next DMA channel 5, 6 or 7.
  #             16 bit DMA only
  #             Logical device is not a bus master
  #             DMA may not execute in count by byte mode
  #             DMA may execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 1 (CHANNEL 5))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x0330
  #             IO base alignment 48 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))

  #       Start dependent functions: priority functional
  #       IRQ 5, 7 or 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Next DMA channel 5, 6 or 7.
  #             16 bit DMA only
  #             Logical device is not a bus master
  #             DMA may not execute in count by byte mode
  #             DMA may execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 1 (CHANNEL 5))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))

  #       Start dependent functions: priority functional
  #       IRQ 5, 7 or 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x0330
  #             IO base alignment 48 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0388
  #             Maximum IO base address 0x0388
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 4
  # (IO 2 (BASE 0x0388))

  #       Start dependent functions: priority functional
  #       IRQ 5, 7 or 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x0330
  #             IO base alignment 48 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))

  #       Start dependent functions: priority functional
  #       IRQ 5, 7, 10 or 11.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 0, 1 or 3.
  #             8 bit DMA only
  #             Logical device is not a bus master
  #             DMA may execute in count by byte mode
  #             DMA may not execute in count by word mode
  #             DMA channel speed in compatible mode
  # (DMA 0 (CHANNEL 0))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0220
  #             Maximum IO base address 0x0280
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 16
  # (IO 0 (BASE 0x0220))

  #     End dependent functions
  # (ACT Y)
  ))
  #
  # Logical device id CTL2011
  #
  # Edit the entries below to uncomment out the configuration required.
  # Note that only the first value of any range is given, this may be changed if required
  # Don't forget to uncomment the activate (ACT Y) when happy

  (CONFIGURE CTL0043/54664 (LD 1
  #     Compatible device id PNP0600
  #     ANSI string -->IDE<--

  # Multiple choice time, choose one only !

  #     Start dependent functions: priority preferred
  #       IRQ 10.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 10 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0168
  #             Maximum IO base address 0x0168
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0168))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x036e
  #             Maximum IO base address 0x036e
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x036e))

  #       Start dependent functions: priority acceptable
  #       IRQ 11.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 11 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x01e8
  #             Maximum IO base address 0x01e8
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x01e8))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x03ee
  #             Maximum IO base address 0x03ee
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x03ee))

  #       Start dependent functions: priority acceptable
  #       IRQ 10, 11, 12 or 15.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 10 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0100
  #             Maximum IO base address 0x01f8
  #             IO base alignment 8 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0100))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0300
  #             Maximum IO base address 0x03fe
  #             IO base alignment 2 bytes
  #             Number of IO addresses required: 2
  # (IO 1 (BASE 0x0300))

  #       Start dependent functions: priority functional
  #       IRQ 15.
  #             High true, edge sensitive interrupt (by default)
  # (INT 0 (IRQ 15 (MODE +E)))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0170
  #             Maximum IO base address 0x0170
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 8
  # (IO 0 (BASE 0x0170))
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0376
  #             Maximum IO base address 0x0376
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 1
  # (IO 1 (BASE 0x0376))

  #     End dependent functions
  # (ACT Y)
  ))
  #
  # Logical device id CTL0021
  #
  # Edit the entries below to uncomment out the configuration required.
  # Note that only the first value of any range is given, this may be changed if required
  # Don't forget to uncomment the activate (ACT Y) when happy

  (CONFIGURE CTL0043/54664 (LD 2
  #     ANSI string -->WaveTable<--

  # Multiple choice time, choose one only !

  #     Start dependent functions: priority preferred
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0620
  #             Maximum IO base address 0x0620
  #             IO base alignment 1 bytes
  #             Number of IO addresses required: 4
  # (IO 0 (BASE 0x0620))

  #       Start dependent functions: priority acceptable
  #       Logical device decodes 16 bit IO address lines
  #             Minimum IO base address 0x0620
  #             Maximum IO base address 0x0680
  #             IO base alignment 32 bytes
  #             Number of IO addresses required: 4
  # (IO 0 (BASE 0x0620))

  #     End dependent functions
  # (ACT Y)
  ))
  #
  # Logical device id CTL7001
  #
  # Edit the entries below to uncomment out the configuration required.
  # Note that only the first value of any range is given, this may be changed if required
  # Don't forget to uncomment the activate (ACT Y) when happy

  (CONFIGURE CTL0043/54664 (LD 3
  #     Compatible device id PNPb02f
  #     ANSI string -->Game<--
  #     Logical device decodes 16 bit IO address lines
  #         Minimum IO base address 0x0200
  #         Maximum IO base address 0x0200
  #         IO base alignment 1 bytes
  #         Number of IO addresses required: 8
  # (IO 0 (BASE 0x0200))
  # (ACT Y)
  ))
  # End tag... Checksum 0x00 (OK)



  99..11..22..  TThhee eeddiitttteedd ccoonnffiigguurraattiioonn ffiillee ffoorr iissaappnnpp..



  # This is free software, see the sources for details.
  # This software has NO WARRANTY, use at your OWN RISK
  #
  # For details of this file format, see isapnp.conf(5)
  #
  # Compiler flags: -DREALTIME -DNEEDSETSCHEDULER
  #
  # Edited by jag 27 Jan 1997 to add IO Ports A20 and E20
  #
  # Trying port address 0203
  # Board 1 has serial identifier 0d 00 00 d5 88 43 00 8c 0e

  (DEBUG)
  (READPORT 0x0203)
  (ISOLATE)
  (IDENTIFY *)

  # Card 1: (serial identifier 0d 00 00 d5 88 43 00 8c 0e)
  # CTL0043 Serial No 54664 [checksum 0d]
  # Version 1.0, Vendor version 1.0
  # ANSI string -->Creative SB AWE32 PnP<--
  #
  # Logical device id CTL0031
  #

  (CONFIGURE CTL0043/54664 (LD 0
  #     ANSI string -->Audio<--
  <P>
   (INT 0 (IRQ 5 (MODE +E)))
  #       First DMA channel 1.
   (DMA 0 (CHANNEL 1))
  #       Next DMA channel 5.
   (DMA 1 (CHANNEL 5))
   (IO 0 (BASE 0x0220))
   (IO 1 (BASE 0x0330))
   (IO 2 (BASE 0x0388))
  #     End dependent functions
  (ACT Y)
  ))
  #
  # Logical device id CTL0021
  #

  (CONFIGURE CTL0043/54664 (LD 2
  #     ANSI string -->WaveTable<--

  (IO 0 (BASE 0x0620))
  (IO 1 (BASE 0x0A20))
  (IO 2 (BASE 0x0E20))

  #     End dependent functions
  (ACT Y)
  ))
  #
  # Logical device id CTL7001
  #
  (CONFIGURE CTL0043/54664 (LD 3
  #     Compatible device id PNPb02f
  #     ANSI string -->Game<--
  (IO 0 (BASE 0x0200))
  (ACT Y)
  ))
  # End tag... Checksum 0x00 (OK)



  99..11..33..  AAnn eexxttrraacctt ooff tthhee bboooottuupp ssccrriipptt ttoo ccoonnffiigguurree ssoouunndd..



       #######################################################################
       #  Add local action for palis.athena.inc               27 Jan 1997  jag
       #  SoundBlaster AWE 32 pnp initlization
       #  Load sound "fonts". NOTE: the synthgs.sbk from the SB install CDROM
       #  Load sound.o module. This should be loaded before the "fonts".
       #######################################################################

       if [ -f /sbin/isapnp ]; then
               echo "Initializing the SouncBlaster AWE 32 pnp:"
               /sbin/isapnp /etc/isapnp.conf > /dev/null
       else
               echo "No pnp initialization code available.:
               exit 1
       fi
       #
       # According to Takashi IWAI, modprobe must come before sfxload
       #
       /sbin/modprobe -a sound

       if [ -f /usr/local/bin/sfxload ]; then
               echo "Loading Sound Fonts for General Midi:"
               /usr/local/bin/sfxload -Ii /usr/local/lib/awe/synthgs.sbk
       else
               echo "No Sound Font loading available.:
       fi



  99..22..  PPrroobblleemmss wwiitthh tthhee AAzztteecchh SSoouunndd GGaallaaxxyy 1166 IIIIII--33DD PPnnPP ssoouunndd ccaarrdd..

  Stefan Markgraf has reported being unable to get the 16 bit MSS
  compatibility working with this card (Jul 97), and ended up changing
  it for a AWE64.  The 8-bit Sound Blaster pro compatibility, MPU-401
  and OPL-3 functions work fine.


  99..33..  CCDD ssoouunndd ddooeessnn''tt wwoorrkk ((oonnee cchhaannnneell oorr nnoo cchhaannnneellss))..

  There are two orientations for the CD player sound-card signals, try
  reversing the connector on the sound card if the CD player sound
  doesn't work. (From an email from kjcox@students.wisc.edu).


       After much fiddling, I finally got it to work but in the
       strangest manner.  I reversed the cable from the CD-ROM to
       the sound card 180 degrees while the computer was up and
       running.  I had to first remove the white box on the sound
       card into which the cable fits.  I tried it both ways and
       then when I put it back while the computer was running (hey,
       I got desperate) it suddenly decided to work.  It took
       awhile though to get there.



       Anyway, something to add to your FAQ.  Try removing the
       white box and reversing the cord.  You can either turn the
       box around or switch it altogether.



  99..44..  WWhhaatt ttoo ddoo aabboouutt ""ssbb:: IInntteerrrruupptt tteesstt oonn IIRRQQ1100 ffaaiilleedd -- ddeevviiccee
  ddiissaabblleedd..""

  This kernel message means that the sound driver couldn't get an
  interrupt from the sound card on the channel you told it to use. This
  could be due to the soundcard using a different interrupt, or more
  than one device trying to use the same interrupt.


  I get this one too. I managed to get rid of it by changing the
  preallocated ISA interrupts in the BIOS but, unfortunately, when I got
  the sound working, all the other PnP stuff stopped working. In my
  case, the sound is built into the motherboard, and there seems to be
  no way to configure it directly in the BIOS, so it's guesswork to try
  to find the interrupt allocation. If I had Win95, it might be possible
  to find it by looking at the Win95 allocation. This is where an ESCD
  BIOS interface would be useful - any takers ?


  99..55..  SSoouunnddbbllaasstteerr ssiittee..

  See also the soundblaster linux website
  <http://developer.soundblaster.com/linux/>.


  99..66..  SSoouunndd wwoorrkkss iiff II bboooott ssttrraaiigghhtt iinnttoo LLiinnuuxx,, bbuutt nnoott iiff bboooottiinngg
  ffrroomm WWiinn9988..

  If you use (ISOLATE CLEAR) then all ISA PnP hardware gets reset, and
  only those devices you configure will get set up. This is DANGEROUS if
  you have ISA PnP device drivers configured into the kernel (which work
  because the BIOS configured them - such as disk interfaces or network
  cards).


  If you use (ISOLATE PRESERVE), which is the default, then any devices
  you don't configure will probably be unconfigured after a direct boot
  from the BIOS, but they will remain configured by Win98 if you boot
  via Win98.  In this case they may then conflict with the settings you
  have chosen for the devices you configure for linux.


  I suggest you look at the PCI interrupt allocations too, they are PnP
  and can be changed under software control (though normally only the
  BIOS does this).


  What you should perhaps do is run



       pnpdump -di > /tmp/pnpdump.txt



  before you run isapnp during linux boot up. This will allow you to see
  what the hardware configuration is - and by doing this booting
  directly, saving the file, and rebooting via Win98, you can compare
  the results.


  The other alternative is to browse the hardware configuration settings
  in Win98, then change your isapnp.conf and driver settings to match.


  1100..  MMooddeemmss..

  These are the easiest PnP devices to get installed, due to the ability
  to configure devices (using _s_e_t_s_e_r_i_a_l) after the kernel has booted.
  This allows experiments to be made with the settings without having to
  reboot.


  There are a few gotchas though:


  Beware of products using phrases such as "Winmodem" or "Specially
  designed to work with Windows or Windows 95". These may well not work
  as standalone products, and require the driver provided with Windows
  to work. See also the Modem-HOWTO
  <http://www.silug.org/LDP/HOWTO/Modem-HOWTO-4.html>, some other
  Winmodem information <http://www.o2.net/~gromitkc/winmodem.html>, more
  on Winmodems
  <http://searchlinux.com/CATEGORY/HARDWARE/MODEMS/WINMODEMS/> and the
  up and coming Linux winmodem support <http://www.linmodems.org/>, also
  the Linmodem-HOWTO <http://walbran.org/sean/linux/linmodem-howto-
  all.html>.  For a good rant, look at
  <http://linuxmafia.com/~rick/faq/>.


  In a similar way some newer modems may not have the DSP code builtin,
  but rely on a program during boot to download the code into them.
  These will work in Linux if it is booted after running DOS/Windows,
  but they won't work directly after a power up into Linux.


  Watch out for PCI modems. These often don't have UARTs, and so will
  require a special driver to work with Linux. (They cannot be
  configured using isapnptools anyway, the BIOS will have done it).


  If you have a Lucent/Agere PCI chipset winmodem, look at Lucent
  winmodem drivers <http://walbran.org/sean/linux/stodolsk/>, it also
  has links for PC-Tel winmodems.


  1100..11..  SSeeee aallssoo..

  See the file  <README.modules> in the distribution for an example of
  how to get a PnP modem card running.


  See also the Serial-HOWTO available from MetaLab website Serial-HOWTO
  <http://MetaLab.unc.edu/LDP/HOWTO/Serial-HOWTO.html> or from TSX-11
  ftpsite Serial-HOWTO
  <ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO/Serial-HOWTO>, or from
  their respective mirrors.


  1100..22..  II''vvee ggoott aa WWiinnMMooddeemm,, aanndd II''vvee ffoolllloowweedd aallll tthhee iinnssttrruuccttiioonnss,,
  bbuutt iitt ssttiillll ddooeessnn''tt wwoorrkk..

  Unfortunately, a "WinModem" is only half a modem. A significant
  proportion of the modem functionality is in the Windows driver, which
  is not present when trying to use it with Linux.


  The easiest solution at present is to take it back and get a
  traditional type of modem which can be used on Unix systems. (Of
  course, if you have the ability, inclination, and required technical
  information, I'm sure there are many who would like to see a Linux
  driver for these beasts).


  1100..33..  II''vvee ggoott aa PPCCII mmooddeemm -- wwhhaatt aabboouutt tthhaatt ??

  PCI modems are generally winmodems. So see above.


  In any event isapnptools won't do anything for you.


  1100..44..  II''vvee ggoott aa mmooddeemm tthhaatt wwoorrkkss iinn DDOOSS aanndd WWiinnddoowwss,, bbuutt nnoott LLiinnuuxx..

  It may be that the card needs DSP code downloading onto it before
  it'll work. This can sometimes be done by booting via DOS and loadlin.


  1100..55..  II''vvee ccoonnffiigguurreedd tthhee ddeevviiccee,, bbuutt iitt iiss rreeaallllyy SSLLOOWW..

  Very slow activity can be due to interrupt clashes. When the program
  that uses the port is running, what does proc/interrupts/ say ? If the
  interrupt count is always 0 for the serial port, you probably have a
  hardware clash with two devices using the same interrupt line. Check
  your BIOS PCI settings for preallocated interrupt lines too.


  If this is the case, reassign the interrupts so that they no longer
  clash.


  1100..66..  II''vvee ccoonnffiigguurreedd tthhee ddeevviiccee,, bbuutt iitt ddooeessnn''tt wwoorrkk..

  Try running your modem communication program under strace to see what
  it is doing.


  1100..77..  II''vvee ccoonnffiigguurreedd tthhee ddeevviiccee,, iitt sseeeemmss ttoo sseenndd ookk,, bbuutt nnoott
  rreecceeiivvee..

  Check that the modem has been configured to the correct IRQ using
  setserial. Even if you think it has. You must check that the IRQ
  reported by setserial is the same as the one you configured the modem
  to use.  Use setserial to fix the IRQ if it is wrong.

  See also ``I've configured the device, but it is really SLOW''.


  1100..88..  WWhhaatt''ss tthhiiss aabboouutt nnoott uussiinngg //ddeevv//ccuuaa11 ??

  It's just something I've read in the mgetty+sendfax documentation. The
  two devices behave differently on file open, and were intended for
  dealing with modems set to auto answer. If you want to send faxes
  and/or allow dialing in, I suggest you get and install mgetty+sendfax,
  it includes an email from the writer of the serial device driver on
  why only ttySx should be used. I've seen hints that the cuax devices
  may be going in future kernels.


  The mgetty program listens to the modem and answers it manually, thus
  preventing a wasted call which would have occurred with an auto-answer
  modem and crashed computer.



  1100..99..  HHooww ccaann II cchheecckk tthhee mmooddeemm iiss wwoorrkkiinngg ??

  I use cu to talk to the modem. It replies with OK when I type <cr>.
  After a few transfers like this, check /proc/interrupts has increased
  by the number of characters transferred. If it hasn't, there is a
  resource clash, so try another interrupt. Note that IRQ3 and IRQ4 are
  almost guaranteed to be used by the motherboard, so don't use these
  for PnP modems.

  I've also written a program called serialmon
  <http://www.roestock.demon.co.uk/serialmon/> which allows you to
  observe the modem control lines etc.


  1100..1100..  TThhuunnddeerrlliinnkk mmooddeemmss ((PPCCTT33888800))..

  It has been reported that thunderlink modems are not supported for
  linux or DOS. It gives the following identification:

  PCT3880/0[0]{PC-TEL HSP K56FLEX PNP D/F/V MODEM}


  1100..1111..  UUSSRR RRoobboottiiccss SSppoorrttsstteerr..

  If it has jumpers, use them to set the device settings if you can't
  get PnP configuration to work.


  1100..1122..  GGeenneerraall hheellpp oonn sseettttiinngg uupp iinntteerrnneett ddiiaall uupp lliinnkk..

  See  <http://axion.physics.ubc.ca/ppp-linux.html> for help on getting
  internet links up and running.



  1111..  NNeettwwoorrkk ccaarrddss..

  See the file  <README.modules> in the distribution for an example of
  how to get a PnP ethernet card running, using a loadable kernel module
  driver.


  See also the Ethernet-HOWTO available from MetaLab website Ethernet-
  HOWTO <http://MetaLab.unc.edu/LDP/HOWTO/Ethernet-HOWTO.html> or from
  TSX-11 ftpsite Ethernet-HOWTO
  <ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO/Ethernet-HOWTO>, or from
  their respective mirrors.


  1111..11..  TThhee ccaarrdd ssuuppppoorrttss nnoonn PPnnPP ccoonnffiigguurraattiioonn..

  If the network card supports jumperless mode (fix the card's
  configuration using a DOS program that comes with it), or has jumpers
  to disable PnP mode and configure the device; if PnP settings don't
  work, the simplest thing to do is to configure the card in jumperless
  (non PnP) mode, or using the jumpers, to a fixed address and interrupt
  (I use 0x340 and IRQ10).

  In the BIOS, assign IRQ10 to legacy ISA. If you have other PnP devices
  which require configuring, remember to add the network card resources
  used to the /etc/isapnp.gone file.

  Build the network driver as a module, then load it during bootup with
  commands such as (for my NE2000 clone for example):


  # # And the network card # MODULESDIR="/usr/src/linux.`uname
  -r`.pf/modules" rm /modules ln -s $MODULESDIR /modules insmod
  $MODULESDIR/8390.o insmod $MODULESDIR/ne.o io=0x340

  This method won't require isapnp to configure the network card (in
  fact, isapnp won't be able to see it).



  1122..  IIDDEE ppoorrttss..

  See the file  <README.ide> in the distribution for some ideas on how
  to get a PnP IDE interface running. These are often found on sound
  cards.


  If you are running a 2.1.x kernel, it is apparently possible to rescan
  the IDE interface after boot up, but only if no devices are in use on
  that controller.


  If you are using a PCMCIA IDE interface, see also ``PCMCIA cards''.


  1133..  PPCCMMCCIIAA ccaarrddss..

  If you want to know more about PCMCIA, then you might like to look at
  the www.linuxorbit.com pcmcia feature
  <http://http://www.linuxorbit.com/features/pcmcia.php3>. You should
  almost certainly look at the PCMCIA-HOWTO <http://pcmcia-
  cs.sourceforge.net/ftp/doc/PCMCIA-HOWTO.html>.



  1144..  DDiissccllaaiimmeerrss eettcc..

  Information is provided AS IS. No guarantee of accuracy or usefulness
  is provided.


  There is no intention to provide legal advice in this document either.
  If you think there is some, I assure you there isn't, I suggest you
  seek local advice.


  (R) Linux is a registered trademark of Linux Torvalds.


  Other trademarks are the property of their respective owners.


  Spam email will be forwarded to  <mailto:uce@ftc.gov>.


  Questions and queries about isapnptools may be sent to
  <mailto:isapnp@roestock.demon.co.uk>, and the subject line must
  contain the word 'isapnp' to get past the spam filter. Note that
  contacting the above email address is not guaranteed to generate a
  reply; any reply obtained has no guarantee of accuracy or usefulness.
  To improve your chances of a useful reply, you should include the
  following information, as appropriate:


  1. Output of 'pnpdump -v' (should print out header stuff and usage)


  2. Output of 'cat /proc/cpuinfo'

  3. Output of 'cat /proc/pci'

  4. Output of 'cat /proc/interrupts'

  5. Output of 'cat /proc/ioports'

  6. Output of 'cat /proc/devices'

  7. Output of 'cat /usr/include/kernel/autoconf.h' (or the autoconf.h
     for the kernel you're running).

  8. Output of 'lsmod' if you use kernel modules

  9. The command lines used to install the relevant device driver kernel
     modules, or configure the built in device driver (eg setserial).

  10.
     Output of 'dmesg'

  11.
     Output of 'gcc -v'

  12.
     Output of 'ldd prog' where prog is the program giving trouble.

  13.
     Inputs and Outputs of the program giving trouble: 'prog args.. >
     prog.stdout 2> prog.stderr'

  14.
     The patch that cures the problem !


  If you supply a useful patch, or useful idea for improvement, you will
  automatically be added to AUTHORS and the announcement mailing list,
  unless you say otherwise.



