aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-22 20:32:26 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-22 20:32:26 -0500
commit194e57fd1835564735fd0ba5e3870230861cacd2 (patch)
tree9f2fd1463109ec6b151088417e0c1e14204d0924 /Documentation
parente1ba84597c9012b9f9075aac283ac7537d7561ba (diff)
parent4b1a9a5e40210cb4a0687806d3b631f7db4b9b0e (diff)
Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This patch set is a lot of driver updates for qla4xxx, bfa, hpsa, qla2xxx. It also removes the aic7xxx_old driver (which has been deprecated for nearly a decade) and adds support for deadlines in error handling" * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (75 commits) [SCSI] hpsa: allow SCSI mid layer to handle unit attention [SCSI] hpsa: do not require board "not ready" status after hard reset [SCSI] hpsa: enable unit attention reporting [SCSI] hpsa: rename scsi prefetch field [SCSI] hpsa: use workqueue instead of kernel thread for lockup detection [SCSI] ipr: increase dump size in ipr driver [SCSI] mac_scsi: Fix crash on out of memory [SCSI] st: fix enlarge_buffer [SCSI] qla1280: Annotate timer on stack so object debug does not complain [SCSI] qla4xxx: Update driver version to 5.04.00-k3 [SCSI] qla4xxx: Recreate chap data list during get chap operation [SCSI] qla4xxx: Add support for ISCSI_PARAM_LOCAL_IPADDR sysfs attr [SCSI] libiscsi: Add local_ipaddr parameter in iscsi_conn struct [SCSI] scsi_transport_iscsi: Export ISCSI_PARAM_LOCAL_IPADDR attr for iscsi_connection [SCSI] qla4xxx: Add host statistics support [SCSI] scsi_transport_iscsi: Add host statistics support [SCSI] qla4xxx: Added support for Diagnostics MBOX command [SCSI] bfa: Driver version upgrade to 3.2.23.0 [SCSI] bfa: change FC_ELS_TOV to 20sec [SCSI] bfa: Observed auto D-port mode instead of manual ...
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/scsi/00-INDEX2
-rw-r--r--Documentation/scsi/aic7xxx_old.txt511
-rw-r--r--Documentation/scsi/scsi_eh.txt69
-rw-r--r--Documentation/scsi/scsi_mid_low_api.txt9
4 files changed, 46 insertions, 545 deletions
diff --git a/Documentation/scsi/00-INDEX b/Documentation/scsi/00-INDEX
index 9b0787f965e9..2044be565d93 100644
--- a/Documentation/scsi/00-INDEX
+++ b/Documentation/scsi/00-INDEX
@@ -42,8 +42,6 @@ aic79xx.txt
42 - Adaptec Ultra320 SCSI host adapters 42 - Adaptec Ultra320 SCSI host adapters
43aic7xxx.txt 43aic7xxx.txt
44 - info on driver for Adaptec controllers 44 - info on driver for Adaptec controllers
45aic7xxx_old.txt
46 - info on driver for Adaptec controllers, old generation
47arcmsr_spec.txt 45arcmsr_spec.txt
48 - ARECA FIRMWARE SPEC (for IOP331 adapter) 46 - ARECA FIRMWARE SPEC (for IOP331 adapter)
49dc395x.txt 47dc395x.txt
diff --git a/Documentation/scsi/aic7xxx_old.txt b/Documentation/scsi/aic7xxx_old.txt
deleted file mode 100644
index ecfc474f36a8..000000000000
--- a/Documentation/scsi/aic7xxx_old.txt
+++ /dev/null
@@ -1,511 +0,0 @@
1 AIC7xxx Driver for Linux
2
3Introduction
4----------------------------
5The AIC7xxx SCSI driver adds support for Adaptec (http://www.adaptec.com)
6SCSI controllers and chipsets. Major portions of the driver and driver
7development are shared between both Linux and FreeBSD. Support for the
8AIC-7xxx chipsets have been in the default Linux kernel since approximately
9linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
102.1.0 or later.
11
12 Supported cards/chipsets
13 ----------------------------
14 Adaptec Cards
15 ----------------------------
16 AHA-274x
17 AHA-274xT
18 AHA-2842
19 AHA-2910B
20 AHA-2920C
21 AHA-2930
22 AHA-2930U
23 AHA-2930CU
24 AHA-2930U2
25 AHA-2940
26 AHA-2940W
27 AHA-2940U
28 AHA-2940UW
29 AHA-2940UW-PRO
30 AHA-2940AU
31 AHA-2940U2W
32 AHA-2940U2
33 AHA-2940U2B
34 AHA-2940U2BOEM
35 AHA-2944D
36 AHA-2944WD
37 AHA-2944UD
38 AHA-2944UWD
39 AHA-2950U2
40 AHA-2950U2W
41 AHA-2950U2B
42 AHA-29160M
43 AHA-3940
44 AHA-3940U
45 AHA-3940W
46 AHA-3940UW
47 AHA-3940AUW
48 AHA-3940U2W
49 AHA-3950U2B
50 AHA-3950U2D
51 AHA-3960D
52 AHA-39160M
53 AHA-3985
54 AHA-3985U
55 AHA-3985W
56 AHA-3985UW
57
58 Motherboard Chipsets
59 ----------------------------
60 AIC-777x
61 AIC-785x
62 AIC-786x
63 AIC-787x
64 AIC-788x
65 AIC-789x
66 AIC-3860
67
68 Bus Types
69 ----------------------------
70 W - Wide SCSI, SCSI-3, 16bit bus, 68pin connector, will also support
71 SCSI-1/SCSI-2 50pin devices, transfer rates up to 20MB/s.
72 U - Ultra SCSI, transfer rates up to 40MB/s.
73 U2- Ultra 2 SCSI, transfer rates up to 80MB/s.
74 D - Differential SCSI.
75 T - Twin Channel SCSI. Up to 14 SCSI devices.
76
77 AHA-274x - EISA SCSI controller
78 AHA-284x - VLB SCSI controller
79 AHA-29xx - PCI SCSI controller
80 AHA-394x - PCI controllers with two separate SCSI controllers on-board.
81 AHA-398x - PCI RAID controllers with three separate SCSI controllers
82 on-board.
83
84 Not Supported Devices
85 ------------------------------
86 Adaptec Cards
87 ----------------------------
88 AHA-2920 (Only the cards that use the Future Domain chipset are not
89 supported, any 2920 cards based on Adaptec AIC chipsets,
90 such as the 2920C, are supported)
91 AAA-13x Raid Adapters
92 AAA-113x Raid Port Card
93
94 Motherboard Chipsets
95 ----------------------------
96 AIC-7810
97
98 Bus Types
99 ----------------------------
100 R - Raid Port busses are not supported.
101
102 The hardware RAID devices sold by Adaptec are *NOT* supported by this
103 driver (and will people please stop emailing me about them, they are
104 a totally separate beast from the bare SCSI controllers and this driver
105 cannot be retrofitted in any sane manner to support the hardware RAID
106 features on those cards - Doug Ledford).
107
108
109 People
110 ------------------------------
111 Justin T Gibbs gibbs@plutotech.com
112 (BSD Driver Author)
113 Dan Eischen deischen@iworks.InterWorks.org
114 (Original Linux Driver Co-maintainer)
115 Dean Gehnert deang@teleport.com
116 (Original Linux FTP/patch maintainer)
117 Jess Johnson jester@frenzy.com
118 (AIC7xxx FAQ author)
119 Doug Ledford dledford@redhat.com
120 (Current Linux aic7xxx-5.x.x Driver/Patch/FTP maintainer)
121
122 Special thanks go to John Aycock (aycock@cpsc.ucalgary.ca), the original
123 author of the driver. John has since retired from the project. Thanks
124 again for all his work!
125
126 Mailing list
127 ------------------------------
128 There is a mailing list available for users who want to track development
129 and converse with other users and developers. This list is for both
130 FreeBSD and Linux support of the AIC7xxx chipsets.
131
132 To subscribe to the AIC7xxx mailing list send mail to the list server,
133 with "subscribe AIC7xxx" in the body (no Subject: required):
134 To: majordomo@FreeBSD.ORG
135 ---
136 subscribe AIC7xxx
137
138 To unsubscribe from the list, send mail to the list server with:
139 To: majordomo@FreeBSD.ORG
140 ---
141 unsubscribe AIC7xxx
142
143 Send regular messages and replies to: AIC7xxx@FreeBSD.ORG
144
145 Boot Command line options
146 ------------------------------
147 "aic7xxx=no_reset" - Eliminate the SCSI bus reset during startup.
148 Some SCSI devices need the initial reset that this option disables
149 in order to work. If you have problems at bootup, please make sure
150 you aren't using this option.
151
152 "aic7xxx=reverse_scan" - Certain PCI motherboards scan for devices at
153 bootup by scanning from the highest numbered PCI device to the
154 lowest numbered PCI device, others do just the opposite and scan
155 from lowest to highest numbered PCI device. There is no reliable
156 way to autodetect this ordering. So, we default to the most common
157 order, which is lowest to highest. Then, in case your motherboard
158 scans from highest to lowest, we have this option. If your BIOS
159 finds the drives on controller A before controller B but the linux
160 kernel finds your drives on controller B before A, then you should
161 use this option.
162
163 "aic7xxx=extended" - Force the driver to detect extended drive translation
164 on your controller. This helps those people who have cards without
165 a SEEPROM make sure that linux and all other operating systems think
166 the same way about your hard drives.
167
168 "aic7xxx=scbram" - Some cards have external SCB RAM that can be used to
169 give the card more hardware SCB slots. This allows the driver to use
170 that SCB RAM. Without this option, the driver won't touch the SCB
171 RAM because it is known to cause problems on a few cards out there
172 (such as 3985 class cards).
173
174 "aic7xxx=irq_trigger:x" - Replace x with either 0 or 1 to force the kernel
175 to use the correct IRQ type for your card. This only applies to EISA
176 based controllers. On these controllers, 0 is for Edge triggered
177 interrupts, and 1 is for Level triggered interrupts. If you aren't
178 sure or don't know which IRQ trigger type your EISA card uses, then
179 let the kernel autodetect the trigger type.
180
181 "aic7xxx=verbose" - This option can be used in one of two ways. If you
182 simply specify aic7xxx=verbose, then the kernel will automatically
183 pick the default set of verbose messages for you to see.
184 Alternatively, you can specify the command as
185 "aic7xxx=verbose:0xXXXX" where the X entries are replaced with
186 hexadecimal digits. This option is a bit field type option. For
187 a full listing of the available options, search for the
188 #define VERBOSE_xxxxxx lines in the aic7xxx.c file. If you want
189 verbose messages, then it is recommended that you simply use the
190 aic7xxx=verbose variant of this command.
191
192 "aic7xxx=pci_parity:x" - This option controls whether or not the driver
193 enables PCI parity error checking on the PCI bus. By default, this
194 checking is disabled. To enable the checks, simply specify pci_parity
195 with no value afterwords. To reverse the parity from even to odd,
196 supply any number other than 0 or 255. In short:
197 pci_parity - Even parity checking (even is the normal PCI parity)
198 pci_parity:x - Where x > 0, Odd parity checking
199 pci_parity:0 - No check (default)
200 NOTE: In order to get Even PCI parity checking, you must use the
201 version of the option that does not include the : and a number at
202 the end (unless you want to enter exactly 2^32 - 1 as the number).
203
204 "aic7xxx=no_probe" - This option will disable the probing for any VLB
205 based 2842 controllers and any EISA based controllers. This is
206 needed on certain newer motherboards where the normal EISA I/O ranges
207 have been claimed by other PCI devices. Probing on those machines
208 will often result in the machine crashing or spontaneously rebooting
209 during startup. Examples of machines that need this are the
210 Dell PowerEdge 6300 machines.
211
212 "aic7xxx=seltime:2" - This option controls how long the card waits
213 during a device selection sequence for the device to respond.
214 The original SCSI spec says that this "should be" 256ms. This
215 is generally not required with modern devices. However, some
216 very old SCSI I devices need the full 256ms. Most modern devices
217 can run fine with only 64ms. The default for this option is
218 64ms. If you need to change this option, then use the following
219 table to set the proper value in the example above:
220 0 - 256ms
221 1 - 128ms
222 2 - 64ms
223 3 - 32ms
224
225 "aic7xxx=panic_on_abort" - This option is for debugging and will cause
226 the driver to panic the linux kernel and freeze the system the first
227 time the drivers abort or reset routines are called. This is most
228 helpful when some problem causes infinite reset loops that scroll too
229 fast to see. By using this option, you can write down what the errors
230 actually are and send that information to me so it can be fixed.
231
232 "aic7xxx=dump_card" - This option will print out the *entire* set of
233 configuration registers on the card during the init sequence. This
234 is a debugging aid used to see exactly what state the card is in
235 when we finally finish our initialization routines. If you don't
236 have documentation on the chipsets, this will do you absolutely
237 no good unless you are simply trying to write all the information
238 down in order to send it to me.
239
240 "aic7xxx=dump_sequencer" - This is the same as the above options except
241 that instead of dumping the register contents on the card, this
242 option dumps the contents of the sequencer program RAM. This gives
243 the ability to verify that the instructions downloaded to the
244 card's sequencer are indeed what they are supposed to be. Again,
245 unless you have documentation to tell you how to interpret these
246 numbers, then it is totally useless.
247
248 "aic7xxx=override_term:0xffffffff" - This option is used to force the
249 termination on your SCSI controllers to a particular setting. This
250 is a bit mask variable that applies for up to 8 aic7xxx SCSI channels.
251 Each channel gets 4 bits, divided as follows:
252 bit 3 2 1 0
253 | | | Enable/Disable Single Ended Low Byte Termination
254 | | En/Disable Single Ended High Byte Termination
255 | En/Disable Low Byte LVD Termination
256 En/Disable High Byte LVD Termination
257
258 The upper 2 bits that deal with LVD termination only apply to Ultra2
259 controllers. Furthermore, due to the current Ultra2 controller
260 designs, these bits are tied together such that setting either bit
261 enables both low and high byte LVD termination. It is not possible
262 to only set high or low byte LVD termination in this manner. This is
263 an artifact of the BIOS definition on Ultra2 controllers. For other
264 controllers, the only important bits are the two lowest bits. Setting
265 the higher bits on non-Ultra2 controllers has no effect. A few
266 examples of how to use this option:
267
268 Enable low and high byte termination on a non-ultra2 controller that
269 is the first aic7xxx controller (the correct bits are 0011),
270 aic7xxx=override_term:0x3
271
272 Enable all termination on the third aic7xxx controller, high byte
273 termination on the second aic7xxx controller, and low and high byte
274 SE termination on the first aic7xxx controller
275 (bits are 1111 0010 0011),
276 aic7xxx=override_term:0xf23
277
278 No attempt has been made to make this option non-cryptic. It really
279 shouldn't be used except in dire circumstances, and if that happens,
280 I'm probably going to be telling you what to set this to anyway :)
281
282 "aic7xxx=stpwlev:0xffffffff" - This option is used to control the STPWLEV
283 bit in the DEVCONFIG PCI register. Currently, this is one of the
284 very few registers that we have absolutely *no* way of detecting
285 what the variable should be. It depends entirely on how the chipset
286 and external terminators were coupled by the card/motherboard maker.
287 Further, a chip reset (at power up) always sets this bit to 0. If
288 there is no BIOS to run on the chipset/card (such as with a 2910C
289 or a motherboard controller with the BIOS totally disabled) then
290 the variable may not get set properly. Of course, if the proper
291 setting was 0, then that's what it would be after the reset, but if
292 the proper setting is actually 1.....you get the picture. Now, since
293 we can't detect this at all, I've added this option to force the
294 setting. If you have a BIOS on your controller then you should never
295 need to use this option. However, if you are having lots of SCSI
296 reset problems and can't seem to get them knocked out, this may help.
297
298 Here's a test to know for certain if you need this option. Make
299 a boot floppy that you can use to boot your computer up and that
300 will detect the aic7xxx controller. Next, power down your computer.
301 While it's down, unplug all SCSI cables from your Adaptec SCSI
302 controller. Boot the system back up to the Adaptec EZ-SCSI BIOS
303 and then make sure that termination is enabled on your adapter (if
304 you have an Adaptec BIOS of course). Next, boot up the floppy you
305 made and wait for it to detect the aic7xxx controller. If the kernel
306 finds the controller fine, says scsi : x hosts and then tries to
307 detect your devices like normal, up to the point where it fails to
308 mount your root file system and panics, then you're fine. If, on
309 the other hand, the system goes into an infinite reset loop, then
310 you need to use this option and/or the previous option to force the
311 proper termination settings on your controller. If this happens,
312 then you next need to figure out what your settings should be.
313
314 To find the correct settings, power your machine back down, connect
315 back up the SCSI cables, and boot back into your machine like normal.
316 However, boot with the aic7xxx=verbose:0x39 option. Record the
317 initial DEVCONFIG values for each of your aic7xxx controllers as
318 they are listed, and also record what the machine is detecting as
319 the proper termination on your controllers. NOTE: the order in
320 which the initial DEVCONFIG values are printed out is not guaranteed
321 to be the same order as the SCSI controllers are registered. The
322 above option and this option both work on the order of the SCSI
323 controllers as they are registered, so make sure you match the right
324 DEVCONFIG values with the right controllers if you have more than
325 one aic7xxx controller.
326
327 Once you have the detected termination settings and the initial
328 DEVCONFIG values for each controller, then figure out what the
329 termination on each of the controllers *should* be. Hopefully, that
330 part is correct, but it could possibly be wrong if there is
331 bogus cable detection logic on your controller or something similar.
332 If all the controllers have the correct termination settings, then
333 don't set the aic7xxx=override_term variable at all, leave it alone.
334 Next, on any controllers that go into an infinite reset loop when
335 you unplug all the SCSI cables, get the starting DEVCONFIG value.
336 If the initial DEVCONFIG value is divisible by 2, then the correct
337 setting for that controller is 0. If it's an odd number, then
338 the correct setting for that controller is 1. For any other
339 controllers that didn't have an infinite reset problem, then reverse
340 the above options. If DEVCONFIG was even, then the correct setting
341 is 1, if not then the correct setting is 0.
342
343 Now that you know what the correct setting was for each controller,
344 we need to encode that into the aic7xxx=stpwlev:0x... variable.
345 This variable is a bit field encoded variable. Bit 0 is for the first
346 aic7xxx controller, bit 1 for the next, etc. Put all these bits
347 together and you get a number. For example, if the third aic7xxx
348 needed a 1, but the second and first both needed a 0, then the bits
349 would be 100 in binary. This then translates to 0x04. You would
350 therefore set aic7xxx=stpwlev:0x04. This is fairly standard binary
351 to hexadecimal conversions here. If you aren't up to speed on the
352 binary->hex conversion then send an email to the aic7xxx mailing
353 list and someone can help you out.
354
355 "aic7xxx=tag_info:{{8,8..},{8,8..},..}" - This option is used to disable
356 or enable Tagged Command Queueing (TCQ) on specific devices. As of
357 driver version 5.1.11, TCQ is now either on or off by default
358 according to the setting you choose during the make config process.
359 In order to en/disable TCQ for certain devices at boot time, a user
360 may use this boot param. The driver will then parse this message out
361 and en/disable the specific device entries that are present based upon
362 the value given. The param line is parsed in the following manner:
363
364 { - first instance indicates the start of this parameter values
365 second instance is the start of entries for a particular
366 device entry
367 } - end the entries for a particular host adapter, or end the entire
368 set of parameter entries
369 , - move to next entry. Inside of a set of device entries, this
370 moves us to the next device on the list. Outside of device
371 entries, this moves us to the next host adapter
372 . - Same effect as , but is safe to use with insmod.
373 x - the number to enter into the array at this position.
374 0 = Enable tagged queueing on this device and use the default
375 queue depth
376 1-254 = Enable tagged queueing on this device and use this
377 number as the queue depth
378 255 = Disable tagged queueing on this device.
379 Note: anything above 32 for an actual queue depth is wasteful
380 and not recommended.
381
382 A few examples of how this can be used:
383
384 tag_info:{{8,12,,0,,255,4}}
385 This line will only effect the first aic7xxx card registered. It
386 will set scsi id 0 to a queue depth of 8, id 1 to 12, leave id 2
387 at the default, set id 3 to tagged queueing enabled and use the
388 default queue depth, id 4 default, id 5 disabled, and id 6 to 4.
389 Any not specified entries stay at the default value, repeated
390 commas with no value specified will simply increment to the next id
391 without changing anything for the missing values.
392
393 tag_info:{,,,{,,,255}}
394 First, second, and third adapters at default values. Fourth
395 adapter, id 3 is disabled. Notice that leading commas simply
396 increment what the first number effects, and there are no need
397 for trailing commas. When you close out an adapter, or the
398 entire entry, anything not explicitly set stays at the default
399 value.
400
401 A final note on this option. The scanner I used for this isn't
402 perfect or highly robust. If you mess the line up, the worst that
403 should happen is that the line will get ignored. If you don't
404 close out the entire entry with the final bracket, then any other
405 aic7xxx options after this will get ignored. So, in general, be
406 sure of what you are entering, and after you have it right, just
407 add it to the lilo.conf file so there won't be any mistakes. As
408 a means of checking this parser, the entire tag_info array for
409 each card is now printed out in the /proc/scsi/aic7xxx/x file. You
410 can use that to verify that your options were parsed correctly.
411
412 Boot command line options may be combined to form the proper set of options
413 a user might need. For example, the following is valid:
414
415 aic7xxx=verbose,extended,irq_trigger:1
416
417 The only requirement is that individual options be separated by a comma or
418 a period on the command line.
419
420 Module Loading command options
421 ------------------------------
422 When loading the aic7xxx driver as a module, the exact same options are
423 available to the user. However, the syntax to specify the options changes
424 slightly. For insmod, you need to wrap the aic7xxx= argument in quotes
425 and replace all ',' with '.'. So, for example, a valid insmod line
426 would be:
427
428 insmod aic7xxx aic7xxx='verbose.irq_trigger:1.extended'
429
430 This line should result in the *exact* same behaviour as if you typed
431 it in at the lilo prompt and the driver was compiled into the kernel
432 instead of being a module. The reason for the single quote is so that
433 the shell won't try to interpret anything in the line, such as {.
434 Insmod assumes any options starting with a letter instead of a number
435 is a character string (which is what we want) and by switching all of
436 the commas to periods, insmod won't interpret this as more than one
437 string and write junk into our binary image. I consider it a bug in
438 the insmod program that even if you wrap your string in quotes (quotes
439 that pass the shell mind you and that insmod sees) it still treats
440 a comma inside of those quotes as starting a new variable, resulting
441 in memory scribbles if you don't switch the commas to periods.
442
443
444 Kernel Compile options
445 ------------------------------
446 The various kernel compile time options for this driver are now fairly
447 well documented in the file drivers/scsi/Kconfig. In order to
448 see this documentation, you need to use one of the advanced configuration
449 programs (menuconfig and xconfig). If you are using the "make menuconfig"
450 method of configuring your kernel, then you would simply highlight the
451 option in question and hit the ? key. If you are using the "make xconfig"
452 method of configuring your kernel, then simply click on the help button
453 next to the option you have questions about. The help information from
454 the Configure.help file will then get automatically displayed.
455
456 /proc support
457 ------------------------------
458 The /proc support for the AIC7xxx can be found in the /proc/scsi/aic7xxx/
459 directory. That directory contains a file for each SCSI controller in
460 the system. Each file presents the current configuration and transfer
461 statistics (enabled with #define in aic7xxx.c) for each controller.
462
463 Thanks to Michael Neuffer for his upper-level SCSI help, and
464 Matthew Jacob for statistics support.
465
466 Debugging the driver
467 ------------------------------
468 Should you have problems with this driver, and would like some help in
469 getting them solved, there are a couple debugging items built into
470 the driver to facilitate getting the needed information from the system.
471 In general, I need a complete description of the problem, with as many
472 logs as possible concerning what happens. To help with this, there is
473 a command option aic7xxx=panic_on_abort. This option, when set, forces
474 the driver to panic the kernel on the first SCSI abort issued by the
475 mid level SCSI code. If your system is going to reset loops and you
476 can't read the screen, then this is what you need. Not only will it
477 stop the system, but it also prints out a large amount of state
478 information in the process. Second, if you specify the option
479 "aic7xxx=verbose:0x1ffff", the system will print out *SOOOO* much
480 information as it runs that you won't be able to see anything.
481 However, this can actually be very useful if your machine simply
482 locks up when trying to boot, since it will pin-point what was last
483 happening (in regards to the aic7xxx driver) immediately prior to
484 the lockup. This is really only useful if your machine simply can
485 not boot up successfully. If you can get your machine to run, then
486 this will produce far too much information.
487
488 FTP sites
489 ------------------------------
490 ftp://ftp.redhat.com/pub/aic/
491 - Out of date. I used to keep stuff here, but too many people
492 complained about having a hard time getting into Red Hat's ftp
493 server. So use the web site below instead.
494 ftp://ftp.pcnet.com/users/eischen/Linux/
495 - Dan Eischen's driver distribution area
496 ftp://ekf2.vsb.cz/pub/linux/kernel/aic7xxx/ftp.teleport.com/
497 - European Linux mirror of Teleport site
498
499 Web sites
500 ------------------------------
501 http://people.redhat.com/dledford/
502 - My web site, also the primary aic7xxx site with several related
503 pages.
504
505Dean W. Gehnert
506deang@teleport.com
507
508$Revision: 3.0 $
509
510Modified by Doug Ledford 1998-2000
511
diff --git a/Documentation/scsi/scsi_eh.txt b/Documentation/scsi/scsi_eh.txt
index 6ff16b620d84..a0c85110a07e 100644
--- a/Documentation/scsi/scsi_eh.txt
+++ b/Documentation/scsi/scsi_eh.txt
@@ -42,20 +42,14 @@ discussion.
42 42
43 Once LLDD gets hold of a scmd, either the LLDD will complete the 43 Once LLDD gets hold of a scmd, either the LLDD will complete the
44command by calling scsi_done callback passed from midlayer when 44command by calling scsi_done callback passed from midlayer when
45invoking hostt->queuecommand() or SCSI midlayer will time it out. 45invoking hostt->queuecommand() or the block layer will time it out.
46 46
47 47
48[1-2-1] Completing a scmd w/ scsi_done 48[1-2-1] Completing a scmd w/ scsi_done
49 49
50 For all non-EH commands, scsi_done() is the completion callback. It 50 For all non-EH commands, scsi_done() is the completion callback. It
51does the following. 51just calls blk_complete_request() to delete the block layer timer and
52 52raise SCSI_SOFTIRQ
53 1. Delete timeout timer. If it fails, it means that timeout timer
54 has expired and is going to finish the command. Just return.
55
56 2. Link scmd to per-cpu scsi_done_q using scmd->en_entry
57
58 3. Raise SCSI_SOFTIRQ
59 53
60 SCSI_SOFTIRQ handler scsi_softirq calls scsi_decide_disposition() to 54 SCSI_SOFTIRQ handler scsi_softirq calls scsi_decide_disposition() to
61determine what to do with the command. scsi_decide_disposition() 55determine what to do with the command. scsi_decide_disposition()
@@ -64,10 +58,12 @@ with the command.
64 58
65 - SUCCESS 59 - SUCCESS
66 scsi_finish_command() is invoked for the command. The 60 scsi_finish_command() is invoked for the command. The
67 function does some maintenance choirs and notify completion by 61 function does some maintenance chores and then calls
68 calling scmd->done() callback, which, for fs requests, would 62 scsi_io_completion() to finish the I/O.
69 be HLD completion callback - sd:sd_rw_intr, sr:rw_intr, 63 scsi_io_completion() then notifies the block layer on
70 st:st_intr. 64 the completed request by calling blk_end_request and
65 friends or figures out what to do with the remainder
66 of the data in case of an error.
71 67
72 - NEEDS_RETRY 68 - NEEDS_RETRY
73 - ADD_TO_MLQUEUE 69 - ADD_TO_MLQUEUE
@@ -86,33 +82,45 @@ function
86 1. invokes optional hostt->eh_timed_out() callback. Return value can 82 1. invokes optional hostt->eh_timed_out() callback. Return value can
87 be one of 83 be one of
88 84
89 - EH_HANDLED 85 - BLK_EH_HANDLED
90 This indicates that eh_timed_out() dealt with the timeout. The 86 This indicates that eh_timed_out() dealt with the timeout.
91 scmd is passed to __scsi_done() and thus linked into per-cpu 87 The command is passed back to the block layer and completed
92 scsi_done_q. Normal command completion described in [1-2-1] 88 via __blk_complete_requests().
93 follows. 89
90 *NOTE* After returning BLK_EH_HANDLED the SCSI layer is
91 assumed to be finished with the command, and no other
92 functions from the SCSI layer will be called. So this
93 should typically only be returned if the eh_timed_out()
94 handler raced with normal completion.
94 95
95 - EH_RESET_TIMER 96 - BLK_EH_RESET_TIMER
96 This indicates that more time is required to finish the 97 This indicates that more time is required to finish the
97 command. Timer is restarted. This action is counted as a 98 command. Timer is restarted. This action is counted as a
98 retry and only allowed scmd->allowed + 1(!) times. Once the 99 retry and only allowed scmd->allowed + 1(!) times. Once the
99 limit is reached, action for EH_NOT_HANDLED is taken instead. 100 limit is reached, action for BLK_EH_NOT_HANDLED is taken instead.
100 101
101 *NOTE* This action is racy as the LLDD could finish the scmd 102 - BLK_EH_NOT_HANDLED
102 after the timeout has expired but before it's added back. In 103 eh_timed_out() callback did not handle the command.
103 such cases, scsi_done() would think that timeout has occurred
104 and return without doing anything. We lose completion and the
105 command will time out again.
106
107 - EH_NOT_HANDLED
108 This is the same as when eh_timed_out() callback doesn't exist.
109 Step #2 is taken. 104 Step #2 is taken.
110 105
106 2. If the host supports asynchronous completion (as indicated by the
107 no_async_abort setting in the host template) scsi_abort_command()
108 is invoked to schedule an asynchrous abort. If that fails
109 Step #3 is taken.
110
111 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the 111 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the
112 command. See [1-3] for more information. 112 command. See [1-3] for more information.
113 113
114[1-3] Asynchronous command aborts
115
116 After a timeout occurs a command abort is scheduled from
117 scsi_abort_command(). If the abort is successful the command
118 will either be retried (if the number of retries is not exhausted)
119 or terminated with DID_TIME_OUT.
120 Otherwise scsi_eh_scmd_add() is invoked for the command.
121 See [1-4] for more information.
114 122
115[1-3] How EH takes over 123[1-4] How EH takes over
116 124
117 scmds enter EH via scsi_eh_scmd_add(), which does the following. 125 scmds enter EH via scsi_eh_scmd_add(), which does the following.
118 126
@@ -320,7 +328,8 @@ scmd->allowed.
320 328
321 <<scsi_eh_abort_cmds>> 329 <<scsi_eh_abort_cmds>>
322 330
323 This action is taken for each timed out command. 331 This action is taken for each timed out command when
332 no_async_abort is enabled in the host template.
324 hostt->eh_abort_handler() is invoked for each scmd. The 333 hostt->eh_abort_handler() is invoked for each scmd. The
325 handler returns SUCCESS if it has succeeded to make LLDD and 334 handler returns SUCCESS if it has succeeded to make LLDD and
326 all related hardware forget about the scmd. 335 all related hardware forget about the scmd.
diff --git a/Documentation/scsi/scsi_mid_low_api.txt b/Documentation/scsi/scsi_mid_low_api.txt
index 2b06aba4fa0f..d6a9bdeee7f2 100644
--- a/Documentation/scsi/scsi_mid_low_api.txt
+++ b/Documentation/scsi/scsi_mid_low_api.txt
@@ -882,8 +882,11 @@ Details:
882 * 882 *
883 * Calling context: kernel thread 883 * Calling context: kernel thread
884 * 884 *
885 * Notes: Invoked from scsi_eh thread. No other commands will be 885 * Notes: If 'no_async_abort' is defined this callback
886 * queued on current host during eh. 886 * will be invoked from scsi_eh thread. No other commands
887 * will then be queued on current host during eh.
888 * Otherwise it will be called whenever scsi_times_out()
889 * is called due to a command timeout.
887 * 890 *
888 * Optionally defined in: LLD 891 * Optionally defined in: LLD
889 **/ 892 **/
@@ -1257,6 +1260,8 @@ of interest:
1257 address space 1260 address space
1258 use_clustering - 1=>SCSI commands in mid level's queue can be merged, 1261 use_clustering - 1=>SCSI commands in mid level's queue can be merged,
1259 0=>disallow SCSI command merging 1262 0=>disallow SCSI command merging
1263 no_async_abort - 1=>Asynchronous aborts are not supported
1264 0=>Timed-out commands will be aborted asynchronously
1260 hostt - pointer to driver's struct scsi_host_template from which 1265 hostt - pointer to driver's struct scsi_host_template from which
1261 this struct Scsi_Host instance was spawned 1266 this struct Scsi_Host instance was spawned
1262 hostt->proc_name - name of LLD. This is the driver name that sysfs uses 1267 hostt->proc_name - name of LLD. This is the driver name that sysfs uses