1 /****************************************************************************** 2 * QLOGIC LINUX SOFTWARE 3 * 4 * QLogic QLA1280 (Ultra2) and QLA12160 (Ultra3) SCSI driver 5 * Copyright (C) 2000 Qlogic Corporation (www.qlogic.com) 6 * Copyright (C) 2001-2004 Jes Sorensen, Wild Open Source Inc. 7 * Copyright (C) 2003-2004 Christoph Hellwig 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License as published by the 11 * Free Software Foundation; either version 2, or (at your option) any 12 * later version. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 ******************************************************************************/ 20 #define QLA1280_VERSION "3.26" 21 /***************************************************************************** 22 Revision History: 23 Rev 3.26, January 16, 2006 Jes Sorensen 24 - Ditch all < 2.6 support 25 Rev 3.25.1, February 10, 2005 Christoph Hellwig 26 - use pci_map_single to map non-S/G requests 27 - remove qla1280_proc_info 28 Rev 3.25, September 28, 2004, Christoph Hellwig 29 - add support for ISP1020/1040 30 - don't include "scsi.h" anymore for 2.6.x 31 Rev 3.24.4 June 7, 2004 Christoph Hellwig 32 - restructure firmware loading, cleanup initialization code 33 - prepare support for ISP1020/1040 chips 34 Rev 3.24.3 January 19, 2004, Jes Sorensen 35 - Handle PCI DMA mask settings correctly 36 - Correct order of error handling in probe_one, free_irq should not 37 be called if request_irq failed 38 Rev 3.24.2 January 19, 2004, James Bottomley & Andrew Vasquez 39 - Big endian fixes (James) 40 - Remove bogus IOCB content on zero data transfer commands (Andrew) 41 Rev 3.24.1 January 5, 2004, Jes Sorensen 42 - Initialize completion queue to avoid OOPS on probe 43 - Handle interrupts during mailbox testing 44 Rev 3.24 November 17, 2003, Christoph Hellwig 45 - use struct list_head for completion queue 46 - avoid old Scsi_FOO typedefs 47 - cleanup 2.4 compat glue a bit 48 - use <scsi/scsi_*.h> headers on 2.6 instead of "scsi.h" 49 - make initialization for memory mapped vs port I/O more similar 50 - remove broken pci config space manipulation 51 - kill more cruft 52 - this is an almost perfect 2.6 scsi driver now! ;) 53 Rev 3.23.39 December 17, 2003, Jes Sorensen 54 - Delete completion queue from srb if mailbox command failed to 55 to avoid qla1280_done completeting qla1280_error_action's 56 obsolete context 57 - Reduce arguments for qla1280_done 58 Rev 3.23.38 October 18, 2003, Christoph Hellwig 59 - Convert to new-style hotplugable driver for 2.6 60 - Fix missing scsi_unregister/scsi_host_put on HBA removal 61 - Kill some more cruft 62 Rev 3.23.37 October 1, 2003, Jes Sorensen 63 - Make MMIO depend on CONFIG_X86_VISWS instead of yet another 64 random CONFIG option 65 - Clean up locking in probe path 66 Rev 3.23.36 October 1, 2003, Christoph Hellwig 67 - queuecommand only ever receives new commands - clear flags 68 - Reintegrate lost fixes from Linux 2.5 69 Rev 3.23.35 August 14, 2003, Jes Sorensen 70 - Build against 2.6 71 Rev 3.23.34 July 23, 2003, Jes Sorensen 72 - Remove pointless TRUE/FALSE macros 73 - Clean up vchan handling 74 Rev 3.23.33 July 3, 2003, Jes Sorensen 75 - Don't define register access macros before define determining MMIO. 76 This just happend to work out on ia64 but not elsewhere. 77 - Don't try and read from the card while it is in reset as 78 it won't respond and causes an MCA 79 Rev 3.23.32 June 23, 2003, Jes Sorensen 80 - Basic support for boot time arguments 81 Rev 3.23.31 June 8, 2003, Jes Sorensen 82 - Reduce boot time messages 83 Rev 3.23.30 June 6, 2003, Jes Sorensen 84 - Do not enable sync/wide/ppr before it has been determined 85 that the target device actually supports it 86 - Enable DMA arbitration for multi channel controllers 87 Rev 3.23.29 June 3, 2003, Jes Sorensen 88 - Port to 2.5.69 89 Rev 3.23.28 June 3, 2003, Jes Sorensen 90 - Eliminate duplicate marker commands on bus resets 91 - Handle outstanding commands appropriately on bus/device resets 92 Rev 3.23.27 May 28, 2003, Jes Sorensen 93 - Remove bogus input queue code, let the Linux SCSI layer do the work 94 - Clean up NVRAM handling, only read it once from the card 95 - Add a number of missing default nvram parameters 96 Rev 3.23.26 Beta May 28, 2003, Jes Sorensen 97 - Use completion queue for mailbox commands instead of busy wait 98 Rev 3.23.25 Beta May 27, 2003, James Bottomley 99 - Migrate to use new error handling code 100 Rev 3.23.24 Beta May 21, 2003, James Bottomley 101 - Big endian support 102 - Cleanup data direction code 103 Rev 3.23.23 Beta May 12, 2003, Jes Sorensen 104 - Switch to using MMIO instead of PIO 105 Rev 3.23.22 Beta April 15, 2003, Jes Sorensen 106 - Fix PCI parity problem with 12160 during reset. 107 Rev 3.23.21 Beta April 14, 2003, Jes Sorensen 108 - Use pci_map_page()/pci_unmap_page() instead of map_single version. 109 Rev 3.23.20 Beta April 9, 2003, Jes Sorensen 110 - Remove < 2.4.x support 111 - Introduce HOST_LOCK to make the spin lock changes portable. 112 - Remove a bunch of idiotic and unnecessary typedef's 113 - Kill all leftovers of target-mode support which never worked anyway 114 Rev 3.23.19 Beta April 11, 2002, Linus Torvalds 115 - Do qla1280_pci_config() before calling request_irq() and 116 request_region() 117 - Use pci_dma_hi32() to handle upper word of DMA addresses instead 118 of large shifts 119 - Hand correct arguments to free_irq() in case of failure 120 Rev 3.23.18 Beta April 11, 2002, Jes Sorensen 121 - Run source through Lindent and clean up the output 122 Rev 3.23.17 Beta April 11, 2002, Jes Sorensen 123 - Update SCSI firmware to qla1280 v8.15.00 and qla12160 v10.04.32 124 Rev 3.23.16 Beta March 19, 2002, Jes Sorensen 125 - Rely on mailbox commands generating interrupts - do not 126 run qla1280_isr() from ql1280_mailbox_command() 127 - Remove device_reg_t 128 - Integrate ql12160_set_target_parameters() with 1280 version 129 - Make qla1280_setup() non static 130 - Do not call qla1280_check_for_dead_scsi_bus() on every I/O request 131 sent to the card - this command pauses the firmare!!! 132 Rev 3.23.15 Beta March 19, 2002, Jes Sorensen 133 - Clean up qla1280.h - remove obsolete QL_DEBUG_LEVEL_x definitions 134 - Remove a pile of pointless and confusing (srb_t **) and 135 (scsi_lu_t *) typecasts 136 - Explicit mark that we do not use the new error handling (for now) 137 - Remove scsi_qla_host_t and use 'struct' instead 138 - Remove in_abort, watchdog_enabled, dpc, dpc_sched, bios_enabled, 139 pci_64bit_slot flags which weren't used for anything anyway 140 - Grab host->host_lock while calling qla1280_isr() from abort() 141 - Use spin_lock()/spin_unlock() in qla1280_intr_handler() - we 142 do not need to save/restore flags in the interrupt handler 143 - Enable interrupts early (before any mailbox access) in preparation 144 for cleaning up the mailbox handling 145 Rev 3.23.14 Beta March 14, 2002, Jes Sorensen 146 - Further cleanups. Remove all trace of QL_DEBUG_LEVEL_x and replace 147 it with proper use of dprintk(). 148 - Make qla1280_print_scsi_cmd() and qla1280_dump_buffer() both take 149 a debug level argument to determine if data is to be printed 150 - Add KERN_* info to printk() 151 Rev 3.23.13 Beta March 14, 2002, Jes Sorensen 152 - Significant cosmetic cleanups 153 - Change debug code to use dprintk() and remove #if mess 154 Rev 3.23.12 Beta March 13, 2002, Jes Sorensen 155 - More cosmetic cleanups, fix places treating return as function 156 - use cpu_relax() in qla1280_debounce_register() 157 Rev 3.23.11 Beta March 13, 2002, Jes Sorensen 158 - Make it compile under 2.5.5 159 Rev 3.23.10 Beta October 1, 2001, Jes Sorensen 160 - Do no typecast short * to long * in QL1280BoardTbl, this 161 broke miserably on big endian boxes 162 Rev 3.23.9 Beta September 30, 2001, Jes Sorensen 163 - Remove pre 2.2 hack for checking for reentrance in interrupt handler 164 - Make data types used to receive from SCSI_{BUS,TCN,LUN}_32 165 unsigned int to match the types from struct scsi_cmnd 166 Rev 3.23.8 Beta September 29, 2001, Jes Sorensen 167 - Remove bogus timer_t typedef from qla1280.h 168 - Remove obsolete pre 2.2 PCI setup code, use proper #define's 169 for PCI_ values, call pci_set_master() 170 - Fix memleak of qla1280_buffer on module unload 171 - Only compile module parsing code #ifdef MODULE - should be 172 changed to use individual MODULE_PARM's later 173 - Remove dummy_buffer that was never modified nor printed 174 - ENTER()/LEAVE() are noops unless QL_DEBUG_LEVEL_3, hence remove 175 #ifdef QL_DEBUG_LEVEL_3/#endif around ENTER()/LEAVE() calls 176 - Remove \r from print statements, this is Linux, not DOS 177 - Remove obsolete QLA1280_{SCSILU,INTR,RING}_{LOCK,UNLOCK} 178 dummy macros 179 - Remove C++ compile hack in header file as Linux driver are not 180 supposed to be compiled as C++ 181 - Kill MS_64BITS macro as it makes the code more readable 182 - Remove unnecessary flags.in_interrupts bit 183 Rev 3.23.7 Beta August 20, 2001, Jes Sorensen 184 - Dont' check for set flags on q->q_flag one by one in qla1280_next() 185 - Check whether the interrupt was generated by the QLA1280 before 186 doing any processing 187 - qla1280_status_entry(): Only zero out part of sense_buffer that 188 is not being copied into 189 - Remove more superflouous typecasts 190 - qla1280_32bit_start_scsi() replace home-brew memcpy() with memcpy() 191 Rev 3.23.6 Beta August 20, 2001, Tony Luck, Intel 192 - Don't walk the entire list in qla1280_putq_t() just to directly 193 grab the pointer to the last element afterwards 194 Rev 3.23.5 Beta August 9, 2001, Jes Sorensen 195 - Don't use SA_INTERRUPT, it's use is deprecated for this kinda driver 196 Rev 3.23.4 Beta August 8, 2001, Jes Sorensen 197 - Set dev->max_sectors to 1024 198 Rev 3.23.3 Beta August 6, 2001, Jes Sorensen 199 - Provide compat macros for pci_enable_device(), pci_find_subsys() 200 and scsi_set_pci_device() 201 - Call scsi_set_pci_device() for all devices 202 - Reduce size of kernel version dependent device probe code 203 - Move duplicate probe/init code to separate function 204 - Handle error if qla1280_mem_alloc() fails 205 - Kill OFFSET() macro and use Linux's PCI definitions instead 206 - Kill private structure defining PCI config space (struct config_reg) 207 - Only allocate I/O port region if not in MMIO mode 208 - Remove duplicate (unused) sanity check of sife of srb_t 209 Rev 3.23.2 Beta August 6, 2001, Jes Sorensen 210 - Change home-brew memset() implementations to use memset() 211 - Remove all references to COMTRACE() - accessing a PC's COM2 serial 212 port directly is not legal under Linux. 213 Rev 3.23.1 Beta April 24, 2001, Jes Sorensen 214 - Remove pre 2.2 kernel support 215 - clean up 64 bit DMA setting to use 2.4 API (provide backwards compat) 216 - Fix MMIO access to use readl/writel instead of directly 217 dereferencing pointers 218 - Nuke MSDOS debugging code 219 - Change true/false data types to int from uint8_t 220 - Use int for counters instead of uint8_t etc. 221 - Clean up size & byte order conversion macro usage 222 Rev 3.23 Beta January 11, 2001 BN Qlogic 223 - Added check of device_id when handling non 224 QLA12160s during detect(). 225 Rev 3.22 Beta January 5, 2001 BN Qlogic 226 - Changed queue_task() to schedule_task() 227 for kernels 2.4.0 and higher. 228 Note: 2.4.0-testxx kernels released prior to 229 the actual 2.4.0 kernel release on January 2001 230 will get compile/link errors with schedule_task(). 231 Please update your kernel to released 2.4.0 level, 232 or comment lines in this file flagged with 3.22 233 to resolve compile/link error of schedule_task(). 234 - Added -DCONFIG_SMP in addition to -D__SMP__ 235 in Makefile for 2.4.0 builds of driver as module. 236 Rev 3.21 Beta January 4, 2001 BN Qlogic 237 - Changed criteria of 64/32 Bit mode of HBA 238 operation according to BITS_PER_LONG rather 239 than HBA's NVRAM setting of >4Gig memory bit; 240 so that the HBA auto-configures without the need 241 to setup each system individually. 242 Rev 3.20 Beta December 5, 2000 BN Qlogic 243 - Added priority handling to IA-64 onboard SCSI 244 ISP12160 chip for kernels greater than 2.3.18. 245 - Added irqrestore for qla1280_intr_handler. 246 - Enabled /proc/scsi/qla1280 interface. 247 - Clear /proc/scsi/qla1280 counters in detect(). 248 Rev 3.19 Beta October 13, 2000 BN Qlogic 249 - Declare driver_template for new kernel 250 (2.4.0 and greater) scsi initialization scheme. 251 - Update /proc/scsi entry for 2.3.18 kernels and 252 above as qla1280 253 Rev 3.18 Beta October 10, 2000 BN Qlogic 254 - Changed scan order of adapters to map 255 the QLA12160 followed by the QLA1280. 256 Rev 3.17 Beta September 18, 2000 BN Qlogic 257 - Removed warnings for 32 bit 2.4.x compiles 258 - Corrected declared size for request and response 259 DMA addresses that are kept in each ha 260 Rev. 3.16 Beta August 25, 2000 BN Qlogic 261 - Corrected 64 bit addressing issue on IA-64 262 where the upper 32 bits were not properly 263 passed to the RISC engine. 264 Rev. 3.15 Beta August 22, 2000 BN Qlogic 265 - Modified qla1280_setup_chip to properly load 266 ISP firmware for greater that 4 Gig memory on IA-64 267 Rev. 3.14 Beta August 16, 2000 BN Qlogic 268 - Added setting of dma_mask to full 64 bit 269 if flags.enable_64bit_addressing is set in NVRAM 270 Rev. 3.13 Beta August 16, 2000 BN Qlogic 271 - Use new PCI DMA mapping APIs for 2.4.x kernel 272 Rev. 3.12 July 18, 2000 Redhat & BN Qlogic 273 - Added check of pci_enable_device to detect() for 2.3.x 274 - Use pci_resource_start() instead of 275 pdev->resource[0].start in detect() for 2.3.x 276 - Updated driver version 277 Rev. 3.11 July 14, 2000 BN Qlogic 278 - Updated SCSI Firmware to following versions: 279 qla1x80: 8.13.08 280 qla1x160: 10.04.08 281 - Updated driver version to 3.11 282 Rev. 3.10 June 23, 2000 BN Qlogic 283 - Added filtering of AMI SubSys Vendor ID devices 284 Rev. 3.9 285 - DEBUG_QLA1280 undefined and new version BN Qlogic 286 Rev. 3.08b May 9, 2000 MD Dell 287 - Added logic to check against AMI subsystem vendor ID 288 Rev. 3.08 May 4, 2000 DG Qlogic 289 - Added logic to check for PCI subsystem ID. 290 Rev. 3.07 Apr 24, 2000 DG & BN Qlogic 291 - Updated SCSI Firmware to following versions: 292 qla12160: 10.01.19 293 qla1280: 8.09.00 294 Rev. 3.06 Apr 12, 2000 DG & BN Qlogic 295 - Internal revision; not released 296 Rev. 3.05 Mar 28, 2000 DG & BN Qlogic 297 - Edit correction for virt_to_bus and PROC. 298 Rev. 3.04 Mar 28, 2000 DG & BN Qlogic 299 - Merge changes from ia64 port. 300 Rev. 3.03 Mar 28, 2000 BN Qlogic 301 - Increase version to reflect new code drop with compile fix 302 of issue with inclusion of linux/spinlock for 2.3 kernels 303 Rev. 3.02 Mar 15, 2000 BN Qlogic 304 - Merge qla1280_proc_info from 2.10 code base 305 Rev. 3.01 Feb 10, 2000 BN Qlogic 306 - Corrected code to compile on a 2.2.x kernel. 307 Rev. 3.00 Jan 17, 2000 DG Qlogic 308 - Added 64-bit support. 309 Rev. 2.07 Nov 9, 1999 DG Qlogic 310 - Added new routine to set target parameters for ISP12160. 311 Rev. 2.06 Sept 10, 1999 DG Qlogic 312 - Added support for ISP12160 Ultra 3 chip. 313 Rev. 2.03 August 3, 1999 Fred Lewis, Intel DuPont 314 - Modified code to remove errors generated when compiling with 315 Cygnus IA64 Compiler. 316 - Changed conversion of pointers to unsigned longs instead of integers. 317 - Changed type of I/O port variables from uint32_t to unsigned long. 318 - Modified OFFSET macro to work with 64-bit as well as 32-bit. 319 - Changed sprintf and printk format specifiers for pointers to %p. 320 - Changed some int to long type casts where needed in sprintf & printk. 321 - Added l modifiers to sprintf and printk format specifiers for longs. 322 - Removed unused local variables. 323 Rev. 1.20 June 8, 1999 DG, Qlogic 324 Changes to support RedHat release 6.0 (kernel 2.2.5). 325 - Added SCSI exclusive access lock (io_request_lock) when accessing 326 the adapter. 327 - Added changes for the new LINUX interface template. Some new error 328 handling routines have been added to the template, but for now we 329 will use the old ones. 330 - Initial Beta Release. 331 *****************************************************************************/ 332 333 334 #include <linux/config.h> 335 #include <linux/module.h> 336 337 #include <linux/version.h> 338 #include <linux/types.h> 339 #include <linux/string.h> 340 #include <linux/errno.h> 341 #include <linux/kernel.h> 342 #include <linux/ioport.h> 343 #include <linux/delay.h> 344 #include <linux/timer.h> 345 #include <linux/sched.h> 346 #include <linux/pci.h> 347 #include <linux/proc_fs.h> 348 #include <linux/stat.h> 349 #include <linux/slab.h> 350 #include <linux/pci_ids.h> 351 #include <linux/interrupt.h> 352 #include <linux/init.h> 353 #include <linux/dma-mapping.h> 354 355 #include <asm/io.h> 356 #include <asm/irq.h> 357 #include <asm/byteorder.h> 358 #include <asm/processor.h> 359 #include <asm/types.h> 360 #include <asm/system.h> 361 362 #include <scsi/scsi.h> 363 #include <scsi/scsi_cmnd.h> 364 #include <scsi/scsi_device.h> 365 #include <scsi/scsi_host.h> 366 #include <scsi/scsi_tcq.h> 367 368 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2) 369 #include <asm/sn/io.h> 370 #endif 371 372 #if LINUX_VERSION_CODE < 0x020600 373 #error "Kernels older than 2.6.0 are no longer supported" 374 #endif 375 376 377 /* 378 * Compile time Options: 379 * 0 - Disable and 1 - Enable 380 */ 381 #define DEBUG_QLA1280_INTR 0 382 #define DEBUG_PRINT_NVRAM 0 383 #define DEBUG_QLA1280 0 384 385 /* 386 * The SGI VISWS is broken and doesn't support MMIO ;-( 387 */ 388 #ifdef CONFIG_X86_VISWS 389 #define MEMORY_MAPPED_IO 0 390 #else 391 #define MEMORY_MAPPED_IO 1 392 #endif 393 394 #define UNIQUE_FW_NAME 395 #include "qla1280.h" 396 #include "ql12160_fw.h" /* ISP RISC codes */ 397 #include "ql1280_fw.h" 398 #include "ql1040_fw.h" 399 400 401 /* 402 * Missing PCI ID's 403 */ 404 #ifndef PCI_DEVICE_ID_QLOGIC_ISP1080 405 #define PCI_DEVICE_ID_QLOGIC_ISP1080 0x1080 406 #endif 407 #ifndef PCI_DEVICE_ID_QLOGIC_ISP1240 408 #define PCI_DEVICE_ID_QLOGIC_ISP1240 0x1240 409 #endif 410 #ifndef PCI_DEVICE_ID_QLOGIC_ISP1280 411 #define PCI_DEVICE_ID_QLOGIC_ISP1280 0x1280 412 #endif 413 #ifndef PCI_DEVICE_ID_QLOGIC_ISP10160 414 #define PCI_DEVICE_ID_QLOGIC_ISP10160 0x1016 415 #endif 416 #ifndef PCI_DEVICE_ID_QLOGIC_ISP12160 417 #define PCI_DEVICE_ID_QLOGIC_ISP12160 0x1216 418 #endif 419 420 #ifndef PCI_VENDOR_ID_AMI 421 #define PCI_VENDOR_ID_AMI 0x101e 422 #endif 423 424 #ifndef BITS_PER_LONG 425 #error "BITS_PER_LONG not defined!" 426 #endif 427 #if (BITS_PER_LONG == 64) || defined CONFIG_HIGHMEM 428 #define QLA_64BIT_PTR 1 429 #endif 430 431 #ifdef QLA_64BIT_PTR 432 #define pci_dma_hi32(a) ((a >> 16) >> 16) 433 #else 434 #define pci_dma_hi32(a) 0 435 #endif 436 #define pci_dma_lo32(a) (a & 0xffffffff) 437 438 #define NVRAM_DELAY() udelay(500) /* 2 microseconds */ 439 440 #if defined(__ia64__) && !defined(ia64_platform_is) 441 #define ia64_platform_is(foo) (!strcmp(x, platform_name)) 442 #endif 443 444 445 #define IS_ISP1040(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020) 446 #define IS_ISP1x40(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1020 || \ 447 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP1240) 448 #define IS_ISP1x160(ha) (ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP10160 || \ 449 ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP12160) 450 451 452 static int qla1280_probe_one(struct pci_dev *, const struct pci_device_id *); 453 static void qla1280_remove_one(struct pci_dev *); 454 455 /* 456 * QLogic Driver Support Function Prototypes. 457 */ 458 static void qla1280_done(struct scsi_qla_host *); 459 static int qla1280_get_token(char *); 460 static int qla1280_setup(char *s) __init; 461 462 /* 463 * QLogic ISP1280 Hardware Support Function Prototypes. 464 */ 465 static int qla1280_load_firmware(struct scsi_qla_host *); 466 static int qla1280_init_rings(struct scsi_qla_host *); 467 static int qla1280_nvram_config(struct scsi_qla_host *); 468 static int qla1280_mailbox_command(struct scsi_qla_host *, 469 uint8_t, uint16_t *); 470 static int qla1280_bus_reset(struct scsi_qla_host *, int); 471 static int qla1280_device_reset(struct scsi_qla_host *, int, int); 472 static int qla1280_abort_device(struct scsi_qla_host *, int, int, int); 473 static int qla1280_abort_command(struct scsi_qla_host *, struct srb *, int); 474 static int qla1280_abort_isp(struct scsi_qla_host *); 475 #ifdef QLA_64BIT_PTR 476 static int qla1280_64bit_start_scsi(struct scsi_qla_host *, struct srb *); 477 #else 478 static int qla1280_32bit_start_scsi(struct scsi_qla_host *, struct srb *); 479 #endif 480 static void qla1280_nv_write(struct scsi_qla_host *, uint16_t); 481 static void qla1280_poll(struct scsi_qla_host *); 482 static void qla1280_reset_adapter(struct scsi_qla_host *); 483 static void qla1280_marker(struct scsi_qla_host *, int, int, int, u8); 484 static void qla1280_isp_cmd(struct scsi_qla_host *); 485 static void qla1280_isr(struct scsi_qla_host *, struct list_head *); 486 static void qla1280_rst_aen(struct scsi_qla_host *); 487 static void qla1280_status_entry(struct scsi_qla_host *, struct response *, 488 struct list_head *); 489 static void qla1280_error_entry(struct scsi_qla_host *, struct response *, 490 struct list_head *); 491 static uint16_t qla1280_get_nvram_word(struct scsi_qla_host *, uint32_t); 492 static uint16_t qla1280_nvram_request(struct scsi_qla_host *, uint32_t); 493 static uint16_t qla1280_debounce_register(volatile uint16_t __iomem *); 494 static request_t *qla1280_req_pkt(struct scsi_qla_host *); 495 static int qla1280_check_for_dead_scsi_bus(struct scsi_qla_host *, 496 unsigned int); 497 static void qla1280_get_target_parameters(struct scsi_qla_host *, 498 struct scsi_device *); 499 static int qla1280_set_target_parameters(struct scsi_qla_host *, int, int); 500 501 502 static struct qla_driver_setup driver_setup; 503 504 /* 505 * convert scsi data direction to request_t control flags 506 */ 507 static inline uint16_t 508 qla1280_data_direction(struct scsi_cmnd *cmnd) 509 { 510 switch(cmnd->sc_data_direction) { 511 case DMA_FROM_DEVICE: 512 return BIT_5; 513 case DMA_TO_DEVICE: 514 return BIT_6; 515 case DMA_BIDIRECTIONAL: 516 return BIT_5 | BIT_6; 517 /* 518 * We could BUG() on default here if one of the four cases aren't 519 * met, but then again if we receive something like that from the 520 * SCSI layer we have more serious problems. This shuts up GCC. 521 */ 522 case DMA_NONE: 523 default: 524 return 0; 525 } 526 } 527 528 #if DEBUG_QLA1280 529 static void __qla1280_print_scsi_cmd(struct scsi_cmnd * cmd); 530 static void __qla1280_dump_buffer(char *, int); 531 #endif 532 533 534 /* 535 * insmod needs to find the variable and make it point to something 536 */ 537 #ifdef MODULE 538 static char *qla1280; 539 540 /* insmod qla1280 options=verbose" */ 541 module_param(qla1280, charp, 0); 542 #else 543 __setup("qla1280=", qla1280_setup); 544 #endif 545 546 547 /* 548 * We use the scsi_pointer structure that's included with each scsi_command 549 * to overlay our struct srb over it. qla1280_init() checks that a srb is not 550 * bigger than a scsi_pointer. 551 */ 552 553 #define CMD_SP(Cmnd) &Cmnd->SCp 554 #define CMD_CDBLEN(Cmnd) Cmnd->cmd_len 555 #define CMD_CDBP(Cmnd) Cmnd->cmnd 556 #define CMD_SNSP(Cmnd) Cmnd->sense_buffer 557 #define CMD_SNSLEN(Cmnd) sizeof(Cmnd->sense_buffer) 558 #define CMD_RESULT(Cmnd) Cmnd->result 559 #define CMD_HANDLE(Cmnd) Cmnd->host_scribble 560 #define CMD_REQUEST(Cmnd) Cmnd->request->cmd 561 562 #define CMD_HOST(Cmnd) Cmnd->device->host 563 #define SCSI_BUS_32(Cmnd) Cmnd->device->channel 564 #define SCSI_TCN_32(Cmnd) Cmnd->device->id 565 #define SCSI_LUN_32(Cmnd) Cmnd->device->lun 566 567 568 /*****************************************/ 569 /* ISP Boards supported by this driver */ 570 /*****************************************/ 571 572 struct qla_boards { 573 unsigned char name[9]; /* Board ID String */ 574 int numPorts; /* Number of SCSI ports */ 575 unsigned short *fwcode; /* pointer to FW array */ 576 unsigned short *fwlen; /* number of words in array */ 577 unsigned short *fwstart; /* start address for F/W */ 578 unsigned char *fwver; /* Ptr to F/W version array */ 579 }; 580 581 /* NOTE: the last argument in each entry is used to index ql1280_board_tbl */ 582 static struct pci_device_id qla1280_pci_tbl[] = { 583 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP12160, 584 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 585 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1020, 586 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, 587 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1080, 588 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, 589 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1240, 590 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, 591 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1280, 592 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, 593 {PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP10160, 594 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, 595 {0,} 596 }; 597 MODULE_DEVICE_TABLE(pci, qla1280_pci_tbl); 598 599 static struct qla_boards ql1280_board_tbl[] = { 600 /* Name , Number of ports, FW details */ 601 {"QLA12160", 2, &fw12160i_code01[0], &fw12160i_length01, 602 &fw12160i_addr01, &fw12160i_version_str[0]}, 603 {"QLA1040", 1, &risc_code01[0], &risc_code_length01, 604 &risc_code_addr01, &firmware_version[0]}, 605 {"QLA1080", 1, &fw1280ei_code01[0], &fw1280ei_length01, 606 &fw1280ei_addr01, &fw1280ei_version_str[0]}, 607 {"QLA1240", 2, &fw1280ei_code01[0], &fw1280ei_length01, 608 &fw1280ei_addr01, &fw1280ei_version_str[0]}, 609 {"QLA1280", 2, &fw1280ei_code01[0], &fw1280ei_length01, 610 &fw1280ei_addr01, &fw1280ei_version_str[0]}, 611 {"QLA10160", 1, &fw12160i_code01[0], &fw12160i_length01, 612 &fw12160i_addr01, &fw12160i_version_str[0]}, 613 {" ", 0} 614 }; 615 616 static int qla1280_verbose = 1; 617 618 #if DEBUG_QLA1280 619 static int ql_debug_level = 1; 620 #define dprintk(level, format, a...) \ 621 do { if (ql_debug_level >= level) printk(KERN_ERR format, ##a); } while(0) 622 #define qla1280_dump_buffer(level, buf, size) \ 623 if (ql_debug_level >= level) __qla1280_dump_buffer(buf, size) 624 #define qla1280_print_scsi_cmd(level, cmd) \ 625 if (ql_debug_level >= level) __qla1280_print_scsi_cmd(cmd) 626 #else 627 #define ql_debug_level 0 628 #define dprintk(level, format, a...) do{}while(0) 629 #define qla1280_dump_buffer(a, b, c) do{}while(0) 630 #define qla1280_print_scsi_cmd(a, b) do{}while(0) 631 #endif 632 633 #define ENTER(x) dprintk(3, "qla1280 : Entering %s()\n", x); 634 #define LEAVE(x) dprintk(3, "qla1280 : Leaving %s()\n", x); 635 #define ENTER_INTR(x) dprintk(4, "qla1280 : Entering %s()\n", x); 636 #define LEAVE_INTR(x) dprintk(4, "qla1280 : Leaving %s()\n", x); 637 638 639 static int qla1280_read_nvram(struct scsi_qla_host *ha) 640 { 641 uint16_t *wptr; 642 uint8_t chksum; 643 int cnt, i; 644 struct nvram *nv; 645 646 ENTER("qla1280_read_nvram"); 647 648 if (driver_setup.no_nvram) 649 return 1; 650 651 printk(KERN_INFO "scsi(%ld): Reading NVRAM\n", ha->host_no); 652 653 wptr = (uint16_t *)&ha->nvram; 654 nv = &ha->nvram; 655 chksum = 0; 656 for (cnt = 0; cnt < 3; cnt++) { 657 *wptr = qla1280_get_nvram_word(ha, cnt); 658 chksum += *wptr & 0xff; 659 chksum += (*wptr >> 8) & 0xff; 660 wptr++; 661 } 662 663 if (nv->id0 != 'I' || nv->id1 != 'S' || 664 nv->id2 != 'P' || nv->id3 != ' ' || nv->version < 1) { 665 dprintk(2, "Invalid nvram ID or version!\n"); 666 chksum = 1; 667 } else { 668 for (; cnt < sizeof(struct nvram); cnt++) { 669 *wptr = qla1280_get_nvram_word(ha, cnt); 670 chksum += *wptr & 0xff; 671 chksum += (*wptr >> 8) & 0xff; 672 wptr++; 673 } 674 } 675 676 dprintk(3, "qla1280_read_nvram: NVRAM Magic ID= %c %c %c %02x" 677 " version %i\n", nv->id0, nv->id1, nv->id2, nv->id3, 678 nv->version); 679 680 681 if (chksum) { 682 if (!driver_setup.no_nvram) 683 printk(KERN_WARNING "scsi(%ld): Unable to identify or " 684 "validate NVRAM checksum, using default " 685 "settings\n", ha->host_no); 686 ha->nvram_valid = 0; 687 } else 688 ha->nvram_valid = 1; 689 690 /* The firmware interface is, um, interesting, in that the 691 * actual firmware image on the chip is little endian, thus, 692 * the process of taking that image to the CPU would end up 693 * little endian. However, the firmare interface requires it 694 * to be read a word (two bytes) at a time. 695 * 696 * The net result of this would be that the word (and 697 * doubleword) quantites in the firmware would be correct, but 698 * the bytes would be pairwise reversed. Since most of the 699 * firmware quantites are, in fact, bytes, we do an extra 700 * le16_to_cpu() in the firmware read routine. 701 * 702 * The upshot of all this is that the bytes in the firmware 703 * are in the correct places, but the 16 and 32 bit quantites 704 * are still in little endian format. We fix that up below by 705 * doing extra reverses on them */ 706 nv->isp_parameter = cpu_to_le16(nv->isp_parameter); 707 nv->firmware_feature.w = cpu_to_le16(nv->firmware_feature.w); 708 for(i = 0; i < MAX_BUSES; i++) { 709 nv->bus[i].selection_timeout = cpu_to_le16(nv->bus[i].selection_timeout); 710 nv->bus[i].max_queue_depth = cpu_to_le16(nv->bus[i].max_queue_depth); 711 } 712 dprintk(1, "qla1280_read_nvram: Completed Reading NVRAM\n"); 713 LEAVE("qla1280_read_nvram"); 714 715 return chksum; 716 } 717 718 /************************************************************************** 719 * qla1280_info 720 * Return a string describing the driver. 721 **************************************************************************/ 722 static const char * 723 qla1280_info(struct Scsi_Host *host) 724 { 725 static char qla1280_scsi_name_buffer[125]; 726 char *bp; 727 struct scsi_qla_host *ha; 728 struct qla_boards *bdp; 729 730 bp = &qla1280_scsi_name_buffer[0]; 731 ha = (struct scsi_qla_host *)host->hostdata; 732 bdp = &ql1280_board_tbl[ha->devnum]; 733 memset(bp, 0, sizeof(qla1280_scsi_name_buffer)); 734 735 sprintf (bp, 736 "QLogic %s PCI to SCSI Host Adapter\n" 737 " Firmware version: %2d.%02d.%02d, Driver version %s", 738 &bdp->name[0], bdp->fwver[0], bdp->fwver[1], bdp->fwver[2], 739 QLA1280_VERSION); 740 return bp; 741 } 742 743 /************************************************************************** 744 * qla1200_queuecommand 745 * Queue a command to the controller. 746 * 747 * Note: 748 * The mid-level driver tries to ensures that queuecommand never gets invoked 749 * concurrently with itself or the interrupt handler (although the 750 * interrupt handler may call this routine as part of request-completion 751 * handling). Unfortunely, it sometimes calls the scheduler in interrupt 752 * context which is a big NO! NO!. 753 **************************************************************************/ 754 static int 755 qla1280_queuecommand(struct scsi_cmnd *cmd, void (*fn)(struct scsi_cmnd *)) 756 { 757 struct Scsi_Host *host = cmd->device->host; 758 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; 759 struct srb *sp = (struct srb *)&cmd->SCp; 760 int status; 761 762 cmd->scsi_done = fn; 763 sp->cmd = cmd; 764 sp->flags = 0; 765 766 qla1280_print_scsi_cmd(5, cmd); 767 768 #ifdef QLA_64BIT_PTR 769 /* 770 * Using 64 bit commands if the PCI bridge doesn't support it is a 771 * bit wasteful, however this should really only happen if one's 772 * PCI controller is completely broken, like the BCM1250. For 773 * sane hardware this is not an issue. 774 */ 775 status = qla1280_64bit_start_scsi(ha, sp); 776 #else 777 status = qla1280_32bit_start_scsi(ha, sp); 778 #endif 779 return status; 780 } 781 782 enum action { 783 ABORT_COMMAND, 784 ABORT_DEVICE, 785 DEVICE_RESET, 786 BUS_RESET, 787 ADAPTER_RESET, 788 FAIL 789 }; 790 791 /* timer action for error action processor */ 792 static void qla1280_error_wait_timeout(unsigned long __data) 793 { 794 struct scsi_cmnd *cmd = (struct scsi_cmnd *)__data; 795 struct srb *sp = (struct srb *)CMD_SP(cmd); 796 797 complete(sp->wait); 798 } 799 800 static void qla1280_mailbox_timeout(unsigned long __data) 801 { 802 struct scsi_qla_host *ha = (struct scsi_qla_host *)__data; 803 struct device_reg __iomem *reg; 804 reg = ha->iobase; 805 806 ha->mailbox_out[0] = RD_REG_WORD(®->mailbox0); 807 printk(KERN_ERR "scsi(%ld): mailbox timed out, mailbox0 %04x, " 808 "ictrl %04x, istatus %04x\n", ha->host_no, ha->mailbox_out[0], 809 RD_REG_WORD(®->ictrl), RD_REG_WORD(®->istatus)); 810 complete(ha->mailbox_wait); 811 } 812 813 /************************************************************************** 814 * qla1200_error_action 815 * The function will attempt to perform a specified error action and 816 * wait for the results (or time out). 817 * 818 * Input: 819 * cmd = Linux SCSI command packet of the command that cause the 820 * bus reset. 821 * action = error action to take (see action_t) 822 * 823 * Returns: 824 * SUCCESS or FAILED 825 * 826 * Note: 827 * Resetting the bus always succeeds - is has to, otherwise the 828 * kernel will panic! Try a surgical technique - sending a BUS 829 * DEVICE RESET message - on the offending target before pulling 830 * the SCSI bus reset line. 831 **************************************************************************/ 832 static int 833 qla1280_error_action(struct scsi_cmnd *cmd, enum action action) 834 { 835 struct scsi_qla_host *ha; 836 int bus, target, lun; 837 struct srb *sp; 838 uint16_t data; 839 unsigned char *handle; 840 int result, i; 841 DECLARE_COMPLETION(wait); 842 struct timer_list timer; 843 844 ha = (struct scsi_qla_host *)(CMD_HOST(cmd)->hostdata); 845 846 dprintk(4, "error_action %i, istatus 0x%04x\n", action, 847 RD_REG_WORD(&ha->iobase->istatus)); 848 849 dprintk(4, "host_cmd 0x%04x, ictrl 0x%04x, jiffies %li\n", 850 RD_REG_WORD(&ha->iobase->host_cmd), 851 RD_REG_WORD(&ha->iobase->ictrl), jiffies); 852 853 ENTER("qla1280_error_action"); 854 if (qla1280_verbose) 855 printk(KERN_INFO "scsi(%li): Resetting Cmnd=0x%p, " 856 "Handle=0x%p, action=0x%x\n", 857 ha->host_no, cmd, CMD_HANDLE(cmd), action); 858 859 if (cmd == NULL) { 860 printk(KERN_WARNING "(scsi?:?:?:?) Reset called with NULL " 861 "si_Cmnd pointer, failing.\n"); 862 LEAVE("qla1280_error_action"); 863 return FAILED; 864 } 865 866 ha = (struct scsi_qla_host *)cmd->device->host->hostdata; 867 sp = (struct srb *)CMD_SP(cmd); 868 handle = CMD_HANDLE(cmd); 869 870 /* Check for pending interrupts. */ 871 data = qla1280_debounce_register(&ha->iobase->istatus); 872 /* 873 * The io_request_lock is held when the reset handler is called, hence 874 * the interrupt handler cannot be running in parallel as it also 875 * grabs the lock. /Jes 876 */ 877 if (data & RISC_INT) 878 qla1280_isr(ha, &ha->done_q); 879 880 /* 881 * Determine the suggested action that the mid-level driver wants 882 * us to perform. 883 */ 884 if (handle == (unsigned char *)INVALID_HANDLE || handle == NULL) { 885 if(action == ABORT_COMMAND) { 886 /* we never got this command */ 887 printk(KERN_INFO "qla1280: Aborting a NULL handle\n"); 888 return SUCCESS; /* no action - we don't have command */ 889 } 890 } else { 891 sp->wait = &wait; 892 } 893 894 bus = SCSI_BUS_32(cmd); 895 target = SCSI_TCN_32(cmd); 896 lun = SCSI_LUN_32(cmd); 897 898 /* Overloading result. Here it means the success or fail of the 899 * *issue* of the action. When we return from the routine, it must 900 * mean the actual success or fail of the action */ 901 result = FAILED; 902 switch (action) { 903 case FAIL: 904 break; 905 906 case ABORT_COMMAND: 907 if ((sp->flags & SRB_ABORT_PENDING)) { 908 printk(KERN_WARNING 909 "scsi(): Command has a pending abort " 910 "message - ABORT_PENDING.\n"); 911 /* This should technically be impossible since we 912 * now wait for abort completion */ 913 break; 914 } 915 916 for (i = 0; i < MAX_OUTSTANDING_COMMANDS; i++) { 917 if (sp == ha->outstanding_cmds[i]) { 918 dprintk(1, "qla1280: RISC aborting command\n"); 919 if (qla1280_abort_command(ha, sp, i) == 0) 920 result = SUCCESS; 921 else { 922 /* 923 * Since we don't know what might 924 * have happend to the command, it 925 * is unsafe to remove it from the 926 * device's queue at this point. 927 * Wait and let the escalation 928 * process take care of it. 929 */ 930 printk(KERN_WARNING 931 "scsi(%li:%i:%i:%i): Unable" 932 " to abort command!\n", 933 ha->host_no, bus, target, lun); 934 } 935 } 936 } 937 break; 938 939 case ABORT_DEVICE: 940 if (qla1280_verbose) 941 printk(KERN_INFO 942 "scsi(%ld:%d:%d:%d): Queueing abort device " 943 "command.\n", ha->host_no, bus, target, lun); 944 if (qla1280_abort_device(ha, bus, target, lun) == 0) 945 result = SUCCESS; 946 break; 947 948 case DEVICE_RESET: 949 if (qla1280_verbose) 950 printk(KERN_INFO 951 "scsi(%ld:%d:%d:%d): Queueing device reset " 952 "command.\n", ha->host_no, bus, target, lun); 953 if (qla1280_device_reset(ha, bus, target) == 0) 954 result = SUCCESS; 955 break; 956 957 case BUS_RESET: 958 if (qla1280_verbose) 959 printk(KERN_INFO "qla1280(%ld:%d): Issuing BUS " 960 "DEVICE RESET\n", ha->host_no, bus); 961 if (qla1280_bus_reset(ha, bus == 0)) 962 result = SUCCESS; 963 964 break; 965 966 case ADAPTER_RESET: 967 default: 968 if (qla1280_verbose) { 969 printk(KERN_INFO 970 "scsi(%ld): Issued ADAPTER RESET\n", 971 ha->host_no); 972 printk(KERN_INFO "scsi(%ld): I/O processing will " 973 "continue automatically\n", ha->host_no); 974 } 975 ha->flags.reset_active = 1; 976 /* 977 * We restarted all of the commands automatically, so the 978 * mid-level code can expect completions momentitarily. 979 */ 980 if (qla1280_abort_isp(ha) == 0) 981 result = SUCCESS; 982 983 ha->flags.reset_active = 0; 984 } 985 986 if (!list_empty(&ha->done_q)) 987 qla1280_done(ha); 988 989 /* If we didn't manage to issue the action, or we have no 990 * command to wait for, exit here */ 991 if (result == FAILED || handle == NULL || 992 handle == (unsigned char *)INVALID_HANDLE) { 993 /* 994 * Clear completion queue to avoid qla1280_done() trying 995 * to complete the command at a later stage after we 996 * have exited the current context 997 */ 998 sp->wait = NULL; 999 goto leave; 1000 } 1001 1002 /* set up a timer just in case we're really jammed */ 1003 init_timer(&timer); 1004 timer.expires = jiffies + 4*HZ; 1005 timer.data = (unsigned long)cmd; 1006 timer.function = qla1280_error_wait_timeout; 1007 add_timer(&timer); 1008 1009 /* wait for the action to complete (or the timer to expire) */ 1010 spin_unlock_irq(ha->host->host_lock); 1011 wait_for_completion(&wait); 1012 del_timer_sync(&timer); 1013 spin_lock_irq(ha->host->host_lock); 1014 sp->wait = NULL; 1015 1016 /* the only action we might get a fail for is abort */ 1017 if (action == ABORT_COMMAND) { 1018 if(sp->flags & SRB_ABORTED) 1019 result = SUCCESS; 1020 else 1021 result = FAILED; 1022 } 1023 1024 leave: 1025 dprintk(1, "RESET returning %d\n", result); 1026 1027 LEAVE("qla1280_error_action"); 1028 return result; 1029 } 1030 1031 /************************************************************************** 1032 * qla1280_abort 1033 * Abort the specified SCSI command(s). 1034 **************************************************************************/ 1035 static int 1036 qla1280_eh_abort(struct scsi_cmnd * cmd) 1037 { 1038 int rc; 1039 1040 spin_lock_irq(cmd->device->host->host_lock); 1041 rc = qla1280_error_action(cmd, ABORT_COMMAND); 1042 spin_unlock_irq(cmd->device->host->host_lock); 1043 1044 return rc; 1045 } 1046 1047 /************************************************************************** 1048 * qla1280_device_reset 1049 * Reset the specified SCSI device 1050 **************************************************************************/ 1051 static int 1052 qla1280_eh_device_reset(struct scsi_cmnd *cmd) 1053 { 1054 int rc; 1055 1056 spin_lock_irq(cmd->device->host->host_lock); 1057 rc = qla1280_error_action(cmd, DEVICE_RESET); 1058 spin_unlock_irq(cmd->device->host->host_lock); 1059 1060 return rc; 1061 } 1062 1063 /************************************************************************** 1064 * qla1280_bus_reset 1065 * Reset the specified bus. 1066 **************************************************************************/ 1067 static int 1068 qla1280_eh_bus_reset(struct scsi_cmnd *cmd) 1069 { 1070 int rc; 1071 1072 spin_lock_irq(cmd->device->host->host_lock); 1073 rc = qla1280_error_action(cmd, BUS_RESET); 1074 spin_unlock_irq(cmd->device->host->host_lock); 1075 1076 return rc; 1077 } 1078 1079 /************************************************************************** 1080 * qla1280_adapter_reset 1081 * Reset the specified adapter (both channels) 1082 **************************************************************************/ 1083 static int 1084 qla1280_eh_adapter_reset(struct scsi_cmnd *cmd) 1085 { 1086 int rc; 1087 1088 spin_lock_irq(cmd->device->host->host_lock); 1089 rc = qla1280_error_action(cmd, ADAPTER_RESET); 1090 spin_unlock_irq(cmd->device->host->host_lock); 1091 1092 return rc; 1093 } 1094 1095 static int 1096 qla1280_biosparam(struct scsi_device *sdev, struct block_device *bdev, 1097 sector_t capacity, int geom[]) 1098 { 1099 int heads, sectors, cylinders; 1100 1101 heads = 64; 1102 sectors = 32; 1103 cylinders = (unsigned long)capacity / (heads * sectors); 1104 if (cylinders > 1024) { 1105 heads = 255; 1106 sectors = 63; 1107 cylinders = (unsigned long)capacity / (heads * sectors); 1108 /* if (cylinders > 1023) 1109 cylinders = 1023; */ 1110 } 1111 1112 geom[0] = heads; 1113 geom[1] = sectors; 1114 geom[2] = cylinders; 1115 1116 return 0; 1117 } 1118 1119 1120 /* disable risc and host interrupts */ 1121 static inline void 1122 qla1280_disable_intrs(struct scsi_qla_host *ha) 1123 { 1124 WRT_REG_WORD(&ha->iobase->ictrl, 0); 1125 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ 1126 } 1127 1128 /* enable risc and host interrupts */ 1129 static inline void 1130 qla1280_enable_intrs(struct scsi_qla_host *ha) 1131 { 1132 WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC)); 1133 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ 1134 } 1135 1136 /************************************************************************** 1137 * qla1280_intr_handler 1138 * Handles the H/W interrupt 1139 **************************************************************************/ 1140 static irqreturn_t 1141 qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs) 1142 { 1143 struct scsi_qla_host *ha; 1144 struct device_reg __iomem *reg; 1145 u16 data; 1146 int handled = 0; 1147 1148 ENTER_INTR ("qla1280_intr_handler"); 1149 ha = (struct scsi_qla_host *)dev_id; 1150 1151 spin_lock(ha->host->host_lock); 1152 1153 ha->isr_count++; 1154 reg = ha->iobase; 1155 1156 qla1280_disable_intrs(ha); 1157 1158 data = qla1280_debounce_register(®->istatus); 1159 /* Check for pending interrupts. */ 1160 if (data & RISC_INT) { 1161 qla1280_isr(ha, &ha->done_q); 1162 handled = 1; 1163 } 1164 if (!list_empty(&ha->done_q)) 1165 qla1280_done(ha); 1166 1167 spin_unlock(ha->host->host_lock); 1168 1169 qla1280_enable_intrs(ha); 1170 1171 LEAVE_INTR("qla1280_intr_handler"); 1172 return IRQ_RETVAL(handled); 1173 } 1174 1175 1176 static int 1177 qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target) 1178 { 1179 uint8_t mr; 1180 uint16_t mb[MAILBOX_REGISTER_COUNT]; 1181 struct nvram *nv; 1182 int status, lun; 1183 1184 nv = &ha->nvram; 1185 1186 mr = BIT_3 | BIT_2 | BIT_1 | BIT_0; 1187 1188 /* Set Target Parameters. */ 1189 mb[0] = MBC_SET_TARGET_PARAMETERS; 1190 mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8); 1191 mb[2] = nv->bus[bus].target[target].parameter.renegotiate_on_error << 8; 1192 mb[2] |= nv->bus[bus].target[target].parameter.stop_queue_on_check << 9; 1193 mb[2] |= nv->bus[bus].target[target].parameter.auto_request_sense << 10; 1194 mb[2] |= nv->bus[bus].target[target].parameter.tag_queuing << 11; 1195 mb[2] |= nv->bus[bus].target[target].parameter.enable_sync << 12; 1196 mb[2] |= nv->bus[bus].target[target].parameter.enable_wide << 13; 1197 mb[2] |= nv->bus[bus].target[target].parameter.parity_checking << 14; 1198 mb[2] |= nv->bus[bus].target[target].parameter.disconnect_allowed << 15; 1199 1200 if (IS_ISP1x160(ha)) { 1201 mb[2] |= nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr << 5; 1202 mb[3] = (nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8); 1203 mb[6] = (nv->bus[bus].target[target].ppr_1x160.flags.ppr_options << 8) | 1204 nv->bus[bus].target[target].ppr_1x160.flags.ppr_bus_width; 1205 mr |= BIT_6; 1206 } else { 1207 mb[3] = (nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8); 1208 } 1209 mb[3] |= nv->bus[bus].target[target].sync_period; 1210 1211 status = qla1280_mailbox_command(ha, mr, mb); 1212 1213 /* Set Device Queue Parameters. */ 1214 for (lun = 0; lun < MAX_LUNS; lun++) { 1215 mb[0] = MBC_SET_DEVICE_QUEUE; 1216 mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8); 1217 mb[1] |= lun; 1218 mb[2] = nv->bus[bus].max_queue_depth; 1219 mb[3] = nv->bus[bus].target[target].execution_throttle; 1220 status |= qla1280_mailbox_command(ha, 0x0f, mb); 1221 } 1222 1223 if (status) 1224 printk(KERN_WARNING "scsi(%ld:%i:%i): " 1225 "qla1280_set_target_parameters() failed\n", 1226 ha->host_no, bus, target); 1227 return status; 1228 } 1229 1230 1231 /************************************************************************** 1232 * qla1280_slave_configure 1233 * 1234 * Description: 1235 * Determines the queue depth for a given device. There are two ways 1236 * a queue depth can be obtained for a tagged queueing device. One 1237 * way is the default queue depth which is determined by whether 1238 * If it is defined, then it is used 1239 * as the default queue depth. Otherwise, we use either 4 or 8 as the 1240 * default queue depth (dependent on the number of hardware SCBs). 1241 **************************************************************************/ 1242 static int 1243 qla1280_slave_configure(struct scsi_device *device) 1244 { 1245 struct scsi_qla_host *ha; 1246 int default_depth = 3; 1247 int bus = device->channel; 1248 int target = device->id; 1249 int status = 0; 1250 struct nvram *nv; 1251 unsigned long flags; 1252 1253 ha = (struct scsi_qla_host *)device->host->hostdata; 1254 nv = &ha->nvram; 1255 1256 if (qla1280_check_for_dead_scsi_bus(ha, bus)) 1257 return 1; 1258 1259 if (device->tagged_supported && 1260 (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { 1261 scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, 1262 ha->bus_settings[bus].hiwat); 1263 } else { 1264 scsi_adjust_queue_depth(device, 0, default_depth); 1265 } 1266 1267 nv->bus[bus].target[target].parameter.enable_sync = device->sdtr; 1268 nv->bus[bus].target[target].parameter.enable_wide = device->wdtr; 1269 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = device->ppr; 1270 1271 if (driver_setup.no_sync || 1272 (driver_setup.sync_mask && 1273 (~driver_setup.sync_mask & (1 << target)))) 1274 nv->bus[bus].target[target].parameter.enable_sync = 0; 1275 if (driver_setup.no_wide || 1276 (driver_setup.wide_mask && 1277 (~driver_setup.wide_mask & (1 << target)))) 1278 nv->bus[bus].target[target].parameter.enable_wide = 0; 1279 if (IS_ISP1x160(ha)) { 1280 if (driver_setup.no_ppr || 1281 (driver_setup.ppr_mask && 1282 (~driver_setup.ppr_mask & (1 << target)))) 1283 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 0; 1284 } 1285 1286 spin_lock_irqsave(ha->host->host_lock, flags); 1287 if (nv->bus[bus].target[target].parameter.enable_sync) 1288 status = qla1280_set_target_parameters(ha, bus, target); 1289 qla1280_get_target_parameters(ha, device); 1290 spin_unlock_irqrestore(ha->host->host_lock, flags); 1291 return status; 1292 } 1293 1294 1295 /* 1296 * qla1280_done 1297 * Process completed commands. 1298 * 1299 * Input: 1300 * ha = adapter block pointer. 1301 */ 1302 static void 1303 qla1280_done(struct scsi_qla_host *ha) 1304 { 1305 struct srb *sp; 1306 struct list_head *done_q; 1307 int bus, target, lun; 1308 struct scsi_cmnd *cmd; 1309 1310 ENTER("qla1280_done"); 1311 1312 done_q = &ha->done_q; 1313 1314 while (!list_empty(done_q)) { 1315 sp = list_entry(done_q->next, struct srb, list); 1316 1317 list_del(&sp->list); 1318 1319 cmd = sp->cmd; 1320 bus = SCSI_BUS_32(cmd); 1321 target = SCSI_TCN_32(cmd); 1322 lun = SCSI_LUN_32(cmd); 1323 1324 switch ((CMD_RESULT(cmd) >> 16)) { 1325 case DID_RESET: 1326 /* Issue marker command. */ 1327 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); 1328 break; 1329 case DID_ABORT: 1330 sp->flags &= ~SRB_ABORT_PENDING; 1331 sp->flags |= SRB_ABORTED; 1332 if (sp->flags & SRB_TIMEOUT) 1333 CMD_RESULT(sp->cmd) = DID_TIME_OUT << 16; 1334 break; 1335 default: 1336 break; 1337 } 1338 1339 /* Release memory used for this I/O */ 1340 if (cmd->use_sg) { 1341 pci_unmap_sg(ha->pdev, cmd->request_buffer, 1342 cmd->use_sg, cmd->sc_data_direction); 1343 } else if (cmd->request_bufflen) { 1344 pci_unmap_single(ha->pdev, sp->saved_dma_handle, 1345 cmd->request_bufflen, 1346 cmd->sc_data_direction); 1347 } 1348 1349 /* Call the mid-level driver interrupt handler */ 1350 CMD_HANDLE(sp->cmd) = (unsigned char *)INVALID_HANDLE; 1351 ha->actthreads--; 1352 1353 (*(cmd)->scsi_done)(cmd); 1354 1355 if(sp->wait != NULL) 1356 complete(sp->wait); 1357 } 1358 LEAVE("qla1280_done"); 1359 } 1360 1361 /* 1362 * Translates a ISP error to a Linux SCSI error 1363 */ 1364 static int 1365 qla1280_return_status(struct response * sts, struct scsi_cmnd *cp) 1366 { 1367 int host_status = DID_ERROR; 1368 uint16_t comp_status = le16_to_cpu(sts->comp_status); 1369 uint16_t state_flags = le16_to_cpu(sts->state_flags); 1370 uint16_t residual_length = le32_to_cpu(sts->residual_length); 1371 uint16_t scsi_status = le16_to_cpu(sts->scsi_status); 1372 #if DEBUG_QLA1280_INTR 1373 static char *reason[] = { 1374 "DID_OK", 1375 "DID_NO_CONNECT", 1376 "DID_BUS_BUSY", 1377 "DID_TIME_OUT", 1378 "DID_BAD_TARGET", 1379 "DID_ABORT", 1380 "DID_PARITY", 1381 "DID_ERROR", 1382 "DID_RESET", 1383 "DID_BAD_INTR" 1384 }; 1385 #endif /* DEBUG_QLA1280_INTR */ 1386 1387 ENTER("qla1280_return_status"); 1388 1389 #if DEBUG_QLA1280_INTR 1390 /* 1391 dprintk(1, "qla1280_return_status: compl status = 0x%04x\n", 1392 comp_status); 1393 */ 1394 #endif 1395 1396 switch (comp_status) { 1397 case CS_COMPLETE: 1398 host_status = DID_OK; 1399 break; 1400 1401 case CS_INCOMPLETE: 1402 if (!(state_flags & SF_GOT_BUS)) 1403 host_status = DID_NO_CONNECT; 1404 else if (!(state_flags & SF_GOT_TARGET)) 1405 host_status = DID_BAD_TARGET; 1406 else if (!(state_flags & SF_SENT_CDB)) 1407 host_status = DID_ERROR; 1408 else if (!(state_flags & SF_TRANSFERRED_DATA)) 1409 host_status = DID_ERROR; 1410 else if (!(state_flags & SF_GOT_STATUS)) 1411 host_status = DID_ERROR; 1412 else if (!(state_flags & SF_GOT_SENSE)) 1413 host_status = DID_ERROR; 1414 break; 1415 1416 case CS_RESET: 1417 host_status = DID_RESET; 1418 break; 1419 1420 case CS_ABORTED: 1421 host_status = DID_ABORT; 1422 break; 1423 1424 case CS_TIMEOUT: 1425 host_status = DID_TIME_OUT; 1426 break; 1427 1428 case CS_DATA_OVERRUN: 1429 dprintk(2, "Data overrun 0x%x\n", residual_length); 1430 dprintk(2, "qla1280_return_status: response packet data\n"); 1431 qla1280_dump_buffer(2, (char *)sts, RESPONSE_ENTRY_SIZE); 1432 host_status = DID_ERROR; 1433 break; 1434 1435 case CS_DATA_UNDERRUN: 1436 if ((cp->request_bufflen - residual_length) < 1437 cp->underflow) { 1438 printk(KERN_WARNING 1439 "scsi: Underflow detected - retrying " 1440 "command.\n"); 1441 host_status = DID_ERROR; 1442 } else 1443 host_status = DID_OK; 1444 break; 1445 1446 default: 1447 host_status = DID_ERROR; 1448 break; 1449 } 1450 1451 #if DEBUG_QLA1280_INTR 1452 dprintk(1, "qla1280 ISP status: host status (%s) scsi status %x\n", 1453 reason[host_status], scsi_status); 1454 #endif 1455 1456 LEAVE("qla1280_return_status"); 1457 1458 return (scsi_status & 0xff) | (host_status << 16); 1459 } 1460 1461 /****************************************************************************/ 1462 /* QLogic ISP1280 Hardware Support Functions. */ 1463 /****************************************************************************/ 1464 1465 /* 1466 * qla1280_initialize_adapter 1467 * Initialize board. 1468 * 1469 * Input: 1470 * ha = adapter block pointer. 1471 * 1472 * Returns: 1473 * 0 = success 1474 */ 1475 static int __devinit 1476 qla1280_initialize_adapter(struct scsi_qla_host *ha) 1477 { 1478 struct device_reg __iomem *reg; 1479 int status; 1480 int bus; 1481 unsigned long flags; 1482 1483 ENTER("qla1280_initialize_adapter"); 1484 1485 /* Clear adapter flags. */ 1486 ha->flags.online = 0; 1487 ha->flags.disable_host_adapter = 0; 1488 ha->flags.reset_active = 0; 1489 ha->flags.abort_isp_active = 0; 1490 1491 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2) 1492 if (ia64_platform_is("sn2")) { 1493 printk(KERN_INFO "scsi(%li): Enabling SN2 PCI DMA " 1494 "dual channel lockup workaround\n", ha->host_no); 1495 ha->flags.use_pci_vchannel = 1; 1496 driver_setup.no_nvram = 1; 1497 } 1498 #endif 1499 1500 /* TODO: implement support for the 1040 nvram format */ 1501 if (IS_ISP1040(ha)) 1502 driver_setup.no_nvram = 1; 1503 1504 dprintk(1, "Configure PCI space for adapter...\n"); 1505 1506 reg = ha->iobase; 1507 1508 /* Insure mailbox registers are free. */ 1509 WRT_REG_WORD(®->semaphore, 0); 1510 WRT_REG_WORD(®->host_cmd, HC_CLR_RISC_INT); 1511 WRT_REG_WORD(®->host_cmd, HC_CLR_HOST_INT); 1512 RD_REG_WORD(®->host_cmd); 1513 1514 if (qla1280_read_nvram(ha)) { 1515 dprintk(2, "qla1280_initialize_adapter: failed to read " 1516 "NVRAM\n"); 1517 } 1518 1519 /* 1520 * It's necessary to grab the spin here as qla1280_mailbox_command 1521 * needs to be able to drop the lock unconditionally to wait 1522 * for completion. 1523 */ 1524 spin_lock_irqsave(ha->host->host_lock, flags); 1525 1526 status = qla1280_load_firmware(ha); 1527 if (status) { 1528 printk(KERN_ERR "scsi(%li): initialize: pci probe failed!\n", 1529 ha->host_no); 1530 goto out; 1531 } 1532 1533 /* Setup adapter based on NVRAM parameters. */ 1534 dprintk(1, "scsi(%ld): Configure NVRAM parameters\n", ha->host_no); 1535 qla1280_nvram_config(ha); 1536 1537 if (ha->flags.disable_host_adapter) { 1538 status = 1; 1539 goto out; 1540 } 1541 1542 status = qla1280_init_rings(ha); 1543 if (status) 1544 goto out; 1545 1546 /* Issue SCSI reset, if we can't reset twice then bus is dead */ 1547 for (bus = 0; bus < ha->ports; bus++) { 1548 if (!ha->bus_settings[bus].disable_scsi_reset && 1549 qla1280_bus_reset(ha, bus) && 1550 qla1280_bus_reset(ha, bus)) 1551 ha->bus_settings[bus].scsi_bus_dead = 1; 1552 } 1553 1554 ha->flags.online = 1; 1555 out: 1556 spin_unlock_irqrestore(ha->host->host_lock, flags); 1557 1558 if (status) 1559 dprintk(2, "qla1280_initialize_adapter: **** FAILED ****\n"); 1560 1561 LEAVE("qla1280_initialize_adapter"); 1562 return status; 1563 } 1564 1565 /* 1566 * Chip diagnostics 1567 * Test chip for proper operation. 1568 * 1569 * Input: 1570 * ha = adapter block pointer. 1571 * 1572 * Returns: 1573 * 0 = success. 1574 */ 1575 static int 1576 qla1280_chip_diag(struct scsi_qla_host *ha) 1577 { 1578 uint16_t mb[MAILBOX_REGISTER_COUNT]; 1579 struct device_reg __iomem *reg = ha->iobase; 1580 int status = 0; 1581 int cnt; 1582 uint16_t data; 1583 dprintk(3, "qla1280_chip_diag: testing device at 0x%p \n", ®->id_l); 1584 1585 dprintk(1, "scsi(%ld): Verifying chip\n", ha->host_no); 1586 1587 /* Soft reset chip and wait for it to finish. */ 1588 WRT_REG_WORD(®->ictrl, ISP_RESET); 1589 1590 /* 1591 * We can't do a traditional PCI write flush here by reading 1592 * back the register. The card will not respond once the reset 1593 * is in action and we end up with a machine check exception 1594 * instead. Nothing to do but wait and hope for the best. 1595 * A portable pci_write_flush(pdev) call would be very useful here. 1596 */ 1597 udelay(20); 1598 data = qla1280_debounce_register(®->ictrl); 1599 /* 1600 * Yet another QLogic gem ;-( 1601 */ 1602 for (cnt = 1000000; cnt && data & ISP_RESET; cnt--) { 1603 udelay(5); 1604 data = RD_REG_WORD(®->ictrl); 1605 } 1606 1607 if (!cnt) 1608 goto fail; 1609 1610 /* Reset register cleared by chip reset. */ 1611 dprintk(3, "qla1280_chip_diag: reset register cleared by chip reset\n"); 1612 1613 WRT_REG_WORD(®->cfg_1, 0); 1614 1615 /* Reset RISC and disable BIOS which 1616 allows RISC to execute out of RAM. */ 1617 WRT_REG_WORD(®->host_cmd, HC_RESET_RISC | 1618 HC_RELEASE_RISC | HC_DISABLE_BIOS); 1619 1620 RD_REG_WORD(®->id_l); /* Flush PCI write */ 1621 data = qla1280_debounce_register(®->mailbox0); 1622 1623 /* 1624 * I *LOVE* this code! 1625 */ 1626 for (cnt = 1000000; cnt && data == MBS_BUSY; cnt--) { 1627 udelay(5); 1628 data = RD_REG_WORD(®->mailbox0); 1629 } 1630 1631 if (!cnt) 1632 goto fail; 1633 1634 /* Check product ID of chip */ 1635 dprintk(3, "qla1280_chip_diag: Checking product ID of chip\n"); 1636 1637 if (RD_REG_WORD(®->mailbox1) != PROD_ID_1 || 1638 (RD_REG_WORD(®->mailbox2) != PROD_ID_2 && 1639 RD_REG_WORD(®->mailbox2) != PROD_ID_2a) || 1640 RD_REG_WORD(®->mailbox3) != PROD_ID_3 || 1641 RD_REG_WORD(®->mailbox4) != PROD_ID_4) { 1642 printk(KERN_INFO "qla1280: Wrong product ID = " 1643 "0x%x,0x%x,0x%x,0x%x\n", 1644 RD_REG_WORD(®->mailbox1), 1645 RD_REG_WORD(®->mailbox2), 1646 RD_REG_WORD(®->mailbox3), 1647 RD_REG_WORD(®->mailbox4)); 1648 goto fail; 1649 } 1650 1651 /* 1652 * Enable ints early!!! 1653 */ 1654 qla1280_enable_intrs(ha); 1655 1656 dprintk(1, "qla1280_chip_diag: Checking mailboxes of chip\n"); 1657 /* Wrap Incoming Mailboxes Test. */ 1658 mb[0] = MBC_MAILBOX_REGISTER_TEST; 1659 mb[1] = 0xAAAA; 1660 mb[2] = 0x5555; 1661 mb[3] = 0xAA55; 1662 mb[4] = 0x55AA; 1663 mb[5] = 0xA5A5; 1664 mb[6] = 0x5A5A; 1665 mb[7] = 0x2525; 1666 1667 status = qla1280_mailbox_command(ha, 0xff, mb); 1668 if (status) 1669 goto fail; 1670 1671 if (mb[1] != 0xAAAA || mb[2] != 0x5555 || mb[3] != 0xAA55 || 1672 mb[4] != 0x55AA || mb[5] != 0xA5A5 || mb[6] != 0x5A5A || 1673 mb[7] != 0x2525) { 1674 printk(KERN_INFO "qla1280: Failed mbox check\n"); 1675 goto fail; 1676 } 1677 1678 dprintk(3, "qla1280_chip_diag: exiting normally\n"); 1679 return 0; 1680 fail: 1681 dprintk(2, "qla1280_chip_diag: **** FAILED ****\n"); 1682 return status; 1683 } 1684 1685 static int 1686 qla1280_load_firmware_pio(struct scsi_qla_host *ha) 1687 { 1688 uint16_t risc_address, *risc_code_address, risc_code_size; 1689 uint16_t mb[MAILBOX_REGISTER_COUNT], i; 1690 int err; 1691 1692 /* Load RISC code. */ 1693 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; 1694 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; 1695 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; 1696 1697 for (i = 0; i < risc_code_size; i++) { 1698 mb[0] = MBC_WRITE_RAM_WORD; 1699 mb[1] = risc_address + i; 1700 mb[2] = risc_code_address[i]; 1701 1702 err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); 1703 if (err) { 1704 printk(KERN_ERR "scsi(%li): Failed to load firmware\n", 1705 ha->host_no); 1706 return err; 1707 } 1708 } 1709 1710 return 0; 1711 } 1712 1713 #define DUMP_IT_BACK 0 /* for debug of RISC loading */ 1714 static int 1715 qla1280_load_firmware_dma(struct scsi_qla_host *ha) 1716 { 1717 uint16_t risc_address, *risc_code_address, risc_code_size; 1718 uint16_t mb[MAILBOX_REGISTER_COUNT], cnt; 1719 int err = 0, num, i; 1720 #if DUMP_IT_BACK 1721 uint8_t *sp, *tbuf; 1722 dma_addr_t p_tbuf; 1723 1724 tbuf = pci_alloc_consistent(ha->pdev, 8000, &p_tbuf); 1725 if (!tbuf) 1726 return -ENOMEM; 1727 #endif 1728 1729 /* Load RISC code. */ 1730 risc_address = *ql1280_board_tbl[ha->devnum].fwstart; 1731 risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; 1732 risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; 1733 1734 dprintk(1, "%s: DMA RISC code (%i) words\n", 1735 __FUNCTION__, risc_code_size); 1736 1737 num = 0; 1738 while (risc_code_size > 0) { 1739 int warn __attribute__((unused)) = 0; 1740 1741 cnt = 2000 >> 1; 1742 1743 if (cnt > risc_code_size) 1744 cnt = risc_code_size; 1745 1746 dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p)," 1747 "%d,%d(0x%x)\n", 1748 risc_code_address, cnt, num, risc_address); 1749 for(i = 0; i < cnt; i++) 1750 ((__le16 *)ha->request_ring)[i] = 1751 cpu_to_le16(risc_code_address[i]); 1752 1753 mb[0] = MBC_LOAD_RAM; 1754 mb[1] = risc_address; 1755 mb[4] = cnt; 1756 mb[3] = ha->request_dma & 0xffff; 1757 mb[2] = (ha->request_dma >> 16) & 0xffff; 1758 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; 1759 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; 1760 dprintk(2, "%s: op=%d 0x%p = 0x%4x,0x%4x,0x%4x,0x%4x\n", 1761 __FUNCTION__, mb[0], 1762 (void *)(long)ha->request_dma, 1763 mb[6], mb[7], mb[2], mb[3]); 1764 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | 1765 BIT_1 | BIT_0, mb); 1766 if (err) { 1767 printk(KERN_ERR "scsi(%li): Failed to load partial " 1768 "segment of f\n", ha->host_no); 1769 goto out; 1770 } 1771 1772 #if DUMP_IT_BACK 1773 mb[0] = MBC_DUMP_RAM; 1774 mb[1] = risc_address; 1775 mb[4] = cnt; 1776 mb[3] = p_tbuf & 0xffff; 1777 mb[2] = (p_tbuf >> 16) & 0xffff; 1778 mb[7] = pci_dma_hi32(p_tbuf) & 0xffff; 1779 mb[6] = pci_dma_hi32(p_tbuf) >> 16; 1780 1781 err = qla1280_mailbox_command(ha, BIT_4 | BIT_3 | BIT_2 | 1782 BIT_1 | BIT_0, mb); 1783 if (err) { 1784 printk(KERN_ERR 1785 "Failed to dump partial segment of f/w\n"); 1786 goto out; 1787 } 1788 sp = (uint8_t *)ha->request_ring; 1789 for (i = 0; i < (cnt << 1); i++) { 1790 if (tbuf[i] != sp[i] && warn++ < 10) { 1791 printk(KERN_ERR "%s: FW compare error @ " 1792 "byte(0x%x) loop#=%x\n", 1793 __FUNCTION__, i, num); 1794 printk(KERN_ERR "%s: FWbyte=%x " 1795 "FWfromChip=%x\n", 1796 __FUNCTION__, sp[i], tbuf[i]); 1797 /*break; */ 1798 } 1799 } 1800 #endif 1801 risc_address += cnt; 1802 risc_code_size = risc_code_size - cnt; 1803 risc_code_address = risc_code_address + cnt; 1804 num++; 1805 } 1806 1807 out: 1808 #if DUMP_IT_BACK 1809 pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); 1810 #endif 1811 return err; 1812 } 1813 1814 static int 1815 qla1280_start_firmware(struct scsi_qla_host *ha) 1816 { 1817 uint16_t mb[MAILBOX_REGISTER_COUNT]; 1818 int err; 1819 1820 dprintk(1, "%s: Verifying checksum of loaded RISC code.\n", 1821 __FUNCTION__); 1822 1823 /* Verify checksum of loaded RISC code. */ 1824 mb[0] = MBC_VERIFY_CHECKSUM; 1825 /* mb[1] = ql12_risc_code_addr01; */ 1826 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; 1827 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 1828 if (err) { 1829 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); 1830 return err; 1831 } 1832 1833 /* Start firmware execution. */ 1834 dprintk(1, "%s: start firmware running.\n", __FUNCTION__); 1835 mb[0] = MBC_EXECUTE_FIRMWARE; 1836 mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; 1837 err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); 1838 if (err) { 1839 printk(KERN_ERR "scsi(%li): Failed to start firmware\n", 1840 ha->host_no); 1841 } 1842 1843 return err; 1844 } 1845 1846 static int 1847 qla1280_load_firmware(struct scsi_qla_host *ha) 1848 { 1849 int err; 1850 1851 err = qla1280_chip_diag(ha); 1852 if (err) 1853 goto out; 1854 if (IS_ISP1040(ha)) 1855 err = qla1280_load_firmware_pio(ha); 1856 else 1857 err = qla1280_load_firmware_dma(ha); 1858 if (err) 1859 goto out; 1860 err = qla1280_start_firmware(ha); 1861 out: 1862 return err; 1863 } 1864 1865 /* 1866 * Initialize rings 1867 * 1868 * Input: 1869 * ha = adapter block pointer. 1870 * ha->request_ring = request ring virtual address 1871 * ha->response_ring = response ring virtual address 1872 * ha->request_dma = request ring physical address 1873 * ha->response_dma = response ring physical address 1874 * 1875 * Returns: 1876 * 0 = success. 1877 */ 1878 static int 1879 qla1280_init_rings(struct scsi_qla_host *ha) 1880 { 1881 uint16_t mb[MAILBOX_REGISTER_COUNT]; 1882 int status = 0; 1883 1884 ENTER("qla1280_init_rings"); 1885 1886 /* Clear outstanding commands array. */ 1887 memset(ha->outstanding_cmds, 0, 1888 sizeof(struct srb *) * MAX_OUTSTANDING_COMMANDS); 1889 1890 /* Initialize request queue. */ 1891 ha->request_ring_ptr = ha->request_ring; 1892 ha->req_ring_index = 0; 1893 ha->req_q_cnt = REQUEST_ENTRY_CNT; 1894 /* mb[0] = MBC_INIT_REQUEST_QUEUE; */ 1895 mb[0] = MBC_INIT_REQUEST_QUEUE_A64; 1896 mb[1] = REQUEST_ENTRY_CNT; 1897 mb[3] = ha->request_dma & 0xffff; 1898 mb[2] = (ha->request_dma >> 16) & 0xffff; 1899 mb[4] = 0; 1900 mb[7] = pci_dma_hi32(ha->request_dma) & 0xffff; 1901 mb[6] = pci_dma_hi32(ha->request_dma) >> 16; 1902 if (!(status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_4 | 1903 BIT_3 | BIT_2 | BIT_1 | BIT_0, 1904 &mb[0]))) { 1905 /* Initialize response queue. */ 1906 ha->response_ring_ptr = ha->response_ring; 1907 ha->rsp_ring_index = 0; 1908 /* mb[0] = MBC_INIT_RESPONSE_QUEUE; */ 1909 mb[0] = MBC_INIT_RESPONSE_QUEUE_A64; 1910 mb[1] = RESPONSE_ENTRY_CNT; 1911 mb[3] = ha->response_dma & 0xffff; 1912 mb[2] = (ha->response_dma >> 16) & 0xffff; 1913 mb[5] = 0; 1914 mb[7] = pci_dma_hi32(ha->response_dma) & 0xffff; 1915 mb[6] = pci_dma_hi32(ha->response_dma) >> 16; 1916 status = qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_5 | 1917 BIT_3 | BIT_2 | BIT_1 | BIT_0, 1918 &mb[0]); 1919 } 1920 1921 if (status) 1922 dprintk(2, "qla1280_init_rings: **** FAILED ****\n"); 1923 1924 LEAVE("qla1280_init_rings"); 1925 return status; 1926 } 1927 1928 static void 1929 qla1280_print_settings(struct nvram *nv) 1930 { 1931 dprintk(1, "qla1280 : initiator scsi id bus[0]=%d\n", 1932 nv->bus[0].config_1.initiator_id); 1933 dprintk(1, "qla1280 : initiator scsi id bus[1]=%d\n", 1934 nv->bus[1].config_1.initiator_id); 1935 1936 dprintk(1, "qla1280 : bus reset delay[0]=%d\n", 1937 nv->bus[0].bus_reset_delay); 1938 dprintk(1, "qla1280 : bus reset delay[1]=%d\n", 1939 nv->bus[1].bus_reset_delay); 1940 1941 dprintk(1, "qla1280 : retry count[0]=%d\n", nv->bus[0].retry_count); 1942 dprintk(1, "qla1280 : retry delay[0]=%d\n", nv->bus[0].retry_delay); 1943 dprintk(1, "qla1280 : retry count[1]=%d\n", nv->bus[1].retry_count); 1944 dprintk(1, "qla1280 : retry delay[1]=%d\n", nv->bus[1].retry_delay); 1945 1946 dprintk(1, "qla1280 : async data setup time[0]=%d\n", 1947 nv->bus[0].config_2.async_data_setup_time); 1948 dprintk(1, "qla1280 : async data setup time[1]=%d\n", 1949 nv->bus[1].config_2.async_data_setup_time); 1950 1951 dprintk(1, "qla1280 : req/ack active negation[0]=%d\n", 1952 nv->bus[0].config_2.req_ack_active_negation); 1953 dprintk(1, "qla1280 : req/ack active negation[1]=%d\n", 1954 nv->bus[1].config_2.req_ack_active_negation); 1955 1956 dprintk(1, "qla1280 : data line active negation[0]=%d\n", 1957 nv->bus[0].config_2.data_line_active_negation); 1958 dprintk(1, "qla1280 : data line active negation[1]=%d\n", 1959 nv->bus[1].config_2.data_line_active_negation); 1960 1961 dprintk(1, "qla1280 : disable loading risc code=%d\n", 1962 nv->cntr_flags_1.disable_loading_risc_code); 1963 1964 dprintk(1, "qla1280 : enable 64bit addressing=%d\n", 1965 nv->cntr_flags_1.enable_64bit_addressing); 1966 1967 dprintk(1, "qla1280 : selection timeout limit[0]=%d\n", 1968 nv->bus[0].selection_timeout); 1969 dprintk(1, "qla1280 : selection timeout limit[1]=%d\n", 1970 nv->bus[1].selection_timeout); 1971 1972 dprintk(1, "qla1280 : max queue depth[0]=%d\n", 1973 nv->bus[0].max_queue_depth); 1974 dprintk(1, "qla1280 : max queue depth[1]=%d\n", 1975 nv->bus[1].max_queue_depth); 1976 } 1977 1978 static void 1979 qla1280_set_target_defaults(struct scsi_qla_host *ha, int bus, int target) 1980 { 1981 struct nvram *nv = &ha->nvram; 1982 1983 nv->bus[bus].target[target].parameter.renegotiate_on_error = 1; 1984 nv->bus[bus].target[target].parameter.auto_request_sense = 1; 1985 nv->bus[bus].target[target].parameter.tag_queuing = 1; 1986 nv->bus[bus].target[target].parameter.enable_sync = 1; 1987 #if 1 /* Some SCSI Processors do not seem to like this */ 1988 nv->bus[bus].target[target].parameter.enable_wide = 1; 1989 #endif 1990 nv->bus[bus].target[target].execution_throttle = 1991 nv->bus[bus].max_queue_depth - 1; 1992 nv->bus[bus].target[target].parameter.parity_checking = 1; 1993 nv->bus[bus].target[target].parameter.disconnect_allowed = 1; 1994 1995 if (IS_ISP1x160(ha)) { 1996 nv->bus[bus].target[target].flags.flags1x160.device_enable = 1; 1997 nv->bus[bus].target[target].flags.flags1x160.sync_offset = 0x0e; 1998 nv->bus[bus].target[target].sync_period = 9; 1999 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 1; 2000 nv->bus[bus].target[target].ppr_1x160.flags.ppr_options = 2; 2001 nv->bus[bus].target[target].ppr_1x160.flags.ppr_bus_width = 1; 2002 } else { 2003 nv->bus[bus].target[target].flags.flags1x80.device_enable = 1; 2004 nv->bus[bus].target[target].flags.flags1x80.sync_offset = 12; 2005 nv->bus[bus].target[target].sync_period = 10; 2006 } 2007 } 2008 2009 static void 2010 qla1280_set_defaults(struct scsi_qla_host *ha) 2011 { 2012 struct nvram *nv = &ha->nvram; 2013 int bus, target; 2014 2015 dprintk(1, "Using defaults for NVRAM: \n"); 2016 memset(nv, 0, sizeof(struct nvram)); 2017 2018 /* nv->cntr_flags_1.disable_loading_risc_code = 1; */ 2019 nv->firmware_feature.f.enable_fast_posting = 1; 2020 nv->firmware_feature.f.disable_synchronous_backoff = 1; 2021 nv->termination.scsi_bus_0_control = 3; 2022 nv->termination.scsi_bus_1_control = 3; 2023 nv->termination.auto_term_support = 1; 2024 2025 /* 2026 * Set default FIFO magic - What appropriate values would be here 2027 * is unknown. This is what I have found testing with 12160s. 2028 * 2029 * Now, I would love the magic decoder ring for this one, the 2030 * header file provided by QLogic seems to be bogus or incomplete 2031 * at best. 2032 */ 2033 nv->isp_config.burst_enable = 1; 2034 if (IS_ISP1040(ha)) 2035 nv->isp_config.fifo_threshold |= 3; 2036 else 2037 nv->isp_config.fifo_threshold |= 4; 2038 2039 if (IS_ISP1x160(ha)) 2040 nv->isp_parameter = 0x01; /* fast memory enable */ 2041 2042 for (bus = 0; bus < MAX_BUSES; bus++) { 2043 nv->bus[bus].config_1.initiator_id = 7; 2044 nv->bus[bus].config_2.req_ack_active_negation = 1; 2045 nv->bus[bus].config_2.data_line_active_negation = 1; 2046 nv->bus[bus].selection_timeout = 250; 2047 nv->bus[bus].max_queue_depth = 256; 2048 2049 if (IS_ISP1040(ha)) { 2050 nv->bus[bus].bus_reset_delay = 3; 2051 nv->bus[bus].config_2.async_data_setup_time = 6; 2052 nv->bus[bus].retry_delay = 1; 2053 } else { 2054 nv->bus[bus].bus_reset_delay = 5; 2055 nv->bus[bus].config_2.async_data_setup_time = 8; 2056 } 2057 2058 for (target = 0; target < MAX_TARGETS; target++) 2059 qla1280_set_target_defaults(ha, bus, target); 2060 } 2061 } 2062 2063 static int 2064 qla1280_config_target(struct scsi_qla_host *ha, int bus, int target) 2065 { 2066 struct nvram *nv = &ha->nvram; 2067 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2068 int status, lun; 2069 uint16_t flag; 2070 2071 /* Set Target Parameters. */ 2072 mb[0] = MBC_SET_TARGET_PARAMETERS; 2073 mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8); 2074 2075 /* 2076 * Do not enable sync and ppr for the initial INQUIRY run. We 2077 * enable this later if we determine the target actually 2078 * supports it. 2079 */ 2080 mb[2] = (TP_RENEGOTIATE | TP_AUTO_REQUEST_SENSE | TP_TAGGED_QUEUE 2081 | TP_WIDE | TP_PARITY | TP_DISCONNECT); 2082 2083 if (IS_ISP1x160(ha)) 2084 mb[3] = nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8; 2085 else 2086 mb[3] = nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8; 2087 mb[3] |= nv->bus[bus].target[target].sync_period; 2088 status = qla1280_mailbox_command(ha, 0x0f, mb); 2089 2090 /* Save Tag queuing enable flag. */ 2091 flag = (BIT_0 << target) & mb[0]; 2092 if (nv->bus[bus].target[target].parameter.tag_queuing) 2093 ha->bus_settings[bus].qtag_enables |= flag; 2094 2095 /* Save Device enable flag. */ 2096 if (IS_ISP1x160(ha)) { 2097 if (nv->bus[bus].target[target].flags.flags1x160.device_enable) 2098 ha->bus_settings[bus].device_enables |= flag; 2099 ha->bus_settings[bus].lun_disables |= 0; 2100 } else { 2101 if (nv->bus[bus].target[target].flags.flags1x80.device_enable) 2102 ha->bus_settings[bus].device_enables |= flag; 2103 /* Save LUN disable flag. */ 2104 if (nv->bus[bus].target[target].flags.flags1x80.lun_disable) 2105 ha->bus_settings[bus].lun_disables |= flag; 2106 } 2107 2108 /* Set Device Queue Parameters. */ 2109 for (lun = 0; lun < MAX_LUNS; lun++) { 2110 mb[0] = MBC_SET_DEVICE_QUEUE; 2111 mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8); 2112 mb[1] |= lun; 2113 mb[2] = nv->bus[bus].max_queue_depth; 2114 mb[3] = nv->bus[bus].target[target].execution_throttle; 2115 status |= qla1280_mailbox_command(ha, 0x0f, mb); 2116 } 2117 2118 return status; 2119 } 2120 2121 static int 2122 qla1280_config_bus(struct scsi_qla_host *ha, int bus) 2123 { 2124 struct nvram *nv = &ha->nvram; 2125 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2126 int target, status; 2127 2128 /* SCSI Reset Disable. */ 2129 ha->bus_settings[bus].disable_scsi_reset = 2130 nv->bus[bus].config_1.scsi_reset_disable; 2131 2132 /* Initiator ID. */ 2133 ha->bus_settings[bus].id = nv->bus[bus].config_1.initiator_id; 2134 mb[0] = MBC_SET_INITIATOR_ID; 2135 mb[1] = bus ? ha->bus_settings[bus].id | BIT_7 : 2136 ha->bus_settings[bus].id; 2137 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); 2138 2139 /* Reset Delay. */ 2140 ha->bus_settings[bus].bus_reset_delay = 2141 nv->bus[bus].bus_reset_delay; 2142 2143 /* Command queue depth per device. */ 2144 ha->bus_settings[bus].hiwat = nv->bus[bus].max_queue_depth - 1; 2145 2146 /* Set target parameters. */ 2147 for (target = 0; target < MAX_TARGETS; target++) 2148 status |= qla1280_config_target(ha, bus, target); 2149 2150 return status; 2151 } 2152 2153 static int 2154 qla1280_nvram_config(struct scsi_qla_host *ha) 2155 { 2156 struct device_reg __iomem *reg = ha->iobase; 2157 struct nvram *nv = &ha->nvram; 2158 int bus, target, status = 0; 2159 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2160 2161 ENTER("qla1280_nvram_config"); 2162 2163 if (ha->nvram_valid) { 2164 /* Always force AUTO sense for LINUX SCSI */ 2165 for (bus = 0; bus < MAX_BUSES; bus++) 2166 for (target = 0; target < MAX_TARGETS; target++) { 2167 nv->bus[bus].target[target].parameter. 2168 auto_request_sense = 1; 2169 } 2170 } else { 2171 qla1280_set_defaults(ha); 2172 } 2173 2174 qla1280_print_settings(nv); 2175 2176 /* Disable RISC load of firmware. */ 2177 ha->flags.disable_risc_code_load = 2178 nv->cntr_flags_1.disable_loading_risc_code; 2179 2180 if (IS_ISP1040(ha)) { 2181 uint16_t hwrev, cfg1, cdma_conf, ddma_conf; 2182 2183 hwrev = RD_REG_WORD(®->cfg_0) & ISP_CFG0_HWMSK; 2184 2185 cfg1 = RD_REG_WORD(®->cfg_1) & ~(BIT_4 | BIT_5 | BIT_6); 2186 cdma_conf = RD_REG_WORD(®->cdma_cfg); 2187 ddma_conf = RD_REG_WORD(®->ddma_cfg); 2188 2189 /* Busted fifo, says mjacob. */ 2190 if (hwrev != ISP_CFG0_1040A) 2191 cfg1 |= nv->isp_config.fifo_threshold << 4; 2192 2193 cfg1 |= nv->isp_config.burst_enable << 2; 2194 WRT_REG_WORD(®->cfg_1, cfg1); 2195 2196 WRT_REG_WORD(®->cdma_cfg, cdma_conf | CDMA_CONF_BENAB); 2197 WRT_REG_WORD(®->ddma_cfg, cdma_conf | DDMA_CONF_BENAB); 2198 } else { 2199 uint16_t cfg1, term; 2200 2201 /* Set ISP hardware DMA burst */ 2202 cfg1 = nv->isp_config.fifo_threshold << 4; 2203 cfg1 |= nv->isp_config.burst_enable << 2; 2204 /* Enable DMA arbitration on dual channel controllers */ 2205 if (ha->ports > 1) 2206 cfg1 |= BIT_13; 2207 WRT_REG_WORD(®->cfg_1, cfg1); 2208 2209 /* Set SCSI termination. */ 2210 WRT_REG_WORD(®->gpio_enable, 2211 BIT_7 | BIT_3 | BIT_2 | BIT_1 | BIT_0); 2212 term = nv->termination.scsi_bus_1_control; 2213 term |= nv->termination.scsi_bus_0_control << 2; 2214 term |= nv->termination.auto_term_support << 7; 2215 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2216 WRT_REG_WORD(®->gpio_data, term); 2217 } 2218 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2219 2220 /* ISP parameter word. */ 2221 mb[0] = MBC_SET_SYSTEM_PARAMETER; 2222 mb[1] = nv->isp_parameter; 2223 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); 2224 2225 if (IS_ISP1x40(ha)) { 2226 /* clock rate - for qla1240 and older, only */ 2227 mb[0] = MBC_SET_CLOCK_RATE; 2228 mb[1] = 40; 2229 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 2230 } 2231 2232 /* Firmware feature word. */ 2233 mb[0] = MBC_SET_FIRMWARE_FEATURES; 2234 mb[1] = nv->firmware_feature.f.enable_fast_posting; 2235 mb[1] |= nv->firmware_feature.f.report_lvd_bus_transition << 1; 2236 mb[1] |= nv->firmware_feature.f.disable_synchronous_backoff << 5; 2237 #if defined(CONFIG_IA64_GENERIC) || defined (CONFIG_IA64_SGI_SN2) 2238 if (ia64_platform_is("sn2")) { 2239 printk(KERN_INFO "scsi(%li): Enabling SN2 PCI DMA " 2240 "workaround\n", ha->host_no); 2241 mb[1] |= nv->firmware_feature.f.unused_9 << 9; /* XXX */ 2242 } 2243 #endif 2244 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 2245 2246 /* Retry count and delay. */ 2247 mb[0] = MBC_SET_RETRY_COUNT; 2248 mb[1] = nv->bus[0].retry_count; 2249 mb[2] = nv->bus[0].retry_delay; 2250 mb[6] = nv->bus[1].retry_count; 2251 mb[7] = nv->bus[1].retry_delay; 2252 status |= qla1280_mailbox_command(ha, BIT_7 | BIT_6 | BIT_2 | 2253 BIT_1 | BIT_0, &mb[0]); 2254 2255 /* ASYNC data setup time. */ 2256 mb[0] = MBC_SET_ASYNC_DATA_SETUP; 2257 mb[1] = nv->bus[0].config_2.async_data_setup_time; 2258 mb[2] = nv->bus[1].config_2.async_data_setup_time; 2259 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); 2260 2261 /* Active negation states. */ 2262 mb[0] = MBC_SET_ACTIVE_NEGATION; 2263 mb[1] = 0; 2264 if (nv->bus[0].config_2.req_ack_active_negation) 2265 mb[1] |= BIT_5; 2266 if (nv->bus[0].config_2.data_line_active_negation) 2267 mb[1] |= BIT_4; 2268 mb[2] = 0; 2269 if (nv->bus[1].config_2.req_ack_active_negation) 2270 mb[2] |= BIT_5; 2271 if (nv->bus[1].config_2.data_line_active_negation) 2272 mb[2] |= BIT_4; 2273 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); 2274 2275 mb[0] = MBC_SET_DATA_OVERRUN_RECOVERY; 2276 mb[1] = 2; /* Reset SCSI bus and return all outstanding IO */ 2277 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 2278 2279 /* thingy */ 2280 mb[0] = MBC_SET_PCI_CONTROL; 2281 mb[1] = BIT_1; /* Data DMA Channel Burst Enable */ 2282 mb[2] = BIT_1; /* Command DMA Channel Burst Enable */ 2283 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); 2284 2285 mb[0] = MBC_SET_TAG_AGE_LIMIT; 2286 mb[1] = 8; 2287 status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); 2288 2289 /* Selection timeout. */ 2290 mb[0] = MBC_SET_SELECTION_TIMEOUT; 2291 mb[1] = nv->bus[0].selection_timeout; 2292 mb[2] = nv->bus[1].selection_timeout; 2293 status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb); 2294 2295 for (bus = 0; bus < ha->ports; bus++) 2296 status |= qla1280_config_bus(ha, bus); 2297 2298 if (status) 2299 dprintk(2, "qla1280_nvram_config: **** FAILED ****\n"); 2300 2301 LEAVE("qla1280_nvram_config"); 2302 return status; 2303 } 2304 2305 /* 2306 * Get NVRAM data word 2307 * Calculates word position in NVRAM and calls request routine to 2308 * get the word from NVRAM. 2309 * 2310 * Input: 2311 * ha = adapter block pointer. 2312 * address = NVRAM word address. 2313 * 2314 * Returns: 2315 * data word. 2316 */ 2317 static uint16_t 2318 qla1280_get_nvram_word(struct scsi_qla_host *ha, uint32_t address) 2319 { 2320 uint32_t nv_cmd; 2321 uint16_t data; 2322 2323 nv_cmd = address << 16; 2324 nv_cmd |= NV_READ_OP; 2325 2326 data = le16_to_cpu(qla1280_nvram_request(ha, nv_cmd)); 2327 2328 dprintk(8, "qla1280_get_nvram_word: exiting normally NVRAM data = " 2329 "0x%x", data); 2330 2331 return data; 2332 } 2333 2334 /* 2335 * NVRAM request 2336 * Sends read command to NVRAM and gets data from NVRAM. 2337 * 2338 * Input: 2339 * ha = adapter block pointer. 2340 * nv_cmd = Bit 26 = start bit 2341 * Bit 25, 24 = opcode 2342 * Bit 23-16 = address 2343 * Bit 15-0 = write data 2344 * 2345 * Returns: 2346 * data word. 2347 */ 2348 static uint16_t 2349 qla1280_nvram_request(struct scsi_qla_host *ha, uint32_t nv_cmd) 2350 { 2351 struct device_reg __iomem *reg = ha->iobase; 2352 int cnt; 2353 uint16_t data = 0; 2354 uint16_t reg_data; 2355 2356 /* Send command to NVRAM. */ 2357 2358 nv_cmd <<= 5; 2359 for (cnt = 0; cnt < 11; cnt++) { 2360 if (nv_cmd & BIT_31) 2361 qla1280_nv_write(ha, NV_DATA_OUT); 2362 else 2363 qla1280_nv_write(ha, 0); 2364 nv_cmd <<= 1; 2365 } 2366 2367 /* Read data from NVRAM. */ 2368 2369 for (cnt = 0; cnt < 16; cnt++) { 2370 WRT_REG_WORD(®->nvram, (NV_SELECT | NV_CLOCK)); 2371 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2372 NVRAM_DELAY(); 2373 data <<= 1; 2374 reg_data = RD_REG_WORD(®->nvram); 2375 if (reg_data & NV_DATA_IN) 2376 data |= BIT_0; 2377 WRT_REG_WORD(®->nvram, NV_SELECT); 2378 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2379 NVRAM_DELAY(); 2380 } 2381 2382 /* Deselect chip. */ 2383 2384 WRT_REG_WORD(®->nvram, NV_DESELECT); 2385 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2386 NVRAM_DELAY(); 2387 2388 return data; 2389 } 2390 2391 static void 2392 qla1280_nv_write(struct scsi_qla_host *ha, uint16_t data) 2393 { 2394 struct device_reg __iomem *reg = ha->iobase; 2395 2396 WRT_REG_WORD(®->nvram, data | NV_SELECT); 2397 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2398 NVRAM_DELAY(); 2399 WRT_REG_WORD(®->nvram, data | NV_SELECT | NV_CLOCK); 2400 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2401 NVRAM_DELAY(); 2402 WRT_REG_WORD(®->nvram, data | NV_SELECT); 2403 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2404 NVRAM_DELAY(); 2405 } 2406 2407 /* 2408 * Mailbox Command 2409 * Issue mailbox command and waits for completion. 2410 * 2411 * Input: 2412 * ha = adapter block pointer. 2413 * mr = mailbox registers to load. 2414 * mb = data pointer for mailbox registers. 2415 * 2416 * Output: 2417 * mb[MAILBOX_REGISTER_COUNT] = returned mailbox data. 2418 * 2419 * Returns: 2420 * 0 = success 2421 */ 2422 static int 2423 qla1280_mailbox_command(struct scsi_qla_host *ha, uint8_t mr, uint16_t *mb) 2424 { 2425 struct device_reg __iomem *reg = ha->iobase; 2426 #if 0 2427 LIST_HEAD(done_q); 2428 #endif 2429 int status = 0; 2430 int cnt; 2431 uint16_t *optr, *iptr; 2432 uint16_t __iomem *mptr; 2433 uint16_t data; 2434 DECLARE_COMPLETION(wait); 2435 struct timer_list timer; 2436 2437 ENTER("qla1280_mailbox_command"); 2438 2439 if (ha->mailbox_wait) { 2440 printk(KERN_ERR "Warning mailbox wait already in use!\n"); 2441 } 2442 ha->mailbox_wait = &wait; 2443 2444 /* 2445 * We really should start out by verifying that the mailbox is 2446 * available before starting sending the command data 2447 */ 2448 /* Load mailbox registers. */ 2449 mptr = (uint16_t __iomem *) ®->mailbox0; 2450 iptr = mb; 2451 for (cnt = 0; cnt < MAILBOX_REGISTER_COUNT; cnt++) { 2452 if (mr & BIT_0) { 2453 WRT_REG_WORD(mptr, (*iptr)); 2454 } 2455 2456 mr >>= 1; 2457 mptr++; 2458 iptr++; 2459 } 2460 2461 /* Issue set host interrupt command. */ 2462 2463 /* set up a timer just in case we're really jammed */ 2464 init_timer(&timer); 2465 timer.expires = jiffies + 20*HZ; 2466 timer.data = (unsigned long)ha; 2467 timer.function = qla1280_mailbox_timeout; 2468 add_timer(&timer); 2469 2470 spin_unlock_irq(ha->host->host_lock); 2471 WRT_REG_WORD(®->host_cmd, HC_SET_HOST_INT); 2472 data = qla1280_debounce_register(®->istatus); 2473 2474 wait_for_completion(&wait); 2475 del_timer_sync(&timer); 2476 2477 spin_lock_irq(ha->host->host_lock); 2478 2479 ha->mailbox_wait = NULL; 2480 2481 /* Check for mailbox command timeout. */ 2482 if (ha->mailbox_out[0] != MBS_CMD_CMP) { 2483 printk(KERN_WARNING "qla1280_mailbox_command: Command failed, " 2484 "mailbox0 = 0x%04x, mailbox_out0 = 0x%04x, istatus = " 2485 "0x%04x\n", 2486 mb[0], ha->mailbox_out[0], RD_REG_WORD(®->istatus)); 2487 printk(KERN_WARNING "m0 %04x, m1 %04x, m2 %04x, m3 %04x\n", 2488 RD_REG_WORD(®->mailbox0), RD_REG_WORD(®->mailbox1), 2489 RD_REG_WORD(®->mailbox2), RD_REG_WORD(®->mailbox3)); 2490 printk(KERN_WARNING "m4 %04x, m5 %04x, m6 %04x, m7 %04x\n", 2491 RD_REG_WORD(®->mailbox4), RD_REG_WORD(®->mailbox5), 2492 RD_REG_WORD(®->mailbox6), RD_REG_WORD(®->mailbox7)); 2493 status = 1; 2494 } 2495 2496 /* Load return mailbox registers. */ 2497 optr = mb; 2498 iptr = (uint16_t *) &ha->mailbox_out[0]; 2499 mr = MAILBOX_REGISTER_COUNT; 2500 memcpy(optr, iptr, MAILBOX_REGISTER_COUNT * sizeof(uint16_t)); 2501 2502 #if 0 2503 /* Go check for any response interrupts pending. */ 2504 qla1280_isr(ha, &done_q); 2505 #endif 2506 2507 if (ha->flags.reset_marker) 2508 qla1280_rst_aen(ha); 2509 2510 #if 0 2511 if (!list_empty(&done_q)) 2512 qla1280_done(ha, &done_q); 2513 #endif 2514 2515 if (status) 2516 dprintk(2, "qla1280_mailbox_command: **** FAILED, mailbox0 = " 2517 "0x%x ****\n", mb[0]); 2518 2519 LEAVE("qla1280_mailbox_command"); 2520 return status; 2521 } 2522 2523 /* 2524 * qla1280_poll 2525 * Polls ISP for interrupts. 2526 * 2527 * Input: 2528 * ha = adapter block pointer. 2529 */ 2530 static void 2531 qla1280_poll(struct scsi_qla_host *ha) 2532 { 2533 struct device_reg __iomem *reg = ha->iobase; 2534 uint16_t data; 2535 LIST_HEAD(done_q); 2536 2537 /* ENTER("qla1280_poll"); */ 2538 2539 /* Check for pending interrupts. */ 2540 data = RD_REG_WORD(®->istatus); 2541 if (data & RISC_INT) 2542 qla1280_isr(ha, &done_q); 2543 2544 if (!ha->mailbox_wait) { 2545 if (ha->flags.reset_marker) 2546 qla1280_rst_aen(ha); 2547 } 2548 2549 if (!list_empty(&done_q)) 2550 qla1280_done(ha); 2551 2552 /* LEAVE("qla1280_poll"); */ 2553 } 2554 2555 /* 2556 * qla1280_bus_reset 2557 * Issue SCSI bus reset. 2558 * 2559 * Input: 2560 * ha = adapter block pointer. 2561 * bus = SCSI bus number. 2562 * 2563 * Returns: 2564 * 0 = success 2565 */ 2566 static int 2567 qla1280_bus_reset(struct scsi_qla_host *ha, int bus) 2568 { 2569 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2570 uint16_t reset_delay; 2571 int status; 2572 2573 dprintk(3, "qla1280_bus_reset: entered\n"); 2574 2575 if (qla1280_verbose) 2576 printk(KERN_INFO "scsi(%li:%i): Resetting SCSI BUS\n", 2577 ha->host_no, bus); 2578 2579 reset_delay = ha->bus_settings[bus].bus_reset_delay; 2580 mb[0] = MBC_BUS_RESET; 2581 mb[1] = reset_delay; 2582 mb[2] = (uint16_t) bus; 2583 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); 2584 2585 if (status) { 2586 if (ha->bus_settings[bus].failed_reset_count > 2) 2587 ha->bus_settings[bus].scsi_bus_dead = 1; 2588 ha->bus_settings[bus].failed_reset_count++; 2589 } else { 2590 spin_unlock_irq(ha->host->host_lock); 2591 ssleep(reset_delay); 2592 spin_lock_irq(ha->host->host_lock); 2593 2594 ha->bus_settings[bus].scsi_bus_dead = 0; 2595 ha->bus_settings[bus].failed_reset_count = 0; 2596 ha->bus_settings[bus].reset_marker = 0; 2597 /* Issue marker command. */ 2598 qla1280_marker(ha, bus, 0, 0, MK_SYNC_ALL); 2599 } 2600 2601 /* 2602 * We should probably call qla1280_set_target_parameters() 2603 * here as well for all devices on the bus. 2604 */ 2605 2606 if (status) 2607 dprintk(2, "qla1280_bus_reset: **** FAILED ****\n"); 2608 else 2609 dprintk(3, "qla1280_bus_reset: exiting normally\n"); 2610 2611 return status; 2612 } 2613 2614 /* 2615 * qla1280_device_reset 2616 * Issue bus device reset message to the target. 2617 * 2618 * Input: 2619 * ha = adapter block pointer. 2620 * bus = SCSI BUS number. 2621 * target = SCSI ID. 2622 * 2623 * Returns: 2624 * 0 = success 2625 */ 2626 static int 2627 qla1280_device_reset(struct scsi_qla_host *ha, int bus, int target) 2628 { 2629 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2630 int status; 2631 2632 ENTER("qla1280_device_reset"); 2633 2634 mb[0] = MBC_ABORT_TARGET; 2635 mb[1] = (bus ? (target | BIT_7) : target) << 8; 2636 mb[2] = 1; 2637 status = qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]); 2638 2639 /* Issue marker command. */ 2640 qla1280_marker(ha, bus, target, 0, MK_SYNC_ID); 2641 2642 if (status) 2643 dprintk(2, "qla1280_device_reset: **** FAILED ****\n"); 2644 2645 LEAVE("qla1280_device_reset"); 2646 return status; 2647 } 2648 2649 /* 2650 * qla1280_abort_device 2651 * Issue an abort message to the device 2652 * 2653 * Input: 2654 * ha = adapter block pointer. 2655 * bus = SCSI BUS. 2656 * target = SCSI ID. 2657 * lun = SCSI LUN. 2658 * 2659 * Returns: 2660 * 0 = success 2661 */ 2662 static int 2663 qla1280_abort_device(struct scsi_qla_host *ha, int bus, int target, int lun) 2664 { 2665 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2666 int status; 2667 2668 ENTER("qla1280_abort_device"); 2669 2670 mb[0] = MBC_ABORT_DEVICE; 2671 mb[1] = (bus ? target | BIT_7 : target) << 8 | lun; 2672 status = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); 2673 2674 /* Issue marker command. */ 2675 qla1280_marker(ha, bus, target, lun, MK_SYNC_ID_LUN); 2676 2677 if (status) 2678 dprintk(2, "qla1280_abort_device: **** FAILED ****\n"); 2679 2680 LEAVE("qla1280_abort_device"); 2681 return status; 2682 } 2683 2684 /* 2685 * qla1280_abort_command 2686 * Abort command aborts a specified IOCB. 2687 * 2688 * Input: 2689 * ha = adapter block pointer. 2690 * sp = SB structure pointer. 2691 * 2692 * Returns: 2693 * 0 = success 2694 */ 2695 static int 2696 qla1280_abort_command(struct scsi_qla_host *ha, struct srb * sp, int handle) 2697 { 2698 uint16_t mb[MAILBOX_REGISTER_COUNT]; 2699 unsigned int bus, target, lun; 2700 int status; 2701 2702 ENTER("qla1280_abort_command"); 2703 2704 bus = SCSI_BUS_32(sp->cmd); 2705 target = SCSI_TCN_32(sp->cmd); 2706 lun = SCSI_LUN_32(sp->cmd); 2707 2708 sp->flags |= SRB_ABORT_PENDING; 2709 2710 mb[0] = MBC_ABORT_COMMAND; 2711 mb[1] = (bus ? target | BIT_7 : target) << 8 | lun; 2712 mb[2] = handle >> 16; 2713 mb[3] = handle & 0xffff; 2714 status = qla1280_mailbox_command(ha, 0x0f, &mb[0]); 2715 2716 if (status) { 2717 dprintk(2, "qla1280_abort_command: **** FAILED ****\n"); 2718 sp->flags &= ~SRB_ABORT_PENDING; 2719 } 2720 2721 2722 LEAVE("qla1280_abort_command"); 2723 return status; 2724 } 2725 2726 /* 2727 * qla1280_reset_adapter 2728 * Reset adapter. 2729 * 2730 * Input: 2731 * ha = adapter block pointer. 2732 */ 2733 static void 2734 qla1280_reset_adapter(struct scsi_qla_host *ha) 2735 { 2736 struct device_reg __iomem *reg = ha->iobase; 2737 2738 ENTER("qla1280_reset_adapter"); 2739 2740 /* Disable ISP chip */ 2741 ha->flags.online = 0; 2742 WRT_REG_WORD(®->ictrl, ISP_RESET); 2743 WRT_REG_WORD(®->host_cmd, 2744 HC_RESET_RISC | HC_RELEASE_RISC | HC_DISABLE_BIOS); 2745 RD_REG_WORD(®->id_l); /* Flush PCI write */ 2746 2747 LEAVE("qla1280_reset_adapter"); 2748 } 2749 2750 /* 2751 * Issue marker command. 2752 * Function issues marker IOCB. 2753 * 2754 * Input: 2755 * ha = adapter block pointer. 2756 * bus = SCSI BUS number 2757 * id = SCSI ID 2758 * lun = SCSI LUN 2759 * type = marker modifier 2760 */ 2761 static void 2762 qla1280_marker(struct scsi_qla_host *ha, int bus, int id, int lun, u8 type) 2763 { 2764 struct mrk_entry *pkt; 2765 2766 ENTER("qla1280_marker"); 2767 2768 /* Get request packet. */ 2769 if ((pkt = (struct mrk_entry *) qla1280_req_pkt(ha))) { 2770 pkt->entry_type = MARKER_TYPE; 2771 pkt->lun = (uint8_t) lun; 2772 pkt->target = (uint8_t) (bus ? (id | BIT_7) : id); 2773 pkt->modifier = type; 2774 pkt->entry_status = 0; 2775 2776 /* Issue command to ISP */ 2777 qla1280_isp_cmd(ha); 2778 } 2779 2780 LEAVE("qla1280_marker"); 2781 } 2782 2783 2784 /* 2785 * qla1280_64bit_start_scsi 2786 * The start SCSI is responsible for building request packets on 2787 * request ring and modifying ISP input pointer. 2788 * 2789 * Input: 2790 * ha = adapter block pointer. 2791 * sp = SB structure pointer. 2792 * 2793 * Returns: 2794 * 0 = success, was able to issue command. 2795 */ 2796 #ifdef QLA_64BIT_PTR 2797 static int 2798 qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) 2799 { 2800 struct device_reg __iomem *reg = ha->iobase; 2801 struct scsi_cmnd *cmd = sp->cmd; 2802 cmd_a64_entry_t *pkt; 2803 struct scatterlist *sg = NULL; 2804 __le32 *dword_ptr; 2805 dma_addr_t dma_handle; 2806 int status = 0; 2807 int cnt; 2808 int req_cnt; 2809 u16 seg_cnt; 2810 u8 dir; 2811 2812 ENTER("qla1280_64bit_start_scsi:"); 2813 2814 /* Calculate number of entries and segments required. */ 2815 req_cnt = 1; 2816 if (cmd->use_sg) { 2817 sg = (struct scatterlist *) cmd->request_buffer; 2818 seg_cnt = pci_map_sg(ha->pdev, sg, cmd->use_sg, 2819 cmd->sc_data_direction); 2820 2821 if (seg_cnt > 2) { 2822 req_cnt += (seg_cnt - 2) / 5; 2823 if ((seg_cnt - 2) % 5) 2824 req_cnt++; 2825 } 2826 } else if (cmd->request_bufflen) { /* If data transfer. */ 2827 seg_cnt = 1; 2828 } else { 2829 seg_cnt = 0; 2830 } 2831 2832 if ((req_cnt + 2) >= ha->req_q_cnt) { 2833 /* Calculate number of free request entries. */ 2834 cnt = RD_REG_WORD(®->mailbox4); 2835 if (ha->req_ring_index < cnt) 2836 ha->req_q_cnt = cnt - ha->req_ring_index; 2837 else 2838 ha->req_q_cnt = 2839 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); 2840 } 2841 2842 dprintk(3, "Number of free entries=(%d) seg_cnt=0x%x\n", 2843 ha->req_q_cnt, seg_cnt); 2844 2845 /* If room for request in request ring. */ 2846 if ((req_cnt + 2) >= ha->req_q_cnt) { 2847 status = 1; 2848 dprintk(2, "qla1280_start_scsi: in-ptr=0x%x req_q_cnt=" 2849 "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt, 2850 req_cnt); 2851 goto out; 2852 } 2853 2854 /* Check for room in outstanding command list. */ 2855 for (cnt = 0; cnt < MAX_OUTSTANDING_COMMANDS && 2856 ha->outstanding_cmds[cnt] != 0; cnt++); 2857 2858 if (cnt >= MAX_OUTSTANDING_COMMANDS) { 2859 status = 1; 2860 dprintk(2, "qla1280_start_scsi: NO ROOM IN " 2861 "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt); 2862 goto out; 2863 } 2864 2865 ha->outstanding_cmds[cnt] = sp; 2866 ha->req_q_cnt -= req_cnt; 2867 CMD_HANDLE(sp->cmd) = (unsigned char *)(unsigned long)(cnt + 1); 2868 2869 dprintk(2, "start: cmd=%p sp=%p CDB=%xm, handle %lx\n", cmd, sp, 2870 cmd->cmnd[0], (long)CMD_HANDLE(sp->cmd)); 2871 dprintk(2, " bus %i, target %i, lun %i\n", 2872 SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd)); 2873 qla1280_dump_buffer(2, cmd->cmnd, MAX_COMMAND_SIZE); 2874 2875 /* 2876 * Build command packet. 2877 */ 2878 pkt = (cmd_a64_entry_t *) ha->request_ring_ptr; 2879 2880 pkt->entry_type = COMMAND_A64_TYPE; 2881 pkt->entry_count = (uint8_t) req_cnt; 2882 pkt->sys_define = (uint8_t) ha->req_ring_index; 2883 pkt->entry_status = 0; 2884 pkt->handle = cpu_to_le32(cnt); 2885 2886 /* Zero out remaining portion of packet. */ 2887 memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8)); 2888 2889 /* Set ISP command timeout. */ 2890 pkt->timeout = cpu_to_le16(30); 2891 2892 /* Set device target ID and LUN */ 2893 pkt->lun = SCSI_LUN_32(cmd); 2894 pkt->target = SCSI_BUS_32(cmd) ? 2895 (SCSI_TCN_32(cmd) | BIT_7) : SCSI_TCN_32(cmd); 2896 2897 /* Enable simple tag queuing if device supports it. */ 2898 if (cmd->device->simple_tags) 2899 pkt->control_flags |= cpu_to_le16(BIT_3); 2900 2901 /* Load SCSI command packet. */ 2902 pkt->cdb_len = cpu_to_le16(CMD_CDBLEN(cmd)); 2903 memcpy(pkt->scsi_cdb, &(CMD_CDBP(cmd)), CMD_CDBLEN(cmd)); 2904 /* dprintk(1, "Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0]); */ 2905 2906 /* Set transfer direction. */ 2907 dir = qla1280_data_direction(cmd); 2908 pkt->control_flags |= cpu_to_le16(dir); 2909 2910 /* Set total data segment count. */ 2911 pkt->dseg_count = cpu_to_le16(seg_cnt); 2912 2913 /* 2914 * Load data segments. 2915 */ 2916 if (seg_cnt) { /* If data transfer. */ 2917 /* Setup packet address segment pointer. */ 2918 dword_ptr = (u32 *)&pkt->dseg_0_address; 2919 2920 if (cmd->use_sg) { /* If scatter gather */ 2921 /* Load command entry data segments. */ 2922 for (cnt = 0; cnt < 2 && seg_cnt; cnt++, seg_cnt--) { 2923 dma_handle = sg_dma_address(sg); 2924 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2) 2925 if (ha->flags.use_pci_vchannel) 2926 sn_pci_set_vchan(ha->pdev, 2927 (unsigned long *)&dma_handle, 2928 SCSI_BUS_32(cmd)); 2929 #endif 2930 *dword_ptr++ = 2931 cpu_to_le32(pci_dma_lo32(dma_handle)); 2932 *dword_ptr++ = 2933 cpu_to_le32(pci_dma_hi32(dma_handle)); 2934 *dword_ptr++ = cpu_to_le32(sg_dma_len(sg)); 2935 sg++; 2936 dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n", 2937 cpu_to_le32(pci_dma_hi32(dma_handle)), 2938 cpu_to_le32(pci_dma_lo32(dma_handle)), 2939 cpu_to_le32(sg_dma_len(sg))); 2940 } 2941 dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather " 2942 "command packet data - b %i, t %i, l %i \n", 2943 SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), 2944 SCSI_LUN_32(cmd)); 2945 qla1280_dump_buffer(5, (char *)pkt, 2946 REQUEST_ENTRY_SIZE); 2947 2948 /* 2949 * Build continuation packets. 2950 */ 2951 dprintk(3, "S/G Building Continuation...seg_cnt=0x%x " 2952 "remains\n", seg_cnt); 2953 2954 while (seg_cnt > 0) { 2955 /* Adjust ring index. */ 2956 ha->req_ring_index++; 2957 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { 2958 ha->req_ring_index = 0; 2959 ha->request_ring_ptr = 2960 ha->request_ring; 2961 } else 2962 ha->request_ring_ptr++; 2963 2964 pkt = (cmd_a64_entry_t *)ha->request_ring_ptr; 2965 2966 /* Zero out packet. */ 2967 memset(pkt, 0, REQUEST_ENTRY_SIZE); 2968 2969 /* Load packet defaults. */ 2970 ((struct cont_a64_entry *) pkt)->entry_type = 2971 CONTINUE_A64_TYPE; 2972 ((struct cont_a64_entry *) pkt)->entry_count = 1; 2973 ((struct cont_a64_entry *) pkt)->sys_define = 2974 (uint8_t)ha->req_ring_index; 2975 /* Setup packet address segment pointer. */ 2976 dword_ptr = 2977 (u32 *)&((struct cont_a64_entry *) pkt)->dseg_0_address; 2978 2979 /* Load continuation entry data segments. */ 2980 for (cnt = 0; cnt < 5 && seg_cnt; 2981 cnt++, seg_cnt--) { 2982 dma_handle = sg_dma_address(sg); 2983 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2) 2984 if (ha->flags.use_pci_vchannel) 2985 sn_pci_set_vchan(ha->pdev, 2986 (unsigned long *)&dma_handle, 2987 SCSI_BUS_32(cmd)); 2988 #endif 2989 *dword_ptr++ = 2990 cpu_to_le32(pci_dma_lo32(dma_handle)); 2991 *dword_ptr++ = 2992 cpu_to_le32(pci_dma_hi32(dma_handle)); 2993 *dword_ptr++ = 2994 cpu_to_le32(sg_dma_len(sg)); 2995 dprintk(3, "S/G Segment Cont. phys_addr=%x %x, len=0x%x\n", 2996 cpu_to_le32(pci_dma_hi32(dma_handle)), 2997 cpu_to_le32(pci_dma_lo32(dma_handle)), 2998 cpu_to_le32(sg_dma_len(sg))); 2999 sg++; 3000 } 3001 dprintk(5, "qla1280_64bit_start_scsi: " 3002 "continuation packet data - b %i, t " 3003 "%i, l %i \n", SCSI_BUS_32(cmd), 3004 SCSI_TCN_32(cmd), SCSI_LUN_32(cmd)); 3005 qla1280_dump_buffer(5, (char *)pkt, 3006 REQUEST_ENTRY_SIZE); 3007 } 3008 } else { /* No scatter gather data transfer */ 3009 dma_handle = pci_map_single(ha->pdev, 3010 cmd->request_buffer, 3011 cmd->request_bufflen, 3012 cmd->sc_data_direction); 3013 3014 sp->saved_dma_handle = dma_handle; 3015 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2) 3016 if (ha->flags.use_pci_vchannel) 3017 sn_pci_set_vchan(ha->pdev, 3018 (unsigned long *)&dma_handle, 3019 SCSI_BUS_32(cmd)); 3020 #endif 3021 *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle)); 3022 *dword_ptr++ = cpu_to_le32(pci_dma_hi32(dma_handle)); 3023 *dword_ptr = cpu_to_le32(cmd->request_bufflen); 3024 3025 dprintk(5, "qla1280_64bit_start_scsi: No scatter/" 3026 "gather command packet data - b %i, t %i, " 3027 "l %i \n", SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), 3028 SCSI_LUN_32(cmd)); 3029 qla1280_dump_buffer(5, (char *)pkt, 3030 REQUEST_ENTRY_SIZE); 3031 } 3032 } else { /* No data transfer */ 3033 dprintk(5, "qla1280_64bit_start_scsi: No data, command " 3034 "packet data - b %i, t %i, l %i \n", 3035 SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd)); 3036 qla1280_dump_buffer(5, (char *)pkt, REQUEST_ENTRY_SIZE); 3037 } 3038 /* Adjust ring index. */ 3039 ha->req_ring_index++; 3040 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { 3041 ha->req_ring_index = 0; 3042 ha->request_ring_ptr = ha->request_ring; 3043 } else 3044 ha->request_ring_ptr++; 3045 3046 /* Set chip new ring index. */ 3047 dprintk(2, 3048 "qla1280_64bit_start_scsi: Wakeup RISC for pending command\n"); 3049 sp->flags |= SRB_SENT; 3050 ha->actthreads++; 3051 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); 3052 /* Enforce mmio write ordering; see comment in qla1280_isp_cmd(). */ 3053 mmiowb(); 3054 3055 out: 3056 if (status) 3057 dprintk(2, "qla1280_64bit_start_scsi: **** FAILED ****\n"); 3058 else 3059 dprintk(3, "qla1280_64bit_start_scsi: exiting normally\n"); 3060 3061 return status; 3062 } 3063 #else /* !QLA_64BIT_PTR */ 3064 3065 /* 3066 * qla1280_32bit_start_scsi 3067 * The start SCSI is responsible for building request packets on 3068 * request ring and modifying ISP input pointer. 3069 * 3070 * The Qlogic firmware interface allows every queue slot to have a SCSI 3071 * command and up to 4 scatter/gather (SG) entries. If we need more 3072 * than 4 SG entries, then continuation entries are used that can 3073 * hold another 7 entries each. The start routine determines if there 3074 * is eought empty slots then build the combination of requests to 3075 * fulfill the OS request. 3076 * 3077 * Input: 3078 * ha = adapter block pointer. 3079 * sp = SCSI Request Block structure pointer. 3080 * 3081 * Returns: 3082 * 0 = success, was able to issue command. 3083 */ 3084 static int 3085 qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp) 3086 { 3087 struct device_reg __iomem *reg = ha->iobase; 3088 struct scsi_cmnd *cmd = sp->cmd; 3089 struct cmd_entry *pkt; 3090 struct scatterlist *sg = NULL; 3091 __le32 *dword_ptr; 3092 int status = 0; 3093 int cnt; 3094 int req_cnt; 3095 uint16_t seg_cnt; 3096 dma_addr_t dma_handle; 3097 u8 dir; 3098 3099 ENTER("qla1280_32bit_start_scsi"); 3100 3101 dprintk(1, "32bit_start: cmd=%p sp=%p CDB=%x\n", cmd, sp, 3102 cmd->cmnd[0]); 3103 3104 /* Calculate number of entries and segments required. */ 3105 req_cnt = 1; 3106 if (cmd->use_sg) { 3107 /* 3108 * We must build an SG list in adapter format, as the kernel's 3109 * SG list cannot be used directly because of data field size 3110 * (__alpha__) differences and the kernel SG list uses virtual 3111 * addresses where we need physical addresses. 3112 */ 3113 sg = (struct scatterlist *) cmd->request_buffer; 3114 seg_cnt = pci_map_sg(ha->pdev, sg, cmd->use_sg, 3115 cmd->sc_data_direction); 3116 3117 /* 3118 * if greater than four sg entries then we need to allocate 3119 * continuation entries 3120 */ 3121 if (seg_cnt > 4) { 3122 req_cnt += (seg_cnt - 4) / 7; 3123 if ((seg_cnt - 4) % 7) 3124 req_cnt++; 3125 } 3126 dprintk(3, "S/G Transfer cmd=%p seg_cnt=0x%x, req_cnt=%x\n", 3127 cmd, seg_cnt, req_cnt); 3128 } else if (cmd->request_bufflen) { /* If data transfer. */ 3129 dprintk(3, "No S/G transfer t=%x cmd=%p len=%x CDB=%x\n", 3130 SCSI_TCN_32(cmd), cmd, cmd->request_bufflen, 3131 cmd->cmnd[0]); 3132 seg_cnt = 1; 3133 } else { 3134 /* dprintk(1, "No data transfer \n"); */ 3135 seg_cnt = 0; 3136 } 3137 3138 if ((req_cnt + 2) >= ha->req_q_cnt) { 3139 /* Calculate number of free request entries. */ 3140 cnt = RD_REG_WORD(®->mailbox4); 3141 if (ha->req_ring_index < cnt) 3142 ha->req_q_cnt = cnt - ha->req_ring_index; 3143 else 3144 ha->req_q_cnt = 3145 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); 3146 } 3147 3148 dprintk(3, "Number of free entries=(%d) seg_cnt=0x%x\n", 3149 ha->req_q_cnt, seg_cnt); 3150 /* If room for request in request ring. */ 3151 if ((req_cnt + 2) >= ha->req_q_cnt) { 3152 status = 1; 3153 dprintk(2, "qla1280_32bit_start_scsi: in-ptr=0x%x, " 3154 "req_q_cnt=0x%x, req_cnt=0x%x", ha->req_ring_index, 3155 ha->req_q_cnt, req_cnt); 3156 goto out; 3157 } 3158 3159 /* Check for empty slot in outstanding command list. */ 3160 for (cnt = 0; cnt < MAX_OUTSTANDING_COMMANDS && 3161 (ha->outstanding_cmds[cnt] != 0); cnt++) ; 3162 3163 if (cnt >= MAX_OUTSTANDING_COMMANDS) { 3164 status = 1; 3165 dprintk(2, "qla1280_32bit_start_scsi: NO ROOM IN OUTSTANDING " 3166 "ARRAY, req_q_cnt=0x%x\n", ha->req_q_cnt); 3167 goto out; 3168 } 3169 3170 CMD_HANDLE(sp->cmd) = (unsigned char *) (unsigned long)(cnt + 1); 3171 ha->outstanding_cmds[cnt] = sp; 3172 ha->req_q_cnt -= req_cnt; 3173 3174 /* 3175 * Build command packet. 3176 */ 3177 pkt = (struct cmd_entry *) ha->request_ring_ptr; 3178 3179 pkt->entry_type = COMMAND_TYPE; 3180 pkt->entry_count = (uint8_t) req_cnt; 3181 pkt->sys_define = (uint8_t) ha->req_ring_index; 3182 pkt->entry_status = 0; 3183 pkt->handle = cpu_to_le32(cnt); 3184 3185 /* Zero out remaining portion of packet. */ 3186 memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8)); 3187 3188 /* Set ISP command timeout. */ 3189 pkt->timeout = cpu_to_le16(30); 3190 3191 /* Set device target ID and LUN */ 3192 pkt->lun = SCSI_LUN_32(cmd); 3193 pkt->target = SCSI_BUS_32(cmd) ? 3194 (SCSI_TCN_32(cmd) | BIT_7) : SCSI_TCN_32(cmd); 3195 3196 /* Enable simple tag queuing if device supports it. */ 3197 if (cmd->device->simple_tags) 3198 pkt->control_flags |= cpu_to_le16(BIT_3); 3199 3200 /* Load SCSI command packet. */ 3201 pkt->cdb_len = cpu_to_le16(CMD_CDBLEN(cmd)); 3202 memcpy(pkt->scsi_cdb, &(CMD_CDBP(cmd)), CMD_CDBLEN(cmd)); 3203 3204 /*dprintk(1, "Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0]); */ 3205 /* Set transfer direction. */ 3206 dir = qla1280_data_direction(cmd); 3207 pkt->control_flags |= cpu_to_le16(dir); 3208 3209 /* Set total data segment count. */ 3210 pkt->dseg_count = cpu_to_le16(seg_cnt); 3211 3212 /* 3213 * Load data segments. 3214 */ 3215 if (seg_cnt) { 3216 /* Setup packet address segment pointer. */ 3217 dword_ptr = &pkt->dseg_0_address; 3218 3219 if (cmd->use_sg) { /* If scatter gather */ 3220 dprintk(3, "Building S/G data segments..\n"); 3221 qla1280_dump_buffer(1, (char *)sg, 4 * 16); 3222 3223 /* Load command entry data segments. */ 3224 for (cnt = 0; cnt < 4 && seg_cnt; cnt++, seg_cnt--) { 3225 *dword_ptr++ = 3226 cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); 3227 *dword_ptr++ = 3228 cpu_to_le32(sg_dma_len(sg)); 3229 dprintk(3, "S/G Segment phys_addr=0x%lx, len=0x%x\n", 3230 (pci_dma_lo32(sg_dma_address(sg))), 3231 (sg_dma_len(sg))); 3232 sg++; 3233 } 3234 /* 3235 * Build continuation packets. 3236 */ 3237 dprintk(3, "S/G Building Continuation" 3238 "...seg_cnt=0x%x remains\n", seg_cnt); 3239 while (seg_cnt > 0) { 3240 /* Adjust ring index. */ 3241 ha->req_ring_index++; 3242 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { 3243 ha->req_ring_index = 0; 3244 ha->request_ring_ptr = 3245 ha->request_ring; 3246 } else 3247 ha->request_ring_ptr++; 3248 3249 pkt = (struct cmd_entry *)ha->request_ring_ptr; 3250 3251 /* Zero out packet. */ 3252 memset(pkt, 0, REQUEST_ENTRY_SIZE); 3253 3254 /* Load packet defaults. */ 3255 ((struct cont_entry *) pkt)-> 3256 entry_type = CONTINUE_TYPE; 3257 ((struct cont_entry *) pkt)->entry_count = 1; 3258 3259 ((struct cont_entry *) pkt)->sys_define = 3260 (uint8_t) ha->req_ring_index; 3261 3262 /* Setup packet address segment pointer. */ 3263 dword_ptr = 3264 &((struct cont_entry *) pkt)->dseg_0_address; 3265 3266 /* Load continuation entry data segments. */ 3267 for (cnt = 0; cnt < 7 && seg_cnt; 3268 cnt++, seg_cnt--) { 3269 *dword_ptr++ = 3270 cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); 3271 *dword_ptr++ = 3272 cpu_to_le32(sg_dma_len(sg)); 3273 dprintk(1, 3274 "S/G Segment Cont. phys_addr=0x%x, " 3275 "len=0x%x\n", 3276 cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))), 3277 cpu_to_le32(sg_dma_len(sg))); 3278 sg++; 3279 } 3280 dprintk(5, "qla1280_32bit_start_scsi: " 3281 "continuation packet data - " 3282 "scsi(%i:%i:%i)\n", SCSI_BUS_32(cmd), 3283 SCSI_TCN_32(cmd), SCSI_LUN_32(cmd)); 3284 qla1280_dump_buffer(5, (char *)pkt, 3285 REQUEST_ENTRY_SIZE); 3286 } 3287 } else { /* No S/G data transfer */ 3288 dma_handle = pci_map_single(ha->pdev, 3289 cmd->request_buffer, 3290 cmd->request_bufflen, 3291 cmd->sc_data_direction); 3292 sp->saved_dma_handle = dma_handle; 3293 3294 *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle)); 3295 *dword_ptr = cpu_to_le32(cmd->request_bufflen); 3296 } 3297 } else { /* No data transfer at all */ 3298 dprintk(5, "qla1280_32bit_start_scsi: No data, command " 3299 "packet data - \n"); 3300 qla1280_dump_buffer(5, (char *)pkt, REQUEST_ENTRY_SIZE); 3301 } 3302 dprintk(5, "qla1280_32bit_start_scsi: First IOCB block:\n"); 3303 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, 3304 REQUEST_ENTRY_SIZE); 3305 3306 /* Adjust ring index. */ 3307 ha->req_ring_index++; 3308 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { 3309 ha->req_ring_index = 0; 3310 ha->request_ring_ptr = ha->request_ring; 3311 } else 3312 ha->request_ring_ptr++; 3313 3314 /* Set chip new ring index. */ 3315 dprintk(2, "qla1280_32bit_start_scsi: Wakeup RISC " 3316 "for pending command\n"); 3317 sp->flags |= SRB_SENT; 3318 ha->actthreads++; 3319 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); 3320 /* Enforce mmio write ordering; see comment in qla1280_isp_cmd(). */ 3321 mmiowb(); 3322 3323 out: 3324 if (status) 3325 dprintk(2, "qla1280_32bit_start_scsi: **** FAILED ****\n"); 3326 3327 LEAVE("qla1280_32bit_start_scsi"); 3328 3329 return status; 3330 } 3331 #endif 3332 3333 /* 3334 * qla1280_req_pkt 3335 * Function is responsible for locking ring and 3336 * getting a zeroed out request packet. 3337 * 3338 * Input: 3339 * ha = adapter block pointer. 3340 * 3341 * Returns: 3342 * 0 = failed to get slot. 3343 */ 3344 static request_t * 3345 qla1280_req_pkt(struct scsi_qla_host *ha) 3346 { 3347 struct device_reg __iomem *reg = ha->iobase; 3348 request_t *pkt = NULL; 3349 int cnt; 3350 uint32_t timer; 3351 3352 ENTER("qla1280_req_pkt"); 3353 3354 /* 3355 * This can be called from interrupt context, damn it!!! 3356 */ 3357 /* Wait for 30 seconds for slot. */ 3358 for (timer = 15000000; timer; timer--) { 3359 if (ha->req_q_cnt > 0) { 3360 /* Calculate number of free request entries. */ 3361 cnt = RD_REG_WORD(®->mailbox4); 3362 if (ha->req_ring_index < cnt) 3363 ha->req_q_cnt = cnt - ha->req_ring_index; 3364 else 3365 ha->req_q_cnt = 3366 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); 3367 } 3368 3369 /* Found empty request ring slot? */ 3370 if (ha->req_q_cnt > 0) { 3371 ha->req_q_cnt--; 3372 pkt = ha->request_ring_ptr; 3373 3374 /* Zero out packet. */ 3375 memset(pkt, 0, REQUEST_ENTRY_SIZE); 3376 3377 /* 3378 * How can this be right when we have a ring 3379 * size of 512??? 3380 */ 3381 /* Set system defined field. */ 3382 pkt->sys_define = (uint8_t) ha->req_ring_index; 3383 3384 /* Set entry count. */ 3385 pkt->entry_count = 1; 3386 3387 break; 3388 } 3389 3390 udelay(2); /* 10 */ 3391 3392 /* Check for pending interrupts. */ 3393 qla1280_poll(ha); 3394 } 3395 3396 if (!pkt) 3397 dprintk(2, "qla1280_req_pkt: **** FAILED ****\n"); 3398 else 3399 dprintk(3, "qla1280_req_pkt: exiting normally\n"); 3400 3401 return pkt; 3402 } 3403 3404 /* 3405 * qla1280_isp_cmd 3406 * Function is responsible for modifying ISP input pointer. 3407 * Releases ring lock. 3408 * 3409 * Input: 3410 * ha = adapter block pointer. 3411 */ 3412 static void 3413 qla1280_isp_cmd(struct scsi_qla_host *ha) 3414 { 3415 struct device_reg __iomem *reg = ha->iobase; 3416 3417 ENTER("qla1280_isp_cmd"); 3418 3419 dprintk(5, "qla1280_isp_cmd: IOCB data:\n"); 3420 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, 3421 REQUEST_ENTRY_SIZE); 3422 3423 /* Adjust ring index. */ 3424 ha->req_ring_index++; 3425 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { 3426 ha->req_ring_index = 0; 3427 ha->request_ring_ptr = ha->request_ring; 3428 } else 3429 ha->request_ring_ptr++; 3430 3431 /* 3432 * Update request index to mailbox4 (Request Queue In). 3433 * The mmiowb() ensures that this write is ordered with writes by other 3434 * CPUs. Without the mmiowb(), it is possible for the following: 3435 * CPUA posts write of index 5 to mailbox4 3436 * CPUA releases host lock 3437 * CPUB acquires host lock 3438 * CPUB posts write of index 6 to mailbox4 3439 * On PCI bus, order reverses and write of 6 posts, then index 5, 3440 * causing chip to issue full queue of stale commands 3441 * The mmiowb() prevents future writes from crossing the barrier. 3442 * See Documentation/DocBook/deviceiobook.tmpl for more information. 3443 */ 3444 WRT_REG_WORD(®->mailbox4, ha->req_ring_index); 3445 mmiowb(); 3446 3447 LEAVE("qla1280_isp_cmd"); 3448 } 3449 3450 /****************************************************************************/ 3451 /* Interrupt Service Routine. */ 3452 /****************************************************************************/ 3453 3454 /**************************************************************************** 3455 * qla1280_isr 3456 * Calls I/O done on command completion. 3457 * 3458 * Input: 3459 * ha = adapter block pointer. 3460 * done_q = done queue. 3461 ****************************************************************************/ 3462 static void 3463 qla1280_isr(struct scsi_qla_host *ha, struct list_head *done_q) 3464 { 3465 struct device_reg __iomem *reg = ha->iobase; 3466 struct response *pkt; 3467 struct srb *sp = NULL; 3468 uint16_t mailbox[MAILBOX_REGISTER_COUNT]; 3469 uint16_t *wptr; 3470 uint32_t index; 3471 u16 istatus; 3472 3473 ENTER("qla1280_isr"); 3474 3475 istatus = RD_REG_WORD(®->istatus); 3476 if (!(istatus & (RISC_INT | PCI_INT))) 3477 return; 3478 3479 /* Save mailbox register 5 */ 3480 mailbox[5] = RD_REG_WORD(®->mailbox5); 3481 3482 /* Check for mailbox interrupt. */ 3483 3484 mailbox[0] = RD_REG_WORD_dmasync(®->semaphore); 3485 3486 if (mailbox[0] & BIT_0) { 3487 /* Get mailbox data. */ 3488 /* dprintk(1, "qla1280_isr: In Get mailbox data \n"); */ 3489 3490 wptr = &mailbox[0]; 3491 *wptr++ = RD_REG_WORD(®->mailbox0); 3492 *wptr++ = RD_REG_WORD(®->mailbox1); 3493 *wptr = RD_REG_WORD(®->mailbox2); 3494 if (mailbox[0] != MBA_SCSI_COMPLETION) { 3495 wptr++; 3496 *wptr++ = RD_REG_WORD(®->mailbox3); 3497 *wptr++ = RD_REG_WORD(®->mailbox4); 3498 wptr++; 3499 *wptr++ = RD_REG_WORD(®->mailbox6); 3500 *wptr = RD_REG_WORD(®->mailbox7); 3501 } 3502 3503 /* Release mailbox registers. */ 3504 3505 WRT_REG_WORD(®->semaphore, 0); 3506 WRT_REG_WORD(®->host_cmd, HC_CLR_RISC_INT); 3507 3508 dprintk(5, "qla1280_isr: mailbox interrupt mailbox[0] = 0x%x", 3509 mailbox[0]); 3510 3511 /* Handle asynchronous event */ 3512 switch (mailbox[0]) { 3513 case MBA_SCSI_COMPLETION: /* Response completion */ 3514 dprintk(5, "qla1280_isr: mailbox SCSI response " 3515 "completion\n"); 3516 3517 if (ha->flags.online) { 3518 /* Get outstanding command index. */ 3519 index = mailbox[2] << 16 | mailbox[1]; 3520 3521 /* Validate handle. */ 3522 if (index < MAX_OUTSTANDING_COMMANDS) 3523 sp = ha->outstanding_cmds[index]; 3524 else 3525 sp = NULL; 3526 3527 if (sp) { 3528 /* Free outstanding command slot. */ 3529 ha->outstanding_cmds[index] = NULL; 3530 3531 /* Save ISP completion status */ 3532 CMD_RESULT(sp->cmd) = 0; 3533 3534 /* Place block on done queue */ 3535 list_add_tail(&sp->list, done_q); 3536 } else { 3537 /* 3538 * If we get here we have a real problem! 3539 */ 3540 printk(KERN_WARNING 3541 "qla1280: ISP invalid handle"); 3542 } 3543 } 3544 break; 3545 3546 case MBA_BUS_RESET: /* SCSI Bus Reset */ 3547 ha->flags.reset_marker = 1; 3548 index = mailbox[6] & BIT_0; 3549 ha->bus_settings[index].reset_marker = 1; 3550 3551 printk(KERN_DEBUG "qla1280_isr(): index %i " 3552 "asynchronous BUS_RESET\n", index); 3553 break; 3554 3555 case MBA_SYSTEM_ERR: /* System Error */ 3556 printk(KERN_WARNING 3557 "qla1280: ISP System Error - mbx1=%xh, mbx2=" 3558 "%xh, mbx3=%xh\n", mailbox[1], mailbox[2], 3559 mailbox[3]); 3560 break; 3561 3562 case MBA_REQ_TRANSFER_ERR: /* Request Transfer Error */ 3563 printk(KERN_WARNING 3564 "qla1280: ISP Request Transfer Error\n"); 3565 break; 3566 3567 case MBA_RSP_TRANSFER_ERR: /* Response Transfer Error */ 3568 printk(KERN_WARNING 3569 "qla1280: ISP Response Transfer Error\n"); 3570 break; 3571 3572 case MBA_WAKEUP_THRES: /* Request Queue Wake-up */ 3573 dprintk(2, "qla1280_isr: asynchronous WAKEUP_THRES\n"); 3574 break; 3575 3576 case MBA_TIMEOUT_RESET: /* Execution Timeout Reset */ 3577 dprintk(2, 3578 "qla1280_isr: asynchronous TIMEOUT_RESET\n"); 3579 break; 3580 3581 case MBA_DEVICE_RESET: /* Bus Device Reset */ 3582 printk(KERN_INFO "qla1280_isr(): asynchronous " 3583 "BUS_DEVICE_RESET\n"); 3584 3585 ha->flags.reset_marker = 1; 3586 index = mailbox[6] & BIT_0; 3587 ha->bus_settings[index].reset_marker = 1; 3588 break; 3589 3590 case MBA_BUS_MODE_CHANGE: 3591 dprintk(2, 3592 "qla1280_isr: asynchronous BUS_MODE_CHANGE\n"); 3593 break; 3594 3595 default: 3596 /* dprintk(1, "qla1280_isr: default case of switch MB \n"); */ 3597 if (mailbox[0] < MBA_ASYNC_EVENT) { 3598 wptr = &mailbox[0]; 3599 memcpy((uint16_t *) ha->mailbox_out, wptr, 3600 MAILBOX_REGISTER_COUNT * 3601 sizeof(uint16_t)); 3602 3603 if(ha->mailbox_wait != NULL) 3604 complete(ha->mailbox_wait); 3605 } 3606 break; 3607 } 3608 } else { 3609 WRT_REG_WORD(®->host_cmd, HC_CLR_RISC_INT); 3610 } 3611 3612 /* 3613 * We will receive interrupts during mailbox testing prior to 3614 * the card being marked online, hence the double check. 3615 */ 3616 if (!(ha->flags.online && !ha->mailbox_wait)) { 3617 dprintk(2, "qla1280_isr: Response pointer Error\n"); 3618 goto out; 3619 } 3620 3621 if (mailbox[5] >= RESPONSE_ENTRY_CNT) 3622 goto out; 3623 3624 while (ha->rsp_ring_index != mailbox[5]) { 3625 pkt = ha->response_ring_ptr; 3626 3627 dprintk(5, "qla1280_isr: ha->rsp_ring_index = 0x%x, mailbox[5]" 3628 " = 0x%x\n", ha->rsp_ring_index, mailbox[5]); 3629 dprintk(5,"qla1280_isr: response packet data\n"); 3630 qla1280_dump_buffer(5, (char *)pkt, RESPONSE_ENTRY_SIZE); 3631 3632 if (pkt->entry_type == STATUS_TYPE) { 3633 if ((le16_to_cpu(pkt->scsi_status) & 0xff) 3634 || pkt->comp_status || pkt->entry_status) { 3635 dprintk(2, "qla1280_isr: ha->rsp_ring_index = " 3636 "0x%x mailbox[5] = 0x%x, comp_status " 3637 "= 0x%x, scsi_status = 0x%x\n", 3638 ha->rsp_ring_index, mailbox[5], 3639 le16_to_cpu(pkt->comp_status), 3640 le16_to_cpu(pkt->scsi_status)); 3641 } 3642 } else { 3643 dprintk(2, "qla1280_isr: ha->rsp_ring_index = " 3644 "0x%x, mailbox[5] = 0x%x\n", 3645 ha->rsp_ring_index, mailbox[5]); 3646 dprintk(2, "qla1280_isr: response packet data\n"); 3647 qla1280_dump_buffer(2, (char *)pkt, 3648 RESPONSE_ENTRY_SIZE); 3649 } 3650 3651 if (pkt->entry_type == STATUS_TYPE || pkt->entry_status) { 3652 dprintk(2, "status: Cmd %p, handle %i\n", 3653 ha->outstanding_cmds[pkt->handle]->cmd, 3654 pkt->handle); 3655 if (pkt->entry_type == STATUS_TYPE) 3656 qla1280_status_entry(ha, pkt, done_q); 3657 else 3658 qla1280_error_entry(ha, pkt, done_q); 3659 /* Adjust ring index. */ 3660 ha->rsp_ring_index++; 3661 if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) { 3662 ha->rsp_ring_index = 0; 3663 ha->response_ring_ptr = ha->response_ring; 3664 } else 3665 ha->response_ring_ptr++; 3666 WRT_REG_WORD(®->mailbox5, ha->rsp_ring_index); 3667 } 3668 } 3669 3670 out: 3671 LEAVE("qla1280_isr"); 3672 } 3673 3674 /* 3675 * qla1280_rst_aen 3676 * Processes asynchronous reset. 3677 * 3678 * Input: 3679 * ha = adapter block pointer. 3680 */ 3681 static void 3682 qla1280_rst_aen(struct scsi_qla_host *ha) 3683 { 3684 uint8_t bus; 3685 3686 ENTER("qla1280_rst_aen"); 3687 3688 if (ha->flags.online && !ha->flags.reset_active && 3689 !ha->flags.abort_isp_active) { 3690 ha->flags.reset_active = 1; 3691 while (ha->flags.reset_marker) { 3692 /* Issue marker command. */ 3693 ha->flags.reset_marker = 0; 3694 for (bus = 0; bus < ha->ports && 3695 !ha->flags.reset_marker; bus++) { 3696 if (ha->bus_settings[bus].reset_marker) { 3697 ha->bus_settings[bus].reset_marker = 0; 3698 qla1280_marker(ha, bus, 0, 0, 3699 MK_SYNC_ALL); 3700 } 3701 } 3702 } 3703 } 3704 3705 LEAVE("qla1280_rst_aen"); 3706 } 3707 3708 3709 /* 3710 * qla1280_status_entry 3711 * Processes received ISP status entry. 3712 * 3713 * Input: 3714 * ha = adapter block pointer. 3715 * pkt = entry pointer. 3716 * done_q = done queue. 3717 */ 3718 static void 3719 qla1280_status_entry(struct scsi_qla_host *ha, struct response *pkt, 3720 struct list_head *done_q) 3721 { 3722 unsigned int bus, target, lun; 3723 int sense_sz; 3724 struct srb *sp; 3725 struct scsi_cmnd *cmd; 3726 uint32_t handle = le32_to_cpu(pkt->handle); 3727 uint16_t scsi_status = le16_to_cpu(pkt->scsi_status); 3728 uint16_t comp_status = le16_to_cpu(pkt->comp_status); 3729 3730 ENTER("qla1280_status_entry"); 3731 3732 /* Validate handle. */ 3733 if (handle < MAX_OUTSTANDING_COMMANDS) 3734 sp = ha->outstanding_cmds[handle]; 3735 else 3736 sp = NULL; 3737 3738 if (!sp) { 3739 printk(KERN_WARNING "qla1280: Status Entry invalid handle\n"); 3740 goto out; 3741 } 3742 3743 /* Free outstanding command slot. */ 3744 ha->outstanding_cmds[handle] = NULL; 3745 3746 cmd = sp->cmd; 3747 3748 /* Generate LU queue on cntrl, target, LUN */ 3749 bus = SCSI_BUS_32(cmd); 3750 target = SCSI_TCN_32(cmd); 3751 lun = SCSI_LUN_32(cmd); 3752 3753 if (comp_status || scsi_status) { 3754 dprintk(3, "scsi: comp_status = 0x%x, scsi_status = " 3755 "0x%x, handle = 0x%x\n", comp_status, 3756 scsi_status, handle); 3757 } 3758 3759 /* Target busy or queue full */ 3760 if ((scsi_status & 0xFF) == SAM_STAT_TASK_SET_FULL || 3761 (scsi_status & 0xFF) == SAM_STAT_BUSY) { 3762 CMD_RESULT(cmd) = scsi_status & 0xff; 3763 } else { 3764 3765 /* Save ISP completion status */ 3766 CMD_RESULT(cmd) = qla1280_return_status(pkt, cmd); 3767 3768 if (scsi_status & SAM_STAT_CHECK_CONDITION) { 3769 if (comp_status != CS_ARS_FAILED) { 3770 uint16_t req_sense_length = 3771 le16_to_cpu(pkt->req_sense_length); 3772 if (req_sense_length < CMD_SNSLEN(cmd)) 3773 sense_sz = req_sense_length; 3774 else 3775 /* 3776 * scsi_cmnd->sense_buffer is 3777 * 64 bytes, why only copy 63? 3778 * This looks wrong! /Jes 3779 */ 3780 sense_sz = CMD_SNSLEN(cmd) - 1; 3781 3782 memcpy(cmd->sense_buffer, 3783 &pkt->req_sense_data, sense_sz); 3784 } else 3785 sense_sz = 0; 3786 memset(cmd->sense_buffer + sense_sz, 0, 3787 sizeof(cmd->sense_buffer) - sense_sz); 3788 3789 dprintk(2, "qla1280_status_entry: Check " 3790 "condition Sense data, b %i, t %i, " 3791 "l %i\n", bus, target, lun); 3792 if (sense_sz) 3793 qla1280_dump_buffer(2, 3794 (char *)cmd->sense_buffer, 3795 sense_sz); 3796 } 3797 } 3798 3799 /* Place command on done queue. */ 3800 list_add_tail(&sp->list, done_q); 3801 out: 3802 LEAVE("qla1280_status_entry"); 3803 } 3804 3805 /* 3806 * qla1280_error_entry 3807 * Processes error entry. 3808 * 3809 * Input: 3810 * ha = adapter block pointer. 3811 * pkt = entry pointer. 3812 * done_q = done queue. 3813 */ 3814 static void 3815 qla1280_error_entry(struct scsi_qla_host *ha, struct response *pkt, 3816 struct list_head *done_q) 3817 { 3818 struct srb *sp; 3819 uint32_t handle = le32_to_cpu(pkt->handle); 3820 3821 ENTER("qla1280_error_entry"); 3822 3823 if (pkt->entry_status & BIT_3) 3824 dprintk(2, "qla1280_error_entry: BAD PAYLOAD flag error\n"); 3825 else if (pkt->entry_status & BIT_2) 3826 dprintk(2, "qla1280_error_entry: BAD HEADER flag error\n"); 3827 else if (pkt->entry_status & BIT_1) 3828 dprintk(2, "qla1280_error_entry: FULL flag error\n"); 3829 else 3830 dprintk(2, "qla1280_error_entry: UNKNOWN flag error\n"); 3831 3832 /* Validate handle. */ 3833 if (handle < MAX_OUTSTANDING_COMMANDS) 3834 sp = ha->outstanding_cmds[handle]; 3835 else 3836 sp = NULL; 3837 3838 if (sp) { 3839 /* Free outstanding command slot. */ 3840 ha->outstanding_cmds[handle] = NULL; 3841 3842 /* Bad payload or header */ 3843 if (pkt->entry_status & (BIT_3 + BIT_2)) { 3844 /* Bad payload or header, set error status. */ 3845 /* CMD_RESULT(sp->cmd) = CS_BAD_PAYLOAD; */ 3846 CMD_RESULT(sp->cmd) = DID_ERROR << 16; 3847 } else if (pkt->entry_status & BIT_1) { /* FULL flag */ 3848 CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16; 3849 } else { 3850 /* Set error status. */ 3851 CMD_RESULT(sp->cmd) = DID_ERROR << 16; 3852 } 3853 3854 /* Place command on done queue. */ 3855 list_add_tail(&sp->list, done_q); 3856 } 3857 #ifdef QLA_64BIT_PTR 3858 else if (pkt->entry_type == COMMAND_A64_TYPE) { 3859 printk(KERN_WARNING "!qla1280: Error Entry invalid handle"); 3860 } 3861 #endif 3862 3863 LEAVE("qla1280_error_entry"); 3864 } 3865 3866 /* 3867 * qla1280_abort_isp 3868 * Resets ISP and aborts all outstanding commands. 3869 * 3870 * Input: 3871 * ha = adapter block pointer. 3872 * 3873 * Returns: 3874 * 0 = success 3875 */ 3876 static int 3877 qla1280_abort_isp(struct scsi_qla_host *ha) 3878 { 3879 struct device_reg __iomem *reg = ha->iobase; 3880 struct srb *sp; 3881 int status = 0; 3882 int cnt; 3883 int bus; 3884 3885 ENTER("qla1280_abort_isp"); 3886 3887 if (ha->flags.abort_isp_active || !ha->flags.online) 3888 goto out; 3889 3890 ha->flags.abort_isp_active = 1; 3891 3892 /* Disable ISP interrupts. */ 3893 qla1280_disable_intrs(ha); 3894 WRT_REG_WORD(®->host_cmd, HC_PAUSE_RISC); 3895 RD_REG_WORD(®->id_l); 3896 3897 printk(KERN_INFO "scsi(%li): dequeuing outstanding commands\n", 3898 ha->host_no); 3899 /* Dequeue all commands in outstanding command list. */ 3900 for (cnt = 0; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { 3901 struct scsi_cmnd *cmd; 3902 sp = ha->outstanding_cmds[cnt]; 3903 if (sp) { 3904 3905 cmd = sp->cmd; 3906 CMD_RESULT(cmd) = DID_RESET << 16; 3907 3908 sp->cmd = NULL; 3909 ha->outstanding_cmds[cnt] = NULL; 3910 3911 (*cmd->scsi_done)(cmd); 3912 3913 sp->flags = 0; 3914 } 3915 } 3916 3917 status = qla1280_load_firmware(ha); 3918 if (status) 3919 goto out; 3920 3921 /* Setup adapter based on NVRAM parameters. */ 3922 qla1280_nvram_config (ha); 3923 3924 status = qla1280_init_rings(ha); 3925 if (status) 3926 goto out; 3927 3928 /* Issue SCSI reset. */ 3929 for (bus = 0; bus < ha->ports; bus++) 3930 qla1280_bus_reset(ha, bus); 3931 3932 ha->flags.abort_isp_active = 0; 3933 out: 3934 if (status) { 3935 printk(KERN_WARNING 3936 "qla1280: ISP error recovery failed, board disabled"); 3937 qla1280_reset_adapter(ha); 3938 dprintk(2, "qla1280_abort_isp: **** FAILED ****\n"); 3939 } 3940 3941 LEAVE("qla1280_abort_isp"); 3942 return status; 3943 } 3944 3945 3946 /* 3947 * qla1280_debounce_register 3948 * Debounce register. 3949 * 3950 * Input: 3951 * port = register address. 3952 * 3953 * Returns: 3954 * register value. 3955 */ 3956 static u16 3957 qla1280_debounce_register(volatile u16 __iomem * addr) 3958 { 3959 volatile u16 ret; 3960 volatile u16 ret2; 3961 3962 ret = RD_REG_WORD(addr); 3963 ret2 = RD_REG_WORD(addr); 3964 3965 if (ret == ret2) 3966 return ret; 3967 3968 do { 3969 cpu_relax(); 3970 ret = RD_REG_WORD(addr); 3971 ret2 = RD_REG_WORD(addr); 3972 } while (ret != ret2); 3973 3974 return ret; 3975 } 3976 3977 3978 /************************************************************************ 3979 * qla1280_check_for_dead_scsi_bus * 3980 * * 3981 * This routine checks for a dead SCSI bus * 3982 ************************************************************************/ 3983 #define SET_SXP_BANK 0x0100 3984 #define SCSI_PHASE_INVALID 0x87FF 3985 static int 3986 qla1280_check_for_dead_scsi_bus(struct scsi_qla_host *ha, unsigned int bus) 3987 { 3988 uint16_t config_reg, scsi_control; 3989 struct device_reg __iomem *reg = ha->iobase; 3990 3991 if (ha->bus_settings[bus].scsi_bus_dead) { 3992 WRT_REG_WORD(®->host_cmd, HC_PAUSE_RISC); 3993 config_reg = RD_REG_WORD(®->cfg_1); 3994 WRT_REG_WORD(®->cfg_1, SET_SXP_BANK); 3995 scsi_control = RD_REG_WORD(®->scsiControlPins); 3996 WRT_REG_WORD(®->cfg_1, config_reg); 3997 WRT_REG_WORD(®->host_cmd, HC_RELEASE_RISC); 3998 3999 if (scsi_control == SCSI_PHASE_INVALID) { 4000 ha->bus_settings[bus].scsi_bus_dead = 1; 4001 #if 0 4002 CMD_RESULT(cp) = DID_NO_CONNECT << 16; 4003 CMD_HANDLE(cp) = INVALID_HANDLE; 4004 /* ha->actthreads--; */ 4005 4006 (*(cp)->scsi_done)(cp); 4007 #endif 4008 return 1; /* bus is dead */ 4009 } else { 4010 ha->bus_settings[bus].scsi_bus_dead = 0; 4011 ha->bus_settings[bus].failed_reset_count = 0; 4012 } 4013 } 4014 return 0; /* bus is not dead */ 4015 } 4016 4017 static void 4018 qla1280_get_target_parameters(struct scsi_qla_host *ha, 4019 struct scsi_device *device) 4020 { 4021 uint16_t mb[MAILBOX_REGISTER_COUNT]; 4022 int bus, target, lun; 4023 4024 bus = device->channel; 4025 target = device->id; 4026 lun = device->lun; 4027 4028 4029 mb[0] = MBC_GET_TARGET_PARAMETERS; 4030 mb[1] = (uint16_t) (bus ? target | BIT_7 : target); 4031 mb[1] <<= 8; 4032 qla1280_mailbox_command(ha, BIT_6 | BIT_3 | BIT_2 | BIT_1 | BIT_0, 4033 &mb[0]); 4034 4035 printk(KERN_INFO "scsi(%li:%d:%d:%d):", ha->host_no, bus, target, lun); 4036 4037 if (mb[3] != 0) { 4038 printk(" Sync: period %d, offset %d", 4039 (mb[3] & 0xff), (mb[3] >> 8)); 4040 if (mb[2] & BIT_13) 4041 printk(", Wide"); 4042 if ((mb[2] & BIT_5) && ((mb[6] >> 8) & 0xff) >= 2) 4043 printk(", DT"); 4044 } else 4045 printk(" Async"); 4046 4047 if (device->simple_tags) 4048 printk(", Tagged queuing: depth %d", device->queue_depth); 4049 printk("\n"); 4050 } 4051 4052 4053 #if DEBUG_QLA1280 4054 static void 4055 __qla1280_dump_buffer(char *b, int size) 4056 { 4057 int cnt; 4058 u8 c; 4059 4060 printk(KERN_DEBUG " 0 1 2 3 4 5 6 7 8 9 Ah " 4061 "Bh Ch Dh Eh Fh\n"); 4062 printk(KERN_DEBUG "---------------------------------------------" 4063 "------------------\n"); 4064 4065 for (cnt = 0; cnt < size;) { 4066 c = *b++; 4067 4068 printk("0x%02x", c); 4069 cnt++; 4070 if (!(cnt % 16)) 4071 printk("\n"); 4072 else 4073 printk(" "); 4074 } 4075 if (cnt % 16) 4076 printk("\n"); 4077 } 4078 4079 /************************************************************************** 4080 * ql1280_print_scsi_cmd 4081 * 4082 **************************************************************************/ 4083 static void 4084 __qla1280_print_scsi_cmd(struct scsi_cmnd *cmd) 4085 { 4086 struct scsi_qla_host *ha; 4087 struct Scsi_Host *host = CMD_HOST(cmd); 4088 struct srb *sp; 4089 /* struct scatterlist *sg; */ 4090 4091 int i; 4092 ha = (struct scsi_qla_host *)host->hostdata; 4093 4094 sp = (struct srb *)CMD_SP(cmd); 4095 printk("SCSI Command @= 0x%p, Handle=0x%p\n", cmd, CMD_HANDLE(cmd)); 4096 printk(" chan=%d, target = 0x%02x, lun = 0x%02x, cmd_len = 0x%02x\n", 4097 SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd), 4098 CMD_CDBLEN(cmd)); 4099 printk(" CDB = "); 4100 for (i = 0; i < cmd->cmd_len; i++) { 4101 printk("0x%02x ", cmd->cmnd[i]); 4102 } 4103 printk(" seg_cnt =%d\n", cmd->use_sg); 4104 printk(" request buffer=0x%p, request buffer len=0x%x\n", 4105 cmd->request_buffer, cmd->request_bufflen); 4106 /* if (cmd->use_sg) 4107 { 4108 sg = (struct scatterlist *) cmd->request_buffer; 4109 printk(" SG buffer: \n"); 4110 qla1280_dump_buffer(1, (char *)sg, (cmd->use_sg*sizeof(struct scatterlist))); 4111 } */ 4112 printk(" tag=%d, transfersize=0x%x \n", 4113 cmd->tag, cmd->transfersize); 4114 printk(" Pid=%li, SP=0x%p\n", cmd->pid, CMD_SP(cmd)); 4115 printk(" underflow size = 0x%x, direction=0x%x\n", 4116 cmd->underflow, cmd->sc_data_direction); 4117 } 4118 4119 /************************************************************************** 4120 * ql1280_dump_device 4121 * 4122 **************************************************************************/ 4123 static void 4124 ql1280_dump_device(struct scsi_qla_host *ha) 4125 { 4126 4127 struct scsi_cmnd *cp; 4128 struct srb *sp; 4129 int i; 4130 4131 printk(KERN_DEBUG "Outstanding Commands on controller:\n"); 4132 4133 for (i = 0; i < MAX_OUTSTANDING_COMMANDS; i++) { 4134 if ((sp = ha->outstanding_cmds[i]) == NULL) 4135 continue; 4136 if ((cp = sp->cmd) == NULL) 4137 continue; 4138 qla1280_print_scsi_cmd(1, cp); 4139 } 4140 } 4141 #endif 4142 4143 4144 enum tokens { 4145 TOKEN_NVRAM, 4146 TOKEN_SYNC, 4147 TOKEN_WIDE, 4148 TOKEN_PPR, 4149 TOKEN_VERBOSE, 4150 TOKEN_DEBUG, 4151 }; 4152 4153 struct setup_tokens { 4154 char *token; 4155 int val; 4156 }; 4157 4158 static struct setup_tokens setup_token[] __initdata = 4159 { 4160 { "nvram", TOKEN_NVRAM }, 4161 { "sync", TOKEN_SYNC }, 4162 { "wide", TOKEN_WIDE }, 4163 { "ppr", TOKEN_PPR }, 4164 { "verbose", TOKEN_VERBOSE }, 4165 { "debug", TOKEN_DEBUG }, 4166 }; 4167 4168 4169 /************************************************************************** 4170 * qla1280_setup 4171 * 4172 * Handle boot parameters. This really needs to be changed so one 4173 * can specify per adapter parameters. 4174 **************************************************************************/ 4175 static int __init 4176 qla1280_setup(char *s) 4177 { 4178 char *cp, *ptr; 4179 unsigned long val; 4180 int toke; 4181 4182 cp = s; 4183 4184 while (cp && (ptr = strchr(cp, ':'))) { 4185 ptr++; 4186 if (!strcmp(ptr, "yes")) { 4187 val = 0x10000; 4188 ptr += 3; 4189 } else if (!strcmp(ptr, "no")) { 4190 val = 0; 4191 ptr += 2; 4192 } else 4193 val = simple_strtoul(ptr, &ptr, 0); 4194 4195 switch ((toke = qla1280_get_token(cp))) { 4196 case TOKEN_NVRAM: 4197 if (!val) 4198 driver_setup.no_nvram = 1; 4199 break; 4200 case TOKEN_SYNC: 4201 if (!val) 4202 driver_setup.no_sync = 1; 4203 else if (val != 0x10000) 4204 driver_setup.sync_mask = val; 4205 break; 4206 case TOKEN_WIDE: 4207 if (!val) 4208 driver_setup.no_wide = 1; 4209 else if (val != 0x10000) 4210 driver_setup.wide_mask = val; 4211 break; 4212 case TOKEN_PPR: 4213 if (!val) 4214 driver_setup.no_ppr = 1; 4215 else if (val != 0x10000) 4216 driver_setup.ppr_mask = val; 4217 break; 4218 case TOKEN_VERBOSE: 4219 qla1280_verbose = val; 4220 break; 4221 default: 4222 printk(KERN_INFO "qla1280: unknown boot option %s\n", 4223 cp); 4224 } 4225 4226 cp = strchr(ptr, ';'); 4227 if (cp) 4228 cp++; 4229 else { 4230 break; 4231 } 4232 } 4233 return 1; 4234 } 4235 4236 4237 static int 4238 qla1280_get_token(char *str) 4239 { 4240 char *sep; 4241 long ret = -1; 4242 int i; 4243 4244 sep = strchr(str, ':'); 4245 4246 if (sep) { 4247 for (i = 0; i < ARRAY_SIZE(setup_token); i++) { 4248 if (!strncmp(setup_token[i].token, str, (sep - str))) { 4249 ret = setup_token[i].val; 4250 break; 4251 } 4252 } 4253 } 4254 4255 return ret; 4256 } 4257 4258 4259 static struct scsi_host_template qla1280_driver_template = { 4260 .module = THIS_MODULE, 4261 .proc_name = "qla1280", 4262 .name = "Qlogic ISP 1280/12160", 4263 .info = qla1280_info, 4264 .slave_configure = qla1280_slave_configure, 4265 .queuecommand = qla1280_queuecommand, 4266 .eh_abort_handler = qla1280_eh_abort, 4267 .eh_device_reset_handler= qla1280_eh_device_reset, 4268 .eh_bus_reset_handler = qla1280_eh_bus_reset, 4269 .eh_host_reset_handler = qla1280_eh_adapter_reset, 4270 .bios_param = qla1280_biosparam, 4271 .can_queue = 0xfffff, 4272 .this_id = -1, 4273 .sg_tablesize = SG_ALL, 4274 .cmd_per_lun = 1, 4275 .use_clustering = ENABLE_CLUSTERING, 4276 }; 4277 4278 4279 static int __devinit 4280 qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) 4281 { 4282 int devnum = id->driver_data; 4283 struct qla_boards *bdp = &ql1280_board_tbl[devnum]; 4284 struct Scsi_Host *host; 4285 struct scsi_qla_host *ha; 4286 int error = -ENODEV; 4287 4288 /* Bypass all AMI SUBSYS VENDOR IDs */ 4289 if (pdev->subsystem_vendor == PCI_VENDOR_ID_AMI) { 4290 printk(KERN_INFO 4291 "qla1280: Skipping AMI SubSys Vendor ID Chip\n"); 4292 goto error; 4293 } 4294 4295 printk(KERN_INFO "qla1280: %s found on PCI bus %i, dev %i\n", 4296 bdp->name, pdev->bus->number, PCI_SLOT(pdev->devfn)); 4297 4298 if (pci_enable_device(pdev)) { 4299 printk(KERN_WARNING 4300 "qla1280: Failed to enabled pci device, aborting.\n"); 4301 goto error; 4302 } 4303 4304 pci_set_master(pdev); 4305 4306 error = -ENOMEM; 4307 host = scsi_host_alloc(&qla1280_driver_template, sizeof(*ha)); 4308 if (!host) { 4309 printk(KERN_WARNING 4310 "qla1280: Failed to register host, aborting.\n"); 4311 goto error_disable_device; 4312 } 4313 4314 ha = (struct scsi_qla_host *)host->hostdata; 4315 memset(ha, 0, sizeof(struct scsi_qla_host)); 4316 4317 ha->pdev = pdev; 4318 ha->devnum = devnum; /* specifies microcode load address */ 4319 4320 #ifdef QLA_64BIT_PTR 4321 if (pci_set_dma_mask(ha->pdev, (dma_addr_t) ~ 0ULL)) { 4322 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { 4323 printk(KERN_WARNING "scsi(%li): Unable to set a " 4324 "suitable DMA mask - aborting\n", ha->host_no); 4325 error = -ENODEV; 4326 goto error_free_irq; 4327 } 4328 } else 4329 dprintk(2, "scsi(%li): 64 Bit PCI Addressing Enabled\n", 4330 ha->host_no); 4331 #else 4332 if (pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK)) { 4333 printk(KERN_WARNING "scsi(%li): Unable to set a " 4334 "suitable DMA mask - aborting\n", ha->host_no); 4335 error = -ENODEV; 4336 goto error_free_irq; 4337 } 4338 #endif 4339 4340 ha->request_ring = pci_alloc_consistent(ha->pdev, 4341 ((REQUEST_ENTRY_CNT + 1) * sizeof(request_t)), 4342 &ha->request_dma); 4343 if (!ha->request_ring) { 4344 printk(KERN_INFO "qla1280: Failed to get request memory\n"); 4345 goto error_put_host; 4346 } 4347 4348 ha->response_ring = pci_alloc_consistent(ha->pdev, 4349 ((RESPONSE_ENTRY_CNT + 1) * sizeof(struct response)), 4350 &ha->response_dma); 4351 if (!ha->response_ring) { 4352 printk(KERN_INFO "qla1280: Failed to get response memory\n"); 4353 goto error_free_request_ring; 4354 } 4355 4356 ha->ports = bdp->numPorts; 4357 4358 ha->host = host; 4359 ha->host_no = host->host_no; 4360 4361 host->irq = pdev->irq; 4362 host->max_channel = bdp->numPorts - 1; 4363 host->max_lun = MAX_LUNS - 1; 4364 host->max_id = MAX_TARGETS; 4365 host->max_sectors = 1024; 4366 host->unique_id = host->host_no; 4367 4368 error = -ENODEV; 4369 4370 #if MEMORY_MAPPED_IO 4371 ha->mmpbase = ioremap(pci_resource_start(ha->pdev, 1), 4372 pci_resource_len(ha->pdev, 1)); 4373 if (!ha->mmpbase) { 4374 printk(KERN_INFO "qla1280: Unable to map I/O memory\n"); 4375 goto error_free_response_ring; 4376 } 4377 4378 host->base = (unsigned long)ha->mmpbase; 4379 ha->iobase = (struct device_reg __iomem *)ha->mmpbase; 4380 #else 4381 host->io_port = pci_resource_start(ha->pdev, 0); 4382 if (!request_region(host->io_port, 0xff, "qla1280")) { 4383 printk(KERN_INFO "qla1280: Failed to reserve i/o region " 4384 "0x%04lx-0x%04lx - already in use\n", 4385 host->io_port, host->io_port + 0xff); 4386 goto error_free_response_ring; 4387 } 4388 4389 ha->iobase = (struct device_reg *)host->io_port; 4390 #endif 4391 4392 INIT_LIST_HEAD(&ha->done_q); 4393 4394 /* Disable ISP interrupts. */ 4395 qla1280_disable_intrs(ha); 4396 4397 if (request_irq(pdev->irq, qla1280_intr_handler, SA_SHIRQ, 4398 "qla1280", ha)) { 4399 printk("qla1280 : Failed to reserve interrupt %d already " 4400 "in use\n", pdev->irq); 4401 goto error_release_region; 4402 } 4403 4404 /* load the F/W, read paramaters, and init the H/W */ 4405 if (qla1280_initialize_adapter(ha)) { 4406 printk(KERN_INFO "qla1x160: Failed to initialize adapter\n"); 4407 goto error_free_irq; 4408 } 4409 4410 /* set our host ID (need to do something about our two IDs) */ 4411 host->this_id = ha->bus_settings[0].id; 4412 4413 pci_set_drvdata(pdev, host); 4414 4415 error = scsi_add_host(host, &pdev->dev); 4416 if (error) 4417 goto error_disable_adapter; 4418 scsi_scan_host(host); 4419 4420 return 0; 4421 4422 error_disable_adapter: 4423 qla1280_disable_intrs(ha); 4424 error_free_irq: 4425 free_irq(pdev->irq, ha); 4426 error_release_region: 4427 #if MEMORY_MAPPED_IO 4428 iounmap(ha->mmpbase); 4429 #else 4430 release_region(host->io_port, 0xff); 4431 #endif 4432 error_free_response_ring: 4433 pci_free_consistent(ha->pdev, 4434 ((RESPONSE_ENTRY_CNT + 1) * sizeof(struct response)), 4435 ha->response_ring, ha->response_dma); 4436 error_free_request_ring: 4437 pci_free_consistent(ha->pdev, 4438 ((REQUEST_ENTRY_CNT + 1) * sizeof(request_t)), 4439 ha->request_ring, ha->request_dma); 4440 error_put_host: 4441 scsi_host_put(host); 4442 error_disable_device: 4443 pci_disable_device(pdev); 4444 error: 4445 return error; 4446 } 4447 4448 4449 static void __devexit 4450 qla1280_remove_one(struct pci_dev *pdev) 4451 { 4452 struct Scsi_Host *host = pci_get_drvdata(pdev); 4453 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; 4454 4455 scsi_remove_host(host); 4456 4457 qla1280_disable_intrs(ha); 4458 4459 free_irq(pdev->irq, ha); 4460 4461 #if MEMORY_MAPPED_IO 4462 iounmap(ha->mmpbase); 4463 #else 4464 release_region(host->io_port, 0xff); 4465 #endif 4466 4467 pci_free_consistent(ha->pdev, 4468 ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))), 4469 ha->request_ring, ha->request_dma); 4470 pci_free_consistent(ha->pdev, 4471 ((RESPONSE_ENTRY_CNT + 1) * (sizeof(struct response))), 4472 ha->response_ring, ha->response_dma); 4473 4474 pci_disable_device(pdev); 4475 4476 scsi_host_put(host); 4477 } 4478 4479 static struct pci_driver qla1280_pci_driver = { 4480 .name = "qla1280", 4481 .id_table = qla1280_pci_tbl, 4482 .probe = qla1280_probe_one, 4483 .remove = __devexit_p(qla1280_remove_one), 4484 }; 4485 4486 static int __init 4487 qla1280_init(void) 4488 { 4489 if (sizeof(struct srb) > sizeof(struct scsi_pointer)) { 4490 printk(KERN_WARNING 4491 "qla1280: struct srb too big, aborting\n"); 4492 return -EINVAL; 4493 } 4494 4495 #ifdef MODULE 4496 /* 4497 * If we are called as a module, the qla1280 pointer may not be null 4498 * and it would point to our bootup string, just like on the lilo 4499 * command line. IF not NULL, then process this config string with 4500 * qla1280_setup 4501 * 4502 * Boot time Options 4503 * To add options at boot time add a line to your lilo.conf file like: 4504 * append="qla1280=verbose,max_tags:{{255,255,255,255},{255,255,255,255}}" 4505 * which will result in the first four devices on the first two 4506 * controllers being set to a tagged queue depth of 32. 4507 */ 4508 if (qla1280) 4509 qla1280_setup(qla1280); 4510 #endif 4511 4512 return pci_module_init(&qla1280_pci_driver); 4513 } 4514 4515 static void __exit 4516 qla1280_exit(void) 4517 { 4518 pci_unregister_driver(&qla1280_pci_driver); 4519 } 4520 4521 module_init(qla1280_init); 4522 module_exit(qla1280_exit); 4523 4524 4525 MODULE_AUTHOR("Qlogic & Jes Sorensen"); 4526 MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver"); 4527 MODULE_LICENSE("GPL"); 4528 MODULE_VERSION(QLA1280_VERSION); 4529 4530 /* 4531 * Overrides for Emacs so that we almost follow Linus's tabbing style. 4532 * Emacs will notice this stuff at the end of the file and automatically 4533 * adjust the settings for this buffer only. This must remain at the end 4534 * of the file. 4535 * --------------------------------------------------------------------------- 4536 * Local variables: 4537 * c-basic-offset: 8 4538 * tab-width: 8 4539 * End: 4540 */ 4541