2005-04-16 18:20:36 -04:00
|
|
|
|
|
|
|
-=< 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
|
2005-09-10 03:26:46 -04:00
|
|
|
of commands on the subsystem and whether you are running the bypassed
|
2005-04-16 18:20:36 -04:00
|
|
|
(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)
|