Newsgroups: comp.os.linux.announce,comp.os.linux.admin From: Drew Eckhardt Subject: Linux SCSI HOWTO Keywords: Linux SCSI drive tape CD-ROM HOWTO Organization: University of Colorado at Boulder Approved: linux-announce@tc.cornell.edu (Matt Welsh) Archive-name: linux/howto/scsi Last-modified: 22 Jan 94 Linux SCSI HOWTO by Drew Eckhardt (drew@cs.colorado.edu) last updated Jan 22, 1994 IMPORTANT : This HOWTO covers the Linux SCSI subsystem, as implemented in Linux kernel revision .99.14 and newer alpha code. Earlier revisions of the SCSI code are UNSUPPORTED, and may differ significantly in terms of the drivers implemented, performance, and options available. For additional information, you may wish to join the SCSI channel of the Linux activists list - mail to linux-activists-request@joker.cs.hut.fi with the line X-MN-Admin: join SCSI in the header. I'm aware that this document isn't the most user-friendly, if you have constructive comments on how to rectify the situation you're free to mail me about it. Table of contents Section 1 Common Problems Section 2 Reporting Bugs Section 3 Hosts Subsection A Supported and Unsupported Hardware Subsection B Common Problems Subsection C Adaptec 152x, 151x, Sound Blaster 16 SCSI, AIC 6260 chips (Standard) Subsection D Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (Standard) Subsection E Adaptec 174x (Standard) Subsection F Allways IN2000 (ALPHA) Subsection G Future Domain 16x0 with TMC-1800 or TMC-18C50 chip (Standard) Subsection H Generic NCR5380 (Standard) Subsection I Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (Standard) Subsection J PAS16 (Standard) Subsection K Trantor T128/T128F/T228 (Standard) Subsection L Ultrastor 14f, 24f, 34f (Standard) Subsection M Western Digital 7000 (Standard) Section 4 Disks Subsection A Supported and Unsupported Hardware Subsection B Common Problems Subsection C Device Files Subsection D Disk Geometry Subsection E Partitioning Section 5 CD ROMs Subsection A Supported and Unsupported Hardware Subsection B Common Problems Subsection C Device Files Section 6 Tapes Subsection A Supported and Unsupported Hardware Subsection B Common Problems Subsection C Device Files Section 7 Generic Subsection A Supported and Unsupported Hardware Subsection B Common Problems Subsection C Device Files Section 1 : Common Problems 1. Other parts of the documentation refer to a "kernel command line". How do I use it? References to the kernel command line refer to the options you may specify from the LILO : prompt. Boot your system with LILO, and hit one of the alt, control, or shift keys when it first comes up to get a prompt. LILO should respond with : At this prompt, you can select a kernel image to boot, or list them with ?. Ie :? linux To boot that kernel with the command line options you have selected, simply enter the name followed by a white space delimited list of options, terminating with a return. Options take the form of variable=valuelist Where valuelist may be a single value or comma delimited list of values with no whitespace. With the exception of root device, individual values are numbers, and may be specified in either decimal or hexadecimal. Ie, to boot linux with an Adaptec 1520 clone not recognized at bootup, you might type :linux aha152x=0x340,11,7,1 2. A SCSI device shows up at all possible IDs If this is the case, you've strapped the device at the same address as the controller (typically, 7, although some boards use other addresses). Please change the jumper settings. 3. You get sense errors when you know the devices are error free Sometimes this is caused by bad cables or impropper termination. Your SCSI bus must be terminated at both ends (using external terminators, or onboard terminators on the host adapter or devices) and not in the middle. 4. A kernel configured with networking does not work. The auto-probe routines for many of the network drivers are not passive, and will interfere with operation with some of the SCSI drivers. 5. A SCSI device is detected by the kernel, but you are unable to access it - ie mkfs /dev/sdc, tar xvf /dev/rst2, etc fails. You don't have a special file in /dev for the device. Unix devices are identified as either block or character (block devices go through the buffer cache, character devices do not) devices, a major number (ie which driver is used - block major 8 corresponds to SCSI disks) and a minor number (ie which unit is being accessed through a given driver - ie character major 4, minor 0 is the first virtual console, minor 1 the next, etc). However, accessing devices through this separate namespace would break the unix/Linux metaphor of "everything is a file," so character and block device special files are created under /dev. This lets you access the raw third SCSI disk device as /dev/sdc, the first serial port as /dev/ttyS0, etc. The preferred method for creating a file is using the MAKDEV script - cd /dev and run MAKEDEV (as root) for the devices you want to create - ie ./MAKEDEV sdc wildcards "should" work - ie ./MAKEDEV sd\* "should" create entries for all SCSI disk devices (doing this should create /dev/sda through /dev/sdp, with fifteen partition entries for each) ./MAKEDEV sdc\* "should" create entries for /dev/sdc and all fifteen permissible partitions on /dev/sdc, etc. I say "should" because this is the standard unix behavior - the MAKEDEV script in your installation may not conform to this behavior, or may have restricted the number of devices it will create. If MAKEDEV won't do the right magic for you, you'll have to create the device entries by hand with the mknod command. The block/character type, major, and minor numbers are specified for the various SCSI devices in Subsection C : Device Files in the appropriate section. Take those numbers, and use (as root) mknod /dev/device b|c major minor ie - mknod /dev/sdc b 8 32 mknod /dev/rst0 c 9 0 Section 2 : Reporting Bugs The Linux SCSI developers don't necessarily maintain old revisions of the code due to space constraints. So, if you are not running the latest publically released Linux kernel (note that many of the Linux distributions, such as MCC, SLS, Yggdrasil, etc. often lag one or more revisions behind this) chances are we will be unable to solve your problem. So, before reporting a bug, please check to see if it exists with the latest publically available kernel. If after upgrading, and reading this document thoroughly, you still believe that you have a bug, please mail a bug report to the SCSI channel of the mailing list where it will be seen by many of the people who've contributed to the Linux SCSI drivers. In your bug report, please provide as much information as possible regarding your hardware configuration, and the exact text of all of the messages that Linux prints when it boots and when the error condition occurs. Failure to provide the exact text of any and all messages may result in misdiagnosis of your problem. The bottom line is that if we can't reproduce your bug, and you can't point at us what's broken, it won't get fixed. Assuming you don't yet have Linux up and running, a good way to provide the information we need would be to perform the following procedure : Format a floppy diskette under DOS. Note that if you have a distribution which mounts the root diskette off of floppy rather than RAM drive, you'll have to format a diskette readable in the drive not being used to mount root. Boot Linux, and login as root mkdir /tmp/dos Insert the diskette in a drive not being used to mount root, and mount it. Ie mount -t msdos /dev/fd0 /tmp/dos or mount -t msdos /dev/fd1 /tmp/dos Insure that the /proc filesystem is mounted. grep proc /etc/mtab If the /proc filesystem is not mounted, mount it mkdir /proc chmod 755 /proc mount -t proc /proc /proc Copy the kernel revision and messages into a log file cat /proc/version > /tmp/dos/log cat /proc/kmsg >> /tmp/dos/log Type CNTRL-C after a second or two. Unmount the DOS floppy umount /tmp/dos And shutdown Linux shutdown Reboot into DOS, and using your favorite communications software include the log file in your trouble mail. Section 3 : Hosts Subsection A : Supported and Unsupported Hardware Drivers in the distribution kernel : Adaptec 152x, Adaptec 154x (including clones from Bustek and DTC 329x boards), Adaptec 174x, Future Domain 850, 885, 950, and other boards in that series (but not the 880 board unless you make the appropriate patch), Future Domain 16x0 with TMC-1800 or TMC-18C50 chip, PAS16 SCSI ports, Seagate ST0x, Trantor T128 boards, Ultrastor 14F, 24F, and 34F, and Western Digital 7000. Alpha drivers : Allways IN2000 Bustek : (native mode) Richoch NCR5380 (based on my NCR5380 driver, works) Drivers that are being developed, but aren't publically available yet Adaptec 2742 / 2842 / AIC 7770 DPT EATA NCR539x NCR53c8x0/7x0 Trantor T130B SCSI hosts that will not work : Non Adaptec compatable DTC boards (including the 3270 and 3280. These boards will never be supported because DTC will not give out programming information without a non-disclosure agrement), all parallel->SCSI adapters, Rancho SCSI boards, and Grass Roots SCSI boards. If you want to run Linux on an unsupported piece of hardware, your options are to either write a driver yourself (Eric Youngdale and I are usually willing to answer technical questions concerning the Linux SCSI drivers) or to commision a driver. Subsection B : Common Problems 1. SCSI timeouts Make sure interrupts are enabled correctly, and there are no IRQ, DMA, or address conflicts with other boards. 2. Boards with a driver that uses the BIOS for autoprobe are not detected (This includes the Adaptec 152x, Future Domain 1680, Trantor T128, Seagate, and Western Digital 7000 drivers, but not the Adaptec 154x, 174x, Generic NCR5380, PAS16, and Ultrastor drivers). Autodetection will fail for drivers using the BIOS for autodetection if the BIOS is disabled, or the board's "signature" and/or BIOS address don't match known ones. If the BIOS is installed, please use DOS and DEBUG to find a signature that will detect your board - Ie, if your board lives at 0xc8000, under DOS do debug d c800:0 q and send a message to the SCSI channel of the mailing list with the ASCII message, with the length and offset from the base address (ie, 0xc8000). Note that the EXACT text is required. If no BIOS is installed, and you are using an Adaptec 152x, Trantor T128, or Seagate driver, you can use command line or compile time overrides to force detection. Please consult the appropriate subsection for your SCSI board. 3. Boards using memory mapped IO, (This include the Trantor T128 and Seagate boards, but not the Adaptec, Generic NCR5380, PAS16, and Ultrastor drivers) This is often caused when the memory mapped I/O ports are incorrectly cached. You should have the board's address space marked as uncachable in the XCMOS settings. If this is not possible, you will have to disable cache entirely. 4. The bootable kernel for an ALPHA driver does not work, resulting in a "kernel panic : cannot mount root device" message, or it does not work with your Linux distribution. You'll need to edit the binary image of the kernel (before or after writing it out to disk), and modify a few two byte fields (little endian) to gurantee that it will work on your system. 1. default swap device at offset 502, this should be set to 0 2. ram disk size at offset 504, this should be set to the size of the boot floppy in K - ie, 5.25" = 1200, 3.5" = 1440. This means the bytes are 3.5" : 0xA0 0x05 5.25" : 0xB0 0x04 3. root device offset at 508, this should be 0, ie the boot device. dd or rawrite the file to a disk. Insert the disk in the first floppy drive, wait until it prompts you to insert the root disk, and insert the root floppy from your distribution. 5. Installing a device driver not bundled with the distribution kernel You need to start with the version of the kernel used by the driver author. This revision may be alluded to in the documentation included with the driver. Various recent kernel revisions can be found at nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus as linux-version.tar.gz They are also mirrored at tsx-11.mit.edu and various other sites. cd to /usr/src. Remove your old Linux sources, if you want to keep a backup copy of them mv linux linux-old Untar the archive gunzip < linux-0.99.12.tar.gz | tar xvfp - Apply the patches. The patches will be relative to some directory in the filesystem. By examining the output file lines in the patch file (grep for ^---), you can tell where this is - ie patches with these lines --- ./kernel/blk_drv/scsi/Makefile --- ./config.in Wed Sep 1 16:19:33 1993 would have the files relative to /usr/src/linux. Untar the driver sources at an appropriate place - you can type tar tfv patches.tar to get a listing, and move files as necessary (The SCSI driver files should live in /usr/src/linux/kernel/drivers/scsi) Either cd to the directory they are relative to and type patch -p0 < patch_file or tell patch to strip off leading path components. Ie, if the files started with --- linux-new/kernel/blk_drv/scsi/Makefile and you wanted to apply them while in /usr/src/linux, you could cd to /usr/src/linux and type patch -p1 < patches to strip off the "linux-new" component. After you have applied the patches, look for any patch rejects, which will be the name of the rejected file with a # suffix appended. find /usr/src/linux/ -name "*#" -print If any of these exist, look at them. In some cases, the differences will be in RCS identifiers and will be harmless, in other cases, you'll have to manually apply important parts. Documentation on diffs files and patch is beyond the scope of this document. Next, cd to /usr/src/linux and do a make config to choose the options you want If you are installing off of floppy disk, you'll also have to edit the Makefile to set the ROOT device to ramdisk. do a make depend followed by make You should end up with a file "zImage". Write this out to a floppy disk - cat zImage > /dev/fd0 and use that to boot your system. When it comes up, it should prompt for the root floppy, use a1 from SLS or whatever and you'll be fine. Subsection C : Adaptec 152x, 151x, Sound Blaster 16 SCSI, AIC 6260 chips (Standard) Supported Configurations : BIOS addresses : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000, 0xe0000, 0xe4000. Ports : 0x140, 0x340 IRQs : 9, 10, 11, 12 DMA is not used IO : port mapped Autoprobe : works with many 152x boards with an installed BIOS. All other boards must use a kernel command line or compile time override. Autoprobe Override : Compile time : Define PORTBASE, IRQ, SCSI_ID, RECONNECT as appropriate, see Defines kernel command line : aha152x=,,, Defines : AUTOCONF : use configuration the controller reports (only 152x) IRQ : override interrupt channel (9,10,11 or 12) (default 11) SCSI_ID : override scsiid of AIC-6260 (0-7) (default 7) RECONNECT : override target dis-/reconnection/multiple outstanding command - set to non-zero to enable, zero to disable. DONT_SNARF : Don't register ports (pl12 and below) SKIP_BIOSTEST : Don't test for BIOS signature (AHA-1510 or disabled BIOS) PORTBASE : Force port base. Don't try to probe Subsection D : Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (Standard) Supported Configurations : Ports : 0x330 and 0x334 IRQs : 9, 10, 11, 12, 14, 15 DMA channels : 5, 6, 7 IO : port mapped, bus master Autoprobe : works with all supported configurations, does not require an installed BIOS. Autoprobe override : none Antiquity Problems, fix by upgrading : 1. Linux kernel revisions prior to .99.10 don't support the 'C' revision. 2. Linux kernel revisions prior to .99.14k don't support the 'C' revision options for - BIOS support for the extended mapping for disks > 1G - BIOS support for > 2 drives - BIOS support for autoscanning the SCSI bus Common problems : 1. There are unexpected errors with a revision C board. Early examples of the 154xC boards have a high slew rate on one of the SCSI signals, which results in signal reflections when cables with the wrong impedance are used. Try changing cables, especially if you are using external devices. 2. There are error messages (ie, interrupt received, no mail) during initialization with the C revision boards. These may result from the use of one of the unsupported BIOS options. Turn it off. 3. An "Interrupt received, but no mail" message is printed on bootup and your SCSI devices are not detected. Disable the BIOS options to support the extended mapping for disks > 1G, support for > 2 drives, and for autoscanning the bus. Or, upgrade to Linux .99.14k or newer. Subsection E : Adaptec 174x Supported Configurations : Slots : 1-8 Ports : EISA board, not applicable IRQs : 9, 10, 11, 12, 14, 15 DMA Channels : EISA board, not applicable IO : port mapped, bus master Autoprobe : works with all supported configurations Autoprobe override : none Common Problems : 1. If the Adaptec 1740 driver prints the message "aha1740: Board detected, but EBCNTRL = %x, so disabled it." your board was disabled because it was not running in enhanced mode. Boards running in standard 1542 mode are not supported. Subsection F : Allways IN2000 ALPHA available via ftp tsx-11.mit.edu/pub/linux/ALPHA/SCSI/in2000 driver is in2000.tar.z, bootable kernel zImage Ports : 0x100, 0x110, 0x200, 0x220 IRQs : 10, 11, 14, 15 DMA is not used IO : port mapped Autoprobe : BIOS not required Autoprobe override : none Common Problems : 1. There are known problems in systems with IDE drives and with swapping. Subsection G : Future Domain 16x0 with TMC-1800 or TMC-18C50 chip Supported Configurations : BIOSs : 2.0, 3.0, 3.2 BIOS Addresses : 0xc8000, 0xca000, 0xce000, 0xde000 Ports : 0x140, 0x150, 0x160, 0x170 IRQs : 3, 5, 10, 11, 12, 14, 15 DMA is not used IO : port mapped Autoprobe : works with all supported configurations, requires installed BIOS Autoprobe Override : none Antiquity Problems, fix by upgrading : 1. Old versions do not support the TMC-18C50 chip, and will fail with newer boards. 2. Old versions will not have the most current BIOS signatures for autodetection. Subsection H : Generic NCR5380 Supported and Unsupported Configurations : Ports : all IRQs : all DMA channels - DMA is not used IO : port mapped Autoprobe : none Autoprobe Override : Compile time : Define GENERIC_NCR5380_OVERRIDE to be an array of tupples with port, irq - ie #define GENERIC_NCR5380_OVERRIDE {{0x330, 5,}} for a board at port 330, IRQ 5. The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used. kernel command line : ncr5380=port,irq 255 may be used for no irq, 254 for irq autoprobe. Notes : the generic driver doesn't support DMA yet, and pseudo-DMA isn't supported in the generic driver. Subsection I : Seagate ST0x/Future Domain TMC-8xx/TMC-9xx Supported and Unsupported Configurations : Base addresses : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000 IRQs : 3, 5 DMA channels : DMA is not used IO : memory mapped Autoprobe : probes for address only, IRQ is assumed to be 5, requires installed BIOS. Autoprobe Override : Compile time : Define OVERRIDE to be the base address, CONTROLLER to FD or SEAGATE as appropriate, and IRQ to the IRQ. kernel command line : st0x=address,irq or fd8xx=address,irq (only works for .99.13b and newer) Antiquity Problems, fix by upgrading : 1. Versions prior to the one in the Linux .99.12 kernel had a problem handshaking with some slow devices, where This is what happens when you write data out to the bus 1. Write byte to data register, data register is asserted to bus 2. time_remaining = 12us 3. wait while time_remaining > 0 and REQ is not asserted 4. if time_remaining > 0, assert ACK 5. wait while time remaining > 0 and REQ is asserted 6. deassert ACK The problem was encountered in slow devices that do the command processing as they read the command, where the REQ/ACK handshake takes over 12us - REQ didn't go false when the driver expected it to, so the driver ended up sending multiple bytes of data for each REQ pulse. 2. With Linux .99.12, a bug was introduced when I fixed the arbitration code, resulting in failed selections on some systems. This was fixed in .99.13. Common Problems : 1. There are command timeouts when Linux attempts to read the partition table or do other disk access. The board ships with the defaults set up for MSDOS, ie interrupts are disabled. To jumper the board for interrupts, on the Seagate use jumper W3 (ST01) or JP3 (ST02) and short pins F-G to select IRQ 5. 2. The driver can't handle some devices, particularly cheap SCSI tapes and CDROMs. The Seagate ties the SCSI bus REQ/ACK handshaking into the PC bus IO CHANNEL READY and (optionally) 0WS signals. Unfortunately, it doesn't tell you when the watchdog timer runs out, and you have no way of knowing for certain that REQ went low, and may end up seeing one REQ pulse as multiple REQ pulses. Dealing with this means using a tight loop to look for REQ to go low, with a timeout incase you don't catch the transition due to an interrupt, etc. This results in a performance decrease, so it would be undesireable to apply this to all SCSI devices. Instead, it is selected on a per-device basis with the "borken" field for the given SCSI device in the scsi_devices array. If you run into problems, you should try adding your device to the list of devices for which borken is not reset to zero (currently, only the TENEX CDROM drives). 3. A future domain board (most notably the 880) doesn't work. A few of the Future domain boards use the Seagate register mapping, and have the MSG and CD bits of the status register flipped. You should edit seagate.h, swapping the definitions for STAT_MSG and STAT_CD, and recompile the kernel with CONTROLLER defined to SEAGATE and an appropriate IRQ and OVERRIDE specified. Defines : FAST or FAST32 will use blind transfers where possible ARBITRATE will cause the host adapter to arbitrate for the bus for better SCSI-II compatability, rather than just waiting for BUS FREE and then doing its thing. Should let us do one command per Lun when I integrate my reorganization changes into the distribution sources. SLOW_HANDSHAKE will allow compatability with broken devices that don't handshake fast enough (ie, some CD ROM's) for the Seagate code. SLOW_RATE=x, x some number will let you specify a default transfer rate if handshaking isn't working correctly. Subsection J : PAS16 SCSI Supported and Unsupported Configurations : Ports : 0x388, 0x384, 0x38x, 0x288 IRQs : 10, 12, 14, 15 IMPORTANT : IRQ MUST be different from the IRQ used for the sound portion of the board. DMA is not used for the SCSI portion of the board IO : port mapped Autoprobe : does not require BIOS Autoprobe Override : Compile time : Define PAS16_OVERRIDE to be an array of port, irq tupples. Ie #define PAS16_OVERRIDE {{0x388, 10}} for a board at port 0x388, IRQ 10. kernel command line : pas16=port,irq Defines : AUTOSENSE - if defined, REQUEST SENSE will be performed automatically for commands that return with a CHECK CONDITION status. PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance increase compared to polled I/O. PARITY - enable parity checking. Not supported SCSI2 - enable support for SCSI-II tagged queueing. Untested UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You only really want to use this if you're having a problem with dropped characters during high speed communications, and even then, you're going to be better off twiddling with transfersize. USLEEP - enable support for devices that don't disconnect. Untested. Common problems : 1. Command timeouts, aborts, etc. You should install the NCR5380 patches that I posted to the net some time ago, which should be integrated into some future alpha release. These patches fix a race condition in earlier NCR5380 driver cores, as well as fixing support for multiple devices on NCR5380 based boards. If that fails, you should disable the PSEUDO_DMA option by changing the #define PSEUDO_DMA line in drivers/scsi/pas16.c to #undef PSEUDO_DMA. Note that the later should be considered a last resort, because there will be a severe performance degradation. Subsection K : Trantor T128/T128F/T228 Supported and Unsupported Configurations : Base addresses : 0xcc000, 00xc8000, 0xdc000, 0xd8000 IRQs : none, 3, 5, 7 (all boards) 10, 12, 14, 15 (T128F only) DMA is not used. IO : memory mapped Autoprobe : works for all supported configurations, requires installed BIOS. Autoprobe Override : Compile time : Define T128_OVERRIDE to be an array of address, irq tupples. Ie #define T128_OVERRIDE {{0xcc000, 5}} for a board at address 0xcc000, IRQ 5. The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used. kernel command line : t128=address,irq -1 may be used for no irq, -2 for irq autoprobe. Defines : AUTOSENSE - if defined, REQUEST SENSE will be performed automatically for commands that return with a CHECK CONDITION status. PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance increase compared to polled I/O. PARITY - enable parity checking. Not supported SCSI2 - enable support for SCSI-II tagged queueing. Untested UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You only really want to use this if you're having a problem with dropped characters during high speed communications, and even then, you're going to be better off twiddling with transfersize. USLEEP - enable support for devices that don't disconnect. Untested. Common Problems : 1. Command timeouts, aborts, etc. You should install the NCR5380 patches that I posted to the net some time ago, which should be integrated into some future alpha release. These patches fix a race condition in earlier NCR5380 driver cores, as well as fixing support for multiple devices on NCR5380 based boards. If that fails, you should disable the PSEUDO_DMA option by changing the #define PSEUDO_DMA line in drivers/scsi/pas16.c to #undef PSEUDO_DMA. Note that the later should be considered a last resort, because there will be a severe performance degradation. Subsection L : Ultrastor 14f, 24f, 34f Ports : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340 IRQs : 10, 11, 14, 15 DMA channels : 5, 6, 7 IO : port mapped, bus master Autoprobe : does not work for boards at port 0x310, BIOS not required. Autoprobe override : compile time only, define PORT_OVERRIDE Common Problems : 1. The address 0x310 is not supported by the autoprobe code, and may cause conflicts if networking is enabled. Please use a different address. 2. Using an Ultrastor at address 0x330 may cause the system to hang when the sound drivers are autoprobing. Please use a different address. 3. Various other drivers do unsafe probes at various addresses, if you are having problems with detection or the system is hanging at boot time, please try a different address. 0x340 is recommended as an address that is known to work. 4. Linux detects no SCSI devices, but detects your SCSI hard disk on an Ultrastor SCSI board as a normal hard disk, and the hard disk driver refuses to support it. Note that when this occurs, you will probably also get a message hd.c: ST-506 interface disk with more than 16 heads detected, probably due to non-standard sector translation. Giving up. (disk %d: cyl=%d, sect=63, head=64) If this is the case, you are running the Ultrastor board in WD1003 emulation mode. You have 1. Switch the ultrastor into native mode. This is the recommended action, since the SCSI driver can be significantly faster than the IDE driver, especially with the clustered read/write patches installed. Some users have sustained in excess of 2M/sec through the file system using these patches. Note that this will be necessary if you wish to use any non- hard disk, or more than two hard disk devices on the Ultrastor. 2. Use the kernel command line switch hd=cylinders,heads,sectors to override the default setting to bootstrap yourself, keeping number of cylinders <= 2048, number of heads <= 16, and number of sectors <= 255 such that cylinders * heads * sectors is the same for both mappings. You'll also have to manually specify the disk geometry when running fdisk under Linux. Failure to do so will result in incorrect partition entries being written, which will work correctly with Linux but fail under MSDOS which looks at the cylinder/head/sector entries in the table. Once Linux is up, you can avoid the inconvience of having to boot by hand by recompiling the kernel with an appropriately defined HD_TYPE macro in include/linux/config.h. Subsection M : Western Digital 7000 Supported Configurations : BIOS Addresses : 0xce000 Ports : 0x350 IRQs : 15 DMA Channels : 6 IO : port mapped, bus master Autoprobe : requires installed BIOS Common Problems : 1. There are several revisisions of the chip and firmware. Supposedly, revision 3 boards do not work, revision 5 boards do, chips with no suffix do not work, chips with an 'A' suffix do. 2. The board supports a few BIOS addresses which aren't on the list of supported addresses. If you run into this situation, please use one of the supported addresses and submit a bug report as outlined in Section 2, "Bug Reports" Section 4 : Disks Subsection A : Supported and Unsupported Hardware All direct access SCSI devices with a block size of 256, 512, or 1024 bytes should work. Other block sizes will not work (Note that this can often be fixed by changing the block and/or sector sizes using the MODE SELECT SCSI command) Sector size refers to the number of data bytes allocated per sector on a device, ie CDROMs use a 2048 byte sector size. Block size refers to the size of the logical blocks used to interface with the device. Although this is usually identical to sector size, some devices map multiple smaller physical sectors (ie, 256 bytes in the case of 55M Syquest drives) to larger logical blocks or vice versa (ie, 512 byte blocks on SUN compatable CDROM drives). Removeable media devices, including Bernoulis, flopticals, and MO drives work. Subsection B: Common Problems 1. When partitioning, you get a warning message about "cylinder > 1024" or you are unable to boot from a partition including a logical cylinder past logical cylinder 1024. This is a BIOS limitation. See Subsection D, Disk Geometry, for an explanation. 2. You are unable to partition /dev/hd* /dev/hd* aren't SCSI devices, /dev/sd* are. See Subsection C, Device files, and Subsection E, partitioning for the correct device names and partitioning procedure. 3. You are unable to eject media from a removeable media drive Linux attempts to lock the drive door when a piece of media is mounted to prevent filesystem corruption due to an inadvertant media change. Please unmount your disks before ejecting them. Subsection C : Device Files SCSI disks use block device major 8, and there are no "raw" devices ala BSD. 16 minor numbers are allocated to each SCSI disk, with minor % 16 == 0 being the whole disk, minors 1 <= (minor % 16) <= 4 the four primary partitions, minors 5 <= (minor % 16) <= 15 any extended partitions. Due to constraints imposed by Linux's use of a sixteen bit dev_t with only eight bits allocated to the minor number, the SCSI disk minor numbers are assigned dynamically starting with the lowest SCSI HOST/ID/LUN. Ie, a configuration may work out like this (with one host adapter) Device Target, Lun SCSI disk 84M Seagate 0 0 /dev/sda SCSI->SMD bridge disk 0 3 0 /dev/sdb SCSI->SMD bridge disk 1 3 1 /dev/sdc Wangtek tape 4 0 none 213M Maxtor 6 0 /dev/sdd Etc. The standard naming convention is /dev/sd{letter} for the entire disk device ((minor % 16) == 0) /dev/sd{letter}{partition} for the partitions on that device (1 <= (minor % 16) <= 15) Ie /dev/sda block device major 8 minor 0 /dev/sda1 block device major 8 minor 1 /dev/sda2 block device major 8 minor 2 /dev/sdb block device major 8 minor 16 etc. Subsection D: Disk Geometry The problem with partitioning SCSI disks and Linux is that Linux talks directly to the SCSI interface. Each disk is viewed as the SCSI host sees it : N blocks, numbered from 0 to N-1, all error free. There is no portable way to get disk geometry. Conversly, DOS predates intelligent disks, and requires a head / cylinder / sector mapping. If you don't care about using DOS, create a translation such that H * C * S * 512 < size of your drive in bytes (a megabyte is defined as 2^20 bytes). Otherwise, you'll have to use the BIOS mapping. In some cases, this will mean reconfiguring the disk so that it is at SCSI ID 0, and disabling the second IDE drive (if you have one). You can either use a program like NU, or you can use the following program : begin 664 dparam.com MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U M1(I7`H#J,(#Z`7L6N]T!,=*Y M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O L