home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Plug-and-Play-HOWTO < prev    next >
Text File  |  1999-06-14  |  66KB  |  1,387 lines

  1.   The Linux Plug-and-Play-HOWTO
  2.   David S.Lawyer    <mailto:bf347@lafn.org>
  3.   v0.04, June 1999
  4.  
  5.   Help with understanding and dealing with the complex Plug-and-Play
  6.   issue.  How to get your Linux system to support Plug-and-Play.
  7.   ______________________________________________________________________
  8.  
  9.   Table of Contents
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Copyright, Trademarks, Disclaimer, & Credits
  70.         1.1.1 Copyright
  71.         1.1.2 Trademarks
  72.         1.1.3 Disclaimer
  73.      1.2 Future Plans; You Can Help
  74.      1.3 New Versions of this HOWTO
  75.  
  76.   2. What PnP Should Do: Allocate "Resources"
  77.  
  78.      2.1 What is Plug-and-Play (PnP)?
  79.      2.2 How a Computer Finds Devices (and conversely)
  80.      2.3 I/O Addresses, etc.
  81.      2.4 IRQs --Overview
  82.      2.5 DMA Channels
  83.      2.6 Memory Ranges
  84.      2.7 "Resources" to both Device and Driver
  85.      2.8 The Problem
  86.      2.9 PnP Finds Devices Plugged Into Serial Ports
  87.  
  88.   3. The Plug-and-Play (PnP) Solution
  89.  
  90.      3.1 Introduction to PnP
  91.      3.2 How It Works (simplified)
  92.      3.3 Starting Up the PC
  93.      3.4 Buses
  94.      3.5 Linux Needs to Cope Better with PnP
  95.  
  96.   4. Configuring a PnP BIOS
  97.  
  98.      4.1 Do you have a PnP operating system?
  99.         4.1.1 Interoperability with Windows9x
  100.      4.2 How are resources to be controlled?
  101.      4.3 Reset the configuration?
  102.  
  103.   5. How to Deal with PnP Cards
  104.  
  105.      5.1 Introduction to Dealing with PnP Cards
  106.      5.2 Disable PnP ?
  107.      5.3 BIOS Configures PnP
  108.         5.3.1 Intro to Using the BIOS to Configure PnP
  109.         5.3.2 The BIOS's ESCD Database
  110.         5.3.3 Using Windows to set ESCD
  111.         5.3.4 Adding a New Device (under Linux or Windows)
  112.      5.4 Isapnp (part of isapnptools)
  113.      5.5 PCI Utilities
  114.      5.6 Patch the Kernel to Make Linux PnP
  115.      5.7 Windows Configures
  116.      5.8 PnP Software/Documents
  117.  
  118.   6. What Is My Current Configuration?
  119.  
  120.      6.1 How Are My Device Drivers Configured?
  121.      6.2 How Are My Hardware Devices Configured?
  122.  
  123.   7. Appendix
  124.  
  125.      7.1 Addresses
  126.         7.1.1 ISA Bus Configuration Address (Read-Port etc.)
  127.         7.1.2 Address ranges
  128.         7.1.3 Address space
  129.         7.1.4 Range Check (ISA Testing for IO Address Conflicts)
  130.         7.1.5 Communicating Directly via Memory
  131.      7.2 Interrupts --Details
  132.      7.3 PCI Interrupts
  133.      7.4 Isolation
  134.  
  135.  
  136.   ______________________________________________________________________
  137.  
  138.   1.  Introduction
  139.  
  140.   1.1.  Copyright, Trademarks, Disclaimer, & Credits
  141.  
  142.   1.1.1.  Copyright
  143.  
  144.   Copyright (c) 1998 by David S. Lawyer. Please freely copy and
  145.   distribute (sell or give away) this document.  For corrections and
  146.   minor changes contact the maintainer.  Otherwise you may create
  147.   derivative works and distribute them provided you:
  148.  
  149.   1. Discuss it with the maintainer (if there is one).  2. Put the
  150.   derivative work at the mirrored LDP Internet site (or the like) for
  151.   free downloading.  3. License the work in the spirit of this license
  152.   or use GPL.  4. Give due credit to previous authors and major
  153.   contributors.
  154.  
  155.  
  156.   1.1.2.  Trademarks
  157.  
  158.   If certain words are trademarks, the context should make it clear to
  159.   whom they belong.  For example "MS Windows" (or just "Windows")
  160.   implies that "Windows" belongs to Microsoft.
  161.  
  162.  
  163.   1.1.3.  Disclaimer
  164.  
  165.   Much of the info in this HOWTO was obtained from the Internet,
  166.   implications in books that may be obsolete, etc.  While I haven't
  167.   intentionally tried to mislead you, there are likely a number of
  168.   errors in this document.  Please let me know about them.  Since this
  169.   is free documentation, it should be obvious that neither I nor
  170.   previous authors can be held legally responsible for any errors.
  171.  
  172.  
  173.   1.2.  Future Plans; You Can Help
  174.  
  175.   Please let me know of any errors in facts, opinions, logic, spelling,
  176.   grammar, clarity, links, etc.  But first, if the date is over a month
  177.   old, check to see that you have the latest version.  Please send me
  178.   any info that you think belongs in this document.
  179.  
  180.   I haven't studied in detail neither isapnptools nor David Howells'
  181.   patches to the kernel.  Nor do I fully understand how PnP is
  182.   configured by the BIOS (it depends on which BIOS) nor how Windows9x
  183.   updates the ESCD.  Thus this HOWTO is still incomplete and may be
  184.   inaccurate (let me know where I'm wrong).  In this HOWTO I've
  185.   sometimes used ??  to indicate that I don't really know the answer.
  186.   Would you like to improve on (rewrite) and maintain this HOWTO?  I'm
  187.   looking for someone to turn it over to.
  188.  
  189.  
  190.   1.3.  New Versions of this HOWTO
  191.  
  192.   New versions of the Plug-and-Play-HOWTO should appear every month or
  193.   so and will be available to browse and/or download at LDP mirror
  194.   sites.  For a list of mirror sites see:
  195.   <http://metalab.unc.edu/LDP/mirrors.html>.  Various formats are
  196.   available.  If you only want to quickly check the date of the latest
  197.   version look at:  <http://metalab.unc.edu/LDP/HOWTO/Plug-and-Play-
  198.   HOWTO.html>.
  199.   2.  What PnP Should Do: Allocate "Resources"
  200.  
  201.   2.1.  What is Plug-and-Play (PnP)?
  202.  
  203.   Oversimplified, Plug-and-Play automatically tells the software (device
  204.   drivers) where to find various pieces of hardware (devices) such as
  205.   modems, network cards, sound cards, etc.  Plug-and-Play's task is to
  206.   match up physical devices with the software (device drivers) that
  207.   operates them and to establish channels of communication between each
  208.   device and its driver.  In order to achieve this, PnP allocates the
  209.   following "resources" to both drivers and hardware: I/O addresses,
  210.   IRQ's, DMA channels (ISA bus only), and memory regions.  If you don't
  211.   understand what these 4 items are read the following subsections.
  212.   Once these resources have been assigned (and if the correct driver is
  213.   installed), the names for such devices in the /dev directory are ready
  214.   to use.
  215.  
  216.   This PnP assignment of certain resources is sometimes called
  217.   "configuring" but it is only a low level type of configuring.  Even
  218.   with PnP fully utilized, much configuring of devices is done by other
  219.   than PnP.  For example, for modem configuration an "init string" is
  220.   sent to the modem over the I/0 address "channel".  This "init string"
  221.   has nothing to do with PnP although the "channel" used to send it to
  222.   the modem was allocated by PnP.  Setting the speed (and many other
  223.   parameters) of a serial port is done by sending messages to the device
  224.   driver from programs run by the user (often automatically boot-time).
  225.   This configuring also has nothing to do with PnP.  Thus when talking
  226.   about PnP, "resources" means only a limited subset of resources and
  227.   "configuring" means only a certain type of configuring.
  228.  
  229.  
  230.   2.2.  How a Computer Finds Devices (and conversely)
  231.  
  232.   A computer consists of a CPU/processor to do the computing and memory
  233.   to store programs and data.  In addition, there are a number of
  234.   devices such as various kinds of disk-drives, a video card, a
  235.   keyboard, network cards, modem cards, sound cards, serial and parallel
  236.   ports, etc.  There is also a power supply to provide electric energy,
  237.   various buses on a motherboard to connect the devices to the CPU, and
  238.   a case to put all this into.
  239.  
  240.   In olden days most all devices had their own plug-in cards (printed
  241.   circuit boards).  Today, in addition to plug-in cards, many "devices"
  242.   are small chips permanently mounted on the "motherboard".  Cards which
  243.   plug into the motherboard may contain more than one device.  Memory
  244.   chips are also sometimes considered to be devices but are not plug-
  245.   and-play in the sense used in this HOWTO.
  246.  
  247.   For the computer system to work right, each device must be under the
  248.   control of its "device driver".  This is software which is a part of
  249.   the operating system (or a module) and runs on the CPU.  Device
  250.   drivers are associated with "special files" in the /dev directory
  251.   although they are not really files.  They have names such as hda1
  252.   (first partition on hard drive a), ttyS0 (the first serial port), eth1
  253.   (the second ethernet card), etc.  To make matters more complicated,
  254.   the particular device driver selected, say for eth1, will depend on
  255.   the type of ethernet card you have.  Thus eth1 can't just be assigned
  256.   to any ethernet driver.  It must be assigned to a certain driver that
  257.   will work for the type of ethernet card you have installed.  To
  258.   control a device, the CPU (under the control of the device driver)
  259.   sends commands (and data) to and reads info from the various devices.
  260.   In order to do this each device driver must know the address of the
  261.   device it controls.  Knowing such an address is equivalent to setting
  262.   up a communication channel, even though the physical "channel" is
  263.   actually the data bus inside the PC which is shared with almost
  264.   everything else.
  265.   The communication channel is actually a little more complex than
  266.   described above.  An "address" is actually a range of addresses and
  267.   there is a reverse part of the channel (known as interrupts) which
  268.   allows devices to send an urgent "help" request to their device
  269.   driver.
  270.  
  271.  
  272.   2.3.  I/O Addresses, etc.
  273.  
  274.   PC's have 3 address spaces: I/O, main memory, and configuration (only
  275.   on the PCI bus).  All of these 3 types of addresses share the same
  276.   address bus inside the PC.  But the voltage on certain dedicated wires
  277.   tells all devices which "space" an address is in: I/O, main memory, or
  278.   configuration.  See ``Addresses'' for more details.  Devices were
  279.   normally located in I/O address space although today they may use
  280.   space in main memory.  An I/0 address is sometimes just called "I/O",
  281.   "IO", "i/o" or "io".  The term "I/O port" also used.  There are two
  282.   main steps to allocate the I/O addresses (or other resources such as
  283.   interrupts):
  284.  
  285.  
  286.   1. Set the I/O address, etc. on the card (in one of its registers)
  287.  
  288.   2. Let its device driver know what this I/O address, etc. is
  289.  
  290.  
  291.   The two step process above is something like the two part problem of
  292.   finding someone's house number on a street.  You must obtain (and
  293.   write down) the house number and someone must install a number on the
  294.   front of the house so that it may be found.  In computers, the device
  295.   driver must obtain the address and the device hardware must get the
  296.   same address set in one of its registers.  Both of these must be done,
  297.   but some people make the mistake of doing only one of these and then
  298.   wonder why the computer can't find the device.  For example, they will
  299.   use "setserial" to assign an address to a serial port without
  300.   realizing that this only tells the driver the address.  It doesn't set
  301.   the address in the serial port hardware itself.  If you told the
  302.   driver the wrong address, you're in trouble.
  303.  
  304.   Another obvious requirement is that the I/O address must be set on the
  305.   card before the device driver tries to use this address.  Since device
  306.   drivers often start up soon after you start the computer, they
  307.   sometimes try to access a card (to see if it's there, etc.) before the
  308.   address has been set in the card by a PnP configuration program.  Then
  309.   you see an error message that they can't find the card even though
  310.   it's there (but doesn't yet have an address).
  311.  
  312.   What was said in the last 2 paragraphs regarding I/O addresses applies
  313.   with equal force to other resources: ``IRQs --Overview'', ``DMA
  314.   Channels'', and ``Memory Regions''.  What theses are will be explained
  315.   in the next 3 sections.
  316.  
  317.  
  318.   2.4.  IRQs --Overview
  319.  
  320.   After reading this you may read ``Interrupts --Details'' for some more
  321.   details.  The following is intentionally oversimplified:  Besides the
  322.   address, there is also an interrupt number to deal with (such as IRQ
  323.   5).  It's called an IRQ (Interrupt ReQuest) number.  We already
  324.   mentioned above that the device driver must know the address of a card
  325.   in order to be able to communicate with it.  But what about
  326.   communication in the opposite direction?  Suppose the the device needs
  327.   to tell its device driver something immediately?  For example, the
  328.   device may have just received a lot of bytes destined for main memory
  329.   and the device needs to call its driver to fetch these bytes at once
  330.   and transfer them from the device's nearly full buffer into main
  331.   memory.
  332.  
  333.   How should the device call for help?  It can't use the main data bus
  334.   since it's likely already in use.  Instead it puts a voltage on an
  335.   dedicated interrupt wire (part of the bus) which is often reserved for
  336.   that device alone.  This signal is called an interrupt.  There are the
  337.   equivalent of 16 such wires in a PC and each wire leads (indirectly)
  338.   to a certain device driver.  Each wire has a unique IRQ (Interrupt
  339.   ReQuest) number.  The device must put its interrupt on the correct
  340.   wire and the device driver must listen for the interrupt on the
  341.   correct wire.  Which wire it's put on is determined by the IRQ number
  342.   stored in the device.  This same IRQ number must be known to the
  343.   device driver so that the device driver knows which IRQ line to listen
  344.   to.
  345.  
  346.   Once the device driver gets the interrupt (a call for help) it must
  347.   find out why the interrupt was issued and take appropriate action to
  348.   service the interrupt.  On the ISA bus each device needs its own
  349.   unique IRQ number.  For the PCI bus and other special cases the
  350.   sharing of IRQs is allowed.
  351.  
  352.  
  353.   2.5.  DMA Channels
  354.  
  355.   DMA channels are only for the ISA bus.  DMA stands for "Direct Memory
  356.   Access".  This is where a device is allowed to take over the main
  357.   computer bus from the CPU and transfer bytes directly to main memory.
  358.   Normally the CPU would make such a transfer in a two step process: 1.
  359.   reading from the I/O memory space of the device and putting these
  360.   bytes into the CPU itself  2. writing these bytes from the CPU to main
  361.   memory.  With DMA it's usually a one step process of sending the bytes
  362.   directly from the device to memory.  The device must have such
  363.   capabilities built into its hardware and thus not all devices can do
  364.   DMA.  While DMA is going on the CPU can't do too much since the main
  365.   bus is being used by The DMA transfer.
  366.  
  367.   The PCI bus doesn't really have any DMA but instead it has something
  368.   even better: bus mastering.  It works something like DMA and is
  369.   sometimes called DMA (for example, hard disk drives that call
  370.   themselves "UltraDMA").  It allows devices to temporarily become bus
  371.   masters and to transfer bytes almost like the bus master was the CPU.
  372.   It doesn't use any channel numbers since the organization of the PCI
  373.   bus is such that the PCI hardware knows which device is currently the
  374.   bus master and which device is requesting to become a bus master.
  375.   Thus there is no allocation of DMA channels for the PCI bus.
  376.  
  377.   When a device on the ISA bus wants to do DMA it issues a DMA-request
  378.   using dedicated DMA request wires much like an interrupt request.  DMA
  379.   actually could have been handled by using interrupts but this would
  380.   introduce some delays so it's faster to do it by having a special type
  381.   of interrupt known as a DMA-request.  Like interrupts, DMA-request are
  382.   numbered so as to identify which device is making the request.  This
  383.   number is called a DMA-channel.  Since DMA transfers all use the main
  384.   bus (and only one can run at a time) they all actually use the same
  385.   channel but the "DMA channel" number serves to identify who is using
  386.   the "channel".  Hardware registers exist on the motherboard which
  387.   store the current status of each "channel".  Thus in order to issue a
  388.   DMA-request, the device must know its DMA-channel number which must be
  389.   stored in a register on the physical device.
  390.  
  391.  
  392.   2.6.  Memory Ranges
  393.  
  394.   Some devices are assigned address space in main memory.  It's often
  395.   "shared memory" or "memory-mapped I/O".  Sometimes it's ROM memory on
  396.   the device.  When discussing PnP resources it's often just called
  397.   "memory".  Such a device might also use I/O address space.
  398.  
  399.   When you plug in such a card, you are in effect also plugging in a
  400.   memory module for main memory.  This memory can either be ROM (Read
  401.   Only Memory) or shared memory.  Shared memory is shared between the
  402.   device and the CPU (running the device driver).  This memory can serve
  403.   as a means of direct data "transfer" between the device and main
  404.   memory.  It's not really a transfer since the device puts data into
  405.   its own memory on its card which also happens to be in main memory.
  406.   Both the card and the device driver need to know where it is.  The
  407.   memory address are likely to be very high so that they do not conflict
  408.   with the lower addresses of the memory chips in your computer.
  409.  
  410.   ROM is different.  It is likely a program (perhaps a device driver)
  411.   which will be used with the device.  Hopefully, it may work with Linux
  412.   and not just Windows ??  It may need to be shadowed which means that
  413.   it is copied to your main memory chips in order to run faster.  Once
  414.   it's shadowed it's no longer "read only".
  415.  
  416.  
  417.   2.7.  "Resources" to both Device and Driver
  418.  
  419.   Thus device drivers must be "attached" in some way to the hardware
  420.   they control.  This is done by supplying "resources" (I/O, Memory,
  421.   IRQ's, DMA's) to both the physical device and the device driver
  422.   software.  For example, a serial port uses only 2 (out of 4 possible)
  423.   resources: an IRQ and an I/O address.  Both of these values must be
  424.   supplied to the device driver and the physical device.  The driver
  425.   (and its device) is also given a name in the /dev directory (such as
  426.   ttyS1).  The address and IRQ number is stored by the physical device
  427.   in registers on the card (or in a chip on the motherboard).  For the
  428.   case of jumpers, this info is always stored in the device hardware (on
  429.   the card, etc.).  But for the case of PnP, the register data is
  430.   usually lost when the PC is powered down (turned off) so that the
  431.   resource data must be supplied to each device anew each time the PC is
  432.   powered on.
  433.  
  434.  
  435.   2.8.  The Problem
  436.  
  437.   The architecture of the PC provides only a limited number of IRQ's,
  438.   DMA channels, I/O address, and memory regions.  If there were only
  439.   several devices and they all had standardized resource (such as unique
  440.   I/O addresses and IRQ numbers) there would be no problem of attaching
  441.   device drivers to devices.  Each device would have a fixed resources
  442.   which would not conflict with any other device on your computer.  No
  443.   two devices would have the same addresses, there would be no IRQ
  444.   conflicts, etc.  Each driver would be programmed with the unique
  445.   addresses, IRQ, etc. hard-coded into the program.  Life would be
  446.   simple.
  447.  
  448.   But it's not.  Not only are there so many different devices today that
  449.   conflicts are frequent, but one sometimes needs to have more than one
  450.   of the same type of device.  For example, one may want to have a few
  451.   different disk-drives, a few serial ports, etc.  For these reasons
  452.   devices need to have some flexibility so that they can be set to
  453.   whatever address, IRQ, etc. is needed to avoid conflicts.  But some
  454.   IRQ's and addresses are pretty standard such as the ones for the clock
  455.   and keyboard.  These don't need such flexibility.
  456.  
  457.   Besides the problem of conflicting allocation of resources, there is a
  458.   problem of making a mistake in telling the device driver what the
  459.   resources are.  For example, suppose that you enter IRQ 4 in a
  460.   configuration file when the device is actually set at IRQ 5.  This is
  461.   another type of resource allocation error.
  462.  
  463.   The allocation of resources, if done correctly, establishes channels
  464.   of communication between physical hardware and their device drivers.
  465.   For example, if a certain I/O address range (resource) is allocated to
  466.   both a device driver and a piece of hardware, then this has
  467.   established a one-way communication channel between them.  The driver
  468.   may send commands and info to the device.  It's actually a little more
  469.   than one-way since the driver may get information from the device by
  470.   reading it's registers.  But the device can't initiate any
  471.   communication this way.  To initiate the device needs an IRQ in order
  472.   to create a two-way communication channel where both the driver and
  473.   the device can initiate communication.
  474.  
  475.  
  476.   2.9.  PnP Finds Devices Plugged Into Serial Ports
  477.  
  478.   External devices that connect to the serial port via a cable (such as
  479.   external modems) can also be called Plug-and-Play.  Since only the
  480.   serial port itself needs resources (an IRQ and I/O address) there are
  481.   no resources to allocate to such plug-in devices.  Thus PnP is not
  482.   really needed for them.  Even so, there is a PnP specification for
  483.   such external serial devices.
  484.  
  485.   A PnP operating system will find such an external device and read its
  486.   model number, etc.  Then it may be able to find a device driver for it
  487.   so that you don't have to tell an application program that you have a
  488.   certain device on say /dev/ttyS1.  Since you should be able to
  489.   manually inform your application program (via a configuration file,
  490.   etc.) what serial port the device is on (and possibly what model
  491.   number it is) you should not really need this "serial port" feature of
  492.   PnP.
  493.  
  494.  
  495.   3.  The Plug-and-Play (PnP) Solution
  496.  
  497.   3.1.  Introduction to PnP
  498.  
  499.   The term Plug-and-Play (PnP) has various meanings.  In the broad sense
  500.   it is just auto-configuration where one just plugs in a device and it
  501.   configures itself.  In the sense used in this HOWTO, the configuration
  502.   is only that of configuring PnP resources and letting the device
  503.   drivers know about it.  In a more narrow sense it just setting
  504.   resources in the hardware devices.  It may also mean the PnP
  505.   specifications which (among other things) specify how PnP resource
  506.   data is to be read and written to devices (often cards) on the ISA
  507.   bus.  The standard PCI (and not PnP) specifications do the same for
  508.   the PCI bus.
  509.  
  510.   PnP matches up devices with their device drivers and specifies their
  511.   communication channels.  On the ISA bus before Plug-and-Play the
  512.   resources were set in hardware devices by jumpers.  Software drivers
  513.   were assigned resources by configuration files (or the like) or by
  514.   probing the for the device at addresses where it's expected to reside.
  515.   The PCI bus was PnP-like from the beginning so it was trivial to
  516.   implement PnP for this bus.  Since the PCI bus specifications don't
  517.   use the term PnP it's not clear whether or not the PCI bus should be
  518.   called PnP (but it supports in hardware what today is called PnP).
  519.  
  520.  
  521.   3.2.  How It Works (simplified)
  522.  
  523.   Here's an oversimplified view of how PnP works.  The PnP configuration
  524.   program (perhaps a program in the BIOS) finds all PnP devices and asks
  525.   each what resources it needs.  Then it checks what resources (IRQs,
  526.   etc.) it has to give away.  Of course if it has reserved resources
  527.   used by non-PnP (legacy) devices (if it knows about them) it doesn't
  528.   give these away.  Then it uses some criteria (not specified by PnP
  529.   specifications) to give out the resources so that there are no
  530.   conflicts and so that all devices get what they need.  It then tells
  531.   each physical device what resources are assigned to it and the devices
  532.   set themselves up to use only the assigned resources.  Then the device
  533.   drivers somehow find out what resources their devices use and are thus
  534.   able to communicate effectively with the devices they control.
  535.  
  536.   For example, suppose a card needs one interrupt (IRQ number) and 1 MB
  537.   of shared memory.  The PnP program reads this request from the card.
  538.   It then assigns the card IRQ5 and 1 MB of memory addresses space,
  539.   starting at address 0xe9000000.  It's not always this simple as the
  540.   card may specify that it can only use certain IRQ numbers (ISA only)
  541.   or that the 1 MB of memory must lie within a certain range of
  542.   addresses.  The details are different for the PCI and ISA buses with
  543.   more complexity on the ISA bus.
  544.  
  545.   There are some shortcuts that PnP software may use.  One is to keep
  546.   track of how it assigned resources at the last configuration (when the
  547.   computer was last used) and reuse this.   Windows9x and PnP BIOSs do
  548.   this but standard Linux doesn't.  Windows9x stores this info in its
  549.   "Registry" and a PnP BIOS stores it in non-volatile memory in your PC
  550.   (known as ESCD; see ``The BIOS's ESCD Database'').
  551.  
  552.   If the device hardware remembered their previous configuration, then
  553.   there wouldn't be any hardware to configure at the next boot-time, but
  554.   they seem to forget their configuration when the power is turned off.
  555.   Some devices contain a default configuration (but not necessarily the
  556.   last one used).  Thus a PnP configuration program needs to be run each
  557.   time the PC is powered on.  Also, if a new device has been added, then
  558.   it too needs to be configured.  Allocating resources to this new
  559.   device might involve taking some resources away from an existing
  560.   device and assigning the existing device alternative resources.
  561.  
  562.  
  563.   3.3.  Starting Up the PC
  564.  
  565.   When the PC is first turned on the BIOS chip runs its program to get
  566.   the computer started (the first step is to check out the hardware).
  567.   If the operating system is stored on the hard-drive (as it normally
  568.   is) then the BIOS must know about the hard-drive.  If the hard-drive
  569.   is PnP then the BIOS may use PnP methods to find it.  Also, in order
  570.   to permit the user to manually configure the BIOS's CMOS and respond
  571.   to error messages when the computer starts up, a screen (video card)
  572.   and keyboard are also required.  Thus the BIOS must PnP-configure
  573.   these devices on its own.
  574.  
  575.   Once the BIOS has identified the hard-drive, the video card, and the
  576.   keyboard it is ready to "boot" (load the operating system from the
  577.   hard-disk).  If you've told the BIOS that you have a PnP operating
  578.   system, it should boot the PC and let the operating system finish the
  579.   PnP configuring.  Otherwise, a PnP-BIOS will likely try to do the rest
  580.   of the PnP configuring of devices (but not their drivers).
  581.  
  582.  
  583.   3.4.  Buses
  584.  
  585.   ISA is the old bus of the old IBM PC's while PCI is a newer and faster
  586.   bus from Intel.  Eventually, the ISA bus should become extinct.  When
  587.   it does, there should be almost no PnP problem in Linux provided: 1.
  588.   the only bus in use is PCI.  2. The BIOS does a good job of PnP
  589.   configuring it.
  590.  
  591.   The PCI bus was designed for what is today called PnP.  It makes it
  592.   easy (as compared to the ISA bus) to find out how PnP resources have
  593.   been assigned to hardware devices.  To see what has happened look at
  594.   the /proc/pci "file" (/proc/bus/pnp/devices for kernel 2.2+), the
  595.   boot-up messages on your display (use shift-PageUp to back up), or use
  596.   PCI Utilities (for kernel 2.2+).
  597.  
  598.   For the ISA bus there is a real problem with implementing PnP since no
  599.   one had PnP in mind when the ISA bus was designed and there are almost
  600.   no I/O addresses available for PnP to use for sending configure info
  601.   to physical device.  As a result, the way PnP was shoehorned onto the
  602.   ISA bus is very complicated.  A whole book has been written about it.
  603.   See ``PnP Book''.  Among other things, it requires that each PnP
  604.   device be assigned a temporary "handle" by the PnP program so that one
  605.   may address it for PnP configuring.  Assigning these "handles" is call
  606.   "isolation".  See ``Isolation'' for the complex details.
  607.  
  608.  
  609.   3.5.  Linux Needs to Cope Better with PnP
  610.  
  611.   PnP was invented by Compaq, Intel, and Phoenix.  Microsoft has been a
  612.   leading promoter of it.  Linux would have been better off if PnP had
  613.   never been "invented".  Eventually the ISA bus would have become
  614.   extinct and the PnP-like PCI bus would prevail so that we would have
  615.   in effect gotten an easy-to-implement PnP.  But like it or not, most
  616.   all new ISA hardware today is PnP and Linux has no choice but to deal
  617.   effectively with PnP.  But standard Linux (as of early 1999) makes
  618.   dealing with PnP complicated (especially on the ISA bus) while the
  619.   purpose of PnP was to make it simple.
  620.  
  621.   In a sense, Linux is already somewhat PnP for the PCI bus.  When the
  622.   PC starts up you may note from the messages on the screen that some
  623.   Linux device drivers often find their hardware devices (and the
  624.   resources the BIOS has assigned them).  But there still could be
  625.   conflicts with the ISA bus.
  626.  
  627.   Linux users should not need to delve into the details of PnP to
  628.   configure ISA PnP devices as they now need to.  One solution would be
  629.   a standardized version of the Linux kernel that supports Plug-and-Play
  630.   on both the ISA and PCI buses.  A patch to the kernel has been written
  631.   although most drivers don't support it.  It's not part of standard
  632.   Linux.  See ``Patch Kernel''.
  633.  
  634.  
  635.   4.  Configuring a PnP BIOS
  636.  
  637.   When the computer is first turned on, the BIOS runs before the
  638.   operating system is loaded.  Newer BIOSs are PnP and will configure
  639.   some or all of the PnP devices.  For most PnP BIOSs there is no way to
  640.   disable PnP so you have to live with it.  Here are some of the choices
  641.   which may exist in your BIOS's CMOS menu:
  642.  
  643.  
  644.   ╖  ``Do you have a PnP operating  system?''
  645.  
  646.   ╖  ``How are resources to be controlled?''
  647.  
  648.   ╖  ``Reset the configuration?''
  649.  
  650.  
  651.   4.1.  Do you have a PnP operating system?
  652.  
  653.   If you say yes, then the PnP BIOS will PnP-configure the hard-drive,
  654.   video card, and keyboard to make the system bootable.  But it will
  655.   leave it up to the operating system to finish the configuration job.
  656.   It may do an ``Isolation'' on the ISA bus leaving the devices disabled
  657.   but ready to be configured by the operating system.  You should
  658.   probably tell it that you don't have a PnP operating system.  If you
  659.   don't do this, the BIOS might leave the ISA devices it hasn't
  660.   configured in a disabled state ??  Also PCI devices might not get
  661.   configured ??
  662.  
  663.   If you tell the BIOS you don't have a PnP OS, then the BIOS will do
  664.   the configuring itself.  Unless you have added new PnP devices, it
  665.   should use the configuration which it has stored in its non-volatile
  666.   memory (ESCD).  See ``The BIOS's ESCD Database'' If the last session
  667.   on your computer was with Linux, then there should be no change in
  668.   configuration.  See ``BIOS Configures PnP''.  But if the last session
  669.   was with Windows9x (which are PnP) then Windows could have set up the
  670.   configuration differently and possibly saved some of it in the ESCD.
  671.   See ``Using Windows to set ESCD''.  If you are using the isapnp or PCI
  672.   Utilities program(s) to do configuring, they will run after the BIOS
  673.   runs and change things the way you told them to.
  674.  
  675.  
  676.   4.1.1.  Interoperability with Windows9x
  677.  
  678.   If you are running Windows on the same PC, how do you answer the
  679.   question: Do you have a PnP OS?  Normally (and truthfully) you would
  680.   say no for standard Linux and yes for Windows9x.  But it's a lot of
  681.   bother to have to set up the CMOS menu manually each time you want to
  682.   switch OSs.  One solution is set the CMOS for no PnP OS, including
  683.   when you start Windows.  One might expect that Windows would be able
  684.   to handle this situation where it is presented hardware that has been
  685.   fully configured by the BIOS.  In addition, one might expect that if
  686.   Windows didn't realize that the hardware was already configured, it
  687.   would do the configuration itself and then work OK.  But it doesn't
  688.   seem to work this way.  It seems that Windows may just tell its device
  689.   drivers what has been stored in the Windows' Registry.  But the actual
  690.   hardware configuration (done by the BIOS) is what was stored in the
  691.   ESCD and may not be the same as the Registry => trouble.
  692.  
  693.   One way (the only way??) to try to get the Registry and the ESCD the
  694.   same is to install (or reinstall) Windows when the BIOS is set for
  695.   "not a PnP OS".  This should present Windows with system configured by
  696.   the BIOS (except for the devices drivers).  If this configuration is
  697.   without conflicts, Windows will hopefully leave it alone and save it
  698.   in it's Registry.  If this works for you (and this is the latest
  699.   version of this HOWTO), let me know as I only have one report of this
  700.   working out OK.
  701.  
  702.   Another thing you might try if there is only a problem with one device
  703.   is to tell Windows you are removing the device (perhaps hide the
  704.   device driver).  Then restart the PC with "not a PnP OS" and install
  705.   the device under Windows.  I have no idea if this works or not.  Let
  706.   me know if it does and what you did (only if this is the latest
  707.   version of this HOWTO).
  708.  
  709.  
  710.   4.2.  How are resources to be controlled?
  711.  
  712.   This may involve just deciding how to allocate IRQ and DMA resources.
  713.   If set to "auto", the bios will do the allocation.  If set to manual,
  714.   you manually reserve some IRQ's for use on "legacy" (non-pnp) cards.
  715.   The BIOS may or may not otherwise know about your legacy cards.  The
  716.   BIOS will only know about your legacy cards if you ran ICU (or the
  717.   like) under Windows to tell the BIOS about them.  If the BIOS knows
  718.   about them, then try using "auto".  If it doesn't know about them then
  719.   manually reserve the IRQ's needed for the legacy ISA cards and let the
  720.   rest be for the BIOS PnP to allocate.
  721.  
  722.  
  723.   4.3.  Reset the configuration?
  724.  
  725.   This will erase the BIOSs ESCD data-base of how your PnP devices
  726.   should be configured as well as the list of how legacy (non-PnP)
  727.   devices are configured.  Never do this unless you are convinced that
  728.   this data-base is wrong and needs to be remade.  It was stated
  729.   somewhere that you should do this only if you can't get your computer
  730.   to boot.  If the BIOS loses the data on legacy devices, then you'll
  731.   need to run ICA again under DOS/Windows to reestablish this data.
  732.  
  733.  
  734.   5.  How to Deal with PnP Cards
  735.  
  736.   5.1.  Introduction to Dealing with PnP Cards
  737.  
  738.   Today most all new internal boards (cards) are Plug-and-Play (PnP).
  739.   Although some software exists in Linux to handle PnP, it is not always
  740.   easy to use.  There are 6 different methods listed below to cope with
  741.   PnP (but some may not be feasible in your situation).  Which one(s)
  742.   you should use depends on your goals.  What may be most expedient to
  743.   do now may not be the easiest and best in the long run.  A seemingly
  744.   simple way is to do nothing and just let a PnP-BIOS configure it but
  745.   then you may need to do some exploring to to find out what the BIOS
  746.   has done.  A comparison of these methods needs to be written by
  747.   someone who has tried them all.  You may need to use more than one
  748.   method to do the job.
  749.  
  750.  
  751.   ╖  ``Disable PnP''  by jumpers (but many cards can't do this) or
  752.      Windows software
  753.  
  754.   ╖  ``BIOS Configures PnP'' (For the PCI bus you only need a PCI BIOS,
  755.      otherwise you need a PnP BIOS)
  756.  
  757.   ╖  ``Isapnp'' is a program you can always use to configure PnP devices
  758.      on the ISA bus only
  759.  
  760.   ╖  ``PCI Utilities'' is for configuring the PCI bus
  761.  
  762.   ╖  ``Patch Kernel'' to transform Linux into a PnP operating system
  763.  
  764.   ╖  ``Windows Configures'' and then you boot Linux from within
  765.      Windows/DOS.  Use as a last resort.
  766.  
  767.  
  768.   5.2.  Disable PnP ?
  769.  
  770.   Many devices are PnP only with no option for disabling it.  But for
  771.   some, you may be able to disable PnP by jumpers or by running a
  772.   Windows program that comes with the device (jumperless configuration).
  773.   This will avoid the often complicated task of configuring PnP.  Don't
  774.   forget to tell the BIOS the resources that it uses.  There are also
  775.   some reasons why you might not want to disable PnP:
  776.  
  777.  
  778.   1. If you have MS Windows on the same machine, then you may want to
  779.      allow PnP to configure devices differently under Windows from what
  780.      it does under Linux.
  781.  
  782.   2. The range of selection for IRQ numbers (or port addresses) etc.
  783.      may be quite limited unless you use PnP.
  784.  
  785.   3. If it requires the use of Dos/Windows software to disable/enable
  786.      PnP, then someday you might not have Dos/Windows around anymore and
  787.      will thus have difficulty changing the configuration.
  788.  
  789.   4. You may have (or will have) other PnP devices that need configuring
  790.      so that you'll need to provide for (or learn about) PnP anyway.
  791.  
  792.      Once configured as non-PnP devices, they can't be configured by PnP
  793.      software or the BIOS (until you move jumpers and/or use the
  794.      Dos/Windows configuration software again).
  795.  
  796.  
  797.   5.3.  BIOS Configures PnP
  798.  
  799.   5.3.1.  Intro to Using the BIOS to Configure PnP
  800.  
  801.   This means that your BIOS reads the resource requirements of all
  802.   devices and configures them (allocates resources to them).  It is a
  803.   substitute for a PnP OS except that the BIOS doesn't match up the
  804.   devices with their drivers nor tell the drivers how it has done the
  805.   configuring.  It should give preference to using the configuration it
  806.   has stored in its non-volatile memory (ESCD).
  807.  
  808.   Your BIOS must support such configuring but there have been cases
  809.   where it doesn't do it correctly or completely.  An advantage of using
  810.   the BIOS is that it's simple since in most cases there is nothing to
  811.   set up (except to tell the BIOS's CMOS menu it's not a PnP OS).  But
  812.   it's not always that simple to determine what the BIOS has done.  See
  813.   ``What Is My Current Configuration?''  Another advantage is that the
  814.   BIOS does its work before Linux starts so that all the resources are
  815.   ready to be used (and found) by the device drivers that start up
  816.   later.
  817.  
  818.   According to MS it's only optional (not required) that a PnP BIOS be
  819.   able to PnP-configure the devices (without help from MS Windows).  But
  820.   it seems that most of the ones made after 1996 ?? or so can do it.  We
  821.   should send them thank-you notes if they do it right.  They configure
  822.   both the PCI and ISA buses, but it has been claimed that some older
  823.   BIOSs can only do the PCI.  To try to find out more about your BIOS,
  824.   look on the Web.  Please don't ask me as I don't have data on this.
  825.   The details of the BIOS that you would like to know about may be hard
  826.   to find (or not available).  Some BIOSs may have minimal PnP
  827.   capabilities and try to turn over the difficult parts of the
  828.   configuration task to Window utilities.  If this happens you'll either
  829.   have to find another method (such as isapnptools) or try to set up the
  830.   ESCD database if the BIOS has one.  See the next section.
  831.  
  832.  
  833.   5.3.2.  The BIOS's ESCD Database
  834.  
  835.   The BIOS's maintains a non-volatile database containing a PnP-
  836.   configuration that it will try to use.  It's called the ESCD (Extended
  837.   System Configuration Data).  Again, the provision of ESCD is optional
  838.   but most PnP-BIOSs have it.  The ESCD not only stores the resource-
  839.   configuration of PnP devices but also stores configuration information
  840.   of non-PnP devices (and marks them as such) so as to avoid conflicts.
  841.   The ESCD data is usually saved on a chip and remains intact when the
  842.   power is off, but sometimes it's put on a hard-drive??
  843.  
  844.   The ESCD is intended to hold the last used configuration, but if you
  845.   use a program such as Linux's isapnp or pci utilities (which doesn't
  846.   update the ESCD) then the ESCD will not know about what isapnp has
  847.   set.  A good PnP OS might update the ESCD so you can use it later on
  848.   for a non-PnP OS (like standard Linux).  Windows may do this in some
  849.   cases.  See ``Using Windows to set ESCD''.
  850.  
  851.   To use what's set in ESCD be sure you've set "Not a PnP OS" or the
  852.   like in the BIOS.  Then each time the BIOS starts up (before the Linux
  853.   OS is loaded) it should configure things this way.  If the BIOS
  854.   detects a new PnP card which is not in the ESCD, then it must then
  855.   allocate resources to the card and update the ESCD.  It may even have
  856.   to change the resources assigned to existing PnP cards and modify ESCD
  857.   accordingly.
  858.  
  859.   If devices saved their last configuration in their hardware, hardware
  860.   configuring wouldn't be needed each time you start your PC.  But it
  861.   doesn't work this way so all the ESCD data needs to be kept correct if
  862.   you use the BIOS for PnP.  There are some BIOSs that don't have an
  863.   ESCD but do have some non-volatile memory to store info on which
  864.   resources have been reserved for use by non-PnP cards.  Many BIOSs
  865.   have both.
  866.  
  867.  
  868.   5.3.3.  Using Windows to set ESCD
  869.  
  870.   If the BIOS doesn't set up the ESCD the way you want it (or the way it
  871.   should be) then it would be nice to have a Linux utility to set the
  872.   ESCD.  As of early 1999 there isn't any.  Thus one may resort to
  873.   attempting to use Windows (if you have it on the same PC) to do this.
  874.  
  875.   There are two ways to use Windows to try to set/modify the ESCD.  One
  876.   way is to use the ICU utility designed for DOS or Windows 3.x.  It
  877.   should also work OK for Windows 9x/2k ??  Another way is to set up
  878.   devices manually ("forced") under Windows 9x/2k so that Windows will
  879.   put this info into the ESCD when Windows is shut down normally.  If
  880.   devices are configured automatically by Windows (without the user
  881.   telling it to "change setting") the setting will probably not make it
  882.   into the ESCD ??  Of course Windows may well decide on its own to
  883.   configure the same as what is set in the ESCD so they could wind up
  884.   being the same by coincidence.
  885.  
  886.   Windows 9x are PnP operating systems and automatically PnP-configure
  887.   devices.  They maintain their own PnP-database deep down in the
  888.   Registry (stored in binary Windows files).  There is also a lot of
  889.   other configuration stuff in the Registry besides PnP-resources.
  890.   There is both a current PnP resource configuration in memory and
  891.   another (perhaps about the same) stored on the hard disk.  To look at
  892.   (the one in memory?) in Windows98 you use the Device Manager, select a
  893.   device (sometimes a multi-step process if there are a few devices of
  894.   the same class), then click on Properties and then on Resources.  To
  895.   change the configuration manually click on  Change Setting.  This
  896.   should put your change into the ESCD.  In Windows98 There are 2 ways
  897.   to get to the Device Manager: 1. Control Panel --> System Properties
  898.   --> Device Manager.  2. My Computer --> Properties --> Device Manager.
  899.  
  900.  
  901.   5.3.4.  Adding a New Device (under Linux or Windows)
  902.  
  903.   If you add a new PnP device and have the BIOS set to "not a PnP OS",
  904.   then the BIOS should automatically configure it and store the
  905.   configuration in ESCD.  If it's a non-PnP legacy device (or one made
  906.   that way by jumpers, etc.) then there are a few options to handle it.
  907.  
  908.   You may be able to tell the BIOS directly (via the CMOS setup menus)
  909.   that certain resources it uses (such as IRQs) are reserved and are not
  910.   to be allocated by PnP.  This does not put this info into the ESCD.
  911.   But there may be a BIOS menu selection as to whether or not to have
  912.   these CMOS choices override what may be in the ESCD in case of
  913.   conflict.  Another method is to run ICU under DOS/Windows.  Still
  914.   another is to install it manually under Windows 9x/2k.  Since this
  915.   configuration is "forced" Windows should update the ESCD when you shut
  916.   down the PC.
  917.  
  918.  
  919.   5.4.  Isapnp (part of isapnptools)
  920.  
  921.   Unfortunately, much of the documentation for isapnp is still difficult
  922.   to understand unless you know the basics of PnP.  This HOWTO should
  923.   help you understand it as well the FAQ that comes with it.  isapnp is
  924.   only for PnP devices on the ISA bus (non-PCI).  Running the Linux
  925.   program "isapnp" at boot-time will configure such devices to the
  926.   resource values you set in /etc/isapnp.conf.  Its possible to create
  927.   this configuration file automatically but you then must edit it
  928.   manually to chose between various options.  With isapnp, a device
  929.   driver which is part of the kernel may run too early before isapnp has
  930.   set the address, etc. in the hardware.  This results in the device
  931.   driver not being able to find the device.  The driver trys the right
  932.   address but the address hasn't been set yet in the hardware.
  933.  
  934.   If your Linux distribution automatically installed isapnptools, isapnp
  935.   may already be running at startup.  In this case, all you need to do
  936.   is to edit /etc/isapnp.conf per "man isapnp.conf".  Note that this is
  937.   like manually configuring PnP since you make the decisions as to how
  938.   to configure as you edit the configuration file.  You can use the
  939.   program "pnpdump" to help create the configuration file.  If you use
  940.   "isapnp" like this and have a PnP BIOS, you should probably tell the
  941.   BIOS (when you set it up) that you don't have a PnP OS since you still
  942.   want the BIOS to configure the PCI devices.  While the BIOS may also
  943.   configure the ISA devices, isapnp will redo it.
  944.  
  945.  
  946.   5.5.  PCI Utilities
  947.  
  948.   The new package PCI Utilities (= pciutils, incorrectly called
  949.   "pcitools"), should let you manually PnP-configure the PCI bus.
  950.   "lspci" lists resources while "setpci" sets resource allocations in
  951.   the hardware devices.
  952.  
  953.  
  954.   5.6.  Patch the Kernel to Make Linux PnP
  955.  
  956.   David Howells has created a patch to do this called "Linux Kernel
  957.   Configuration/Resource Manager" (sometimes just called Configuration
  958.   Manager).  It may be hard to locate and may not be against the most
  959.   recent kernel.  The resulting kernel is is claimed to be stable but
  960.   bugs have been reported.  It includes documentation: serial.txt to
  961.   show how to deal with the serial port.  It provides "files" in the
  962.   /proc tree so that you can see what is going on and can echo commands
  963.   into one of these files for custom configuration.  One problem is that
  964.   most device drivers don't know about it so that you still may have to
  965.   use the traditional configuration files, etc. for configuration.  See
  966.   <http://www.astarte.free-online.co.uk>
  967.  
  968.  
  969.   5.7.  Windows Configures
  970.  
  971.   If you have Windows9x (or 2k) on the same PC, then just start Windows
  972.   and let it configure PnP.  Then start Linux from Windows (or DOS).  It
  973.   been reported that Windows erased the IRQs from PCI devices registers.
  974.   Then Linux complained that it found a zero IRQ.  Thus you may not be
  975.   able to use this method.
  976.  
  977.  
  978.   5.8.  PnP Software/Documents
  979.  
  980.  
  981.   ╖  Isapnptools homepage
  982.      <http://www.roestock.demon.com.uk/isapnptools/>
  983.  
  984.   ╖  Patch to  make the Linux kernel PnP <http://www.astarte.free-
  985.      online.co.uk>
  986.  
  987.   ╖  PnP driver project <http://www.io.com/~cdb/mirrors/lpsg/pnp-
  988.      linux.html>
  989.  
  990.  
  991.   ╖  PnP Specs. from Microsoft
  992.      <http://www.microsoft.com/hwdev/respec/pnpspecs.htm>
  993.  
  994.   ╖  Book: PCI System Architecture, 3rd ed. by Tom Shanley +, MindShare
  995.      1995.  Covers PnP-like features on the PCI bus.
  996.  
  997.   ╖  Book: Plug and Play System Architecture, by Tom Shanley, Mind Share
  998.      1995.  Details of PnP on the ISA bus.  Only a terse overview of PnP
  999.      on the PCI bus.
  1000.  
  1001.  
  1002.   6.  What Is My Current Configuration?
  1003.  
  1004.   Here "configuration" means the assignment of PnP resources (addresses,
  1005.   IRQs, and DMAs).  There are two parts to this question for each
  1006.   device.  Each part should have the same answer.
  1007.  
  1008.   1. What is the configuration of the device driver software?  I.e.:
  1009.      What does the driver think the hardware configuration is?
  1010.  
  1011.   2. What configuration (if any) is set in the device hardware?
  1012.  
  1013.   Of course the configuration of the device hardware and its driver
  1014.   should be the same (and it normally is).  But if things are not
  1015.   working right, there may be a difference.  This means the the driver
  1016.   has incorrect information about the actually configuration of the
  1017.   hardware.  This spells trouble.  If the software you use doesn't
  1018.   adequately tell you what's wrong (or automatically configure it
  1019.   correctly) then you need to investigate how your hardware devices and
  1020.   their drivers are configured.  While Linux device drivers should "tell
  1021.   all" in some cases it's not easy to determine what has been set in the
  1022.   hardware.
  1023.  
  1024.   Another problem is that when you view configuration messages on the
  1025.   screen, it's sometimes not clear whether the reported configuration is
  1026.   that of the device driver, the device hardware, or both.  If the
  1027.   device driver is assigned a configuration and then checks the hardware
  1028.   out to see if it's configured the same, then the configuration
  1029.   reported by the driver should be that of both the hardware and the
  1030.   driver.
  1031.  
  1032.   But some drivers don't do this may accept a configuration that doesn't
  1033.   check out.  For example, "setserial" will accept a configuration that
  1034.   doesn't check out (even if you've told it to probe for resources).
  1035.   Thus "setserial" may only be telling you the configuration of the
  1036.   driver and not the hardware.
  1037.  
  1038.   Some info on configuration may be obtained from the messages from the
  1039.   BIOSs and Linux that appear on the screen when you first start the
  1040.   computer.  After all the  messages have flashed by, type shift-PageUp
  1041.   to scroll back to them.  Typing "dmesg" at any time to the shell
  1042.   prompt will show only the Linux kernel messages and miss some of the
  1043.   most important ones (including ones from the BIOS).  The messages from
  1044.   Linux may sometimes only show what the device driver thinks the
  1045.   configuration is, perhaps as told it via an incorrect configuration
  1046.   file.  The BIOS messages will show the actual hardware configuration
  1047.   at that time, but a PnP OS, isapnp, or pci utilities, may have changed
  1048.   it since then.
  1049.  
  1050.  
  1051.   6.1.  How Are My Device Drivers Configured?
  1052.  
  1053.   There may be a programs you can run from the command line (such as
  1054.   "setserial" for serial ports) to determine this.   The /proc directory
  1055.   tree is useful.  /proc/ioports shows the I/O addresses that the
  1056.   drivers use (or try if it's wrong).  They might not be set this way in
  1057.   hardware.
  1058.  
  1059.   /proc/interrupts shows only interrupts currently in use and many that
  1060.   have been allocated to drivers don't show at all since they're not
  1061.   currently being used.  For example, even though your floppy drive has
  1062.   a floppy disk in it and is ready to use, the interrupt for it will not
  1063.   show unless its in use.  Again, just because an interrupt shows up
  1064.   here doesn't mean that it exists in the hardware.  A clue that it
  1065.   doesn't exist in hardware will be if it shows that 0 interrupts have
  1066.   been issued by this interrupt.  Even if it shows some interrupts have
  1067.   been issued, it may mean that this interrupt doesn't exist on that
  1068.   device does exist on some other device which is not in use, but which
  1069.   somehow has issued an interrupt or two.  As of kernel 2.2 the /proc
  1070.   tree has changed.
  1071.  
  1072.  
  1073.   6.2.  How Are My Hardware Devices Configured?
  1074.  
  1075.   It's easy to find out what resources have been assigned to devices on
  1076.   the PCI bus: Just look at /proc/pci or /proc/bus/pci/devices (in
  1077.   kernel 2.2+).  For the ISA bus you may try running pnpdump --dumpregs
  1078.   but it's not a sure thing.  The results may be difficult to decipher.
  1079.   Don't confuse the read-port address which pnpdump "trys" (and finds
  1080.   something there) with the I/O address of the found device.  They are
  1081.   not the same.
  1082.  
  1083.   Messages from the BIOS at boot-time tell you how the hardware
  1084.   configuration was then.  If you rely on the BIOS for configuring, then
  1085.   it should still be the same.  Messages from Linux may be from drivers
  1086.   that have checked to see that the hardware is there (and possibly
  1087.   checked the IRQ and DMA).  Of course, if the device works fine, then
  1088.   it's likely configured the same as the driver.
  1089.  
  1090.  
  1091.   7.  Appendix
  1092.  
  1093.   7.1.  Addresses
  1094.  
  1095.   There are three types of addresses: main memory addresses, I/O
  1096.   addresses and configuration addresses.  On the PCI bus, configuration
  1097.   addresses constitute a separate address space just like I/O addresses
  1098.   do.  Except for the complicated case of ISA configuration addresses,
  1099.   whether or not an address on the bus is a memory address, I/O address,
  1100.   or configuration address depends only on the voltage on other wires
  1101.   (traces) of the bus.
  1102.  
  1103.  
  1104.   7.1.1.  ISA Bus Configuration Address (Read-Port etc.)
  1105.  
  1106.   For the ISA bus, there is technically no configuration address space,
  1107.   but there is a special way for the CPU to access PnP configuration
  1108.   registers on the PnP cards.  For this purpose 3 @ I/O addresses are
  1109.   allocated.  This is not 3 addresses for each card but 3 addresses
  1110.   shared by all cards.
  1111.  
  1112.   These 3 addresses are named read-port, write-port, and address-port.
  1113.   Each port is just one byte in size.  Each PnP card has many
  1114.   configuration registers so that just 3 addresses are not even
  1115.   sufficient for these registers on a single card.  To communicate with
  1116.   a certain card, a specially-assigned card number (handle) is sent to
  1117.   all cards at the write-port address.  After that only that the only
  1118.   card still listening is the card with this handle.  Then the address
  1119.   of the configuration register (of that card) is sent to the address-
  1120.   port (of all cards --but only one is listening).  Next communication
  1121.   takes place with one configuration register on that card by either
  1122.   doing a read on the read-port or a write on the write-port.
  1123.   The write-port is always at A79 and the address-port is always at 279
  1124.   (hex).  But the read-port is not fixed but is set by the configuration
  1125.   software at some address that will supposedly not conflict with any
  1126.   other ISA card.  If there is a conflict, it will change the address.
  1127.   All PnP cards get "programmed" with this address.  Thus if you use say
  1128.   isapnp to set or check configuration data it must determine this read-
  1129.   port address.
  1130.  
  1131.  
  1132.   7.1.2.  Address ranges
  1133.  
  1134.   The term "address" is sometimes used in this document to mean a
  1135.   contiguous range of addresses.  Since addresses are given in bytes, a
  1136.   single address only contains one byte but I/O (and main memory)
  1137.   addresses need more than this.  So a range of say 8 bytes is often
  1138.   used for I/O address while the range for main memory addresses
  1139.   allocated to a device is much larger.  For a serial port (an I/O
  1140.   device) it's sufficient to give the starting I/O address of the device
  1141.   (such as 3F8) since it's well known that the range of addresses for
  1142.   serial port is only 8 bytes.  The starting address is known as the
  1143.   "base address".
  1144.  
  1145.  
  1146.   7.1.3.  Address space
  1147.  
  1148.   For ISA, to access both I/O and (main) memory address "spaces" the
  1149.   same address bus is used (the wires used for the address are shared).
  1150.   How does the device know whether or not an address which appears on
  1151.   the address bus is a memory address or I/O address?  Well, there are 4
  1152.   dedicated wires on the bus that convey this information and more.  If
  1153.   a certain one of these 4 wires is asserted, it says that the CPU wants
  1154.   to read from an I/O address, and the main memory ignores the address
  1155.   on the bus.  The other 3 wires serve similar purposes.  In summary:
  1156.   Read and write wires exist for both main memory and I/O addresses (4
  1157.   wires in all).
  1158.  
  1159.   For the PCI bus it's the same basic idea also using 4 wires but it's
  1160.   done a little differently.  Instead of only one or the four wires
  1161.   being asserted, a binary number is put on the wires (16 different
  1162.   possibilities).  Thus more info may be conveyed.   Four of these 16
  1163.   numbers serve the I/O and memory spaces as in the above paragraph.  In
  1164.   addition there is also configuration address space which uses up two
  1165.   more numbers.  Ten extra numbers are left over for other purposes.
  1166.  
  1167.  
  1168.   7.1.4.  Range Check (ISA Testing for IO Address Conflicts)
  1169.  
  1170.   On the ISA bus, there's a method built into each PnP card for checking
  1171.   that there are no other cards that use the same address.  If two or
  1172.   more cards use the same IO address, neither card is likely to work
  1173.   right (if at all).  Good PnP software should assign resources so as to
  1174.   avoid this conflict, but even in this case a legacy card might be
  1175.   lurking somewhere with the same address.
  1176.  
  1177.   The test works by a card putting a test number it's own IO registers.
  1178.   Then the PnP software reads it and verifies that it reads the same
  1179.   test number.  If not, something is wrong (such as another card with
  1180.   the same address.  It repeats the same test with another test number.
  1181.   Since it actually checks the range of IO addresses assigned to the
  1182.   card, it's called a "range check".  It could be better called an
  1183.   address-conflict test.  If there is an address conflict you get an
  1184.   error message and need to resolve it yourself.
  1185.  
  1186.  
  1187.  
  1188.  
  1189.   7.1.5.  Communicating Directly via Memory
  1190.  
  1191.   Traditionally, most I/O devices used only I/O memory to communicate
  1192.   with the CPU.  For example, the serial port does this.  The device
  1193.   driver, running on the CPU would read and write data to/from the I/O
  1194.   address space and main memory.  A faster way would be for the device
  1195.   itself to put the data directly into main memory.  One way to do this
  1196.   is by using ``DMA Channels'' or bus mastering.  Another way is to
  1197.   allocate some space in main memory to the device.  This way the device
  1198.   reads and writes directly to main memory without having to bother with
  1199.   DMA or bus mastering.  Such a device may also use IO addresses.
  1200.  
  1201.  
  1202.   7.2.  Interrupts --Details
  1203.  
  1204.   Interrupts convey a lot of information but only indirectly.  The
  1205.   interrupt signal (a voltage on a wire) just tells a chip called the
  1206.   interrupt controller that a certain device needs attention.  The
  1207.   interrupt controller then signals the CPU.  The CPU find the driver
  1208.   for this device and runs a part of it known as an "interrupt service
  1209.   routine" (or "interrupt handler").  This "routine" tries to find out
  1210.   what has happened and then deals with the problem such a transferring
  1211.   bytes from (or to) the device.   This program (routine) can easily
  1212.   find out what has happened since the device has registers at addresses
  1213.   known to the the driver software (provided the IRQ number and the I/O
  1214.   address of the device has been set correctly).  These registers
  1215.   contain status information about the device .  The software reads the
  1216.   contents of these registers and by inspecting the contents, finds out
  1217.   what happened, and takes appropriate action..
  1218.  
  1219.   Thus each device driver needs to know what interrupt number (IRQ) to
  1220.   listen to.  On the PCI bus (and for the serial ports on the ISA bus
  1221.   starting with Kernel 2.2) it's possible for two (or more) devices to
  1222.   share the same IRQ number.  When such an interrupt is issued, the CPU
  1223.   runs all interrupt service routines for all devices using that
  1224.   interrupt.  The first thing the first service routine does is to check
  1225.   to see if an interrupt actually happened for its device.  If there was
  1226.   no interrupt (false alarm) it likely will exit and the next service
  1227.   routine starts, etc.
  1228.  
  1229.  
  1230.   7.3.  PCI Interrupts
  1231.  
  1232.   PCI interrupts are different but since they are normally mapped to
  1233.   IRQ's they behave in about the same way.  A major difference is that
  1234.   PCI interrupts may be shared.  For example IRQ5 may be shared between
  1235.   two PCI devices.  This sharing ability is automatic: you don't need
  1236.   special hardware or software.  There have been some reports of
  1237.   situations where such sharing didn't work, but it's likely due to a
  1238.   defect in the device driver software.  All device drivers for PCI
  1239.   devices are supposed to provide for interrupt sharing.  Note that you
  1240.   can't share the same interrupt between the PCI and ISA bus.  However,
  1241.   illegal sharing will work provided the devices which are in conflict
  1242.   are not in use at the same time.  "In use" here means that a program
  1243.   is running which "opened" the device in it's C programming code.
  1244.  
  1245.   You may need to know some of the details of the PCI interrupt system
  1246.   in order to set up the BIOS's CMOS or to set jumpers on old PCI cards.
  1247.   Each PCI card has 4 possible interrupts: INTA#, INTB#, INTC#, INTD#.
  1248.   Thus for a 7-slot system there could be 7 x 4 = 28  different
  1249.   interrupt lines.  But the specs permit a fewer number of interrupt
  1250.   lines.  This is not too restrictive since interrupts may be shared.
  1251.   Many PCI buses seem to be made with only 4 interrupt lines.  Call
  1252.   these lines (wires or traces) W, X, Y, Z.  Suppose we designate the B
  1253.   interrupt from slot 3 as interrupt 3B.  Then wire W could be used to
  1254.   share interrupts 1A, 2B, 3C, 4D, 5A, 6B, 7C.  This is done by
  1255.   physically connecting wire W to wires 1A, 2B, etc.  Likewise wire X
  1256.   could be connected to wires 1B, 2C, 3D, 4A, 5B, 6C, 7D.  Then on
  1257.   startup, the BIOS maps the X, W, Y, Z to IRQ's.  After that it writes
  1258.   the IRQ that each device is mapped to into a hardware register in each
  1259.   device.  Then and anything interrogating the device can find out what
  1260.   IRQ it uses.
  1261.  
  1262.   The above mentioned wires X, W, Y, Z  are labeled per PCI specs as
  1263.   INTA#, INTB#, INTC# and INTD#.  This official PCI notation is
  1264.   confusing since now INTA# has 2 possible meanings depending on whether
  1265.   we are talking about a slot or the PCI bus.  For example, if 3C is
  1266.   mapped to X then we say that INTC# of slot 3 is cabled to INTA# (X) of
  1267.   the PCI bus.  Confusing notation.
  1268.  
  1269.   There's another requirement also.  A PCI slot must use the lower
  1270.   interrupt letters first.  Thus if a slot only uses one interrupt, it
  1271.   must be INTA#.  If it uses 2 interrupts they must be INTA# and INTB#,
  1272.   etc.  A card in a slot may have up to 8 devices on it but there are
  1273.   only 4 PCI interrupts for it.  This is OK since interrupts may be
  1274.   shared so that each of the 8 devices (if they exist) can have an
  1275.   interrupt.  The PCI interrupt letter of a device is often fixed and
  1276.   hardwired into the device.
  1277.  
  1278.   The BIOS assigns IRQs (interrupts) so as to avoid conflicts with the
  1279.   IRQs it knows about on the ISA bus.  Sometimes in the CMOS BIOS menu
  1280.   one may assign IRQs to PCI cards (but it's not simple as explained
  1281.   above).  There's a situation where Windows zeroed out all the IRQ
  1282.   numbers in the PCI cards after the IRQ mappings had been set.  Then
  1283.   someone running Windows booted Linux from Windows with the result that
  1284.   Linux only found only incorrect IRQs of zero.
  1285.  
  1286.   You might reason that since the PCI is using IRQ's (ISA bus) it might
  1287.   be slow, etc.  Not really.  The ISA Interrupt Controller Chip(s) has a
  1288.   direct interrupt wire going to the CPU so it can get immediate
  1289.   attention.  While signals on the ISA address and data buses need to go
  1290.   thru the PCI bus to get to the CPU, the IRQ interrupt signals go there
  1291.   almost directly.
  1292.  
  1293.  
  1294.   7.4.  Isolation
  1295.  
  1296.   This is only for the ISA bus.  Isolation is a complex method of
  1297.   assigning a temporary handle (id number or Card Select Number = CSN)
  1298.   to each PnP device on the ISA bus.  Since there are more efficient
  1299.   (but more complex) ways to do this, some might claim that it's a
  1300.   simple method.  Only one write address is used for PnP writes to all
  1301.   PnP devices so that writing to this address goes to all PnP device
  1302.   that are listening.  This write address is used to send (assign) a
  1303.   unique handle to each PnP device.  To assign this handle requires that
  1304.   only one device be listening when the handle is sent (written) to this
  1305.   common address.  All PnP devices have a unique serial number which
  1306.   they use for the process of isolation.  Doing isolation is something
  1307.   like a game.  It's done using the equivalent of just one common bus
  1308.   wire connecting all PnP devices and the isolation program.
  1309.  
  1310.   For the first round of the "game" all PnP devices listen on this wire
  1311.   and send out simultaneously a sequence of bits to the wire.  The
  1312.   allowed bits are either a 1 (positive voltage) or an "open 0" of no
  1313.   voltage (open circuit or tri-state).  Each PnP device just starts to
  1314.   sequentially send out its serial number, bit-by-bit, starting with the
  1315.   high-order bit, on this wire.  If any device sends a 1, a 1 will be
  1316.   heard on the wire by all other devices.  If all devices send an "open
  1317.   0" nothing will be heard on the wire.  The object is to eliminate (by
  1318.   the end of this first round) all but highest serial number device.
  1319.   "Eliminate" means to cease to listen anymore to the write address that
  1320.   all devices still in the game are still listening to.  This is also
  1321.   called "dropping out".  (Note that all serial numbers are of the same
  1322.   length.)
  1323.  
  1324.   First consider only the high order bit of the serial number which is
  1325.   put on the wire first by all devices which have no handle yet.  If any
  1326.   PnP device sends out a 0 (open 0) but hears a 1, this means that some
  1327.   other PnP device has a higher serial number, so it temporarily drops
  1328.   out of this round and doesn't listen anymore until the round is
  1329.   finished (when a handle is assigned to the winner: the highest serial
  1330.   number).  Now the devices still in the game all have the same leading
  1331.   digit (a 1) so we may strip off this digit and consider only the
  1332.   resulting "stripped serial number" for future participation in this
  1333.   round.  Then go to the start of this paragraph and repeat until the
  1334.   entire serial number has been examined for each device (see below for
  1335.   the all-0 case).
  1336.  
  1337.   Thus it's clear that the highest serial number will not be eliminated
  1338.   from the game.  But what happens if the leading digits (of the
  1339.   possibly stripped serial numbers) are all 0?  In this case an "open 0"
  1340.   is sent on the line and all participants stay in the game.  If they
  1341.   all have a leading 0 then this is a tie and the 0's are stripped off
  1342.   just like the 1's were in the above paragraph.  The game then
  1343.   continues as the next digit (of the serial number) is sent out.
  1344.  
  1345.   At the end of the round (after the low-order bit of the serial number
  1346.   has been sent out by whatever participants remain) only one PnP device
  1347.   with the highest serial number remains.  It then gets assigned a
  1348.   handle and drops out of the game permanently.  Then all the dropouts
  1349.   from the last round (that don't have a handle yet) reenter the game
  1350.   and a new round begins with one less participant.  Eventually, all PnP
  1351.   devices are assigned handles.  It's easy to prove that this algorithm
  1352.   works.
  1353.  
  1354.   Once all handles are assigned, they are used to address each PnP
  1355.   device and send it a configuration as well as to read configuration
  1356.   info from the PnP device.  Note that these handles are only used for
  1357.   PnP configuration and are not used for normal communication with the
  1358.   PnP device.  When the computer starts up, all of the handles are lost
  1359.   so that a PnP BIOS usually does the isolation process again each time
  1360.   you start your PC.
  1361.  
  1362.   END OF Plug-and-Play-HOWTO
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.