This page is out of date. Please use the main navigation to find the latest documentation.
No license, so assumed to be GPLv2. /* * eata.c - Low-level driver for EATA/DMA SCSI host adapters. * * 03 Jun 2003 Rev. 8.10 for linux-2.5.70 * + Update for new IRQ API. * + Use "goto" when appropriate. * + Drop eata.h. * + Update for new module_param API. * + Module parameters can now be specified only in the * same format as the kernel boot options. * * boot option old module param * ----------- ------------------ * addr,... io_port=addr,... * lc:[y|n] linked_comm=[1|0] * mq:xx max_queue_depth=xx * tm:[0|1|2] tag_mode=[0|1|2] * et:[y|n] ext_tran=[1|0] * rs:[y|n] rev_scan=[1|0] * ip:[y|n] isa_probe=[1|0] * ep:[y|n] eisa_probe=[1|0] * pp:[y|n] pci_probe=[1|0] * * A valid example using the new parameter format is: * modprobe eata "eata=0x7410,0x230,lc:y,tm:0,mq:4,ep:n" * * which is equivalent to the old format: * modprobe eata io_port=0x7410,0x230 linked_comm=1 tag_mode=0 * max_queue_depth=4 eisa_probe=0 * * 12 Feb 2003 Rev. 8.04 for linux 2.5.60 * + Release irq before calling scsi_register. * * 12 Nov 2002 Rev. 8.02 for linux 2.5.47 * + Release driver_lock before calling scsi_register. * * 11 Nov 2002 Rev. 8.01 for linux 2.5.47 * + Fixed bios_param and scsicam_bios_param calling parameters. * * 28 Oct 2002 Rev. 8.00 for linux 2.5.44-ac4 * + Use new tcq and adjust_queue_depth api. * + New command line option (tm:[0-2]) to choose the type of tags: * 0 -> disable tagging ; 1 -> simple tags ; 2 -> ordered tags. * Default is tm:0 (tagged commands disabled). * For compatibility the "tc:" option is an alias of the "tm:" * option; tc:n is equivalent to tm:0 and tc:y is equivalent to * tm:1. * + The tagged_comm module parameter has been removed, use tag_mode * instead, equivalent to the "tm:" boot option. * * 10 Oct 2002 Rev. 7.70 for linux 2.5.42 * + Foreport from revision 6.70. * * 25 Jun 2002 Rev. 6.70 for linux 2.4.19 * + This release is the first one tested on a Big Endian platform: * fixed endian-ness problem due to bitfields; * fixed endian-ness problem in read_pio. * + Added new options for selectively probing ISA, EISA and PCI bus: * * Boot option Parameter name Default according to * * ip:[y|n] isa_probe=[1|0] CONFIG_ISA defined * ep:[y|n] eisa_probe=[1|0] CONFIG_EISA defined * pp:[y|n] pci_probe=[1|0] CONFIG_PCI defined * * The default action is to perform probing if the corrisponding * bus is configured and to skip probing otherwise. * * + If pci_probe is in effect and a list of I/O ports is specified * as parameter or boot option, pci_enable_device() is performed * on all pci devices matching PCI_CLASS_STORAGE_SCSI. * * 21 Feb 2002 Rev. 6.52 for linux 2.4.18 * + Backport from rev. 7.22 (use io_request_lock). * * 20 Feb 2002 Rev. 7.22 for linux 2.5.5 * + Remove any reference to virt_to_bus(). * + Fix pio hang while detecting multiple HBAs. * + Fixed a board detection bug: in a system with * multiple ISA/EISA boards, all but the first one * were erroneously detected as PCI. * * 01 Jan 2002 Rev. 7.20 for linux 2.5.1 * + Use the dynamic DMA mapping API. * * 19 Dec 2001 Rev. 7.02 for linux 2.5.1 * + Use SCpnt->sc_data_direction if set. * + Use sglist.page instead of sglist.address. * * 11 Dec 2001 Rev. 7.00 for linux 2.5.1 * + Use host->host_lock instead of io_request_lock. * * 1 May 2001 Rev. 6.05 for linux 2.4.4 * + Clean up all pci related routines. * + Fix data transfer direction for opcode SEND_CUE_SHEET (0x5d) * * 30 Jan 2001 Rev. 6.04 for linux 2.4.1 * + Call pci_resource_start after pci_enable_device. * * 25 Jan 2001 Rev. 6.03 for linux 2.4.0 * + "check_region" call replaced by "request_region". * * 22 Nov 2000 Rev. 6.02 for linux 2.4.0-test11 * + Return code checked when calling pci_enable_device. * + Removed old scsi error handling support. * + The obsolete boot option flag eh:n is silently ignored. * + Removed error messages while a disk drive is powered up at * boot time. * + Improved boot messages: all tagged capable device are * indicated as "tagged" or "soft-tagged" : * - "soft-tagged" means that the driver is trying to do its * own tagging (i.e. the tc:y option is in effect); * - "tagged" means that the device supports tagged commands, * but the driver lets the HBA be responsible for tagging * support. * * 16 Sep 1999 Rev. 5.11 for linux 2.2.12 and 2.3.18 * + Updated to the new __setup interface for boot command line options. * + When loaded as a module, accepts the new parameter boot_options * which value is a string with the same format of the kernel boot * command line options. A valid example is: * modprobe eata 'boot_options="0x7410,0x230,lc:y,tc:n,mq:4"' * * 9 Sep 1999 Rev. 5.10 for linux 2.2.12 and 2.3.17 * + 64bit cleanup for Linux/Alpha platform support * (contribution from H.J. Lu). * * 22 Jul 1999 Rev. 5.00 for linux 2.2.10 and 2.3.11 * + Removed pre-2.2 source code compatibility. * + Added call to pci_set_master. * * 26 Jul 1998 Rev. 4.33 for linux 2.0.35 and 2.1.111 * + Added command line option (rs:[y|n]) to reverse the scan order * of PCI boards. The default is rs:y, which reverses the BIOS order * while registering PCI boards. The default value rs:y generates * the same order of all previous revisions of this driver. * Pls. note that "BIOS order" might have been reversed itself * after the 2.1.9x PCI modifications in the linux kernel. * The rs value is ignored when the explicit list of addresses * is used by the "eata=port0,port1,..." command line option. * + Added command line option (et:[y|n]) to force use of extended * translation (255 heads, 63 sectors) as disk geometry. * The default is et:n, which uses the disk geometry returned * by scsicam_bios_param. The default value et:n is compatible with * all previous revisions of this driver. * * 28 May 1998 Rev. 4.32 for linux 2.0.33 and 2.1.104 * Increased busy timeout from 10 msec. to 200 msec. while * processing interrupts. * * 16 May 1998 Rev. 4.31 for linux 2.0.33 and 2.1.102 * Improved abort handling during the eh recovery process. * * 13 May 1998 Rev. 4.30 for linux 2.0.33 and 2.1.101 * The driver is now fully SMP safe, including the * abort and reset routines. * Added command line options (eh:[y|n]) to choose between * new_eh_code and the old scsi code. * If linux version >= 2.1.101 the default is eh:y, while the eh * option is ignored for previous releases and the old scsi code * is used. * * 18 Apr 1998 Rev. 4.20 for linux 2.0.33 and 2.1.97 * Reworked interrupt handler. * * 11 Apr 1998 rev. 4.05 for linux 2.0.33 and 2.1.95 * Major reliability improvement: when a batch with overlapping * requests is detected, requests are queued one at a time * eliminating any possible board or drive reordering. * * 10 Apr 1998 rev. 4.04 for linux 2.0.33 and 2.1.95 * Improved SMP support (if linux version >= 2.1.95). * * 9 Apr 1998 rev. 4.03 for linux 2.0.33 and 2.1.94 * Added support for new PCI code and IO-APIC remapping of irqs. * Performance improvement: when sequential i/o is detected, * always use direct sort instead of reverse sort. * * 4 Apr 1998 rev. 4.02 for linux 2.0.33 and 2.1.92 * io_port is now unsigned long. * * 17 Mar 1998 rev. 4.01 for linux 2.0.33 and 2.1.88 * Use new scsi error handling code (if linux version >= 2.1.88). * Use new interrupt code. * * 12 Sep 1997 rev. 3.11 for linux 2.0.30 and 2.1.55 * Use of udelay inside the wait loops to avoid timeout * problems with fast cpus. * Removed check about useless calls to the interrupt service * routine (reported on SMP systems only). * At initialization time "sorted/unsorted" is displayed instead * of "linked/unlinked" to reinforce the fact that "linking" is * nothing but "elevator sorting" in the actual implementation. * * 17 May 1997 rev. 3.10 for linux 2.0.30 and 2.1.38 * Use of serial_number_at_timeout in abort and reset processing. * Use of the __initfunc and __initdata macro in setup code. * Minor cleanups in the list_statistics code. * Increased controller busy timeout in order to better support * slow SCSI devices. * * 24 Feb 1997 rev. 3.00 for linux 2.0.29 and 2.1.26 * When loading as a module, parameter passing is now supported * both in 2.0 and in 2.1 style. * Fixed data transfer direction for some SCSI opcodes. * Immediate acknowledge to request sense commands. * Linked commands to each disk device are now reordered by elevator * sorting. Rare cases in which reordering of write requests could * cause wrong results are managed. * Fixed spurious timeouts caused by long simple queue tag sequences. * New command line option (tm:[0-3]) to choose the type of tags: * 0 -> mixed (default); 1 -> simple; 2 -> head; 3 -> ordered. * * 18 Jan 1997 rev. 2.60 for linux 2.1.21 and 2.0.28 * Added command line options to enable/disable linked commands * (lc:[y|n]), tagged commands (tc:[y|n]) and to set the max queue * depth (mq:xx). Default is "eata=lc:n,tc:n,mq:16". * Improved command linking. * Documented how to setup RAID-0 with DPT SmartRAID boards. * * 8 Jan 1997 rev. 2.50 for linux 2.1.20 and 2.0.27 * Added linked command support. * Improved detection of PCI boards using ISA base addresses. * * 3 Dec 1996 rev. 2.40 for linux 2.1.14 and 2.0.27 * Added support for tagged commands and queue depth adjustment. * * 22 Nov 1996 rev. 2.30 for linux 2.1.12 and 2.0.26 * When CONFIG_PCI is defined, BIOS32 is used to include in the * list of i/o ports to be probed all the PCI SCSI controllers. * The list of i/o ports to be probed can be overwritten by the * "eata=port0,port1,...." boot command line option. * Scatter/gather lists are now allocated by a number of kmalloc * calls, in order to avoid the previous size limit of 64Kb. * * 16 Nov 1996 rev. 2.20 for linux 2.1.10 and 2.0.25 * Added support for EATA 2.0C, PCI, multichannel and wide SCSI. * * 27 Sep 1996 rev. 2.12 for linux 2.1.0 * Portability cleanups (virtual/bus addressing, little/big endian * support). * * 09 Jul 1996 rev. 2.11 for linux 2.0.4 * Number of internal retries is now limited. * * 16 Apr 1996 rev. 2.10 for linux 1.3.90 * New argument "reset_flags" to the reset routine. * * 6 Jul 1995 rev. 2.01 for linux 1.3.7 * Update required by the new /proc/scsi support. * * 11 Mar 1995 rev. 2.00 for linux 1.2.0 * Fixed a bug which prevented media change detection for removable * disk drives. * * 23 Feb 1995 rev. 1.18 for linux 1.1.94 * Added a check for scsi_register returning NULL. * * 11 Feb 1995 rev. 1.17 for linux 1.1.91 * Now DEBUG_RESET is disabled by default. * Register a board even if it does not assert DMA protocol support * (DPT SK2011B does not report correctly the dmasup bit). * * 9 Feb 1995 rev. 1.16 for linux 1.1.90 * Use host->wish_block instead of host->block. * New list of Data Out SCSI commands. * * 8 Feb 1995 rev. 1.15 for linux 1.1.89 * Cleared target_time_out counter while performing a reset. * All external symbols renamed to avoid possible name conflicts. * * 28 Jan 1995 rev. 1.14 for linux 1.1.86 * Added module support. * Log and do a retry when a disk drive returns a target status * different from zero on a recovered error. * * 24 Jan 1995 rev. 1.13 for linux 1.1.85 * Use optimized board configuration, with a measured performance * increase in the range 10%-20% on i/o throughput. * * 16 Jan 1995 rev. 1.12 for linux 1.1.81 * Fix mscp structure comments (no functional change). * Display a message if check_region detects a port address * already in use. * * 17 Dec 1994 rev. 1.11 for linux 1.1.74 * Use the scsicam_bios_param routine. This allows an easy * migration path from disk partition tables created using * different SCSI drivers and non optimal disk geometry. * * 15 Dec 1994 rev. 1.10 for linux 1.1.74 * Added support for ISA EATA boards (DPT PM2011, DPT PM2021). * The host->block flag is set for all the detected ISA boards. * The detect routine no longer enforces LEVEL triggering * for EISA boards, it just prints a warning message. * * 30 Nov 1994 rev. 1.09 for linux 1.1.68 * Redo i/o on target status CHECK_CONDITION for TYPE_DISK only. * Added optional support for using a single board at a time. * * 18 Nov 1994 rev. 1.08 for linux 1.1.64 * Forces sg_tablesize = 64 and can_queue = 64 if these * values are not correctly detected (DPT PM2012). * * 14 Nov 1994 rev. 1.07 for linux 1.1.63 Final BETA release. * 04 Aug 1994 rev. 1.00 for linux 1.1.39 First BETA release. * * * This driver is based on the CAM (Common Access Method Committee) * EATA (Enhanced AT Bus Attachment) rev. 2.0A, using DMA protocol. * * Copyright (C) 1994-2003 Dario Ballabio (email@example.com) * * Alternate email: firstname.lastname@example.org, email@example.com * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that redistributions of source * code retain the above copyright notice and this comment without * modification. * */ /* * * Here is a brief description of the DPT SCSI host adapters. * All these boards provide an EATA/DMA compatible programming interface * and are fully supported by this driver in any configuration, including * multiple SCSI channels: * * PM2011B/9X - Entry Level ISA * PM2021A/9X - High Performance ISA * PM2012A Old EISA * PM2012B Old EISA * PM2022A/9X - Entry Level EISA * PM2122A/9X - High Performance EISA * PM2322A/9X - Extra High Performance EISA * PM3021 - SmartRAID Adapter for ISA * PM3222 - SmartRAID Adapter for EISA (PM3222W is 16-bit wide SCSI) * PM3224 - SmartRAID Adapter for PCI (PM3224W is 16-bit wide SCSI) * PM33340UW - SmartRAID Adapter for PCI ultra wide multichannel * * The above list is just an indication: as a matter of fact all DPT * boards using the EATA/DMA protocol are supported by this driver, * since they use exactely the same programming interface. * * The DPT PM2001 provides only the EATA/PIO interface and hence is not * supported by this driver. * * This code has been tested with up to 3 Distributed Processing Technology * PM2122A/9X (DPT SCSI BIOS v002.D1, firmware v05E.0) EISA controllers, * in any combination of private and shared IRQ. * PCI support has been tested using up to 2 DPT PM3224W (DPT SCSI BIOS * v003.D0, firmware v07G.0). * * DPT SmartRAID boards support "Hardware Array" - a group of disk drives * which are all members of the same RAID-0, RAID-1 or RAID-5 array implemented * in host adapter hardware. Hardware Arrays are fully compatible with this * driver, since they look to it as a single disk drive. * * WARNING: to create a RAID-0 "Hardware Array" you must select "Other Unix" * as the current OS in the DPTMGR "Initial System Installation" menu. * Otherwise RAID-0 is generated as an "Array Group" (i.e. software RAID-0), * which is not supported by the actual SCSI subsystem. * To get the "Array Group" functionality, the Linux MD driver must be used * instead of the DPT "Array Group" feature. * * Multiple ISA, EISA and PCI boards can be configured in the same system. * It is suggested to put all the EISA boards on the same IRQ level, all * the PCI boards on another IRQ level, while ISA boards cannot share * interrupts. * * If you configure multiple boards on the same IRQ, the interrupt must * be _level_ triggered (not _edge_ triggered). * * This driver detects EATA boards by probes at fixed port addresses, * so no BIOS32 or PCI BIOS support is required. * The suggested way to detect a generic EATA PCI board is to force on it * any unused EISA address, even if there are other controllers on the EISA * bus, or even if you system has no EISA bus at all. * Do not force any ISA address on EATA PCI boards. * * If PCI bios support is configured into the kernel, BIOS32 is used to * include in the list of i/o ports to be probed all the PCI SCSI controllers. * * Due to a DPT BIOS "feature", it might not be possible to force an EISA * address on more than a single DPT PCI board, so in this case you have to * let the PCI BIOS assign the addresses. * * The sequence of detection probes is: * * - ISA 0x1F0; * - PCI SCSI controllers (only if BIOS32 is available); * - EISA/PCI 0x1C88 through 0xFC88 (corresponding to EISA slots 1 to 15); * - ISA 0x170, 0x230, 0x330. * * The above list of detection probes can be totally replaced by the * boot command line option: "eata=port0,port1,port2,...", where the * port0, port1... arguments are ISA/EISA/PCI addresses to be probed. * For example using "eata=0x7410,0x7450,0x230", the driver probes * only the two PCI addresses 0x7410 and 0x7450 and the ISA address 0x230, * in this order; "eata=0" totally disables this driver. * * After the optional list of detection probes, other possible command line * options are: * * et:y force use of extended translation (255 heads, 63 sectors); * et:n use disk geometry detected by scsicam_bios_param; * rs:y reverse scan order while detecting PCI boards; * rs:n use BIOS order while detecting PCI boards; * lc:y enables linked commands; * lc:n disables linked commands; * tm:0 disables tagged commands (same as tc:n); * tm:1 use simple queue tags (same as tc:y); * tm:2 use ordered queue tags (same as tc:2); * mq:xx set the max queue depth to the value xx (2 <= xx <= 32). * * The default value is: "eata=lc:n,mq:16,tm:0,et:n,rs:n". * An example using the list of detection probes could be: * "eata=0x7410,0x230,lc:y,tm:2,mq:4,et:n". * * When loading as a module, parameters can be specified as well. * The above example would be (use 1 in place of y and 0 in place of n): * * modprobe eata io_port=0x7410,0x230 linked_comm=1 * max_queue_depth=4 ext_tran=0 tag_mode=2 * rev_scan=1 * * ---------------------------------------------------------------------------- * In this implementation, linked commands are designed to work with any DISK * or CD-ROM, since this linking has only the intent of clustering (time-wise) * and reordering by elevator sorting commands directed to each device, * without any relation with the actual SCSI protocol between the controller * and the device. * If Q is the queue depth reported at boot time for each device (also named * cmds/lun) and Q > 2, whenever there is already an active command to the * device all other commands to the same device (up to Q-1) are kept waiting * in the elevator sorting queue. When the active command completes, the * commands in this queue are sorted by sector address. The sort is chosen * between increasing or decreasing by minimizing the seek distance between * the sector of the commands just completed and the sector of the first * command in the list to be sorted. * Trivial math assures that the unsorted average seek distance when doing * random seeks over S sectors is S/3. * When (Q-1) requests are uniformly distributed over S sectors, the average * distance between two adjacent requests is S/((Q-1) + 1), so the sorted * average seek distance for (Q-1) random requests over S sectors is S/Q. * The elevator sorting hence divides the seek distance by a factor Q/3. * The above pure geometric remarks are valid in all cases and the * driver effectively reduces the seek distance by the predicted factor * when there are Q concurrent read i/o operations on the device, but this * does not necessarily results in a noticeable performance improvement: * your mileage may vary.... * * Note: command reordering inside a batch of queued commands could cause * wrong results only if there is at least one write request and the * intersection (sector-wise) of all requests is not empty. * When the driver detects a batch including overlapping requests * (a really rare event) strict serial (pid) order is enforced. * ---------------------------------------------------------------------------- * The extended translation option (et:y) is useful when using large physical * disks/arrays. It could also be useful when switching between Adaptec boards * and DPT boards without reformatting the disk. * When a boot disk is partitioned with extended translation, in order to * be able to boot it with a DPT board is could be necessary to add to * lilo.conf additional commands as in the following example: * * fix-table * disk=/dev/sda bios=0x80 sectors=63 heads=128 cylindres=546 * * where the above geometry should be replaced with the one reported at * power up by the DPT controller. * ---------------------------------------------------------------------------- * * The boards are named EATA0, EATA1,... according to the detection order. * * In order to support multiple ISA boards in a reliable way, * the driver sets host->wish_block = 1 for all ISA boards. */