• Home
  • Raw
  • Download

Lines Matching +full:broken +full:- +full:save +full:- +full:restore +full:- +full:fw

1 // SPDX-License-Identifier: GPL-2.0-or-later
7 * Copyright (C) 2001-2004 Jes Sorensen, Wild Open Source Inc.
8 * Copyright (C) 2003-2004 Christoph Hellwig
15 - Retain firmware image for error recovery.
17 - General code cleanup.
18 - Improve error recovery.
20 - Ditch all < 2.6 support
22 - use pci_map_single to map non-S/G requests
23 - remove qla1280_proc_info
25 - add support for ISP1020/1040
26 - don't include "scsi.h" anymore for 2.6.x
28 - restructure firmware loading, cleanup initialization code
29 - prepare support for ISP1020/1040 chips
31 - Handle PCI DMA mask settings correctly
32 - Correct order of error handling in probe_one, free_irq should not
35 - Big endian fixes (James)
36 - Remove bogus IOCB content on zero data transfer commands (Andrew)
38 - Initialize completion queue to avoid OOPS on probe
39 - Handle interrupts during mailbox testing
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! ;)
50 - Delete completion queue from srb if mailbox command failed to
53 - Reduce arguments for qla1280_done
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
59 - Make MMIO depend on CONFIG_X86_VISWS instead of yet another
61 - Clean up locking in probe path
63 - queuecommand only ever receives new commands - clear flags
64 - Reintegrate lost fixes from Linux 2.5
66 - Build against 2.6
68 - Remove pointless TRUE/FALSE macros
69 - Clean up vchan handling
71 - Don't define register access macros before define determining MMIO.
73 - Don't try and read from the card while it is in reset as
76 - Basic support for boot time arguments
78 - Reduce boot time messages
80 - Do not enable sync/wide/ppr before it has been determined
82 - Enable DMA arbitration for multi channel controllers
84 - Port to 2.5.69
86 - Eliminate duplicate marker commands on bus resets
87 - Handle outstanding commands appropriately on bus/device resets
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
93 - Use completion queue for mailbox commands instead of busy wait
95 - Migrate to use new error handling code
97 - Big endian support
98 - Cleanup data direction code
100 - Switch to using MMIO instead of PIO
102 - Fix PCI parity problem with 12160 during reset.
104 - Use pci_map_page()/pci_unmap_page() instead of map_single version.
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
111 - Do qla1280_pci_config() before calling request_irq() and
113 - Use pci_dma_hi32() to handle upper word of DMA addresses instead
115 - Hand correct arguments to free_irq() in case of failure
117 - Run source through Lindent and clean up the output
119 - Update SCSI firmware to qla1280 v8.15.00 and qla12160 v10.04.32
121 - Rely on mailbox commands generating interrupts - do not
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!!!
129 - Clean up qla1280.h - remove obsolete QL_DEBUG_LEVEL_x definitions
130 - Remove a pile of pointless and confusing (srb_t **) and
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,
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
142 - Further cleanups. Remove all trace of QL_DEBUG_LEVEL_x and replace
144 - Make qla1280_print_scsi_cmd() and qla1280_dump_buffer() both take
146 - Add KERN_* info to printk()
148 - Significant cosmetic cleanups
149 - Change debug code to use dprintk() and remove #if mess
151 - More cosmetic cleanups, fix places treating return as function
152 - use cpu_relax() in qla1280_debounce_register()
154 - Make it compile under 2.5.5
156 - Do no typecast short * to long * in QL1280BoardTbl, this
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
163 - Remove bogus timer_t typedef from qla1280.h
164 - Remove obsolete pre 2.2 PCI setup code, use proper #define's
166 - Fix memleak of qla1280_buffer on module unload
167 - Only compile module parsing code #ifdef MODULE - should be
169 - Remove dummy_buffer that was never modified nor printed
170 - ENTER()/LEAVE() are noops unless QL_DEBUG_LEVEL_3, hence remove
172 - Remove \r from print statements, this is Linux, not DOS
173 - Remove obsolete QLA1280_{SCSILU,INTR,RING}_{LOCK,UNLOCK}
175 - Remove C++ compile hack in header file as Linux driver are not
177 - Kill MS_64BITS macro as it makes the code more readable
178 - Remove unnecessary flags.in_interrupts bit
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
183 - qla1280_status_entry(): Only zero out part of sense_buffer that
185 - Remove more superflouous typecasts
186 - qla1280_32bit_start_scsi() replace home-brew memcpy() with memcpy()
188 - Don't walk the entire list in qla1280_putq_t() just to directly
191 - Don't use IRQF_DISABLED, it's use is deprecated for this kinda driver
193 - Set dev->max_sectors to 1024
195 - Provide compat macros for pci_enable_device(), pci_find_subsys()
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
206 - Change home-brew memset() implementations to use memset()
207 - Remove all references to COMTRACE() - accessing a PC's COM2 serial
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
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
219 - Added check of device_id when handling non
222 - Changed queue_task() to schedule_task()
224 Note: 2.4.0-testxx kernels released prior to
230 - Added -DCONFIG_SMP in addition to -D__SMP__
233 - Changed criteria of 64/32 Bit mode of HBA
236 so that the HBA auto-configures without the need
239 - Added priority handling to IA-64 onboard SCSI
241 - Added irqrestore for qla1280_intr_handler.
242 - Enabled /proc/scsi/qla1280 interface.
243 - Clear /proc/scsi/qla1280 counters in detect().
245 - Declare driver_template for new kernel
247 - Update /proc/scsi entry for 2.3.18 kernels and
250 - Changed scan order of adapters to map
253 - Removed warnings for 32 bit 2.4.x compiles
254 - Corrected declared size for request and response
257 - Corrected 64 bit addressing issue on IA-64
261 - Modified qla1280_setup_chip to properly load
262 ISP firmware for greater that 4 Gig memory on IA-64
264 - Added setting of dma_mask to full 64 bit
267 - Use new PCI DMA mapping APIs for 2.4.x kernel
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
274 - Updated SCSI Firmware to following versions:
277 - Updated driver version to 3.11
279 - Added filtering of AMI SubSys Vendor ID devices
281 - DEBUG_QLA1280 undefined and new version BN Qlogic
283 - Added logic to check against AMI subsystem vendor ID
285 - Added logic to check for PCI subsystem ID.
287 - Updated SCSI Firmware to following versions:
291 - Internal revision; not released
293 - Edit correction for virt_to_bus and PROC.
295 - Merge changes from ia64 port.
297 - Increase version to reflect new code drop with compile fix
300 - Merge qla1280_proc_info from 2.10 code base
302 - Corrected code to compile on a 2.2.x kernel.
304 - Added 64-bit support.
306 - Added new routine to set target parameters for ISP12160.
308 - Added support for ISP12160 Ultra 3 chip.
310 - Modified code to remove errors generated when compiling with
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.
321 - Added SCSI exclusive access lock (io_request_lock) when accessing
323 - Added changes for the new LINUX interface template. Some new error
326 - Initial Beta Release.
345 #include <linux/dma-mapping.h>
363 * 0 - Disable and 1 - Enable
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)
443 switch(cmnd->sc_data_direction) { in qla1280_data_direction()
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
491 #define CMD_RESULT(Cmnd) Cmnd->result
492 #define CMD_HANDLE(Cmnd) Cmnd->host_scribble
493 #define CMD_REQUEST(Cmnd) Cmnd->request->cmd
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
533 const struct firmware *fw; member
552 {.name = " ", .numPorts = 0, .fw_index = -1},
590 printk(KERN_INFO "scsi(%ld): Reading NVRAM\n", ha->host_no); in qla1280_read_nvram()
592 wptr = (uint16_t *)&ha->nvram; in qla1280_read_nvram()
593 nv = &ha->nvram; in qla1280_read_nvram()
602 if (nv->id0 != 'I' || nv->id1 != 'S' || in qla1280_read_nvram()
603 nv->id2 != 'P' || nv->id3 != ' ' || nv->version < 1) { in qla1280_read_nvram()
616 " version %i\n", nv->id0, nv->id1, nv->id2, nv->id3, in qla1280_read_nvram()
617 nv->version); in qla1280_read_nvram()
624 "settings\n", ha->host_no); in qla1280_read_nvram()
625 ha->nvram_valid = 0; in qla1280_read_nvram()
627 ha->nvram_valid = 1; in qla1280_read_nvram()
645 nv->isp_parameter = cpu_to_le16(nv->isp_parameter); in qla1280_read_nvram()
646 nv->firmware_feature.w = cpu_to_le16(nv->firmware_feature.w); in qla1280_read_nvram()
648 nv->bus[i].selection_timeout = cpu_to_le16(nv->bus[i].selection_timeout); in qla1280_read_nvram()
649 nv->bus[i].max_queue_depth = cpu_to_le16(nv->bus[i].max_queue_depth); in qla1280_read_nvram()
670 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_info()
671 bdp = &ql1280_board_tbl[ha->devnum]; in qla1280_info()
677 &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3, in qla1280_info()
687 * The mid-level driver tries to ensures that queuecommand never gets invoked
689 * interrupt handler may call this routine as part of request-completion
696 struct Scsi_Host *host = cmd->device->host; in qla1280_queuecommand_lck()
697 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_queuecommand_lck()
701 cmd->scsi_done = fn; in qla1280_queuecommand_lck()
702 sp->cmd = cmd; in qla1280_queuecommand_lck()
703 sp->flags = 0; in qla1280_queuecommand_lck()
704 sp->wait = NULL; in qla1280_queuecommand_lck()
713 * PCI controller is completely broken, like the BCM1250. For in qla1280_queuecommand_lck()
737 reg = ha->iobase; in qla1280_mailbox_timeout()
739 ha->mailbox_out[0] = RD_REG_WORD(&reg->mailbox0); in qla1280_mailbox_timeout()
741 "ictrl %04x, istatus %04x\n", ha->host_no, ha->mailbox_out[0], in qla1280_mailbox_timeout()
742 RD_REG_WORD(&reg->ictrl), RD_REG_WORD(&reg->istatus)); in qla1280_mailbox_timeout()
743 complete(ha->mailbox_wait); in qla1280_mailbox_timeout()
751 struct scsi_cmnd *cmd = sp->cmd; in _qla1280_wait_for_single_command()
753 spin_unlock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
755 spin_lock_irq(ha->host->host_lock); in _qla1280_wait_for_single_command()
756 sp->wait = NULL; in _qla1280_wait_for_single_command()
759 (*cmd->scsi_done)(cmd); in _qla1280_wait_for_single_command()
769 sp->wait = &wait; in qla1280_wait_for_single_command()
788 sp = ha->outstanding_cmds[cnt]; in qla1280_wait_for_pending_commands()
790 cmd = sp->cmd; in qla1280_wait_for_pending_commands()
827 int wait_for_bus=-1; in qla1280_error_action()
828 int wait_for_target = -1; in qla1280_error_action()
833 ha = (struct scsi_qla_host *)(CMD_HOST(cmd)->hostdata); in qla1280_error_action()
840 RD_REG_WORD(&ha->iobase->istatus)); in qla1280_error_action()
843 RD_REG_WORD(&ha->iobase->host_cmd), in qla1280_error_action()
844 RD_REG_WORD(&ha->iobase->ictrl), jiffies); in qla1280_error_action()
849 ha->host_no, cmd, CMD_HANDLE(cmd), action); in qla1280_error_action()
857 found = -1; in qla1280_error_action()
859 if (sp == ha->outstanding_cmds[i]) { in qla1280_error_action()
861 sp->wait = &wait; /* we'll wait for it to complete */ in qla1280_error_action()
871 "already completed.\n", ha->host_no, bus, in qla1280_error_action()
893 "command.\n", ha->host_no, bus, target, lun); in qla1280_error_action()
904 "reset.\n", ha->host_no, bus); in qla1280_error_action()
916 ha->host_no); in qla1280_error_action()
918 "continue automatically\n", ha->host_no); in qla1280_error_action()
920 ha->flags.reset_active = 1; in qla1280_error_action()
926 ha->flags.reset_active = 0; in qla1280_error_action()
932 * Wait for the command passed in by the mid-layer if it in qla1280_error_action()
945 ha->host_no, bus, target, lun); in qla1280_error_action()
949 * If the command passed in by the mid-layer has been in qla1280_error_action()
978 spin_lock_irq(cmd->device->host->host_lock); in qla1280_eh_abort()
980 spin_unlock_irq(cmd->device->host->host_lock); in qla1280_eh_abort()
994 spin_lock_irq(cmd->device->host->host_lock); in qla1280_eh_device_reset()
996 spin_unlock_irq(cmd->device->host->host_lock); in qla1280_eh_device_reset()
1010 spin_lock_irq(cmd->device->host->host_lock); in qla1280_eh_bus_reset()
1012 spin_unlock_irq(cmd->device->host->host_lock); in qla1280_eh_bus_reset()
1026 spin_lock_irq(cmd->device->host->host_lock); in qla1280_eh_adapter_reset()
1028 spin_unlock_irq(cmd->device->host->host_lock); in qla1280_eh_adapter_reset()
1062 WRT_REG_WORD(&ha->iobase->ictrl, 0); in qla1280_disable_intrs()
1063 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_disable_intrs()
1070 WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC)); in qla1280_enable_intrs()
1071 RD_REG_WORD(&ha->iobase->ictrl); /* PCI Posted Write flush */ in qla1280_enable_intrs()
1089 spin_lock(ha->host->host_lock); in qla1280_intr_handler()
1091 ha->isr_count++; in qla1280_intr_handler()
1092 reg = ha->iobase; in qla1280_intr_handler()
1096 data = qla1280_debounce_register(&reg->istatus); in qla1280_intr_handler()
1099 qla1280_isr(ha, &ha->done_q); in qla1280_intr_handler()
1102 if (!list_empty(&ha->done_q)) in qla1280_intr_handler()
1105 spin_unlock(ha->host->host_lock); in qla1280_intr_handler()
1122 nv = &ha->nvram; in qla1280_set_target_parameters()
1129 mb[2] = nv->bus[bus].target[target].parameter.renegotiate_on_error << 8; in qla1280_set_target_parameters()
1130 mb[2] |= nv->bus[bus].target[target].parameter.stop_queue_on_check << 9; in qla1280_set_target_parameters()
1131 mb[2] |= nv->bus[bus].target[target].parameter.auto_request_sense << 10; in qla1280_set_target_parameters()
1132 mb[2] |= nv->bus[bus].target[target].parameter.tag_queuing << 11; in qla1280_set_target_parameters()
1133 mb[2] |= nv->bus[bus].target[target].parameter.enable_sync << 12; in qla1280_set_target_parameters()
1134 mb[2] |= nv->bus[bus].target[target].parameter.enable_wide << 13; in qla1280_set_target_parameters()
1135 mb[2] |= nv->bus[bus].target[target].parameter.parity_checking << 14; in qla1280_set_target_parameters()
1136 mb[2] |= nv->bus[bus].target[target].parameter.disconnect_allowed << 15; in qla1280_set_target_parameters()
1139 mb[2] |= nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr << 5; in qla1280_set_target_parameters()
1140 mb[3] = (nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8); in qla1280_set_target_parameters()
1141 mb[6] = (nv->bus[bus].target[target].ppr_1x160.flags.ppr_options << 8) | in qla1280_set_target_parameters()
1142 nv->bus[bus].target[target].ppr_1x160.flags.ppr_bus_width; in qla1280_set_target_parameters()
1145 mb[3] = (nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8); in qla1280_set_target_parameters()
1147 mb[3] |= nv->bus[bus].target[target].sync_period; in qla1280_set_target_parameters()
1156 mb[2] = nv->bus[bus].max_queue_depth; in qla1280_set_target_parameters()
1157 mb[3] = nv->bus[bus].target[target].execution_throttle; in qla1280_set_target_parameters()
1164 ha->host_no, bus, target); in qla1280_set_target_parameters()
1185 int bus = device->channel; in qla1280_slave_configure()
1186 int target = device->id; in qla1280_slave_configure()
1191 ha = (struct scsi_qla_host *)device->host->hostdata; in qla1280_slave_configure()
1192 nv = &ha->nvram; in qla1280_slave_configure()
1197 if (device->tagged_supported && in qla1280_slave_configure()
1198 (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { in qla1280_slave_configure()
1199 scsi_change_queue_depth(device, ha->bus_settings[bus].hiwat); in qla1280_slave_configure()
1204 nv->bus[bus].target[target].parameter.enable_sync = device->sdtr; in qla1280_slave_configure()
1205 nv->bus[bus].target[target].parameter.enable_wide = device->wdtr; in qla1280_slave_configure()
1206 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = device->ppr; in qla1280_slave_configure()
1211 nv->bus[bus].target[target].parameter.enable_sync = 0; in qla1280_slave_configure()
1215 nv->bus[bus].target[target].parameter.enable_wide = 0; in qla1280_slave_configure()
1220 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 0; in qla1280_slave_configure()
1223 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_slave_configure()
1224 if (nv->bus[bus].target[target].parameter.enable_sync) in qla1280_slave_configure()
1227 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_slave_configure()
1249 done_q = &ha->done_q; in qla1280_done()
1252 sp = list_entry(done_q->next, struct srb, list); in qla1280_done()
1254 list_del(&sp->list); in qla1280_done()
1256 cmd = sp->cmd; in qla1280_done()
1263 if (!ha->flags.abort_isp_active) in qla1280_done()
1267 sp->flags &= ~SRB_ABORT_PENDING; in qla1280_done()
1268 sp->flags |= SRB_ABORTED; in qla1280_done()
1277 /* Call the mid-level driver interrupt handler */ in qla1280_done()
1278 ha->actthreads--; in qla1280_done()
1280 if (sp->wait == NULL) in qla1280_done()
1281 (*(cmd)->scsi_done)(cmd); in qla1280_done()
1283 complete(sp->wait); in qla1280_done()
1295 uint16_t comp_status = le16_to_cpu(sts->comp_status); in qla1280_return_status()
1296 uint16_t state_flags = le16_to_cpu(sts->state_flags); in qla1280_return_status()
1297 uint32_t residual_length = le32_to_cpu(sts->residual_length); in qla1280_return_status()
1298 uint16_t scsi_status = le16_to_cpu(sts->scsi_status); in qla1280_return_status()
1363 if ((scsi_bufflen(cp) - residual_length) < in qla1280_return_status()
1364 cp->underflow) { in qla1280_return_status()
1366 "scsi: Underflow detected - retrying " in qla1280_return_status()
1415 ha->flags.online = 0; in qla1280_initialize_adapter()
1416 ha->flags.disable_host_adapter = 0; in qla1280_initialize_adapter()
1417 ha->flags.reset_active = 0; in qla1280_initialize_adapter()
1418 ha->flags.abort_isp_active = 0; in qla1280_initialize_adapter()
1426 reg = ha->iobase; in qla1280_initialize_adapter()
1429 WRT_REG_WORD(&reg->semaphore, 0); in qla1280_initialize_adapter()
1430 WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT); in qla1280_initialize_adapter()
1431 WRT_REG_WORD(&reg->host_cmd, HC_CLR_HOST_INT); in qla1280_initialize_adapter()
1432 RD_REG_WORD(&reg->host_cmd); in qla1280_initialize_adapter()
1444 spin_lock_irqsave(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1449 ha->host_no); in qla1280_initialize_adapter()
1454 dprintk(1, "scsi(%ld): Configure NVRAM parameters\n", ha->host_no); in qla1280_initialize_adapter()
1457 if (ha->flags.disable_host_adapter) { in qla1280_initialize_adapter()
1467 for (bus = 0; bus < ha->ports; bus++) { in qla1280_initialize_adapter()
1468 if (!ha->bus_settings[bus].disable_scsi_reset && in qla1280_initialize_adapter()
1471 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_initialize_adapter()
1474 ha->flags.online = 1; in qla1280_initialize_adapter()
1476 spin_unlock_irqrestore(ha->host->host_lock, flags); in qla1280_initialize_adapter()
1500 const struct firmware *fw; in qla1280_request_firmware() local
1505 spin_unlock_irq(ha->host->host_lock); in qla1280_request_firmware()
1508 index = ql1280_board_tbl[ha->devnum].fw_index; in qla1280_request_firmware()
1509 fw = qla1280_fw_tbl[index].fw; in qla1280_request_firmware()
1510 if (fw) in qla1280_request_firmware()
1514 err = request_firmware(&fw, fwname, &ha->pdev->dev); in qla1280_request_firmware()
1519 fw = ERR_PTR(err); in qla1280_request_firmware()
1522 if ((fw->size % 2) || (fw->size < 6)) { in qla1280_request_firmware()
1524 fw->size, fwname); in qla1280_request_firmware()
1525 release_firmware(fw); in qla1280_request_firmware()
1526 fw = ERR_PTR(-EINVAL); in qla1280_request_firmware()
1530 qla1280_fw_tbl[index].fw = fw; in qla1280_request_firmware()
1533 ha->fwver1 = fw->data[0]; in qla1280_request_firmware()
1534 ha->fwver2 = fw->data[1]; in qla1280_request_firmware()
1535 ha->fwver3 = fw->data[2]; in qla1280_request_firmware()
1538 spin_lock_irq(ha->host->host_lock); in qla1280_request_firmware()
1539 return fw; in qla1280_request_firmware()
1556 struct device_reg __iomem *reg = ha->iobase; in qla1280_chip_diag()
1560 dprintk(3, "qla1280_chip_diag: testing device at 0x%p \n", &reg->id_l); in qla1280_chip_diag()
1562 dprintk(1, "scsi(%ld): Verifying chip\n", ha->host_no); in qla1280_chip_diag()
1565 WRT_REG_WORD(&reg->ictrl, ISP_RESET); in qla1280_chip_diag()
1575 data = qla1280_debounce_register(&reg->ictrl); in qla1280_chip_diag()
1577 * Yet another QLogic gem ;-( in qla1280_chip_diag()
1579 for (cnt = 1000000; cnt && data & ISP_RESET; cnt--) { in qla1280_chip_diag()
1581 data = RD_REG_WORD(&reg->ictrl); in qla1280_chip_diag()
1590 WRT_REG_WORD(&reg->cfg_1, 0); in qla1280_chip_diag()
1594 WRT_REG_WORD(&reg->host_cmd, HC_RESET_RISC | in qla1280_chip_diag()
1597 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_chip_diag()
1598 data = qla1280_debounce_register(&reg->mailbox0); in qla1280_chip_diag()
1603 for (cnt = 1000000; cnt && data == MBS_BUSY; cnt--) { in qla1280_chip_diag()
1605 data = RD_REG_WORD(&reg->mailbox0); in qla1280_chip_diag()
1614 if (RD_REG_WORD(&reg->mailbox1) != PROD_ID_1 || in qla1280_chip_diag()
1615 (RD_REG_WORD(&reg->mailbox2) != PROD_ID_2 && in qla1280_chip_diag()
1616 RD_REG_WORD(&reg->mailbox2) != PROD_ID_2a) || in qla1280_chip_diag()
1617 RD_REG_WORD(&reg->mailbox3) != PROD_ID_3 || in qla1280_chip_diag()
1618 RD_REG_WORD(&reg->mailbox4) != PROD_ID_4) { in qla1280_chip_diag()
1621 RD_REG_WORD(&reg->mailbox1), in qla1280_chip_diag()
1622 RD_REG_WORD(&reg->mailbox2), in qla1280_chip_diag()
1623 RD_REG_WORD(&reg->mailbox3), in qla1280_chip_diag()
1624 RD_REG_WORD(&reg->mailbox4)); in qla1280_chip_diag()
1667 const struct firmware *fw; in qla1280_load_firmware_pio() local
1673 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_pio()
1674 if (IS_ERR(fw)) in qla1280_load_firmware_pio()
1675 return PTR_ERR(fw); in qla1280_load_firmware_pio()
1677 fw_data = (const __le16 *)&fw->data[0]; in qla1280_load_firmware_pio()
1678 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_pio()
1681 risc_address = ha->fwstart; in qla1280_load_firmware_pio()
1682 fw_data = (const __le16 *)&fw->data[6]; in qla1280_load_firmware_pio()
1683 risc_code_size = (fw->size - 6) / 2; in qla1280_load_firmware_pio()
1693 ha->host_no); in qla1280_load_firmware_pio()
1716 const struct firmware *fw; in qla1280_load_firmware_dma() local
1725 tbuf = dma_alloc_coherent(&ha->pdev->dev, 8000, &p_tbuf, GFP_KERNEL); in qla1280_load_firmware_dma()
1727 return -ENOMEM; in qla1280_load_firmware_dma()
1730 fw = qla1280_request_firmware(ha); in qla1280_load_firmware_dma()
1731 if (IS_ERR(fw)) in qla1280_load_firmware_dma()
1732 return PTR_ERR(fw); in qla1280_load_firmware_dma()
1734 fw_data = (const __le16 *)&fw->data[0]; in qla1280_load_firmware_dma()
1735 ha->fwstart = __le16_to_cpu(fw_data[2]); in qla1280_load_firmware_dma()
1738 risc_address = ha->fwstart; in qla1280_load_firmware_dma()
1739 fw_data = (const __le16 *)&fw->data[6]; in qla1280_load_firmware_dma()
1740 risc_code_size = (fw->size - 6) / 2; in qla1280_load_firmware_dma()
1758 ((__le16 *)ha->request_ring)[i] = fw_data[i]; in qla1280_load_firmware_dma()
1763 mb[3] = ha->request_dma & 0xffff; in qla1280_load_firmware_dma()
1764 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_load_firmware_dma()
1765 mb[7] = upper_32_bits(ha->request_dma) & 0xffff; in qla1280_load_firmware_dma()
1766 mb[6] = upper_32_bits(ha->request_dma) >> 16; in qla1280_load_firmware_dma()
1769 (void *)(long)ha->request_dma, in qla1280_load_firmware_dma()
1774 "segment of f\n", ha->host_no); in qla1280_load_firmware_dma()
1793 sp = (uint8_t *)ha->request_ring; in qla1280_load_firmware_dma()
1796 printk(KERN_ERR "%s: FW compare error @ " in qla1280_load_firmware_dma()
1807 risc_code_size = risc_code_size - cnt; in qla1280_load_firmware_dma()
1814 dma_free_coherent(&ha->pdev->dev, 8000, tbuf, p_tbuf); in qla1280_load_firmware_dma()
1831 mb[1] = ha->fwstart; in qla1280_start_firmware()
1834 printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); in qla1280_start_firmware()
1841 mb[1] = ha->fwstart; in qla1280_start_firmware()
1845 ha->host_no); in qla1280_start_firmware()
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
1893 memset(ha->outstanding_cmds, 0, in qla1280_init_rings()
1897 ha->request_ring_ptr = ha->request_ring; in qla1280_init_rings()
1898 ha->req_ring_index = 0; in qla1280_init_rings()
1899 ha->req_q_cnt = REQUEST_ENTRY_CNT; in qla1280_init_rings()
1903 mb[3] = ha->request_dma & 0xffff; in qla1280_init_rings()
1904 mb[2] = (ha->request_dma >> 16) & 0xffff; in qla1280_init_rings()
1906 mb[7] = upper_32_bits(ha->request_dma) & 0xffff; in qla1280_init_rings()
1907 mb[6] = upper_32_bits(ha->request_dma) >> 16; in qla1280_init_rings()
1912 ha->response_ring_ptr = ha->response_ring; in qla1280_init_rings()
1913 ha->rsp_ring_index = 0; in qla1280_init_rings()
1917 mb[3] = ha->response_dma & 0xffff; in qla1280_init_rings()
1918 mb[2] = (ha->response_dma >> 16) & 0xffff; in qla1280_init_rings()
1920 mb[7] = upper_32_bits(ha->response_dma) & 0xffff; in qla1280_init_rings()
1921 mb[6] = upper_32_bits(ha->response_dma) >> 16; in qla1280_init_rings()
1938 nv->bus[0].config_1.initiator_id); in qla1280_print_settings()
1940 nv->bus[1].config_1.initiator_id); in qla1280_print_settings()
1943 nv->bus[0].bus_reset_delay); in qla1280_print_settings()
1945 nv->bus[1].bus_reset_delay); in qla1280_print_settings()
1947 dprintk(1, "qla1280 : retry count[0]=%d\n", nv->bus[0].retry_count); in qla1280_print_settings()
1948 dprintk(1, "qla1280 : retry delay[0]=%d\n", nv->bus[0].retry_delay); in qla1280_print_settings()
1949 dprintk(1, "qla1280 : retry count[1]=%d\n", nv->bus[1].retry_count); in qla1280_print_settings()
1950 dprintk(1, "qla1280 : retry delay[1]=%d\n", nv->bus[1].retry_delay); in qla1280_print_settings()
1953 nv->bus[0].config_2.async_data_setup_time); in qla1280_print_settings()
1955 nv->bus[1].config_2.async_data_setup_time); in qla1280_print_settings()
1958 nv->bus[0].config_2.req_ack_active_negation); in qla1280_print_settings()
1960 nv->bus[1].config_2.req_ack_active_negation); in qla1280_print_settings()
1963 nv->bus[0].config_2.data_line_active_negation); in qla1280_print_settings()
1965 nv->bus[1].config_2.data_line_active_negation); in qla1280_print_settings()
1968 nv->cntr_flags_1.disable_loading_risc_code); in qla1280_print_settings()
1971 nv->cntr_flags_1.enable_64bit_addressing); in qla1280_print_settings()
1974 nv->bus[0].selection_timeout); in qla1280_print_settings()
1976 nv->bus[1].selection_timeout); in qla1280_print_settings()
1979 nv->bus[0].max_queue_depth); in qla1280_print_settings()
1981 nv->bus[1].max_queue_depth); in qla1280_print_settings()
1987 struct nvram *nv = &ha->nvram; in qla1280_set_target_defaults()
1989 nv->bus[bus].target[target].parameter.renegotiate_on_error = 1; in qla1280_set_target_defaults()
1990 nv->bus[bus].target[target].parameter.auto_request_sense = 1; in qla1280_set_target_defaults()
1991 nv->bus[bus].target[target].parameter.tag_queuing = 1; in qla1280_set_target_defaults()
1992 nv->bus[bus].target[target].parameter.enable_sync = 1; in qla1280_set_target_defaults()
1994 nv->bus[bus].target[target].parameter.enable_wide = 1; in qla1280_set_target_defaults()
1996 nv->bus[bus].target[target].execution_throttle = in qla1280_set_target_defaults()
1997 nv->bus[bus].max_queue_depth - 1; in qla1280_set_target_defaults()
1998 nv->bus[bus].target[target].parameter.parity_checking = 1; in qla1280_set_target_defaults()
1999 nv->bus[bus].target[target].parameter.disconnect_allowed = 1; in qla1280_set_target_defaults()
2002 nv->bus[bus].target[target].flags.flags1x160.device_enable = 1; in qla1280_set_target_defaults()
2003 nv->bus[bus].target[target].flags.flags1x160.sync_offset = 0x0e; in qla1280_set_target_defaults()
2004 nv->bus[bus].target[target].sync_period = 9; in qla1280_set_target_defaults()
2005 nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 1; in qla1280_set_target_defaults()
2006 nv->bus[bus].target[target].ppr_1x160.flags.ppr_options = 2; in qla1280_set_target_defaults()
2007 nv->bus[bus].target[target].ppr_1x160.flags.ppr_bus_width = 1; in qla1280_set_target_defaults()
2009 nv->bus[bus].target[target].flags.flags1x80.device_enable = 1; in qla1280_set_target_defaults()
2010 nv->bus[bus].target[target].flags.flags1x80.sync_offset = 12; in qla1280_set_target_defaults()
2011 nv->bus[bus].target[target].sync_period = 10; in qla1280_set_target_defaults()
2018 struct nvram *nv = &ha->nvram; in qla1280_set_defaults()
2024 /* nv->cntr_flags_1.disable_loading_risc_code = 1; */ in qla1280_set_defaults()
2025 nv->firmware_feature.f.enable_fast_posting = 1; in qla1280_set_defaults()
2026 nv->firmware_feature.f.disable_synchronous_backoff = 1; in qla1280_set_defaults()
2027 nv->termination.scsi_bus_0_control = 3; in qla1280_set_defaults()
2028 nv->termination.scsi_bus_1_control = 3; in qla1280_set_defaults()
2029 nv->termination.auto_term_support = 1; in qla1280_set_defaults()
2032 * Set default FIFO magic - What appropriate values would be here in qla1280_set_defaults()
2039 nv->isp_config.burst_enable = 1; in qla1280_set_defaults()
2041 nv->isp_config.fifo_threshold |= 3; in qla1280_set_defaults()
2043 nv->isp_config.fifo_threshold |= 4; in qla1280_set_defaults()
2046 nv->isp_parameter = 0x01; /* fast memory enable */ in qla1280_set_defaults()
2049 nv->bus[bus].config_1.initiator_id = 7; in qla1280_set_defaults()
2050 nv->bus[bus].config_2.req_ack_active_negation = 1; in qla1280_set_defaults()
2051 nv->bus[bus].config_2.data_line_active_negation = 1; in qla1280_set_defaults()
2052 nv->bus[bus].selection_timeout = 250; in qla1280_set_defaults()
2053 nv->bus[bus].max_queue_depth = 32; in qla1280_set_defaults()
2056 nv->bus[bus].bus_reset_delay = 3; in qla1280_set_defaults()
2057 nv->bus[bus].config_2.async_data_setup_time = 6; in qla1280_set_defaults()
2058 nv->bus[bus].retry_delay = 1; in qla1280_set_defaults()
2060 nv->bus[bus].bus_reset_delay = 5; in qla1280_set_defaults()
2061 nv->bus[bus].config_2.async_data_setup_time = 8; in qla1280_set_defaults()
2072 struct nvram *nv = &ha->nvram; in qla1280_config_target()
2090 mb[3] = nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8; in qla1280_config_target()
2092 mb[3] = nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8; in qla1280_config_target()
2093 mb[3] |= nv->bus[bus].target[target].sync_period; in qla1280_config_target()
2096 /* Save Tag queuing enable flag. */ in qla1280_config_target()
2098 if (nv->bus[bus].target[target].parameter.tag_queuing) in qla1280_config_target()
2099 ha->bus_settings[bus].qtag_enables |= flag; in qla1280_config_target()
2101 /* Save Device enable flag. */ in qla1280_config_target()
2103 if (nv->bus[bus].target[target].flags.flags1x160.device_enable) in qla1280_config_target()
2104 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2105 ha->bus_settings[bus].lun_disables |= 0; in qla1280_config_target()
2107 if (nv->bus[bus].target[target].flags.flags1x80.device_enable) in qla1280_config_target()
2108 ha->bus_settings[bus].device_enables |= flag; in qla1280_config_target()
2109 /* Save LUN disable flag. */ in qla1280_config_target()
2110 if (nv->bus[bus].target[target].flags.flags1x80.lun_disable) in qla1280_config_target()
2111 ha->bus_settings[bus].lun_disables |= flag; in qla1280_config_target()
2119 mb[2] = nv->bus[bus].max_queue_depth; in qla1280_config_target()
2120 mb[3] = nv->bus[bus].target[target].execution_throttle; in qla1280_config_target()
2130 struct nvram *nv = &ha->nvram; in qla1280_config_bus()
2135 ha->bus_settings[bus].disable_scsi_reset = in qla1280_config_bus()
2136 nv->bus[bus].config_1.scsi_reset_disable; in qla1280_config_bus()
2139 ha->bus_settings[bus].id = nv->bus[bus].config_1.initiator_id; in qla1280_config_bus()
2141 mb[1] = bus ? ha->bus_settings[bus].id | BIT_7 : in qla1280_config_bus()
2142 ha->bus_settings[bus].id; in qla1280_config_bus()
2146 ha->bus_settings[bus].bus_reset_delay = in qla1280_config_bus()
2147 nv->bus[bus].bus_reset_delay; in qla1280_config_bus()
2150 ha->bus_settings[bus].hiwat = nv->bus[bus].max_queue_depth - 1; in qla1280_config_bus()
2162 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_config()
2163 struct nvram *nv = &ha->nvram; in qla1280_nvram_config()
2169 if (ha->nvram_valid) { in qla1280_nvram_config()
2173 nv->bus[bus].target[target].parameter. in qla1280_nvram_config()
2183 ha->flags.disable_risc_code_load = in qla1280_nvram_config()
2184 nv->cntr_flags_1.disable_loading_risc_code; in qla1280_nvram_config()
2189 hwrev = RD_REG_WORD(&reg->cfg_0) & ISP_CFG0_HWMSK; in qla1280_nvram_config()
2191 cfg1 = RD_REG_WORD(&reg->cfg_1) & ~(BIT_4 | BIT_5 | BIT_6); in qla1280_nvram_config()
2192 cdma_conf = RD_REG_WORD(&reg->cdma_cfg); in qla1280_nvram_config()
2196 cfg1 |= nv->isp_config.fifo_threshold << 4; in qla1280_nvram_config()
2198 cfg1 |= nv->isp_config.burst_enable << 2; in qla1280_nvram_config()
2199 WRT_REG_WORD(&reg->cfg_1, cfg1); in qla1280_nvram_config()
2201 WRT_REG_WORD(&reg->cdma_cfg, cdma_conf | CDMA_CONF_BENAB); in qla1280_nvram_config()
2202 WRT_REG_WORD(&reg->ddma_cfg, cdma_conf | DDMA_CONF_BENAB); in qla1280_nvram_config()
2207 cfg1 = nv->isp_config.fifo_threshold << 4; in qla1280_nvram_config()
2208 cfg1 |= nv->isp_config.burst_enable << 2; in qla1280_nvram_config()
2210 if (ha->ports > 1) in qla1280_nvram_config()
2212 WRT_REG_WORD(&reg->cfg_1, cfg1); in qla1280_nvram_config()
2215 WRT_REG_WORD(&reg->gpio_enable, in qla1280_nvram_config()
2217 term = nv->termination.scsi_bus_1_control; in qla1280_nvram_config()
2218 term |= nv->termination.scsi_bus_0_control << 2; in qla1280_nvram_config()
2219 term |= nv->termination.auto_term_support << 7; in qla1280_nvram_config()
2220 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nvram_config()
2221 WRT_REG_WORD(&reg->gpio_data, term); in qla1280_nvram_config()
2223 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nvram_config()
2227 mb[1] = nv->isp_parameter; in qla1280_nvram_config()
2231 /* clock rate - for qla1240 and older, only */ in qla1280_nvram_config()
2239 mb[1] = nv->firmware_feature.f.enable_fast_posting; in qla1280_nvram_config()
2240 mb[1] |= nv->firmware_feature.f.report_lvd_bus_transition << 1; in qla1280_nvram_config()
2241 mb[1] |= nv->firmware_feature.f.disable_synchronous_backoff << 5; in qla1280_nvram_config()
2246 mb[1] = nv->bus[0].retry_count; in qla1280_nvram_config()
2247 mb[2] = nv->bus[0].retry_delay; in qla1280_nvram_config()
2248 mb[6] = nv->bus[1].retry_count; in qla1280_nvram_config()
2249 mb[7] = nv->bus[1].retry_delay; in qla1280_nvram_config()
2255 mb[1] = nv->bus[0].config_2.async_data_setup_time; in qla1280_nvram_config()
2256 mb[2] = nv->bus[1].config_2.async_data_setup_time; in qla1280_nvram_config()
2262 if (nv->bus[0].config_2.req_ack_active_negation) in qla1280_nvram_config()
2264 if (nv->bus[0].config_2.data_line_active_negation) in qla1280_nvram_config()
2267 if (nv->bus[1].config_2.req_ack_active_negation) in qla1280_nvram_config()
2269 if (nv->bus[1].config_2.data_line_active_negation) in qla1280_nvram_config()
2289 mb[1] = nv->bus[0].selection_timeout; in qla1280_nvram_config()
2290 mb[2] = nv->bus[1].selection_timeout; in qla1280_nvram_config()
2293 for (bus = 0; bus < ha->ports; bus++) in qla1280_nvram_config()
2340 * Bit 23-16 = address
2341 * Bit 15-0 = write data
2349 struct device_reg __iomem *reg = ha->iobase; in qla1280_nvram_request()
2368 WRT_REG_WORD(&reg->nvram, (NV_SELECT | NV_CLOCK)); in qla1280_nvram_request()
2369 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nvram_request()
2372 reg_data = RD_REG_WORD(&reg->nvram); in qla1280_nvram_request()
2375 WRT_REG_WORD(&reg->nvram, NV_SELECT); in qla1280_nvram_request()
2376 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nvram_request()
2382 WRT_REG_WORD(&reg->nvram, NV_DESELECT); in qla1280_nvram_request()
2383 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nvram_request()
2392 struct device_reg __iomem *reg = ha->iobase; in qla1280_nv_write()
2394 WRT_REG_WORD(&reg->nvram, data | NV_SELECT); in qla1280_nv_write()
2395 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nv_write()
2397 WRT_REG_WORD(&reg->nvram, data | NV_SELECT | NV_CLOCK); in qla1280_nv_write()
2398 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nv_write()
2400 WRT_REG_WORD(&reg->nvram, data | NV_SELECT); in qla1280_nv_write()
2401 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_nv_write()
2423 struct device_reg __iomem *reg = ha->iobase; in qla1280_mailbox_command()
2432 if (ha->mailbox_wait) { in qla1280_mailbox_command()
2435 ha->mailbox_wait = &wait; in qla1280_mailbox_command()
2442 mptr = (uint16_t __iomem *) &reg->mailbox0; in qla1280_mailbox_command()
2457 timer_setup(&ha->mailbox_timer, qla1280_mailbox_timeout, 0); in qla1280_mailbox_command()
2458 mod_timer(&ha->mailbox_timer, jiffies + 20 * HZ); in qla1280_mailbox_command()
2460 spin_unlock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2461 WRT_REG_WORD(&reg->host_cmd, HC_SET_HOST_INT); in qla1280_mailbox_command()
2462 qla1280_debounce_register(&reg->istatus); in qla1280_mailbox_command()
2465 del_timer_sync(&ha->mailbox_timer); in qla1280_mailbox_command()
2467 spin_lock_irq(ha->host->host_lock); in qla1280_mailbox_command()
2469 ha->mailbox_wait = NULL; in qla1280_mailbox_command()
2472 if (ha->mailbox_out[0] != MBS_CMD_CMP) { in qla1280_mailbox_command()
2476 mb[0], ha->mailbox_out[0], RD_REG_WORD(&reg->istatus)); in qla1280_mailbox_command()
2478 RD_REG_WORD(&reg->mailbox0), RD_REG_WORD(&reg->mailbox1), in qla1280_mailbox_command()
2479 RD_REG_WORD(&reg->mailbox2), RD_REG_WORD(&reg->mailbox3)); in qla1280_mailbox_command()
2481 RD_REG_WORD(&reg->mailbox4), RD_REG_WORD(&reg->mailbox5), in qla1280_mailbox_command()
2482 RD_REG_WORD(&reg->mailbox6), RD_REG_WORD(&reg->mailbox7)); in qla1280_mailbox_command()
2488 iptr = (uint16_t *) &ha->mailbox_out[0]; in qla1280_mailbox_command()
2492 if (ha->flags.reset_marker) in qla1280_mailbox_command()
2513 struct device_reg __iomem *reg = ha->iobase; in qla1280_poll()
2520 data = RD_REG_WORD(&reg->istatus); in qla1280_poll()
2524 if (!ha->mailbox_wait) { in qla1280_poll()
2525 if (ha->flags.reset_marker) in qla1280_poll()
2557 ha->host_no, bus); in qla1280_bus_reset()
2559 reset_delay = ha->bus_settings[bus].bus_reset_delay; in qla1280_bus_reset()
2566 if (ha->bus_settings[bus].failed_reset_count > 2) in qla1280_bus_reset()
2567 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_bus_reset()
2568 ha->bus_settings[bus].failed_reset_count++; in qla1280_bus_reset()
2570 spin_unlock_irq(ha->host->host_lock); in qla1280_bus_reset()
2572 spin_lock_irq(ha->host->host_lock); in qla1280_bus_reset()
2574 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_bus_reset()
2575 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_bus_reset()
2576 ha->bus_settings[bus].reset_marker = 0; in qla1280_bus_reset()
2649 bus = SCSI_BUS_32(sp->cmd); in qla1280_abort_command()
2650 target = SCSI_TCN_32(sp->cmd); in qla1280_abort_command()
2651 lun = SCSI_LUN_32(sp->cmd); in qla1280_abort_command()
2653 sp->flags |= SRB_ABORT_PENDING; in qla1280_abort_command()
2663 sp->flags &= ~SRB_ABORT_PENDING; in qla1280_abort_command()
2681 struct device_reg __iomem *reg = ha->iobase; in qla1280_reset_adapter()
2686 ha->flags.online = 0; in qla1280_reset_adapter()
2687 WRT_REG_WORD(&reg->ictrl, ISP_RESET); in qla1280_reset_adapter()
2688 WRT_REG_WORD(&reg->host_cmd, in qla1280_reset_adapter()
2690 RD_REG_WORD(&reg->id_l); /* Flush PCI write */ in qla1280_reset_adapter()
2715 pkt->entry_type = MARKER_TYPE; in qla1280_marker()
2716 pkt->lun = (uint8_t) lun; in qla1280_marker()
2717 pkt->target = (uint8_t) (bus ? (id | BIT_7) : id); in qla1280_marker()
2718 pkt->modifier = type; in qla1280_marker()
2719 pkt->entry_status = 0; in qla1280_marker()
2745 struct device_reg __iomem *reg = ha->iobase; in qla1280_64bit_start_scsi()
2746 struct scsi_cmnd *cmd = sp->cmd; in qla1280_64bit_start_scsi()
2763 req_cnt += (seg_cnt - 2) / 5; in qla1280_64bit_start_scsi()
2764 if ((seg_cnt - 2) % 5) in qla1280_64bit_start_scsi()
2772 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2774 cnt = RD_REG_WORD(&reg->mailbox4); in qla1280_64bit_start_scsi()
2775 if (ha->req_ring_index < cnt) in qla1280_64bit_start_scsi()
2776 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_64bit_start_scsi()
2778 ha->req_q_cnt = in qla1280_64bit_start_scsi()
2779 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_64bit_start_scsi()
2783 ha->req_q_cnt, seg_cnt); in qla1280_64bit_start_scsi()
2786 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_64bit_start_scsi()
2788 dprintk(2, "qla1280_start_scsi: in-ptr=0x%x req_q_cnt=" in qla1280_64bit_start_scsi()
2789 "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt, in qla1280_64bit_start_scsi()
2796 ha->outstanding_cmds[cnt] != NULL; cnt++); in qla1280_64bit_start_scsi()
2801 "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt); in qla1280_64bit_start_scsi()
2805 ha->outstanding_cmds[cnt] = sp; in qla1280_64bit_start_scsi()
2806 ha->req_q_cnt -= req_cnt; in qla1280_64bit_start_scsi()
2807 CMD_HANDLE(sp->cmd) = (unsigned char *)(unsigned long)(cnt + 1); in qla1280_64bit_start_scsi()
2810 cmd->cmnd[0], (long)CMD_HANDLE(sp->cmd)); in qla1280_64bit_start_scsi()
2813 qla1280_dump_buffer(2, cmd->cmnd, MAX_COMMAND_SIZE); in qla1280_64bit_start_scsi()
2818 pkt = (cmd_a64_entry_t *) ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2820 pkt->entry_type = COMMAND_A64_TYPE; in qla1280_64bit_start_scsi()
2821 pkt->entry_count = (uint8_t) req_cnt; in qla1280_64bit_start_scsi()
2822 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_64bit_start_scsi()
2823 pkt->entry_status = 0; in qla1280_64bit_start_scsi()
2824 pkt->handle = cpu_to_le32(cnt); in qla1280_64bit_start_scsi()
2827 memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8)); in qla1280_64bit_start_scsi()
2830 pkt->timeout = cpu_to_le16(cmd->request->timeout/HZ); in qla1280_64bit_start_scsi()
2833 pkt->lun = SCSI_LUN_32(cmd); in qla1280_64bit_start_scsi()
2834 pkt->target = SCSI_BUS_32(cmd) ? in qla1280_64bit_start_scsi()
2838 if (cmd->device->simple_tags) in qla1280_64bit_start_scsi()
2839 pkt->control_flags |= cpu_to_le16(BIT_3); in qla1280_64bit_start_scsi()
2842 pkt->cdb_len = cpu_to_le16(CMD_CDBLEN(cmd)); in qla1280_64bit_start_scsi()
2843 memcpy(pkt->scsi_cdb, CMD_CDBP(cmd), CMD_CDBLEN(cmd)); in qla1280_64bit_start_scsi()
2844 /* dprintk(1, "Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0]); */ in qla1280_64bit_start_scsi()
2848 pkt->control_flags |= cpu_to_le16(dir); in qla1280_64bit_start_scsi()
2851 pkt->dseg_count = cpu_to_le16(seg_cnt); in qla1280_64bit_start_scsi()
2863 dword_ptr = (u32 *)&pkt->dseg_0_address; in qla1280_64bit_start_scsi()
2880 remseg--; in qla1280_64bit_start_scsi()
2883 "command packet data - b %i, t %i, l %i \n", in qla1280_64bit_start_scsi()
2899 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2900 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2901 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2902 ha->request_ring_ptr = in qla1280_64bit_start_scsi()
2903 ha->request_ring; in qla1280_64bit_start_scsi()
2905 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2907 pkt = (cmd_a64_entry_t *)ha->request_ring_ptr; in qla1280_64bit_start_scsi()
2913 ((struct cont_a64_entry *) pkt)->entry_type = in qla1280_64bit_start_scsi()
2915 ((struct cont_a64_entry *) pkt)->entry_count = 1; in qla1280_64bit_start_scsi()
2916 ((struct cont_a64_entry *) pkt)->sys_define = in qla1280_64bit_start_scsi()
2917 (uint8_t)ha->req_ring_index; in qla1280_64bit_start_scsi()
2920 (u32 *)&((struct cont_a64_entry *) pkt)->dseg_0_address; in qla1280_64bit_start_scsi()
2938 remseg -= cnt; in qla1280_64bit_start_scsi()
2940 "continuation packet data - b %i, t " in qla1280_64bit_start_scsi()
2948 "packet data - b %i, t %i, l %i \n", in qla1280_64bit_start_scsi()
2953 ha->req_ring_index++; in qla1280_64bit_start_scsi()
2954 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_64bit_start_scsi()
2955 ha->req_ring_index = 0; in qla1280_64bit_start_scsi()
2956 ha->request_ring_ptr = ha->request_ring; in qla1280_64bit_start_scsi()
2958 ha->request_ring_ptr++; in qla1280_64bit_start_scsi()
2963 sp->flags |= SRB_SENT; in qla1280_64bit_start_scsi()
2964 ha->actthreads++; in qla1280_64bit_start_scsi()
2965 WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index); in qla1280_64bit_start_scsi()
2999 struct device_reg __iomem *reg = ha->iobase; in qla1280_32bit_start_scsi()
3000 struct scsi_cmnd *cmd = sp->cmd; in qla1280_32bit_start_scsi()
3012 cmd->cmnd[0]); in qla1280_32bit_start_scsi()
3023 req_cnt += (seg_cnt - 4) / 7; in qla1280_32bit_start_scsi()
3024 if ((seg_cnt - 4) % 7) in qla1280_32bit_start_scsi()
3034 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3036 cnt = RD_REG_WORD(&reg->mailbox4); in qla1280_32bit_start_scsi()
3037 if (ha->req_ring_index < cnt) in qla1280_32bit_start_scsi()
3038 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_32bit_start_scsi()
3040 ha->req_q_cnt = in qla1280_32bit_start_scsi()
3041 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_32bit_start_scsi()
3045 ha->req_q_cnt, seg_cnt); in qla1280_32bit_start_scsi()
3047 if ((req_cnt + 2) >= ha->req_q_cnt) { in qla1280_32bit_start_scsi()
3049 dprintk(2, "qla1280_32bit_start_scsi: in-ptr=0x%x, " in qla1280_32bit_start_scsi()
3050 "req_q_cnt=0x%x, req_cnt=0x%x", ha->req_ring_index, in qla1280_32bit_start_scsi()
3051 ha->req_q_cnt, req_cnt); in qla1280_32bit_start_scsi()
3057 (ha->outstanding_cmds[cnt] != 0); cnt++) ; in qla1280_32bit_start_scsi()
3062 "ARRAY, req_q_cnt=0x%x\n", ha->req_q_cnt); in qla1280_32bit_start_scsi()
3066 CMD_HANDLE(sp->cmd) = (unsigned char *) (unsigned long)(cnt + 1); in qla1280_32bit_start_scsi()
3067 ha->outstanding_cmds[cnt] = sp; in qla1280_32bit_start_scsi()
3068 ha->req_q_cnt -= req_cnt; in qla1280_32bit_start_scsi()
3073 pkt = (struct cmd_entry *) ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3075 pkt->entry_type = COMMAND_TYPE; in qla1280_32bit_start_scsi()
3076 pkt->entry_count = (uint8_t) req_cnt; in qla1280_32bit_start_scsi()
3077 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3078 pkt->entry_status = 0; in qla1280_32bit_start_scsi()
3079 pkt->handle = cpu_to_le32(cnt); in qla1280_32bit_start_scsi()
3082 memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8)); in qla1280_32bit_start_scsi()
3085 pkt->timeout = cpu_to_le16(cmd->request->timeout/HZ); in qla1280_32bit_start_scsi()
3088 pkt->lun = SCSI_LUN_32(cmd); in qla1280_32bit_start_scsi()
3089 pkt->target = SCSI_BUS_32(cmd) ? in qla1280_32bit_start_scsi()
3093 if (cmd->device->simple_tags) in qla1280_32bit_start_scsi()
3094 pkt->control_flags |= cpu_to_le16(BIT_3); in qla1280_32bit_start_scsi()
3097 pkt->cdb_len = cpu_to_le16(CMD_CDBLEN(cmd)); in qla1280_32bit_start_scsi()
3098 memcpy(pkt->scsi_cdb, CMD_CDBP(cmd), CMD_CDBLEN(cmd)); in qla1280_32bit_start_scsi()
3100 /*dprintk(1, "Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0]); */ in qla1280_32bit_start_scsi()
3103 pkt->control_flags |= cpu_to_le16(dir); in qla1280_32bit_start_scsi()
3106 pkt->dseg_count = cpu_to_le16(seg_cnt); in qla1280_32bit_start_scsi()
3118 dword_ptr = &pkt->dseg_0_address; in qla1280_32bit_start_scsi()
3133 remseg--; in qla1280_32bit_start_scsi()
3144 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3145 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3146 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3147 ha->request_ring_ptr = in qla1280_32bit_start_scsi()
3148 ha->request_ring; in qla1280_32bit_start_scsi()
3150 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3152 pkt = (struct cmd_entry *)ha->request_ring_ptr; in qla1280_32bit_start_scsi()
3158 ((struct cont_entry *) pkt)-> in qla1280_32bit_start_scsi()
3160 ((struct cont_entry *) pkt)->entry_count = 1; in qla1280_32bit_start_scsi()
3162 ((struct cont_entry *) pkt)->sys_define = in qla1280_32bit_start_scsi()
3163 (uint8_t) ha->req_ring_index; in qla1280_32bit_start_scsi()
3167 &((struct cont_entry *) pkt)->dseg_0_address; in qla1280_32bit_start_scsi()
3183 remseg -= cnt; in qla1280_32bit_start_scsi()
3185 "continuation packet data - " in qla1280_32bit_start_scsi()
3193 "packet data - \n"); in qla1280_32bit_start_scsi()
3197 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_32bit_start_scsi()
3201 ha->req_ring_index++; in qla1280_32bit_start_scsi()
3202 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_32bit_start_scsi()
3203 ha->req_ring_index = 0; in qla1280_32bit_start_scsi()
3204 ha->request_ring_ptr = ha->request_ring; in qla1280_32bit_start_scsi()
3206 ha->request_ring_ptr++; in qla1280_32bit_start_scsi()
3211 sp->flags |= SRB_SENT; in qla1280_32bit_start_scsi()
3212 ha->actthreads++; in qla1280_32bit_start_scsi()
3213 WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index); in qla1280_32bit_start_scsi()
3239 struct device_reg __iomem *reg = ha->iobase; in qla1280_req_pkt()
3250 for (timer = 15000000; timer; timer--) { in qla1280_req_pkt()
3251 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3253 cnt = RD_REG_WORD(&reg->mailbox4); in qla1280_req_pkt()
3254 if (ha->req_ring_index < cnt) in qla1280_req_pkt()
3255 ha->req_q_cnt = cnt - ha->req_ring_index; in qla1280_req_pkt()
3257 ha->req_q_cnt = in qla1280_req_pkt()
3258 REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); in qla1280_req_pkt()
3262 if (ha->req_q_cnt > 0) { in qla1280_req_pkt()
3263 ha->req_q_cnt--; in qla1280_req_pkt()
3264 pkt = ha->request_ring_ptr; in qla1280_req_pkt()
3274 pkt->sys_define = (uint8_t) ha->req_ring_index; in qla1280_req_pkt()
3277 pkt->entry_count = 1; in qla1280_req_pkt()
3307 struct device_reg __iomem *reg = ha->iobase; in qla1280_isp_cmd()
3312 qla1280_dump_buffer(5, (char *)ha->request_ring_ptr, in qla1280_isp_cmd()
3316 ha->req_ring_index++; in qla1280_isp_cmd()
3317 if (ha->req_ring_index == REQUEST_ENTRY_CNT) { in qla1280_isp_cmd()
3318 ha->req_ring_index = 0; in qla1280_isp_cmd()
3319 ha->request_ring_ptr = ha->request_ring; in qla1280_isp_cmd()
3321 ha->request_ring_ptr++; in qla1280_isp_cmd()
3326 WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index); in qla1280_isp_cmd()
3346 struct device_reg __iomem *reg = ha->iobase; in qla1280_isr()
3356 istatus = RD_REG_WORD(&reg->istatus); in qla1280_isr()
3360 /* Save mailbox register 5 */ in qla1280_isr()
3361 mailbox[5] = RD_REG_WORD(&reg->mailbox5); in qla1280_isr()
3365 mailbox[0] = RD_REG_WORD_dmasync(&reg->semaphore); in qla1280_isr()
3372 *wptr++ = RD_REG_WORD(&reg->mailbox0); in qla1280_isr()
3373 *wptr++ = RD_REG_WORD(&reg->mailbox1); in qla1280_isr()
3374 *wptr = RD_REG_WORD(&reg->mailbox2); in qla1280_isr()
3377 *wptr++ = RD_REG_WORD(&reg->mailbox3); in qla1280_isr()
3378 *wptr++ = RD_REG_WORD(&reg->mailbox4); in qla1280_isr()
3380 *wptr++ = RD_REG_WORD(&reg->mailbox6); in qla1280_isr()
3381 *wptr = RD_REG_WORD(&reg->mailbox7); in qla1280_isr()
3386 WRT_REG_WORD(&reg->semaphore, 0); in qla1280_isr()
3387 WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT); in qla1280_isr()
3398 if (ha->flags.online) { in qla1280_isr()
3404 sp = ha->outstanding_cmds[index]; in qla1280_isr()
3410 ha->outstanding_cmds[index] = NULL; in qla1280_isr()
3412 /* Save ISP completion status */ in qla1280_isr()
3413 CMD_RESULT(sp->cmd) = 0; in qla1280_isr()
3414 CMD_HANDLE(sp->cmd) = COMPLETED_HANDLE; in qla1280_isr()
3417 list_add_tail(&sp->list, done_q); in qla1280_isr()
3429 ha->flags.reset_marker = 1; in qla1280_isr()
3431 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3439 "qla1280: ISP System Error - mbx1=%xh, mbx2=" in qla1280_isr()
3454 case MBA_WAKEUP_THRES: /* Request Queue Wake-up */ in qla1280_isr()
3467 ha->flags.reset_marker = 1; in qla1280_isr()
3469 ha->bus_settings[index].reset_marker = 1; in qla1280_isr()
3481 memcpy((uint16_t *) ha->mailbox_out, wptr, in qla1280_isr()
3485 if(ha->mailbox_wait != NULL) in qla1280_isr()
3486 complete(ha->mailbox_wait); in qla1280_isr()
3491 WRT_REG_WORD(&reg->host_cmd, HC_CLR_RISC_INT); in qla1280_isr()
3498 if (!(ha->flags.online && !ha->mailbox_wait)) { in qla1280_isr()
3506 while (ha->rsp_ring_index != mailbox[5]) { in qla1280_isr()
3507 pkt = ha->response_ring_ptr; in qla1280_isr()
3509 dprintk(5, "qla1280_isr: ha->rsp_ring_index = 0x%x, mailbox[5]" in qla1280_isr()
3510 " = 0x%x\n", ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3514 if (pkt->entry_type == STATUS_TYPE) { in qla1280_isr()
3515 if ((le16_to_cpu(pkt->scsi_status) & 0xff) in qla1280_isr()
3516 || pkt->comp_status || pkt->entry_status) { in qla1280_isr()
3517 dprintk(2, "qla1280_isr: ha->rsp_ring_index = " in qla1280_isr()
3520 ha->rsp_ring_index, mailbox[5], in qla1280_isr()
3521 le16_to_cpu(pkt->comp_status), in qla1280_isr()
3522 le16_to_cpu(pkt->scsi_status)); in qla1280_isr()
3525 dprintk(2, "qla1280_isr: ha->rsp_ring_index = " in qla1280_isr()
3527 ha->rsp_ring_index, mailbox[5]); in qla1280_isr()
3533 if (pkt->entry_type == STATUS_TYPE || pkt->entry_status) { in qla1280_isr()
3535 ha->outstanding_cmds[pkt->handle]->cmd, in qla1280_isr()
3536 pkt->handle); in qla1280_isr()
3537 if (pkt->entry_type == STATUS_TYPE) in qla1280_isr()
3542 ha->rsp_ring_index++; in qla1280_isr()
3543 if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) { in qla1280_isr()
3544 ha->rsp_ring_index = 0; in qla1280_isr()
3545 ha->response_ring_ptr = ha->response_ring; in qla1280_isr()
3547 ha->response_ring_ptr++; in qla1280_isr()
3548 WRT_REG_WORD(&reg->mailbox5, ha->rsp_ring_index); in qla1280_isr()
3570 if (ha->flags.online && !ha->flags.reset_active && in qla1280_rst_aen()
3571 !ha->flags.abort_isp_active) { in qla1280_rst_aen()
3572 ha->flags.reset_active = 1; in qla1280_rst_aen()
3573 while (ha->flags.reset_marker) { in qla1280_rst_aen()
3575 ha->flags.reset_marker = 0; in qla1280_rst_aen()
3576 for (bus = 0; bus < ha->ports && in qla1280_rst_aen()
3577 !ha->flags.reset_marker; bus++) { in qla1280_rst_aen()
3578 if (ha->bus_settings[bus].reset_marker) { in qla1280_rst_aen()
3579 ha->bus_settings[bus].reset_marker = 0; in qla1280_rst_aen()
3607 uint32_t handle = le32_to_cpu(pkt->handle); in qla1280_status_entry()
3608 uint16_t scsi_status = le16_to_cpu(pkt->scsi_status); in qla1280_status_entry()
3609 uint16_t comp_status = le16_to_cpu(pkt->comp_status); in qla1280_status_entry()
3615 sp = ha->outstanding_cmds[handle]; in qla1280_status_entry()
3625 ha->outstanding_cmds[handle] = NULL; in qla1280_status_entry()
3627 cmd = sp->cmd; in qla1280_status_entry()
3641 /* Save ISP completion status */ in qla1280_status_entry()
3647 le16_to_cpu(pkt->req_sense_length); in qla1280_status_entry()
3652 * scsi_cmnd->sense_buffer is in qla1280_status_entry()
3656 sense_sz = CMD_SNSLEN(cmd) - 1; in qla1280_status_entry()
3658 memcpy(cmd->sense_buffer, in qla1280_status_entry()
3659 &pkt->req_sense_data, sense_sz); in qla1280_status_entry()
3662 memset(cmd->sense_buffer + sense_sz, 0, in qla1280_status_entry()
3663 SCSI_SENSE_BUFFERSIZE - sense_sz); in qla1280_status_entry()
3671 (char *)cmd->sense_buffer, in qla1280_status_entry()
3676 CMD_HANDLE(sp->cmd) = COMPLETED_HANDLE; in qla1280_status_entry()
3679 list_add_tail(&sp->list, done_q); in qla1280_status_entry()
3698 uint32_t handle = le32_to_cpu(pkt->handle); in qla1280_error_entry()
3702 if (pkt->entry_status & BIT_3) in qla1280_error_entry()
3704 else if (pkt->entry_status & BIT_2) in qla1280_error_entry()
3706 else if (pkt->entry_status & BIT_1) in qla1280_error_entry()
3713 sp = ha->outstanding_cmds[handle]; in qla1280_error_entry()
3719 ha->outstanding_cmds[handle] = NULL; in qla1280_error_entry()
3722 if (pkt->entry_status & (BIT_3 + BIT_2)) { in qla1280_error_entry()
3724 /* CMD_RESULT(sp->cmd) = CS_BAD_PAYLOAD; */ in qla1280_error_entry()
3725 CMD_RESULT(sp->cmd) = DID_ERROR << 16; in qla1280_error_entry()
3726 } else if (pkt->entry_status & BIT_1) { /* FULL flag */ in qla1280_error_entry()
3727 CMD_RESULT(sp->cmd) = DID_BUS_BUSY << 16; in qla1280_error_entry()
3730 CMD_RESULT(sp->cmd) = DID_ERROR << 16; in qla1280_error_entry()
3733 CMD_HANDLE(sp->cmd) = COMPLETED_HANDLE; in qla1280_error_entry()
3736 list_add_tail(&sp->list, done_q); in qla1280_error_entry()
3739 else if (pkt->entry_type == COMMAND_A64_TYPE) { in qla1280_error_entry()
3760 struct device_reg __iomem *reg = ha->iobase; in qla1280_abort_isp()
3768 if (ha->flags.abort_isp_active || !ha->flags.online) in qla1280_abort_isp()
3771 ha->flags.abort_isp_active = 1; in qla1280_abort_isp()
3775 WRT_REG_WORD(&reg->host_cmd, HC_PAUSE_RISC); in qla1280_abort_isp()
3776 RD_REG_WORD(&reg->id_l); in qla1280_abort_isp()
3779 ha->host_no); in qla1280_abort_isp()
3783 sp = ha->outstanding_cmds[cnt]; in qla1280_abort_isp()
3785 cmd = sp->cmd; in qla1280_abort_isp()
3788 ha->outstanding_cmds[cnt] = NULL; in qla1280_abort_isp()
3789 list_add_tail(&sp->list, &ha->done_q); in qla1280_abort_isp()
3807 for (bus = 0; bus < ha->ports; bus++) in qla1280_abort_isp()
3810 ha->flags.abort_isp_active = 0; in qla1280_abort_isp()
3867 struct device_reg __iomem *reg = ha->iobase; in qla1280_check_for_dead_scsi_bus()
3869 if (ha->bus_settings[bus].scsi_bus_dead) { in qla1280_check_for_dead_scsi_bus()
3870 WRT_REG_WORD(&reg->host_cmd, HC_PAUSE_RISC); in qla1280_check_for_dead_scsi_bus()
3871 config_reg = RD_REG_WORD(&reg->cfg_1); in qla1280_check_for_dead_scsi_bus()
3872 WRT_REG_WORD(&reg->cfg_1, SET_SXP_BANK); in qla1280_check_for_dead_scsi_bus()
3873 scsi_control = RD_REG_WORD(&reg->scsiControlPins); in qla1280_check_for_dead_scsi_bus()
3874 WRT_REG_WORD(&reg->cfg_1, config_reg); in qla1280_check_for_dead_scsi_bus()
3875 WRT_REG_WORD(&reg->host_cmd, HC_RELEASE_RISC); in qla1280_check_for_dead_scsi_bus()
3878 ha->bus_settings[bus].scsi_bus_dead = 1; in qla1280_check_for_dead_scsi_bus()
3881 ha->bus_settings[bus].scsi_bus_dead = 0; in qla1280_check_for_dead_scsi_bus()
3882 ha->bus_settings[bus].failed_reset_count = 0; in qla1280_check_for_dead_scsi_bus()
3895 bus = device->channel; in qla1280_get_target_parameters()
3896 target = device->id; in qla1280_get_target_parameters()
3897 lun = device->lun; in qla1280_get_target_parameters()
3906 printk(KERN_INFO "scsi(%li:%d:%d:%d):", ha->host_no, bus, target, lun); in qla1280_get_target_parameters()
3918 if (device->simple_tags) in qla1280_get_target_parameters()
3919 printk(", Tagged queuing: depth %d", device->queue_depth); in qla1280_get_target_parameters()
3933 printk(KERN_DEBUG "---------------------------------------------" in __qla1280_dump_buffer()
3934 "------------------\n"); in __qla1280_dump_buffer()
3963 ha = (struct scsi_qla_host *)host->hostdata; in __qla1280_print_scsi_cmd()
3971 for (i = 0; i < cmd->cmd_len; i++) { in __qla1280_print_scsi_cmd()
3972 printk("0x%02x ", cmd->cmnd[i]); in __qla1280_print_scsi_cmd()
3977 /* if (cmd->use_sg) in __qla1280_print_scsi_cmd()
3979 sg = (struct scatterlist *) cmd->request_buffer; in __qla1280_print_scsi_cmd()
3981 qla1280_dump_buffer(1, (char *)sg, (cmd->use_sg*sizeof(struct scatterlist))); in __qla1280_print_scsi_cmd()
3984 cmd->tag, cmd->transfersize); in __qla1280_print_scsi_cmd()
3987 cmd->underflow, cmd->sc_data_direction); in __qla1280_print_scsi_cmd()
4005 if ((sp = ha->outstanding_cmds[i]) == NULL) in ql1280_dump_device()
4007 if ((cp = sp->cmd) == NULL) in ql1280_dump_device()
4112 long ret = -1; in qla1280_get_token()
4119 if (!strncmp(setup_token[i].token, str, (sep - str))) { in qla1280_get_token()
4143 .this_id = -1,
4151 int devnum = id->driver_data; in qla1280_probe_one()
4155 int error = -ENODEV; in qla1280_probe_one()
4158 if (pdev->subsystem_vendor == PCI_VENDOR_ID_AMI) { in qla1280_probe_one()
4165 bdp->name, pdev->bus->number, PCI_SLOT(pdev->devfn)); in qla1280_probe_one()
4175 error = -ENOMEM; in qla1280_probe_one()
4183 ha = (struct scsi_qla_host *)host->hostdata; in qla1280_probe_one()
4186 ha->pdev = pdev; in qla1280_probe_one()
4187 ha->devnum = devnum; /* specifies microcode load address */ in qla1280_probe_one()
4190 if (dma_set_mask_and_coherent(&ha->pdev->dev, DMA_BIT_MASK(64))) { in qla1280_probe_one()
4191 if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4193 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4194 error = -ENODEV; in qla1280_probe_one()
4199 ha->host_no); in qla1280_probe_one()
4201 if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32))) { in qla1280_probe_one()
4203 "suitable DMA mask - aborting\n", ha->host_no); in qla1280_probe_one()
4204 error = -ENODEV; in qla1280_probe_one()
4209 ha->request_ring = dma_alloc_coherent(&ha->pdev->dev, in qla1280_probe_one()
4211 &ha->request_dma, GFP_KERNEL); in qla1280_probe_one()
4212 if (!ha->request_ring) { in qla1280_probe_one()
4217 ha->response_ring = dma_alloc_coherent(&ha->pdev->dev, in qla1280_probe_one()
4219 &ha->response_dma, GFP_KERNEL); in qla1280_probe_one()
4220 if (!ha->response_ring) { in qla1280_probe_one()
4225 ha->ports = bdp->numPorts; in qla1280_probe_one()
4227 ha->host = host; in qla1280_probe_one()
4228 ha->host_no = host->host_no; in qla1280_probe_one()
4230 host->irq = pdev->irq; in qla1280_probe_one()
4231 host->max_channel = bdp->numPorts - 1; in qla1280_probe_one()
4232 host->max_lun = MAX_LUNS - 1; in qla1280_probe_one()
4233 host->max_id = MAX_TARGETS; in qla1280_probe_one()
4234 host->max_sectors = 1024; in qla1280_probe_one()
4235 host->unique_id = host->host_no; in qla1280_probe_one()
4237 error = -ENODEV; in qla1280_probe_one()
4240 ha->mmpbase = pci_ioremap_bar(ha->pdev, 1); in qla1280_probe_one()
4241 if (!ha->mmpbase) { in qla1280_probe_one()
4246 host->base = (unsigned long)ha->mmpbase; in qla1280_probe_one()
4247 ha->iobase = (struct device_reg __iomem *)ha->mmpbase; in qla1280_probe_one()
4249 host->io_port = pci_resource_start(ha->pdev, 0); in qla1280_probe_one()
4250 if (!request_region(host->io_port, 0xff, "qla1280")) { in qla1280_probe_one()
4252 "0x%04lx-0x%04lx - already in use\n", in qla1280_probe_one()
4253 host->io_port, host->io_port + 0xff); in qla1280_probe_one()
4257 ha->iobase = (struct device_reg *)host->io_port; in qla1280_probe_one()
4260 INIT_LIST_HEAD(&ha->done_q); in qla1280_probe_one()
4265 if (request_irq(pdev->irq, qla1280_intr_handler, IRQF_SHARED, in qla1280_probe_one()
4268 "in use\n", pdev->irq); in qla1280_probe_one()
4279 host->this_id = ha->bus_settings[0].id; in qla1280_probe_one()
4283 error = scsi_add_host(host, &pdev->dev); in qla1280_probe_one()
4293 free_irq(pdev->irq, ha); in qla1280_probe_one()
4296 iounmap(ha->mmpbase); in qla1280_probe_one()
4298 release_region(host->io_port, 0xff); in qla1280_probe_one()
4301 dma_free_coherent(&ha->pdev->dev, in qla1280_probe_one()
4303 ha->response_ring, ha->response_dma); in qla1280_probe_one()
4305 dma_free_coherent(&ha->pdev->dev, in qla1280_probe_one()
4307 ha->request_ring, ha->request_dma); in qla1280_probe_one()
4321 struct scsi_qla_host *ha = (struct scsi_qla_host *)host->hostdata; in qla1280_remove_one()
4327 free_irq(pdev->irq, ha); in qla1280_remove_one()
4330 iounmap(ha->mmpbase); in qla1280_remove_one()
4332 release_region(host->io_port, 0xff); in qla1280_remove_one()
4335 dma_free_coherent(&ha->pdev->dev, in qla1280_remove_one()
4337 ha->request_ring, ha->request_dma); in qla1280_remove_one()
4338 dma_free_coherent(&ha->pdev->dev, in qla1280_remove_one()
4340 ha->response_ring, ha->response_dma); in qla1280_remove_one()
4360 return -EINVAL; in qla1280_init()
4391 release_firmware(qla1280_fw_tbl[i].fw); in qla1280_exit()
4392 qla1280_fw_tbl[i].fw = NULL; in qla1280_exit()
4412 * ---------------------------------------------------------------------------
4414 * c-basic-offset: 8
4415 * tab-width: 8