1 AIC7xxx Driver for Linux
4 ----------------------------
5 The AIC7xxx SCSI driver adds support for Adaptec (http://www.adaptec.com)
6 SCSI controllers and chipsets. Major portions of the driver and driver
7 development are shared between both Linux and FreeBSD. Support for the
8 AIC-7xxx chipsets have been in the default Linux kernel since approximately
9 linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
12 Supported cards/chipsets
13 ----------------------------
15 ----------------------------
54 ----------------------------
64 ----------------------------
65 W - Wide SCSI, SCSI-3, 16bit bus, 68pin connector, will also support
66 SCSI-1/SCSI-2 50pin devices, transfer rates up to 20MB/s.
67 U - Ultra SCSI, transfer rates up to 40MB/s.
68 U2- Ultra 2 SCSI, transfer rates up to 80MB/s.
69 D - Differential SCSI.
70 T - Twin Channel SCSI. Up to 14 SCSI devices.
72 AHA-274x - EISA SCSI controller
73 AHA-284x - VLB SCSI controller
74 AHA-29xx - PCI SCSI controller
75 AHA-394x - PCI controllers with two separate SCSI controllers on-board.
76 AHA-398x - PCI RAID controllers with three separate SCSI controllers
80 ------------------------------
82 ----------------------------
83 AHA-2920 (Only the cards that use the Future Domain chipset are not
84 supported, any 2920 cards based on Adaptec AIC chipsets,
85 such as the 2920C, are supported)
87 AAA-113x Raid Port Card
90 ----------------------------
94 ----------------------------
95 R - Raid Port busses are not supported.
97 The hardware RAID devices sold by Adaptec are *NOT* supported by this
98 driver (and will people please stop emailing me about them, they are
99 a totally separate beast from the bare SCSI controllers and this driver
100 can not be retrofitted in any sane manner to support the hardware RAID
101 features on those cards - Doug Ledford).
105 ------------------------------
106 Justin T Gibbs gibbs@plutotech.com
108 Dan Eischen deischen@iworks.InterWorks.org
109 (Original Linux Driver Co-maintainer)
110 Dean Gehnert deang@teleport.com
111 (Original Linux FTP/patch maintainer)
112 Jess Johnson jester@frenzy.com
114 Doug Ledford dledford@redhat.com
115 (Current Linux aic7xxx-5.x.x Driver/Patch/FTP maintainer)
117 Special thanks go to John Aycock (aycock@cpsc.ucalgary.ca), the original
118 author of the driver. John has since retired from the project. Thanks
119 again for all his work!
122 ------------------------------
123 There is a mailing list available for users who want to track development
124 and converse with other users and developers. This list is for both
125 FreeBSD and Linux support of the AIC7xxx chipsets.
127 To subscribe to the AIC7xxx mailing list send mail to the list server,
128 with "subscribe AIC7xxx" in the body (no Subject: required):
129 To: majordomo@FreeBSD.ORG
133 To unsubscribe from the list, send mail to the list server with:
134 To: majordomo@FreeBSD.ORG
138 Send regular messages and replies to: AIC7xxx@FreeBSD.ORG
140 Boot Command line options
141 ------------------------------
142 "aic7xxx=no_reset" - Eliminate the SCSI bus reset during startup.
143 Some SCSI devices need the initial reset that this option disables
144 in order to work. If you have problems at bootup, please make sure
145 you aren't using this option.
147 "aic7xxx=reverse_scan" - Certain PCI motherboards scan for devices at
148 bootup by scanning from the highest numbered PCI device to the
149 lowest numbered PCI device, others do just the opposite and scan
150 from lowest to highest numbered PCI device. There is no reliable
151 way to autodetect this ordering. So, we default to the most common
152 order, which is lowest to highest. Then, in case your motherboard
153 scans from highest to lowest, we have this option. If your BIOS
154 finds the drives on controller A before controller B but the linux
155 kernel finds your drives on controller B before A, then you should
158 "aic7xxx=extended" - Force the driver to detect extended drive translation
159 on your controller. This helps those people who have cards without
160 a SEEPROM make sure that linux and all other operating systems think
161 the same way about your hard drives.
163 "aic7xxx=irq_trigger:x" - Replace x with either 0 or 1 to force the kernel
164 to use the correct IRQ type for your card. This only applies to EISA
165 based controllers. On these controllers, 0 is for Edge triggered
166 interrupts, and 1 is for Level triggered interrupts. If you aren't
167 sure or don't know which IRQ trigger type your EISA card uses, then
168 let the kernel autodetect the trigger type.
170 "aic7xxx=verbose" - This option can be used in one of two ways. If you
171 simply specify aic7xxx=verbose, then the kernel will automatically
172 pick the default set of verbose messages for you to see.
173 Alternatively, you can specify the command as
174 "aic7xxx=verbose:0xXXXX" where the X entries are replaced with
175 hexadecimal digits. This option is a bit field type option. For
176 a full listing of the available options, search for the
177 #define VERBOSE_xxxxxx lines in the aic7xxx.c file. If you want
178 verbose messages, then it is recommended that you simply use the
179 aic7xxx=verbose variant of this command.
181 "aic7xxx=pci_parity:x" - This option controls whether or not the driver
182 enables PCI parity error checking on the PCI bus. By default, this
183 checking is disabled. To enable the checks, simply specify pci_parity
184 with no value afterwords. To reverse the parity from even to odd,
185 supply any number other than 0 or 255. In short:
186 pci_parity - Even parity checking (even is the normal PCI parity)
187 pci_parity:x - Where x > 0, Odd parity checking
188 pci_parity:0 - No check (default)
189 NOTE: In order to get Even PCI parity checking, you must use the
190 version of the option that does not include the : and a number at
191 the end (unless you want to enter exactly 2^32 - 1 as the number).
193 "aic7xxx=no_probe" - This option will disable the probing for any VLB
194 based 2842 controllers and any EISA based controllers. This is
195 needed on certain newer motherboards where the normal EISA I/O ranges
196 have been claimed by other PCI devices. Probing on those machines
197 will often result in the machine crashing or spontaneously rebooting
198 during startup. Examples of machines that need this are the
199 Dell PowerEdge 6300 machines.
201 "aic7xxx=panic_on_abort" - This option is for debugging and will cause
202 the driver to panic the linux kernel and freeze the system the first
203 time the drivers abort or reset routines are called. This is most
204 helpful when some problem causes infinite reset loops that scroll too
205 fast to see. By using this option, you can write down what the errors
206 actually are and send that information to me so it can be fixed.
208 "aic7xxx=dump_card" - This option will print out the *entire* set of
209 configuration registers on the card during the init sequence. This
210 is a debugging aid used to see exactly what state the card is in
211 when we finally finish our initialization routines. If you don't
212 have documentation on the chipsets, this will do you absolutely
213 no good unless you are simply trying to write all the information
214 down in order to send it to me.
216 "aic7xxx=dump_sequencer" - This is the same as the above options except
217 that instead of dumping the register contents on the card, this
218 option dumps the contents of the sequencer program RAM. This gives
219 the ability to verify that the instructions downloaded to the
220 card's sequencer are indeed what they are suppossed to be. Again,
221 unless you have documentation to tell you how to interpret these
222 numbers, then it is totally useless.
224 "aic7xxx=override_term:0xffffffff" - This option is used to force the
225 termination on your SCSI controllers to a particular setting. This
226 is a bit mask variable that applies for up to 8 aic7xxx SCSI channels.
227 Each channel gets 4 bits, divided as follows:
229 | | | Enable/Disable Single Ended Low Byte Termination
230 | | En/Disable Single Ended High Byte Termination
231 | En/Disable Low Byte LVD Termination
232 En/Disable High Byte LVD Termination
234 The upper 2 bits that deal with LVD termination only apply to Ultra2
235 controllers. Futhermore, due to the current Ultra2 controller
236 designs, these bits are tied together such that setting either bit
237 enables both low and high byte LVD termination. It is not possible
238 to only set high or low byte LVD termination in this manner. This is
239 an artifact of the BIOS definition on Ultra2 controllers. For other
240 controllers, the only important bits are the two lowest bits. Setting
241 the higher bits on non-Ultra2 controllers has no effect. A few
242 examples of how to use this option:
244 Enable low and high byte termination on a non-ultra2 controller that
245 is the first aic7xxx controller (the correct bits are 0011),
246 aic7xxx=override_term:0x3
248 Enable all termination on the third aic7xxx controller, high byte
249 termination on the second aic7xxx controller, and low and high byte
250 SE termination on the first aic7xxx controller
251 (bits are 1111 0010 0011),
252 aic7xxx=override_term:0xf23
254 No attempt has been made to make this option non-cryptic. It really
255 shouldn't be used except in dire circumstances, and if that happens,
256 I'm probably going to be telling you what to set this to anyway :)
258 "aic7xxx=stpwlev:0xffffffff" - This option is used to control the STPWLEV
259 bit in the DEVCONFIG PCI register. Currently, this is one of the
260 very few registers that we have absolutely *no* way of detecting
261 what the variable should be. It depends entirely on how the chipset
262 and external terminators were coupled by the card/motherboard maker.
263 Further, a chip reset (at power up) always sets this bit to 0. If
264 there is no BIOS to run on the chipset/card (such as with a 2910C
265 or a motherboard controller with the BIOS totally disabled) then
266 the variable may not get set properly. Of course, if the proper
267 setting was 0, then that's what it would be after the reset, but if
268 the proper setting is actually 1.....you get the picture. Now, since
269 we can't detect this at all, I've added this option to force the
270 setting. If you have a BIOS on your controller then you should never
271 need to use this option. However, if you are having lots of SCSI
272 reset problems and can't seem to get them knocked out, this may help.
274 Here's a test to know for certain if you need this option. Make
275 a boot floppy that you can use to boot your computer up and that
276 will detect the aic7xxx controller. Next, power down your computer.
277 While it's down, unplug all SCSI cables from your Adaptec SCSI
278 controller. Boot the system back up to the Adaptec EZ-SCSI BIOS
279 and then make sure that termination is enabled on your adapter (if
280 you have an Adaptec BIOS of course). Next, boot up the floppy you
281 made and wait for it to detect the aic7xxx controller. If the kernel
282 finds the controller fine, says scsi : x hosts and then tries to
283 detect your devices like normal, up to the point where it fails to
284 mount your root file system and panics, then you're fine. If, on
285 the other hand, the system goes into an infinite reset loop, then
286 you need to use this option and/or the previous option to force the
287 proper termination settings on your controller. If this happens,
288 then you next need to figure out what your settings should be.
290 To find the correct settings, power your machine back down, connect
291 back up the SCSI cables, and boot back into your machine like normal.
292 However, boot with the aic7xxx=verbose:0x39 option. Record the
293 initial DEVCONFIG values for each of your aic7xxx controllers as
294 they are listed, and also record what the machine is detecting as
295 the proper termination on your controllers. NOTE: the order in
296 which the initial DEVCONFIG values are printed out is not gauranteed
297 to be the same order as the SCSI controllers are registered. The
298 above option and this option both work on the order of the SCSI
299 controllers as they are registered, so make sure you match the right
300 DEVCONFIG values with the right controllers if you have more than
301 one aic7xxx controller.
303 Once you have the detected termination settings and the initial
304 DEVCONFIG values for each controller, then figure out what the
305 termination on each of the controllers *should* be. Hopefully, that
306 part is correct, but it could possibly be wrong if there is
307 bogus cable detection logic on your controller or something similar.
308 If all the controllers have the correct termination settings, then
309 don't set the aic7xxx=override_term variable at all, leave it alone.
310 Next, on any controllers that go into an infinite reset loop when
311 you unplug all the SCSI cables, get the starting DEVCONFIG value.
312 If the initial DEVCONFIG value is divisible by 2, then the correct
313 setting for that controller is 0. If it's an odd number, then
314 the correct setting for that controller is 1. For any other
315 controllers that didn't have an infinite reset problem, then reverse
316 the above options. If DEVCONFIG was even, then the correct setting
317 is 1, if not then the correct setting is 0.
319 Now that you know what the correct setting was for each controller,
320 we need to encode that into the aic7xxx=stpwlev:0x... variable.
321 This variable is a bit field encoded variable. Bit 0 is for the first
322 aic7xxx controller, bit 1 for the next, etc. Put all these bits
323 together and you get a number. For example, if the third aic7xxx
324 needed a 1, but the second and first both needed a 0, then the bits
325 would be 100 in binary. This then translates to 0x04. You would
326 therefore set aic7xxx=stpwlev:0x04. This is fairly standard binary
327 to hexadecimal conversions here. If you aren't up to speed on the
328 binary->hex conversion then send an email to the aic7xxx mailing
329 list and someone can help you out.
331 "aic7xxx=tag_info:{{8,8..},{8,8..},..}" - This option is used to disable
332 or enable Tagged Command Queueing (TCQ) on specific devices. As of
333 driver version 5.1.11, TCQ is now either on or off by default
334 according to the setting you choose during the make config process.
335 In order to en/disable TCQ for certian devices at boot time, a user
336 may use this boot param. The driver will then parse this message out
337 and en/disable the specific device entries that are present based upon
338 the value given. The param line is parsed in the following manner:
340 { - first instance indicates the start of this parameter values
341 second instance is the start of entries for a particular
343 } - end the entries for a particular host adapter, or end the entire
344 set of parameter entries
345 , - move to next entry. Inside of a set of device entries, this
346 moves us to the next device on the list. Outside of device
347 entries, this moves us to the next host adapter
348 . - Same effect as , but is safe to use with insmod.
349 x - the number to enter into the array at this position.
350 0 = Enable tagged queueing on this device and use the default
352 1-254 = Enable tagged queueing on this device and use this
353 number as the queue depth
354 255 = Disable tagged queueing on this device.
355 Note: anything above 32 for an actual queue depth is wasteful
358 A few examples of how this can be used:
360 tag_info:{{8,12,,0,,255,4}}
361 This line will only effect the first aic7xxx card registered. It
362 will set scsi id 0 to a queue depth of 8, id 1 to 12, leave id 2
363 at the default, set id 3 to tagged queueing enabled and use the
364 default queue depth, id 4 default, id 5 disabled, and id 6 to 4.
365 Any not specified entries stay at the default value, repeated
366 commas with no value specified will simply increment to the next id
367 without changing anything for the missing values.
369 tag_info:{,,,{,,,255}}
370 First, second, and third adapters at default values. Fourth
371 adapter, id 3 is disabled. Notice that leading commas simply
372 increment what the first number effects, and there are no need
373 for trailing commas. When you close out an adapter, or the
374 entire entry, anything not explicitly set stays at the default
377 A final note on this option. The scanner I used for this isn't
378 perfect or highly robust. If you mess the line up, the worst that
379 should happen is that the line will get ignored. If you don't
380 close out the entire entry with the final bracket, then any other
381 aic7xxx options after this will get ignored. So, in general, be
382 sure of what you are entering, and after you have it right, just
383 add it to the lilo.conf file so there won't be any mistakes. As
384 a means of checking this parser, the entire tag_info array for
385 each card is now printed out in the /proc/scsi/aic7xxx/x file. You
386 can use that to verify that your options were parsed correctly.
388 Boot command line options may be combined to form the proper set of options
389 a user might need. For example, the following is valid:
391 aic7xxx=verbose,extended,irq_trigger:1
393 The only requirement is that individual options be separated by a comma or
394 a period on the command line.
396 Module Loading command options
397 ------------------------------
398 When loading the aic7xxx driver as a module, the exact same options are
399 available to the user. However, the syntax to specify the options changes
400 slightly. For insmod, you need to wrap the aic7xxx= argument in quotes
401 and replace all ',' with '.'. So, for example, a valid insmod line
404 insmod aic7xxx aic7xxx='verbose.irq_trigger:1.extended'
406 This line should result in the *exact* same behaviour as if you typed
407 it in at the lilo prompt and the driver was compiled into the kernel
408 instead of being a module. The reason for the single quote is so that
409 the shell won't try to interpret anything in the line, such as {.
410 Insmod assumes any options starting with a letter instead of a number
411 is a character string (which is what we want) and by switching all of
412 the commas to periods, insmod won't interpret this as more than one
413 string and write junk into our binary image. I consider it a bug in
414 the insmod program that even if you wrap your string in quotes (quotes
415 that pass the shell mind you and that insmod sees) it still treates
416 a comma inside of those quotes as starting a new variable, resulting
417 in memory scribbles if you don't switch the commas to periods.
420 Kernel Compile options
421 ------------------------------
422 The various kernel compile time options for this driver are now fairly
423 well documented in the file Documentation/Configure.help. In order to
424 see this documentation, you need to use one of the advanced configuration
425 programs (menuconfig and xconfig). If you are using the "make menuconfig"
426 method of configuring your kernel, then you would simply highlight the
427 option in question and hit the ? key. If you are using the "make xconfig"
428 method of configuring your kernel, then simply click on the help button
429 next to the option you have questions about. The help information from
430 the Configure.help file will then get automatically displayed.
433 ------------------------------
434 The /proc support for the AIC7xxx can be found in the /proc/scsi/aic7xxx/
435 directory. That directory contains a file for each SCSI controller in
436 the system. Each file presents the current configuration and transfer
437 statistics (enabled with #define in aic7xxx.c) for each controller.
439 Thanks to Michael Neuffer for his upper-level SCSI help, and
440 Matthew Jacob for statistics support.
443 ------------------------------
444 Should you have problems with this driver, and would like some help in
445 getting them solved, there are a couple debugging items built into
446 the driver to facilitate getting the needed information from the system.
447 In general, I need a complete description of the problem, with as many
448 logs as possible concerning what happens. To help with this, there is
449 a command option aic7xxx=panic_on_abort. This option, when set, forces
450 the driver to panic the kernel on the first SCSI abort issued by the
451 mid level SCSI code. If your system is going to reset loops and you
452 can't read the screen, then this is what you need. Not only will it
453 stop the system, but it also prints out a large amount of state
454 information in the process. Second, if you specify the option
455 "aic7xxx=verbose:0x1ffff", the system will print out *SOOOO* much
456 information as it runs that you won't be able to see anything.
457 However, this can actually be very usefull if your machine simply
458 locks up when trying to boot, since it will pin-point what was last
459 happening (in regards to the aic7xxx driver) immediately prior to
460 the lockup. This is really only usefull if your machine simply can
461 not boot up successfully. If you can get your machine to run, then
462 this will produce far too much information.
465 ------------------------------
466 ftp://ftp.redhat.com/pub/aic/
467 - Primary site for Doug Ledford developed driver releases
468 ftp://ftp.dialnet.net/pub/linux/aic7xxx
469 - Temporary mirror of the redhat.com ftp site while people
470 get used to the new address
471 ftp://ftp.pcnet.com/users/eischen/Linux/
472 - Dan Eischen's driver distribution area
473 ftp://ekf2.vsb.cz/pub/linux/kernel/aic7xxx/ftp.teleport.com/
474 - European Linux mirror of Teleport site
477 ------------------------------
478 http://developer.redhat.com/aic7xxx/
479 - Primary web site maintained by Doug Ledford. I haven't actually
480 put anything up yet....but I'm planning on it. This information
481 is put here as an add for the vapor page :)
488 Modified by Doug Ledford 1998-9