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