
               -=< The IBM Microchannel SCSI-Subsystem >=-
	       
	                 for the IBM PS/2 series
		 
	  	   Low Level Software-Driver for Linux
		 
     Copyright (c) 1995 Strom Systems, Inc. under the terms of the GNU 
  General Public License. Originally written by Martin Kolinek, December 1995.
   Officially modified and maintained by Michael Lang since January 1999.
	   
 	                       Version 4.0a
	
   Last update: January 3, 2001
   
   Before you Start
   ----------------
   This is the common README.ibmmca file for all driver releases of the 
   IBM MCA SCSI driver for Linux. Please note, that driver releases 4.0
   or newer do not work with kernel versions older than 2.4.0, while driver
   versions older than 4.0 do not work with kernels 2.4.0 or later! If you
   try to compile your kernel with the wrong driver source, the 
   compilation is aborted and you get a corresponding error message. This is
   no bug in the driver. It prevents you from using the wrong sourcecode
   with the wrong kernel version.

   Authors of this Driver
   ----------------------
    - Chris Beauregard (improvement of the SCSI-device mapping by the driver)
    - Martin Kolinek (origin, first release of this driver)
    - Klaus Kudielka (multiple SCSI-host management/detection, adaption to
                      Linux Kernel 2.1.x, module support)
    - Michael Lang (assigning original pun/lun mapping, dynamical ldn
                    assignment, rewritten adapter detection, this file, 
		    patches, official driver maintenance and subsequent 
		    debugging, related with the driver)

   Table of Contents
   -----------------
   1 Abstract
   2 Driver Description
     2.1  IBM SCSI-Subsystem Detection
     2.2  Physical Units, Logical Units, and Logical Devices
     2.3  SCSI-Device Recognition and dynamical ldn Assignment
     2.4  SCSI-Device Order
     2.5  Regular SCSI-Command-Processing
     2.6  Abort & Reset Commands
     2.7  Disk Geometry
     2.8  Kernel Boot Option
     2.9  Driver Module Support
     2.10 Multiple Hostadapter Support
     2.11 /proc/scsi-Filesystem Information
     2.12 /proc/mca-Filesystem Information
     2.13 Supported IBM SCSI-Subsystems
     2.14 Linux Kernel Versions
   3 Code History
   4 To do
   5 Users' Manual
     5.1 Commandline Parameters
     5.2 Troubleshooting
     5.3 Bugreports
     5.4 Support WWW-page
   6 References
   7 Credits to
     7.1 People
     7.2 Sponsors & Supporters
   8 Trademarks
   9 Disclaimer

                              * * *

   1 Abstract
   ----------
   This README-file describes the IBM SCSI-subsystem low level driver for 
   Linux. The descriptions which were formerly kept in the source-code have 
   been taken out to this file to easify the codes' readability. The driver 
   description has been updated, as most of the former description was already
   quite outdated. The history of the driver development is also kept inside 
   here. Multiple historical developments have been summarized to shorten the 
   textsize a bit. At the end of this file you can find a small manual for 
   this driver and hints to get it running on your machine.

   2 Driver Description
   --------------------
   2.1 IBM SCSI-Subsystem Detection
   --------------------------------
   This is done in the ibmmca_detect() function. It first checks, if the
   Microchannel-bus support is enabled, as the IBM SCSI-subsystem needs the
   Microchannel. In a next step, a free interrupt is chosen and the main
   interrupt handler is connected to it to handle answers of the SCSI-
   subsystem(s). If the F/W SCSI-adapter is forced by the BIOS to use IRQ11
   instead of IRQ14, IRQ11 is used for the IBM SCSI-2 F/W adapter. In a 
   further step it is checked, if the adapter gets detected by force from
   the kernel commandline, where the I/O port and the SCSI-subsystem id can 
   be specified. The next step checks if there is an integrated SCSI-subsystem
   installed. This register area is fixed through all IBM PS/2 MCA-machines 
   and appears as something like a virtual slot 10 of the MCA-bus. On most
   PS/2 machines, the POS registers of slot 10 are set to 0xff or 0x00 if not
   integrated SCSI-controller is available. But on certain PS/2s, like model 
   9595, this slot 10 is used to store other information which at earlier
   stage confused the driver and resulted in the detection of some ghost-SCSI. 
   If POS-register 2 and 3 are not 0x00 and not 0xff, but all other POS
   registers are either 0xff or 0x00, there must be an integrated SCSI-
   subsystem present and it will be registered as IBM Integrated SCSI-
   Subsystem. The next step checks, if there is a slot-adapter installed on 
   the MCA-bus. To get this, the first two POS-registers, that represent the 
   adapter ID are checked. If they fit to one of the ids, stored in the 
   adapter list, a SCSI-subsystem is assumed to be found in a slot and will be 
   registered. This check is done through all possible MCA-bus slots to allow 
   more than one SCSI-adapter to be present in the PS/2-system and this is 
   already the first point of problems. Looking into the technical reference 
   manual for the IBM PS/2 common interfaces, the POS2 register must have 
   different interpretation of its single bits to avoid overlapping I/O
   regions. While one can assume, that the integrated subsystem has a fix 
   I/O-address at 0x3540 - 0x3547, further installed IBM SCSI-adapters must 
   use a different I/O-address. This is expressed by bit 1 to 3 of POS2 
   (multiplied by 8 + 0x3540). Bits 2 and 3 are reserved for the integrated 
   subsystem, but not for the adapters! The following list shows, how the 
   bits of POS2 and POS3 should be interpreted.
   
   The POS2-register of all PS/2 models' integrated SCSI-subsystems has the 
   following interpretation of bits:
                           Bit 7 - 4 : Chip Revision ID (Release)
                           Bit 3 - 2 : Reserved
                           Bit 1     : 8k NVRAM Disabled
                           Bit 0     : Chip Enable (EN-Signal)
   The POS3-register is interpreted as follows (for most IBM SCSI-subsys.):
                           Bit 7 - 5 : SCSI ID
                           Bit 4 - 0 : Reserved = 0
   The slot-adapters have different interpretation of these bits. The IBM SCSI
   adapter (w/Cache) and the IBM SCSI-2 F/W adapter use the following
   interpretation of the POS2 register:
                           Bit 7 - 4 : ROM Segment Address Select
			   Bit 3 - 1 : Adapter I/O Address Select (*8+0x3540)
			   Bit 0     : Adapter Enable (EN-Signal)
   and for the POS3 register:
                           Bit 7 - 5 : SCSI ID 
			   Bit 4     : Fairness Enable (SCSI ID3 f. F/W)
			   Bit 3 - 0 : Arbitration Level
   The most modern product of the series is the IBM SCSI-2 F/W adapter, it 
   allows dual-bus SCSI and SCSI-wide addressing, which means, PUNs may be
   between 0 and 15. Here, Bit 4 is the high-order bit of the 4-bit wide
   adapter PUN expression. In short words, this means, that IBM PS/2 machines 
   can only support 1 single integrated subsystem by default. Additional
   slot-adapters get ports assigned by the automatic configuration tool.

   One day I found a patch in ibmmca_detect(), forcing the I/O-address to be 
   0x3540 for integrated SCSI-subsystems, there was a remark placed, that on 
   integrated IBM SCSI-subsystems of model 56, the POS2 register was showing 5.
   This means, that really for these models, POS2 has to be interpreted
   sticking to the technical reference guide. In this case, the bit 2 (4) is 
   a reserved bit and may not be interpreted. These differences between the 
   adapters and the integrated controllers are taken into account by the 
   detection routine of the driver on from version >3.0g. 

   Every time, a SCSI-subsystem is discovered, the ibmmca_register() function
   is called. This function checks first, if the requested area for the I/O-
   address of this SCSI-subsystem is still available and assigns this I/O-
   area to the SCSI-subsystem. There are always 8 sequential I/O-addresses
   taken for each individual SCSI-subsystem found, which are:
   
     Offset            Type                  Permissions
       0     Command Interface Register 1    Read/Write
       1     Command Interface Register 2    Read/Write
       2     Command Interface Register 3    Read/Write
       3     Command Interface Register 4    Read/Write
       4     Attention Register              Read/Write
       5     Basic Control Register          Read/Write
       6     Interrupt Status Register       Read
       7     Basic Status Register           Read
   
   After the I/O-address range is assigned, the host-adapter is assigned
   to a local structure which keeps all adapter information needed for the
   driver itself and the mid- and higher-level SCSI-drivers. The SCSI pun/lun
   and the adapters' ldn tables are initialized and get probed afterwards by
   the check_devices() function. If no further adapters are found, 
   ibmmca_detect() quits.
   
   2.2 Physical Units, Logical Units, and Logical Devices
   ------------------------------------------------------
   There can be up to 56 devices on the SCSI bus (besides the adapter):
   there are up to 7 "physical units" (each identified by physical unit 
   number or pun, also called the scsi id, this is the number you select
   with hardware jumpers), and each physical unit can have up to 8 
   "logical units" (each identified by logical unit number, or lun, 
   between 0 and 7). The IBM SCSI-2 F/W adapter offers this on up to two
   busses and provides support for 30 logical devices at the same time, where
   in wide-addressing mode you can have 16 puns with 32 luns on each device.
   This section dexribes you the handling of devices on non-F/W adapters.
   Just imagine, that you can have 16 * 32 = 512 devices on a F/W adapter
   which means a lot of possible devices for such a small machine.

   Typically the adapter has pun=7, so puns of other physical units
   are between 0 and 6(15). On a wide-adapter a pun higher than 7 is
   possible, but is normally not used. Almost all physical units have only 
   one logical unit, with lun=0. A CD-ROM jukebox would be an example of a 
   physical unit with more than one logical unit.

   The embedded microprocessor of the IBM SCSI-subsystem hides the complex
   two-dimensional (pun,lun) organization from the operating system.
   When the machine is powered-up (or rebooted), the embedded microprocessor 
   checks, on its own, all 56 possible (pun,lun) combinations, and the first 
   15 devices found are assigned into a one-dimensional array of so-called 
   "logical devices", identified by "logical device numbers" or ldn. The last 
   ldn=15 is reserved for the subsystem itself. Wide adapters may have 
   to check up to 15 * 8 = 120 pun/lun combinations.
   
   2.3 SCSI-Device Recognition and Dynamical ldn Assignment
   --------------------------------------------------------
   One consequence of information hiding is that the real (pun,lun)    
   numbers are also hidden. The two possibilities to get around this problem
   is to offer fake pun/lun combinations to the operating system or to 
   delete the whole mapping of the adapter and to reassign the ldns, using
   the immediate assign command of the SCSI-subsystem for probing through
   all possible pun/lun combinations. a ldn is a "logical device number"
   which is used by IBM SCSI-subsystems to access some valid SCSI-device.
   At the beginning of the development of this driver, the following approach 
   was used:
   
   First, the driver checked the ldn's (0 to 6) to find out which ldn's
   have devices assigned. This was done by the functions check_devices() and
   device_exists(). The interrupt handler has a special paragraph of code
   (see local_checking_phase_flag) to assist in the checking. Assume, for
   example, that three logical devices were found assigned at ldn 0, 1, 2.
   These are presented to the upper layer of Linux SCSI driver
   as devices with bogus (pun, lun) equal to (0,0), (1,0), (2,0). 
   On the other hand, if the upper layer issues a command to device
   say (4,0), this driver returns DID_NO_CONNECT error.

   In a second step of the driver development, the following improvement has
   been applied: The first approach limited the number of devices to 7, far
   fewer than the 15 that it could usem then it just maped ldn -> 
   (ldn/8,ldn%8) for pun,lun.  We ended up with a real mishmash of puns
   and luns, but it all seemed to work.

   The latest development, which is implemented from the driver version 3.0
   and later, realizes the device recognition in the following way:
   The physical SCSI-devices on the SCSI-bus are probed via immediate_assign- 
   and device_inquiry-commands, that is all implemented in a completely new
   made check_devices() subroutine. This delivers an exact map of the physical
   SCSI-world that is now stored in the get_scsi[][]-array. This means,
   that the once hidden pun,lun assignment is now known to this driver.
   It no longer believes in default-settings of the subsystem and maps all
   ldns to existing pun,lun "by foot". This assures full control of the ldn
   mapping and allows dynamical remapping of ldns to different pun,lun, if
   there are more SCSI-devices installed than ldns available (n>15). The
   ldns from 0 to 6 get 'hardwired' by this driver to puns 0 to 7 at lun=0,
   excluding the pun of the subsystem. This assures, that at least simple 
   SCSI-installations have optimum access-speed and are not touched by
   dynamical remapping. The ldns 7 to 14 are put to existing devices with 
   lun>0 or to non-existing devices, in order to satisfy the subsystem, if 
   there are less than 15 SCSI-devices connected. In the case of more than 15 
   devices, the dynamical mapping goes active. If the get_scsi[][] reports a 
   device to be existant, but it has no ldn assigned, it gets a ldn out of 7 
   to 14. The numbers are assigned in cyclic order. Therefore it takes 8 
   dynamical reassignments on the SCSI-devices, until a certain device 
   loses its ldn again. This assures, that dynamical remapping is avoided 
   during intense I/O between up to 15 SCSI-devices (means pun,lun 
   combinations). A further advantage of this method is, that people who
   build their kernel without probing on all luns will get what they expect,
   because the driver just won't assign everything with lun>0 when 
   multpile lun probing is inactive.
 
   2.4 SCSI-Device Order
   ---------------------
   Because of the now correct recognition of physical pun,lun, and 
   their report to mid-level- and higher-level-drivers, the new reported puns
   can be different from the old, faked puns. Therefore, Linux will eventually
   change /dev/sdXXX assignments and prompt you for corrupted superblock
   repair on boottime. In this case DO NOT PANIC, YOUR DISKS ARE STILL OK!!!
   You have to reboot (CTRL-D) with an old kernel and set the /etc/fstab-file
   entries right. After that, the system should come up as errorfree as before.
   If your boot-partition is not coming up, also edit the /etc/lilo.conf-file
   in a Linux session booted on old kernel and run lilo before reboot. Check
   lilo.conf anyway to get boot on other partitions with foreign OSes right
   again. But there exists a feature of this driver that allows you to change
   the assignment order of the SCSI-devices by flipping the PUN-assignment.
   See the next paragraph for a description.
 
   The problem for this is, that Linux does not assign the SCSI-devices in the
   way as described in the ANSI-SCSI-standard. Linux assigns /dev/sda to 
   the device with at minimum id 0. But the first drive should be at id 6,
   because for historical reasons, drive at id 6 has, by hardware, the highest
   priority and a drive at id 0 the lowest. IBM was one of the rare producers,
   where the BIOS assigns drives belonging to the ANSI-SCSI-standard. Most 
   other producers' BIOS does not (I think even Adaptec-BIOS). The 
   IBMMCA_SCSI_ORDER_STANDARD flag, which you set while configuring the
   kernel enables to choose the preferred way of SCSI-device-assignment. 
   Defining this flag would result in Linux determining the devices in the 
   same order as DOS and OS/2 does on your MCA-machine. This is also standard 
   on most industrial computers and OSes, like e.g. OS-9. Leaving this flag 
   undefined will get your devices ordered in the default way of Linux. See 
   also the remarks of Chris Beauregard from Dec 15, 1997 and the followups 
   in section 3.
   
   2.5 Regular SCSI-Command-Processing
   -----------------------------------
   Only three functions get involved: ibmmca_queuecommand(), issue_cmd(),
   and interrupt_handler().

   The upper layer issues a scsi command by calling function 
   ibmmca_queuecommand(). This function fills a "subsystem control block"
   (scb) and calls a local function issue_cmd(), which writes a scb 
   command into subsystem I/O ports. Once the scb command is carried out, 
   the interrupt_handler() is invoked. If a device is determined to be 
   existant and it has not assigned any ldn, it gets one dynamically.
   For this, the whole stuff is done in ibmmca_queuecommand().

   2.6 Abort & Reset Commands
   --------------------------
   These are implemented with busy waiting for interrupt to arrive.
   ibmmca_reset() and ibmmca_abort() do not work sufficently well
   up to now and need still a lot of development work. But, this seems
   to be even a problem with other SCSI-low level drivers, too. However,
   this should be no excuse.

   2.7 Disk Geometry
   -----------------
   The ibmmca_biosparams() function should return the same disk geometry 
   as the bios. This is needed for fdisk, etc. The returned geometry is 
   certainly correct for disks smaller than 1 gigabyte. In the meantime,
   it has been proved, that this works fine even with disks larger than
   1 gigabyte.

   2.8 Kernel Boot Option
   ----------------------
   The function ibmmca_scsi_setup() is called if option ibmmcascsi=n 
   is passed to the kernel. See file linux/init/main.c for details.
   
   2.9 Driver Module Support
   -------------------------
   Is implemented and tested by K. Kudielka. This could probably not work
   on kernels <2.1.0.
  
   2.10 Multiple Hostadapter Support
   ---------------------------------
   This driver supports up to eight interfaces of type IBM-SCSI-Subsystem. 
   Integrated-, and MCA-adapters are automatically recognized. Unrecognizable
   IBM-SCSI-Subsystem interfaces can be specified as kernel-parameters.
 
   2.11 /proc/scsi-Filesystem Information
   --------------------------------------
   Information about the driver condition is given in 
   /proc/scsi/ibmmca/<host_no>. ibmmca_proc_info() provides this information.
   
   This table is quite informative for interested users. It shows the load
   of commands on the subsystem and wether you are running the bypassed 
   (software) or integrated (hardware) SCSI-command set (see below). The
   amount of accesses is shown. Read, write, modeselect is shown separately
   in order to help debugging problems with CD-ROMs or tapedrives.
   
   The following table shows the list of 15 logical device numbers, that are
   used by the SCSI-subsystem. The load on each ldn is shown in the table,
   again, read and write commands are split. The last column shows the amount
   of reassignments, that have been applied to the ldns, if you have more than
   15 pun/lun combinations available on the SCSI-bus.
   
   The last two tables show the pun/lun map and the positions of the ldns
   on this pun/lun map. This may change during operation, when a ldn is
   reassigned to another pun/lun combination. If the necessity for dynamical
   assignments is set to 'no', the ldn structure keeps static.
   
   2.12 /proc/mca-Filesystem Information
   -------------------------------------
   The slot-file contains all default entries and in addition chip and I/O-
   address information of the SCSI-subsystem. This information is provided
   by ibmmca_getinfo().
   
   2.13 Supported IBM SCSI-Subsystems
   ----------------------------------
   The following IBM SCSI-subsystems are supported by this driver:
   
     - IBM Fast/Wide SCSI-2 Adapter
     - IBM 7568 Industrial Computer SCSI Adapter w/Cache
     - IBM Expansion Unit SCSI Controller
     - IBM SCSI Adapter w/Cache
     - IBM SCSI Adapter
     - IBM Integrated SCSI Controller
     - All clones, 100% compatible with the chipset and subsystem command
       system of IBM SCSI-adapters (forced detection)
     
   2.14 Linux Kernel Versions
   --------------------------
   The IBM SCSI-subsystem low level driver is prepared to be used with
   all versions of Linux between 2.0.x and 2.4.x. The compatibility checks
   are fully implemented up from version 3.1e of the driver. This means, that
   you just need the latest ibmmca.h and ibmmca.c file and copy it in the
   linux/drivers/scsi directory. The code is automatically adapted during 
   kernel compilation. This is different from kernel 2.4.0! Here version 
   4.0 or later of the driver must be used for kernel 2.4.0 or later. Version
   4.0 or later does not work together with older kernels! Driver versions
   older than 4.0 do not work together with kernel 2.4.0 or later. They work
   on all older kernels.

   3 Code History
   --------------
   Jan 15 1996:  First public release.
   - Martin Kolinek

   Jan 23 1996:  Scrapped code which reassigned scsi devices to logical
   device numbers. Instead, the existing assignment (created
   when the machine is powered-up or rebooted) is used. 
   A side effect is that the upper layer of Linux SCSI 
   device driver gets bogus scsi ids (this is benign), 
   and also the hard disks are ordered under Linux the 
   same way as they are under dos (i.e., C: disk is sda, 
   D: disk is sdb, etc.).
   - Martin Kolinek

   I think that the CD-ROM is now detected only if a CD is 
   inside CD_ROM while Linux boots. This can be fixed later,
   once the driver works on all types of PS/2's.
   - Martin Kolinek

   Feb 7 1996:   Modified biosparam function. Fixed the CD-ROM detection. 
   For now, devices other than harddisk and CD_ROM are 
   ignored. Temporarily modified abort() function 
   to behave like reset().
   - Martin Kolinek

   Mar 31 1996:  The integrated scsi subsystem is correctly found
   in PS/2 models 56,57, but not in model 76. Therefore
   the ibmmca_scsi_setup() function has been added today.
   This function allows the user to force detection of
   scsi subsystem. The kernel option has format
   ibmmcascsi=n
   where n is the scsi_id (pun) of the subsystem. Most likely, n is 7.
   - Martin Kolinek

   Aug 21 1996:  Modified the code which maps ldns to (pun,0).  It was
   insufficient for those of us with CD-ROM changers.
   - Chris Beauregard
 
   Dec 14 1996: More improvements to the ldn mapping.  See check_devices
   for details.  Did more fiddling with the integrated SCSI detection,
   but I think it's ultimately hopeless without actually testing the
   model of the machine.  The 56, 57, 76 and 95 (ultimedia) all have
   different integrated SCSI register configurations.  However, the 56
   and 57 are the only ones that have problems with forced detection.
   - Chris Beauregard
 
   Mar 8-16 1997: Modified driver to run as a module and to support 
   multiple adapters. A structure, called ibmmca_hostdata, is now
   present, containing all the variables, that were once only
   available for one single adapter. The find_subsystem-routine has vanished.
   The hardware recognition is now done in ibmmca_detect directly.
   This routine checks for presence of MCA-bus, checks the interrupt
   level and continues with checking the installed hardware.
   Certain PS/2-models do not recognize a SCSI-subsystem automatically.
   Hence, the setup defined by command-line-parameters is checked first.
   Thereafter, the routine probes for an integrated SCSI-subsystem.
   Finally, adapters are checked. This method has the advantage to cover all
   possible combinations of multiple SCSI-subsystems on one MCA-board. Up to
   eight SCSI-subsystems can be recognized and announced to the upper-level
   drivers with this improvement. A set of defines made changes to other
   routines as small as possible.
   - Klaus Kudielka
   
   May 30 1997: (v1.5b)
   1) SCSI-command capability enlarged by the recognition of MODE_SELECT.
      This needs the RD-Bit to be disabled on IM_OTHER_SCSI_CMD_CMD which 
      allows data to be written from the system to the device. It is a
      necessary step to be allowed to set blocksize of SCSI-tape-drives and 
      the tape-speed, whithout confusing the SCSI-Subsystem.
   2) The recognition of a tape is included in the check_devices routine.
      This is done by checking for TYPE_TAPE, that is already defined in
      the kernel-scsi-environment. The markup of a tape is done in the 
      global ldn_is_tape[] array. If the entry on index ldn 
      is 1, there is a tapedrive connected.
   3) The ldn_is_tape[] array is necessary to distinguish between tape- and 
      other devices. Fixed blocklength devices should not cause a problem
      with the SCB-command for read and write in the ibmmca_queuecommand
      subroutine. Therefore, I only derivate the READ_XX, WRITE_XX for
      the tape-devices, as recommended by IBM in this Technical Reference,
      mentioned below. (IBM recommends to avoid using the read/write of the
      subsystem, but the fact was, that read/write causes a command error from
      the subsystem and this causes kernel-panic.)
   4) In addition, I propose to use the ldn instead of a fix char for the
      display of PS2_DISK_LED_ON(). On 95, one can distinguish between the
      devices that are accessed. It shows activity and easyfies debugging.   
   The tape-support has been tested with a SONY SDT-5200 and a HP DDS-2
   (I do not know yet the type). Optimization and CD-ROM audio-support, 
   I am working on ...
   - Michael Lang
   
   June 19 1997: (v1.6b)
   1) Submitting the extra-array ldn_is_tape[] -> to the local ld[]
      device-array. 
   2) CD-ROM Audio-Play seems to work now.
   3) When using DDS-2 (120M) DAT-Tapes, mtst shows still density-code
      0x13 for ordinary DDS (61000 BPM) instead 0x24 for DDS-2. This appears 
      also on Adaptec 2940 adaptor in a PCI-System. Therefore, I assume that 
      the problem is independent of the low-level-driver/bus-architecture.
   4) Hexadecimal ldn on PS/2-95 LED-display.
   5) Fixing of the PS/2-LED on/off that it works right with tapedrives and
      does not confuse the disk_rw_in_progress counter.
   - Michael Lang
  
   June 21 1997: (v1.7b)
   1) Adding of a proc_info routine to inform in /proc/scsi/ibmmca/<host> the
      outer-world about operational load statistics on the different ldns,
      seen by the driver. Everybody that has more than one IBM-SCSI should
      test this, because I only have one and cannot see what happens with more
      than one IBM-SCSI hosts.
   2) Definition of a driver version-number to have a better recognition of 
      the source when there are existing too much releases that may confuse
      the user, when reading about release-specific problems. Up to know,
      I calculated the version-number to be 1.7. Because we are in BETA-test
      yet, it is today 1.7b.
   3) Sorry for the heavy bug I programmed on June 19 1997! After that, the
      CD-ROM did not work any more! The C7-command was a fake impression
      I got while programming. Now, the READ and WRITE commands for CD-ROM are
      no longer running over the subsystem, but just over 
      IM_OTHER_SCSI_CMD_CMD. On my observations (PS/2-95), now CD-ROM mounts
      much faster(!) and hopefully all fancy multimedia-functions, like direct
      digital recording from audio-CDs also work. (I tried it with cdda2wav
      from the cdwtools-package and it filled up the harddisk immediately :-).)
      To easify boolean logics, a further local device-type in ld[], called
      is_cdrom has been included.
   4) If one uses a SCSI-device of unsupported type/commands, one
      immediately runs into a kernel-panic caused by Command Error. To better
      understand which SCSI-command caused the problem, I extended this
      specific panic-message slightly.
   - Michael Lang
 
   June 25 1997: (v1.8b)
   1) Some cosmetical changes for the handling of SCSI-device-types.
      Now, also CD-Burners / WORMs and SCSI-scanners should work. For
      MO-drives I have no experience, therefore not yet supported.
      In logical_devices I changed from different type-variables to one
      called 'device_type' where the values, corresponding to scsi.h,
      of a SCSI-device are stored.
   2) There existed a small bug, that maps a device, coming after a SCSI-tape
      wrong. Therefore, e.g. a CD-ROM changer would have been mapped wrong
      -> problem removed.
   3) Extension of the logical_device structure. Now it contains also device,
      vendor and revision-level of a SCSI-device for internal usage.
   - Michael Lang

   June 26-29 1997: (v2.0b)
   1) The release number 2.0b is necessary because of the completely new done
      recognition and handling of SCSI-devices with the adapter. As I got
      from Chris the hint, that the subsystem can reassign ldns dynamically,
      I remembered this immediate_assign-command, I found once in the handbook.
      Now, the driver first kills all ldn assignments that are set by default
      on the SCSI-subsystem. After that, it probes on all puns and luns for
      devices by going through all combinations with immediate_assign and
      probing for devices, using device_inquiry. The found physical(!) pun,lun
      structure is stored in get_scsi[][] as device types. This is followed
      by the assignment of all ldns to existing SCSI-devices. If more ldns
      than devices are available, they are assigned to non existing pun,lun
      combinations to satisfy the adapter. With this, the dynamical mapping
      was possible to implement. (For further info see the text in the 
      source-code and in the description below. Read the description
      below BEFORE installing this driver on your system!)
   2) Changed the name IBMMCA_DRIVER_VERSION to IBMMCA_SCSI_DRIVER_VERSION.
   3) The LED-display shows on PS/2-95 no longer the ldn, but the SCSI-ID
      (pun) of the accessed SCSI-device. This is now senseful, because the 
      pun known within the driver is exactly the pun of the physical device
      and no longer a fake one.
   4) The /proc/scsi/ibmmca/<host_no> consists now of the first part, where
      hit-statistics of ldns is shown and a second part, where the maps of 
      physical and logical SCSI-devices are displayed. This could be very 
      interesting, when one is using more than 15 SCSI-devices in order to 
      follow the dynamical remapping of ldns.
   - Michael Lang
 
   June 26-29 1997: (v2.0b-1)
   1) I forgot to switch the local_checking_phase_flag to 1 and back to 0
      in the dynamical remapping part in ibmmca_queuecommand for the 
      device_exist routine. Sorry.
   - Michael Lang
 
   July 1-13 1997: (v3.0b,c)
   1) Merging of the driver-developments of Klaus Kudielka and Michael Lang 
      in order to get a optimum and unified driver-release for the 
      IBM-SCSI-Subsystem-Adapter(s).
         For people, using the Kernel-release >=2.1.0, module-support should 
      be no problem. For users, running under <2.1.0, module-support may not 
      work, because the methods have changed between 2.0.x and 2.1.x.
   2) Added some more effective statistics for /proc-output.
   3) Change typecasting at necessary points from (unsigned long) to
      virt_to_bus().
   4) Included #if... at special points to have specific adaption of the
      driver to kernel 2.0.x and 2.1.x. It should therefore also run with 
      later releases.
   5) Magneto-Optical drives and medium-changers are also recognized, now.
      Therefore, we have a completely gapfree recognition of all SCSI-
      device-types, that are known by Linux up to kernel 2.1.31.
   6) The flag SCSI_IBMMCA_DEV_RESET has been inserted. If it is set within
      the configuration, each connected SCSI-device will get a reset command
      during boottime. This can be necessary for some special SCSI-devices.
      This flag should be included in Config.in.
      (See also the new Config.in file.)
   Probable next improvement: bad disk handler.
   - Michael Lang
 
   Sept 14 1997: (v3.0c)
   1) Some debugging and speed optimization applied.
   - Michael Lang

   Dec 15, 1997
    - chrisb@truespectra.com
    - made the front panel display thingy optional, specified from the
    command-line via ibmmcascsi=display.  Along the lines of the /LED
    option for the OS/2 driver.
    - fixed small bug in the LED display that would hang some machines.
    - reversed ordering of the drives (using the
    IBMMCA_SCSI_ORDER_STANDARD define).  This is necessary for two main
    reasons:
	- users who've already installed Linux won't be screwed.  Keep
	in mind that not everyone is a kernel hacker.
	- be consistent with the BIOS ordering of the drives.  In the
	BIOS, id 6 is C:, id 0 might be D:.  With this scheme, they'd be
	backwards.  This confuses the crap out of those heathens who've
	got a impure Linux installation (which, <wince>, I'm one of).
    This whole problem arises because IBM is actually non-standard with
    the id to BIOS mappings.  You'll find, in fdomain.c, a similar
    comment about a few FD BIOS revisions.  The Linux (and apparently
    industry) standard is that C: maps to scsi id (0,0).  Let's stick
    with that standard.
    - Since this is technically a branch of my own, I changed the
    version number to 3.0e-cpb.

   Jan 17, 1998: (v3.0f)
   1) Addition of some statistical info for /proc in proc_info.
   2) Taking care of the SCSI-assignment problem, dealed by Chris at Dec 15
      1997. In fact, IBM is right, concerning the assignment of SCSI-devices 
      to driveletters. It is conform to the ANSI-definition of the SCSI-
      standard to assign drive C: to SCSI-id 6, because it is the highest
      hardware priority after the hostadapter (that has still today by
      default everywhere id 7). Also realtime-operating systems that I use, 
      like LynxOS and OS9, which are quite industrial systems use top-down
      numbering of the harddisks, that is also starting at id 6. Now, one
      sits a bit between two chairs. On one hand side, using the define
      IBMMCA_SCSI_ORDER_STANDARD makes Linux assigning disks conform to
      the IBM- and ANSI-SCSI-standard and keeps this driver downward
      compatible to older releases, on the other hand side, people is quite
      habituated in believing that C: is assigned to (0,0) and much other
      SCSI-BIOS do so. Therefore, I moved the IBMMCA_SCSI_ORDER_STANDARD 
      define out of the driver and put it into Config.in as subitem of 
      'IBM SCSI support'. A help, added to Documentation/Configure.help 
      explains the differences between saying 'y' or 'n' to the user, when 
      IBMMCA_SCSI_ORDER_STANDARD prompts, so the ordinary user is enabled to 
      choose the way of assignment, depending on his own situation and gusto.
   3) Adapted SCSI_IBMMCA_DEV_RESET to the local naming convention, so it is
      now called IBMMCA_SCSI_DEV_RESET.
   4) Optimization of proc_info and its subroutines.
   5) Added more in-source-comments and extended the driver description by
      some explanation about the SCSI-device-assignment problem.
   - Michael Lang
   
   Jan 18, 1998: (v3.0g)
   1) Correcting names to be absolutely conform to the later 2.1.x releases.
      This is necessary for 
            IBMMCA_SCSI_DEV_RESET -> CONFIG_IBMMCA_SCSI_DEV_RESET
            IBMMCA_SCSI_ORDER_STANDARD -> CONFIG_IBMMCA_SCSI_ORDER_STANDARD
   - Michael Lang
 
   Jan 18, 1999: (v3.1 MCA-team internal)
   1) The multiple hosts structure is accessed from every subroutine, so there
      is no longer the address of the device structure passed from function
      to function, but only the hostindex. A call by value, nothing more. This
      should really be understood by the compiler and the subsystem should get
      the right values and addresses.
   2) The SCSI-subsystem detection was not complete and quite hugely buggy up
      to now, compared to the technical manual. The interpretation of the pos2
      register is not as assumed by people before, therefore, I dropped a note
      in the ibmmca_detect function to show the registers' interpretation.
      The pos-registers of integrated SCSI-subsystems do not contain any 
      information concerning the IO-port offset, really. Instead, they contain
      some info about the adapter, the chip, the NVRAM .... The I/O-port is
      fixed to 0x3540 - 0x3547. There can be more than one adapters in the 
      slots and they get an offset for the I/O area in order to get their own
      I/O-address area. See chapter 2 for detailed description. At least, the 
      detection should now work right, even on models other than 95. The 95ers
      came happily around the bug, as their pos2 register contains always 0 
      in the critical area. Reserved bits are not allowed to be interpreted, 
      therefore, IBM is allowed to set those bits as they like and they may 
      really vary between different PS/2 models. So, now, no interpretation 
      of reserved bits - hopefully no trouble here anymore.
   3) The command error, which you may get on models 55, 56, 57, 70, 77 and
      P70 may have been caused by the fact, that adapters of older design do
      not like sending commands to non-existing SCSI-devices and will react
      with a command error as a sign of protest. While this error is not
      present on IBM SCSI Adapter w/cache, it appears on IBM Integrated SCSI
      Adapters. Therefore, I implemented a workarround to forgive those 
      adapters their protests, but it is marked up in the statisctis, so
      after a successful boot, you can see in /proc/scsi/ibmmca/<host_number>
      how often the command errors have been forgiven to the SCSI-subsystem.
      If the number is bigger than 0, you have a SCSI subsystem of older
      design, what should no longer matter.
   4) ibmmca_getinfo() has been adapted very carefully, so it shows in the 
      slotn file really, what is senseful to be presented.
   5) ibmmca_register() has been extended in its parameter list in order to
      pass the right name of the SCSI-adapter to Linux.
   - Michael Lang

   Feb 6, 1999: (v3.1)
   1) Finally, after some 3.1Beta-releases, the 3.1 release. Sorry, for 
      the delayed release, but it was not finished with the release of 
      Kernel 2.2.0.
   - Michael Lang
   
   Feb 10, 1999 (v3.1)
   1) Added a new commandline parameter called 'bypass' in order to bypass
      every integrated subsystem SCSI-command consequently in case of
      troubles.
   2) Concatenated read_capacity requests to the harddisks. It gave a lot
      of troubles with some controllers and after I wanted to apply some
      extensions, it jumped out in the same situation, on my w/cache, as like 
      on D. Weinehalls' Model 56, having integrated SCSI. This gave me the 
      descissive hint to move the code-part out and declare it global. Now,
      it seems to work by far much better an more stable. Let us see, what
      the world thinks of it...
   3) By the way, only Sony DAT-drives seem to show density code 0x13. A
      test with a HP drive gave right results, so the problem is vendor-
      specific and not a problem of the OS or the driver.
   - Michael Lang
   
   Feb 18, 1999 (v3.1d)
   1) The abort command and the reset function have been checked for 
      inconsistencies. From the logical point of thinking, they work
      at their optimum, now, but as the subsystem does not answer with an
      interrupt, abort never finishes, sigh...
   2) Everything, that is accessed by a busmaster request from the adapter
      is now declared as global variable, even the return-buffer in the
      local checking phase. This assures, that no accesses to undefined memory
      areas are performed.
   3) In ibmmca.h, the line unchecked_isa_dma is added with 1 in order to
      avoid memory-pointers for the areas higher than 16MByte in order to
      be sure, it also works on 16-Bit Microchannel bus systems.
   4) A lot of small things have been found, but nothing that endangered the
      driver operations. Just it should be more stable, now.
   - Michael Lang
      
   Feb 20, 1999 (v3.1e)
   1) I took the warning from the Linux Kernel Hackers Guide serious and 
      checked the cmd->result return value to the done-function very carefully.
      It is obvious, that the IBM SCSI only delivers the tsb.dev_status, if
      some error appeared, else it is undefined. Now, this is fixed. Before
      any SCB command gets queued, the tsb.dev_status is set to 0, so the 
      cmd->result won't screw up Linux higher level drivers.
   2) The reset-function has slightly improved. This is still planed for 
      abort. During the abort and the reset function, no interrupts are 
      allowed. This is however quite hard to cope with, so the INT-status
      register is read. When the interrupt gets queued, one can find its
      status immediately on that register and is enabled to continue in the
      reset function. I had no chance to test this really, only in a bogus 
      situation, I got this function running, but the situation was too much
      worse for Linux :-(, so tests will continue.
   3) Buffers got now consistent. No open address mapping, as before and
      therefore no further troubles with the unassigned memory segmentation
      faults that scrambled probes on 95XX series and even on 85XX series,
      when the kernel is done in a not so perfectly fitting way.
   4) Spontaneous interrupts from the subsystem, appearing without any
      command previously queued are answered with a DID_BAD_INTR result.
   5) Taken into account ZP Gus' proposals to reverse the SCSI-device
      scan order. As it does not work on Kernel 2.1.x or 2.2.x, as proposed
      by him, I implemented it in a slightly derived way, which offers in 
      addition more flexibility.
   - Michael Lang

   Apr 23, 2000 (v3.2pre1)
   1) During a very long time, I collected a huge amount of bugreports from
      various people, trying really quite different things on their SCSI-
      PS/2s. Today, all these bugreports are taken into account and should be
      mostly solved. The major topics were:
      - Driver crashes during boottime by no obvious reason.
      - Driver panics while the midlevel-SCSI-driver is trying to inquire
        the SCSI-device properties, even though hardware is in perfect state.
      - Displayed info for the various slot-cards is interpreted wrong.
      The main reasons for the crashes were two:
      1) The commands to check for device information like INQUIRY, 
         TEST_UNIT_READY, REQUEST_SENSE and MODE_SENSE cause the devices
	 to deliver information of up to 255 bytes. Midlevel drivers offer
	 1024 bytes of space for the answer, but the IBM-SCSI-adapters do
	 not accept this, as they stick quite near to ANSI-SCSI and report
	 a COMMAND_ERROR message which causes the driver to panic. The main
	 problem was located around the INQUIRY command. Now, for all the
	 mentioned commands, the buffersize, sent to the adapter is at 
	 maximum 255 which seems to be a quite reasonable solution. 
	 TEST_UNIT_READY gets a buffersize of 0 to make sure, that no 
	 data is transferred in order to avoid any possible command failure.
      2) On unsuccessful TEST_UNIT_READY, the midlevel-driver has to send
         a REQUEST_SENSE in order to see, where the problem is located. This
	 REQUEST_SENSE may have various length in its answer-buffer. IBM
	 SCSI-subsystems report a command failure, if the returned buffersize
	 is different from the sent buffersize, but this can be supressed by
	 a special bit, which is now done and problems seem to be solved.
   2) Code adaption to all kernel-releases. Now, the 3.2 code compiles on 
      2.0.x, 2.1.x, 2.2.x and 2.3.x kernel releases without any code-changes.
   3) Commandline-parameters are recognized again, even under Kernel 2.3.x or
      higher.
   - Michael Lang   

   April 27, 2000 (v3.2pre2)
   1) Bypassed commands get read by the adapter by one cycle instead of two.
      This increases SCSI-performance.
   2) Synchronous datatransfer is provided for sure to be 5 MHz on older
      SCSI and 10 MHz on internal F/W SCSI-adapter.
   3) New commandline parameters allow to force the adapter to slow down while
      in synchronous transfer. Could be helpful for very old devices.
   - Michael Lang
   
   June 2, 2000 (v3.2pre5)
   1) Added Jim Shorney's contribution to make the activity indicator
      flashing in addition to the LED-alphanumeric display-panel on
      models 95A. To be enabled to choose this feature freely, a new
      commandline parameter is added, called 'activity'.
   2) Added the READ_CONTROL bit for test_unit_ready SCSI-command.
   3) Added some suppress_exception bits to read_device_capacity and
      all device_inquiry occurrences in the driver code.
   4) Complaints about the various KERNEL_VERSION implementations are
      taken into account. Every local_LinuxKernelVersion occurrence is
      now replaced by KERNEL_VERSION, defined in linux/version.h. 
      Corresponding changes were applied to ibmmca.h, too. This was a
      contribution to all kernel-parts by Philipp Hahn.
   - Michael Lang
   
   July 17, 2000 (v3.2pre8)
   A long period of collecting bugreports from all corners of the world
   now lead to the following corrections to the code:
   1) SCSI-2 F/W support crashed with a COMMAND ERROR. The reason for this 
      was, that it is possible to disbale Fast-SCSI for the external bus.
      The feature-control command, where this crash appeared regularly tried
      to set the maximum speed of 10MHz synchronous transfer speed and that
      reports a COMMAND ERROR, if external bus Fast-SCSI is disabled. Now,
      the feature-command probes down from maximum speed until the adapter 
      stops to complain, which is at the same time the maximum possible
      speed selected in the reference program. So, F/W external can run at
      5 MHz (slow-) or 10 MHz (fast-SCSI). During feature probing, the 
      COMMAND ERROR message is used to detect if the adapter does not complain.
   2) Up to now, only combined busmode is supported, if you use external
      SCSI-devices, attached to the F/W-controller. If dual bus is selected,
      only the internal SCSI-devices get accessed by Linux. For most 
      applications, this should do fine. 
   3) Wide-SCSI-addressing (16-Bit) is now possible for the internal F/W
      bus on the F/W adapter. If F/W adapter is detected, the driver
      automatically uses the extended PUN/LUN <-> LDN mapping tables, which
      are now new from 3.2pre8. This allows PUNs between 0 and 15 and should
      provide more fun with the F/W adapter.
   4) Several machines use the SCSI: POS registers for internal/undocumented
      storage of system relevant info. This confused the driver, mainly on
      models 9595, as it expected no onboard SCSI only, if all POS in
      the integrated SCSI-area are set to 0x00 or 0xff. Now, the mechanism
      to check for integrated SCSI is much more restrictive and these problems
      should be history.
   - Michael Lang          

   July 18, 2000 (v3.2pre9)
   This develop rather quickly at the moment. Two major things were still
   missing in 3.2pre8:
   1) The adapter PUN for F/W adapters has 4-bits, while all other adapters
      have 3-bits. This is now taken into account for F/W.
   2) When you select CONFIG_IBMMCA_SCSI_ORDER_STANDARD, you should 
      normally get the inverse probing order of your devices on the SCSI-bus.
      The ANSI device order gets scrambled in version 3.2pre8!! Now, a new
      and tested algorithm inverts the device-order on the SCSI-bus and
      automatically avoids accidental access to whatever SCSI PUN the adapter 
      is set and works with SCSI- and Wide-SCSI-addressing.
   - Michael Lang

   July 23, 2000 (v3.2pre10 unpublished) 
   1) LED panel display supports wide-addressing in ibmmca=display mode.
   2) Adapter-information and autoadaption to address-space is done.
   3) Auto-probing for maximum synchronous SCSI transfer rate is working.
   4) Optimization to some embedded function calls is applied.
   5) Added some comment for the user to wait for SCSI-devices being probed.
   6) Finished version 3.2 for Kernel 2.4.0. It least, I thought it is but...
   - Michael Lang
   
   July 26, 2000 (v3.2pre11)
   1) I passed a horrible weekend getting mad with NMIs on kernel 2.2.14 and
      a model 9595. Asking around in the community, nobody except of me has
      seen such errors. Weired, but I am trying to recompile everything on
      the model 9595. Maybe, as I use a specially modified gcc, that could
      cause problems. But, it was not the reason. The true background was,
      that the kernel was compiled for i386 and the 9595 has a 486DX-2. 
      Normally, no troubles should appear, but for this special machine,
      only the right processor support is working fine!
   2) Previous problems with synchronous speed, slowing down from one adapter 
      to the next during probing are corrected. Now, local variables store
      the synchronous bitmask for every single adapter found on the MCA bus.
   3) LED alphanumeric panel support for XX95 systems is now showing some
      alive rotator during boottime. This makes sense, when no monitor is 
      connected to the system. You can get rid of all display activity, if
      you do not use any parameter or just ibmmcascsi=activity, for the 
      harddrive activity LED, existant on all PS/2, except models 8595-XXX.
      If no monitor is available, please use ibmmcascsi=display, which works
      fine together with the linuxinfo utility for the LED-panel.
   - Michael Lang
   
   July 29, 2000 (v3.2)
   1) Submission of this driver for kernel 2.4test-XX and 2.2.17.
   - Michael Lang
   
   December 28, 2000 (v3.2d / v4.0)
   1) The interrupt handler had some wrong statement to wait for. This
      was done due to experimental reasons during 3.2 development but it
      has shown that this is not stable enough. Going back to wait for the
      adapter to be not busy is best.
   2) Inquiry requests can be shorter than 255 bytes of return buffer. Due
      to a bug in the ibmmca_queuecommand routine, this buffer was forced
      to 255 at minimum. If the memory address, this return buffer is pointing
      to does not offer more space, invalid memory accesses destabilized the
      kernel.
   3) version 4.0 is only valid for kernel 2.4.0 or later. This is necessary
      to remove old kernel version dependent waste from the driver. 3.2d is
      only distributed with older kernels but keeps compatibility with older
      kernel versions. 4.0 and higher versions cannot be used with older 
      kernels anymore!! You must have at least kernel 2.4.0!!
   4) The commandline argument 'bypass' and all its functionality got removed
      in version 4.0. This was never really necessary, as all troubles were
      based on non-command related reasons up to now, so bypassing commands
      did not help to avoid any bugs. It is kept in 3.2X for debugging reasons.
   5) Dynamical reassignment of ldns was again verified and analyzed to be
      completely inoperational. This is corrected and should work now.
   6) All commands that get sent to the SCSI adapter were verified and
      completed in such a way, that they are now completely conform to the
      demands in the technical description of IBM. Main candidates were the
      DEVICE_INQUIRY, REQUEST_SENSE and DEVICE_CAPACITY commands. They must
      be tranferred by bypassing the internal command buffer of the adapter
      or else the response can be a random result. GET_POS_INFO would be more
      safe in usage, if one could use the SUPRESS_EXCEPTION_SHORT, but this
      is not allowed by the technical references of IBM. (Sorry, folks, the
      model 80 problem is still a task to be solved in a different way.)
   7) v3.2d is still hold back for some days for testing, while 4.0 is 
      released.
   - Michael Lang
   
   January 3, 2001 (v4.0a)
   1) A lot of complains after the 2.4.0-prerelease kernel came in about
      the impossibility to compile the driver as a module. This problem is
      solved. In combination with that problem, some unprecise declaration
      of the function option_setup() gave some warnings during compilation.
      This is solved, too by a forward declaration in ibmmca.c.
   2) #ifdef argument concerning CONFIG_SCSI_IBMMCA is no longer needed and
      was entirely removed.
   3) Some switch statements got optimized in code, as some minor variables
      in internal SCSI-command handlers.
   - Michael Lang

   4 To do
   -------
        - IBM SCSI-2 F/W external SCSI bus support in separate mode!
	- It seems that the handling of bad disks is really bad -
	  non-existent, in fact. However, a low-level driver cannot help
	  much, if such things happen.

   5 Users' Manual
   ---------------
   5.1 Commandline Parameters
   --------------------------
   There exist several features for the IBM SCSI-subsystem driver.
   The commandline parameter format is:
   
         ibmmcascsi=<command1>,<command2>,<command3>,...
	 
   where commandN can be one of the following:
   
         display    Owners of a model 95 or other PS/2 systems with an
	            alphanumeric LED display may set this to have their
		    display showing the following output of the 8 digits:
		      
		                ------DA
				
		    where '-' stays dark, 'D' shows the SCSI-device id
		    and 'A' shows the SCSI hostindex, being currently 
		    accessed. During boottime, this will give the message
		    
		                SCSIini*
				
                    on the LED-panel, where the * represents a rotator, 
		    showing the activity during the probing phase of the
		    driver which can take up to two minutes per SCSI-adapter.
	 adisplay   This works like display, but gives more optical overview 
	            of the activities on the SCSI-bus. The display will have
		    the following output:
		    
		                6543210A
				
		    where the numbers 0 to 6 light up at the shown position,
		    when the SCSI-device is accessed. 'A' shows again the SCSI
		    hostindex. If display nor adisplay is set, the internal
		    PS/2 harddisk LED is used for media-activities. So, if
		    you really do not have a system with a LED-display, you
		    should not set display or adisplay. Keep in mind, that
		    display and adisplay can only be used alternatively. It
		    is not recommended to use this option, if you have some
		    wide-addressed devices e.g. at the SCSI-2 F/W adapter in
		    your system. In addition, the usage of the display for
		    other tasks in parallel, like the linuxinfo-utility makes 
		    no sense with this option.
	 activity   This enables the PS/2 harddisk LED activity indicator.
	            Most PS/2 have no alphanumeric LED display, but some
		    indicator. So you should use this parameter to activate it.
		    If you own model 9595 (Server95), you can have both, the 
		    LED panel and the activity indicator in parallel. However,
		    some PS/2s, like the 8595 do not have any harddisk LED 
		    activity indicator, which means, that you must use the
		    alphanumeric LED display if you want to monitor SCSI-
		    activity.
	 bypass     This is obsolete from driver version 4.0, as the adapters
	            got that far understood, that the selection between 
		    integrated and bypassed commands should now work completely
		    correct! For historical reasons, the old description is
		    kept here:
	            This commandline parameter forces the driver never to use
	            SCSI-subsystems' integrated SCSI-command set. Except of
		    the immediate assign, which is of vital importance for
		    every IBM SCSI-subsystem to set its ldns right. Instead,
		    the ordinary ANSI-SCSI-commands are used and passed by the
		    controller to the SCSI-devices, therefore 'bypass'. The
		    effort, done by the subsystem is quite bogus and at a
		    minimum and therefore it should work everywhere. This
		    could maybe solve troubles with old or integrated SCSI-
		    controllers and nasty harddisks. Keep in mind, that using 
		    this flag will slow-down SCSI-accesses slightly, as the 
		    software generated commands are always slower than the 
		    hardware. Non-harddisk devices always get read/write-
		    commands in bypass mode. On the most recent releases of 
		    the Linux IBM-SCSI-driver, the bypass command should be
		    no longer a necessary thing, if you are sure about your
		    SCSI-hardware!
	 normal     This is the parameter, introduced on the 2.0.x development
	            rail by ZP Gu. This parameter defines the SCSI-device
		    scan order in the new industry standard. This means, that
		    the first SCSI-device is the one with the lowest pun.
		    E.g. harddisk at pun=0 is scanned before harddisk at
		    pun=6, which means, that harddisk at pun=0 gets sda
		    and the one at pun=6 gets sdb.
	 ansi       The ANSI-standard for the right scan order, as done by
	            IBM, Microware and Microsoft, scans SCSI-devices starting
		    at the highest pun, which means, that e.g. harddisk at
		    pun=6 gets sda and a harddisk at pun=0 gets sdb. If you
		    like to have the same SCSI-device order, as in DOS, OS-9
		    or OS/2, just use this parameter.
         fast       SCSI-I/O in synchronous mode is done at 5 MHz for IBM-
                    SCSI-devices. SCSI-2 Fast/Wide Adapter/A external bus
                    should then run at 10 MHz if Fast-SCSI is enabled,
                    and at 5 MHz if Fast-SCSI is disabled on the external
                    bus. This is the default setting when nothing is 
                    specified here.
         medium     Synchronous rate is at 50% approximately, which means
                    2.5 MHz for IBM SCSI-adapters and 5.0 MHz for F/W ext.
                    SCSI-bus (when Fast-SCSI speed enabled on external bus).
         slow       The slowest possible synchronous transfer rate is set. 
                    This means 1.82 MHz for IBM SCSI-adapters and 2.0 MHz
                    for F/W external bus at Fast-SCSI speed on the external
		    bus.
		    
   A further option is that you can force the SCSI-driver to accept a SCSI-
   subsystem at a certain I/O-address with a predefined adapter PUN. This
   is done by entering 

                  commandN   = I/O-base
		  commandN+1 = adapter PUN
		  
   e.g. ibmmcascsi=0x3540,7 will force the driver to detect a SCSI-subsystem 
   at I/O-address 0x3540 with adapter PUN 7. Please only use this method, if
   the driver does really not recognize your SCSI-adapter! With driver version
   3.2, this recognition of various adapters was hugely improved and you
   should try first to remove your commandline arguments of such type with a 
   newer driver. I bet, it will be recognized correctly. Even multiple and 
   different types of IBM SCSI-adapters should be recognized correctly, too.
   Use the forced detection method only as last solution!
   
   Examples:
   
        ibmmcascsi=adisplay
	
   This will use the advanced display mode for the model 95 LED alphanumeric
   display.
   
        ibmmcascsi=display,0x3558,7
	
   This will activate the default display mode for the model 95 LED display
   and will force the driver to accept a SCSI-subsystem at I/O-base 0x3558
   with adapter PUN 7.
   
   5.2 Troubleshooting
   -------------------
   The following FAQs should help you to solve some major problems with this
   driver.
   
     Q: "Reset SCSI-devices at boottime" halts the system at boottime, why?
     A: This is only tested with the IBM SCSI Adapter w/cache. It is not
        yet prooved to run on other adapters, however you may be lucky.
	In version 3.1d this has been hugely improved and should work better,
	now. Normally you really won't need to activate this flag in the
	kernel configuration, as all post 1989 SCSI-devices should accept
	the reset-signal, when the computer is switched on. The SCSI-
	subsystem generates this reset while being initialized. This flag
	is really reserved for users with very old, very strange or self-made
	SCSI-devices.
     Q: Why is the SCSI-order of my drives mirrored to the device-order
        seen from OS/2 or DOS ?
     A: It depends on the operating system, if it looks at the devices in
        ANSI-SCSI-standard (starting from pun 6 and going down to pun 0) or
	if it just starts at pun 0 and counts up. If you want to be conform
	with OS/2 and DOS, you have to activate this flag in the kernel
	configuration or you should set 'ansi' as parameter for the kernel.
	The parameter 'normal' sets the new industry standard, starting
	from pun 0, scanning up to pun 6. This allows you to change your 
	opinion still after having already compiled the kernel.
     Q: Why I cannot find the IBM MCA SCSI support in the config menue?
     A: You have to activate MCA bus support, first.
     Q: Where can I find the latest info about this driver?
     A: See the file MAINTAINERS for the current WWW-address, which offers
        updates, info and Q/A lists. At this files' origin, the webaddress
	was: http://www.uni-mainz.de/~langm000/linux.html
     Q: My SCSI-adapter is not recognized by the driver, what can I do?
     A: Just force it to be recognized by kernel parameters. See section 5.1.
        If this really happens, do also send e-mail to the maintainer, as
	forced detection should be never necessary. Forced detection is in
	principal some flaw of the driver adapter detection and goes into 
	bugreports.
     Q: The driver screws up, if it starts to probe SCSI-devices, is there
        some way out of it?
     A: Yes, that was some recognition problem of the correct SCSI-adapter
        and its I/O base addresses. Upgrade your driver to the latest release
	and it should be fine again.
     Q: I get a message: panic IBM MCA SCSI: command error .... , what can
        I do against this?
     A: Previously, I followed the way by ignoring command errors by using
        ibmmcascsi=forgiveall, but this command no longer exists and is
	obsolete. If such a problem appears, it is caused by some segmentation
	fault of the driver, which maps to some unallowed area. The latest 
	version of the driver should be ok, as most bugs have been solved.
     Q: There are still kernel panics, even after having set 
        ibmmcascsi=forgiveall. Are there other possibilities to prevent
	such panics?
     A: No, get just the latest release of the driver and it should work 
        better and better with increasing version number. Forget about this
	ibmmcascsi=forgiveall, as also ignorecmd are obsolete.!
     Q: Linux panics or stops without any comment, but it is probable, that my
        harddisk(s) have bad blocks.
     A: Sorry, the bad-block handling is still a feeble point of this driver,
        but is on the schedule for development in the near future.
     Q: Linux panics while dynamically assigning SCSI-ids or ldns.
     A: If you disconnect a SCSI-device from the machine, while Linux is up
        and the driver uses dynamical reassignment of logical device numbers
	(ldn), it really gets "angry" if it won't find devices, that were still
	present at boottime and stops Linux.
     Q: The system does not recover after an abort-command has been generated.
     A: This is regrettably true, as it is not yet understood, why the 
        SCSI-adapter does really NOT generate any interrupt at the end of
	the abort-command. As no interrupt is generated, the abort command
	cannot get finished and the system hangs, sorry, but checks are 
	running to hunt down this problem. If there is a real pending command,
	the interrupt MUST get generated after abort. In this case, it
	should finish well.
     Q: The system gets in bad shape after a SCSI-reset, is this known?
     A: Yes, as there are a lot of prescriptions (see the Linux Hackers'
        Guide) what has to be done for reset, we still share the bad shape of
	the reset functions with all other low level SCSI-drivers. 
	Astonishingly, reset works in most cases quite ok, but the harddisks
	won't run in synchonous mode anymore after a reset, until you reboot.
     Q: Why does my XXX w/Cache adapter not use read-prefetch?
     A: Ok, that is not completely possible. If a cache is present, the 
        adapter tries to use it internally. Explicitly, one can use the cache
	with a read prefetch command, maybe in future, but this requires
	some major overhead of SCSI-commands that risks the performance to
	go down more than it gets improved. Tests with that are running.
     Q: I have a IBM SCSI-2 Fast/Wide adapter, it boots in some way and hangs.
     A: Yes, that is understood, as for sure, your SCSI-2 Fast/Wide adapter
        was in such a case recognized as integrated SCSI-adapter or something 
	else, but not as the correct adapter. As the I/O-ports get assigned 
	wrongly by that reason, the system should crash in most cases. You 
	should upgrade to the latest release of the SCSI-driver. The 
	recommended version is 3.2 or later. Here, the F/W support is in
	a stable and reliable condition. Wide-addressing is in addition 
	supported.
     Q: I get a Ooops message and something like "killing interrupt".
     A: The reason for this is that the IBM SCSI-subsystem only sends a 
        termination status back, if some error appeared. In former releases
	of the driver, it was not checked, if the termination status block
	is NULL. From version 3.2, it is taken care of this.
     Q: I have a F/W adapter and the driver sees my internal SCSI-devices,
        but ignores the external ones.
     A: Select combined busmode in the IBM config-program and check for that
        no SCSI-id on the external devices appears on internal devices.
        Reboot afterwards. Dual busmode is supported, but works only for the
	internal bus, yet. External bus is still ignored. Take care for your
	SCSI-ids. If combined bus-mode is activated, on some adapters, 
	the wide-addressing is not possible, so devices with ids between 8 
	and 15 get ignored by the driver & adapter!
     Q: I have a 9595 and I get a NMI during heavy SCSI I/O e.g. during fsck.
        A COMMAND ERROR is reported and characters on the screen are missing.
	Warm reboot is not possible. Things look like quite weired.
     A: Check the processor type of your 9595. If you have an 80486 or 486DX-2
        processor complex on your mainboard and you compiled a kernel that
	supports 80386 processors, it is possible, that the kernel cannot
	keep track of the PS/2 interrupt handling and stops on an NMI. Just
	compile a kernel for the correct processor type of your PS/2 and
	everything should be fine. This is necessary even if one assumes,
	that some 80486 system should be downward compatible to 80386
	software.
     Q: Some commands hang and interrupts block the machine. After some
        timeout, the syslog reports that it tries to call abort, but the
	machine is frozen.
     A: This can be a busy wait bug in the interrupt handler of driver 
        version 3.2. You should at least upgrade to 3.2c if you use 
	kernel < 2.4.0 and driver version 4.0 if you use kernel 2.4.0 or 
	later (including all test releases).
     Q: I have a PS/2 model 80 and more than 16 MBytes of RAM. The driver
        completely refuses to work, reports NMIs, COMMAND ERRORs or other
	ambiguous stuff. When reducing the RAM size down below 16 MB, 
	everything is running smoothly.
     A: No real answer, yet. In any case, one should force the kernel to
        present SCBs only below the 16 MBytes barrier. Maybe this solves the
	problem. Not yet tried, but guessing that it could work. To get this,
	set unchecked_isa_dma argument of ibmmca.h from 0 to 1.

   5.3 Bugreports
   --------------
   If you really find bugs in the sourcecode or the driver will successfully
   refuse to work on your machine, you should send a bug report to me. The
   best for this is to follow the instructions on the WWW-page for this
   driver. Fill out the bug-report form, placed on the WWW-page and ship it,
   so the bugs can be taken into account with maximum efforts. But, please
   do not send bug reports about this driver to Linus Torvalds or Leonard
   Zubkoff, as Linus is burried in E-Mail and Leonard is supervising all
   SCSI-drivers and won't have the time left to look inside every single
   driver to fix a bug and especially DO NOT send modified code to Linus
   Torvalds or Alan J. Cox which has not been checked here!!! They are both
   quite burried in E-mail (as me, sometimes, too) and one should first check
   for problems on my local teststand. Recently, I got a lot of 
   bugreports for errors in the ibmmca.c code, which I could not imagine, but
   a look inside some Linux-distribution showed me quite often some modified
   code, which did no longer work on most other machines than the one of the
   modifier. Ok, so now that there is maintenance service available for this
   driver, please use this address first in order to keep the level of
   confusion low. Thank you!
   
   When you get a SCSI-error message that panics your system, a list of
   register-entries of the SCSI-subsystem is shown (from Version 3.1d). With 
   this list, it is very easy for the maintainer to localize the problem in 
   the driver or in the configuration of the user. Please write down all the 
   values from this report and send them to the maintainer. This would really 
   help a lot and makes life easier concerning misunderstandings.
   
   Use the bug-report form (see 5.4 for its address) to send all the bug-
   stuff to the maintainer or write e-mail with the values from the table. 
   
   5.4 Support WWW-page
   --------------------
   The address of the IBM SCSI-subsystem supporting WWW-page is:
   
        http://www.uni-mainz.de/~langm000/linux.html
	
   Here you can find info about the background of this driver, patches,
   troubleshooting support, news and a bugreport form. Please check that
   WWW-page regularly for latest hints. If ever this URL changes, please 
   refer to the MAINTAINERS file in order to get the latest address.
   
   For the bugreport, please fill out the formular on the corresponding
   WWW-page. Read the dedicated instructions and write as much as you
   know about your problem. If you do not like such formulars, please send
   some e-mail directly, but at least with the same information as required by
   the formular.
   
   If you have extensive bugreports, including Ooops messages and 
   screen-shots, please feel free to send it directly to the address
   of the maintainer, too. The current address of the maintainer is:
   
            Michael Lang <langa2@kph.uni-mainz.de>
   
   6 References
   ------------
   IBM Corp., "Update for the PS/2 Hardware Interface Technical Reference, 
   Common Interfaces", Armonk, September 1991, PN 04G3281, 
   (available in the U.S. for $21.75 at 1-800-IBM-PCTB or in Germany for
   around 40,-DM at "Hallo IBM").
  
   IBM Corp., "Personal System/2 Micro Channel SCSI
   Adapter with Cache Technical Reference", Armonk, March 1990, PN 68X2365.

   IBM Corp., "Personal System/2 Micro Channel SCSI
   Adapter Technical Reference", Armonk, March 1990, PN 68X2397.

   IBM Corp., "SCSI-2 Fast/Wide Adapter/A Technical Reference - Dual Bus",
   Armonk, March 1994, PN 83G7545.
 
   Friedhelm Schmidt, "SCSI-Bus und IDE-Schnittstelle - Moderne Peripherie-
   Schnittstellen: Hardware, Protokollbeschreibung und Anwendung", 2. Aufl.
   Addison Wesley, 1996.
   
   Michael K. Johnson, "The Linux Kernel Hackers' Guide", Version 0.6, Chapel
   Hill - North Carolina, 1995
   
   Andreas Kaiser, "SCSI TAPE BACKUP for OS/2 2.0", Version 2.12, Stuttgart
   1993
   
   Helmut Rompel, "IBM Computerwelt GUIDE", What is what bei IBM., Systeme *
   Programme * Begriffe, IWT-Verlag GmbH - Muenchen, 1988
   
   7 Credits to
   ------------
   7.1 People
   ----------
   Klaus Grimm
                who already a long time ago gave me the old code from the
		SCSI-driver in order to get it running for some old machine
		in our institute.
   Martin Kolinek
                who wrote the first release of the IBM SCSI-subsystem driver.
   Chris Beauregard
                who for a long time maintained MCA-Linux and the SCSI-driver
		in the beginning. Chris, wherever you are: Cheers to you!
   Klaus Kudielka
                with whom in the 2.1.x times, I had a quite fruitful
                cooperation to get the driver running as a module and to get
		it running with multiple SCSI-adapters.
   David Weinehall
                for his excellent maintenance of the MCA-stuff and the quite 
		detailed bug reports and ideas for this driver (and his 
		patience ;-)).
   Alan J. Cox  
                for his bugreports and his bold activities in cross-checking
		the driver-code with his teststand.
		
   7.2 Sponsors & Supporters
   -------------------------
   "Hallo IBM",
   IBM-Deutschland GmbH
                the service of IBM-Deutschland for customers. Their E-Mail
		service is unbeatable. Whatever old stuff I asked for, I 
		always got some helpful answers.
   Karl-Otto Reimers,
   IBM Klub - Sparte IBM Geschichte, Sindelfingen
                for sending me a copy of the w/Cache manual from the 
		IBM-Deutschland archives.
   Harald Staiger
                for his extensive hardware donations which allows me today
		still to test the driver in various constellations.
   Erich Fritscher
                for his very kind sponsoring.
   Louis Ohland,
   Charles Lasitter
                for support by shipping me an IBM SCSI-2 Fast/Wide manual.
                In addition, the contribution of various hardware is quite 
                decessive and will make it possible to add FWSR (RAID)
                adapter support to the driver in the near future! So,
                complaints about no RAID support won't remain forever.
                Yes, folks, that is no joke, RAID support is going to rise!
   Erik Weber
                for the great deal we made about a model 9595 and the nice
                surrounding equipment and the cool trip to Mannheim
                second-hand computer market. In addition, I would like
		to thank him for his exhaustive SCSI-driver testing on his 
		95er PS/2 park.
   Anthony Hogbin
                for his direct shipment of a SCSI F/W adapter, which allowed
                me immediately on the first stage to try it on model 8557
                together with onboard SCSI adapter and some SCSI w/Cache.
   Andreas Hotz
                for his support by memory and an IBM SCSI-adapter. Collecting
                all this together now allows me to try really things with
                the driver at maximum load and variety on various models in
                a very quick and efficient way.
   Peter Jennewein
                for his model 30, which serves me as part of my teststand
		and his cool remark about how you make an ordinary diskette
		drive working and how to connect it to an IBM-diskette port.
   Johannes Gutenberg-Universitaet, Mainz &
   Institut fuer Kernphysik, Mainz Microtron (MAMI)
                for the offered space, the link, placed on the central
                homepage and the space to store and offer the driver and 
		related material and the free working times, which allow
                me to answer all your e-mail.
                   
   8 Trademarks
   ------------
   IBM, PS/2, OS/2, Microchannel are registered trademarks of International 
   Business Machines Corporation
   
   MS-DOS is a registered trademark of Microsoft Corporation
   
   Microware, OS-9 are registered trademarks of Microware Systems
   
   9 Disclaimer
   ------------
   Beside the GNU General Public License and the dependent disclaimers and disclaimers
   concerning the Linux-kernel in special, this SCSI-driver comes without any
   warranty. Its functionality is tested as good as possible on certain 
   machines and combinations of computer hardware, which does not exclude,
   that dataloss or severe damage of hardware is possible while using this
   part of software on some arbitrary computer hardware or in combination 
   with other software packages. It is highly recommended to make backup
   copies of your data before using this software. Furthermore, personal
   injuries by hardware defects, that could be caused by this SCSI-driver are
   not excluded and it is highly recommended to handle this driver with a
   maximum of carefulness.
   
   This driver supports hardware, produced by International Business Machines
   Corporation (IBM).
   
------
Michael Lang 
(langa2@kph.uni-mainz.de)
