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