Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Matthew Wilcox and committed by
James Bottomley
4bd6d7f3 d68f4321

+262 -747
+243
Documentation/scsi/advansys.txt
··· 1 + AdvanSys (Advanced System Products, Inc.) manufactures the following 2 + RISC-based, Bus-Mastering, Fast (10 Mhz) and Ultra (20 Mhz) Narrow 3 + (8-bit transfer) SCSI Host Adapters for the ISA, EISA, VL, and PCI 4 + buses and RISC-based, Bus-Mastering, Ultra (20 Mhz) Wide (16-bit 5 + transfer) SCSI Host Adapters for the PCI bus. 6 + 7 + The CDB counts below indicate the number of SCSI CDB (Command 8 + Descriptor Block) requests that can be stored in the RISC chip 9 + cache and board LRAM. A CDB is a single SCSI command. The driver 10 + detect routine will display the number of CDBs available for each 11 + adapter detected. The number of CDBs used by the driver can be 12 + lowered in the BIOS by changing the 'Host Queue Size' adapter setting. 13 + 14 + Laptop Products: 15 + ABP-480 - Bus-Master CardBus (16 CDB) 16 + 17 + Connectivity Products: 18 + ABP510/5150 - Bus-Master ISA (240 CDB) 19 + ABP5140 - Bus-Master ISA PnP (16 CDB) 20 + ABP5142 - Bus-Master ISA PnP with floppy (16 CDB) 21 + ABP902/3902 - Bus-Master PCI (16 CDB) 22 + ABP3905 - Bus-Master PCI (16 CDB) 23 + ABP915 - Bus-Master PCI (16 CDB) 24 + ABP920 - Bus-Master PCI (16 CDB) 25 + ABP3922 - Bus-Master PCI (16 CDB) 26 + ABP3925 - Bus-Master PCI (16 CDB) 27 + ABP930 - Bus-Master PCI (16 CDB) 28 + ABP930U - Bus-Master PCI Ultra (16 CDB) 29 + ABP930UA - Bus-Master PCI Ultra (16 CDB) 30 + ABP960 - Bus-Master PCI MAC/PC (16 CDB) 31 + ABP960U - Bus-Master PCI MAC/PC Ultra (16 CDB) 32 + 33 + Single Channel Products: 34 + ABP542 - Bus-Master ISA with floppy (240 CDB) 35 + ABP742 - Bus-Master EISA (240 CDB) 36 + ABP842 - Bus-Master VL (240 CDB) 37 + ABP940 - Bus-Master PCI (240 CDB) 38 + ABP940U - Bus-Master PCI Ultra (240 CDB) 39 + ABP940UA/3940UA - Bus-Master PCI Ultra (240 CDB) 40 + ABP970 - Bus-Master PCI MAC/PC (240 CDB) 41 + ABP970U - Bus-Master PCI MAC/PC Ultra (240 CDB) 42 + ABP3960UA - Bus-Master PCI MAC/PC Ultra (240 CDB) 43 + ABP940UW/3940UW - Bus-Master PCI Ultra-Wide (253 CDB) 44 + ABP970UW - Bus-Master PCI MAC/PC Ultra-Wide (253 CDB) 45 + ABP3940U2W - Bus-Master PCI LVD/Ultra2-Wide (253 CDB) 46 + 47 + Multi-Channel Products: 48 + ABP752 - Dual Channel Bus-Master EISA (240 CDB Per Channel) 49 + ABP852 - Dual Channel Bus-Master VL (240 CDB Per Channel) 50 + ABP950 - Dual Channel Bus-Master PCI (240 CDB Per Channel) 51 + ABP950UW - Dual Channel Bus-Master PCI Ultra-Wide (253 CDB Per Channel) 52 + ABP980 - Four Channel Bus-Master PCI (240 CDB Per Channel) 53 + ABP980U - Four Channel Bus-Master PCI Ultra (240 CDB Per Channel) 54 + ABP980UA/3980UA - Four Channel Bus-Master PCI Ultra (16 CDB Per Chan.) 55 + ABP3950U2W - Bus-Master PCI LVD/Ultra2-Wide and Ultra-Wide (253 CDB) 56 + ABP3950U3W - Bus-Master PCI Dual LVD2/Ultra3-Wide (253 CDB) 57 + 58 + Driver Compile Time Options and Debugging 59 + 60 + The following constants can be defined in the source file. 61 + 62 + 1. ADVANSYS_ASSERT - Enable driver assertions (Def: Enabled) 63 + 64 + Enabling this option adds assertion logic statements to the 65 + driver. If an assertion fails a message will be displayed to 66 + the console, but the system will continue to operate. Any 67 + assertions encountered should be reported to the person 68 + responsible for the driver. Assertion statements may proactively 69 + detect problems with the driver and facilitate fixing these 70 + problems. Enabling assertions will add a small overhead to the 71 + execution of the driver. 72 + 73 + 2. ADVANSYS_DEBUG - Enable driver debugging (Def: Disabled) 74 + 75 + Enabling this option adds tracing functions to the driver and the 76 + ability to set a driver tracing level at boot time. This option is 77 + very useful for debugging the driver, but it will add to the size 78 + of the driver execution image and add overhead to the execution of 79 + the driver. 80 + 81 + The amount of debugging output can be controlled with the global 82 + variable 'asc_dbglvl'. The higher the number the more output. By 83 + default the debug level is 0. 84 + 85 + If the driver is loaded at boot time and the LILO Driver Option 86 + is included in the system, the debug level can be changed by 87 + specifying a 5th (ASC_NUM_IOPORT_PROBE + 1) I/O Port. The 88 + first three hex digits of the pseudo I/O Port must be set to 89 + 'deb' and the fourth hex digit specifies the debug level: 0 - F. 90 + The following command line will look for an adapter at 0x330 91 + and set the debug level to 2. 92 + 93 + linux advansys=0x330,0,0,0,0xdeb2 94 + 95 + If the driver is built as a loadable module this variable can be 96 + defined when the driver is loaded. The following insmod command 97 + will set the debug level to one. 98 + 99 + insmod advansys.o asc_dbglvl=1 100 + 101 + Debugging Message Levels: 102 + 0: Errors Only 103 + 1: High-Level Tracing 104 + 2-N: Verbose Tracing 105 + 106 + To enable debug output to console, please make sure that: 107 + 108 + a. System and kernel logging is enabled (syslogd, klogd running). 109 + b. Kernel messages are routed to console output. Check 110 + /etc/syslog.conf for an entry similar to this: 111 + 112 + kern.* /dev/console 113 + 114 + c. klogd is started with the appropriate -c parameter 115 + (e.g. klogd -c 8) 116 + 117 + This will cause printk() messages to be be displayed on the 118 + current console. Refer to the klogd(8) and syslogd(8) man pages 119 + for details. 120 + 121 + Alternatively you can enable printk() to console with this 122 + program. However, this is not the 'official' way to do this. 123 + Debug output is logged in /var/log/messages. 124 + 125 + main() 126 + { 127 + syscall(103, 7, 0, 0); 128 + } 129 + 130 + Increasing LOG_BUF_LEN in kernel/printk.c to something like 131 + 40960 allows more debug messages to be buffered in the kernel 132 + and written to the console or log file. 133 + 134 + 3. ADVANSYS_STATS - Enable statistics (Def: Enabled) 135 + 136 + Enabling this option adds statistics collection and display 137 + through /proc to the driver. The information is useful for 138 + monitoring driver and device performance. It will add to the 139 + size of the driver execution image and add minor overhead to 140 + the execution of the driver. 141 + 142 + Statistics are maintained on a per adapter basis. Driver entry 143 + point call counts and transfer size counts are maintained. 144 + Statistics are only available for kernels greater than or equal 145 + to v1.3.0 with the CONFIG_PROC_FS (/proc) file system configured. 146 + 147 + AdvanSys SCSI adapter files have the following path name format: 148 + 149 + /proc/scsi/advansys/{0,1,2,3,...} 150 + 151 + This information can be displayed with cat. For example: 152 + 153 + cat /proc/scsi/advansys/0 154 + 155 + When ADVANSYS_STATS is not defined the AdvanSys /proc files only 156 + contain adapter and device configuration information. 157 + 158 + Driver LILO Option 159 + 160 + If init/main.c is modified as described in the 'Directions for Adding 161 + the AdvanSys Driver to Linux' section (B.4.) above, the driver will 162 + recognize the 'advansys' LILO command line and /etc/lilo.conf option. 163 + This option can be used to either disable I/O port scanning or to limit 164 + scanning to 1 - 4 I/O ports. Regardless of the option setting EISA and 165 + PCI boards will still be searched for and detected. This option only 166 + affects searching for ISA and VL boards. 167 + 168 + Examples: 169 + 1. Eliminate I/O port scanning: 170 + boot: linux advansys= 171 + or 172 + boot: linux advansys=0x0 173 + 2. Limit I/O port scanning to one I/O port: 174 + boot: linux advansys=0x110 175 + 3. Limit I/O port scanning to four I/O ports: 176 + boot: linux advansys=0x110,0x210,0x230,0x330 177 + 178 + For a loadable module the same effect can be achieved by setting 179 + the 'asc_iopflag' variable and 'asc_ioport' array when loading 180 + the driver, e.g. 181 + 182 + insmod advansys.o asc_iopflag=1 asc_ioport=0x110,0x330 183 + 184 + If ADVANSYS_DEBUG is defined a 5th (ASC_NUM_IOPORT_PROBE + 1) 185 + I/O Port may be added to specify the driver debug level. Refer to 186 + the 'Driver Compile Time Options and Debugging' section above for 187 + more information. 188 + 189 + Credits (Chronological Order) 190 + 191 + Bob Frey <bfrey@turbolinux.com.cn> wrote the AdvanSys SCSI driver 192 + and maintained it up to 3.3F. He continues to answer questions 193 + and help maintain the driver. 194 + 195 + Nathan Hartwell <mage@cdc3.cdc.net> provided the directions and 196 + basis for the Linux v1.3.X changes which were included in the 197 + 1.2 release. 198 + 199 + Thomas E Zerucha <zerucha@shell.portal.com> pointed out a bug 200 + in advansys_biosparam() which was fixed in the 1.3 release. 201 + 202 + Erik Ratcliffe <erik@caldera.com> has done testing of the 203 + AdvanSys driver in the Caldera releases. 204 + 205 + Rik van Riel <H.H.vanRiel@fys.ruu.nl> provided a patch to 206 + AscWaitTixISRDone() which he found necessary to make the 207 + driver work with a SCSI-1 disk. 208 + 209 + Mark Moran <mmoran@mmoran.com> has helped test Ultra-Wide 210 + support in the 3.1A driver. 211 + 212 + Doug Gilbert <dgilbert@interlog.com> has made changes and 213 + suggestions to improve the driver and done a lot of testing. 214 + 215 + Ken Mort <ken@mort.net> reported a DEBUG compile bug fixed 216 + in 3.2K. 217 + 218 + Tom Rini <trini@kernel.crashing.org> provided the CONFIG_ISA 219 + patch and helped with PowerPC wide and narrow board support. 220 + 221 + Philip Blundell <philb@gnu.org> provided an 222 + advansys_interrupts_enabled patch. 223 + 224 + Dave Jones <dave@denial.force9.co.uk> reported the compiler 225 + warnings generated when CONFIG_PROC_FS was not defined in 226 + the 3.2M driver. 227 + 228 + Jerry Quinn <jlquinn@us.ibm.com> fixed PowerPC support (endian 229 + problems) for wide cards. 230 + 231 + Bryan Henderson <bryanh@giraffe-data.com> helped debug narrow 232 + card error handling. 233 + 234 + Manuel Veloso <veloso@pobox.com> worked hard on PowerPC narrow 235 + board support and fixed a bug in AscGetEEPConfig(). 236 + 237 + Arnaldo Carvalho de Melo <acme@conectiva.com.br> made 238 + save_flags/restore_flags changes. 239 + 240 + Andy Kellner <AKellner@connectcom.net> continued the Advansys SCSI 241 + driver development for ConnectCom (Version > 3.3F). 242 + 243 + Ken Witherow for extensive testing during the development of version 3.4.
+19 -747
drivers/scsi/advansys.c
··· 20 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 23 #include <linux/module.h> 761 24 #include <linux/string.h> 762 25 #include <linux/kernel.h> ··· 48 785 #include <scsi/scsi.h> 49 786 #include <scsi/scsi_host.h> 50 787 51 - /* FIXME: (by jejb@steeleye.com) 788 + /* FIXME: 52 789 * 53 - * Although all of the necessary command mapping places have the 54 - * appropriate dma_map.. APIs, the driver still processes its internal 55 - * queue using bus_to_virt() and virt_to_bus() which are illegal under 56 - * the API. The entire queue processing structure will need to be 57 - * altered to fix this. 790 + * 1. Although all of the necessary command mapping places have the 791 + * appropriate dma_map.. APIs, the driver still processes its internal 792 + * 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 794 + * altered to fix this. 795 + * 2. Need to add memory mapping workaround. Test the memory mapping. 796 + * If it doesn't work revert to I/O port access. Can a test be done 797 + * safely? 798 + * 3. Handle an interrupt not working. Keep an interrupt counter in 799 + * the interrupt handler. In the timeout function if the interrupt 800 + * has not occurred then print a message and run in polled mode. 801 + * 4. Need to add support for target mode commands, cf. CAM XPT. 802 + * 5. check DMA mapping functions for failure 803 + * 6. Remove internal queueing 804 + * 7. Use scsi_transport_spi 805 + * 8. advansys_info is not safe against multiple simultaneous callers 806 + * 9. Kill boardp->id 807 + * 10. Add module_param to override ISA/VLB ioport array 58 808 */ 59 809 #warning this driver is still not properly converted to the DMA API 60 - 61 - /* 62 - * --- Driver Options 63 - */ 64 810 65 811 /* Enable driver assertions. */ 66 812 #define ADVANSYS_ASSERT