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