diff options
author | Matthew Wilcox <matthew@wil.cx> | 2007-07-30 10:41:03 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.localdomain> | 2007-10-12 14:39:56 -0400 |
commit | 4bd6d7f35661a32ed50b72f02b684f894feeaa48 (patch) | |
tree | 38a8baae7ccd63b60b2003260cbd1abf84b780c3 /drivers/scsi/advansys.c | |
parent | d68f4321357165346fb15ef41dbbf9dce7894f29 (diff) |
[SCSI] advansys: Move documentation to Documentation/scsi
The 700+-line comment at the top of the advansys driver fits more comfortably
in Documentation/scsi.
Delete the sections on:
- kernels supported
- other files modified (obsolete)
- source comments (obsolete)
- tests to run
- release history (that's what a VCS is for)
- contacting connectcom (the domain has expired and the phone number is
now in use by another organisation)
Known problems/fix list is moved down to the section where jejb put his FIXME.
Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/advansys.c')
-rw-r--r-- | drivers/scsi/advansys.c | 766 |
1 files changed, 19 insertions, 747 deletions
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 19c2d19f254c..4d4d7c9b22bb 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c | |||
@@ -20,743 +20,6 @@ | |||
20 | * On June 18, 2001 Initio Corp. acquired ConnectCom's SCSI assets | 20 | * On June 18, 2001 Initio Corp. acquired ConnectCom's SCSI assets |
21 | */ | 21 | */ |
22 | 22 | ||
23 | /* | ||
24 | |||
25 | Documentation for the AdvanSys Driver | ||
26 | |||
27 | A. Linux Kernels Supported by this Driver | ||
28 | B. Adapters Supported by this Driver | ||
29 | C. Linux source files modified by AdvanSys Driver | ||
30 | D. Source Comments | ||
31 | E. Driver Compile Time Options and Debugging | ||
32 | F. Driver LILO Option | ||
33 | G. Tests to run before releasing new driver | ||
34 | H. Release History | ||
35 | I. Known Problems/Fix List | ||
36 | J. Credits (Chronological Order) | ||
37 | |||
38 | A. Linux Kernels Supported by this Driver | ||
39 | |||
40 | This driver has been tested in the following Linux kernels: v2.2.18 | ||
41 | v2.4.0. The driver is supported on v2.2 and v2.4 kernels and on x86, | ||
42 | alpha, and PowerPC platforms. | ||
43 | |||
44 | B. Adapters Supported by this Driver | ||
45 | |||
46 | AdvanSys (Advanced System Products, Inc.) manufactures the following | ||
47 | RISC-based, Bus-Mastering, Fast (10 Mhz) and Ultra (20 Mhz) Narrow | ||
48 | (8-bit transfer) SCSI Host Adapters for the ISA, EISA, VL, and PCI | ||
49 | buses and RISC-based, Bus-Mastering, Ultra (20 Mhz) Wide (16-bit | ||
50 | transfer) SCSI Host Adapters for the PCI bus. | ||
51 | |||
52 | The CDB counts below indicate the number of SCSI CDB (Command | ||
53 | Descriptor Block) requests that can be stored in the RISC chip | ||
54 | cache and board LRAM. A CDB is a single SCSI command. The driver | ||
55 | detect routine will display the number of CDBs available for each | ||
56 | adapter detected. The number of CDBs used by the driver can be | ||
57 | lowered in the BIOS by changing the 'Host Queue Size' adapter setting. | ||
58 | |||
59 | Laptop Products: | ||
60 | ABP-480 - Bus-Master CardBus (16 CDB) (2.4 kernel and greater) | ||
61 | |||
62 | Connectivity Products: | ||
63 | ABP510/5150 - Bus-Master ISA (240 CDB) | ||
64 | ABP5140 - Bus-Master ISA PnP (16 CDB) | ||
65 | ABP5142 - Bus-Master ISA PnP with floppy (16 CDB) | ||
66 | ABP902/3902 - Bus-Master PCI (16 CDB) | ||
67 | ABP3905 - Bus-Master PCI (16 CDB) | ||
68 | ABP915 - Bus-Master PCI (16 CDB) | ||
69 | ABP920 - Bus-Master PCI (16 CDB) | ||
70 | ABP3922 - Bus-Master PCI (16 CDB) | ||
71 | ABP3925 - Bus-Master PCI (16 CDB) | ||
72 | ABP930 - Bus-Master PCI (16 CDB) | ||
73 | ABP930U - Bus-Master PCI Ultra (16 CDB) | ||
74 | ABP930UA - Bus-Master PCI Ultra (16 CDB) | ||
75 | ABP960 - Bus-Master PCI MAC/PC (16 CDB) | ||
76 | ABP960U - Bus-Master PCI MAC/PC Ultra (16 CDB) | ||
77 | |||
78 | Single Channel Products: | ||
79 | ABP542 - Bus-Master ISA with floppy (240 CDB) | ||
80 | ABP742 - Bus-Master EISA (240 CDB) | ||
81 | ABP842 - Bus-Master VL (240 CDB) | ||
82 | ABP940 - Bus-Master PCI (240 CDB) | ||
83 | ABP940U - Bus-Master PCI Ultra (240 CDB) | ||
84 | ABP940UA/3940UA - Bus-Master PCI Ultra (240 CDB) | ||
85 | ABP970 - Bus-Master PCI MAC/PC (240 CDB) | ||
86 | ABP970U - Bus-Master PCI MAC/PC Ultra (240 CDB) | ||
87 | ABP3960UA - Bus-Master PCI MAC/PC Ultra (240 CDB) | ||
88 | ABP940UW/3940UW - Bus-Master PCI Ultra-Wide (253 CDB) | ||
89 | ABP970UW - Bus-Master PCI MAC/PC Ultra-Wide (253 CDB) | ||
90 | ABP3940U2W - Bus-Master PCI LVD/Ultra2-Wide (253 CDB) | ||
91 | |||
92 | Multi-Channel Products: | ||
93 | ABP752 - Dual Channel Bus-Master EISA (240 CDB Per Channel) | ||
94 | ABP852 - Dual Channel Bus-Master VL (240 CDB Per Channel) | ||
95 | ABP950 - Dual Channel Bus-Master PCI (240 CDB Per Channel) | ||
96 | ABP950UW - Dual Channel Bus-Master PCI Ultra-Wide (253 CDB Per Channel) | ||
97 | ABP980 - Four Channel Bus-Master PCI (240 CDB Per Channel) | ||
98 | ABP980U - Four Channel Bus-Master PCI Ultra (240 CDB Per Channel) | ||
99 | ABP980UA/3980UA - Four Channel Bus-Master PCI Ultra (16 CDB Per Chan.) | ||
100 | ABP3950U2W - Bus-Master PCI LVD/Ultra2-Wide and Ultra-Wide (253 CDB) | ||
101 | ABP3950U3W - Bus-Master PCI Dual LVD2/Ultra3-Wide (253 CDB) | ||
102 | |||
103 | C. Linux source files modified by AdvanSys Driver | ||
104 | |||
105 | This section for historical purposes documents the changes | ||
106 | originally made to the Linux kernel source to add the advansys | ||
107 | driver. As Linux has changed some of these files have also | ||
108 | been modified. | ||
109 | |||
110 | 1. linux/arch/i386/config.in: | ||
111 | |||
112 | bool 'AdvanSys SCSI support' CONFIG_SCSI_ADVANSYS y | ||
113 | |||
114 | 2. linux/drivers/scsi/hosts.c: | ||
115 | |||
116 | #ifdef CONFIG_SCSI_ADVANSYS | ||
117 | #include "advansys.h" | ||
118 | #endif | ||
119 | |||
120 | and after "static struct scsi_host_template builtin_scsi_hosts[] =": | ||
121 | |||
122 | #ifdef CONFIG_SCSI_ADVANSYS | ||
123 | ADVANSYS, | ||
124 | #endif | ||
125 | |||
126 | 3. linux/drivers/scsi/Makefile: | ||
127 | |||
128 | ifdef CONFIG_SCSI_ADVANSYS | ||
129 | SCSI_SRCS := $(SCSI_SRCS) advansys.c | ||
130 | SCSI_OBJS := $(SCSI_OBJS) advansys.o | ||
131 | else | ||
132 | SCSI_MODULE_OBJS := $(SCSI_MODULE_OBJS) advansys.o | ||
133 | endif | ||
134 | |||
135 | 4. linux/init/main.c: | ||
136 | |||
137 | extern void advansys_setup(char *str, int *ints); | ||
138 | |||
139 | and add the following lines to the bootsetups[] array. | ||
140 | |||
141 | #ifdef CONFIG_SCSI_ADVANSYS | ||
142 | { "advansys=", advansys_setup }, | ||
143 | #endif | ||
144 | |||
145 | D. Source Comments | ||
146 | |||
147 | 1. Use tab stops set to 4 for the source files. For vi use 'se tabstops=4'. | ||
148 | |||
149 | 2. This driver should be maintained in multiple files. But to make | ||
150 | it easier to include with Linux and to follow Linux conventions, | ||
151 | the whole driver is maintained in the source files advansys.h and | ||
152 | advansys.c. In this file logical sections of the driver begin with | ||
153 | a comment that contains '---'. The following are the logical sections | ||
154 | of the driver below. | ||
155 | |||
156 | --- Linux Version | ||
157 | --- Linux Include File | ||
158 | --- Driver Options | ||
159 | --- Debugging Header | ||
160 | --- Asc Library Constants and Macros | ||
161 | --- Adv Library Constants and Macros | ||
162 | --- Driver Constants and Macros | ||
163 | --- Driver Structures | ||
164 | --- Driver Data | ||
165 | --- Driver Function Prototypes | ||
166 | --- Linux 'struct scsi_host_template' and advansys_setup() Functions | ||
167 | --- Loadable Driver Support | ||
168 | --- Miscellaneous Driver Functions | ||
169 | --- Functions Required by the Asc Library | ||
170 | --- Functions Required by the Adv Library | ||
171 | --- Tracing and Debugging Functions | ||
172 | --- Asc Library Functions | ||
173 | --- Adv Library Functions | ||
174 | |||
175 | 3. The string 'XXX' is used to flag code that needs to be re-written | ||
176 | or that contains a problem that needs to be addressed. | ||
177 | |||
178 | 4. I have stripped comments from and reformatted the source for the | ||
179 | Asc Library and Adv Library to reduce the size of this file. This | ||
180 | source can be found under the following headings. The Asc Library | ||
181 | is used to support Narrow Boards. The Adv Library is used to | ||
182 | support Wide Boards. | ||
183 | |||
184 | --- Asc Library Constants and Macros | ||
185 | --- Adv Library Constants and Macros | ||
186 | --- Asc Library Functions | ||
187 | --- Adv Library Functions | ||
188 | |||
189 | E. Driver Compile Time Options and Debugging | ||
190 | |||
191 | In this source file the following constants can be defined. They are | ||
192 | defined in the source below. Both of these options are enabled by | ||
193 | default. | ||
194 | |||
195 | 1. ADVANSYS_ASSERT - Enable driver assertions (Def: Enabled) | ||
196 | |||
197 | Enabling this option adds assertion logic statements to the | ||
198 | driver. If an assertion fails a message will be displayed to | ||
199 | the console, but the system will continue to operate. Any | ||
200 | assertions encountered should be reported to the person | ||
201 | responsible for the driver. Assertion statements may proactively | ||
202 | detect problems with the driver and facilitate fixing these | ||
203 | problems. Enabling assertions will add a small overhead to the | ||
204 | execution of the driver. | ||
205 | |||
206 | 2. ADVANSYS_DEBUG - Enable driver debugging (Def: Disabled) | ||
207 | |||
208 | Enabling this option adds tracing functions to the driver and | ||
209 | the ability to set a driver tracing level at boot time. This | ||
210 | option will also export symbols not required outside the driver to | ||
211 | the kernel name space. This option is very useful for debugging | ||
212 | the driver, but it will add to the size of the driver execution | ||
213 | image and add overhead to the execution of the driver. | ||
214 | |||
215 | The amount of debugging output can be controlled with the global | ||
216 | variable 'asc_dbglvl'. The higher the number the more output. By | ||
217 | default the debug level is 0. | ||
218 | |||
219 | If the driver is loaded at boot time and the LILO Driver Option | ||
220 | is included in the system, the debug level can be changed by | ||
221 | specifying a 5th (ASC_NUM_IOPORT_PROBE + 1) I/O Port. The | ||
222 | first three hex digits of the pseudo I/O Port must be set to | ||
223 | 'deb' and the fourth hex digit specifies the debug level: 0 - F. | ||
224 | The following command line will look for an adapter at 0x330 | ||
225 | and set the debug level to 2. | ||
226 | |||
227 | linux advansys=0x330,0,0,0,0xdeb2 | ||
228 | |||
229 | If the driver is built as a loadable module this variable can be | ||
230 | defined when the driver is loaded. The following insmod command | ||
231 | will set the debug level to one. | ||
232 | |||
233 | insmod advansys.o asc_dbglvl=1 | ||
234 | |||
235 | Debugging Message Levels: | ||
236 | 0: Errors Only | ||
237 | 1: High-Level Tracing | ||
238 | 2-N: Verbose Tracing | ||
239 | |||
240 | To enable debug output to console, please make sure that: | ||
241 | |||
242 | a. System and kernel logging is enabled (syslogd, klogd running). | ||
243 | b. Kernel messages are routed to console output. Check | ||
244 | /etc/syslog.conf for an entry similar to this: | ||
245 | |||
246 | kern.* /dev/console | ||
247 | |||
248 | c. klogd is started with the appropriate -c parameter | ||
249 | (e.g. klogd -c 8) | ||
250 | |||
251 | This will cause printk() messages to be be displayed on the | ||
252 | current console. Refer to the klogd(8) and syslogd(8) man pages | ||
253 | for details. | ||
254 | |||
255 | Alternatively you can enable printk() to console with this | ||
256 | program. However, this is not the 'official' way to do this. | ||
257 | Debug output is logged in /var/log/messages. | ||
258 | |||
259 | main() | ||
260 | { | ||
261 | syscall(103, 7, 0, 0); | ||
262 | } | ||
263 | |||
264 | Increasing LOG_BUF_LEN in kernel/printk.c to something like | ||
265 | 40960 allows more debug messages to be buffered in the kernel | ||
266 | and written to the console or log file. | ||
267 | |||
268 | 3. ADVANSYS_STATS - Enable statistics (Def: Enabled >= v1.3.0) | ||
269 | |||
270 | Enabling this option adds statistics collection and display | ||
271 | through /proc to the driver. The information is useful for | ||
272 | monitoring driver and device performance. It will add to the | ||
273 | size of the driver execution image and add minor overhead to | ||
274 | the execution of the driver. | ||
275 | |||
276 | Statistics are maintained on a per adapter basis. Driver entry | ||
277 | point call counts and transfer size counts are maintained. | ||
278 | Statistics are only available for kernels greater than or equal | ||
279 | to v1.3.0 with the CONFIG_PROC_FS (/proc) file system configured. | ||
280 | |||
281 | AdvanSys SCSI adapter files have the following path name format: | ||
282 | |||
283 | /proc/scsi/advansys/{0,1,2,3,...} | ||
284 | |||
285 | This information can be displayed with cat. For example: | ||
286 | |||
287 | cat /proc/scsi/advansys/0 | ||
288 | |||
289 | When ADVANSYS_STATS is not defined the AdvanSys /proc files only | ||
290 | contain adapter and device configuration information. | ||
291 | |||
292 | F. Driver LILO Option | ||
293 | |||
294 | If init/main.c is modified as described in the 'Directions for Adding | ||
295 | the AdvanSys Driver to Linux' section (B.4.) above, the driver will | ||
296 | recognize the 'advansys' LILO command line and /etc/lilo.conf option. | ||
297 | This option can be used to either disable I/O port scanning or to limit | ||
298 | scanning to 1 - 4 I/O ports. Regardless of the option setting EISA and | ||
299 | PCI boards will still be searched for and detected. This option only | ||
300 | affects searching for ISA and VL boards. | ||
301 | |||
302 | Examples: | ||
303 | 1. Eliminate I/O port scanning: | ||
304 | boot: linux advansys= | ||
305 | or | ||
306 | boot: linux advansys=0x0 | ||
307 | 2. Limit I/O port scanning to one I/O port: | ||
308 | boot: linux advansys=0x110 | ||
309 | 3. Limit I/O port scanning to four I/O ports: | ||
310 | boot: linux advansys=0x110,0x210,0x230,0x330 | ||
311 | |||
312 | For a loadable module the same effect can be achieved by setting | ||
313 | the 'asc_iopflag' variable and 'asc_ioport' array when loading | ||
314 | the driver, e.g. | ||
315 | |||
316 | insmod advansys.o asc_iopflag=1 asc_ioport=0x110,0x330 | ||
317 | |||
318 | If ADVANSYS_DEBUG is defined a 5th (ASC_NUM_IOPORT_PROBE + 1) | ||
319 | I/O Port may be added to specify the driver debug level. Refer to | ||
320 | the 'Driver Compile Time Options and Debugging' section above for | ||
321 | more information. | ||
322 | |||
323 | G. Tests to run before releasing new driver | ||
324 | |||
325 | 1. In the supported kernels verify there are no warning or compile | ||
326 | errors when the kernel is built as both a driver and as a module | ||
327 | and with the following options: | ||
328 | |||
329 | ADVANSYS_DEBUG - enabled and disabled | ||
330 | CONFIG_SMP - enabled and disabled | ||
331 | CONFIG_PROC_FS - enabled and disabled | ||
332 | |||
333 | 2. Run tests on an x86, alpha, and PowerPC with at least one narrow | ||
334 | card and one wide card attached to a hard disk and CD-ROM drive: | ||
335 | fdisk, mkfs, fsck, bonnie, copy/compare test from the | ||
336 | CD-ROM to the hard drive. | ||
337 | |||
338 | H. Release History | ||
339 | |||
340 | BETA-1.0 (12/23/95): | ||
341 | First Release | ||
342 | |||
343 | BETA-1.1 (12/28/95): | ||
344 | 1. Prevent advansys_detect() from being called twice. | ||
345 | 2. Add LILO 0xdeb[0-f] option to set 'asc_dbglvl'. | ||
346 | |||
347 | 1.2 (1/12/96): | ||
348 | 1. Prevent re-entrancy in the interrupt handler which | ||
349 | resulted in the driver hanging Linux. | ||
350 | 2. Fix problem that prevented ABP-940 cards from being | ||
351 | recognized on some PCI motherboards. | ||
352 | 3. Add support for the ABP-5140 PnP ISA card. | ||
353 | 4. Fix check condition return status. | ||
354 | 5. Add conditionally compiled code for Linux v1.3.X. | ||
355 | |||
356 | 1.3 (2/23/96): | ||
357 | 1. Fix problem in advansys_biosparam() that resulted in the | ||
358 | wrong drive geometry being returned for drives > 1GB with | ||
359 | extended translation enabled. | ||
360 | 2. Add additional tracing during device initialization. | ||
361 | 3. Change code that only applies to ISA PnP adapter. | ||
362 | 4. Eliminate 'make dep' warning. | ||
363 | 5. Try to fix problem with handling resets by increasing their | ||
364 | timeout value. | ||
365 | |||
366 | 1.4 (5/8/96): | ||
367 | 1. Change definitions to eliminate conflicts with other subsystems. | ||
368 | 2. Add versioning code for the shared interrupt changes. | ||
369 | 3. Eliminate problem in asc_rmqueue() with iterating after removing | ||
370 | a request. | ||
371 | 4. Remove reset request loop problem from the "Known Problems or | ||
372 | Issues" section. This problem was isolated and fixed in the | ||
373 | mid-level SCSI driver. | ||
374 | |||
375 | 1.5 (8/8/96): | ||
376 | 1. Add support for ABP-940U (PCI Ultra) adapter. | ||
377 | 2. Add support for IRQ sharing by setting the IRQF_SHARED flag for | ||
378 | request_irq and supplying a dev_id pointer to both request_irq() | ||
379 | and free_irq(). | ||
380 | 3. In AscSearchIOPortAddr11() restore a call to check_region() which | ||
381 | should be used before I/O port probing. | ||
382 | 4. Fix bug in asc_prt_hex() which resulted in the displaying | ||
383 | the wrong data. | ||
384 | 5. Incorporate miscellaneous Asc Library bug fixes and new microcode. | ||
385 | 6. Change driver versioning to be specific to each Linux sub-level. | ||
386 | 7. Change statistics gathering to be per adapter instead of global | ||
387 | to the driver. | ||
388 | 8. Add more information and statistics to the adapter /proc file: | ||
389 | /proc/scsi/advansys[0...]. | ||
390 | 9. Remove 'cmd_per_lun' from the "Known Problems or Issues" list. | ||
391 | This problem has been addressed with the SCSI mid-level changes | ||
392 | made in v1.3.89. The advansys_select_queue_depths() function | ||
393 | was added for the v1.3.89 changes. | ||
394 | |||
395 | 1.6 (9/10/96): | ||
396 | 1. Incorporate miscellaneous Asc Library bug fixes and new microcode. | ||
397 | |||
398 | 1.7 (9/25/96): | ||
399 | 1. Enable clustering and optimize the setting of the maximum number | ||
400 | of scatter gather elements for any particular board. Clustering | ||
401 | increases CPU utilization, but results in a relatively larger | ||
402 | increase in I/O throughput. | ||
403 | 2. Improve the performance of the request queuing functions by | ||
404 | adding a last pointer to the queue structure. | ||
405 | 3. Correct problems with reset and abort request handling that | ||
406 | could have hung or crashed Linux. | ||
407 | 4. Add more information to the adapter /proc file: | ||
408 | /proc/scsi/advansys[0...]. | ||
409 | 5. Remove the request timeout issue form the driver issues list. | ||
410 | 6. Miscellaneous documentation additions and changes. | ||
411 | |||
412 | 1.8 (10/4/96): | ||
413 | 1. Make changes to handle the new v2.1.0 kernel memory mapping | ||
414 | in which a kernel virtual address may not be equivalent to its | ||
415 | bus or DMA memory address. | ||
416 | 2. Change abort and reset request handling to make it yet even | ||
417 | more robust. | ||
418 | 3. Try to mitigate request starvation by sending ordered requests | ||
419 | to heavily loaded, tag queuing enabled devices. | ||
420 | 4. Maintain statistics on request response time. | ||
421 | 5. Add request response time statistics and other information to | ||
422 | the adapter /proc file: /proc/scsi/advansys[0...]. | ||
423 | |||
424 | 1.9 (10/21/96): | ||
425 | 1. Add conditionally compiled code (ASC_QUEUE_FLOW_CONTROL) to | ||
426 | make use of mid-level SCSI driver device queue depth flow | ||
427 | control mechanism. This will eliminate aborts caused by a | ||
428 | device being unable to keep up with requests and eliminate | ||
429 | repeat busy or QUEUE FULL status returned by a device. | ||
430 | 2. Incorporate miscellaneous Asc Library bug fixes. | ||
431 | 3. To allow the driver to work in kernels with broken module | ||
432 | support set 'cmd_per_lun' if the driver is compiled as a | ||
433 | module. This change affects kernels v1.3.89 to present. | ||
434 | 4. Remove PCI BIOS address from the driver banner. The PCI BIOS | ||
435 | is relocated by the motherboard BIOS and its new address can | ||
436 | not be determined by the driver. | ||
437 | 5. Add mid-level SCSI queue depth information to the adapter | ||
438 | /proc file: /proc/scsi/advansys[0...]. | ||
439 | |||
440 | 2.0 (11/14/96): | ||
441 | 1. Change allocation of global structures used for device | ||
442 | initialization to guarantee they are in DMA-able memory. | ||
443 | Previously when the driver was loaded as a module these | ||
444 | structures might not have been in DMA-able memory, causing | ||
445 | device initialization to fail. | ||
446 | |||
447 | 2.1 (12/30/96): | ||
448 | 1. In advansys_reset(), if the request is a synchronous reset | ||
449 | request, even if the request serial number has changed, then | ||
450 | complete the request. | ||
451 | 2. Add Asc Library bug fixes including new microcode. | ||
452 | 3. Clear inquiry buffer before using it. | ||
453 | 4. Correct ifdef typo. | ||
454 | |||
455 | 2.2 (1/15/97): | ||
456 | 1. Add Asc Library bug fixes including new microcode. | ||
457 | 2. Add synchronous data transfer rate information to the | ||
458 | adapter /proc file: /proc/scsi/advansys[0...]. | ||
459 | 3. Change ADVANSYS_DEBUG to be disabled by default. This | ||
460 | will reduce the size of the driver image, eliminate execution | ||
461 | overhead, and remove unneeded symbols from the kernel symbol | ||
462 | space that were previously added by the driver. | ||
463 | 4. Add new compile-time option ADVANSYS_ASSERT for assertion | ||
464 | code that used to be defined within ADVANSYS_DEBUG. This | ||
465 | option is enabled by default. | ||
466 | |||
467 | 2.8 (5/26/97): | ||
468 | 1. Change version number to 2.8 to synchronize the Linux driver | ||
469 | version numbering with other AdvanSys drivers. | ||
470 | 2. Reformat source files without tabs to present the same view | ||
471 | of the file to everyone regardless of the editor tab setting | ||
472 | being used. | ||
473 | 3. Add Asc Library bug fixes. | ||
474 | |||
475 | 3.1A (1/8/98): | ||
476 | 1. Change version number to 3.1 to indicate that support for | ||
477 | Ultra-Wide adapters (ABP-940UW) is included in this release. | ||
478 | 2. Add Asc Library (Narrow Board) bug fixes. | ||
479 | 3. Report an underrun condition with the host status byte set | ||
480 | to DID_UNDERRUN. Currently DID_UNDERRUN is defined to 0 which | ||
481 | causes the underrun condition to be ignored. When Linux defines | ||
482 | its own DID_UNDERRUN the constant defined in this file can be | ||
483 | removed. | ||
484 | 4. Add patch to AscWaitTixISRDone(). | ||
485 | 5. Add support for up to 16 different AdvanSys host adapter SCSI | ||
486 | channels in one system. This allows four cards with four channels | ||
487 | to be used in one system. | ||
488 | |||
489 | 3.1B (1/9/98): | ||
490 | 1. Handle that PCI register base addresses are not always page | ||
491 | aligned even though ioremap() requires that the address argument | ||
492 | be page aligned. | ||
493 | |||
494 | 3.1C (1/10/98): | ||
495 | 1. Update latest BIOS version checked for from the /proc file. | ||
496 | 2. Don't set microcode SDTR variable at initialization. Instead | ||
497 | wait until device capabilities have been detected from an Inquiry | ||
498 | command. | ||
499 | |||
500 | 3.1D (1/21/98): | ||
501 | 1. Improve performance when the driver is compiled as module by | ||
502 | allowing up to 64 scatter-gather elements instead of 8. | ||
503 | |||
504 | 3.1E (5/1/98): | ||
505 | 1. Set time delay in AscWaitTixISRDone() to 1000 ms. | ||
506 | 2. Include SMP locking changes. | ||
507 | 3. For v2.1.93 and newer kernels use CONFIG_PCI and new PCI BIOS | ||
508 | access functions. | ||
509 | 4. Update board serial number printing. | ||
510 | 5. Try allocating an IRQ both with and without the IRQF_DISABLED | ||
511 | flag set to allow IRQ sharing with drivers that do not set | ||
512 | the IRQF_DISABLED flag. Also display a more descriptive error | ||
513 | message if request_irq() fails. | ||
514 | 6. Update to latest Asc and Adv Libraries. | ||
515 | |||
516 | 3.2A (7/22/99): | ||
517 | 1. Update Adv Library to 4.16 which includes support for | ||
518 | the ASC38C0800 (Ultra2/LVD) IC. | ||
519 | |||
520 | 3.2B (8/23/99): | ||
521 | 1. Correct PCI compile time option for v2.1.93 and greater | ||
522 | kernels, advansys_info() string, and debug compile time | ||
523 | option. | ||
524 | 2. Correct DvcSleepMilliSecond() for v2.1.0 and greater | ||
525 | kernels. This caused an LVD detection/BIST problem problem | ||
526 | among other things. | ||
527 | 3. Sort PCI cards by PCI Bus, Slot, Function ascending order | ||
528 | to be consistent with the BIOS. | ||
529 | 4. Update to Asc Library S121 and Adv Library 5.2. | ||
530 | |||
531 | 3.2C (8/24/99): | ||
532 | 1. Correct PCI card detection bug introduced in 3.2B that | ||
533 | prevented PCI cards from being detected in kernels older | ||
534 | than v2.1.93. | ||
535 | |||
536 | 3.2D (8/26/99): | ||
537 | 1. Correct /proc device synchronous speed information display. | ||
538 | Also when re-negotiation is pending for a target device | ||
539 | note this condition with an * and footnote. | ||
540 | 2. Correct initialization problem with Ultra-Wide cards that | ||
541 | have a pre-3.2 BIOS. A microcode variable changed locations | ||
542 | in 3.2 and greater BIOSes which caused WDTR to be attempted | ||
543 | erroneously with drives that don't support WDTR. | ||
544 | |||
545 | 3.2E (8/30/99): | ||
546 | 1. Fix compile error caused by v2.3.13 PCI structure change. | ||
547 | 2. Remove field from ASCEEP_CONFIG that resulted in an EEPROM | ||
548 | checksum error for ISA cards. | ||
549 | 3. Remove ASC_QUEUE_FLOW_CONTROL conditional code. The mid-level | ||
550 | SCSI changes that it depended on were never included in Linux. | ||
551 | |||
552 | 3.2F (9/3/99): | ||
553 | 1. Handle new initial function code added in v2.3.16 for all | ||
554 | driver versions. | ||
555 | |||
556 | 3.2G (9/8/99): | ||
557 | 1. Fix PCI board detection in v2.3.13 and greater kernels. | ||
558 | 2. Fix comiple errors in v2.3.X with debugging enabled. | ||
559 | |||
560 | 3.2H (9/13/99): | ||
561 | 1. Add 64-bit address, long support for Alpha and UltraSPARC. | ||
562 | The driver has been verified to work on an Alpha system. | ||
563 | 2. Add partial byte order handling support for Power PC and | ||
564 | other big-endian platforms. This support has not yet been | ||
565 | completed or verified. | ||
566 | 3. For wide boards replace block zeroing of request and | ||
567 | scatter-gather structures with individual field initialization | ||
568 | to improve performance. | ||
569 | 4. Correct and clarify ROM BIOS version detection. | ||
570 | |||
571 | 3.2I (10/8/99): | ||
572 | 1. Update to Adv Library 5.4. | ||
573 | 2. Add v2.3.19 underrun reporting to asc_isr_callback() and | ||
574 | adv_isr_callback(). Remove DID_UNDERRUN constant and other | ||
575 | no longer needed code that previously documented the lack | ||
576 | of underrun handling. | ||
577 | |||
578 | 3.2J (10/14/99): | ||
579 | 1. Eliminate compile errors for v2.0 and earlier kernels. | ||
580 | |||
581 | 3.2K (11/15/99): | ||
582 | 1. Correct debug compile error in asc_prt_adv_scsi_req_q(). | ||
583 | 2. Update Adv Library to 5.5. | ||
584 | 3. Add ifdef handling for /proc changes added in v2.3.28. | ||
585 | 4. Increase Wide board scatter-gather list maximum length to | ||
586 | 255 when the driver is compiled into the kernel. | ||
587 | |||
588 | 3.2L (11/18/99): | ||
589 | 1. Fix bug in adv_get_sglist() that caused an assertion failure | ||
590 | at line 7475. The reqp->sgblkp pointer must be initialized | ||
591 | to NULL in adv_get_sglist(). | ||
592 | |||
593 | 3.2M (11/29/99): | ||
594 | 1. Really fix bug in adv_get_sglist(). | ||
595 | 2. Incorporate v2.3.29 changes into driver. | ||
596 | |||
597 | 3.2N (4/1/00): | ||
598 | 1. Add CONFIG_ISA ifdef code. | ||
599 | 2. Include advansys_interrupts_enabled name change patch. | ||
600 | 3. For >= v2.3.28 use new SCSI error handling with new function | ||
601 | advansys_eh_bus_reset(). Don't include an abort function | ||
602 | because of base library limitations. | ||
603 | 4. For >= v2.3.28 use per board lock instead of io_request_lock. | ||
604 | 5. For >= v2.3.28 eliminate advansys_command() and | ||
605 | advansys_command_done(). | ||
606 | 6. Add some changes for PowerPC (Big Endian) support, but it isn't | ||
607 | working yet. | ||
608 | 7. Fix "nonexistent resource free" problem that occurred on a module | ||
609 | unload for boards with an I/O space >= 255. The 'n_io_port' field | ||
610 | is only one byte and can not be used to hold an ioport length more | ||
611 | than 255. | ||
612 | |||
613 | 3.3A (4/4/00): | ||
614 | 1. Update to Adv Library 5.8. | ||
615 | 2. For wide cards add support for CDBs up to 16 bytes. | ||
616 | 3. Eliminate warnings when CONFIG_PROC_FS is not defined. | ||
617 | |||
618 | 3.3B (5/1/00): | ||
619 | 1. Support for PowerPC (Big Endian) wide cards. Narrow cards | ||
620 | still need work. | ||
621 | 2. Change bitfields to shift and mask access for endian | ||
622 | portability. | ||
623 | |||
624 | 3.3C (10/13/00): | ||
625 | 1. Update for latest 2.4 kernel. | ||
626 | 2. Test ABP-480 CardBus support in 2.4 kernel - works! | ||
627 | 3. Update to Asc Library S123. | ||
628 | 4. Update to Adv Library 5.12. | ||
629 | |||
630 | 3.3D (11/22/00): | ||
631 | 1. Update for latest 2.4 kernel. | ||
632 | 2. Create patches for 2.2 and 2.4 kernels. | ||
633 | |||
634 | 3.3E (1/9/01): | ||
635 | 1. Now that 2.4 is released remove ifdef code for kernel versions | ||
636 | less than 2.2. The driver is now only supported in kernels 2.2, | ||
637 | 2.4, and greater. | ||
638 | 2. Add code to release and acquire the io_request_lock in | ||
639 | the driver entrypoint functions: advansys_detect and | ||
640 | advansys_queuecommand. In kernel 2.4 the SCSI mid-level driver | ||
641 | still holds the io_request_lock on entry to SCSI low-level drivers. | ||
642 | This was supposed to be removed before 2.4 was released but never | ||
643 | happened. When the mid-level SCSI driver is changed all references | ||
644 | to the io_request_lock should be removed from the driver. | ||
645 | 3. Simplify error handling by removing advansys_abort(), | ||
646 | AscAbortSRB(), AscResetDevice(). SCSI bus reset requests are | ||
647 | now handled by resetting the SCSI bus and fully re-initializing | ||
648 | the chip. This simple method of error recovery has proven to work | ||
649 | most reliably after attempts at different methods. Also now only | ||
650 | support the "new" error handling method and remove the obsolete | ||
651 | error handling interface. | ||
652 | 4. Fix debug build errors. | ||
653 | |||
654 | 3.3F (1/24/01): | ||
655 | 1. Merge with ConnectCom version from Andy Kellner which | ||
656 | updates Adv Library to 5.14. | ||
657 | 2. Make PowerPC (Big Endian) work for narrow cards and | ||
658 | fix problems writing EEPROM for wide cards. | ||
659 | 3. Remove interrupts_enabled assertion function. | ||
660 | |||
661 | 3.3G (2/16/01): | ||
662 | 1. Return an error from narrow boards if passed a 16 byte | ||
663 | CDB. The wide board can already handle 16 byte CDBs. | ||
664 | |||
665 | 3.3GJ (4/15/02): | ||
666 | 1. hacks for lk 2.5 series (D. Gilbert) | ||
667 | |||
668 | 3.3GJD (10/14/02): | ||
669 | 1. change select_queue_depths to slave_configure | ||
670 | 2. make cmd_per_lun be sane again | ||
671 | |||
672 | 3.3K [2004/06/24]: | ||
673 | 1. continuing cleanup for lk 2.6 series | ||
674 | 2. Fix problem in lk 2.6.7-bk2 that broke PCI wide cards | ||
675 | 3. Fix problem that oopsed ISA cards | ||
676 | |||
677 | I. Known Problems/Fix List (XXX) | ||
678 | |||
679 | 1. Need to add memory mapping workaround. Test the memory mapping. | ||
680 | If it doesn't work revert to I/O port access. Can a test be done | ||
681 | safely? | ||
682 | 2. Handle an interrupt not working. Keep an interrupt counter in | ||
683 | the interrupt handler. In the timeout function if the interrupt | ||
684 | has not occurred then print a message and run in polled mode. | ||
685 | 3. Allow bus type scanning order to be changed. | ||
686 | 4. Need to add support for target mode commands, cf. CAM XPT. | ||
687 | |||
688 | J. Credits (Chronological Order) | ||
689 | |||
690 | Bob Frey <bfrey@turbolinux.com.cn> wrote the AdvanSys SCSI driver | ||
691 | and maintained it up to 3.3F. He continues to answer questions | ||
692 | and help maintain the driver. | ||
693 | |||
694 | Nathan Hartwell <mage@cdc3.cdc.net> provided the directions and | ||
695 | basis for the Linux v1.3.X changes which were included in the | ||
696 | 1.2 release. | ||
697 | |||
698 | Thomas E Zerucha <zerucha@shell.portal.com> pointed out a bug | ||
699 | in advansys_biosparam() which was fixed in the 1.3 release. | ||
700 | |||
701 | Erik Ratcliffe <erik@caldera.com> has done testing of the | ||
702 | AdvanSys driver in the Caldera releases. | ||
703 | |||
704 | Rik van Riel <H.H.vanRiel@fys.ruu.nl> provided a patch to | ||
705 | AscWaitTixISRDone() which he found necessary to make the | ||
706 | driver work with a SCSI-1 disk. | ||
707 | |||
708 | Mark Moran <mmoran@mmoran.com> has helped test Ultra-Wide | ||
709 | support in the 3.1A driver. | ||
710 | |||
711 | Doug Gilbert <dgilbert@interlog.com> has made changes and | ||
712 | suggestions to improve the driver and done a lot of testing. | ||
713 | |||
714 | Ken Mort <ken@mort.net> reported a DEBUG compile bug fixed | ||
715 | in 3.2K. | ||
716 | |||
717 | Tom Rini <trini@kernel.crashing.org> provided the CONFIG_ISA | ||
718 | patch and helped with PowerPC wide and narrow board support. | ||
719 | |||
720 | Philip Blundell <philb@gnu.org> provided an | ||
721 | advansys_interrupts_enabled patch. | ||
722 | |||
723 | Dave Jones <dave@denial.force9.co.uk> reported the compiler | ||
724 | warnings generated when CONFIG_PROC_FS was not defined in | ||
725 | the 3.2M driver. | ||
726 | |||
727 | Jerry Quinn <jlquinn@us.ibm.com> fixed PowerPC support (endian | ||
728 | problems) for wide cards. | ||
729 | |||
730 | Bryan Henderson <bryanh@giraffe-data.com> helped debug narrow | ||
731 | card error handling. | ||
732 | |||
733 | Manuel Veloso <veloso@pobox.com> worked hard on PowerPC narrow | ||
734 | board support and fixed a bug in AscGetEEPConfig(). | ||
735 | |||
736 | Arnaldo Carvalho de Melo <acme@conectiva.com.br> made | ||
737 | save_flags/restore_flags changes. | ||
738 | |||
739 | Andy Kellner <AKellner@connectcom.net> continues the Advansys SCSI | ||
740 | driver development for ConnectCom (Version > 3.3F). | ||
741 | |||
742 | K. ConnectCom (AdvanSys) Contact Information | ||
743 | |||
744 | Mail: ConnectCom Solutions, Inc. | ||
745 | 1150 Ringwood Court | ||
746 | San Jose, CA 95131 | ||
747 | Operator/Sales: 1-408-383-9400 | ||
748 | FAX: 1-408-383-9612 | ||
749 | Tech Support: 1-408-467-2930 | ||
750 | Tech Support E-Mail: linux@connectcom.net | ||
751 | FTP Site: ftp.connectcom.net (login: anonymous) | ||
752 | Web Site: http://www.connectcom.net | ||
753 | |||
754 | */ | ||
755 | |||
756 | /* | ||
757 | * --- Linux Include Files | ||
758 | */ | ||
759 | |||
760 | #include <linux/module.h> | 23 | #include <linux/module.h> |
761 | #include <linux/string.h> | 24 | #include <linux/string.h> |
762 | #include <linux/kernel.h> | 25 | #include <linux/kernel.h> |
@@ -785,20 +48,29 @@ | |||
785 | #include <scsi/scsi.h> | 48 | #include <scsi/scsi.h> |
786 | #include <scsi/scsi_host.h> | 49 | #include <scsi/scsi_host.h> |
787 | 50 | ||
788 | /* FIXME: (by jejb@steeleye.com) | 51 | /* FIXME: |
789 | * | 52 | * |
790 | * Although all of the necessary command mapping places have the | 53 | * 1. Although all of the necessary command mapping places have the |
791 | * appropriate dma_map.. APIs, the driver still processes its internal | 54 | * appropriate dma_map.. APIs, the driver still processes its internal |
792 | * queue using bus_to_virt() and virt_to_bus() which are illegal under | 55 | * queue using bus_to_virt() and virt_to_bus() which are illegal under |
793 | * the API. The entire queue processing structure will need to be | 56 | * the API. The entire queue processing structure will need to be |
794 | * altered to fix this. | 57 | * altered to fix this. |
58 | * 2. Need to add memory mapping workaround. Test the memory mapping. | ||
59 | * If it doesn't work revert to I/O port access. Can a test be done | ||
60 | * safely? | ||
61 | * 3. Handle an interrupt not working. Keep an interrupt counter in | ||
62 | * the interrupt handler. In the timeout function if the interrupt | ||
63 | * has not occurred then print a message and run in polled mode. | ||
64 | * 4. Need to add support for target mode commands, cf. CAM XPT. | ||
65 | * 5. check DMA mapping functions for failure | ||
66 | * 6. Remove internal queueing | ||
67 | * 7. Use scsi_transport_spi | ||
68 | * 8. advansys_info is not safe against multiple simultaneous callers | ||
69 | * 9. Kill boardp->id | ||
70 | * 10. Add module_param to override ISA/VLB ioport array | ||
795 | */ | 71 | */ |
796 | #warning this driver is still not properly converted to the DMA API | 72 | #warning this driver is still not properly converted to the DMA API |
797 | 73 | ||
798 | /* | ||
799 | * --- Driver Options | ||
800 | */ | ||
801 | |||
802 | /* Enable driver assertions. */ | 74 | /* Enable driver assertions. */ |
803 | #define ADVANSYS_ASSERT | 75 | #define ADVANSYS_ASSERT |
804 | 76 | ||