bab481034dd23c496dc36a499fc480243d333afc
[linux-2.6.git] / drivers / scsi / eata.c
1 /*
2  *      eata.c - Low-level driver for EATA/DMA SCSI host adapters.
3  *
4  *      03 Jun 2003 Rev. 8.10 for linux-2.5.70
5  *        + Update for new IRQ API.
6  *        + Use "goto" when appropriate.
7  *        + Drop eata.h.
8  *        + Update for new module_param API.
9  *        + Module parameters  can now be specified only in the
10  *          same format as the kernel boot options.
11  *
12  *             boot option    old module param 
13  *             -----------    ------------------
14  *             addr,...       io_port=addr,...
15  *             lc:[y|n]       linked_comm=[1|0]
16  *             mq:xx          max_queue_depth=xx
17  *             tm:[0|1|2]     tag_mode=[0|1|2]
18  *             et:[y|n]       ext_tran=[1|0]
19  *             rs:[y|n]       rev_scan=[1|0]
20  *             ip:[y|n]       isa_probe=[1|0]
21  *             ep:[y|n]       eisa_probe=[1|0]
22  *             pp:[y|n]       pci_probe=[1|0]
23  *
24  *          A valid example using the new parameter format is:
25  *          modprobe eata "eata=0x7410,0x230,lc:y,tm:0,mq:4,ep:n"
26  *
27  *          which is equivalent to the old format:
28  *          modprobe eata io_port=0x7410,0x230 linked_comm=1 tag_mode=0 \
29  *                        max_queue_depth=4 eisa_probe=0
30  *
31  *      12 Feb 2003 Rev. 8.04 for linux 2.5.60
32  *        + Release irq before calling scsi_register.
33  *
34  *      12 Nov 2002 Rev. 8.02 for linux 2.5.47
35  *        + Release driver_lock before calling scsi_register.
36  *
37  *      11 Nov 2002 Rev. 8.01 for linux 2.5.47
38  *        + Fixed bios_param and scsicam_bios_param calling parameters.
39  *
40  *      28 Oct 2002 Rev. 8.00 for linux 2.5.44-ac4
41  *        + Use new tcq and adjust_queue_depth api.
42  *        + New command line option (tm:[0-2]) to choose the type of tags:
43  *          0 -> disable tagging ; 1 -> simple tags  ; 2 -> ordered tags.
44  *          Default is tm:0 (tagged commands disabled).
45  *          For compatibility the "tc:" option is an alias of the "tm:"
46  *          option; tc:n is equivalent to tm:0 and tc:y is equivalent to
47  *          tm:1.
48  *        + The tagged_comm module parameter has been removed, use tag_mode
49  *          instead, equivalent to the "tm:" boot option.
50  *
51  *      10 Oct 2002 Rev. 7.70 for linux 2.5.42
52  *        + Foreport from revision 6.70.
53  *
54  *      25 Jun 2002 Rev. 6.70 for linux 2.4.19
55  *        + This release is the first one tested on a Big Endian platform:
56  *          fixed endian-ness problem due to bitfields;
57  *          fixed endian-ness problem in read_pio.
58  *        + Added new options for selectively probing ISA, EISA and PCI bus:
59  *
60  *          Boot option   Parameter name    Default according to
61  *
62  *          ip:[y|n]      isa_probe=[1|0]   CONFIG_ISA  defined
63  *          ep:[y|n]      eisa_probe=[1|0]  CONFIG_EISA defined
64  *          pp:[y|n]      pci_probe=[1|0]   CONFIG_PCI  defined
65  *
66  *          The default action is to perform probing if the corrisponding
67  *          bus is configured and to skip probing otherwise.
68  *
69  *        + If pci_probe is in effect and a list of I/O  ports is specified
70  *          as parameter or boot option, pci_enable_device() is performed
71  *          on all pci devices matching PCI_CLASS_STORAGE_SCSI.
72  *
73  *      21 Feb 2002 Rev. 6.52 for linux 2.4.18
74  *        + Backport from rev. 7.22 (use io_request_lock).
75  *
76  *      20 Feb 2002 Rev. 7.22 for linux 2.5.5
77  *        + Remove any reference to virt_to_bus().
78  *        + Fix pio hang while detecting multiple HBAs.
79  *        + Fixed a board detection bug: in a system with
80  *          multiple ISA/EISA boards, all but the first one
81  *          were erroneously detected as PCI.
82  *
83  *      01 Jan 2002 Rev. 7.20 for linux 2.5.1
84  *        + Use the dynamic DMA mapping API.
85  *
86  *      19 Dec 2001 Rev. 7.02 for linux 2.5.1
87  *        + Use SCpnt->sc_data_direction if set.
88  *        + Use sglist.page instead of sglist.address.
89  *
90  *      11 Dec 2001 Rev. 7.00 for linux 2.5.1
91  *        + Use host->host_lock instead of io_request_lock.
92  *
93  *       1 May 2001 Rev. 6.05 for linux 2.4.4
94  *        + Clean up all pci related routines.
95  *        + Fix data transfer direction for opcode SEND_CUE_SHEET (0x5d)
96  *
97  *      30 Jan 2001 Rev. 6.04 for linux 2.4.1
98  *        + Call pci_resource_start after pci_enable_device.
99  *
100  *      25 Jan 2001 Rev. 6.03 for linux 2.4.0
101  *        + "check_region" call replaced by "request_region".
102  *
103  *      22 Nov 2000 Rev. 6.02 for linux 2.4.0-test11
104  *        + Return code checked when calling pci_enable_device.
105  *        + Removed old scsi error handling support.
106  *        + The obsolete boot option flag eh:n is silently ignored.
107  *        + Removed error messages while a disk drive is powered up at
108  *          boot time.
109  *        + Improved boot messages: all tagged capable device are
110  *          indicated as "tagged" or "soft-tagged" :
111  *          - "soft-tagged"  means that the driver is trying to do its
112  *            own tagging (i.e. the tc:y option is in effect);
113  *          - "tagged" means that the device supports tagged commands,
114  *            but the driver lets the HBA be responsible for tagging
115  *            support.
116  *
117  *      16 Sep 1999 Rev. 5.11 for linux 2.2.12 and 2.3.18
118  *        + Updated to the new __setup interface for boot command line options.
119  *        + When loaded as a module, accepts the new parameter boot_options
120  *          which value is a string with the same format of the kernel boot
121  *          command line options. A valid example is:
122  *          modprobe eata 'boot_options="0x7410,0x230,lc:y,tc:n,mq:4"'
123  *
124  *       9 Sep 1999 Rev. 5.10 for linux 2.2.12 and 2.3.17
125  *        + 64bit cleanup for Linux/Alpha platform support
126  *          (contribution from H.J. Lu).
127  *
128  *      22 Jul 1999 Rev. 5.00 for linux 2.2.10 and 2.3.11
129  *        + Removed pre-2.2 source code compatibility.
130  *        + Added call to pci_set_master.
131  *
132  *      26 Jul 1998 Rev. 4.33 for linux 2.0.35 and 2.1.111
133  *        + Added command line option (rs:[y|n]) to reverse the scan order
134  *          of PCI boards. The default is rs:y, which reverses the BIOS order
135  *          while registering PCI boards. The default value rs:y generates
136  *          the same order of all previous revisions of this driver.
137  *          Pls. note that "BIOS order" might have been reversed itself
138  *          after the 2.1.9x PCI modifications in the linux kernel.
139  *          The rs value is ignored when the explicit list of addresses
140  *          is used by the "eata=port0,port1,..." command line option.
141  *        + Added command line option (et:[y|n]) to force use of extended
142  *          translation (255 heads, 63 sectors) as disk geometry.
143  *          The default is et:n, which uses the disk geometry returned
144  *          by scsicam_bios_param. The default value et:n is compatible with
145  *          all previous revisions of this driver.
146  *
147  *      28 May 1998 Rev. 4.32 for linux 2.0.33 and 2.1.104
148  *          Increased busy timeout from 10 msec. to 200 msec. while
149  *          processing interrupts.
150  *
151  *      16 May 1998 Rev. 4.31 for linux 2.0.33 and 2.1.102
152  *          Improved abort handling during the eh recovery process.
153  *
154  *      13 May 1998 Rev. 4.30 for linux 2.0.33 and 2.1.101
155  *          The driver is now fully SMP safe, including the
156  *          abort and reset routines.
157  *          Added command line options (eh:[y|n]) to choose between
158  *          new_eh_code and the old scsi code.
159  *          If linux version >= 2.1.101 the default is eh:y, while the eh
160  *          option is ignored for previous releases and the old scsi code
161  *          is used.
162  *
163  *      18 Apr 1998 Rev. 4.20 for linux 2.0.33 and 2.1.97
164  *          Reworked interrupt handler.
165  *
166  *      11 Apr 1998 rev. 4.05 for linux 2.0.33 and 2.1.95
167  *          Major reliability improvement: when a batch with overlapping
168  *          requests is detected, requests are queued one at a time
169  *          eliminating any possible board or drive reordering.
170  *
171  *      10 Apr 1998 rev. 4.04 for linux 2.0.33 and 2.1.95
172  *          Improved SMP support (if linux version >= 2.1.95).
173  *
174  *       9 Apr 1998 rev. 4.03 for linux 2.0.33 and 2.1.94
175  *          Added support for new PCI code and IO-APIC remapping of irqs.
176  *          Performance improvement: when sequential i/o is detected,
177  *          always use direct sort instead of reverse sort.
178  *
179  *       4 Apr 1998 rev. 4.02 for linux 2.0.33 and 2.1.92
180  *          io_port is now unsigned long.
181  *
182  *      17 Mar 1998 rev. 4.01 for linux 2.0.33 and 2.1.88
183  *          Use new scsi error handling code (if linux version >= 2.1.88).
184  *          Use new interrupt code.
185  *
186  *      12 Sep 1997 rev. 3.11 for linux 2.0.30 and 2.1.55
187  *          Use of udelay inside the wait loops to avoid timeout
188  *          problems with fast cpus.
189  *          Removed check about useless calls to the interrupt service
190  *          routine (reported on SMP systems only).
191  *          At initialization time "sorted/unsorted" is displayed instead
192  *          of "linked/unlinked" to reinforce the fact that "linking" is
193  *          nothing but "elevator sorting" in the actual implementation.
194  *
195  *      17 May 1997 rev. 3.10 for linux 2.0.30 and 2.1.38
196  *          Use of serial_number_at_timeout in abort and reset processing.
197  *          Use of the __initfunc and __initdata macro in setup code.
198  *          Minor cleanups in the list_statistics code.
199  *          Increased controller busy timeout in order to better support
200  *          slow SCSI devices.
201  *
202  *      24 Feb 1997 rev. 3.00 for linux 2.0.29 and 2.1.26
203  *          When loading as a module, parameter passing is now supported
204  *          both in 2.0 and in 2.1 style.
205  *          Fixed data transfer direction for some SCSI opcodes.
206  *          Immediate acknowledge to request sense commands.
207  *          Linked commands to each disk device are now reordered by elevator
208  *          sorting. Rare cases in which reordering of write requests could
209  *          cause wrong results are managed.
210  *          Fixed spurious timeouts caused by long simple queue tag sequences.
211  *          New command line option (tm:[0-3]) to choose the type of tags:
212  *          0 -> mixed (default); 1 -> simple; 2 -> head; 3 -> ordered.
213  *
214  *      18 Jan 1997 rev. 2.60 for linux 2.1.21 and 2.0.28
215  *          Added command line options to enable/disable linked commands
216  *          (lc:[y|n]), tagged commands (tc:[y|n]) and to set the max queue
217  *          depth (mq:xx). Default is "eata=lc:n,tc:n,mq:16".
218  *          Improved command linking.
219  *          Documented how to setup RAID-0 with DPT SmartRAID boards.
220  *
221  *       8 Jan 1997 rev. 2.50 for linux 2.1.20 and 2.0.27
222  *          Added linked command support.
223  *          Improved detection of PCI boards using ISA base addresses.
224  *
225  *       3 Dec 1996 rev. 2.40 for linux 2.1.14 and 2.0.27
226  *          Added support for tagged commands and queue depth adjustment.
227  *
228  *      22 Nov 1996 rev. 2.30 for linux 2.1.12 and 2.0.26
229  *          When CONFIG_PCI is defined, BIOS32 is used to include in the
230  *          list of i/o ports to be probed all the PCI SCSI controllers.
231  *          The list of i/o ports to be probed can be overwritten by the
232  *          "eata=port0,port1,...." boot command line option.
233  *          Scatter/gather lists are now allocated by a number of kmalloc
234  *          calls, in order to avoid the previous size limit of 64Kb.
235  *
236  *      16 Nov 1996 rev. 2.20 for linux 2.1.10 and 2.0.25
237  *          Added support for EATA 2.0C, PCI, multichannel and wide SCSI.
238  *
239  *      27 Sep 1996 rev. 2.12 for linux 2.1.0
240  *          Portability cleanups (virtual/bus addressing, little/big endian
241  *          support).
242  *
243  *      09 Jul 1996 rev. 2.11 for linux 2.0.4
244  *          Number of internal retries is now limited.
245  *
246  *      16 Apr 1996 rev. 2.10 for linux 1.3.90
247  *          New argument "reset_flags" to the reset routine.
248  *
249  *       6 Jul 1995 rev. 2.01 for linux 1.3.7
250  *          Update required by the new /proc/scsi support.
251  *
252  *      11 Mar 1995 rev. 2.00 for linux 1.2.0
253  *          Fixed a bug which prevented media change detection for removable
254  *          disk drives.
255  *
256  *      23 Feb 1995 rev. 1.18 for linux 1.1.94
257  *          Added a check for scsi_register returning NULL.
258  *
259  *      11 Feb 1995 rev. 1.17 for linux 1.1.91
260  *          Now DEBUG_RESET is disabled by default.
261  *          Register a board even if it does not assert DMA protocol support
262  *          (DPT SK2011B does not report correctly the dmasup bit).
263  *
264  *       9 Feb 1995 rev. 1.16 for linux 1.1.90
265  *          Use host->wish_block instead of host->block.
266  *          New list of Data Out SCSI commands.
267  *
268  *       8 Feb 1995 rev. 1.15 for linux 1.1.89
269  *          Cleared target_time_out counter while performing a reset.
270  *          All external symbols renamed to avoid possible name conflicts.
271  *
272  *      28 Jan 1995 rev. 1.14 for linux 1.1.86
273  *          Added module support.
274  *          Log and do a retry when a disk drive returns a target status
275  *          different from zero on a recovered error.
276  *
277  *      24 Jan 1995 rev. 1.13 for linux 1.1.85
278  *          Use optimized board configuration, with a measured performance
279  *          increase in the range 10%-20% on i/o throughput.
280  *
281  *      16 Jan 1995 rev. 1.12 for linux 1.1.81
282  *          Fix mscp structure comments (no functional change).
283  *          Display a message if check_region detects a port address
284  *          already in use.
285  *
286  *      17 Dec 1994 rev. 1.11 for linux 1.1.74
287  *          Use the scsicam_bios_param routine. This allows an easy
288  *          migration path from disk partition tables created using
289  *          different SCSI drivers and non optimal disk geometry.
290  *
291  *      15 Dec 1994 rev. 1.10 for linux 1.1.74
292  *          Added support for ISA EATA boards (DPT PM2011, DPT PM2021).
293  *          The host->block flag is set for all the detected ISA boards.
294  *          The detect routine no longer enforces LEVEL triggering
295  *          for EISA boards, it just prints a warning message.
296  *
297  *      30 Nov 1994 rev. 1.09 for linux 1.1.68
298  *          Redo i/o on target status CHECK_CONDITION for TYPE_DISK only.
299  *          Added optional support for using a single board at a time.
300  *
301  *      18 Nov 1994 rev. 1.08 for linux 1.1.64
302  *          Forces sg_tablesize = 64 and can_queue = 64 if these
303  *          values are not correctly detected (DPT PM2012).
304  *
305  *      14 Nov 1994 rev. 1.07 for linux 1.1.63  Final BETA release.
306  *      04 Aug 1994 rev. 1.00 for linux 1.1.39  First BETA release.
307  *
308  *
309  *          This driver is based on the CAM (Common Access Method Committee)
310  *          EATA (Enhanced AT Bus Attachment) rev. 2.0A, using DMA protocol.
311  *
312  *  Copyright (C) 1994-2003 Dario Ballabio (ballabio_dario@emc.com)
313  *
314  *  Alternate email: dario.ballabio@inwind.it, dario.ballabio@tiscalinet.it
315  *
316  *  Redistribution and use in source and binary forms, with or without
317  *  modification, are permitted provided that redistributions of source
318  *  code retain the above copyright notice and this comment without
319  *  modification.
320  *
321  */
322
323 /*
324  *
325  *  Here is a brief description of the DPT SCSI host adapters.
326  *  All these boards provide an EATA/DMA compatible programming interface
327  *  and are fully supported by this driver in any configuration, including
328  *  multiple SCSI channels:
329  *
330  *  PM2011B/9X -  Entry Level ISA
331  *  PM2021A/9X -  High Performance ISA
332  *  PM2012A       Old EISA
333  *  PM2012B       Old EISA
334  *  PM2022A/9X -  Entry Level EISA
335  *  PM2122A/9X -  High Performance EISA
336  *  PM2322A/9X -  Extra High Performance EISA
337  *  PM3021     -  SmartRAID Adapter for ISA
338  *  PM3222     -  SmartRAID Adapter for EISA (PM3222W is 16-bit wide SCSI)
339  *  PM3224     -  SmartRAID Adapter for PCI  (PM3224W is 16-bit wide SCSI)
340  *  PM33340UW  -  SmartRAID Adapter for PCI  ultra wide multichannel
341  *
342  *  The above list is just an indication: as a matter of fact all DPT
343  *  boards using the EATA/DMA protocol are supported by this driver,
344  *  since they use exactely the same programming interface.
345  *
346  *  The DPT PM2001 provides only the EATA/PIO interface and hence is not
347  *  supported by this driver.
348  *
349  *  This code has been tested with up to 3 Distributed Processing Technology
350  *  PM2122A/9X (DPT SCSI BIOS v002.D1, firmware v05E.0) EISA controllers,
351  *  in any combination of private and shared IRQ.
352  *  PCI support has been tested using up to 2 DPT PM3224W (DPT SCSI BIOS
353  *  v003.D0, firmware v07G.0).
354  *
355  *  DPT SmartRAID boards support "Hardware Array" - a group of disk drives
356  *  which are all members of the same RAID-0, RAID-1 or RAID-5 array implemented
357  *  in host adapter hardware. Hardware Arrays are fully compatible with this
358  *  driver, since they look to it as a single disk drive.
359  *
360  *  WARNING: to create a RAID-0 "Hardware Array" you must select "Other Unix"
361  *  as the current OS in the DPTMGR "Initial System Installation" menu.
362  *  Otherwise RAID-0 is generated as an "Array Group" (i.e. software RAID-0),
363  *  which is not supported by the actual SCSI subsystem.
364  *  To get the "Array Group" functionality, the Linux MD driver must be used
365  *  instead of the DPT "Array Group" feature.
366  *
367  *  Multiple ISA, EISA and PCI boards can be configured in the same system.
368  *  It is suggested to put all the EISA boards on the same IRQ level, all
369  *  the PCI  boards on another IRQ level, while ISA boards cannot share
370  *  interrupts.
371  *
372  *  If you configure multiple boards on the same IRQ, the interrupt must
373  *  be _level_ triggered (not _edge_ triggered).
374  *
375  *  This driver detects EATA boards by probes at fixed port addresses,
376  *  so no BIOS32 or PCI BIOS support is required.
377  *  The suggested way to detect a generic EATA PCI board is to force on it
378  *  any unused EISA address, even if there are other controllers on the EISA
379  *  bus, or even if you system has no EISA bus at all.
380  *  Do not force any ISA address on EATA PCI boards.
381  *
382  *  If PCI bios support is configured into the kernel, BIOS32 is used to
383  *  include in the list of i/o ports to be probed all the PCI SCSI controllers.
384  *
385  *  Due to a DPT BIOS "feature", it might not be possible to force an EISA
386  *  address on more than a single DPT PCI board, so in this case you have to
387  *  let the PCI BIOS assign the addresses.
388  *
389  *  The sequence of detection probes is:
390  *
391  *  - ISA 0x1F0;
392  *  - PCI SCSI controllers (only if BIOS32 is available);
393  *  - EISA/PCI 0x1C88 through 0xFC88 (corresponding to EISA slots 1 to 15);
394  *  - ISA  0x170, 0x230, 0x330.
395  *
396  *  The above list of detection probes can be totally replaced by the
397  *  boot command line option: "eata=port0,port1,port2,...", where the
398  *  port0, port1... arguments are ISA/EISA/PCI addresses to be probed.
399  *  For example using "eata=0x7410,0x7450,0x230", the driver probes
400  *  only the two PCI addresses 0x7410 and 0x7450 and the ISA address 0x230,
401  *  in this order; "eata=0" totally disables this driver.
402  *
403  *  After the optional list of detection probes, other possible command line
404  *  options are:
405  *
406  *  et:y  force use of extended translation (255 heads, 63 sectors);
407  *  et:n  use disk geometry detected by scsicam_bios_param;
408  *  rs:y  reverse scan order while detecting PCI boards;
409  *  rs:n  use BIOS order while detecting PCI boards;
410  *  lc:y  enables linked commands;
411  *  lc:n  disables linked commands;
412  *  tm:0  disables tagged commands (same as tc:n);
413  *  tm:1  use simple queue tags (same as tc:y);
414  *  tm:2  use ordered queue tags (same as tc:2);
415  *  mq:xx set the max queue depth to the value xx (2 <= xx <= 32).
416  *
417  *  The default value is: "eata=lc:n,mq:16,tm:0,et:n,rs:n".
418  *  An example using the list of detection probes could be:
419  *  "eata=0x7410,0x230,lc:y,tm:2,mq:4,et:n".
420  *
421  *  When loading as a module, parameters can be specified as well.
422  *  The above example would be (use 1 in place of y and 0 in place of n):
423  *
424  *  modprobe eata io_port=0x7410,0x230 linked_comm=1 \
425  *                max_queue_depth=4 ext_tran=0 tag_mode=2 \
426  *                rev_scan=1
427  *
428  *  ----------------------------------------------------------------------------
429  *  In this implementation, linked commands are designed to work with any DISK
430  *  or CD-ROM, since this linking has only the intent of clustering (time-wise)
431  *  and reordering by elevator sorting commands directed to each device,
432  *  without any relation with the actual SCSI protocol between the controller
433  *  and the device.
434  *  If Q is the queue depth reported at boot time for each device (also named
435  *  cmds/lun) and Q > 2, whenever there is already an active command to the
436  *  device all other commands to the same device  (up to Q-1) are kept waiting
437  *  in the elevator sorting queue. When the active command completes, the
438  *  commands in this queue are sorted by sector address. The sort is chosen
439  *  between increasing or decreasing by minimizing the seek distance between
440  *  the sector of the commands just completed and the sector of the first
441  *  command in the list to be sorted.
442  *  Trivial math assures that the unsorted average seek distance when doing
443  *  random seeks over S sectors is S/3.
444  *  When (Q-1) requests are uniformly distributed over S sectors, the average
445  *  distance between two adjacent requests is S/((Q-1) + 1), so the sorted
446  *  average seek distance for (Q-1) random requests over S sectors is S/Q.
447  *  The elevator sorting hence divides the seek distance by a factor Q/3.
448  *  The above pure geometric remarks are valid in all cases and the
449  *  driver effectively reduces the seek distance by the predicted factor
450  *  when there are Q concurrent read i/o operations on the device, but this
451  *  does not necessarily results in a noticeable performance improvement:
452  *  your mileage may vary....
453  *
454  *  Note: command reordering inside a batch of queued commands could cause
455  *        wrong results only if there is at least one write request and the
456  *        intersection (sector-wise) of all requests is not empty.
457  *        When the driver detects a batch including overlapping requests
458  *        (a really rare event) strict serial (pid) order is enforced.
459  *  ----------------------------------------------------------------------------
460  *  The extended translation option (et:y) is useful when using large physical
461  *  disks/arrays. It could also be useful when switching between Adaptec boards
462  *  and DPT boards without reformatting the disk.
463  *  When a boot disk is partitioned with extended translation, in order to
464  *  be able to boot it with a DPT board is could be necessary to add to
465  *  lilo.conf additional commands as in the following example:
466  *
467  *  fix-table
468  *  disk=/dev/sda bios=0x80 sectors=63 heads=128 cylindres=546
469  *
470  *  where the above geometry should be replaced with the one reported at
471  *  power up by the DPT controller.
472  *  ----------------------------------------------------------------------------
473  *
474  *  The boards are named EATA0, EATA1,... according to the detection order.
475  *
476  *  In order to support multiple ISA boards in a reliable way,
477  *  the driver sets host->wish_block = 1 for all ISA boards.
478  */
479
480 #include <linux/config.h>
481 #include <linux/string.h>
482 #include <linux/kernel.h>
483 #include <linux/ioport.h>
484 #include <linux/delay.h>
485 #include <linux/proc_fs.h>
486 #include <linux/blkdev.h>
487 #include <linux/interrupt.h>
488 #include <linux/stat.h>
489 #include <linux/pci.h>
490 #include <linux/init.h>
491 #include <linux/ctype.h>
492 #include <linux/spinlock.h>
493 #include <asm/byteorder.h>
494 #include <asm/dma.h>
495 #include <asm/io.h>
496 #include <asm/irq.h>
497
498 #include <scsi/scsi.h>
499 #include <scsi/scsi_cmnd.h>
500 #include <scsi/scsi_device.h>
501 #include <scsi/scsi_host.h>
502 #include <scsi/scsi_tcq.h>
503 #include <scsi/scsicam.h>
504
505 static int eata2x_detect(struct scsi_host_template *);
506 static int eata2x_release(struct Scsi_Host *);
507 static int eata2x_queuecommand(struct scsi_cmnd *,
508                 void (*done)(struct scsi_cmnd *));
509 static int eata2x_eh_abort(struct scsi_cmnd *);
510 static int eata2x_eh_host_reset(struct scsi_cmnd *);
511 static int eata2x_bios_param(struct scsi_device *, struct block_device *,
512                              sector_t, int *);
513 static int eata2x_slave_configure(struct scsi_device *);
514
515 static struct scsi_host_template driver_template = {
516                 .name                    = "EATA/DMA 2.0x rev. 8.10.00 ",
517                 .detect                  = eata2x_detect,
518                 .release                 = eata2x_release,
519                 .queuecommand            = eata2x_queuecommand,
520                 .eh_abort_handler        = eata2x_eh_abort,
521                 .eh_device_reset_handler = NULL,
522                 .eh_bus_reset_handler    = NULL,
523                 .eh_host_reset_handler   = eata2x_eh_host_reset,
524                 .bios_param              = eata2x_bios_param,
525                 .slave_configure         = eata2x_slave_configure,
526                 .this_id                 = 7,
527                 .unchecked_isa_dma       = 1,
528                 .use_clustering          = ENABLE_CLUSTERING
529                 };
530 #if !defined(__BIG_ENDIAN_BITFIELD) && !defined(__LITTLE_ENDIAN_BITFIELD)
531 #error "Adjust your <asm/byteorder.h> defines"
532 #endif
533
534 /* Subversion values */
535 #define ISA  0
536 #define ESA 1
537
538 #undef  FORCE_CONFIG
539
540 #undef  DEBUG_LINKED_COMMANDS
541 #undef  DEBUG_DETECT
542 #undef  DEBUG_PCI_DETECT
543 #undef  DEBUG_INTERRUPT
544 #undef  DEBUG_RESET
545 #undef  DEBUG_GENERATE_ERRORS
546 #undef  DEBUG_GENERATE_ABORTS
547 #undef  DEBUG_GEOMETRY
548
549 #define MAX_ISA 4
550 #define MAX_VESA 0
551 #define MAX_EISA 15
552 #define MAX_PCI 16
553 #define MAX_BOARDS (MAX_ISA + MAX_VESA + MAX_EISA + MAX_PCI)
554 #define MAX_CHANNEL 4
555 #define MAX_LUN 32
556 #define MAX_TARGET 32
557 #define MAX_MAILBOXES 64
558 #define MAX_SGLIST 64
559 #define MAX_LARGE_SGLIST 122
560 #define MAX_INTERNAL_RETRIES 64
561 #define MAX_CMD_PER_LUN 2
562 #define MAX_TAGGED_CMD_PER_LUN (MAX_MAILBOXES - MAX_CMD_PER_LUN)
563
564 #define SKIP ULONG_MAX
565 #define FREE 0
566 #define IN_USE   1
567 #define LOCKED   2
568 #define IN_RESET 3
569 #define IGNORE   4
570 #define READY    5
571 #define ABORTING 6
572 #define NO_DMA  0xff
573 #define MAXLOOP  10000
574 #define TAG_DISABLED 0
575 #define TAG_SIMPLE   1
576 #define TAG_ORDERED  2
577
578 #define REG_CMD         7
579 #define REG_STATUS      7
580 #define REG_AUX_STATUS  8
581 #define REG_DATA        0
582 #define REG_DATA2       1
583 #define REG_SEE         6
584 #define REG_LOW         2
585 #define REG_LM          3
586 #define REG_MID         4
587 #define REG_MSB         5
588 #define REGION_SIZE     9UL
589 #define MAX_ISA_ADDR    0x03ff
590 #define MIN_EISA_ADDR   0x1c88
591 #define MAX_EISA_ADDR   0xfc88
592 #define BSY_ASSERTED      0x80
593 #define DRQ_ASSERTED      0x08
594 #define ABSY_ASSERTED     0x01
595 #define IRQ_ASSERTED      0x02
596 #define READ_CONFIG_PIO   0xf0
597 #define SET_CONFIG_PIO    0xf1
598 #define SEND_CP_PIO       0xf2
599 #define RECEIVE_SP_PIO    0xf3
600 #define TRUNCATE_XFR_PIO  0xf4
601 #define RESET_PIO         0xf9
602 #define READ_CONFIG_DMA   0xfd
603 #define SET_CONFIG_DMA    0xfe
604 #define SEND_CP_DMA       0xff
605 #define ASOK              0x00
606 #define ASST              0x01
607
608 #define YESNO(a) ((a) ? 'y' : 'n')
609 #define TLDEV(type) ((type) == TYPE_DISK || (type) == TYPE_ROM)
610
611 /* "EATA", in Big Endian format */
612 #define EATA_SIG_BE 0x45415441
613
614 /* Number of valid bytes in the board config structure for EATA 2.0x */
615 #define EATA_2_0A_SIZE 28
616 #define EATA_2_0B_SIZE 30
617 #define EATA_2_0C_SIZE 34
618
619 /* Board info structure */
620 struct eata_info {
621    u_int32_t data_len;  /* Number of valid bytes after this field */
622    u_int32_t sign;      /* ASCII "EATA" signature */
623
624 #if defined(__BIG_ENDIAN_BITFIELD)
625    unchar version:4, :4;
626    unchar  haaval:1, ata:1, drqvld:1, dmasup:1, morsup:1, trnxfr:1, tarsup:1,
627            ocsena:1;
628 #else
629    unchar        :4,    /* unused low nibble */
630           version:4;    /* EATA version, should be 0x1 */
631    unchar  ocsena:1,    /* Overlap Command Support Enabled */
632            tarsup:1,    /* Target Mode Supported */
633            trnxfr:1,    /* Truncate Transfer Cmd NOT Necessary */
634            morsup:1,    /* More Supported */
635            dmasup:1,    /* DMA Supported */
636            drqvld:1,    /* DRQ Index (DRQX) is valid */
637               ata:1,    /* This is an ATA device */
638            haaval:1;    /* Host Adapter Address Valid */
639 #endif
640
641    ushort cp_pad_len;   /* Number of pad bytes after cp_len */
642    unchar host_addr[4]; /* Host Adapter SCSI ID for channels 3, 2, 1, 0 */
643    u_int32_t cp_len;    /* Number of valid bytes in cp */
644    u_int32_t sp_len;    /* Number of valid bytes in sp */
645    ushort queue_size;   /* Max number of cp that can be queued */
646    ushort unused;
647    ushort scatt_size;   /* Max number of entries in scatter/gather table */
648
649 #if defined(__BIG_ENDIAN_BITFIELD)
650    unchar    drqx:2, second:1, irq_tr:1, irq:4;
651    unchar  sync;
652    unchar         :4, res1:1, large_sg:1, forcaddr:1, isaena:1;
653    unchar max_chan:3, max_id:5;
654    unchar   max_lun;
655    unchar     eisa:1, pci:1, idquest:1, m1:1, :4;
656 #else
657    unchar     irq:4,    /* Interrupt Request assigned to this controller */
658            irq_tr:1,    /* 0 for edge triggered, 1 for level triggered */
659            second:1,    /* 1 if this is a secondary (not primary) controller */
660              drqx:2;    /* DRQ Index (0=DMA0, 1=DMA7, 2=DMA6, 3=DMA5) */
661    unchar  sync;        /* 1 if scsi target id 7...0 is running sync scsi */
662
663    /* Structure extension defined in EATA 2.0B */
664    unchar  isaena:1,    /* ISA i/o addressing is disabled/enabled */
665          forcaddr:1,    /* Port address has been forced */
666          large_sg:1,    /* 1 if large SG lists are supported */
667              res1:1,
668                  :4;
669    unchar  max_id:5,    /* Max SCSI target ID number */
670          max_chan:3;    /* Max SCSI channel number on this board */
671
672    /* Structure extension defined in EATA 2.0C */
673    unchar   max_lun;    /* Max SCSI LUN number */
674    unchar        :4,
675                m1:1,    /* This is a PCI with an M1 chip installed */
676           idquest:1,    /* RAIDNUM returned is questionable */
677               pci:1,    /* This board is PCI */
678              eisa:1;    /* This board is EISA */
679 #endif
680
681    unchar   raidnum;    /* Uniquely identifies this HBA in a system */
682    unchar   notused;
683
684    ushort ipad[247];
685    };
686
687 /* Board config structure */
688 struct eata_config {
689    ushort len;          /* Number of bytes following this field */
690
691 #if defined(__BIG_ENDIAN_BITFIELD)
692    unchar     :4, tarena:1, mdpena:1, ocena:1, edis:1;
693 #else
694    unchar edis:1,       /* Disable EATA interface after config command */
695          ocena:1,       /* Overlapped Commands Enabled */
696         mdpena:1,       /* Transfer all Modified Data Pointer Messages */
697         tarena:1,       /* Target Mode Enabled for this controller */
698               :4;
699 #endif
700
701    unchar cpad[511];
702    };
703
704 /* Returned status packet structure */
705 struct mssp {
706
707 #if defined(__BIG_ENDIAN_BITFIELD)
708    unchar            eoc:1, adapter_status:7;
709 #else
710    unchar adapter_status:7,    /* State related to current command */
711                      eoc:1;    /* End Of Command (1 = command completed) */
712 #endif
713
714    unchar target_status;       /* SCSI status received after data transfer */
715    unchar unused[2];
716    u_int32_t inv_res_len;      /* Number of bytes not transferred */
717    u_int32_t cpp_index;        /* Index of address set in cp */
718    char mess[12];
719    };
720
721 struct sg_list {
722    unsigned int address;                /* Segment Address */
723    unsigned int num_bytes;              /* Segment Length */
724    };
725
726 /* MailBox SCSI Command Packet */
727 struct mscp {
728
729 #if defined(__BIG_ENDIAN_BITFIELD)
730    unchar     din:1, dout:1, interp:1, :1, sg:1, reqsen:1, init:1, sreset:1;
731    unchar sense_len;
732    unchar unused[3];
733    unchar        :7, fwnest:1;
734    unchar        :5, hbaci:1, iat:1, phsunit:1;
735    unchar channel:3, target:5;
736    unchar     one:1, dispri:1, luntar:1, lun:5;
737 #else
738    unchar  sreset:1,     /* SCSI Bus Reset Signal should be asserted */
739              init:1,     /* Re-initialize controller and self test */
740            reqsen:1,     /* Transfer Request Sense Data to addr using DMA */
741                sg:1,     /* Use Scatter/Gather */
742                  :1,
743            interp:1,     /* The controller interprets cp, not the target */
744              dout:1,     /* Direction of Transfer is Out (Host to Target) */
745               din:1;     /* Direction of Transfer is In (Target to Host) */
746    unchar sense_len;     /* Request Sense Length */
747    unchar unused[3];
748    unchar  fwnest:1,     /* Send command to a component of an Array Group */
749                  :7;
750    unchar phsunit:1,     /* Send to Target Physical Unit (bypass RAID) */
751               iat:1,     /* Inhibit Address Translation */
752             hbaci:1,     /* Inhibit HBA Caching for this command */
753                  :5;
754    unchar  target:5,     /* SCSI target ID */
755           channel:3;     /* SCSI channel number */
756    unchar     lun:5,     /* SCSI logical unit number */
757            luntar:1,     /* This cp is for Target (not LUN) */
758            dispri:1,     /* Disconnect Privilege granted */
759               one:1;     /* 1 */
760 #endif
761
762    unchar mess[3];       /* Massage to/from Target */
763    unchar cdb[12];       /* Command Descriptor Block */
764    u_int32_t data_len;   /* If sg=0 Data Length, if sg=1 sglist length */
765    u_int32_t cpp_index;  /* Index of address to be returned in sp */
766    u_int32_t data_address; /* If sg=0 Data Address, if sg=1 sglist address */
767    u_int32_t sp_dma_addr;  /* Address where sp is DMA'ed when cp completes */
768    u_int32_t sense_addr; /* Address where Sense Data is DMA'ed on error */
769
770    /* Additional fields begin here. */
771    struct scsi_cmnd *SCpnt;
772
773    /* All the cp structure is zero filled by queuecommand except the
774       following CP_TAIL_SIZE bytes, initialized by detect */
775    dma_addr_t cp_dma_addr; /* dma handle for this cp structure */
776    struct sg_list *sglist; /* pointer to the allocated SG list */
777    };
778
779 #define CP_TAIL_SIZE (sizeof(struct sglist *) + sizeof(dma_addr_t))
780
781 struct hostdata {
782    struct mscp cp[MAX_MAILBOXES];       /* Mailboxes for this board */
783    unsigned int cp_stat[MAX_MAILBOXES]; /* FREE, IN_USE, LOCKED, IN_RESET */
784    unsigned int last_cp_used;           /* Index of last mailbox used */
785    unsigned int iocount;                /* Total i/o done for this board */
786    int board_number;                    /* Number of this board */
787    char board_name[16];                 /* Name of this board */
788    int in_reset;                        /* True if board is doing a reset */
789    int target_to[MAX_TARGET][MAX_CHANNEL]; /* N. of timeout errors on target */
790    int target_redo[MAX_TARGET][MAX_CHANNEL]; /* If 1 redo i/o on target */
791    unsigned int retries;                /* Number of internal retries */
792    unsigned long last_retried_pid;      /* Pid of last retried command */
793    unsigned char subversion;            /* Bus type, either ISA or EISA/PCI */
794    unsigned char protocol_rev;          /* EATA 2.0 rev., 'A' or 'B' or 'C' */
795    unsigned char is_pci;                /* 1 is bus type is PCI */
796    struct pci_dev *pdev;                /* pdev for PCI bus, NULL otherwise */
797    struct mssp *sp_cpu_addr;            /* cpu addr for DMA buffer sp */
798    dma_addr_t sp_dma_addr;              /* dma handle for DMA buffer sp */
799    struct mssp sp;                      /* Local copy of sp buffer */
800    };
801
802 static struct Scsi_Host *sh[MAX_BOARDS + 1];
803 static const char *driver_name = "EATA";
804 static char sha[MAX_BOARDS];
805 static spinlock_t driver_lock = SPIN_LOCK_UNLOCKED;
806
807 /* Initialize num_boards so that ihdlr can work while detect is in progress */
808 static unsigned int num_boards = MAX_BOARDS;
809
810 static unsigned long io_port[] = {
811
812    /* Space for MAX_INT_PARAM ports usable while loading as a module */
813    SKIP,    SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,
814    SKIP,    SKIP,
815
816    /* First ISA */
817    0x1f0,
818
819    /* Space for MAX_PCI ports possibly reported by PCI_BIOS */
820    SKIP,    SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,
821    SKIP,    SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,
822
823    /* MAX_EISA ports */
824    0x1c88, 0x2c88, 0x3c88, 0x4c88, 0x5c88, 0x6c88, 0x7c88, 0x8c88,
825    0x9c88, 0xac88, 0xbc88, 0xcc88, 0xdc88, 0xec88, 0xfc88,
826
827    /* Other (MAX_ISA - 1) ports */
828    0x170,  0x230,  0x330,
829
830    /* End of list */
831    0x0
832    };
833
834 #define HD(board) ((struct hostdata *) &sh[board]->hostdata)
835 #define BN(board) (HD(board)->board_name)
836
837 /* Device is Big Endian */
838 #define H2DEV(x)   cpu_to_be32(x)
839 #define DEV2H(x)   be32_to_cpu(x)
840 #define H2DEV16(x) cpu_to_be16(x)
841 #define DEV2H16(x) be16_to_cpu(x)
842
843 /* But transfer orientation from the 16 bit data register is Little Endian */
844 #define REG2H(x)   le16_to_cpu(x)
845
846 static irqreturn_t do_interrupt_handler(int, void *, struct pt_regs *);
847 static void flush_dev(struct scsi_device *, unsigned long, unsigned int, unsigned int);
848 static int do_trace = 0;
849 static int setup_done = 0;
850 static int link_statistics;
851 static int ext_tran = 0;
852 static int rev_scan = 1;
853
854 #if defined(CONFIG_SCSI_EATA_TAGGED_QUEUE)
855 static int tag_mode = TAG_SIMPLE;
856 #else
857 static int tag_mode = TAG_DISABLED;
858 #endif
859
860 #if defined(CONFIG_SCSI_EATA_LINKED_COMMANDS)
861 static int linked_comm = 1;
862 #else
863 static int linked_comm = 0;
864 #endif
865
866 #if defined(CONFIG_SCSI_EATA_MAX_TAGS)
867 static int max_queue_depth = CONFIG_SCSI_EATA_MAX_TAGS;
868 #else
869 static int max_queue_depth = MAX_CMD_PER_LUN;
870 #endif
871
872 #if defined(CONFIG_ISA)
873 static int isa_probe = 1;
874 #else
875 static int isa_probe = 0;
876 #endif
877
878 #if defined(CONFIG_EISA)
879 static int eisa_probe = 1;
880 #else
881 static int eisa_probe = 0;
882 #endif
883
884 #if defined(CONFIG_PCI)
885 static int pci_probe = 1;
886 #else
887 static int pci_probe = 0;
888 #endif
889
890 #define MAX_INT_PARAM 10
891 #define MAX_BOOT_OPTIONS_SIZE 256
892 static char boot_options[MAX_BOOT_OPTIONS_SIZE];
893
894 #if defined(MODULE)
895 #include <linux/module.h>
896 #include <linux/moduleparam.h>
897
898 module_param_string(eata, boot_options, MAX_BOOT_OPTIONS_SIZE, 0);
899 MODULE_PARM_DESC(eata, " equivalent to the \"eata=...\" kernel boot option." \
900 "            Example: modprobe eata \"eata=0x7410,0x230,lc:y,tm:0,mq:4,ep:n\"");
901 MODULE_AUTHOR("Dario Ballabio");
902 MODULE_LICENSE("GPL");
903 MODULE_DESCRIPTION("EATA/DMA SCSI Driver");
904
905 #endif
906
907 static int eata2x_slave_configure(struct scsi_device *dev) {
908    int j, tqd, utqd;
909    char *tag_suffix, *link_suffix;
910    struct Scsi_Host *host = dev->host;
911
912    j = ((struct hostdata *) host->hostdata)->board_number;
913
914    utqd = MAX_CMD_PER_LUN;
915    tqd = max_queue_depth;
916
917    if (TLDEV(dev->type) && dev->tagged_supported)
918
919       if (tag_mode == TAG_SIMPLE) {
920          scsi_adjust_queue_depth(dev, MSG_SIMPLE_TAG, tqd);
921          tag_suffix = ", simple tags";
922          }
923       else if (tag_mode == TAG_ORDERED) {
924          scsi_adjust_queue_depth(dev, MSG_ORDERED_TAG, tqd);
925          tag_suffix = ", ordered tags";
926          }
927       else {
928          scsi_adjust_queue_depth(dev, 0, tqd);
929          tag_suffix = ", no tags";
930          }
931
932    else if (TLDEV(dev->type) && linked_comm) {
933       scsi_adjust_queue_depth(dev, 0, tqd);
934       tag_suffix = ", untagged";
935       }
936
937    else {
938       scsi_adjust_queue_depth(dev, 0, utqd);
939       tag_suffix = "";
940       }
941
942    if (TLDEV(dev->type) && linked_comm && dev->queue_depth > 2)
943       link_suffix = ", sorted";
944    else if (TLDEV(dev->type))
945       link_suffix = ", unsorted";
946    else
947       link_suffix = "";
948
949    printk("%s: scsi%d, channel %d, id %d, lun %d, cmds/lun %d%s%s.\n",
950           BN(j), host->host_no, dev->channel, dev->id, dev->lun,
951           dev->queue_depth, link_suffix, tag_suffix);
952
953    return 0;
954 }
955
956 static int wait_on_busy(unsigned long iobase, unsigned int loop) {
957
958    while (inb(iobase + REG_AUX_STATUS) & ABSY_ASSERTED) {
959       udelay(1L);
960       if (--loop == 0) return 1;
961       }
962
963    return 0;
964 }
965
966 static int do_dma(unsigned long iobase, unsigned long addr, unchar cmd) {
967    unsigned char *byaddr;
968    unsigned long devaddr;
969
970    if (wait_on_busy(iobase, (addr ? MAXLOOP * 100 : MAXLOOP))) return 1;
971
972    if (addr) {
973       devaddr = H2DEV(addr);
974       byaddr = (unsigned char *) &devaddr;
975       outb(byaddr[3], iobase + REG_LOW);
976       outb(byaddr[2], iobase + REG_LM);
977       outb(byaddr[1], iobase + REG_MID);
978       outb(byaddr[0], iobase + REG_MSB);
979       }
980
981    outb(cmd, iobase + REG_CMD);
982    return 0;
983 }
984
985 static int read_pio(unsigned long iobase, ushort *start, ushort *end) {
986    unsigned int loop = MAXLOOP;
987    ushort *p;
988
989    for (p = start; p <= end; p++) {
990
991       while (!(inb(iobase + REG_STATUS) & DRQ_ASSERTED)) {
992          udelay(1L);
993          if (--loop == 0) return 1;
994          }
995
996       loop = MAXLOOP;
997       *p = REG2H(inw(iobase));
998       }
999
1000    return 0;
1001 }
1002
1003 static struct pci_dev *get_pci_dev(unsigned long port_base) {
1004
1005 #if defined(CONFIG_PCI)
1006
1007    unsigned int addr;
1008    struct pci_dev *dev = NULL;
1009
1010    while((dev = pci_get_class(PCI_CLASS_STORAGE_SCSI << 8, dev))) {
1011       addr = pci_resource_start (dev, 0);
1012
1013 #if defined(DEBUG_PCI_DETECT)
1014       printk("%s: get_pci_dev, bus %d, devfn 0x%x, addr 0x%x.\n",
1015              driver_name, dev->bus->number, dev->devfn, addr);
1016 #endif
1017
1018       /* we are in so much trouble for a pci hotplug system with this driver
1019        * anyway, so doing this at least lets people unload the driver and not
1020        * cause memory problems, but in general this is a bad thing to do (this
1021        * driver needs to be converted to the proper PCI api someday... */
1022       pci_dev_put(dev);
1023       if (addr + PCI_BASE_ADDRESS_0 == port_base) return dev;
1024       }
1025
1026 #endif /* end CONFIG_PCI */
1027
1028    return NULL;
1029 }
1030
1031 static void enable_pci_ports(void) {
1032
1033 #if defined(CONFIG_PCI)
1034
1035    struct pci_dev *dev = NULL;
1036
1037    while((dev = pci_get_class(PCI_CLASS_STORAGE_SCSI << 8, dev))) {
1038
1039 #if defined(DEBUG_PCI_DETECT)
1040       printk("%s: enable_pci_ports, bus %d, devfn 0x%x.\n",
1041              driver_name, dev->bus->number, dev->devfn);
1042 #endif
1043
1044       if (pci_enable_device (dev))
1045          printk("%s: warning, pci_enable_device failed, bus %d devfn 0x%x.\n",
1046                 driver_name, dev->bus->number, dev->devfn);
1047       }
1048
1049 #endif /* end CONFIG_PCI */
1050 }
1051
1052 static int port_detect \
1053       (unsigned long port_base, unsigned int j, struct scsi_host_template *tpnt) {
1054    unsigned char irq, dma_channel, subversion, i, is_pci = 0;
1055    unsigned char protocol_rev;
1056    struct eata_info info;
1057    char *bus_type, dma_name[16];
1058    struct pci_dev *pdev;
1059
1060    /* Allowed DMA channels for ISA (0 indicates reserved) */
1061    unsigned char dma_channel_table[4] = { 5, 6, 7, 0 };
1062
1063    char name[16];
1064
1065    sprintf(name, "%s%d", driver_name, j);
1066
1067    if (!request_region(port_base, REGION_SIZE, driver_name)) {
1068 #if defined(DEBUG_DETECT)
1069       printk("%s: address 0x%03lx in use, skipping probe.\n", name, port_base);
1070 #endif
1071       goto fail;
1072       }
1073
1074    spin_lock_irq(&driver_lock);
1075
1076    if (do_dma(port_base, 0, READ_CONFIG_PIO)) {
1077 #if defined(DEBUG_DETECT)
1078       printk("%s: detect, do_dma failed at 0x%03lx.\n", name, port_base);
1079 #endif
1080       goto freelock;
1081       }
1082
1083    /* Read the info structure */
1084    if (read_pio(port_base, (ushort *)&info, (ushort *)&info.ipad[0])) {
1085 #if defined(DEBUG_DETECT)
1086       printk("%s: detect, read_pio failed at 0x%03lx.\n", name, port_base);
1087 #endif
1088       goto freelock;
1089       }
1090
1091    info.data_len = DEV2H(info.data_len);
1092    info.sign = DEV2H(info.sign);
1093    info.cp_pad_len = DEV2H16(info.cp_pad_len);
1094    info.cp_len = DEV2H(info.cp_len);
1095    info.sp_len = DEV2H(info.sp_len);
1096    info.scatt_size = DEV2H16(info.scatt_size);
1097    info.queue_size = DEV2H16(info.queue_size);
1098
1099    /* Check the controller "EATA" signature */
1100    if (info.sign != EATA_SIG_BE) {
1101 #if defined(DEBUG_DETECT)
1102       printk("%s: signature 0x%04x discarded.\n", name, info.sign);
1103 #endif
1104       goto freelock;
1105       }
1106
1107    if (info.data_len < EATA_2_0A_SIZE) {
1108       printk("%s: config structure size (%d bytes) too short, detaching.\n",
1109              name, info.data_len);
1110       goto freelock;
1111       }
1112    else if (info.data_len == EATA_2_0A_SIZE)
1113       protocol_rev = 'A';
1114    else if (info.data_len == EATA_2_0B_SIZE)
1115       protocol_rev = 'B';
1116    else
1117       protocol_rev = 'C';
1118
1119    if (protocol_rev != 'A' && info.forcaddr) {
1120       printk("%s: warning, port address has been forced.\n", name);
1121       bus_type = "PCI";
1122       is_pci = 1;
1123       subversion = ESA;
1124       }
1125    else if (port_base > MAX_EISA_ADDR || (protocol_rev == 'C' && info.pci)) {
1126       bus_type = "PCI";
1127       is_pci = 1;
1128       subversion = ESA;
1129       }
1130    else if (port_base >= MIN_EISA_ADDR || (protocol_rev == 'C' && info.eisa)) {
1131       bus_type = "EISA";
1132       subversion = ESA;
1133       }
1134    else if (protocol_rev == 'C' && !info.eisa && !info.pci) {
1135       bus_type = "ISA";
1136       subversion = ISA;
1137       }
1138    else if (port_base > MAX_ISA_ADDR) {
1139       bus_type = "PCI";
1140       is_pci = 1;
1141       subversion = ESA;
1142       }
1143    else {
1144       bus_type = "ISA";
1145       subversion = ISA;
1146       }
1147
1148    if (!info.haaval || info.ata) {
1149       printk("%s: address 0x%03lx, unusable %s board (%d%d), detaching.\n",
1150              name, port_base, bus_type, info.haaval, info.ata);
1151       goto freelock;
1152       }
1153
1154    if (info.drqvld) {
1155
1156       if (subversion ==  ESA)
1157          printk("%s: warning, weird %s board using DMA.\n", name, bus_type);
1158
1159       subversion = ISA;
1160       dma_channel = dma_channel_table[3 - info.drqx];
1161       }
1162    else {
1163
1164       if (subversion ==  ISA)
1165          printk("%s: warning, weird %s board not using DMA.\n", name, bus_type);
1166
1167       subversion = ESA;
1168       dma_channel = NO_DMA;
1169       }
1170
1171    if (!info.dmasup)
1172       printk("%s: warning, DMA protocol support not asserted.\n", name);
1173
1174    irq = info.irq;
1175
1176    if (subversion == ESA && !info.irq_tr)
1177       printk("%s: warning, LEVEL triggering is suggested for IRQ %u.\n",
1178              name, irq);
1179
1180    if (is_pci) {
1181       pdev = get_pci_dev(port_base);
1182       if (!pdev)
1183          printk("%s: warning, failed to get pci_dev structure.\n", name);
1184       }
1185    else
1186       pdev = NULL;
1187
1188    if (pdev && (irq != pdev->irq)) {
1189       printk("%s: IRQ %u mapped to IO-APIC IRQ %u.\n", name, irq, pdev->irq);
1190       irq = pdev->irq;
1191       }
1192
1193    /* Board detected, allocate its IRQ */
1194    if (request_irq(irq, do_interrupt_handler,
1195              SA_INTERRUPT | ((subversion == ESA) ? SA_SHIRQ : 0),
1196              driver_name, (void *) &sha[j])) {
1197       printk("%s: unable to allocate IRQ %u, detaching.\n", name, irq);
1198       goto freelock;
1199       }
1200
1201    if (subversion == ISA && request_dma(dma_channel, driver_name)) {
1202       printk("%s: unable to allocate DMA channel %u, detaching.\n",
1203              name, dma_channel);
1204       goto freeirq;
1205       }
1206
1207 #if defined(FORCE_CONFIG)
1208    {
1209    struct eata_config *cf;
1210    dma_addr_t cf_dma_addr;
1211
1212    cf = pci_alloc_consistent(pdev, sizeof(struct eata_config), &cf_dma_addr);
1213
1214    if (!cf) {
1215       printk("%s: config, pci_alloc_consistent failed, detaching.\n", name);
1216       goto freedma;
1217       }
1218
1219    /* Set board configuration */
1220    memset((char *)cf, 0, sizeof(struct eata_config));
1221    cf->len = (ushort) H2DEV16((ushort)510);
1222    cf->ocena = 1;
1223
1224    if (do_dma(port_base, cf_dma_addr, SET_CONFIG_DMA)) {
1225       printk("%s: busy timeout sending configuration, detaching.\n", name);
1226       pci_free_consistent(pdev, sizeof(struct eata_config), cf, cf_dma_addr);
1227       goto freedma;
1228       }
1229
1230    }
1231 #endif
1232
1233    spin_unlock_irq(&driver_lock);
1234    sh[j] = scsi_register(tpnt, sizeof(struct hostdata));
1235    spin_lock_irq(&driver_lock);
1236
1237    if (sh[j] == NULL) {
1238       printk("%s: unable to register host, detaching.\n", name);
1239       goto freedma;
1240       }
1241
1242    sh[j]->io_port = port_base;
1243    sh[j]->unique_id = port_base;
1244    sh[j]->n_io_port = REGION_SIZE;
1245    sh[j]->dma_channel = dma_channel;
1246    sh[j]->irq = irq;
1247    sh[j]->sg_tablesize = (ushort) info.scatt_size;
1248    sh[j]->this_id = (ushort) info.host_addr[3];
1249    sh[j]->can_queue = (ushort) info.queue_size;
1250    sh[j]->cmd_per_lun = MAX_CMD_PER_LUN;
1251    memset(HD(j), 0, sizeof(struct hostdata));
1252    HD(j)->subversion = subversion;
1253    HD(j)->protocol_rev = protocol_rev;
1254    HD(j)->is_pci = is_pci;
1255    HD(j)->pdev = pdev;
1256    HD(j)->board_number = j;
1257
1258    if (HD(j)->subversion == ESA)
1259       sh[j]->unchecked_isa_dma = 0;
1260    else {
1261       unsigned long flags;
1262       sh[j]->unchecked_isa_dma = 1;
1263
1264       flags=claim_dma_lock();
1265       disable_dma(dma_channel);
1266       clear_dma_ff(dma_channel);
1267       set_dma_mode(dma_channel, DMA_MODE_CASCADE);
1268       enable_dma(dma_channel);
1269       release_dma_lock(flags);
1270
1271       }
1272
1273    strcpy(BN(j), name);
1274
1275    /* DPT PM2012 does not allow to detect sg_tablesize correctly */
1276    if (sh[j]->sg_tablesize > MAX_SGLIST || sh[j]->sg_tablesize < 2) {
1277       printk("%s: detect, wrong n. of SG lists %d, fixed.\n",
1278              BN(j), sh[j]->sg_tablesize);
1279       sh[j]->sg_tablesize = MAX_SGLIST;
1280       }
1281
1282    /* DPT PM2012 does not allow to detect can_queue correctly */
1283    if (sh[j]->can_queue > MAX_MAILBOXES || sh[j]->can_queue  < 2) {
1284       printk("%s: detect, wrong n. of mbox %d, fixed.\n",
1285              BN(j), sh[j]->can_queue);
1286       sh[j]->can_queue = MAX_MAILBOXES;
1287       }
1288
1289    if (protocol_rev != 'A') {
1290
1291       if (info.max_chan > 0 && info.max_chan < MAX_CHANNEL)
1292          sh[j]->max_channel = info.max_chan;
1293
1294       if (info.max_id > 7 && info.max_id < MAX_TARGET)
1295          sh[j]->max_id = info.max_id + 1;
1296
1297       if (info.large_sg && sh[j]->sg_tablesize == MAX_SGLIST)
1298          sh[j]->sg_tablesize = MAX_LARGE_SGLIST;
1299       }
1300
1301    if (protocol_rev == 'C') {
1302
1303       if (info.max_lun > 7 && info.max_lun < MAX_LUN)
1304          sh[j]->max_lun = info.max_lun + 1;
1305       }
1306
1307    if (dma_channel == NO_DMA) sprintf(dma_name, "%s", "BMST");
1308    else                       sprintf(dma_name, "DMA %u", dma_channel);
1309
1310    spin_unlock_irq(&driver_lock);
1311
1312    for (i = 0; i < sh[j]->can_queue; i++)
1313       HD(j)->cp[i].cp_dma_addr = pci_map_single(HD(j)->pdev,
1314             &HD(j)->cp[i], sizeof(struct mscp), PCI_DMA_BIDIRECTIONAL);
1315
1316    for (i = 0; i < sh[j]->can_queue; i++)
1317       if (! ((&HD(j)->cp[i])->sglist = kmalloc(
1318             sh[j]->sg_tablesize * sizeof(struct sg_list),
1319             (sh[j]->unchecked_isa_dma ? GFP_DMA : 0) | GFP_ATOMIC))) {
1320          printk("%s: kmalloc SGlist failed, mbox %d, detaching.\n", BN(j), i);
1321          goto release;
1322          }
1323
1324    if (! (HD(j)->sp_cpu_addr = pci_alloc_consistent(HD(j)->pdev,
1325          sizeof(struct mssp), &HD(j)->sp_dma_addr))) {
1326       printk("%s: pci_alloc_consistent failed, detaching.\n", BN(j));
1327       goto release;
1328       }
1329
1330    if (max_queue_depth > MAX_TAGGED_CMD_PER_LUN)
1331        max_queue_depth = MAX_TAGGED_CMD_PER_LUN;
1332
1333    if (max_queue_depth < MAX_CMD_PER_LUN) max_queue_depth = MAX_CMD_PER_LUN;
1334
1335    if (tag_mode != TAG_DISABLED && tag_mode != TAG_SIMPLE)
1336       tag_mode = TAG_ORDERED;
1337
1338    if (j == 0) {
1339       printk("EATA/DMA 2.0x: Copyright (C) 1994-2003 Dario Ballabio.\n");
1340       printk("%s config options -> tm:%d, lc:%c, mq:%d, rs:%c, et:%c, "\
1341              "ip:%c, ep:%c, pp:%c.\n", driver_name, tag_mode,
1342              YESNO(linked_comm), max_queue_depth, YESNO(rev_scan),
1343              YESNO(ext_tran), YESNO(isa_probe), YESNO(eisa_probe),
1344              YESNO(pci_probe));
1345       }
1346
1347    printk("%s: 2.0%c, %s 0x%03lx, IRQ %u, %s, SG %d, MB %d.\n",
1348           BN(j), HD(j)->protocol_rev, bus_type, (unsigned long)sh[j]->io_port,
1349           sh[j]->irq, dma_name, sh[j]->sg_tablesize, sh[j]->can_queue);
1350
1351    if (sh[j]->max_id > 8 || sh[j]->max_lun > 8)
1352       printk("%s: wide SCSI support enabled, max_id %u, max_lun %u.\n",
1353              BN(j), sh[j]->max_id, sh[j]->max_lun);
1354
1355    for (i = 0; i <= sh[j]->max_channel; i++)
1356       printk("%s: SCSI channel %u enabled, host target ID %d.\n",
1357              BN(j), i, info.host_addr[3 - i]);
1358
1359 #if defined(DEBUG_DETECT)
1360    printk("%s: Vers. 0x%x, ocs %u, tar %u, trnxfr %u, more %u, SYNC 0x%x, "\
1361           "sec. %u, infol %d, cpl %d spl %d.\n", name, info.version,
1362           info.ocsena, info.tarsup, info.trnxfr, info.morsup, info.sync,
1363           info.second, info.data_len, info.cp_len,
1364           info.sp_len);
1365
1366    if (protocol_rev == 'B' || protocol_rev == 'C')
1367       printk("%s: isaena %u, forcaddr %u, max_id %u, max_chan %u, "\
1368              "large_sg %u, res1 %u.\n", name, info.isaena, info.forcaddr,
1369              info.max_id, info.max_chan, info.large_sg, info.res1);
1370
1371    if (protocol_rev == 'C')
1372       printk("%s: max_lun %u, m1 %u, idquest %u, pci %u, eisa %u, "\
1373              "raidnum %u.\n", name, info.max_lun, info.m1, info.idquest,
1374              info.pci, info.eisa, info.raidnum);
1375 #endif
1376
1377    if (HD(j)->pdev) {
1378       pci_set_master(HD(j)->pdev);
1379       if (pci_set_dma_mask(HD(j)->pdev, 0xffffffff))
1380          printk("%s: warning, pci_set_dma_mask failed.\n", BN(j));
1381       }
1382
1383    return 1;
1384
1385 freedma:
1386    if (subversion == ISA) free_dma(dma_channel);
1387 freeirq:
1388    free_irq(irq, &sha[j]);
1389 freelock:
1390    spin_unlock_irq(&driver_lock);
1391    release_region(port_base, REGION_SIZE);
1392 fail:
1393    return 0;
1394
1395 release:
1396    eata2x_release(sh[j]);
1397    return 0;
1398 }
1399
1400 static void internal_setup(char *str, int *ints) {
1401    int i, argc = ints[0];
1402    char *cur = str, *pc;
1403
1404    if (argc > 0) {
1405
1406       if (argc > MAX_INT_PARAM) argc = MAX_INT_PARAM;
1407
1408       for (i = 0; i < argc; i++) io_port[i] = ints[i + 1];
1409
1410       io_port[i] = 0;
1411       setup_done = 1;
1412       }
1413
1414    while (cur && (pc = strchr(cur, ':'))) {
1415       int val = 0, c = *++pc;
1416
1417       if (c == 'n' || c == 'N') val = 0;
1418       else if (c == 'y' || c == 'Y') val = 1;
1419       else val = (int) simple_strtoul(pc, NULL, 0);
1420
1421       if (!strncmp(cur, "lc:", 3)) linked_comm = val;
1422       else if (!strncmp(cur, "tm:", 3)) tag_mode = val;
1423       else if (!strncmp(cur, "tc:", 3)) tag_mode = val;
1424       else if (!strncmp(cur, "mq:", 3))  max_queue_depth = val;
1425       else if (!strncmp(cur, "ls:", 3))  link_statistics = val;
1426       else if (!strncmp(cur, "et:", 3))  ext_tran = val;
1427       else if (!strncmp(cur, "rs:", 3))  rev_scan = val;
1428       else if (!strncmp(cur, "ip:", 3))  isa_probe = val;
1429       else if (!strncmp(cur, "ep:", 3))  eisa_probe = val;
1430       else if (!strncmp(cur, "pp:", 3))  pci_probe = val;
1431
1432       if ((cur = strchr(cur, ','))) ++cur;
1433       }
1434
1435    return;
1436 }
1437
1438 static int option_setup(char *str) {
1439    int ints[MAX_INT_PARAM];
1440    char *cur = str;
1441    int i = 1;
1442
1443    while (cur && isdigit(*cur) && i <= MAX_INT_PARAM) {
1444       ints[i++] = simple_strtoul(cur, NULL, 0);
1445
1446       if ((cur = strchr(cur, ',')) != NULL) cur++;
1447    }
1448
1449    ints[0] = i - 1;
1450    internal_setup(cur, ints);
1451    return 1;
1452 }
1453
1454 static void add_pci_ports(void) {
1455
1456 #if defined(CONFIG_PCI)
1457
1458    unsigned int addr, k;
1459
1460    struct pci_dev *dev = NULL;
1461
1462    for (k = 0; k < MAX_PCI; k++) {
1463
1464       if (!(dev = pci_get_class(PCI_CLASS_STORAGE_SCSI << 8, dev))) break;
1465
1466       if (pci_enable_device (dev)) {
1467
1468 #if defined(DEBUG_PCI_DETECT)
1469          printk("%s: detect, bus %d, devfn 0x%x, pci_enable_device failed.\n",
1470                 driver_name, dev->bus->number, dev->devfn);
1471 #endif
1472
1473          continue;
1474          }
1475
1476       addr = pci_resource_start (dev, 0);
1477
1478 #if defined(DEBUG_PCI_DETECT)
1479       printk("%s: detect, seq. %d, bus %d, devfn 0x%x, addr 0x%x.\n",
1480              driver_name, k, dev->bus->number, dev->devfn, addr);
1481 #endif
1482
1483       /* Order addresses according to rev_scan value */
1484       io_port[MAX_INT_PARAM + (rev_scan ? (MAX_PCI - k) : (1 + k))] =
1485              addr + PCI_BASE_ADDRESS_0;
1486       }
1487
1488    pci_dev_put(dev);
1489 #endif /* end CONFIG_PCI */
1490
1491    return;
1492 }
1493
1494 static int eata2x_detect(struct scsi_host_template *tpnt) {
1495    unsigned int j = 0, k;
1496
1497    tpnt->proc_name = "eata2x";
1498
1499    if(strlen(boot_options)) option_setup(boot_options);
1500
1501 #if defined(MODULE)
1502    /* io_port could have been modified when loading as a module */
1503    if(io_port[0] != SKIP) {
1504       setup_done = 1;
1505       io_port[MAX_INT_PARAM] = 0;
1506       }
1507 #endif
1508
1509    for (k = 0; k < MAX_BOARDS + 1; k++) sh[k] = NULL;
1510
1511    for (k = MAX_INT_PARAM; io_port[k]; k++)
1512       if (io_port[k] == SKIP) continue;
1513       else if (io_port[k] <= MAX_ISA_ADDR) {
1514          if (!isa_probe) io_port[k] = SKIP;
1515          }
1516       else if (io_port[k] >= MIN_EISA_ADDR && io_port[k] <= MAX_EISA_ADDR) {
1517          if (!eisa_probe) io_port[k] = SKIP;
1518          }
1519
1520    if (pci_probe) {
1521       if (!setup_done) add_pci_ports();
1522       else          enable_pci_ports();
1523       }
1524
1525    for (k = 0; io_port[k]; k++) {
1526
1527       if (io_port[k] == SKIP) continue;
1528
1529       if (j < MAX_BOARDS && port_detect(io_port[k], j, tpnt)) j++;
1530       }
1531
1532    num_boards = j;
1533    return j;
1534 }
1535
1536 static void map_dma(unsigned int i, unsigned int j) {
1537    unsigned int k, count, pci_dir;
1538    struct scatterlist *sgpnt;
1539    struct mscp *cpp;
1540    struct scsi_cmnd *SCpnt;
1541
1542    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
1543    pci_dir = SCpnt->sc_data_direction;
1544
1545    if (SCpnt->sense_buffer)
1546       cpp->sense_addr = H2DEV(pci_map_single(HD(j)->pdev, SCpnt->sense_buffer,
1547                            sizeof SCpnt->sense_buffer, PCI_DMA_FROMDEVICE));
1548
1549    cpp->sense_len = sizeof SCpnt->sense_buffer;
1550
1551    if (!SCpnt->use_sg) {
1552
1553       /* If we get here with PCI_DMA_NONE, pci_map_single triggers a BUG() */
1554       if (!SCpnt->request_bufflen) pci_dir = PCI_DMA_BIDIRECTIONAL;
1555
1556       if (SCpnt->request_buffer)
1557          cpp->data_address = H2DEV(pci_map_single(HD(j)->pdev,
1558                   SCpnt->request_buffer, SCpnt->request_bufflen, pci_dir));
1559
1560       cpp->data_len = H2DEV(SCpnt->request_bufflen);
1561       return;
1562       }
1563
1564    sgpnt = (struct scatterlist *) SCpnt->request_buffer;
1565    count = pci_map_sg(HD(j)->pdev, sgpnt, SCpnt->use_sg, pci_dir);
1566
1567    for (k = 0; k < count; k++) {
1568       cpp->sglist[k].address = H2DEV(sg_dma_address(&sgpnt[k]));
1569       cpp->sglist[k].num_bytes = H2DEV(sg_dma_len(&sgpnt[k]));
1570       }
1571
1572    cpp->sg = 1;
1573    cpp->data_address = H2DEV(pci_map_single(HD(j)->pdev, cpp->sglist,
1574                              SCpnt->use_sg * sizeof(struct sg_list), pci_dir));
1575    cpp->data_len = H2DEV((SCpnt->use_sg * sizeof(struct sg_list)));
1576 }
1577
1578 static void unmap_dma(unsigned int i, unsigned int j) {
1579    unsigned int pci_dir;
1580    struct mscp *cpp;
1581    struct scsi_cmnd *SCpnt;
1582
1583    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
1584    pci_dir = SCpnt->sc_data_direction;
1585
1586    if (DEV2H(cpp->sense_addr))
1587       pci_unmap_single(HD(j)->pdev, DEV2H(cpp->sense_addr),
1588                        DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);
1589
1590    if (SCpnt->use_sg)
1591       pci_unmap_sg(HD(j)->pdev, SCpnt->request_buffer, SCpnt->use_sg, pci_dir);
1592
1593    if (!DEV2H(cpp->data_len)) pci_dir = PCI_DMA_BIDIRECTIONAL;
1594
1595    if (DEV2H(cpp->data_address))
1596       pci_unmap_single(HD(j)->pdev, DEV2H(cpp->data_address),
1597                        DEV2H(cpp->data_len), pci_dir);
1598 }
1599
1600 static void sync_dma(unsigned int i, unsigned int j) {
1601    unsigned int pci_dir;
1602    struct mscp *cpp;
1603    struct scsi_cmnd *SCpnt;
1604
1605    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
1606    pci_dir = SCpnt->sc_data_direction;
1607
1608    if (DEV2H(cpp->sense_addr))
1609       pci_dma_sync_single_for_cpu(HD(j)->pdev, DEV2H(cpp->sense_addr),
1610                           DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);
1611
1612    if (SCpnt->use_sg)
1613       pci_dma_sync_sg_for_cpu(HD(j)->pdev, SCpnt->request_buffer,
1614                          SCpnt->use_sg, pci_dir);
1615
1616    if (!DEV2H(cpp->data_len)) pci_dir = PCI_DMA_BIDIRECTIONAL;
1617
1618    if (DEV2H(cpp->data_address))
1619       pci_dma_sync_single_for_cpu(HD(j)->pdev, DEV2H(cpp->data_address),
1620                        DEV2H(cpp->data_len), pci_dir);
1621 }
1622
1623 static void scsi_to_dev_dir(unsigned int i, unsigned int j) {
1624    unsigned int k;
1625
1626    static const unsigned char data_out_cmds[] = {
1627       0x0a, 0x2a, 0x15, 0x55, 0x04, 0x07, 0x18, 0x1d, 0x24, 0x2e,
1628       0x30, 0x31, 0x32, 0x38, 0x39, 0x3a, 0x3b, 0x3d, 0x3f, 0x40,
1629       0x41, 0x4c, 0xaa, 0xae, 0xb0, 0xb1, 0xb2, 0xb6, 0xea, 0x1b, 0x5d
1630       };
1631
1632    static const unsigned char data_none_cmds[] = {
1633       0x01, 0x0b, 0x10, 0x11, 0x13, 0x16, 0x17, 0x19, 0x2b, 0x1e,
1634       0x2c, 0xac, 0x2f, 0xaf, 0x33, 0xb3, 0x35, 0x36, 0x45, 0x47,
1635       0x48, 0x49, 0xa9, 0x4b, 0xa5, 0xa6, 0xb5, 0x00
1636       };
1637
1638    struct mscp *cpp;
1639    struct scsi_cmnd *SCpnt;
1640
1641    cpp = &HD(j)->cp[i]; SCpnt = cpp->SCpnt;
1642
1643    if (SCpnt->sc_data_direction == DMA_FROM_DEVICE) {
1644       cpp->din  = 1;
1645       cpp->dout = 0;
1646       return;
1647       }
1648    else if (SCpnt->sc_data_direction == DMA_TO_DEVICE) {
1649       cpp->din  = 0;
1650       cpp->dout = 1;
1651       return;
1652       }
1653    else if (SCpnt->sc_data_direction == DMA_NONE) {
1654       cpp->din  = 0;
1655       cpp->dout = 0;
1656       return;
1657       }
1658
1659    if (SCpnt->sc_data_direction != DMA_BIDIRECTIONAL)
1660       panic("%s: qcomm, invalid SCpnt->sc_data_direction.\n", BN(j));
1661
1662    for (k = 0; k < ARRAY_SIZE(data_out_cmds); k++)
1663       if (SCpnt->cmnd[0] == data_out_cmds[k]) {
1664          cpp->dout = 1;
1665          break;
1666          }
1667
1668    if ((cpp->din = !cpp->dout))
1669       for (k = 0; k < ARRAY_SIZE(data_none_cmds); k++)
1670          if (SCpnt->cmnd[0] == data_none_cmds[k]) {
1671             cpp->din = 0;
1672             break;
1673             }
1674
1675 }
1676
1677 static int eata2x_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) {
1678    unsigned int i, j, k;
1679    struct mscp *cpp;
1680
1681    /* j is the board number */
1682    j = ((struct hostdata *) SCpnt->device->host->hostdata)->board_number;
1683
1684    if (SCpnt->host_scribble)
1685       panic("%s: qcomm, pid %ld, SCpnt %p already active.\n",
1686             BN(j), SCpnt->pid, SCpnt);
1687
1688    /* i is the mailbox number, look for the first free mailbox
1689       starting from last_cp_used */
1690    i = HD(j)->last_cp_used + 1;
1691
1692    for (k = 0; k < sh[j]->can_queue; k++, i++) {
1693
1694       if (i >= sh[j]->can_queue) i = 0;
1695
1696       if (HD(j)->cp_stat[i] == FREE) {
1697          HD(j)->last_cp_used = i;
1698          break;
1699          }
1700       }
1701
1702    if (k == sh[j]->can_queue) {
1703       printk("%s: qcomm, no free mailbox.\n", BN(j));
1704       return 1;
1705       }
1706
1707    /* Set pointer to control packet structure */
1708    cpp = &HD(j)->cp[i];
1709
1710    memset(cpp, 0, sizeof(struct mscp) - CP_TAIL_SIZE);
1711
1712    /* Set pointer to status packet structure, Big Endian format */
1713    cpp->sp_dma_addr = H2DEV(HD(j)->sp_dma_addr);
1714
1715    SCpnt->scsi_done = done;
1716    cpp->cpp_index = i;
1717    SCpnt->host_scribble = (unsigned char *) &cpp->cpp_index;
1718
1719    if (do_trace) printk("%s: qcomm, mbox %d, target %d.%d:%d, pid %ld.\n",
1720                         BN(j), i, SCpnt->device->channel, SCpnt->device->id,
1721                         SCpnt->device->lun, SCpnt->pid);
1722
1723    cpp->reqsen = 1;
1724    cpp->dispri = 1;
1725 #if 0
1726    if (SCpnt->device->type == TYPE_TAPE) cpp->hbaci = 1;
1727 #endif
1728    cpp->one = 1;
1729    cpp->channel = SCpnt->device->channel;
1730    cpp->target = SCpnt->device->id;
1731    cpp->lun = SCpnt->device->lun;
1732    cpp->SCpnt = SCpnt;
1733    memcpy(cpp->cdb, SCpnt->cmnd, SCpnt->cmd_len);
1734
1735    /* Use data transfer direction SCpnt->sc_data_direction */
1736    scsi_to_dev_dir(i, j);
1737
1738    /* Map DMA buffers and SG list */
1739    map_dma(i, j);
1740
1741    if (linked_comm && SCpnt->device->queue_depth > 2
1742                                      && TLDEV(SCpnt->device->type)) {
1743       HD(j)->cp_stat[i] = READY;
1744       flush_dev(SCpnt->device, SCpnt->request->sector, j, 0);
1745       return 0;
1746       }
1747
1748    /* Send control packet to the board */
1749    if (do_dma(sh[j]->io_port, cpp->cp_dma_addr, SEND_CP_DMA)) {
1750       unmap_dma(i, j);
1751       SCpnt->host_scribble = NULL;
1752       printk("%s: qcomm, target %d.%d:%d, pid %ld, adapter busy.\n",
1753              BN(j), SCpnt->device->channel, SCpnt->device->id, SCpnt->device->lun, SCpnt->pid);
1754       return 1;
1755       }
1756
1757    HD(j)->cp_stat[i] = IN_USE;
1758    return 0;
1759 }
1760
1761 static int eata2x_eh_abort(struct scsi_cmnd *SCarg) {
1762    unsigned int i, j;
1763
1764    j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number;
1765
1766    if (SCarg->host_scribble == NULL) {
1767       printk("%s: abort, target %d.%d:%d, pid %ld inactive.\n",
1768              BN(j), SCarg->device->channel, SCarg->device->id, SCarg->device->lun, SCarg->pid);
1769       return SUCCESS;
1770       }
1771
1772    i = *(unsigned int *)SCarg->host_scribble;
1773    printk("%s: abort, mbox %d, target %d.%d:%d, pid %ld.\n",
1774           BN(j), i, SCarg->device->channel, SCarg->device->id, SCarg->device->lun, SCarg->pid);
1775
1776    if (i >= sh[j]->can_queue)
1777       panic("%s: abort, invalid SCarg->host_scribble.\n", BN(j));
1778
1779    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
1780       printk("%s: abort, timeout error.\n", BN(j));
1781       return FAILED;
1782       }
1783
1784    if (HD(j)->cp_stat[i] == FREE) {
1785       printk("%s: abort, mbox %d is free.\n", BN(j), i);
1786       return SUCCESS;
1787       }
1788
1789    if (HD(j)->cp_stat[i] == IN_USE) {
1790       printk("%s: abort, mbox %d is in use.\n", BN(j), i);
1791
1792       if (SCarg != HD(j)->cp[i].SCpnt)
1793          panic("%s: abort, mbox %d, SCarg %p, cp SCpnt %p.\n",
1794                BN(j), i, SCarg, HD(j)->cp[i].SCpnt);
1795
1796       if (inb(sh[j]->io_port + REG_AUX_STATUS) & IRQ_ASSERTED)
1797          printk("%s: abort, mbox %d, interrupt pending.\n", BN(j), i);
1798
1799       if (SCarg->eh_state == SCSI_STATE_TIMEOUT) {
1800          unmap_dma(i, j);
1801          SCarg->host_scribble = NULL;
1802          HD(j)->cp_stat[i] = FREE;
1803          printk("%s, abort, mbox %d, eh_state timeout, pid %ld.\n",
1804                 BN(j), i, SCarg->pid);
1805          return SUCCESS;
1806          }
1807
1808       return FAILED;
1809       }
1810
1811    if (HD(j)->cp_stat[i] == IN_RESET) {
1812       printk("%s: abort, mbox %d is in reset.\n", BN(j), i);
1813       return FAILED;
1814       }
1815
1816    if (HD(j)->cp_stat[i] == LOCKED) {
1817       printk("%s: abort, mbox %d is locked.\n", BN(j), i);
1818       return SUCCESS;
1819       }
1820
1821    if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) {
1822       unmap_dma(i, j);
1823       SCarg->result = DID_ABORT << 16;
1824       SCarg->host_scribble = NULL;
1825       HD(j)->cp_stat[i] = FREE;
1826       printk("%s, abort, mbox %d ready, DID_ABORT, pid %ld done.\n",
1827              BN(j), i, SCarg->pid);
1828       SCarg->scsi_done(SCarg);
1829       return SUCCESS;
1830       }
1831
1832    panic("%s: abort, mbox %d, invalid cp_stat.\n", BN(j), i);
1833 }
1834
1835 static int eata2x_eh_host_reset(struct scsi_cmnd *SCarg) {
1836    unsigned int i, j, time, k, c, limit = 0;
1837    int arg_done = 0;
1838    struct scsi_cmnd *SCpnt;
1839
1840    j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number;
1841    printk("%s: reset, enter, target %d.%d:%d, pid %ld.\n",
1842           BN(j), SCarg->device->channel, SCarg->device->id, SCarg->device->lun, SCarg->pid);
1843
1844    if (SCarg->host_scribble == NULL)
1845       printk("%s: reset, pid %ld inactive.\n", BN(j), SCarg->pid);
1846
1847    if (HD(j)->in_reset) {
1848       printk("%s: reset, exit, already in reset.\n", BN(j));
1849       return FAILED;
1850       }
1851
1852    if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
1853       printk("%s: reset, exit, timeout error.\n", BN(j));
1854       return FAILED;
1855       }
1856
1857    HD(j)->retries = 0;
1858
1859    for (c = 0; c <= sh[j]->max_channel; c++)
1860       for (k = 0; k < sh[j]->max_id; k++) {
1861          HD(j)->target_redo[k][c] = 1;
1862          HD(j)->target_to[k][c] = 0;
1863          }
1864
1865    for (i = 0; i < sh[j]->can_queue; i++) {
1866
1867       if (HD(j)->cp_stat[i] == FREE) continue;
1868
1869       if (HD(j)->cp_stat[i] == LOCKED) {
1870          HD(j)->cp_stat[i] = FREE;
1871          printk("%s: reset, locked mbox %d forced free.\n", BN(j), i);
1872          continue;
1873          }
1874
1875       if (!(SCpnt = HD(j)->cp[i].SCpnt))
1876          panic("%s: reset, mbox %d, SCpnt == NULL.\n", BN(j), i);
1877
1878       if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) {
1879          HD(j)->cp_stat[i] = ABORTING;
1880          printk("%s: reset, mbox %d aborting, pid %ld.\n",
1881                 BN(j), i, SCpnt->pid);
1882          }
1883
1884       else {
1885          HD(j)->cp_stat[i] = IN_RESET;
1886          printk("%s: reset, mbox %d in reset, pid %ld.\n",
1887                 BN(j), i, SCpnt->pid);
1888          }
1889
1890       if (SCpnt->host_scribble == NULL)
1891          panic("%s: reset, mbox %d, garbled SCpnt.\n", BN(j), i);
1892
1893       if (*(unsigned int *)SCpnt->host_scribble != i)
1894          panic("%s: reset, mbox %d, index mismatch.\n", BN(j), i);
1895
1896       if (SCpnt->scsi_done == NULL)
1897          panic("%s: reset, mbox %d, SCpnt->scsi_done == NULL.\n", BN(j), i);
1898
1899       if (SCpnt == SCarg) arg_done = 1;
1900       }
1901
1902    if (do_dma(sh[j]->io_port, 0, RESET_PIO)) {
1903       printk("%s: reset, cannot reset, timeout error.\n", BN(j));
1904       return FAILED;
1905       }
1906
1907    printk("%s: reset, board reset done, enabling interrupts.\n", BN(j));
1908
1909 #if defined(DEBUG_RESET)
1910    do_trace = 1;
1911 #endif
1912
1913    HD(j)->in_reset = 1;
1914
1915    spin_unlock_irq(sh[j]->host_lock);
1916    time = jiffies;
1917    while ((jiffies - time) < (10 * HZ) && limit++ < 200000) udelay(100L);
1918    spin_lock_irq(sh[j]->host_lock);
1919
1920    printk("%s: reset, interrupts disabled, loops %d.\n", BN(j), limit);
1921
1922    for (i = 0; i < sh[j]->can_queue; i++) {
1923
1924       if (HD(j)->cp_stat[i] == IN_RESET) {
1925          SCpnt = HD(j)->cp[i].SCpnt;
1926          unmap_dma(i, j);
1927          SCpnt->result = DID_RESET << 16;
1928          SCpnt->host_scribble = NULL;
1929
1930          /* This mailbox is still waiting for its interrupt */
1931          HD(j)->cp_stat[i] = LOCKED;
1932
1933          printk("%s, reset, mbox %d locked, DID_RESET, pid %ld done.\n",
1934                 BN(j), i, SCpnt->pid);
1935          }
1936
1937       else if (HD(j)->cp_stat[i] == ABORTING) {
1938          SCpnt = HD(j)->cp[i].SCpnt;
1939          unmap_dma(i, j);
1940          SCpnt->result = DID_RESET << 16;
1941          SCpnt->host_scribble = NULL;
1942
1943          /* This mailbox was never queued to the adapter */
1944          HD(j)->cp_stat[i] = FREE;
1945
1946          printk("%s, reset, mbox %d aborting, DID_RESET, pid %ld done.\n",
1947                 BN(j), i, SCpnt->pid);
1948          }
1949
1950       else
1951
1952          /* Any other mailbox has already been set free by interrupt */
1953          continue;
1954
1955       SCpnt->scsi_done(SCpnt);
1956       }
1957
1958    HD(j)->in_reset = 0;
1959    do_trace = 0;
1960
1961    if (arg_done) printk("%s: reset, exit, pid %ld done.\n", BN(j), SCarg->pid);
1962    else          printk("%s: reset, exit.\n", BN(j));
1963
1964    return SUCCESS;
1965 }
1966
1967 int eata2x_bios_param(struct scsi_device *sdev, struct block_device *bdev,
1968                       sector_t capacity, int *dkinfo) {
1969    unsigned int size = capacity;
1970
1971    if (ext_tran || (scsicam_bios_param(bdev, capacity, dkinfo) < 0)) {
1972       dkinfo[0] = 255;
1973       dkinfo[1] = 63;
1974       dkinfo[2] = size / (dkinfo[0] * dkinfo[1]);
1975       }
1976
1977 #if defined (DEBUG_GEOMETRY)
1978    printk ("%s: bios_param, head=%d, sec=%d, cyl=%d.\n", driver_name,
1979            dkinfo[0], dkinfo[1], dkinfo[2]);
1980 #endif
1981
1982    return 0;
1983 }
1984
1985 static void sort(unsigned long sk[], unsigned int da[], unsigned int n,
1986                  unsigned int rev) {
1987    unsigned int i, j, k, y;
1988    unsigned long x;
1989
1990    for (i = 0; i < n - 1; i++) {
1991       k = i;
1992
1993       for (j = k + 1; j < n; j++)
1994          if (rev) {
1995             if (sk[j] > sk[k]) k = j;
1996             }
1997          else {
1998             if (sk[j] < sk[k]) k = j;
1999             }
2000
2001       if (k != i) {
2002          x = sk[k]; sk[k] = sk[i]; sk[i] = x;
2003          y = da[k]; da[k] = da[i]; da[i] = y;
2004          }
2005       }
2006
2007    return;
2008    }
2009
2010 static int reorder(unsigned int j, unsigned long cursec,
2011                  unsigned int ihdlr, unsigned int il[], unsigned int n_ready) {
2012    struct scsi_cmnd *SCpnt;
2013    struct mscp *cpp;
2014    unsigned int k, n;
2015    unsigned int rev = 0, s = 1, r = 1;
2016    unsigned int input_only = 1, overlap = 0;
2017    unsigned long sl[n_ready], pl[n_ready], ll[n_ready];
2018    unsigned long maxsec = 0, minsec = ULONG_MAX, seek = 0, iseek = 0;
2019    unsigned long ioseek = 0;
2020
2021    static unsigned int flushcount = 0, batchcount = 0, sortcount = 0;
2022    static unsigned int readycount = 0, ovlcount = 0, inputcount = 0;
2023    static unsigned int readysorted = 0, revcount = 0;
2024    static unsigned long seeksorted = 0, seeknosort = 0;
2025
2026    if (link_statistics && !(++flushcount % link_statistics))
2027       printk("fc %d bc %d ic %d oc %d rc %d rs %d sc %d re %d"\
2028              " av %ldK as %ldK.\n", flushcount, batchcount, inputcount,
2029              ovlcount, readycount, readysorted, sortcount, revcount,
2030              seeknosort / (readycount + 1),
2031              seeksorted / (readycount + 1));
2032
2033    if (n_ready <= 1) return 0;
2034
2035    for (n = 0; n < n_ready; n++) {
2036       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
2037
2038       if (!cpp->din) input_only = 0;
2039
2040       if (SCpnt->request->sector < minsec) minsec = SCpnt->request->sector;
2041       if (SCpnt->request->sector > maxsec) maxsec = SCpnt->request->sector;
2042
2043       sl[n] = SCpnt->request->sector;
2044       ioseek += SCpnt->request->nr_sectors;
2045
2046       if (!n) continue;
2047
2048       if (sl[n] < sl[n - 1]) s = 0;
2049       if (sl[n] > sl[n - 1]) r = 0;
2050
2051       if (link_statistics) {
2052          if (sl[n] > sl[n - 1])
2053             seek += sl[n] - sl[n - 1];
2054          else
2055             seek += sl[n - 1] - sl[n];
2056          }
2057
2058       }
2059
2060    if (link_statistics) {
2061       if (cursec > sl[0]) seek += cursec - sl[0]; else seek += sl[0] - cursec;
2062       }
2063
2064    if (cursec > ((maxsec + minsec) / 2)) rev = 1;
2065
2066    if (ioseek > ((maxsec - minsec) / 2)) rev = 0;
2067
2068    if (!((rev && r) || (!rev && s))) sort(sl, il, n_ready, rev);
2069
2070    if (!input_only) for (n = 0; n < n_ready; n++) {
2071       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
2072       ll[n] = SCpnt->request->nr_sectors; pl[n] = SCpnt->pid;
2073
2074       if (!n) continue;
2075
2076       if ((sl[n] == sl[n - 1]) || (!rev && ((sl[n - 1] + ll[n - 1]) > sl[n]))
2077           || (rev && ((sl[n] + ll[n]) > sl[n - 1]))) overlap = 1;
2078       }
2079
2080    if (overlap) sort(pl, il, n_ready, 0);
2081
2082    if (link_statistics) {
2083       if (cursec > sl[0]) iseek = cursec - sl[0]; else iseek = sl[0] - cursec;
2084       batchcount++; readycount += n_ready; seeknosort += seek / 1024;
2085       if (input_only) inputcount++;
2086       if (overlap) { ovlcount++; seeksorted += iseek / 1024; }
2087       else seeksorted += (iseek + maxsec - minsec) / 1024;
2088       if (rev && !r)     {  revcount++; readysorted += n_ready; }
2089       if (!rev && !s)    { sortcount++; readysorted += n_ready; }
2090       }
2091
2092 #if defined(DEBUG_LINKED_COMMANDS)
2093    if (link_statistics && (overlap || !(flushcount % link_statistics)))
2094       for (n = 0; n < n_ready; n++) {
2095          k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
2096          printk("%s %d.%d:%d pid %ld mb %d fc %d nr %d sec %ld ns %ld"\
2097                 " cur %ld s:%c r:%c rev:%c in:%c ov:%c xd %d.\n",
2098                 (ihdlr ? "ihdlr" : "qcomm"), SCpnt->device->channel, SCpnt->device->id,
2099                 SCpnt->device->lun, SCpnt->pid, k, flushcount, n_ready,
2100                 SCpnt->request->sector, SCpnt->request->nr_sectors, cursec,
2101                 YESNO(s), YESNO(r), YESNO(rev), YESNO(input_only),
2102                 YESNO(overlap), cpp->din);
2103          }
2104 #endif
2105    return overlap;
2106 }
2107
2108 static void flush_dev(struct scsi_device *dev, unsigned long cursec, unsigned int j,
2109                       unsigned int ihdlr) {
2110    struct scsi_cmnd *SCpnt;
2111    struct mscp *cpp;
2112    unsigned int k, n, n_ready = 0, il[MAX_MAILBOXES];
2113
2114    for (k = 0; k < sh[j]->can_queue; k++) {
2115
2116       if (HD(j)->cp_stat[k] != READY && HD(j)->cp_stat[k] != IN_USE) continue;
2117
2118       cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
2119
2120       if (SCpnt->device != dev) continue;
2121
2122       if (HD(j)->cp_stat[k] == IN_USE) return;
2123
2124       il[n_ready++] = k;
2125       }
2126
2127    if (reorder(j, cursec, ihdlr, il, n_ready)) n_ready = 1;
2128
2129    for (n = 0; n < n_ready; n++) {
2130       k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
2131
2132       if (do_dma(sh[j]->io_port, cpp->cp_dma_addr, SEND_CP_DMA)) {
2133          printk("%s: %s, target %d.%d:%d, pid %ld, mbox %d, adapter"\
2134                 " busy, will abort.\n", BN(j), (ihdlr ? "ihdlr" : "qcomm"),
2135                 SCpnt->device->channel, SCpnt->device->id, SCpnt->device->lun, SCpnt->pid, k);
2136          HD(j)->cp_stat[k] = ABORTING;
2137          continue;
2138          }
2139
2140       HD(j)->cp_stat[k] = IN_USE;
2141       }
2142
2143 }
2144
2145 static irqreturn_t ihdlr(int irq, unsigned int j) {
2146    struct scsi_cmnd *SCpnt;
2147    unsigned int i, k, c, status, tstatus, reg;
2148    struct mssp *spp;
2149    struct mscp *cpp;
2150
2151    if (sh[j]->irq != irq)
2152        panic("%s: ihdlr, irq %d, sh[j]->irq %d.\n", BN(j), irq, sh[j]->irq);
2153
2154    /* Check if this board need to be serviced */
2155    if (!(inb(sh[j]->io_port + REG_AUX_STATUS) & IRQ_ASSERTED)) goto none;
2156
2157    HD(j)->iocount++;
2158
2159    if (do_trace) printk("%s: ihdlr, enter, irq %d, count %d.\n", BN(j), irq,
2160                         HD(j)->iocount);
2161
2162    /* Check if this board is still busy */
2163    if (wait_on_busy(sh[j]->io_port, 20 * MAXLOOP)) {
2164       reg = inb(sh[j]->io_port + REG_STATUS);
2165       printk("%s: ihdlr, busy timeout error,  irq %d, reg 0x%x, count %d.\n",
2166              BN(j), irq, reg, HD(j)->iocount);
2167       goto none;
2168       }
2169
2170    spp  = &HD(j)->sp;
2171
2172    /* Make a local copy just before clearing the interrupt indication */
2173    memcpy(spp, HD(j)->sp_cpu_addr, sizeof(struct mssp));
2174
2175    /* Clear the completion flag and cp pointer on the dynamic copy of sp */
2176    memset(HD(j)->sp_cpu_addr, 0, sizeof(struct mssp));
2177
2178    /* Read the status register to clear the interrupt indication */
2179    reg = inb(sh[j]->io_port + REG_STATUS);
2180
2181 #if defined (DEBUG_INTERRUPT)
2182    {
2183    unsigned char *bytesp;
2184    int cnt;
2185    bytesp= (unsigned char *) spp;
2186    if (HD(j)->iocount < 200) {
2187       printk("sp[] =");
2188       for (cnt=0; cnt < 15; cnt++) printk(" 0x%x", bytesp[cnt]);
2189       printk("\n");
2190       }
2191    }
2192 #endif
2193
2194    /* Reject any sp with supspect data */
2195    if (spp->eoc == 0 && HD(j)->iocount > 1)
2196       printk("%s: ihdlr, spp->eoc == 0, irq %d, reg 0x%x, count %d.\n",
2197              BN(j), irq, reg, HD(j)->iocount);
2198    if (spp->cpp_index < 0 || spp->cpp_index >= sh[j]->can_queue)
2199       printk("%s: ihdlr, bad spp->cpp_index %d, irq %d, reg 0x%x, count %d.\n",
2200              BN(j), spp->cpp_index, irq, reg, HD(j)->iocount);
2201    if (spp->eoc == 0 || spp->cpp_index < 0
2202                          || spp->cpp_index >= sh[j]->can_queue) goto handled;
2203
2204    /* Find the mailbox to be serviced on this board */
2205    i = spp->cpp_index;
2206
2207    cpp = &(HD(j)->cp[i]);
2208
2209 #if defined(DEBUG_GENERATE_ABORTS)
2210    if ((HD(j)->iocount > 500) && ((HD(j)->iocount % 500) < 3)) goto handled;
2211 #endif
2212
2213    if (HD(j)->cp_stat[i] == IGNORE) {
2214       HD(j)->cp_stat[i] = FREE;
2215       goto handled;
2216       }
2217    else if (HD(j)->cp_stat[i] == LOCKED) {
2218       HD(j)->cp_stat[i] = FREE;
2219       printk("%s: ihdlr, mbox %d unlocked, count %d.\n", BN(j), i,
2220              HD(j)->iocount);
2221       goto handled;
2222       }
2223    else if (HD(j)->cp_stat[i] == FREE) {
2224       printk("%s: ihdlr, mbox %d is free, count %d.\n", BN(j), i,
2225              HD(j)->iocount);
2226       goto handled;
2227       }
2228    else if (HD(j)->cp_stat[i] == IN_RESET)
2229       printk("%s: ihdlr, mbox %d is in reset.\n", BN(j), i);
2230    else if (HD(j)->cp_stat[i] != IN_USE)
2231       panic("%s: ihdlr, mbox %d, invalid cp_stat: %d.\n",
2232             BN(j), i, HD(j)->cp_stat[i]);
2233
2234    HD(j)->cp_stat[i] = FREE;
2235    SCpnt = cpp->SCpnt;
2236
2237    if (SCpnt == NULL) panic("%s: ihdlr, mbox %d, SCpnt == NULL.\n", BN(j), i);
2238
2239    if (SCpnt->host_scribble == NULL)
2240       panic("%s: ihdlr, mbox %d, pid %ld, SCpnt %p garbled.\n", BN(j), i,
2241             SCpnt->pid, SCpnt);
2242
2243    if (*(unsigned int *)SCpnt->host_scribble != i)
2244       panic("%s: ihdlr, mbox %d, pid %ld, index mismatch %d.\n",
2245             BN(j), i, SCpnt->pid, *(unsigned int *)SCpnt->host_scribble);
2246
2247    sync_dma(i, j);
2248
2249    if (linked_comm && SCpnt->device->queue_depth > 2
2250                                      && TLDEV(SCpnt->device->type))
2251       flush_dev(SCpnt->device, SCpnt->request->sector, j, 1);
2252
2253    tstatus = status_byte(spp->target_status);
2254
2255 #if defined(DEBUG_GENERATE_ERRORS)
2256    if ((HD(j)->iocount > 500) && ((HD(j)->iocount % 200) < 2))
2257                                            spp->adapter_status = 0x01;
2258 #endif
2259
2260    switch (spp->adapter_status) {
2261       case ASOK:     /* status OK */
2262
2263          /* Forces a reset if a disk drive keeps returning BUSY */
2264          if (tstatus == BUSY && SCpnt->device->type != TYPE_TAPE)
2265             status = DID_ERROR << 16;
2266
2267          /* If there was a bus reset, redo operation on each target */
2268          else if (tstatus != GOOD && SCpnt->device->type == TYPE_DISK
2269                   && HD(j)->target_redo[SCpnt->device->id][SCpnt->device->channel])
2270             status = DID_BUS_BUSY << 16;
2271
2272          /* Works around a flaw in scsi.c */
2273          else if (tstatus == CHECK_CONDITION
2274                   && SCpnt->device->type == TYPE_DISK
2275                   && (SCpnt->sense_buffer[2] & 0xf) == RECOVERED_ERROR)
2276             status = DID_BUS_BUSY << 16;
2277
2278          else
2279             status = DID_OK << 16;
2280
2281          if (tstatus == GOOD)
2282             HD(j)->target_redo[SCpnt->device->id][SCpnt->device->channel] = 0;
2283
2284          if (spp->target_status && SCpnt->device->type == TYPE_DISK &&
2285              (!(tstatus == CHECK_CONDITION && HD(j)->iocount <= 1000 &&
2286                (SCpnt->sense_buffer[2] & 0xf) == NOT_READY)))
2287             printk("%s: ihdlr, target %d.%d:%d, pid %ld, "\
2288                    "target_status 0x%x, sense key 0x%x.\n", BN(j),
2289                    SCpnt->device->channel, SCpnt->device->id, SCpnt->device->lun,
2290                    SCpnt->pid, spp->target_status,
2291                    SCpnt->sense_buffer[2]);
2292
2293          HD(j)->target_to[SCpnt->device->id][SCpnt->device->channel] = 0;
2294
2295          if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0;
2296
2297          break;
2298       case ASST:     /* Selection Time Out */
2299       case 0x02:     /* Command Time Out   */
2300
2301          if (HD(j)->target_to[SCpnt->device->id][SCpnt->device->channel] > 1)
2302             status = DID_ERROR << 16;
2303          else {
2304             status = DID_TIME_OUT << 16;
2305             HD(j)->target_to[SCpnt->device->id][SCpnt->device->channel]++;
2306             }
2307
2308          break;
2309
2310       /* Perform a limited number of internal retries */
2311       case 0x03:     /* SCSI Bus Reset Received */
2312       case 0x04:     /* Initial Controller Power-up */
2313
2314          for (c = 0; c <= sh[j]->max_channel; c++)
2315             for (k = 0; k < sh[j]->max_id; k++)
2316                HD(j)->target_redo[k][c] = 1;
2317
2318          if (SCpnt->device->type != TYPE_TAPE
2319              && HD(j)->retries < MAX_INTERNAL_RETRIES) {
2320
2321 #if defined(DID_SOFT_ERROR)
2322             status = DID_SOFT_ERROR << 16;
2323 #else
2324             status = DID_BUS_BUSY << 16;
2325 #endif
2326
2327             HD(j)->retries++;
2328             HD(j)->last_retried_pid = SCpnt->pid;
2329             }
2330          else
2331             status = DID_ERROR << 16;
2332
2333          break;
2334       case 0x05:     /* Unexpected Bus Phase */
2335       case 0x06:     /* Unexpected Bus Free */
2336       case 0x07:     /* Bus Parity Error */
2337       case 0x08:     /* SCSI Hung */
2338       case 0x09:     /* Unexpected Message Reject */
2339       case 0x0a:     /* SCSI Bus Reset Stuck */
2340       case 0x0b:     /* Auto Request-Sense Failed */
2341       case 0x0c:     /* Controller Ram Parity Error */
2342       default:
2343          status = DID_ERROR << 16;
2344          break;
2345       }
2346
2347    SCpnt->result = status | spp->target_status;
2348
2349 #if defined(DEBUG_INTERRUPT)
2350    if (SCpnt->result || do_trace)
2351 #else
2352    if ((spp->adapter_status != ASOK && HD(j)->iocount >  1000) ||
2353        (spp->adapter_status != ASOK &&
2354         spp->adapter_status != ASST && HD(j)->iocount <= 1000) ||
2355         do_trace || msg_byte(spp->target_status))
2356 #endif
2357       printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"\
2358              " target %d.%d:%d, pid %ld, reg 0x%x, count %d.\n",
2359              BN(j), i, spp->adapter_status, spp->target_status,
2360              SCpnt->device->channel, SCpnt->device->id, SCpnt->device->lun, SCpnt->pid,
2361              reg, HD(j)->iocount);
2362
2363    unmap_dma(i, j);
2364
2365    /* Set the command state to inactive */
2366    SCpnt->host_scribble = NULL;
2367
2368    SCpnt->scsi_done(SCpnt);
2369
2370    if (do_trace) printk("%s: ihdlr, exit, irq %d, count %d.\n", BN(j), irq,
2371                         HD(j)->iocount);
2372
2373 handled:
2374    return IRQ_HANDLED;
2375 none:
2376    return IRQ_NONE;
2377 }
2378
2379 static irqreturn_t do_interrupt_handler(int irq, void *shap,
2380                                         struct pt_regs *regs) {
2381    unsigned int j;
2382    unsigned long spin_flags;
2383    irqreturn_t ret;
2384
2385    /* Check if the interrupt must be processed by this handler */
2386    if ((j = (unsigned int)((char *)shap - sha)) >= num_boards) return IRQ_NONE;
2387
2388    spin_lock_irqsave(sh[j]->host_lock, spin_flags);
2389    ret = ihdlr(irq, j);
2390    spin_unlock_irqrestore(sh[j]->host_lock, spin_flags);
2391    return ret;
2392 }
2393
2394 static int eata2x_release(struct Scsi_Host *shpnt) {
2395    unsigned int i, j;
2396
2397    for (j = 0; sh[j] != NULL && sh[j] != shpnt; j++);
2398
2399    if (sh[j] == NULL) panic("%s: release, invalid Scsi_Host pointer.\n",
2400                             driver_name);
2401
2402    for (i = 0; i < sh[j]->can_queue; i++)
2403       if ((&HD(j)->cp[i])->sglist) kfree((&HD(j)->cp[i])->sglist);
2404
2405    for (i = 0; i < sh[j]->can_queue; i++)
2406       pci_unmap_single(HD(j)->pdev, HD(j)->cp[i].cp_dma_addr,
2407                      sizeof(struct mscp), PCI_DMA_BIDIRECTIONAL);
2408
2409    if (HD(j)->sp_cpu_addr)
2410       pci_free_consistent(HD(j)->pdev, sizeof(struct mssp),
2411                           HD(j)->sp_cpu_addr, HD(j)->sp_dma_addr);
2412
2413    free_irq(sh[j]->irq, &sha[j]);
2414
2415    if (sh[j]->dma_channel != NO_DMA) free_dma(sh[j]->dma_channel);
2416
2417    release_region(sh[j]->io_port, sh[j]->n_io_port);
2418    scsi_unregister(sh[j]);
2419    return 0;
2420 }
2421
2422 #include "scsi_module.c"
2423
2424 #ifndef MODULE
2425 __setup("eata=", option_setup);
2426 #endif /* end MODULE */