u14-34f.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:63k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *      u14-34f.c - Low-level driver for UltraStor 14F/34F SCSI host adapters.
  3.  *
  4.  *      25 Jun 2002 Rev. 6.70 for linux 2.4.19
  5.  *        + Fixed endian-ness problem due to bitfields.
  6.  *
  7.  *      21 Feb 2002 Rev. 6.52 for linux 2.4.18
  8.  *        + Backport from rev. 7.22 (use io_request_lock).
  9.  *
  10.  *      20 Feb 2002 Rev. 7.22 for linux 2.5.5
  11.  *        + Remove any reference to virt_to_bus().
  12.  *        + Fix pio hang while detecting multiple HBAs.
  13.  *
  14.  *      01 Jan 2002 Rev. 7.20 for linux 2.5.1
  15.  *        + Use the dynamic DMA mapping API.
  16.  *
  17.  *      19 Dec 2001 Rev. 7.02 for linux 2.5.1
  18.  *        + Use SCpnt->sc_data_direction if set.
  19.  *        + Use sglist.page instead of sglist.address.
  20.  *
  21.  *      11 Dec 2001 Rev. 7.00 for linux 2.5.1
  22.  *        + Use host->host_lock instead of io_request_lock.
  23.  *
  24.  *       1 May 2001 Rev. 6.05 for linux 2.4.4
  25.  *        + Fix data transfer direction for opcode SEND_CUE_SHEET (0x5d)
  26.  *
  27.  *      25 Jan 2001 Rev. 6.03 for linux 2.4.0
  28.  *        + "check_region" call replaced by "request_region".
  29.  *
  30.  *      22 Nov 2000 Rev. 6.02 for linux 2.4.0-test11
  31.  *        + Removed old scsi error handling support.
  32.  *        + The obsolete boot option flag eh:n is silently ignored.
  33.  *        + Removed error messages while a disk drive is powered up at
  34.  *          boot time.
  35.  *        + Improved boot messages: all tagged capable device are
  36.  *          indicated as "tagged".
  37.  *
  38.  *      16 Sep 1999 Rev. 5.11 for linux 2.2.12 and 2.3.18
  39.  *        + Updated to the new __setup interface for boot command line options.
  40.  *        + When loaded as a module, accepts the new parameter boot_options
  41.  *          which value is a string with the same format of the kernel boot
  42.  *          command line options. A valid example is:
  43.  *          modprobe u14-34f 'boot_options="0x230,0x340,lc:y,mq:4"'
  44.  *
  45.  *      22 Jul 1999 Rev. 5.00 for linux 2.2.10 and 2.3.11
  46.  *        + Removed pre-2.2 source code compatibility.
  47.  *
  48.  *      26 Jul 1998 Rev. 4.33 for linux 2.0.35 and 2.1.111
  49.  *          Added command line option (et:[y|n]) to use the existing
  50.  *          translation (returned by scsicam_bios_param) as disk geometry.
  51.  *          The default is et:n, which uses the disk geometry jumpered
  52.  *          on the board.
  53.  *          The default value et:n is compatible with all previous revisions
  54.  *          of this driver.
  55.  *
  56.  *      28 May 1998 Rev. 4.32 for linux 2.0.33 and 2.1.104
  57.  *          Increased busy timeout from 10 msec. to 200 msec. while
  58.  *          processing interrupts.
  59.  *
  60.  *      18 May 1998 Rev. 4.31 for linux 2.0.33 and 2.1.102
  61.  *          Improved abort handling during the eh recovery process.
  62.  *
  63.  *      13 May 1998 Rev. 4.30 for linux 2.0.33 and 2.1.101
  64.  *          The driver is now fully SMP safe, including the
  65.  *          abort and reset routines.
  66.  *          Added command line options (eh:[y|n]) to choose between
  67.  *          new_eh_code and the old scsi code.
  68.  *          If linux version >= 2.1.101 the default is eh:y, while the eh
  69.  *          option is ignored for previous releases and the old scsi code
  70.  *          is used.
  71.  *
  72.  *      18 Apr 1998 Rev. 4.20 for linux 2.0.33 and 2.1.97
  73.  *          Reworked interrupt handler.
  74.  *
  75.  *      11 Apr 1998 rev. 4.05 for linux 2.0.33 and 2.1.95
  76.  *          Major reliability improvement: when a batch with overlapping
  77.  *          requests is detected, requests are queued one at a time
  78.  *          eliminating any possible board or drive reordering.
  79.  *
  80.  *      10 Apr 1998 rev. 4.04 for linux 2.0.33 and 2.1.95
  81.  *          Improved SMP support (if linux version >= 2.1.95).
  82.  *
  83.  *       9 Apr 1998 rev. 4.03 for linux 2.0.33 and 2.1.94
  84.  *          Performance improvement: when sequential i/o is detected,
  85.  *          always use direct sort instead of reverse sort.
  86.  *
  87.  *       4 Apr 1998 rev. 4.02 for linux 2.0.33 and 2.1.92
  88.  *          io_port is now unsigned long.
  89.  *
  90.  *      17 Mar 1998 rev. 4.01 for linux 2.0.33 and 2.1.88
  91.  *          Use new scsi error handling code (if linux version >= 2.1.88).
  92.  *          Use new interrupt code.
  93.  *
  94.  *      12 Sep 1997 rev. 3.11 for linux 2.0.30 and 2.1.55
  95.  *          Use of udelay inside the wait loops to avoid timeout
  96.  *          problems with fast cpus.
  97.  *          Removed check about useless calls to the interrupt service
  98.  *          routine (reported on SMP systems only).
  99.  *          At initialization time "sorted/unsorted" is displayed instead
  100.  *          of "linked/unlinked" to reinforce the fact that "linking" is
  101.  *          nothing but "elevator sorting" in the actual implementation.
  102.  *
  103.  *      17 May 1997 rev. 3.10 for linux 2.0.30 and 2.1.38
  104.  *          Use of serial_number_at_timeout in abort and reset processing.
  105.  *          Use of the __initfunc and __initdata macro in setup code.
  106.  *          Minor cleanups in the list_statistics code.
  107.  *
  108.  *      24 Feb 1997 rev. 3.00 for linux 2.0.29 and 2.1.26
  109.  *          When loading as a module, parameter passing is now supported
  110.  *          both in 2.0 and in 2.1 style.
  111.  *          Fixed data transfer direction for some SCSI opcodes.
  112.  *          Immediate acknowledge to request sense commands.
  113.  *          Linked commands to each disk device are now reordered by elevator
  114.  *          sorting. Rare cases in which reordering of write requests could
  115.  *          cause wrong results are managed.
  116.  *
  117.  *      18 Jan 1997 rev. 2.60 for linux 2.1.21 and 2.0.28
  118.  *          Added command line options to enable/disable linked commands
  119.  *          (lc:[y|n]), old firmware support (of:[y|n]) and to set the max
  120.  *          queue depth (mq:xx). Default is "u14-34f=lc:n,of:n,mq:8".
  121.  *          Improved command linking.
  122.  *
  123.  *       8 Jan 1997 rev. 2.50 for linux 2.1.20 and 2.0.27
  124.  *          Added linked command support.
  125.  *
  126.  *       3 Dec 1996 rev. 2.40 for linux 2.1.14 and 2.0.27
  127.  *          Added queue depth adjustment.
  128.  *
  129.  *      22 Nov 1996 rev. 2.30 for linux 2.1.12 and 2.0.26
  130.  *          The list of i/o ports to be probed can be overwritten by the
  131.  *          "u14-34f=port0,port1,...." boot command line option.
  132.  *          Scatter/gather lists are now allocated by a number of kmalloc
  133.  *          calls, in order to avoid the previous size limit of 64Kb.
  134.  *
  135.  *      16 Nov 1996 rev. 2.20 for linux 2.1.10 and 2.0.25
  136.  *          Added multichannel support.
  137.  *
  138.  *      27 Sep 1996 rev. 2.12 for linux 2.1.0
  139.  *          Portability cleanups (virtual/bus addressing, little/big endian
  140.  *          support).
  141.  *
  142.  *      09 Jul 1996 rev. 2.11 for linux 2.0.4
  143.  *          "Data over/under-run" no longer implies a redo on all targets.
  144.  *          Number of internal retries is now limited.
  145.  *
  146.  *      16 Apr 1996 rev. 2.10 for linux 1.3.90
  147.  *          New argument "reset_flags" to the reset routine.
  148.  *
  149.  *      21 Jul 1995 rev. 2.02 for linux 1.3.11
  150.  *          Fixed Data Transfer Direction for some SCSI commands.
  151.  *
  152.  *      13 Jun 1995 rev. 2.01 for linux 1.2.10
  153.  *          HAVE_OLD_UX4F_FIRMWARE should be defined for U34F boards when
  154.  *          the firmware prom is not the latest one (28008-006).
  155.  *
  156.  *      11 Mar 1995 rev. 2.00 for linux 1.2.0
  157.  *          Fixed a bug which prevented media change detection for removable
  158.  *          disk drives.
  159.  *
  160.  *      23 Feb 1995 rev. 1.18 for linux 1.1.94
  161.  *          Added a check for scsi_register returning NULL.
  162.  *
  163.  *      11 Feb 1995 rev. 1.17 for linux 1.1.91
  164.  *          U14F qualified to run with 32 sglists.
  165.  *          Now DEBUG_RESET is disabled by default.
  166.  *
  167.  *       9 Feb 1995 rev. 1.16 for linux 1.1.90
  168.  *          Use host->wish_block instead of host->block.
  169.  *
  170.  *       8 Feb 1995 rev. 1.15 for linux 1.1.89
  171.  *          Cleared target_time_out counter while performing a reset.
  172.  *
  173.  *      28 Jan 1995 rev. 1.14 for linux 1.1.86
  174.  *          Added module support.
  175.  *          Log and do a retry when a disk drive returns a target status
  176.  *          different from zero on a recovered error.
  177.  *          Auto detects if U14F boards have an old firmware revision.
  178.  *          Max number of scatter/gather lists set to 16 for all boards
  179.  *          (most installation run fine using 33 sglists, while other
  180.  *          has problems when using more then 16).
  181.  *
  182.  *      16 Jan 1995 rev. 1.13 for linux 1.1.81
  183.  *          Display a message if check_region detects a port address
  184.  *          already in use.
  185.  *
  186.  *      15 Dec 1994 rev. 1.12 for linux 1.1.74
  187.  *          The host->block flag is set for all the detected ISA boards.
  188.  *
  189.  *      30 Nov 1994 rev. 1.11 for linux 1.1.68
  190.  *          Redo i/o on target status CHECK_CONDITION for TYPE_DISK only.
  191.  *          Added optional support for using a single board at a time.
  192.  *
  193.  *      14 Nov 1994 rev. 1.10 for linux 1.1.63
  194.  *
  195.  *      28 Oct 1994 rev. 1.09 for linux 1.1.58  Final BETA release.
  196.  *      16 Jul 1994 rev. 1.00 for linux 1.1.29  Initial ALPHA release.
  197.  *
  198.  *          This driver is a total replacement of the original UltraStor
  199.  *          scsi driver, but it supports ONLY the 14F and 34F boards.
  200.  *          It can be configured in the same kernel in which the original
  201.  *          ultrastor driver is configured to allow the original U24F
  202.  *          support.
  203.  *
  204.  *          Multiple U14F and/or U34F host adapters are supported.
  205.  *
  206.  *  Copyright (C) 1994-2002 Dario Ballabio (ballabio_dario@emc.com)
  207.  *
  208.  *  Alternate email: dario.ballabio@inwind.it, dario.ballabio@tiscalinet.it
  209.  *
  210.  *  Redistribution and use in source and binary forms, with or without
  211.  *  modification, are permitted provided that redistributions of source
  212.  *  code retain the above copyright notice and this comment without
  213.  *  modification.
  214.  *
  215.  *      WARNING: if your 14/34F board has an old firmware revision (see below)
  216.  *               you must change "#undef" into "#define" in the following
  217.  *               statement.
  218.  */
  219. #undef HAVE_OLD_UX4F_FIRMWARE
  220. /*
  221.  *  The UltraStor 14F, 24F, and 34F are a family of intelligent, high
  222.  *  performance SCSI-2 host adapters.
  223.  *  Here is the scoop on the various models:
  224.  *
  225.  *  14F - ISA first-party DMA HA with floppy support and WD1003 emulation.
  226.  *  24F - EISA Bus Master HA with floppy support and WD1003 emulation.
  227.  *  34F - VESA Local-Bus Bus Master HA (no WD1003 emulation).
  228.  *
  229.  *  This code has been tested with up to two U14F boards, using both
  230.  *  firmware 28004-005/38004-004 (BIOS rev. 2.00) and the latest firmware
  231.  *  28004-006/38004-005 (BIOS rev. 2.01).
  232.  *
  233.  *  The latest firmware is required in order to get reliable operations when
  234.  *  clustering is enabled. ENABLE_CLUSTERING provides a performance increase
  235.  *  up to 50% on sequential access.
  236.  *
  237.  *  Since the Scsi_Host_Template structure is shared among all 14F and 34F,
  238.  *  the last setting of use_clustering is in effect for all of these boards.
  239.  *
  240.  *  Here a sample configuration using two U14F boards:
  241.  *
  242.  U14F0: ISA 0x330, BIOS 0xc8000, IRQ 11, DMA 5, SG 32, MB 16, of:n, lc:y, mq:8.
  243.  U14F1: ISA 0x340, BIOS 0x00000, IRQ 10, DMA 6, SG 32, MB 16, of:n, lc:y, mq:8.
  244.  *
  245.  *  The boot controller must have its BIOS enabled, while other boards can
  246.  *  have their BIOS disabled, or enabled to an higher address.
  247.  *  Boards are named Ux4F0, Ux4F1..., according to the port address order in
  248.  *  the io_port[] array.
  249.  *
  250.  *  The following facts are based on real testing results (not on
  251.  *  documentation) on the above U14F board.
  252.  *
  253.  *  - The U14F board should be jumpered for bus on time less or equal to 7
  254.  *    microseconds, while the default is 11 microseconds. This is order to
  255.  *    get acceptable performance while using floppy drive and hard disk
  256.  *    together. The jumpering for 7 microseconds is: JP13 pin 15-16,
  257.  *    JP14 pin 7-8 and pin 9-10.
  258.  *    The reduction has a little impact on scsi performance.
  259.  *
  260.  *  - If scsi bus length exceeds 3m., the scsi bus speed needs to be reduced
  261.  *    from 10Mhz to 5Mhz (do this by inserting a jumper on JP13 pin 7-8).
  262.  *
  263.  *  - If U14F on board firmware is older than 28004-006/38004-005,
  264.  *    the U14F board is unable to provide reliable operations if the scsi
  265.  *    request length exceeds 16Kbyte. When this length is exceeded the
  266.  *    behavior is:
  267.  *    - adapter_status equal 0x96 or 0xa3 or 0x93 or 0x94;
  268.  *    - adapter_status equal 0 and target_status equal 2 on for all targets
  269.  *      in the next operation following the reset.
  270.  *    This sequence takes a long time (>3 seconds), so in the meantime
  271.  *    the SD_TIMEOUT in sd.c could expire giving rise to scsi aborts
  272.  *    (SD_TIMEOUT has been increased from 3 to 6 seconds in 1.1.31).
  273.  *    Because of this I had to DISABLE_CLUSTERING and to work around the
  274.  *    bus reset in the interrupt service routine, returning DID_BUS_BUSY
  275.  *    so that the operations are retried without complains from the scsi.c
  276.  *    code.
  277.  *    Any reset of the scsi bus is going to kill tape operations, since
  278.  *    no retry is allowed for tapes. Bus resets are more likely when the
  279.  *    scsi bus is under heavy load.
  280.  *    Requests using scatter/gather have a maximum length of 16 x 1024 bytes
  281.  *    when DISABLE_CLUSTERING is in effect, but unscattered requests could be
  282.  *    larger than 16Kbyte.
  283.  *
  284.  *    The new firmware has fixed all the above problems.
  285.  *
  286.  *  For U34F boards the latest bios prom is 38008-002 (BIOS rev. 2.01),
  287.  *  the latest firmware prom is 28008-006. Older firmware 28008-005 has
  288.  *  problems when using more then 16 scatter/gather lists.
  289.  *
  290.  *  The list of i/o ports to be probed can be totally replaced by the
  291.  *  boot command line option: "u14-34f=port0,port1,port2,...", where the
  292.  *  port0, port1... arguments are ISA/VESA addresses to be probed.
  293.  *  For example using "u14-34f=0x230,0x340", the driver probes only the two
  294.  *  addresses 0x230 and 0x340 in this order; "u14-34f=0" totally disables
  295.  *  this driver.
  296.  *
  297.  *  After the optional list of detection probes, other possible command line
  298.  *  options are:
  299.  *
  300.  *  et:y  use disk geometry returned by scsicam_bios_param;
  301.  *  et:n  use disk geometry jumpered on the board;
  302.  *  lc:y  enables linked commands;
  303.  *  lc:n  disables linked commands;
  304.  *  of:y  enables old firmware support;
  305.  *  of:n  disables old firmware support;
  306.  *  mq:xx set the max queue depth to the value xx (2 <= xx <= 8).
  307.  *
  308.  *  The default value is: "u14-34f=lc:n,of:n,mq:8,et:n".
  309.  *  An example using the list of detection probes could be:
  310.  *  "u14-34f=0x230,0x340,lc:y,of:n,mq:4,et:n".
  311.  *
  312.  *  When loading as a module, parameters can be specified as well.
  313.  *  The above example would be (use 1 in place of y and 0 in place of n):
  314.  *
  315.  *  modprobe u14-34f io_port=0x230,0x340 linked_comm=1 have_old_firmware=0 
  316.  *                max_queue_depth=4 ext_tran=0
  317.  *
  318.  *  ----------------------------------------------------------------------------
  319.  *  In this implementation, linked commands are designed to work with any DISK
  320.  *  or CD-ROM, since this linking has only the intent of clustering (time-wise)
  321.  *  and reordering by elevator sorting commands directed to each device,
  322.  *  without any relation with the actual SCSI protocol between the controller
  323.  *  and the device.
  324.  *  If Q is the queue depth reported at boot time for each device (also named
  325.  *  cmds/lun) and Q > 2, whenever there is already an active command to the
  326.  *  device all other commands to the same device  (up to Q-1) are kept waiting
  327.  *  in the elevator sorting queue. When the active command completes, the
  328.  *  commands in this queue are sorted by sector address. The sort is chosen
  329.  *  between increasing or decreasing by minimizing the seek distance between
  330.  *  the sector of the commands just completed and the sector of the first
  331.  *  command in the list to be sorted.
  332.  *  Trivial math assures that the unsorted average seek distance when doing
  333.  *  random seeks over S sectors is S/3.
  334.  *  When (Q-1) requests are uniformly distributed over S sectors, the average
  335.  *  distance between two adjacent requests is S/((Q-1) + 1), so the sorted
  336.  *  average seek distance for (Q-1) random requests over S sectors is S/Q.
  337.  *  The elevator sorting hence divides the seek distance by a factor Q/3.
  338.  *  The above pure geometric remarks are valid in all cases and the
  339.  *  driver effectively reduces the seek distance by the predicted factor
  340.  *  when there are Q concurrent read i/o operations on the device, but this
  341.  *  does not necessarily results in a noticeable performance improvement:
  342.  *  your mileage may vary....
  343.  *
  344.  *  Note: command reordering inside a batch of queued commands could cause
  345.  *        wrong results only if there is at least one write request and the
  346.  *        intersection (sector-wise) of all requests is not empty.
  347.  *        When the driver detects a batch including overlapping requests
  348.  *        (a really rare event) strict serial (pid) order is enforced.
  349.  *  ----------------------------------------------------------------------------
  350.  *
  351.  *  The boards are named Ux4F0, Ux4F1,... according to the detection order.
  352.  *
  353.  *  In order to support multiple ISA boards in a reliable way,
  354.  *  the driver sets host->wish_block = TRUE for all ISA boards.
  355.  */
  356. #include <linux/version.h>
  357. #ifndef LinuxVersionCode
  358. #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
  359. #endif
  360. #define MAX_INT_PARAM 10
  361. #if defined(MODULE)
  362. #include <linux/module.h>
  363. MODULE_PARM(boot_options, "s");
  364. MODULE_PARM(io_port, "1-" __MODULE_STRING(MAX_INT_PARAM) "i");
  365. MODULE_PARM(linked_comm, "i");
  366. MODULE_PARM(have_old_firmware, "i");
  367. MODULE_PARM(link_statistics, "i");
  368. MODULE_PARM(max_queue_depth, "i");
  369. MODULE_PARM(ext_tran, "i");
  370. MODULE_AUTHOR("Dario Ballabio");
  371. #endif
  372. #include <linux/string.h>
  373. #include <linux/sched.h>
  374. #include <linux/kernel.h>
  375. #include <linux/ioport.h>
  376. #include <linux/delay.h>
  377. #include <asm/io.h>
  378. #include <asm/system.h>
  379. #include <asm/byteorder.h>
  380. #include <linux/proc_fs.h>
  381. #include <linux/blk.h>
  382. #include "scsi.h"
  383. #include "hosts.h"
  384. #include "sd.h"
  385. #include <asm/dma.h>
  386. #include <asm/irq.h>
  387. #include "u14-34f.h"
  388. #include <linux/stat.h>
  389. #include <linux/config.h>
  390. #include <linux/pci.h>
  391. #include <linux/init.h>
  392. #include <linux/ctype.h>
  393. #include <linux/spinlock.h>
  394. #if !defined(__BIG_ENDIAN_BITFIELD) && !defined(__LITTLE_ENDIAN_BITFIELD)
  395. #error "Adjust your <asm/byteorder.h> defines"
  396. #endif
  397. /* Values for the PRODUCT_ID ports for the 14/34F */
  398. #define PRODUCT_ID1  0x56
  399. #define PRODUCT_ID2  0x40        /* NOTE: Only upper nibble is used */
  400. /* Subversion values */
  401. #define ISA  0
  402. #define ESA 1
  403. #define OP_HOST_ADAPTER   0x1
  404. #define OP_SCSI           0x2
  405. #define OP_RESET          0x4
  406. #define DTD_SCSI          0x0
  407. #define DTD_IN            0x1
  408. #define DTD_OUT           0x2
  409. #define DTD_NONE          0x3
  410. #define HA_CMD_INQUIRY    0x1
  411. #define HA_CMD_SELF_DIAG  0x2
  412. #define HA_CMD_READ_BUFF  0x3
  413. #define HA_CMD_WRITE_BUFF 0x4
  414. #undef  DEBUG_LINKED_COMMANDS
  415. #undef  DEBUG_DETECT
  416. #undef  DEBUG_INTERRUPT
  417. #undef  DEBUG_RESET
  418. #undef  DEBUG_GENERATE_ERRORS
  419. #undef  DEBUG_GENERATE_ABORTS
  420. #undef  DEBUG_GEOMETRY
  421. #define MAX_ISA 3
  422. #define MAX_VESA 1
  423. #define MAX_EISA 0
  424. #define MAX_PCI 0
  425. #define MAX_BOARDS (MAX_ISA + MAX_VESA + MAX_EISA + MAX_PCI)
  426. #define MAX_CHANNEL 1
  427. #define MAX_LUN 8
  428. #define MAX_TARGET 8
  429. #define MAX_MAILBOXES 16
  430. #define MAX_SGLIST 32
  431. #define MAX_SAFE_SGLIST 16
  432. #define MAX_INTERNAL_RETRIES 64
  433. #define MAX_CMD_PER_LUN 2
  434. #define MAX_TAGGED_CMD_PER_LUN (MAX_MAILBOXES - MAX_CMD_PER_LUN)
  435. #define SKIP ULONG_MAX
  436. #define FALSE 0
  437. #define TRUE 1
  438. #define FREE 0
  439. #define IN_USE   1
  440. #define LOCKED   2
  441. #define IN_RESET 3
  442. #define IGNORE   4
  443. #define READY    5
  444. #define ABORTING 6
  445. #define NO_DMA  0xff
  446. #define MAXLOOP  10000
  447. #define REG_LCL_MASK      0
  448. #define REG_LCL_INTR      1
  449. #define REG_SYS_MASK      2
  450. #define REG_SYS_INTR      3
  451. #define REG_PRODUCT_ID1   4
  452. #define REG_PRODUCT_ID2   5
  453. #define REG_CONFIG1       6
  454. #define REG_CONFIG2       7
  455. #define REG_OGM           8
  456. #define REG_ICM           12
  457. #define REGION_SIZE       13UL
  458. #define BSY_ASSERTED      0x01
  459. #define IRQ_ASSERTED      0x01
  460. #define CMD_RESET         0xc0
  461. #define CMD_OGM_INTR      0x01
  462. #define CMD_CLR_INTR      0x01
  463. #define CMD_ENA_INTR      0x81
  464. #define ASOK              0x00
  465. #define ASST              0x91
  466. #define YESNO(a) ((a) ? 'y' : 'n')
  467. #define TLDEV(type) ((type) == TYPE_DISK || (type) == TYPE_ROM)
  468. #define PACKED          __attribute__((packed))
  469. struct sg_list {
  470.    unsigned int address;                /* Segment Address */
  471.    unsigned int num_bytes;              /* Segment Length */
  472.    };
  473. /* MailBox SCSI Command Packet */
  474. struct mscp {
  475. #if defined(__BIG_ENDIAN_BITFIELD)
  476.    unsigned char sg:1, ca:1, dcn:1, xdir:2, opcode:3;
  477.    unsigned char lun: 3, channel:2, target:3;
  478. #else
  479.    unsigned char opcode: 3,             /* type of command */
  480.                  xdir: 2,               /* data transfer direction */
  481.                  dcn: 1,                /* disable disconnect */
  482.                  ca: 1,                 /* use cache (if available) */
  483.                  sg: 1;                 /* scatter/gather operation */
  484.    unsigned char target: 3,             /* SCSI target id */
  485.                  channel: 2,            /* SCSI channel number */
  486.                  lun: 3;                /* SCSI logical unit number */
  487. #endif
  488.    unsigned int data_address PACKED;    /* transfer data pointer */
  489.    unsigned int data_len PACKED;        /* length in bytes */
  490.    unsigned int link_address PACKED;    /* for linking command chains */
  491.    unsigned char clink_id;              /* identifies command in chain */
  492.    unsigned char use_sg;                /* (if sg is set) 8 bytes per list */
  493.    unsigned char sense_len;
  494.    unsigned char cdb_len;               /* 6, 10, or 12 */
  495.    unsigned char cdb[12];               /* SCSI Command Descriptor Block */
  496.    unsigned char adapter_status;        /* non-zero indicates HA error */
  497.    unsigned char target_status;         /* non-zero indicates target error */
  498.    unsigned int sense_addr PACKED;
  499.    /* Additional fields begin here. */
  500.    Scsi_Cmnd *SCpnt;
  501.    unsigned int cpp_index;              /* cp index */
  502.    /* All the cp structure is zero filled by queuecommand except the
  503.       following CP_TAIL_SIZE bytes, initialized by detect */
  504.    dma_addr_t cp_dma_addr; /* dma handle for this cp structure */
  505.    struct sg_list *sglist; /* pointer to the allocated SG list */
  506.    };
  507. #define CP_TAIL_SIZE (sizeof(struct sglist *) + sizeof(dma_addr_t))
  508. struct hostdata {
  509.    struct mscp cp[MAX_MAILBOXES];       /* Mailboxes for this board */
  510.    unsigned int cp_stat[MAX_MAILBOXES]; /* FREE, IN_USE, LOCKED, IN_RESET */
  511.    unsigned int last_cp_used;           /* Index of last mailbox used */
  512.    unsigned int iocount;                /* Total i/o done for this board */
  513.    int board_number;                    /* Number of this board */
  514.    char board_name[16];                 /* Name of this board */
  515.    int in_reset;                        /* True if board is doing a reset */
  516.    int target_to[MAX_TARGET][MAX_CHANNEL]; /* N. of timeout errors on target */
  517.    int target_redo[MAX_TARGET][MAX_CHANNEL]; /* If TRUE redo i/o on target */
  518.    unsigned int retries;                /* Number of internal retries */
  519.    unsigned long last_retried_pid;      /* Pid of last retried command */
  520.    unsigned char subversion;            /* Bus type, either ISA or ESA */
  521.    struct pci_dev *pdev;                /* Always NULL */
  522.    unsigned char heads;
  523.    unsigned char sectors;
  524.    char board_id[256];                  /* data from INQUIRY on this board */
  525.    };
  526. static struct Scsi_Host *sh[MAX_BOARDS + 1];
  527. static const char *driver_name = "Ux4F";
  528. static char sha[MAX_BOARDS];
  529. /* Initialize num_boards so that ihdlr can work while detect is in progress */
  530. static unsigned int num_boards = MAX_BOARDS;
  531. static unsigned long io_port[] = {
  532.    /* Space for MAX_INT_PARAM ports usable while loading as a module */
  533.    SKIP,    SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,
  534.    SKIP,    SKIP,
  535.    /* Possible ISA/VESA ports */
  536.    0x330, 0x340, 0x230, 0x240, 0x210, 0x130, 0x140,
  537.    /* End of list */
  538.    0x0
  539.    };
  540. #define HD(board) ((struct hostdata *) &sh[board]->hostdata)
  541. #define BN(board) (HD(board)->board_name)
  542. /* Device is Little Endian */
  543. #define H2DEV(x) cpu_to_le32(x)
  544. #define DEV2H(x) le32_to_cpu(x)
  545. static void do_interrupt_handler(int, void *, struct pt_regs *);
  546. static void flush_dev(Scsi_Device *, unsigned long, unsigned int, unsigned int);
  547. static int do_trace = FALSE;
  548. static int setup_done = FALSE;
  549. static int link_statistics;
  550. static int ext_tran = FALSE;
  551. static char *boot_options;
  552. #if defined(HAVE_OLD_UX4F_FIRMWARE)
  553. static int have_old_firmware = TRUE;
  554. #else
  555. static int have_old_firmware = FALSE;
  556. #endif
  557. #if defined(CONFIG_SCSI_U14_34F_LINKED_COMMANDS)
  558. static int linked_comm = TRUE;
  559. #else
  560. static int linked_comm = FALSE;
  561. #endif
  562. #if defined(CONFIG_SCSI_U14_34F_MAX_TAGS)
  563. static int max_queue_depth = CONFIG_SCSI_U14_34F_MAX_TAGS;
  564. #else
  565. static int max_queue_depth = MAX_CMD_PER_LUN;
  566. #endif
  567. static void select_queue_depths(struct Scsi_Host *host, Scsi_Device *devlist) {
  568.    Scsi_Device *dev;
  569.    int j, ntag = 0, nuntag = 0, tqd, utqd;
  570.    j = ((struct hostdata *) host->hostdata)->board_number;
  571.    for(dev = devlist; dev; dev = dev->next) {
  572.       if (dev->host != host) continue;
  573.       if (TLDEV(dev->type) && (dev->tagged_supported || linked_comm))
  574.          ntag++;
  575.       else
  576.          nuntag++;
  577.       }
  578.    utqd = MAX_CMD_PER_LUN;
  579.    tqd = (host->can_queue - utqd * nuntag) / (ntag ? ntag : 1);
  580.    if (tqd > max_queue_depth) tqd = max_queue_depth;
  581.    if (tqd < MAX_CMD_PER_LUN) tqd = MAX_CMD_PER_LUN;
  582.    for(dev = devlist; dev; dev = dev->next) {
  583.       char *tag_suffix = "", *link_suffix = "";
  584.       if (dev->host != host) continue;
  585.       if (TLDEV(dev->type) && (dev->tagged_supported || linked_comm))
  586.          dev->queue_depth = tqd;
  587.       else
  588.          dev->queue_depth = utqd;
  589.       if (TLDEV(dev->type)) {
  590.          if (linked_comm && dev->queue_depth > 2)
  591.             link_suffix = ", sorted";
  592.          else
  593.             link_suffix = ", unsorted";
  594.          }
  595.       if (dev->tagged_supported && TLDEV(dev->type) && dev->tagged_queue)
  596.          tag_suffix = ", soft-tagged";
  597.       else if (dev->tagged_supported && TLDEV(dev->type))
  598.          tag_suffix = ", tagged";
  599.       printk("%s: scsi%d, channel %d, id %d, lun %d, cmds/lun %d%s%s.n",
  600.              BN(j), host->host_no, dev->channel, dev->id, dev->lun,
  601.              dev->queue_depth, link_suffix, tag_suffix);
  602.       }
  603.    return;
  604. }
  605. static inline int wait_on_busy(unsigned long iobase, unsigned int loop) {
  606.    while (inb(iobase + REG_LCL_INTR) & BSY_ASSERTED) {
  607.       udelay(1L);
  608.       if (--loop == 0) return TRUE;
  609.       }
  610.    return FALSE;
  611. }
  612. static int board_inquiry(unsigned int j) {
  613.    struct mscp *cpp;
  614.    dma_addr_t id_dma_addr;
  615.    unsigned int time, limit = 0;
  616.    id_dma_addr = pci_map_single(HD(j)->pdev, HD(j)->board_id,
  617.                     sizeof(HD(j)->board_id), PCI_DMA_BIDIRECTIONAL);
  618.    cpp = &HD(j)->cp[0];
  619.    cpp->cp_dma_addr = pci_map_single(HD(j)->pdev, cpp, sizeof(struct mscp),
  620.                                      PCI_DMA_BIDIRECTIONAL);
  621.    memset(cpp, 0, sizeof(struct mscp) - CP_TAIL_SIZE);
  622.    cpp->opcode = OP_HOST_ADAPTER;
  623.    cpp->xdir = DTD_IN;
  624.    cpp->data_address = H2DEV(id_dma_addr);
  625.    cpp->data_len = H2DEV(sizeof(HD(j)->board_id));
  626.    cpp->cdb_len = 6;
  627.    cpp->cdb[0] = HA_CMD_INQUIRY;
  628.    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  629.       printk("%s: board_inquiry, adapter busy.n", BN(j));
  630.       return TRUE;
  631.       }
  632.    HD(j)->cp_stat[0] = IGNORE;
  633.    /* Clear the interrupt indication */
  634.    outb(CMD_CLR_INTR, sh[j]->io_port + REG_SYS_INTR);
  635.    /* Store pointer in OGM address bytes */
  636.    outl(H2DEV(cpp->cp_dma_addr), sh[j]->io_port + REG_OGM);
  637.    /* Issue OGM interrupt */
  638.    outb(CMD_OGM_INTR, sh[j]->io_port + REG_LCL_INTR);
  639.    spin_unlock_irq(&io_request_lock);
  640.    time = jiffies;
  641.    while ((jiffies - time) < HZ && limit++ < 20000) udelay(100L);
  642.    spin_lock_irq(&io_request_lock);
  643.    if (cpp->adapter_status || HD(j)->cp_stat[0] != FREE) {
  644.       HD(j)->cp_stat[0] = FREE;
  645.       printk("%s: board_inquiry, err 0x%x.n", BN(j), cpp->adapter_status);
  646.       return TRUE;
  647.       }
  648.    pci_unmap_single(HD(j)->pdev, cpp->cp_dma_addr, sizeof(struct mscp),
  649.                     PCI_DMA_BIDIRECTIONAL);
  650.    pci_unmap_single(HD(j)->pdev, id_dma_addr, sizeof(HD(j)->board_id),
  651.                     PCI_DMA_BIDIRECTIONAL);
  652.    return FALSE;
  653. }
  654. static inline int port_detect 
  655.       (unsigned long port_base, unsigned int j, Scsi_Host_Template *tpnt) {
  656.    unsigned char irq, dma_channel, subversion, i;
  657.    unsigned char in_byte;
  658.    char *bus_type, dma_name[16];
  659.    /* Allowed BIOS base addresses (NULL indicates reserved) */
  660.    unsigned long bios_segment_table[8] = {
  661.       0,
  662.       0xc4000, 0xc8000, 0xcc000, 0xd0000,
  663.       0xd4000, 0xd8000, 0xdc000
  664.       };
  665.    /* Allowed IRQs */
  666.    unsigned char interrupt_table[4] = { 15, 14, 11, 10 };
  667.    /* Allowed DMA channels for ISA (0 indicates reserved) */
  668.    unsigned char dma_channel_table[4] = { 5, 6, 7, 0 };
  669.    /* Head/sector mappings */
  670.    struct {
  671.       unsigned char heads;
  672.       unsigned char sectors;
  673.       } mapping_table[4] = {
  674.            { 16, 63 }, { 64, 32 }, { 64, 63 }, { 64, 32 }
  675.            };
  676.    struct config_1 {
  677. #if defined(__BIG_ENDIAN_BITFIELD)
  678.       unsigned char dma_channel: 2, interrupt:2,
  679.                     removable_disks_as_fixed:1, bios_segment: 3;
  680. #else
  681.       unsigned char bios_segment: 3, removable_disks_as_fixed: 1,
  682.                     interrupt: 2, dma_channel: 2;
  683. #endif
  684.       } config_1;
  685.    struct config_2 {
  686. #if defined(__BIG_ENDIAN_BITFIELD)
  687.       unsigned char tfr_port: 2, bios_drive_number: 1,
  688.                     mapping_mode: 2, ha_scsi_id: 3;
  689. #else
  690.       unsigned char ha_scsi_id: 3, mapping_mode: 2,
  691.                     bios_drive_number: 1, tfr_port: 2;
  692. #endif
  693.       } config_2;
  694.    char name[16];
  695.    sprintf(name, "%s%d", driver_name, j);
  696.    if(!request_region(port_base, REGION_SIZE, driver_name)) {
  697. #if defined(DEBUG_DETECT)
  698.       printk("%s: address 0x%03lx in use, skipping probe.n", name, port_base);
  699. #endif
  700.       return FALSE;
  701.       }
  702.    if (inb(port_base + REG_PRODUCT_ID1) != PRODUCT_ID1) {
  703.       release_region(port_base, REGION_SIZE);
  704.       return FALSE;
  705.       }
  706.    in_byte = inb(port_base + REG_PRODUCT_ID2);
  707.    if ((in_byte & 0xf0) != PRODUCT_ID2) {
  708.       release_region(port_base, REGION_SIZE);
  709.       return FALSE;
  710.       }
  711.    *(char *)&config_1 = inb(port_base + REG_CONFIG1);
  712.    *(char *)&config_2 = inb(port_base + REG_CONFIG2);
  713.    irq = interrupt_table[config_1.interrupt];
  714.    dma_channel = dma_channel_table[config_1.dma_channel];
  715.    subversion = (in_byte & 0x0f);
  716.    /* Board detected, allocate its IRQ */
  717.    if (request_irq(irq, do_interrupt_handler,
  718.              SA_INTERRUPT | ((subversion == ESA) ? SA_SHIRQ : 0),
  719.              driver_name, (void *) &sha[j])) {
  720.       printk("%s: unable to allocate IRQ %u, detaching.n", name, irq);
  721.       release_region(port_base, REGION_SIZE);
  722.       return FALSE;
  723.       }
  724.    if (subversion == ISA && request_dma(dma_channel, driver_name)) {
  725.       printk("%s: unable to allocate DMA channel %u, detaching.n",
  726.              name, dma_channel);
  727.       free_irq(irq, &sha[j]);
  728.       release_region(port_base, REGION_SIZE);
  729.       return FALSE;
  730.       }
  731.    if (have_old_firmware) tpnt->use_clustering = DISABLE_CLUSTERING;
  732.    sh[j] = scsi_register(tpnt, sizeof(struct hostdata));
  733.    if (sh[j] == NULL) {
  734.       printk("%s: unable to register host, detaching.n", name);
  735.       free_irq(irq, &sha[j]);
  736.       if (subversion == ISA) free_dma(dma_channel);
  737.       release_region(port_base, REGION_SIZE);
  738.       return FALSE;
  739.       }
  740.    sh[j]->io_port = port_base;
  741.    sh[j]->unique_id = port_base;
  742.    sh[j]->n_io_port = REGION_SIZE;
  743.    sh[j]->base = bios_segment_table[config_1.bios_segment];
  744.    sh[j]->irq = irq;
  745.    sh[j]->sg_tablesize = MAX_SGLIST;
  746.    sh[j]->this_id = config_2.ha_scsi_id;
  747.    sh[j]->can_queue = MAX_MAILBOXES;
  748.    sh[j]->cmd_per_lun = MAX_CMD_PER_LUN;
  749.    sh[j]->select_queue_depths = select_queue_depths;
  750. #if defined(DEBUG_DETECT)
  751.    {
  752.    unsigned char sys_mask, lcl_mask;
  753.    sys_mask = inb(sh[j]->io_port + REG_SYS_MASK);
  754.    lcl_mask = inb(sh[j]->io_port + REG_LCL_MASK);
  755.    printk("SYS_MASK 0x%x, LCL_MASK 0x%x.n", sys_mask, lcl_mask);
  756.    }
  757. #endif
  758.    /* Probably a bogus host scsi id, set it to the dummy value */
  759.    if (sh[j]->this_id == 0) sh[j]->this_id = -1;
  760.    /* If BIOS is disabled, force enable interrupts */
  761.    if (sh[j]->base == 0) outb(CMD_ENA_INTR, sh[j]->io_port + REG_SYS_MASK);
  762.    memset(HD(j), 0, sizeof(struct hostdata));
  763.    HD(j)->heads = mapping_table[config_2.mapping_mode].heads;
  764.    HD(j)->sectors = mapping_table[config_2.mapping_mode].sectors;
  765.    HD(j)->subversion = subversion;
  766.    HD(j)->pdev = NULL;
  767.    HD(j)->board_number = j;
  768.    if (have_old_firmware) sh[j]->sg_tablesize = MAX_SAFE_SGLIST;
  769.    if (HD(j)->subversion == ESA) {
  770.       sh[j]->unchecked_isa_dma = FALSE;
  771.       sh[j]->dma_channel = NO_DMA;
  772.       sprintf(BN(j), "U34F%d", j);
  773.       bus_type = "VESA";
  774.       }
  775.    else {
  776.       unsigned long flags;
  777.       scsi_register_blocked_host(sh[j]);
  778.       sh[j]->unchecked_isa_dma = TRUE;
  779.       flags=claim_dma_lock();
  780.       disable_dma(dma_channel);
  781.       clear_dma_ff(dma_channel);
  782.       set_dma_mode(dma_channel, DMA_MODE_CASCADE);
  783.       enable_dma(dma_channel);
  784.       release_dma_lock(flags);
  785.       sh[j]->dma_channel = dma_channel;
  786.       sprintf(BN(j), "U14F%d", j);
  787.       bus_type = "ISA";
  788.       }
  789.    sh[j]->max_channel = MAX_CHANNEL - 1;
  790.    sh[j]->max_id = MAX_TARGET;
  791.    sh[j]->max_lun = MAX_LUN;
  792.    if (HD(j)->subversion == ISA && !board_inquiry(j)) {
  793.       HD(j)->board_id[40] = 0;
  794.       if (strcmp(&HD(j)->board_id[32], "06000600")) {
  795.          printk("%s: %s.n", BN(j), &HD(j)->board_id[8]);
  796.          printk("%s: firmware %s is outdated, FW PROM should be 28004-006.n",
  797.                 BN(j), &HD(j)->board_id[32]);
  798.          sh[j]->hostt->use_clustering = DISABLE_CLUSTERING;
  799.          sh[j]->sg_tablesize = MAX_SAFE_SGLIST;
  800.          }
  801.       }
  802.    if (dma_channel == NO_DMA) sprintf(dma_name, "%s", "BMST");
  803.    else                       sprintf(dma_name, "DMA %u", dma_channel);
  804.    for (i = 0; i < sh[j]->can_queue; i++)
  805.       HD(j)->cp[i].cp_dma_addr = pci_map_single(HD(j)->pdev,
  806.             &HD(j)->cp[i], sizeof(struct mscp), PCI_DMA_BIDIRECTIONAL);
  807.    for (i = 0; i < sh[j]->can_queue; i++)
  808.       if (! ((&HD(j)->cp[i])->sglist = kmalloc(
  809.             sh[j]->sg_tablesize * sizeof(struct sg_list),
  810.             (sh[j]->unchecked_isa_dma ? GFP_DMA : 0) | GFP_ATOMIC))) {
  811.          printk("%s: kmalloc SGlist failed, mbox %d, detaching.n", BN(j), i);
  812.          u14_34f_release(sh[j]);
  813.          return FALSE;
  814.          }
  815.    if (max_queue_depth > MAX_TAGGED_CMD_PER_LUN)
  816.        max_queue_depth = MAX_TAGGED_CMD_PER_LUN;
  817.    if (max_queue_depth < MAX_CMD_PER_LUN) max_queue_depth = MAX_CMD_PER_LUN;
  818.    if (j == 0) {
  819.       printk("UltraStor 14F/34F: Copyright (C) 1994-2002 Dario Ballabio.n");
  820.       printk("%s config options -> of:%c, lc:%c, mq:%d, et:%c.n",
  821.              driver_name, YESNO(have_old_firmware), YESNO(linked_comm),
  822.              max_queue_depth, YESNO(ext_tran));
  823.       }
  824.    printk("%s: %s 0x%03lx, BIOS 0x%05x, IRQ %u, %s, SG %d, MB %d.n",
  825.           BN(j), bus_type, (unsigned long)sh[j]->io_port, (int)sh[j]->base,
  826.           sh[j]->irq, dma_name, sh[j]->sg_tablesize, sh[j]->can_queue);
  827.    if (sh[j]->max_id > 8 || sh[j]->max_lun > 8)
  828.       printk("%s: wide SCSI support enabled, max_id %u, max_lun %u.n",
  829.              BN(j), sh[j]->max_id, sh[j]->max_lun);
  830.    for (i = 0; i <= sh[j]->max_channel; i++)
  831.       printk("%s: SCSI channel %u enabled, host target ID %d.n",
  832.              BN(j), i, sh[j]->this_id);
  833.    return TRUE;
  834. }
  835. static void internal_setup(char *str, int *ints) {
  836.    int i, argc = ints[0];
  837.    char *cur = str, *pc;
  838.    if (argc > 0) {
  839.       if (argc > MAX_INT_PARAM) argc = MAX_INT_PARAM;
  840.       for (i = 0; i < argc; i++) io_port[i] = ints[i + 1];
  841.       io_port[i] = 0;
  842.       setup_done = TRUE;
  843.       }
  844.    while (cur && (pc = strchr(cur, ':'))) {
  845.       int val = 0, c = *++pc;
  846.       if (c == 'n' || c == 'N') val = FALSE;
  847.       else if (c == 'y' || c == 'Y') val = TRUE;
  848.       else val = (int) simple_strtoul(pc, NULL, 0);
  849.       if (!strncmp(cur, "lc:", 3)) linked_comm = val;
  850.       else if (!strncmp(cur, "of:", 3)) have_old_firmware = val;
  851.       else if (!strncmp(cur, "mq:", 3))  max_queue_depth = val;
  852.       else if (!strncmp(cur, "ls:", 3))  link_statistics = val;
  853.       else if (!strncmp(cur, "et:", 3))  ext_tran = val;
  854.       if ((cur = strchr(cur, ','))) ++cur;
  855.       }
  856.    return;
  857. }
  858. static int option_setup(char *str) {
  859.    int ints[MAX_INT_PARAM];
  860.    char *cur = str;
  861.    int i = 1;
  862.    while (cur && isdigit(*cur) && i <= MAX_INT_PARAM) {
  863.       ints[i++] = simple_strtoul(cur, NULL, 0);
  864.       if ((cur = strchr(cur, ',')) != NULL) cur++;
  865.    }
  866.    ints[0] = i - 1;
  867.    internal_setup(cur, ints);
  868.    return 1;
  869. }
  870. int u14_34f_detect(Scsi_Host_Template *tpnt) {
  871.    unsigned int j = 0, k;
  872.    tpnt->proc_name = "u14-34f";
  873.    if(boot_options) option_setup(boot_options);
  874. #if defined(MODULE)
  875.    /* io_port could have been modified when loading as a module */
  876.    if(io_port[0] != SKIP) {
  877.       setup_done = TRUE;
  878.       io_port[MAX_INT_PARAM] = 0;
  879.       }
  880. #endif
  881.    for (k = 0; k < MAX_BOARDS + 1; k++) sh[k] = NULL;
  882.    for (k = 0; io_port[k]; k++) {
  883.       if (io_port[k] == SKIP) continue;
  884.       if (j < MAX_BOARDS && port_detect(io_port[k], j, tpnt)) j++;
  885.       }
  886.    num_boards = j;
  887.    return j;
  888. }
  889. static inline void map_dma(unsigned int i, unsigned int j) {
  890.    unsigned int data_len = 0;
  891.    unsigned int k, count, pci_dir;
  892.    struct scatterlist *sgpnt;
  893.    struct mscp *cpp;
  894.    Scsi_Cmnd *SCpnt;
  895.    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
  896.    pci_dir = scsi_to_pci_dma_dir(SCpnt->sc_data_direction);
  897.    if (SCpnt->sense_buffer)
  898.       cpp->sense_addr = H2DEV(pci_map_single(HD(j)->pdev, SCpnt->sense_buffer,
  899.                            sizeof SCpnt->sense_buffer, PCI_DMA_FROMDEVICE));
  900.    cpp->sense_len = sizeof SCpnt->sense_buffer;
  901.    if (!SCpnt->use_sg) {
  902.       /* If we get here with PCI_DMA_NONE, pci_map_single triggers a BUG() */
  903.       if (!SCpnt->request_bufflen) pci_dir = PCI_DMA_BIDIRECTIONAL;
  904.       if (SCpnt->request_buffer)
  905.          cpp->data_address = H2DEV(pci_map_single(HD(j)->pdev,
  906.                   SCpnt->request_buffer, SCpnt->request_bufflen, pci_dir));
  907.       cpp->data_len = H2DEV(SCpnt->request_bufflen);
  908.       return;
  909.       }
  910.    sgpnt = (struct scatterlist *) SCpnt->request_buffer;
  911.    count = pci_map_sg(HD(j)->pdev, sgpnt, SCpnt->use_sg, pci_dir);
  912.    for (k = 0; k < count; k++) {
  913.       cpp->sglist[k].address = H2DEV(sg_dma_address(&sgpnt[k]));
  914.       cpp->sglist[k].num_bytes = H2DEV(sg_dma_len(&sgpnt[k]));
  915.       data_len += sgpnt[k].length;
  916.       }
  917.    cpp->sg = TRUE;
  918.    cpp->use_sg = SCpnt->use_sg;
  919.    cpp->data_address = H2DEV(pci_map_single(HD(j)->pdev, cpp->sglist,
  920.                              SCpnt->use_sg * sizeof(struct sg_list), pci_dir));
  921.    cpp->data_len = H2DEV(data_len);
  922. }
  923. static void unmap_dma(unsigned int i, unsigned int j) {
  924.    unsigned int pci_dir;
  925.    struct mscp *cpp;
  926.    Scsi_Cmnd *SCpnt;
  927.    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
  928.    pci_dir = scsi_to_pci_dma_dir(SCpnt->sc_data_direction);
  929.    if (DEV2H(cpp->sense_addr))
  930.       pci_unmap_single(HD(j)->pdev, DEV2H(cpp->sense_addr),
  931.                        DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);
  932.    if (SCpnt->use_sg)
  933.       pci_unmap_sg(HD(j)->pdev, SCpnt->request_buffer, SCpnt->use_sg, pci_dir);
  934.    if (!DEV2H(cpp->data_len)) pci_dir = PCI_DMA_BIDIRECTIONAL;
  935.    if (DEV2H(cpp->data_address))
  936.       pci_unmap_single(HD(j)->pdev, DEV2H(cpp->data_address),
  937.                        DEV2H(cpp->data_len), pci_dir);
  938. }
  939. static void sync_dma(unsigned int i, unsigned int j) {
  940.    unsigned int pci_dir;
  941.    struct mscp *cpp;
  942.    Scsi_Cmnd *SCpnt;
  943.    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
  944.    pci_dir = scsi_to_pci_dma_dir(SCpnt->sc_data_direction);
  945.    if (DEV2H(cpp->sense_addr))
  946.       pci_dma_sync_single(HD(j)->pdev, DEV2H(cpp->sense_addr),
  947.                           DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);
  948.    if (SCpnt->use_sg)
  949.       pci_dma_sync_sg(HD(j)->pdev, SCpnt->request_buffer,
  950.                          SCpnt->use_sg, pci_dir);
  951.    if (!DEV2H(cpp->data_len)) pci_dir = PCI_DMA_BIDIRECTIONAL;
  952.    if (DEV2H(cpp->data_address))
  953.       pci_dma_sync_single(HD(j)->pdev, DEV2H(cpp->data_address),
  954.                        DEV2H(cpp->data_len), pci_dir);
  955. }
  956. static inline void scsi_to_dev_dir(unsigned int i, unsigned int j) {
  957.    unsigned int k;
  958.    static const unsigned char data_out_cmds[] = {
  959.       0x0a, 0x2a, 0x15, 0x55, 0x04, 0x07, 0x18, 0x1d, 0x24, 0x2e,
  960.       0x30, 0x31, 0x32, 0x38, 0x39, 0x3a, 0x3b, 0x3d, 0x3f, 0x40,
  961.       0x41, 0x4c, 0xaa, 0xae, 0xb0, 0xb1, 0xb2, 0xb6, 0xea, 0x1b, 0x5d
  962.       };
  963.    static const unsigned char data_none_cmds[] = {
  964.       0x01, 0x0b, 0x10, 0x11, 0x13, 0x16, 0x17, 0x19, 0x2b, 0x1e,
  965.       0x2c, 0xac, 0x2f, 0xaf, 0x33, 0xb3, 0x35, 0x36, 0x45, 0x47,
  966.       0x48, 0x49, 0xa9, 0x4b, 0xa5, 0xa6, 0xb5, 0x00
  967.       };
  968.    struct mscp *cpp;
  969.    Scsi_Cmnd *SCpnt;
  970.    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
  971.    if (SCpnt->sc_data_direction == SCSI_DATA_READ) {
  972.       cpp->xdir = DTD_IN;
  973.       return;
  974.       }
  975.    else if (SCpnt->sc_data_direction == SCSI_DATA_WRITE) {
  976.       cpp->xdir = DTD_OUT;
  977.       return;
  978.       }
  979.    else if (SCpnt->sc_data_direction == SCSI_DATA_NONE) {
  980.       cpp->xdir = DTD_NONE;
  981.       return;
  982.       }
  983.    if (SCpnt->sc_data_direction != SCSI_DATA_UNKNOWN)
  984.       panic("%s: qcomm, invalid SCpnt->sc_data_direction.n", BN(j));
  985.    cpp->xdir = DTD_IN;
  986.    for (k = 0; k < ARRAY_SIZE(data_out_cmds); k++)
  987.       if (SCpnt->cmnd[0] == data_out_cmds[k]) {
  988.          cpp->xdir = DTD_OUT;
  989.          break;
  990.          }
  991.    if (cpp->xdir == DTD_IN)
  992.       for (k = 0; k < ARRAY_SIZE(data_none_cmds); k++)
  993.          if (SCpnt->cmnd[0] == data_none_cmds[k]) {
  994.             cpp->xdir = DTD_NONE;
  995.             break;
  996.             }
  997. }
  998. static inline int do_qcomm(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) {
  999.    unsigned int i, j, k;
  1000.    struct mscp *cpp;
  1001.    /* j is the board number */
  1002.    j = ((struct hostdata *) SCpnt->host->hostdata)->board_number;
  1003.    if (SCpnt->host_scribble)
  1004.       panic("%s: qcomm, pid %ld, SCpnt %p already active.n",
  1005.             BN(j), SCpnt->pid, SCpnt);
  1006.    /* i is the mailbox number, look for the first free mailbox
  1007.       starting from last_cp_used */
  1008.    i = HD(j)->last_cp_used + 1;
  1009.    for (k = 0; k < sh[j]->can_queue; k++, i++) {
  1010.       if (i >= sh[j]->can_queue) i = 0;
  1011.       if (HD(j)->cp_stat[i] == FREE) {
  1012.          HD(j)->last_cp_used = i;
  1013.          break;
  1014.          }
  1015.       }
  1016.    if (k == sh[j]->can_queue) {
  1017.       printk("%s: qcomm, no free mailbox.n", BN(j));
  1018.       return 1;
  1019.       }
  1020.    /* Set pointer to control packet structure */
  1021.    cpp = &HD(j)->cp[i];
  1022.    memset(cpp, 0, sizeof(struct mscp) - CP_TAIL_SIZE);
  1023.    SCpnt->scsi_done = done;
  1024.    cpp->cpp_index = i;
  1025.    SCpnt->host_scribble = (unsigned char *) &cpp->cpp_index;
  1026.    if (do_trace) printk("%s: qcomm, mbox %d, target %d.%d:%d, pid %ld.n",
  1027.                         BN(j), i, SCpnt->channel, SCpnt->target,
  1028.                         SCpnt->lun, SCpnt->pid);
  1029.    cpp->opcode = OP_SCSI;
  1030.    cpp->channel = SCpnt->channel;
  1031.    cpp->target = SCpnt->target;
  1032.    cpp->lun = SCpnt->lun;
  1033.    cpp->SCpnt = SCpnt;
  1034.    cpp->cdb_len = SCpnt->cmd_len;
  1035.    memcpy(cpp->cdb, SCpnt->cmnd, SCpnt->cmd_len);
  1036.    /* Use data transfer direction SCpnt->sc_data_direction */
  1037.    scsi_to_dev_dir(i, j);
  1038.    /* Map DMA buffers and SG list */
  1039.    map_dma(i, j);
  1040.    if (linked_comm && SCpnt->device->queue_depth > 2
  1041.                                      && TLDEV(SCpnt->device->type)) {
  1042.       HD(j)->cp_stat[i] = READY;
  1043.       flush_dev(SCpnt->device, SCpnt->request.sector, j, FALSE);
  1044.       return 0;
  1045.       }
  1046.    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  1047.       unmap_dma(i, j);
  1048.       SCpnt->host_scribble = NULL;
  1049.       printk("%s: qcomm, target %d.%d:%d, pid %ld, adapter busy.n",
  1050.              BN(j), SCpnt->channel, SCpnt->target, SCpnt->lun, SCpnt->pid);
  1051.       return 1;
  1052.       }
  1053.    /* Store pointer in OGM address bytes */
  1054.    outl(H2DEV(cpp->cp_dma_addr), sh[j]->io_port + REG_OGM);
  1055.    /* Issue OGM interrupt */
  1056.    outb(CMD_OGM_INTR, sh[j]->io_port + REG_LCL_INTR);
  1057.    HD(j)->cp_stat[i] = IN_USE;
  1058.    return 0;
  1059. }
  1060. int u14_34f_queuecommand(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) {
  1061.    int rtn;
  1062.    rtn = do_qcomm(SCpnt, done);
  1063.    return rtn;
  1064. }
  1065. static inline int do_abort(Scsi_Cmnd *SCarg) {
  1066.    unsigned int i, j;
  1067.    j = ((struct hostdata *) SCarg->host->hostdata)->board_number;
  1068.    if (SCarg->host_scribble == NULL) {
  1069.       printk("%s: abort, target %d.%d:%d, pid %ld inactive.n",
  1070.              BN(j), SCarg->channel, SCarg->target, SCarg->lun, SCarg->pid);
  1071.       return SUCCESS;
  1072.       }
  1073.    i = *(unsigned int *)SCarg->host_scribble;
  1074.    printk("%s: abort, mbox %d, target %d.%d:%d, pid %ld.n",
  1075.           BN(j), i, SCarg->channel, SCarg->target, SCarg->lun, SCarg->pid);
  1076.    if (i >= sh[j]->can_queue)
  1077.       panic("%s: abort, invalid SCarg->host_scribble.n", BN(j));
  1078.    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  1079.       printk("%s: abort, timeout error.n", BN(j));
  1080.       return FAILED;
  1081.       }
  1082.    if (HD(j)->cp_stat[i] == FREE) {
  1083.       printk("%s: abort, mbox %d is free.n", BN(j), i);
  1084.       return SUCCESS;
  1085.       }
  1086.    if (HD(j)->cp_stat[i] == IN_USE) {
  1087.       printk("%s: abort, mbox %d is in use.n", BN(j), i);
  1088.       if (SCarg != HD(j)->cp[i].SCpnt)
  1089.          panic("%s: abort, mbox %d, SCarg %p, cp SCpnt %p.n",
  1090.                BN(j), i, SCarg, HD(j)->cp[i].SCpnt);
  1091.       if (inb(sh[j]->io_port + REG_SYS_INTR) & IRQ_ASSERTED)
  1092.          printk("%s: abort, mbox %d, interrupt pending.n", BN(j), i);
  1093.       if (SCarg->eh_state == SCSI_STATE_TIMEOUT) {
  1094.          unmap_dma(i, j);
  1095.          SCarg->host_scribble = NULL;
  1096.          HD(j)->cp_stat[i] = FREE;
  1097.          printk("%s, abort, mbox %d, eh_state timeout, pid %ld.n",
  1098.                 BN(j), i, SCarg->pid);
  1099.          return SUCCESS;
  1100.          }
  1101.       return FAILED;
  1102.       }
  1103.    if (HD(j)->cp_stat[i] == IN_RESET) {
  1104.       printk("%s: abort, mbox %d is in reset.n", BN(j), i);
  1105.       return FAILED;
  1106.       }
  1107.    if (HD(j)->cp_stat[i] == LOCKED) {
  1108.       printk("%s: abort, mbox %d is locked.n", BN(j), i);
  1109.       return SUCCESS;
  1110.       }
  1111.    if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) {
  1112.       unmap_dma(i, j);
  1113.       SCarg->result = DID_ABORT << 16;
  1114.       SCarg->host_scribble = NULL;
  1115.       HD(j)->cp_stat[i] = FREE;
  1116.       printk("%s, abort, mbox %d ready, DID_ABORT, pid %ld done.n",
  1117.              BN(j), i, SCarg->pid);
  1118.       SCarg->scsi_done(SCarg);
  1119.       return SUCCESS;
  1120.       }
  1121.    panic("%s: abort, mbox %d, invalid cp_stat.n", BN(j), i);
  1122. }
  1123. int u14_34f_abort(Scsi_Cmnd *SCarg) {
  1124.    return do_abort(SCarg);
  1125. }
  1126. static inline int do_reset(Scsi_Cmnd *SCarg) {
  1127.    unsigned int i, j, time, k, c, limit = 0;
  1128.    int arg_done = FALSE;
  1129.    Scsi_Cmnd *SCpnt;
  1130.    j = ((struct hostdata *) SCarg->host->hostdata)->board_number;
  1131.    printk("%s: reset, enter, target %d.%d:%d, pid %ld.n",
  1132.           BN(j), SCarg->channel, SCarg->target, SCarg->lun, SCarg->pid);
  1133.    if (SCarg->host_scribble == NULL)
  1134.       printk("%s: reset, pid %ld inactive.n", BN(j), SCarg->pid);
  1135.    if (HD(j)->in_reset) {
  1136.       printk("%s: reset, exit, already in reset.n", BN(j));
  1137.       return FAILED;
  1138.       }
  1139.    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  1140.       printk("%s: reset, exit, timeout error.n", BN(j));
  1141.       return FAILED;
  1142.       }
  1143.    HD(j)->retries = 0;
  1144.    for (c = 0; c <= sh[j]->max_channel; c++)
  1145.       for (k = 0; k < sh[j]->max_id; k++) {
  1146.          HD(j)->target_redo[k][c] = TRUE;
  1147.          HD(j)->target_to[k][c] = 0;
  1148.          }
  1149.    for (i = 0; i < sh[j]->can_queue; i++) {
  1150.       if (HD(j)->cp_stat[i] == FREE) continue;
  1151.       if (HD(j)->cp_stat[i] == LOCKED) {
  1152.          HD(j)->cp_stat[i] = FREE;
  1153.          printk("%s: reset, locked mbox %d forced free.n", BN(j), i);
  1154.          continue;
  1155.          }
  1156.       if (!(SCpnt = HD(j)->cp[i].SCpnt))
  1157.          panic("%s: reset, mbox %d, SCpnt == NULL.n", BN(j), i);
  1158.       if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) {
  1159.          HD(j)->cp_stat[i] = ABORTING;
  1160.          printk("%s: reset, mbox %d aborting, pid %ld.n",
  1161.                 BN(j), i, SCpnt->pid);
  1162.          }
  1163.       else {
  1164.          HD(j)->cp_stat[i] = IN_RESET;
  1165.          printk("%s: reset, mbox %d in reset, pid %ld.n",
  1166.                 BN(j), i, SCpnt->pid);
  1167.          }
  1168.       if (SCpnt->host_scribble == NULL)
  1169.          panic("%s: reset, mbox %d, garbled SCpnt.n", BN(j), i);
  1170.       if (*(unsigned int *)SCpnt->host_scribble != i)
  1171.          panic("%s: reset, mbox %d, index mismatch.n", BN(j), i);
  1172.       if (SCpnt->scsi_done == NULL)
  1173.          panic("%s: reset, mbox %d, SCpnt->scsi_done == NULL.n", BN(j), i);
  1174.       if (SCpnt == SCarg) arg_done = TRUE;
  1175.       }
  1176.    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  1177.       printk("%s: reset, cannot reset, timeout error.n", BN(j));
  1178.       return FAILED;
  1179.       }
  1180.    outb(CMD_RESET, sh[j]->io_port + REG_LCL_INTR);
  1181.    printk("%s: reset, board reset done, enabling interrupts.n", BN(j));
  1182. #if defined(DEBUG_RESET)
  1183.    do_trace = TRUE;
  1184. #endif
  1185.    HD(j)->in_reset = TRUE;
  1186.    spin_unlock_irq(&io_request_lock);
  1187.    time = jiffies;
  1188.    while ((jiffies - time) < (10 * HZ) && limit++ < 200000) udelay(100L);
  1189.    spin_lock_irq(&io_request_lock);
  1190.    printk("%s: reset, interrupts disabled, loops %d.n", BN(j), limit);
  1191.    for (i = 0; i < sh[j]->can_queue; i++) {
  1192.       if (HD(j)->cp_stat[i] == IN_RESET) {
  1193.          SCpnt = HD(j)->cp[i].SCpnt;
  1194.          unmap_dma(i, j);
  1195.          SCpnt->result = DID_RESET << 16;
  1196.          SCpnt->host_scribble = NULL;
  1197.          /* This mailbox is still waiting for its interrupt */
  1198.          HD(j)->cp_stat[i] = LOCKED;
  1199.          printk("%s, reset, mbox %d locked, DID_RESET, pid %ld done.n",
  1200.                 BN(j), i, SCpnt->pid);
  1201.          }
  1202.       else if (HD(j)->cp_stat[i] == ABORTING) {
  1203.          SCpnt = HD(j)->cp[i].SCpnt;
  1204.          unmap_dma(i, j);
  1205.          SCpnt->result = DID_RESET << 16;
  1206.          SCpnt->host_scribble = NULL;
  1207.          /* This mailbox was never queued to the adapter */
  1208.          HD(j)->cp_stat[i] = FREE;
  1209.          printk("%s, reset, mbox %d aborting, DID_RESET, pid %ld done.n",
  1210.                 BN(j), i, SCpnt->pid);
  1211.          }
  1212.       else
  1213.          /* Any other mailbox has already been set free by interrupt */
  1214.          continue;
  1215.       SCpnt->scsi_done(SCpnt);
  1216.       }
  1217.    HD(j)->in_reset = FALSE;
  1218.    do_trace = FALSE;
  1219.    if (arg_done) printk("%s: reset, exit, pid %ld done.n", BN(j), SCarg->pid);
  1220.    else          printk("%s: reset, exit.n", BN(j));
  1221.    return SUCCESS;
  1222. }
  1223. int u14_34f_reset(Scsi_Cmnd *SCarg) {
  1224.    return do_reset(SCarg);
  1225. }
  1226. int u14_34f_biosparam(Disk *disk, kdev_t dev, int *dkinfo) {
  1227.    unsigned int j = 0;
  1228.    int size = disk->capacity;
  1229.    dkinfo[0] = HD(j)->heads;
  1230.    dkinfo[1] = HD(j)->sectors;
  1231.    dkinfo[2] = size / (HD(j)->heads * HD(j)->sectors);
  1232.    if (ext_tran && (scsicam_bios_param(disk, dev, dkinfo) < 0)) {
  1233.       dkinfo[0] = 255;
  1234.       dkinfo[1] = 63;
  1235.       dkinfo[2] = size / (dkinfo[0] * dkinfo[1]);
  1236.       }
  1237. #if defined (DEBUG_GEOMETRY)
  1238.    printk ("%s: biosparam, head=%d, sec=%d, cyl=%d.n", driver_name,
  1239.            dkinfo[0], dkinfo[1], dkinfo[2]);
  1240. #endif
  1241.    return FALSE;
  1242. }
  1243. static void sort(unsigned long sk[], unsigned int da[], unsigned int n,
  1244.                  unsigned int rev) {
  1245.    unsigned int i, j, k, y;
  1246.    unsigned long x;
  1247.    for (i = 0; i < n - 1; i++) {
  1248.       k = i;
  1249.       for (j = k + 1; j < n; j++)
  1250.          if (rev) {
  1251.             if (sk[j] > sk[k]) k = j;
  1252.             }
  1253.          else {
  1254.             if (sk[j] < sk[k]) k = j;
  1255.             }
  1256.       if (k != i) {
  1257.          x = sk[k]; sk[k] = sk[i]; sk[i] = x;
  1258.          y = da[k]; da[k] = da[i]; da[i] = y;
  1259.          }
  1260.       }
  1261.    return;
  1262.    }
  1263. static inline int reorder(unsigned int j, unsigned long cursec,
  1264.                  unsigned int ihdlr, unsigned int il[], unsigned int n_ready) {
  1265.    Scsi_Cmnd *SCpnt;
  1266.    struct mscp *cpp;
  1267.    unsigned int k, n;
  1268.    unsigned int rev = FALSE, s = TRUE, r = TRUE;
  1269.    unsigned int input_only = TRUE, overlap = FALSE;
  1270.    unsigned long sl[n_ready], pl[n_ready], ll[n_ready];
  1271.    unsigned long maxsec = 0, minsec = ULONG_MAX, seek = 0, iseek = 0;
  1272.    unsigned long ioseek = 0;
  1273.    static unsigned int flushcount = 0, batchcount = 0, sortcount = 0;
  1274.    static unsigned int readycount = 0, ovlcount = 0, inputcount = 0;
  1275.    static unsigned int readysorted = 0, revcount = 0;
  1276.    static unsigned long seeksorted = 0, seeknosort = 0;
  1277.    if (link_statistics && !(++flushcount % link_statistics))
  1278.       printk("fc %d bc %d ic %d oc %d rc %d rs %d sc %d re %d"
  1279.              " av %ldK as %ldK.n", flushcount, batchcount, inputcount,
  1280.              ovlcount, readycount, readysorted, sortcount, revcount,
  1281.              seeknosort / (readycount + 1),
  1282.              seeksorted / (readycount + 1));
  1283.    if (n_ready <= 1) return FALSE;
  1284.    for (n = 0; n < n_ready; n++) {
  1285.       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
  1286.       if (!(cpp->xdir == DTD_IN)) input_only = FALSE;
  1287.       if (SCpnt->request.sector < minsec) minsec = SCpnt->request.sector;
  1288.       if (SCpnt->request.sector > maxsec) maxsec = SCpnt->request.sector;
  1289.       sl[n] = SCpnt->request.sector;
  1290.       ioseek += SCpnt->request.nr_sectors;
  1291.       if (!n) continue;
  1292.       if (sl[n] < sl[n - 1]) s = FALSE;
  1293.       if (sl[n] > sl[n - 1]) r = FALSE;
  1294.       if (link_statistics) {
  1295.          if (sl[n] > sl[n - 1])
  1296.             seek += sl[n] - sl[n - 1];
  1297.          else
  1298.             seek += sl[n - 1] - sl[n];
  1299.          }
  1300.       }
  1301.    if (link_statistics) {
  1302.       if (cursec > sl[0]) seek += cursec - sl[0]; else seek += sl[0] - cursec;
  1303.       }
  1304.    if (cursec > ((maxsec + minsec) / 2)) rev = TRUE;
  1305.    if (ioseek > ((maxsec - minsec) / 2)) rev = FALSE;
  1306.    if (!((rev && r) || (!rev && s))) sort(sl, il, n_ready, rev);
  1307.    if (!input_only) for (n = 0; n < n_ready; n++) {
  1308.       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
  1309.       ll[n] = SCpnt->request.nr_sectors; pl[n] = SCpnt->pid;
  1310.       if (!n) continue;
  1311.       if ((sl[n] == sl[n - 1]) || (!rev && ((sl[n - 1] + ll[n - 1]) > sl[n]))
  1312.           || (rev && ((sl[n] + ll[n]) > sl[n - 1]))) overlap = TRUE;
  1313.       }
  1314.    if (overlap) sort(pl, il, n_ready, FALSE);
  1315.    if (link_statistics) {
  1316.       if (cursec > sl[0]) iseek = cursec - sl[0]; else iseek = sl[0] - cursec;
  1317.       batchcount++; readycount += n_ready; seeknosort += seek / 1024;
  1318.       if (input_only) inputcount++;
  1319.       if (overlap) { ovlcount++; seeksorted += iseek / 1024; }
  1320.       else seeksorted += (iseek + maxsec - minsec) / 1024;
  1321.       if (rev && !r)     {  revcount++; readysorted += n_ready; }
  1322.       if (!rev && !s)    { sortcount++; readysorted += n_ready; }
  1323.       }
  1324. #if defined(DEBUG_LINKED_COMMANDS)
  1325.    if (link_statistics && (overlap || !(flushcount % link_statistics)))
  1326.       for (n = 0; n < n_ready; n++) {
  1327.          k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
  1328.          printk("%s %d.%d:%d pid %ld mb %d fc %d nr %d sec %ld ns %ld"
  1329.                 " cur %ld s:%c r:%c rev:%c in:%c ov:%c xd %d.n",
  1330.                 (ihdlr ? "ihdlr" : "qcomm"), SCpnt->channel, SCpnt->target,
  1331.                 SCpnt->lun, SCpnt->pid, k, flushcount, n_ready,
  1332.                 SCpnt->request.sector, SCpnt->request.nr_sectors, cursec,
  1333.                 YESNO(s), YESNO(r), YESNO(rev), YESNO(input_only),
  1334.                 YESNO(overlap), cpp->xdir);
  1335.          }
  1336. #endif
  1337.    return overlap;
  1338. }
  1339. static void flush_dev(Scsi_Device *dev, unsigned long cursec, unsigned int j,
  1340.                       unsigned int ihdlr) {
  1341.    Scsi_Cmnd *SCpnt;
  1342.    struct mscp *cpp;
  1343.    unsigned int k, n, n_ready = 0, il[MAX_MAILBOXES];
  1344.    for (k = 0; k < sh[j]->can_queue; k++) {
  1345.       if (HD(j)->cp_stat[k] != READY && HD(j)->cp_stat[k] != IN_USE) continue;
  1346.       cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
  1347.       if (SCpnt->device != dev) continue;
  1348.       if (HD(j)->cp_stat[k] == IN_USE) return;
  1349.       il[n_ready++] = k;
  1350.       }
  1351.    if (reorder(j, cursec, ihdlr, il, n_ready)) n_ready = 1;
  1352.    for (n = 0; n < n_ready; n++) {
  1353.       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
  1354.       if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
  1355.          printk("%s: %s, target %d.%d:%d, pid %ld, mbox %d, adapter"
  1356.                 " busy, will abort.n", BN(j), (ihdlr ? "ihdlr" : "qcomm"),
  1357.                 SCpnt->channel, SCpnt->target, SCpnt->lun, SCpnt->pid, k);
  1358.          HD(j)->cp_stat[k] = ABORTING;
  1359.          continue;
  1360.          }
  1361.       outl(H2DEV(cpp->cp_dma_addr), sh[j]->io_port + REG_OGM);
  1362.       outb(CMD_OGM_INTR, sh[j]->io_port + REG_LCL_INTR);
  1363.       HD(j)->cp_stat[k] = IN_USE;
  1364.       }
  1365. }
  1366. static inline void ihdlr(int irq, unsigned int j) {
  1367.    Scsi_Cmnd *SCpnt;
  1368.    unsigned int i, k, c, status, tstatus, reg, ret;
  1369.    struct mscp *spp, *cpp;
  1370.    if (sh[j]->irq != irq)
  1371.        panic("%s: ihdlr, irq %d, sh[j]->irq %d.n", BN(j), irq, sh[j]->irq);
  1372.    /* Check if this board need to be serviced */
  1373.    if (!((reg = inb(sh[j]->io_port + REG_SYS_INTR)) & IRQ_ASSERTED)) return;
  1374.    HD(j)->iocount++;
  1375.    if (do_trace) printk("%s: ihdlr, enter, irq %d, count %d.n", BN(j), irq,
  1376.                         HD(j)->iocount);
  1377.    /* Check if this board is still busy */
  1378.    if (wait_on_busy(sh[j]->io_port, 20 * MAXLOOP)) {
  1379.       outb(CMD_CLR_INTR, sh[j]->io_port + REG_SYS_INTR);
  1380.       printk("%s: ihdlr, busy timeout error,  irq %d, reg 0x%x, count %d.n",
  1381.              BN(j), irq, reg, HD(j)->iocount);
  1382.       return;
  1383.       }
  1384.    ret = inl(sh[j]->io_port + REG_ICM);
  1385.    /* Clear interrupt pending flag */
  1386.    outb(CMD_CLR_INTR, sh[j]->io_port + REG_SYS_INTR);
  1387.    /* Find the mailbox to be serviced on this board */
  1388.    for (i = 0; i < sh[j]->can_queue; i++)
  1389.       if (H2DEV(HD(j)->cp[i].cp_dma_addr) == ret) break;
  1390.    if (i >= sh[j]->can_queue)
  1391.       panic("%s: ihdlr, invalid mscp bus address %p, cp0 %p.n", BN(j),
  1392.             (void *)ret, (void *)H2DEV(HD(j)->cp[0].cp_dma_addr));
  1393.    cpp = &(HD(j)->cp[i]);
  1394.    spp = cpp;
  1395. #if defined(DEBUG_GENERATE_ABORTS)
  1396.    if ((HD(j)->iocount > 500) && ((HD(j)->iocount % 500) < 3)) return;
  1397. #endif
  1398.    if (HD(j)->cp_stat[i] == IGNORE) {
  1399.       HD(j)->cp_stat[i] = FREE;
  1400.       return;
  1401.       }
  1402.    else if (HD(j)->cp_stat[i] == LOCKED) {
  1403.       HD(j)->cp_stat[i] = FREE;
  1404.       printk("%s: ihdlr, mbox %d unlocked, count %d.n", BN(j), i,
  1405.              HD(j)->iocount);
  1406.       return;
  1407.       }
  1408.    else if (HD(j)->cp_stat[i] == FREE) {
  1409.       printk("%s: ihdlr, mbox %d is free, count %d.n", BN(j), i,
  1410.              HD(j)->iocount);
  1411.       return;
  1412.       }
  1413.    else if (HD(j)->cp_stat[i] == IN_RESET)
  1414.       printk("%s: ihdlr, mbox %d is in reset.n", BN(j), i);
  1415.    else if (HD(j)->cp_stat[i] != IN_USE)
  1416.       panic("%s: ihdlr, mbox %d, invalid cp_stat: %d.n",
  1417.             BN(j), i, HD(j)->cp_stat[i]);
  1418.    HD(j)->cp_stat[i] = FREE;
  1419.    SCpnt = cpp->SCpnt;
  1420.    if (SCpnt == NULL) panic("%s: ihdlr, mbox %d, SCpnt == NULL.n", BN(j), i);
  1421.    if (SCpnt->host_scribble == NULL)
  1422.       panic("%s: ihdlr, mbox %d, pid %ld, SCpnt %p garbled.n", BN(j), i,
  1423.             SCpnt->pid, SCpnt);
  1424.    if (*(unsigned int *)SCpnt->host_scribble != i)
  1425.       panic("%s: ihdlr, mbox %d, pid %ld, index mismatch %d.n",
  1426.             BN(j), i, SCpnt->pid, *(unsigned int *)SCpnt->host_scribble);
  1427.    sync_dma(i, j);
  1428.    if (linked_comm && SCpnt->device->queue_depth > 2
  1429.                                      && TLDEV(SCpnt->device->type))
  1430.       flush_dev(SCpnt->device, SCpnt->request.sector, j, TRUE);
  1431.    tstatus = status_byte(spp->target_status);
  1432. #if defined(DEBUG_GENERATE_ERRORS)
  1433.    if ((HD(j)->iocount > 500) && ((HD(j)->iocount % 200) < 2))
  1434.                                            spp->adapter_status = 0x01;
  1435. #endif
  1436.    switch (spp->adapter_status) {
  1437.       case ASOK:     /* status OK */
  1438.          /* Forces a reset if a disk drive keeps returning BUSY */
  1439.          if (tstatus == BUSY && SCpnt->device->type != TYPE_TAPE)
  1440.             status = DID_ERROR << 16;
  1441.          /* If there was a bus reset, redo operation on each target */
  1442.          else if (tstatus != GOOD && SCpnt->device->type == TYPE_DISK
  1443.                   && HD(j)->target_redo[SCpnt->target][SCpnt->channel])
  1444.             status = DID_BUS_BUSY << 16;
  1445.          /* Works around a flaw in scsi.c */
  1446.          else if (tstatus == CHECK_CONDITION
  1447.                   && SCpnt->device->type == TYPE_DISK
  1448.                   && (SCpnt->sense_buffer[2] & 0xf) == RECOVERED_ERROR)
  1449.             status = DID_BUS_BUSY << 16;
  1450.          else
  1451.             status = DID_OK << 16;
  1452.          if (tstatus == GOOD)
  1453.             HD(j)->target_redo[SCpnt->target][SCpnt->channel] = FALSE;
  1454.          if (spp->target_status && SCpnt->device->type == TYPE_DISK &&
  1455.              (!(tstatus == CHECK_CONDITION && HD(j)->iocount <= 1000 &&
  1456.                (SCpnt->sense_buffer[2] & 0xf) == NOT_READY)))
  1457.             printk("%s: ihdlr, target %d.%d:%d, pid %ld, "
  1458.                    "target_status 0x%x, sense key 0x%x.n", BN(j),
  1459.                    SCpnt->channel, SCpnt->target, SCpnt->lun,
  1460.                    SCpnt->pid, spp->target_status,
  1461.                    SCpnt->sense_buffer[2]);
  1462.          HD(j)->target_to[SCpnt->target][SCpnt->channel] = 0;
  1463.          if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0;
  1464.          break;
  1465.       case ASST:     /* Selection Time Out */
  1466.          if (HD(j)->target_to[SCpnt->target][SCpnt->channel] > 1)
  1467.             status = DID_ERROR << 16;
  1468.          else {
  1469.             status = DID_TIME_OUT << 16;
  1470.             HD(j)->target_to[SCpnt->target][SCpnt->channel]++;
  1471.             }
  1472.          break;
  1473.       /* Perform a limited number of internal retries */
  1474.       case 0x93:     /* Unexpected bus free */
  1475.       case 0x94:     /* Target bus phase sequence failure */
  1476.       case 0x96:     /* Illegal SCSI command */
  1477.       case 0xa3:     /* SCSI bus reset error */
  1478.          for (c = 0; c <= sh[j]->max_channel; c++)
  1479.             for (k = 0; k < sh[j]->max_id; k++)
  1480.                HD(j)->target_redo[k][c] = TRUE;
  1481.       case 0x92:     /* Data over/under-run */
  1482.          if (SCpnt->device->type != TYPE_TAPE
  1483.              && HD(j)->retries < MAX_INTERNAL_RETRIES) {
  1484. #if defined(DID_SOFT_ERROR)
  1485.             status = DID_SOFT_ERROR << 16;
  1486. #else
  1487.             status = DID_BUS_BUSY << 16;
  1488. #endif
  1489.             HD(j)->retries++;
  1490.             HD(j)->last_retried_pid = SCpnt->pid;
  1491.             }
  1492.          else
  1493.             status = DID_ERROR << 16;
  1494.          break;
  1495.       case 0x01:     /* Invalid command */
  1496.       case 0x02:     /* Invalid parameters */
  1497.       case 0x03:     /* Invalid data list */
  1498.       case 0x84:     /* SCSI bus abort error */
  1499.       case 0x9b:     /* Auto request sense error */
  1500.       case 0x9f:     /* Unexpected command complete message error */
  1501.       case 0xff:     /* Invalid parameter in the S/G list */
  1502.       default:
  1503.          status = DID_ERROR << 16;
  1504.          break;
  1505.       }
  1506.    SCpnt->result = status | spp->target_status;
  1507. #if defined(DEBUG_INTERRUPT)
  1508.    if (SCpnt->result || do_trace)
  1509. #else
  1510.    if ((spp->adapter_status != ASOK && HD(j)->iocount >  1000) ||
  1511.        (spp->adapter_status != ASOK &&
  1512.         spp->adapter_status != ASST && HD(j)->iocount <= 1000) ||
  1513.         do_trace || msg_byte(spp->target_status))
  1514. #endif
  1515.       printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"
  1516.              " target %d.%d:%d, pid %ld, reg 0x%x, count %d.n",
  1517.              BN(j), i, spp->adapter_status, spp->target_status,
  1518.              SCpnt->channel, SCpnt->target, SCpnt->lun, SCpnt->pid,
  1519.              reg, HD(j)->iocount);
  1520.    unmap_dma(i, j);
  1521.    /* Set the command state to inactive */
  1522.    SCpnt->host_scribble = NULL;
  1523.    SCpnt->scsi_done(SCpnt);
  1524.    if (do_trace) printk("%s: ihdlr, exit, irq %d, count %d.n", BN(j), irq,
  1525.                         HD(j)->iocount);
  1526.    return;
  1527. }
  1528. static void do_interrupt_handler(int irq, void *shap, struct pt_regs *regs) {
  1529.    unsigned int j;
  1530.    unsigned long spin_flags;
  1531.    /* Check if the interrupt must be processed by this handler */
  1532.    if ((j = (unsigned int)((char *)shap - sha)) >= num_boards) return;
  1533.    spin_lock_irqsave(&io_request_lock, spin_flags);
  1534.    ihdlr(irq, j);
  1535.    spin_unlock_irqrestore(&io_request_lock, spin_flags);
  1536. }
  1537. int u14_34f_release(struct Scsi_Host *shpnt) {
  1538.    unsigned int i, j;
  1539.    for (j = 0; sh[j] != NULL && sh[j] != shpnt; j++);
  1540.    if (sh[j] == NULL) panic("%s: release, invalid Scsi_Host pointer.n",
  1541.                             driver_name);
  1542.    if(sh[j]->unchecked_isa_dma) scsi_deregister_blocked_host(sh[j]);
  1543.    for (i = 0; i < sh[j]->can_queue; i++)
  1544.       if ((&HD(j)->cp[i])->sglist) kfree((&HD(j)->cp[i])->sglist);
  1545.    for (i = 0; i < sh[j]->can_queue; i++)
  1546.       pci_unmap_single(HD(j)->pdev, HD(j)->cp[i].cp_dma_addr,
  1547.                      sizeof(struct mscp), PCI_DMA_BIDIRECTIONAL);
  1548.    free_irq(sh[j]->irq, &sha[j]);
  1549.    if (sh[j]->dma_channel != NO_DMA) free_dma(sh[j]->dma_channel);
  1550.    release_region(sh[j]->io_port, sh[j]->n_io_port);
  1551.    scsi_unregister(sh[j]);
  1552.    return FALSE;
  1553. }
  1554. static Scsi_Host_Template driver_template = ULTRASTOR_14_34F;
  1555. #include "scsi_module.c"
  1556. #ifndef MODULE
  1557. __setup("u14-34f=", option_setup);
  1558. #endif /* end MODULE */
  1559. MODULE_LICENSE("GPL");