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