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