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