u14-34f.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:59k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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