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