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