ipr.c revision dfed823eabf545795f04c8b5164d46a73c5b58ea
1/*
2 * ipr.c -- driver for IBM Power Linux RAID adapters
3 *
4 * Written By: Brian King <brking@us.ibm.com>, IBM Corporation
5 *
6 * Copyright (C) 2003, 2004 IBM Corporation
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 *
22 */
23
24/*
25 * Notes:
26 *
27 * This driver is used to control the following SCSI adapters:
28 *
29 * IBM iSeries: 5702, 5703, 2780, 5709, 570A, 570B
30 *
31 * IBM pSeries: PCI-X Dual Channel Ultra 320 SCSI RAID Adapter
32 *              PCI-X Dual Channel Ultra 320 SCSI Adapter
33 *              PCI-X Dual Channel Ultra 320 SCSI RAID Enablement Card
34 *              Embedded SCSI adapter on p615 and p655 systems
35 *
36 * Supported Hardware Features:
37 *	- Ultra 320 SCSI controller
38 *	- PCI-X host interface
39 *	- Embedded PowerPC RISC Processor and Hardware XOR DMA Engine
40 *	- Non-Volatile Write Cache
41 *	- Supports attachment of non-RAID disks, tape, and optical devices
42 *	- RAID Levels 0, 5, 10
43 *	- Hot spare
44 *	- Background Parity Checking
45 *	- Background Data Scrubbing
46 *	- Ability to increase the capacity of an existing RAID 5 disk array
47 *		by adding disks
48 *
49 * Driver Features:
50 *	- Tagged command queuing
51 *	- Adapter microcode download
52 *	- PCI hot plug
53 *	- SCSI device hot plug
54 *
55 */
56
57#include <linux/config.h>
58#include <linux/fs.h>
59#include <linux/init.h>
60#include <linux/types.h>
61#include <linux/errno.h>
62#include <linux/kernel.h>
63#include <linux/ioport.h>
64#include <linux/delay.h>
65#include <linux/pci.h>
66#include <linux/wait.h>
67#include <linux/spinlock.h>
68#include <linux/sched.h>
69#include <linux/interrupt.h>
70#include <linux/blkdev.h>
71#include <linux/firmware.h>
72#include <linux/module.h>
73#include <linux/moduleparam.h>
74#include <asm/io.h>
75#include <asm/irq.h>
76#include <asm/processor.h>
77#include <scsi/scsi.h>
78#include <scsi/scsi_host.h>
79#include <scsi/scsi_tcq.h>
80#include <scsi/scsi_eh.h>
81#include <scsi/scsi_cmnd.h>
82#include <scsi/scsi_request.h>
83#include "ipr.h"
84
85/*
86 *   Global Data
87 */
88static struct list_head ipr_ioa_head = LIST_HEAD_INIT(ipr_ioa_head);
89static unsigned int ipr_log_level = IPR_DEFAULT_LOG_LEVEL;
90static unsigned int ipr_max_speed = 1;
91static int ipr_testmode = 0;
92static unsigned int ipr_fastfail = 0;
93static unsigned int ipr_transop_timeout = IPR_OPERATIONAL_TIMEOUT;
94static unsigned int ipr_enable_cache = 1;
95static unsigned int ipr_debug = 0;
96static int ipr_auto_create = 1;
97static DEFINE_SPINLOCK(ipr_driver_lock);
98
99/* This table describes the differences between DMA controller chips */
100static const struct ipr_chip_cfg_t ipr_chip_cfg[] = {
101	{ /* Gemstone, Citrine, and Obsidian */
102		.mailbox = 0x0042C,
103		.cache_line_size = 0x20,
104		{
105			.set_interrupt_mask_reg = 0x0022C,
106			.clr_interrupt_mask_reg = 0x00230,
107			.sense_interrupt_mask_reg = 0x0022C,
108			.clr_interrupt_reg = 0x00228,
109			.sense_interrupt_reg = 0x00224,
110			.ioarrin_reg = 0x00404,
111			.sense_uproc_interrupt_reg = 0x00214,
112			.set_uproc_interrupt_reg = 0x00214,
113			.clr_uproc_interrupt_reg = 0x00218
114		}
115	},
116	{ /* Snipe and Scamp */
117		.mailbox = 0x0052C,
118		.cache_line_size = 0x20,
119		{
120			.set_interrupt_mask_reg = 0x00288,
121			.clr_interrupt_mask_reg = 0x0028C,
122			.sense_interrupt_mask_reg = 0x00288,
123			.clr_interrupt_reg = 0x00284,
124			.sense_interrupt_reg = 0x00280,
125			.ioarrin_reg = 0x00504,
126			.sense_uproc_interrupt_reg = 0x00290,
127			.set_uproc_interrupt_reg = 0x00290,
128			.clr_uproc_interrupt_reg = 0x00294
129		}
130	},
131};
132
133static const struct ipr_chip_t ipr_chip[] = {
134	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE, &ipr_chip_cfg[0] },
135	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, &ipr_chip_cfg[0] },
136	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, &ipr_chip_cfg[0] },
137	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, &ipr_chip_cfg[0] },
138	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE, &ipr_chip_cfg[1] },
139	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, &ipr_chip_cfg[1] }
140};
141
142static int ipr_max_bus_speeds [] = {
143	IPR_80MBs_SCSI_RATE, IPR_U160_SCSI_RATE, IPR_U320_SCSI_RATE
144};
145
146MODULE_AUTHOR("Brian King <brking@us.ibm.com>");
147MODULE_DESCRIPTION("IBM Power RAID SCSI Adapter Driver");
148module_param_named(max_speed, ipr_max_speed, uint, 0);
149MODULE_PARM_DESC(max_speed, "Maximum bus speed (0-2). Default: 1=U160. Speeds: 0=80 MB/s, 1=U160, 2=U320");
150module_param_named(log_level, ipr_log_level, uint, 0);
151MODULE_PARM_DESC(log_level, "Set to 0 - 4 for increasing verbosity of device driver");
152module_param_named(testmode, ipr_testmode, int, 0);
153MODULE_PARM_DESC(testmode, "DANGEROUS!!! Allows unsupported configurations");
154module_param_named(fastfail, ipr_fastfail, int, 0);
155MODULE_PARM_DESC(fastfail, "Reduce timeouts and retries");
156module_param_named(transop_timeout, ipr_transop_timeout, int, 0);
157MODULE_PARM_DESC(transop_timeout, "Time in seconds to wait for adapter to come operational (default: 300)");
158module_param_named(enable_cache, ipr_enable_cache, int, 0);
159MODULE_PARM_DESC(enable_cache, "Enable adapter's non-volatile write cache (default: 1)");
160module_param_named(debug, ipr_debug, int, 0);
161MODULE_PARM_DESC(debug, "Enable device driver debugging logging. Set to 1 to enable. (default: 0)");
162module_param_named(auto_create, ipr_auto_create, int, 0);
163MODULE_PARM_DESC(auto_create, "Auto-create single device RAID 0 arrays when initialized (default: 1)");
164MODULE_LICENSE("GPL");
165MODULE_VERSION(IPR_DRIVER_VERSION);
166
167static const char *ipr_gpdd_dev_end_states[] = {
168	"Command complete",
169	"Terminated by host",
170	"Terminated by device reset",
171	"Terminated by bus reset",
172	"Unknown",
173	"Command not started"
174};
175
176static const char *ipr_gpdd_dev_bus_phases[] = {
177	"Bus free",
178	"Arbitration",
179	"Selection",
180	"Message out",
181	"Command",
182	"Message in",
183	"Data out",
184	"Data in",
185	"Status",
186	"Reselection",
187	"Unknown"
188};
189
190/*  A constant array of IOASCs/URCs/Error Messages */
191static const
192struct ipr_error_table_t ipr_error_table[] = {
193	{0x00000000, 1, 1,
194	"8155: An unknown error was received"},
195	{0x00330000, 0, 0,
196	"Soft underlength error"},
197	{0x005A0000, 0, 0,
198	"Command to be cancelled not found"},
199	{0x00808000, 0, 0,
200	"Qualified success"},
201	{0x01080000, 1, 1,
202	"FFFE: Soft device bus error recovered by the IOA"},
203	{0x01170600, 0, 1,
204	"FFF9: Device sector reassign successful"},
205	{0x01170900, 0, 1,
206	"FFF7: Media error recovered by device rewrite procedures"},
207	{0x01180200, 0, 1,
208	"7001: IOA sector reassignment successful"},
209	{0x01180500, 0, 1,
210	"FFF9: Soft media error. Sector reassignment recommended"},
211	{0x01180600, 0, 1,
212	"FFF7: Media error recovered by IOA rewrite procedures"},
213	{0x01418000, 0, 1,
214	"FF3D: Soft PCI bus error recovered by the IOA"},
215	{0x01440000, 1, 1,
216	"FFF6: Device hardware error recovered by the IOA"},
217	{0x01448100, 0, 1,
218	"FFF6: Device hardware error recovered by the device"},
219	{0x01448200, 1, 1,
220	"FF3D: Soft IOA error recovered by the IOA"},
221	{0x01448300, 0, 1,
222	"FFFA: Undefined device response recovered by the IOA"},
223	{0x014A0000, 1, 1,
224	"FFF6: Device bus error, message or command phase"},
225	{0x015D0000, 0, 1,
226	"FFF6: Failure prediction threshold exceeded"},
227	{0x015D9200, 0, 1,
228	"8009: Impending cache battery pack failure"},
229	{0x02040400, 0, 0,
230	"34FF: Disk device format in progress"},
231	{0x023F0000, 0, 0,
232	"Synchronization required"},
233	{0x024E0000, 0, 0,
234	"No ready, IOA shutdown"},
235	{0x025A0000, 0, 0,
236	"Not ready, IOA has been shutdown"},
237	{0x02670100, 0, 1,
238	"3020: Storage subsystem configuration error"},
239	{0x03110B00, 0, 0,
240	"FFF5: Medium error, data unreadable, recommend reassign"},
241	{0x03110C00, 0, 0,
242	"7000: Medium error, data unreadable, do not reassign"},
243	{0x03310000, 0, 1,
244	"FFF3: Disk media format bad"},
245	{0x04050000, 0, 1,
246	"3002: Addressed device failed to respond to selection"},
247	{0x04080000, 1, 1,
248	"3100: Device bus error"},
249	{0x04080100, 0, 1,
250	"3109: IOA timed out a device command"},
251	{0x04088000, 0, 0,
252	"3120: SCSI bus is not operational"},
253	{0x04118000, 0, 1,
254	"9000: IOA reserved area data check"},
255	{0x04118100, 0, 1,
256	"9001: IOA reserved area invalid data pattern"},
257	{0x04118200, 0, 1,
258	"9002: IOA reserved area LRC error"},
259	{0x04320000, 0, 1,
260	"102E: Out of alternate sectors for disk storage"},
261	{0x04330000, 1, 1,
262	"FFF4: Data transfer underlength error"},
263	{0x04338000, 1, 1,
264	"FFF4: Data transfer overlength error"},
265	{0x043E0100, 0, 1,
266	"3400: Logical unit failure"},
267	{0x04408500, 0, 1,
268	"FFF4: Device microcode is corrupt"},
269	{0x04418000, 1, 1,
270	"8150: PCI bus error"},
271	{0x04430000, 1, 0,
272	"Unsupported device bus message received"},
273	{0x04440000, 1, 1,
274	"FFF4: Disk device problem"},
275	{0x04448200, 1, 1,
276	"8150: Permanent IOA failure"},
277	{0x04448300, 0, 1,
278	"3010: Disk device returned wrong response to IOA"},
279	{0x04448400, 0, 1,
280	"8151: IOA microcode error"},
281	{0x04448500, 0, 0,
282	"Device bus status error"},
283	{0x04448600, 0, 1,
284	"8157: IOA error requiring IOA reset to recover"},
285	{0x04490000, 0, 0,
286	"Message reject received from the device"},
287	{0x04449200, 0, 1,
288	"8008: A permanent cache battery pack failure occurred"},
289	{0x0444A000, 0, 1,
290	"9090: Disk unit has been modified after the last known status"},
291	{0x0444A200, 0, 1,
292	"9081: IOA detected device error"},
293	{0x0444A300, 0, 1,
294	"9082: IOA detected device error"},
295	{0x044A0000, 1, 1,
296	"3110: Device bus error, message or command phase"},
297	{0x04670400, 0, 1,
298	"9091: Incorrect hardware configuration change has been detected"},
299	{0x04678000, 0, 1,
300	"9073: Invalid multi-adapter configuration"},
301	{0x046E0000, 0, 1,
302	"FFF4: Command to logical unit failed"},
303	{0x05240000, 1, 0,
304	"Illegal request, invalid request type or request packet"},
305	{0x05250000, 0, 0,
306	"Illegal request, invalid resource handle"},
307	{0x05258000, 0, 0,
308	"Illegal request, commands not allowed to this device"},
309	{0x05258100, 0, 0,
310	"Illegal request, command not allowed to a secondary adapter"},
311	{0x05260000, 0, 0,
312	"Illegal request, invalid field in parameter list"},
313	{0x05260100, 0, 0,
314	"Illegal request, parameter not supported"},
315	{0x05260200, 0, 0,
316	"Illegal request, parameter value invalid"},
317	{0x052C0000, 0, 0,
318	"Illegal request, command sequence error"},
319	{0x052C8000, 1, 0,
320	"Illegal request, dual adapter support not enabled"},
321	{0x06040500, 0, 1,
322	"9031: Array protection temporarily suspended, protection resuming"},
323	{0x06040600, 0, 1,
324	"9040: Array protection temporarily suspended, protection resuming"},
325	{0x06290000, 0, 1,
326	"FFFB: SCSI bus was reset"},
327	{0x06290500, 0, 0,
328	"FFFE: SCSI bus transition to single ended"},
329	{0x06290600, 0, 0,
330	"FFFE: SCSI bus transition to LVD"},
331	{0x06298000, 0, 1,
332	"FFFB: SCSI bus was reset by another initiator"},
333	{0x063F0300, 0, 1,
334	"3029: A device replacement has occurred"},
335	{0x064C8000, 0, 1,
336	"9051: IOA cache data exists for a missing or failed device"},
337	{0x064C8100, 0, 1,
338	"9055: Auxiliary cache IOA contains cache data needed by the primary IOA"},
339	{0x06670100, 0, 1,
340	"9025: Disk unit is not supported at its physical location"},
341	{0x06670600, 0, 1,
342	"3020: IOA detected a SCSI bus configuration error"},
343	{0x06678000, 0, 1,
344	"3150: SCSI bus configuration error"},
345	{0x06678100, 0, 1,
346	"9074: Asymmetric advanced function disk configuration"},
347	{0x06690200, 0, 1,
348	"9041: Array protection temporarily suspended"},
349	{0x06698200, 0, 1,
350	"9042: Corrupt array parity detected on specified device"},
351	{0x066B0200, 0, 1,
352	"9030: Array no longer protected due to missing or failed disk unit"},
353	{0x066B8000, 0, 1,
354	"9071: Link operational transition"},
355	{0x066B8100, 0, 1,
356	"9072: Link not operational transition"},
357	{0x066B8200, 0, 1,
358	"9032: Array exposed but still protected"},
359	{0x07270000, 0, 0,
360	"Failure due to other device"},
361	{0x07278000, 0, 1,
362	"9008: IOA does not support functions expected by devices"},
363	{0x07278100, 0, 1,
364	"9010: Cache data associated with attached devices cannot be found"},
365	{0x07278200, 0, 1,
366	"9011: Cache data belongs to devices other than those attached"},
367	{0x07278400, 0, 1,
368	"9020: Array missing 2 or more devices with only 1 device present"},
369	{0x07278500, 0, 1,
370	"9021: Array missing 2 or more devices with 2 or more devices present"},
371	{0x07278600, 0, 1,
372	"9022: Exposed array is missing a required device"},
373	{0x07278700, 0, 1,
374	"9023: Array member(s) not at required physical locations"},
375	{0x07278800, 0, 1,
376	"9024: Array not functional due to present hardware configuration"},
377	{0x07278900, 0, 1,
378	"9026: Array not functional due to present hardware configuration"},
379	{0x07278A00, 0, 1,
380	"9027: Array is missing a device and parity is out of sync"},
381	{0x07278B00, 0, 1,
382	"9028: Maximum number of arrays already exist"},
383	{0x07278C00, 0, 1,
384	"9050: Required cache data cannot be located for a disk unit"},
385	{0x07278D00, 0, 1,
386	"9052: Cache data exists for a device that has been modified"},
387	{0x07278F00, 0, 1,
388	"9054: IOA resources not available due to previous problems"},
389	{0x07279100, 0, 1,
390	"9092: Disk unit requires initialization before use"},
391	{0x07279200, 0, 1,
392	"9029: Incorrect hardware configuration change has been detected"},
393	{0x07279600, 0, 1,
394	"9060: One or more disk pairs are missing from an array"},
395	{0x07279700, 0, 1,
396	"9061: One or more disks are missing from an array"},
397	{0x07279800, 0, 1,
398	"9062: One or more disks are missing from an array"},
399	{0x07279900, 0, 1,
400	"9063: Maximum number of functional arrays has been exceeded"},
401	{0x0B260000, 0, 0,
402	"Aborted command, invalid descriptor"},
403	{0x0B5A0000, 0, 0,
404	"Command terminated by host"}
405};
406
407static const struct ipr_ses_table_entry ipr_ses_table[] = {
408	{ "2104-DL1        ", "XXXXXXXXXXXXXXXX", 80 },
409	{ "2104-TL1        ", "XXXXXXXXXXXXXXXX", 80 },
410	{ "HSBP07M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 7 slot */
411	{ "HSBP05M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 5 slot */
412	{ "HSBP05M S U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Bowtie */
413	{ "HSBP06E ASU2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* MartinFenning */
414	{ "2104-DU3        ", "XXXXXXXXXXXXXXXX", 160 },
415	{ "2104-TU3        ", "XXXXXXXXXXXXXXXX", 160 },
416	{ "HSBP04C RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 },
417	{ "HSBP06E RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 },
418	{ "St  V1S2        ", "XXXXXXXXXXXXXXXX", 160 },
419	{ "HSBPD4M  PU3SCSI", "XXXXXXX*XXXXXXXX", 160 },
420	{ "VSBPD1H   U3SCSI", "XXXXXXX*XXXXXXXX", 160 }
421};
422
423/*
424 *  Function Prototypes
425 */
426static int ipr_reset_alert(struct ipr_cmnd *);
427static void ipr_process_ccn(struct ipr_cmnd *);
428static void ipr_process_error(struct ipr_cmnd *);
429static void ipr_reset_ioa_job(struct ipr_cmnd *);
430static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *,
431				   enum ipr_shutdown_type);
432
433#ifdef CONFIG_SCSI_IPR_TRACE
434/**
435 * ipr_trc_hook - Add a trace entry to the driver trace
436 * @ipr_cmd:	ipr command struct
437 * @type:		trace type
438 * @add_data:	additional data
439 *
440 * Return value:
441 * 	none
442 **/
443static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd,
444			 u8 type, u32 add_data)
445{
446	struct ipr_trace_entry *trace_entry;
447	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
448
449	trace_entry = &ioa_cfg->trace[ioa_cfg->trace_index++];
450	trace_entry->time = jiffies;
451	trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0];
452	trace_entry->type = type;
453	trace_entry->cmd_index = ipr_cmd->cmd_index;
454	trace_entry->res_handle = ipr_cmd->ioarcb.res_handle;
455	trace_entry->u.add_data = add_data;
456}
457#else
458#define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0)
459#endif
460
461/**
462 * ipr_reinit_ipr_cmnd - Re-initialize an IPR Cmnd block for reuse
463 * @ipr_cmd:	ipr command struct
464 *
465 * Return value:
466 * 	none
467 **/
468static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
469{
470	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
471	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
472
473	memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt));
474	ioarcb->write_data_transfer_length = 0;
475	ioarcb->read_data_transfer_length = 0;
476	ioarcb->write_ioadl_len = 0;
477	ioarcb->read_ioadl_len = 0;
478	ioasa->ioasc = 0;
479	ioasa->residual_data_len = 0;
480
481	ipr_cmd->scsi_cmd = NULL;
482	ipr_cmd->sense_buffer[0] = 0;
483	ipr_cmd->dma_use_sg = 0;
484}
485
486/**
487 * ipr_init_ipr_cmnd - Initialize an IPR Cmnd block
488 * @ipr_cmd:	ipr command struct
489 *
490 * Return value:
491 * 	none
492 **/
493static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
494{
495	ipr_reinit_ipr_cmnd(ipr_cmd);
496	ipr_cmd->u.scratch = 0;
497	ipr_cmd->sibling = NULL;
498	init_timer(&ipr_cmd->timer);
499}
500
501/**
502 * ipr_get_free_ipr_cmnd - Get a free IPR Cmnd block
503 * @ioa_cfg:	ioa config struct
504 *
505 * Return value:
506 * 	pointer to ipr command struct
507 **/
508static
509struct ipr_cmnd *ipr_get_free_ipr_cmnd(struct ipr_ioa_cfg *ioa_cfg)
510{
511	struct ipr_cmnd *ipr_cmd;
512
513	ipr_cmd = list_entry(ioa_cfg->free_q.next, struct ipr_cmnd, queue);
514	list_del(&ipr_cmd->queue);
515	ipr_init_ipr_cmnd(ipr_cmd);
516
517	return ipr_cmd;
518}
519
520/**
521 * ipr_unmap_sglist - Unmap scatterlist if mapped
522 * @ioa_cfg:	ioa config struct
523 * @ipr_cmd:	ipr command struct
524 *
525 * Return value:
526 * 	nothing
527 **/
528static void ipr_unmap_sglist(struct ipr_ioa_cfg *ioa_cfg,
529			     struct ipr_cmnd *ipr_cmd)
530{
531	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
532
533	if (ipr_cmd->dma_use_sg) {
534		if (scsi_cmd->use_sg > 0) {
535			pci_unmap_sg(ioa_cfg->pdev, scsi_cmd->request_buffer,
536				     scsi_cmd->use_sg,
537				     scsi_cmd->sc_data_direction);
538		} else {
539			pci_unmap_single(ioa_cfg->pdev, ipr_cmd->dma_handle,
540					 scsi_cmd->request_bufflen,
541					 scsi_cmd->sc_data_direction);
542		}
543	}
544}
545
546/**
547 * ipr_mask_and_clear_interrupts - Mask all and clear specified interrupts
548 * @ioa_cfg:	ioa config struct
549 * @clr_ints:     interrupts to clear
550 *
551 * This function masks all interrupts on the adapter, then clears the
552 * interrupts specified in the mask
553 *
554 * Return value:
555 * 	none
556 **/
557static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg,
558					  u32 clr_ints)
559{
560	volatile u32 int_reg;
561
562	/* Stop new interrupts */
563	ioa_cfg->allow_interrupts = 0;
564
565	/* Set interrupt mask to stop all new interrupts */
566	writel(~0, ioa_cfg->regs.set_interrupt_mask_reg);
567
568	/* Clear any pending interrupts */
569	writel(clr_ints, ioa_cfg->regs.clr_interrupt_reg);
570	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
571}
572
573/**
574 * ipr_save_pcix_cmd_reg - Save PCI-X command register
575 * @ioa_cfg:	ioa config struct
576 *
577 * Return value:
578 * 	0 on success / -EIO on failure
579 **/
580static int ipr_save_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
581{
582	int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
583
584	if (pcix_cmd_reg == 0) {
585		dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n");
586		return -EIO;
587	}
588
589	if (pci_read_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
590				 &ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
591		dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n");
592		return -EIO;
593	}
594
595	ioa_cfg->saved_pcix_cmd_reg |= PCI_X_CMD_DPERR_E | PCI_X_CMD_ERO;
596	return 0;
597}
598
599/**
600 * ipr_set_pcix_cmd_reg - Setup PCI-X command register
601 * @ioa_cfg:	ioa config struct
602 *
603 * Return value:
604 * 	0 on success / -EIO on failure
605 **/
606static int ipr_set_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
607{
608	int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
609
610	if (pcix_cmd_reg) {
611		if (pci_write_config_word(ioa_cfg->pdev, pcix_cmd_reg + PCI_X_CMD,
612					  ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
613			dev_err(&ioa_cfg->pdev->dev, "Failed to setup PCI-X command register\n");
614			return -EIO;
615		}
616	} else {
617		dev_err(&ioa_cfg->pdev->dev,
618			"Failed to setup PCI-X command register\n");
619		return -EIO;
620	}
621
622	return 0;
623}
624
625/**
626 * ipr_scsi_eh_done - mid-layer done function for aborted ops
627 * @ipr_cmd:	ipr command struct
628 *
629 * This function is invoked by the interrupt handler for
630 * ops generated by the SCSI mid-layer which are being aborted.
631 *
632 * Return value:
633 * 	none
634 **/
635static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd)
636{
637	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
638	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
639
640	scsi_cmd->result |= (DID_ERROR << 16);
641
642	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
643	scsi_cmd->scsi_done(scsi_cmd);
644	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
645}
646
647/**
648 * ipr_fail_all_ops - Fails all outstanding ops.
649 * @ioa_cfg:	ioa config struct
650 *
651 * This function fails all outstanding ops.
652 *
653 * Return value:
654 * 	none
655 **/
656static void ipr_fail_all_ops(struct ipr_ioa_cfg *ioa_cfg)
657{
658	struct ipr_cmnd *ipr_cmd, *temp;
659
660	ENTER;
661	list_for_each_entry_safe(ipr_cmd, temp, &ioa_cfg->pending_q, queue) {
662		list_del(&ipr_cmd->queue);
663
664		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_IOA_WAS_RESET);
665		ipr_cmd->ioasa.ilid = cpu_to_be32(IPR_DRIVER_ILID);
666
667		if (ipr_cmd->scsi_cmd)
668			ipr_cmd->done = ipr_scsi_eh_done;
669
670		ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, IPR_IOASC_IOA_WAS_RESET);
671		del_timer(&ipr_cmd->timer);
672		ipr_cmd->done(ipr_cmd);
673	}
674
675	LEAVE;
676}
677
678/**
679 * ipr_do_req -  Send driver initiated requests.
680 * @ipr_cmd:		ipr command struct
681 * @done:			done function
682 * @timeout_func:	timeout function
683 * @timeout:		timeout value
684 *
685 * This function sends the specified command to the adapter with the
686 * timeout given. The done function is invoked on command completion.
687 *
688 * Return value:
689 * 	none
690 **/
691static void ipr_do_req(struct ipr_cmnd *ipr_cmd,
692		       void (*done) (struct ipr_cmnd *),
693		       void (*timeout_func) (struct ipr_cmnd *), u32 timeout)
694{
695	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
696
697	list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
698
699	ipr_cmd->done = done;
700
701	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
702	ipr_cmd->timer.expires = jiffies + timeout;
703	ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func;
704
705	add_timer(&ipr_cmd->timer);
706
707	ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0);
708
709	mb();
710	writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
711	       ioa_cfg->regs.ioarrin_reg);
712}
713
714/**
715 * ipr_internal_cmd_done - Op done function for an internally generated op.
716 * @ipr_cmd:	ipr command struct
717 *
718 * This function is the op done function for an internally generated,
719 * blocking op. It simply wakes the sleeping thread.
720 *
721 * Return value:
722 * 	none
723 **/
724static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd)
725{
726	if (ipr_cmd->sibling)
727		ipr_cmd->sibling = NULL;
728	else
729		complete(&ipr_cmd->completion);
730}
731
732/**
733 * ipr_send_blocking_cmd - Send command and sleep on its completion.
734 * @ipr_cmd:	ipr command struct
735 * @timeout_func:	function to invoke if command times out
736 * @timeout:	timeout
737 *
738 * Return value:
739 * 	none
740 **/
741static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd,
742				  void (*timeout_func) (struct ipr_cmnd *ipr_cmd),
743				  u32 timeout)
744{
745	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
746
747	init_completion(&ipr_cmd->completion);
748	ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout);
749
750	spin_unlock_irq(ioa_cfg->host->host_lock);
751	wait_for_completion(&ipr_cmd->completion);
752	spin_lock_irq(ioa_cfg->host->host_lock);
753}
754
755/**
756 * ipr_send_hcam - Send an HCAM to the adapter.
757 * @ioa_cfg:	ioa config struct
758 * @type:		HCAM type
759 * @hostrcb:	hostrcb struct
760 *
761 * This function will send a Host Controlled Async command to the adapter.
762 * If HCAMs are currently not allowed to be issued to the adapter, it will
763 * place the hostrcb on the free queue.
764 *
765 * Return value:
766 * 	none
767 **/
768static void ipr_send_hcam(struct ipr_ioa_cfg *ioa_cfg, u8 type,
769			  struct ipr_hostrcb *hostrcb)
770{
771	struct ipr_cmnd *ipr_cmd;
772	struct ipr_ioarcb *ioarcb;
773
774	if (ioa_cfg->allow_cmds) {
775		ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
776		list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
777		list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q);
778
779		ipr_cmd->u.hostrcb = hostrcb;
780		ioarcb = &ipr_cmd->ioarcb;
781
782		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
783		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM;
784		ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC;
785		ioarcb->cmd_pkt.cdb[1] = type;
786		ioarcb->cmd_pkt.cdb[7] = (sizeof(hostrcb->hcam) >> 8) & 0xff;
787		ioarcb->cmd_pkt.cdb[8] = sizeof(hostrcb->hcam) & 0xff;
788
789		ioarcb->read_data_transfer_length = cpu_to_be32(sizeof(hostrcb->hcam));
790		ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
791		ipr_cmd->ioadl[0].flags_and_data_len =
792			cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(hostrcb->hcam));
793		ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma);
794
795		if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE)
796			ipr_cmd->done = ipr_process_ccn;
797		else
798			ipr_cmd->done = ipr_process_error;
799
800		ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR);
801
802		mb();
803		writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
804		       ioa_cfg->regs.ioarrin_reg);
805	} else {
806		list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q);
807	}
808}
809
810/**
811 * ipr_init_res_entry - Initialize a resource entry struct.
812 * @res:	resource entry struct
813 *
814 * Return value:
815 * 	none
816 **/
817static void ipr_init_res_entry(struct ipr_resource_entry *res)
818{
819	res->needs_sync_complete = 0;
820	res->in_erp = 0;
821	res->add_to_ml = 0;
822	res->del_from_ml = 0;
823	res->resetting_device = 0;
824	res->sdev = NULL;
825}
826
827/**
828 * ipr_handle_config_change - Handle a config change from the adapter
829 * @ioa_cfg:	ioa config struct
830 * @hostrcb:	hostrcb
831 *
832 * Return value:
833 * 	none
834 **/
835static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg,
836			      struct ipr_hostrcb *hostrcb)
837{
838	struct ipr_resource_entry *res = NULL;
839	struct ipr_config_table_entry *cfgte;
840	u32 is_ndn = 1;
841
842	cfgte = &hostrcb->hcam.u.ccn.cfgte;
843
844	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
845		if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr,
846			    sizeof(cfgte->res_addr))) {
847			is_ndn = 0;
848			break;
849		}
850	}
851
852	if (is_ndn) {
853		if (list_empty(&ioa_cfg->free_res_q)) {
854			ipr_send_hcam(ioa_cfg,
855				      IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE,
856				      hostrcb);
857			return;
858		}
859
860		res = list_entry(ioa_cfg->free_res_q.next,
861				 struct ipr_resource_entry, queue);
862
863		list_del(&res->queue);
864		ipr_init_res_entry(res);
865		list_add_tail(&res->queue, &ioa_cfg->used_res_q);
866	}
867
868	memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry));
869
870	if (hostrcb->hcam.notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) {
871		if (res->sdev) {
872			res->sdev->hostdata = NULL;
873			res->del_from_ml = 1;
874			if (ioa_cfg->allow_ml_add_del)
875				schedule_work(&ioa_cfg->work_q);
876		} else
877			list_move_tail(&res->queue, &ioa_cfg->free_res_q);
878	} else if (!res->sdev) {
879		res->add_to_ml = 1;
880		if (ioa_cfg->allow_ml_add_del)
881			schedule_work(&ioa_cfg->work_q);
882	}
883
884	ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
885}
886
887/**
888 * ipr_process_ccn - Op done function for a CCN.
889 * @ipr_cmd:	ipr command struct
890 *
891 * This function is the op done function for a configuration
892 * change notification host controlled async from the adapter.
893 *
894 * Return value:
895 * 	none
896 **/
897static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
898{
899	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
900	struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
901	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
902
903	list_del(&hostrcb->queue);
904	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
905
906	if (ioasc) {
907		if (ioasc != IPR_IOASC_IOA_WAS_RESET)
908			dev_err(&ioa_cfg->pdev->dev,
909				"Host RCB failed with IOASC: 0x%08X\n", ioasc);
910
911		ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
912	} else {
913		ipr_handle_config_change(ioa_cfg, hostrcb);
914	}
915}
916
917/**
918 * ipr_log_vpd - Log the passed VPD to the error log.
919 * @vpd:		vendor/product id/sn struct
920 *
921 * Return value:
922 * 	none
923 **/
924static void ipr_log_vpd(struct ipr_vpd *vpd)
925{
926	char buffer[IPR_VENDOR_ID_LEN + IPR_PROD_ID_LEN
927		    + IPR_SERIAL_NUM_LEN];
928
929	memcpy(buffer, vpd->vpids.vendor_id, IPR_VENDOR_ID_LEN);
930	memcpy(buffer + IPR_VENDOR_ID_LEN, vpd->vpids.product_id,
931	       IPR_PROD_ID_LEN);
932	buffer[IPR_VENDOR_ID_LEN + IPR_PROD_ID_LEN] = '\0';
933	ipr_err("Vendor/Product ID: %s\n", buffer);
934
935	memcpy(buffer, vpd->sn, IPR_SERIAL_NUM_LEN);
936	buffer[IPR_SERIAL_NUM_LEN] = '\0';
937	ipr_err("    Serial Number: %s\n", buffer);
938}
939
940/**
941 * ipr_log_ext_vpd - Log the passed extended VPD to the error log.
942 * @vpd:		vendor/product id/sn/wwn struct
943 *
944 * Return value:
945 * 	none
946 **/
947static void ipr_log_ext_vpd(struct ipr_ext_vpd *vpd)
948{
949	ipr_log_vpd(&vpd->vpd);
950	ipr_err("    WWN: %08X%08X\n", be32_to_cpu(vpd->wwid[0]),
951		be32_to_cpu(vpd->wwid[1]));
952}
953
954/**
955 * ipr_log_enhanced_cache_error - Log a cache error.
956 * @ioa_cfg:	ioa config struct
957 * @hostrcb:	hostrcb struct
958 *
959 * Return value:
960 * 	none
961 **/
962static void ipr_log_enhanced_cache_error(struct ipr_ioa_cfg *ioa_cfg,
963					 struct ipr_hostrcb *hostrcb)
964{
965	struct ipr_hostrcb_type_12_error *error =
966		&hostrcb->hcam.u.error.u.type_12_error;
967
968	ipr_err("-----Current Configuration-----\n");
969	ipr_err("Cache Directory Card Information:\n");
970	ipr_log_ext_vpd(&error->ioa_vpd);
971	ipr_err("Adapter Card Information:\n");
972	ipr_log_ext_vpd(&error->cfc_vpd);
973
974	ipr_err("-----Expected Configuration-----\n");
975	ipr_err("Cache Directory Card Information:\n");
976	ipr_log_ext_vpd(&error->ioa_last_attached_to_cfc_vpd);
977	ipr_err("Adapter Card Information:\n");
978	ipr_log_ext_vpd(&error->cfc_last_attached_to_ioa_vpd);
979
980	ipr_err("Additional IOA Data: %08X %08X %08X\n",
981		     be32_to_cpu(error->ioa_data[0]),
982		     be32_to_cpu(error->ioa_data[1]),
983		     be32_to_cpu(error->ioa_data[2]));
984}
985
986/**
987 * ipr_log_cache_error - Log a cache error.
988 * @ioa_cfg:	ioa config struct
989 * @hostrcb:	hostrcb struct
990 *
991 * Return value:
992 * 	none
993 **/
994static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg,
995				struct ipr_hostrcb *hostrcb)
996{
997	struct ipr_hostrcb_type_02_error *error =
998		&hostrcb->hcam.u.error.u.type_02_error;
999
1000	ipr_err("-----Current Configuration-----\n");
1001	ipr_err("Cache Directory Card Information:\n");
1002	ipr_log_vpd(&error->ioa_vpd);
1003	ipr_err("Adapter Card Information:\n");
1004	ipr_log_vpd(&error->cfc_vpd);
1005
1006	ipr_err("-----Expected Configuration-----\n");
1007	ipr_err("Cache Directory Card Information:\n");
1008	ipr_log_vpd(&error->ioa_last_attached_to_cfc_vpd);
1009	ipr_err("Adapter Card Information:\n");
1010	ipr_log_vpd(&error->cfc_last_attached_to_ioa_vpd);
1011
1012	ipr_err("Additional IOA Data: %08X %08X %08X\n",
1013		     be32_to_cpu(error->ioa_data[0]),
1014		     be32_to_cpu(error->ioa_data[1]),
1015		     be32_to_cpu(error->ioa_data[2]));
1016}
1017
1018/**
1019 * ipr_log_enhanced_config_error - Log a configuration error.
1020 * @ioa_cfg:	ioa config struct
1021 * @hostrcb:	hostrcb struct
1022 *
1023 * Return value:
1024 * 	none
1025 **/
1026static void ipr_log_enhanced_config_error(struct ipr_ioa_cfg *ioa_cfg,
1027					  struct ipr_hostrcb *hostrcb)
1028{
1029	int errors_logged, i;
1030	struct ipr_hostrcb_device_data_entry_enhanced *dev_entry;
1031	struct ipr_hostrcb_type_13_error *error;
1032
1033	error = &hostrcb->hcam.u.error.u.type_13_error;
1034	errors_logged = be32_to_cpu(error->errors_logged);
1035
1036	ipr_err("Device Errors Detected/Logged: %d/%d\n",
1037		be32_to_cpu(error->errors_detected), errors_logged);
1038
1039	dev_entry = error->dev;
1040
1041	for (i = 0; i < errors_logged; i++, dev_entry++) {
1042		ipr_err_separator;
1043
1044		ipr_phys_res_err(ioa_cfg, dev_entry->dev_res_addr, "Device %d", i + 1);
1045		ipr_log_ext_vpd(&dev_entry->vpd);
1046
1047		ipr_err("-----New Device Information-----\n");
1048		ipr_log_ext_vpd(&dev_entry->new_vpd);
1049
1050		ipr_err("Cache Directory Card Information:\n");
1051		ipr_log_ext_vpd(&dev_entry->ioa_last_with_dev_vpd);
1052
1053		ipr_err("Adapter Card Information:\n");
1054		ipr_log_ext_vpd(&dev_entry->cfc_last_with_dev_vpd);
1055	}
1056}
1057
1058/**
1059 * ipr_log_config_error - Log a configuration error.
1060 * @ioa_cfg:	ioa config struct
1061 * @hostrcb:	hostrcb struct
1062 *
1063 * Return value:
1064 * 	none
1065 **/
1066static void ipr_log_config_error(struct ipr_ioa_cfg *ioa_cfg,
1067				 struct ipr_hostrcb *hostrcb)
1068{
1069	int errors_logged, i;
1070	struct ipr_hostrcb_device_data_entry *dev_entry;
1071	struct ipr_hostrcb_type_03_error *error;
1072
1073	error = &hostrcb->hcam.u.error.u.type_03_error;
1074	errors_logged = be32_to_cpu(error->errors_logged);
1075
1076	ipr_err("Device Errors Detected/Logged: %d/%d\n",
1077		be32_to_cpu(error->errors_detected), errors_logged);
1078
1079	dev_entry = error->dev;
1080
1081	for (i = 0; i < errors_logged; i++, dev_entry++) {
1082		ipr_err_separator;
1083
1084		ipr_phys_res_err(ioa_cfg, dev_entry->dev_res_addr, "Device %d", i + 1);
1085		ipr_log_vpd(&dev_entry->vpd);
1086
1087		ipr_err("-----New Device Information-----\n");
1088		ipr_log_vpd(&dev_entry->new_vpd);
1089
1090		ipr_err("Cache Directory Card Information:\n");
1091		ipr_log_vpd(&dev_entry->ioa_last_with_dev_vpd);
1092
1093		ipr_err("Adapter Card Information:\n");
1094		ipr_log_vpd(&dev_entry->cfc_last_with_dev_vpd);
1095
1096		ipr_err("Additional IOA Data: %08X %08X %08X %08X %08X\n",
1097			be32_to_cpu(dev_entry->ioa_data[0]),
1098			be32_to_cpu(dev_entry->ioa_data[1]),
1099			be32_to_cpu(dev_entry->ioa_data[2]),
1100			be32_to_cpu(dev_entry->ioa_data[3]),
1101			be32_to_cpu(dev_entry->ioa_data[4]));
1102	}
1103}
1104
1105/**
1106 * ipr_log_enhanced_array_error - Log an array configuration error.
1107 * @ioa_cfg:	ioa config struct
1108 * @hostrcb:	hostrcb struct
1109 *
1110 * Return value:
1111 * 	none
1112 **/
1113static void ipr_log_enhanced_array_error(struct ipr_ioa_cfg *ioa_cfg,
1114					 struct ipr_hostrcb *hostrcb)
1115{
1116	int i, num_entries;
1117	struct ipr_hostrcb_type_14_error *error;
1118	struct ipr_hostrcb_array_data_entry_enhanced *array_entry;
1119	const u8 zero_sn[IPR_SERIAL_NUM_LEN] = { [0 ... IPR_SERIAL_NUM_LEN-1] = '0' };
1120
1121	error = &hostrcb->hcam.u.error.u.type_14_error;
1122
1123	ipr_err_separator;
1124
1125	ipr_err("RAID %s Array Configuration: %d:%d:%d:%d\n",
1126		error->protection_level,
1127		ioa_cfg->host->host_no,
1128		error->last_func_vset_res_addr.bus,
1129		error->last_func_vset_res_addr.target,
1130		error->last_func_vset_res_addr.lun);
1131
1132	ipr_err_separator;
1133
1134	array_entry = error->array_member;
1135	num_entries = min_t(u32, be32_to_cpu(error->num_entries),
1136			    sizeof(error->array_member));
1137
1138	for (i = 0; i < num_entries; i++, array_entry++) {
1139		if (!memcmp(array_entry->vpd.vpd.sn, zero_sn, IPR_SERIAL_NUM_LEN))
1140			continue;
1141
1142		if (be32_to_cpu(error->exposed_mode_adn) == i)
1143			ipr_err("Exposed Array Member %d:\n", i);
1144		else
1145			ipr_err("Array Member %d:\n", i);
1146
1147		ipr_log_ext_vpd(&array_entry->vpd);
1148		ipr_phys_res_err(ioa_cfg, array_entry->dev_res_addr, "Current Location");
1149		ipr_phys_res_err(ioa_cfg, array_entry->expected_dev_res_addr,
1150				 "Expected Location");
1151
1152		ipr_err_separator;
1153	}
1154}
1155
1156/**
1157 * ipr_log_array_error - Log an array configuration error.
1158 * @ioa_cfg:	ioa config struct
1159 * @hostrcb:	hostrcb struct
1160 *
1161 * Return value:
1162 * 	none
1163 **/
1164static void ipr_log_array_error(struct ipr_ioa_cfg *ioa_cfg,
1165				struct ipr_hostrcb *hostrcb)
1166{
1167	int i;
1168	struct ipr_hostrcb_type_04_error *error;
1169	struct ipr_hostrcb_array_data_entry *array_entry;
1170	const u8 zero_sn[IPR_SERIAL_NUM_LEN] = { [0 ... IPR_SERIAL_NUM_LEN-1] = '0' };
1171
1172	error = &hostrcb->hcam.u.error.u.type_04_error;
1173
1174	ipr_err_separator;
1175
1176	ipr_err("RAID %s Array Configuration: %d:%d:%d:%d\n",
1177		error->protection_level,
1178		ioa_cfg->host->host_no,
1179		error->last_func_vset_res_addr.bus,
1180		error->last_func_vset_res_addr.target,
1181		error->last_func_vset_res_addr.lun);
1182
1183	ipr_err_separator;
1184
1185	array_entry = error->array_member;
1186
1187	for (i = 0; i < 18; i++) {
1188		if (!memcmp(array_entry->vpd.sn, zero_sn, IPR_SERIAL_NUM_LEN))
1189			continue;
1190
1191		if (be32_to_cpu(error->exposed_mode_adn) == i)
1192			ipr_err("Exposed Array Member %d:\n", i);
1193		else
1194			ipr_err("Array Member %d:\n", i);
1195
1196		ipr_log_vpd(&array_entry->vpd);
1197
1198		ipr_phys_res_err(ioa_cfg, array_entry->dev_res_addr, "Current Location");
1199		ipr_phys_res_err(ioa_cfg, array_entry->expected_dev_res_addr,
1200				 "Expected Location");
1201
1202		ipr_err_separator;
1203
1204		if (i == 9)
1205			array_entry = error->array_member2;
1206		else
1207			array_entry++;
1208	}
1209}
1210
1211/**
1212 * ipr_log_hex_data - Log additional hex IOA error data.
1213 * @data:		IOA error data
1214 * @len:		data length
1215 *
1216 * Return value:
1217 * 	none
1218 **/
1219static void ipr_log_hex_data(u32 *data, int len)
1220{
1221	int i;
1222
1223	if (len == 0)
1224		return;
1225
1226	for (i = 0; i < len / 4; i += 4) {
1227		ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
1228			be32_to_cpu(data[i]),
1229			be32_to_cpu(data[i+1]),
1230			be32_to_cpu(data[i+2]),
1231			be32_to_cpu(data[i+3]));
1232	}
1233}
1234
1235/**
1236 * ipr_log_enhanced_dual_ioa_error - Log an enhanced dual adapter error.
1237 * @ioa_cfg:	ioa config struct
1238 * @hostrcb:	hostrcb struct
1239 *
1240 * Return value:
1241 * 	none
1242 **/
1243static void ipr_log_enhanced_dual_ioa_error(struct ipr_ioa_cfg *ioa_cfg,
1244					    struct ipr_hostrcb *hostrcb)
1245{
1246	struct ipr_hostrcb_type_17_error *error;
1247
1248	error = &hostrcb->hcam.u.error.u.type_17_error;
1249	error->failure_reason[sizeof(error->failure_reason) - 1] = '\0';
1250
1251	ipr_err("%s\n", error->failure_reason);
1252	ipr_err("Remote Adapter VPD:\n");
1253	ipr_log_ext_vpd(&error->vpd);
1254	ipr_log_hex_data(error->data,
1255			 be32_to_cpu(hostrcb->hcam.length) -
1256			 (offsetof(struct ipr_hostrcb_error, u) +
1257			  offsetof(struct ipr_hostrcb_type_17_error, data)));
1258}
1259
1260/**
1261 * ipr_log_dual_ioa_error - Log a dual adapter error.
1262 * @ioa_cfg:	ioa config struct
1263 * @hostrcb:	hostrcb struct
1264 *
1265 * Return value:
1266 * 	none
1267 **/
1268static void ipr_log_dual_ioa_error(struct ipr_ioa_cfg *ioa_cfg,
1269				   struct ipr_hostrcb *hostrcb)
1270{
1271	struct ipr_hostrcb_type_07_error *error;
1272
1273	error = &hostrcb->hcam.u.error.u.type_07_error;
1274	error->failure_reason[sizeof(error->failure_reason) - 1] = '\0';
1275
1276	ipr_err("%s\n", error->failure_reason);
1277	ipr_err("Remote Adapter VPD:\n");
1278	ipr_log_vpd(&error->vpd);
1279	ipr_log_hex_data(error->data,
1280			 be32_to_cpu(hostrcb->hcam.length) -
1281			 (offsetof(struct ipr_hostrcb_error, u) +
1282			  offsetof(struct ipr_hostrcb_type_07_error, data)));
1283}
1284
1285/**
1286 * ipr_log_generic_error - Log an adapter error.
1287 * @ioa_cfg:	ioa config struct
1288 * @hostrcb:	hostrcb struct
1289 *
1290 * Return value:
1291 * 	none
1292 **/
1293static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg,
1294				  struct ipr_hostrcb *hostrcb)
1295{
1296	ipr_log_hex_data(hostrcb->hcam.u.raw.data,
1297			 be32_to_cpu(hostrcb->hcam.length));
1298}
1299
1300/**
1301 * ipr_get_error - Find the specfied IOASC in the ipr_error_table.
1302 * @ioasc:	IOASC
1303 *
1304 * This function will return the index of into the ipr_error_table
1305 * for the specified IOASC. If the IOASC is not in the table,
1306 * 0 will be returned, which points to the entry used for unknown errors.
1307 *
1308 * Return value:
1309 * 	index into the ipr_error_table
1310 **/
1311static u32 ipr_get_error(u32 ioasc)
1312{
1313	int i;
1314
1315	for (i = 0; i < ARRAY_SIZE(ipr_error_table); i++)
1316		if (ipr_error_table[i].ioasc == ioasc)
1317			return i;
1318
1319	return 0;
1320}
1321
1322/**
1323 * ipr_handle_log_data - Log an adapter error.
1324 * @ioa_cfg:	ioa config struct
1325 * @hostrcb:	hostrcb struct
1326 *
1327 * This function logs an adapter error to the system.
1328 *
1329 * Return value:
1330 * 	none
1331 **/
1332static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
1333				struct ipr_hostrcb *hostrcb)
1334{
1335	u32 ioasc;
1336	int error_index;
1337
1338	if (hostrcb->hcam.notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY)
1339		return;
1340
1341	if (hostrcb->hcam.notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST)
1342		dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n");
1343
1344	ioasc = be32_to_cpu(hostrcb->hcam.u.error.failing_dev_ioasc);
1345
1346	if (ioasc == IPR_IOASC_BUS_WAS_RESET ||
1347	    ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) {
1348		/* Tell the midlayer we had a bus reset so it will handle the UA properly */
1349		scsi_report_bus_reset(ioa_cfg->host,
1350				      hostrcb->hcam.u.error.failing_dev_res_addr.bus);
1351	}
1352
1353	error_index = ipr_get_error(ioasc);
1354
1355	if (!ipr_error_table[error_index].log_hcam)
1356		return;
1357
1358	if (ipr_is_device(&hostrcb->hcam.u.error.failing_dev_res_addr)) {
1359		ipr_res_err(ioa_cfg, hostrcb->hcam.u.error.failing_dev_res_addr,
1360			    "%s\n", ipr_error_table[error_index].error);
1361	} else {
1362		dev_err(&ioa_cfg->pdev->dev, "%s\n",
1363			ipr_error_table[error_index].error);
1364	}
1365
1366	/* Set indication we have logged an error */
1367	ioa_cfg->errors_logged++;
1368
1369	if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL)
1370		return;
1371	if (be32_to_cpu(hostrcb->hcam.length) > sizeof(hostrcb->hcam.u.raw))
1372		hostrcb->hcam.length = cpu_to_be32(sizeof(hostrcb->hcam.u.raw));
1373
1374	switch (hostrcb->hcam.overlay_id) {
1375	case IPR_HOST_RCB_OVERLAY_ID_2:
1376		ipr_log_cache_error(ioa_cfg, hostrcb);
1377		break;
1378	case IPR_HOST_RCB_OVERLAY_ID_3:
1379		ipr_log_config_error(ioa_cfg, hostrcb);
1380		break;
1381	case IPR_HOST_RCB_OVERLAY_ID_4:
1382	case IPR_HOST_RCB_OVERLAY_ID_6:
1383		ipr_log_array_error(ioa_cfg, hostrcb);
1384		break;
1385	case IPR_HOST_RCB_OVERLAY_ID_7:
1386		ipr_log_dual_ioa_error(ioa_cfg, hostrcb);
1387		break;
1388	case IPR_HOST_RCB_OVERLAY_ID_12:
1389		ipr_log_enhanced_cache_error(ioa_cfg, hostrcb);
1390		break;
1391	case IPR_HOST_RCB_OVERLAY_ID_13:
1392		ipr_log_enhanced_config_error(ioa_cfg, hostrcb);
1393		break;
1394	case IPR_HOST_RCB_OVERLAY_ID_14:
1395	case IPR_HOST_RCB_OVERLAY_ID_16:
1396		ipr_log_enhanced_array_error(ioa_cfg, hostrcb);
1397		break;
1398	case IPR_HOST_RCB_OVERLAY_ID_17:
1399		ipr_log_enhanced_dual_ioa_error(ioa_cfg, hostrcb);
1400		break;
1401	case IPR_HOST_RCB_OVERLAY_ID_1:
1402	case IPR_HOST_RCB_OVERLAY_ID_DEFAULT:
1403	default:
1404		ipr_log_generic_error(ioa_cfg, hostrcb);
1405		break;
1406	}
1407}
1408
1409/**
1410 * ipr_process_error - Op done function for an adapter error log.
1411 * @ipr_cmd:	ipr command struct
1412 *
1413 * This function is the op done function for an error log host
1414 * controlled async from the adapter. It will log the error and
1415 * send the HCAM back to the adapter.
1416 *
1417 * Return value:
1418 * 	none
1419 **/
1420static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
1421{
1422	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
1423	struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
1424	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
1425
1426	list_del(&hostrcb->queue);
1427	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
1428
1429	if (!ioasc) {
1430		ipr_handle_log_data(ioa_cfg, hostrcb);
1431	} else if (ioasc != IPR_IOASC_IOA_WAS_RESET) {
1432		dev_err(&ioa_cfg->pdev->dev,
1433			"Host RCB failed with IOASC: 0x%08X\n", ioasc);
1434	}
1435
1436	ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
1437}
1438
1439/**
1440 * ipr_timeout -  An internally generated op has timed out.
1441 * @ipr_cmd:	ipr command struct
1442 *
1443 * This function blocks host requests and initiates an
1444 * adapter reset.
1445 *
1446 * Return value:
1447 * 	none
1448 **/
1449static void ipr_timeout(struct ipr_cmnd *ipr_cmd)
1450{
1451	unsigned long lock_flags = 0;
1452	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
1453
1454	ENTER;
1455	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
1456
1457	ioa_cfg->errors_logged++;
1458	dev_err(&ioa_cfg->pdev->dev,
1459		"Adapter being reset due to command timeout.\n");
1460
1461	if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
1462		ioa_cfg->sdt_state = GET_DUMP;
1463
1464	if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd)
1465		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
1466
1467	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1468	LEAVE;
1469}
1470
1471/**
1472 * ipr_oper_timeout -  Adapter timed out transitioning to operational
1473 * @ipr_cmd:	ipr command struct
1474 *
1475 * This function blocks host requests and initiates an
1476 * adapter reset.
1477 *
1478 * Return value:
1479 * 	none
1480 **/
1481static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd)
1482{
1483	unsigned long lock_flags = 0;
1484	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
1485
1486	ENTER;
1487	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
1488
1489	ioa_cfg->errors_logged++;
1490	dev_err(&ioa_cfg->pdev->dev,
1491		"Adapter timed out transitioning to operational.\n");
1492
1493	if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
1494		ioa_cfg->sdt_state = GET_DUMP;
1495
1496	if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd) {
1497		if (ipr_fastfail)
1498			ioa_cfg->reset_retries += IPR_NUM_RESET_RELOAD_RETRIES;
1499		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
1500	}
1501
1502	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1503	LEAVE;
1504}
1505
1506/**
1507 * ipr_reset_reload - Reset/Reload the IOA
1508 * @ioa_cfg:		ioa config struct
1509 * @shutdown_type:	shutdown type
1510 *
1511 * This function resets the adapter and re-initializes it.
1512 * This function assumes that all new host commands have been stopped.
1513 * Return value:
1514 * 	SUCCESS / FAILED
1515 **/
1516static int ipr_reset_reload(struct ipr_ioa_cfg *ioa_cfg,
1517			    enum ipr_shutdown_type shutdown_type)
1518{
1519	if (!ioa_cfg->in_reset_reload)
1520		ipr_initiate_ioa_reset(ioa_cfg, shutdown_type);
1521
1522	spin_unlock_irq(ioa_cfg->host->host_lock);
1523	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
1524	spin_lock_irq(ioa_cfg->host->host_lock);
1525
1526	/* If we got hit with a host reset while we were already resetting
1527	 the adapter for some reason, and the reset failed. */
1528	if (ioa_cfg->ioa_is_dead) {
1529		ipr_trace;
1530		return FAILED;
1531	}
1532
1533	return SUCCESS;
1534}
1535
1536/**
1537 * ipr_find_ses_entry - Find matching SES in SES table
1538 * @res:	resource entry struct of SES
1539 *
1540 * Return value:
1541 * 	pointer to SES table entry / NULL on failure
1542 **/
1543static const struct ipr_ses_table_entry *
1544ipr_find_ses_entry(struct ipr_resource_entry *res)
1545{
1546	int i, j, matches;
1547	const struct ipr_ses_table_entry *ste = ipr_ses_table;
1548
1549	for (i = 0; i < ARRAY_SIZE(ipr_ses_table); i++, ste++) {
1550		for (j = 0, matches = 0; j < IPR_PROD_ID_LEN; j++) {
1551			if (ste->compare_product_id_byte[j] == 'X') {
1552				if (res->cfgte.std_inq_data.vpids.product_id[j] == ste->product_id[j])
1553					matches++;
1554				else
1555					break;
1556			} else
1557				matches++;
1558		}
1559
1560		if (matches == IPR_PROD_ID_LEN)
1561			return ste;
1562	}
1563
1564	return NULL;
1565}
1566
1567/**
1568 * ipr_get_max_scsi_speed - Determine max SCSI speed for a given bus
1569 * @ioa_cfg:	ioa config struct
1570 * @bus:		SCSI bus
1571 * @bus_width:	bus width
1572 *
1573 * Return value:
1574 *	SCSI bus speed in units of 100KHz, 1600 is 160 MHz
1575 *	For a 2-byte wide SCSI bus, the maximum transfer speed is
1576 *	twice the maximum transfer rate (e.g. for a wide enabled bus,
1577 *	max 160MHz = max 320MB/sec).
1578 **/
1579static u32 ipr_get_max_scsi_speed(struct ipr_ioa_cfg *ioa_cfg, u8 bus, u8 bus_width)
1580{
1581	struct ipr_resource_entry *res;
1582	const struct ipr_ses_table_entry *ste;
1583	u32 max_xfer_rate = IPR_MAX_SCSI_RATE(bus_width);
1584
1585	/* Loop through each config table entry in the config table buffer */
1586	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
1587		if (!(IPR_IS_SES_DEVICE(res->cfgte.std_inq_data)))
1588			continue;
1589
1590		if (bus != res->cfgte.res_addr.bus)
1591			continue;
1592
1593		if (!(ste = ipr_find_ses_entry(res)))
1594			continue;
1595
1596		max_xfer_rate = (ste->max_bus_speed_limit * 10) / (bus_width / 8);
1597	}
1598
1599	return max_xfer_rate;
1600}
1601
1602/**
1603 * ipr_wait_iodbg_ack - Wait for an IODEBUG ACK from the IOA
1604 * @ioa_cfg:		ioa config struct
1605 * @max_delay:		max delay in micro-seconds to wait
1606 *
1607 * Waits for an IODEBUG ACK from the IOA, doing busy looping.
1608 *
1609 * Return value:
1610 * 	0 on success / other on failure
1611 **/
1612static int ipr_wait_iodbg_ack(struct ipr_ioa_cfg *ioa_cfg, int max_delay)
1613{
1614	volatile u32 pcii_reg;
1615	int delay = 1;
1616
1617	/* Read interrupt reg until IOA signals IO Debug Acknowledge */
1618	while (delay < max_delay) {
1619		pcii_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
1620
1621		if (pcii_reg & IPR_PCII_IO_DEBUG_ACKNOWLEDGE)
1622			return 0;
1623
1624		/* udelay cannot be used if delay is more than a few milliseconds */
1625		if ((delay / 1000) > MAX_UDELAY_MS)
1626			mdelay(delay / 1000);
1627		else
1628			udelay(delay);
1629
1630		delay += delay;
1631	}
1632	return -EIO;
1633}
1634
1635/**
1636 * ipr_get_ldump_data_section - Dump IOA memory
1637 * @ioa_cfg:			ioa config struct
1638 * @start_addr:			adapter address to dump
1639 * @dest:				destination kernel buffer
1640 * @length_in_words:	length to dump in 4 byte words
1641 *
1642 * Return value:
1643 * 	0 on success / -EIO on failure
1644 **/
1645static int ipr_get_ldump_data_section(struct ipr_ioa_cfg *ioa_cfg,
1646				      u32 start_addr,
1647				      __be32 *dest, u32 length_in_words)
1648{
1649	volatile u32 temp_pcii_reg;
1650	int i, delay = 0;
1651
1652	/* Write IOA interrupt reg starting LDUMP state  */
1653	writel((IPR_UPROCI_RESET_ALERT | IPR_UPROCI_IO_DEBUG_ALERT),
1654	       ioa_cfg->regs.set_uproc_interrupt_reg);
1655
1656	/* Wait for IO debug acknowledge */
1657	if (ipr_wait_iodbg_ack(ioa_cfg,
1658			       IPR_LDUMP_MAX_LONG_ACK_DELAY_IN_USEC)) {
1659		dev_err(&ioa_cfg->pdev->dev,
1660			"IOA dump long data transfer timeout\n");
1661		return -EIO;
1662	}
1663
1664	/* Signal LDUMP interlocked - clear IO debug ack */
1665	writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
1666	       ioa_cfg->regs.clr_interrupt_reg);
1667
1668	/* Write Mailbox with starting address */
1669	writel(start_addr, ioa_cfg->ioa_mailbox);
1670
1671	/* Signal address valid - clear IOA Reset alert */
1672	writel(IPR_UPROCI_RESET_ALERT,
1673	       ioa_cfg->regs.clr_uproc_interrupt_reg);
1674
1675	for (i = 0; i < length_in_words; i++) {
1676		/* Wait for IO debug acknowledge */
1677		if (ipr_wait_iodbg_ack(ioa_cfg,
1678				       IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC)) {
1679			dev_err(&ioa_cfg->pdev->dev,
1680				"IOA dump short data transfer timeout\n");
1681			return -EIO;
1682		}
1683
1684		/* Read data from mailbox and increment destination pointer */
1685		*dest = cpu_to_be32(readl(ioa_cfg->ioa_mailbox));
1686		dest++;
1687
1688		/* For all but the last word of data, signal data received */
1689		if (i < (length_in_words - 1)) {
1690			/* Signal dump data received - Clear IO debug Ack */
1691			writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
1692			       ioa_cfg->regs.clr_interrupt_reg);
1693		}
1694	}
1695
1696	/* Signal end of block transfer. Set reset alert then clear IO debug ack */
1697	writel(IPR_UPROCI_RESET_ALERT,
1698	       ioa_cfg->regs.set_uproc_interrupt_reg);
1699
1700	writel(IPR_UPROCI_IO_DEBUG_ALERT,
1701	       ioa_cfg->regs.clr_uproc_interrupt_reg);
1702
1703	/* Signal dump data received - Clear IO debug Ack */
1704	writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
1705	       ioa_cfg->regs.clr_interrupt_reg);
1706
1707	/* Wait for IOA to signal LDUMP exit - IOA reset alert will be cleared */
1708	while (delay < IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC) {
1709		temp_pcii_reg =
1710		    readl(ioa_cfg->regs.sense_uproc_interrupt_reg);
1711
1712		if (!(temp_pcii_reg & IPR_UPROCI_RESET_ALERT))
1713			return 0;
1714
1715		udelay(10);
1716		delay += 10;
1717	}
1718
1719	return 0;
1720}
1721
1722#ifdef CONFIG_SCSI_IPR_DUMP
1723/**
1724 * ipr_sdt_copy - Copy Smart Dump Table to kernel buffer
1725 * @ioa_cfg:		ioa config struct
1726 * @pci_address:	adapter address
1727 * @length:			length of data to copy
1728 *
1729 * Copy data from PCI adapter to kernel buffer.
1730 * Note: length MUST be a 4 byte multiple
1731 * Return value:
1732 * 	0 on success / other on failure
1733 **/
1734static int ipr_sdt_copy(struct ipr_ioa_cfg *ioa_cfg,
1735			unsigned long pci_address, u32 length)
1736{
1737	int bytes_copied = 0;
1738	int cur_len, rc, rem_len, rem_page_len;
1739	__be32 *page;
1740	unsigned long lock_flags = 0;
1741	struct ipr_ioa_dump *ioa_dump = &ioa_cfg->dump->ioa_dump;
1742
1743	while (bytes_copied < length &&
1744	       (ioa_dump->hdr.len + bytes_copied) < IPR_MAX_IOA_DUMP_SIZE) {
1745		if (ioa_dump->page_offset >= PAGE_SIZE ||
1746		    ioa_dump->page_offset == 0) {
1747			page = (__be32 *)__get_free_page(GFP_ATOMIC);
1748
1749			if (!page) {
1750				ipr_trace;
1751				return bytes_copied;
1752			}
1753
1754			ioa_dump->page_offset = 0;
1755			ioa_dump->ioa_data[ioa_dump->next_page_index] = page;
1756			ioa_dump->next_page_index++;
1757		} else
1758			page = ioa_dump->ioa_data[ioa_dump->next_page_index - 1];
1759
1760		rem_len = length - bytes_copied;
1761		rem_page_len = PAGE_SIZE - ioa_dump->page_offset;
1762		cur_len = min(rem_len, rem_page_len);
1763
1764		spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
1765		if (ioa_cfg->sdt_state == ABORT_DUMP) {
1766			rc = -EIO;
1767		} else {
1768			rc = ipr_get_ldump_data_section(ioa_cfg,
1769							pci_address + bytes_copied,
1770							&page[ioa_dump->page_offset / 4],
1771							(cur_len / sizeof(u32)));
1772		}
1773		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1774
1775		if (!rc) {
1776			ioa_dump->page_offset += cur_len;
1777			bytes_copied += cur_len;
1778		} else {
1779			ipr_trace;
1780			break;
1781		}
1782		schedule();
1783	}
1784
1785	return bytes_copied;
1786}
1787
1788/**
1789 * ipr_init_dump_entry_hdr - Initialize a dump entry header.
1790 * @hdr:	dump entry header struct
1791 *
1792 * Return value:
1793 * 	nothing
1794 **/
1795static void ipr_init_dump_entry_hdr(struct ipr_dump_entry_header *hdr)
1796{
1797	hdr->eye_catcher = IPR_DUMP_EYE_CATCHER;
1798	hdr->num_elems = 1;
1799	hdr->offset = sizeof(*hdr);
1800	hdr->status = IPR_DUMP_STATUS_SUCCESS;
1801}
1802
1803/**
1804 * ipr_dump_ioa_type_data - Fill in the adapter type in the dump.
1805 * @ioa_cfg:	ioa config struct
1806 * @driver_dump:	driver dump struct
1807 *
1808 * Return value:
1809 * 	nothing
1810 **/
1811static void ipr_dump_ioa_type_data(struct ipr_ioa_cfg *ioa_cfg,
1812				   struct ipr_driver_dump *driver_dump)
1813{
1814	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
1815
1816	ipr_init_dump_entry_hdr(&driver_dump->ioa_type_entry.hdr);
1817	driver_dump->ioa_type_entry.hdr.len =
1818		sizeof(struct ipr_dump_ioa_type_entry) -
1819		sizeof(struct ipr_dump_entry_header);
1820	driver_dump->ioa_type_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
1821	driver_dump->ioa_type_entry.hdr.id = IPR_DUMP_DRIVER_TYPE_ID;
1822	driver_dump->ioa_type_entry.type = ioa_cfg->type;
1823	driver_dump->ioa_type_entry.fw_version = (ucode_vpd->major_release << 24) |
1824		(ucode_vpd->card_type << 16) | (ucode_vpd->minor_release[0] << 8) |
1825		ucode_vpd->minor_release[1];
1826	driver_dump->hdr.num_entries++;
1827}
1828
1829/**
1830 * ipr_dump_version_data - Fill in the driver version in the dump.
1831 * @ioa_cfg:	ioa config struct
1832 * @driver_dump:	driver dump struct
1833 *
1834 * Return value:
1835 * 	nothing
1836 **/
1837static void ipr_dump_version_data(struct ipr_ioa_cfg *ioa_cfg,
1838				  struct ipr_driver_dump *driver_dump)
1839{
1840	ipr_init_dump_entry_hdr(&driver_dump->version_entry.hdr);
1841	driver_dump->version_entry.hdr.len =
1842		sizeof(struct ipr_dump_version_entry) -
1843		sizeof(struct ipr_dump_entry_header);
1844	driver_dump->version_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII;
1845	driver_dump->version_entry.hdr.id = IPR_DUMP_DRIVER_VERSION_ID;
1846	strcpy(driver_dump->version_entry.version, IPR_DRIVER_VERSION);
1847	driver_dump->hdr.num_entries++;
1848}
1849
1850/**
1851 * ipr_dump_trace_data - Fill in the IOA trace in the dump.
1852 * @ioa_cfg:	ioa config struct
1853 * @driver_dump:	driver dump struct
1854 *
1855 * Return value:
1856 * 	nothing
1857 **/
1858static void ipr_dump_trace_data(struct ipr_ioa_cfg *ioa_cfg,
1859				   struct ipr_driver_dump *driver_dump)
1860{
1861	ipr_init_dump_entry_hdr(&driver_dump->trace_entry.hdr);
1862	driver_dump->trace_entry.hdr.len =
1863		sizeof(struct ipr_dump_trace_entry) -
1864		sizeof(struct ipr_dump_entry_header);
1865	driver_dump->trace_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
1866	driver_dump->trace_entry.hdr.id = IPR_DUMP_TRACE_ID;
1867	memcpy(driver_dump->trace_entry.trace, ioa_cfg->trace, IPR_TRACE_SIZE);
1868	driver_dump->hdr.num_entries++;
1869}
1870
1871/**
1872 * ipr_dump_location_data - Fill in the IOA location in the dump.
1873 * @ioa_cfg:	ioa config struct
1874 * @driver_dump:	driver dump struct
1875 *
1876 * Return value:
1877 * 	nothing
1878 **/
1879static void ipr_dump_location_data(struct ipr_ioa_cfg *ioa_cfg,
1880				   struct ipr_driver_dump *driver_dump)
1881{
1882	ipr_init_dump_entry_hdr(&driver_dump->location_entry.hdr);
1883	driver_dump->location_entry.hdr.len =
1884		sizeof(struct ipr_dump_location_entry) -
1885		sizeof(struct ipr_dump_entry_header);
1886	driver_dump->location_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII;
1887	driver_dump->location_entry.hdr.id = IPR_DUMP_LOCATION_ID;
1888	strcpy(driver_dump->location_entry.location, ioa_cfg->pdev->dev.bus_id);
1889	driver_dump->hdr.num_entries++;
1890}
1891
1892/**
1893 * ipr_get_ioa_dump - Perform a dump of the driver and adapter.
1894 * @ioa_cfg:	ioa config struct
1895 * @dump:		dump struct
1896 *
1897 * Return value:
1898 * 	nothing
1899 **/
1900static void ipr_get_ioa_dump(struct ipr_ioa_cfg *ioa_cfg, struct ipr_dump *dump)
1901{
1902	unsigned long start_addr, sdt_word;
1903	unsigned long lock_flags = 0;
1904	struct ipr_driver_dump *driver_dump = &dump->driver_dump;
1905	struct ipr_ioa_dump *ioa_dump = &dump->ioa_dump;
1906	u32 num_entries, start_off, end_off;
1907	u32 bytes_to_copy, bytes_copied, rc;
1908	struct ipr_sdt *sdt;
1909	int i;
1910
1911	ENTER;
1912
1913	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
1914
1915	if (ioa_cfg->sdt_state != GET_DUMP) {
1916		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1917		return;
1918	}
1919
1920	start_addr = readl(ioa_cfg->ioa_mailbox);
1921
1922	if (!ipr_sdt_is_fmt2(start_addr)) {
1923		dev_err(&ioa_cfg->pdev->dev,
1924			"Invalid dump table format: %lx\n", start_addr);
1925		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1926		return;
1927	}
1928
1929	dev_err(&ioa_cfg->pdev->dev, "Dump of IOA initiated\n");
1930
1931	driver_dump->hdr.eye_catcher = IPR_DUMP_EYE_CATCHER;
1932
1933	/* Initialize the overall dump header */
1934	driver_dump->hdr.len = sizeof(struct ipr_driver_dump);
1935	driver_dump->hdr.num_entries = 1;
1936	driver_dump->hdr.first_entry_offset = sizeof(struct ipr_dump_header);
1937	driver_dump->hdr.status = IPR_DUMP_STATUS_SUCCESS;
1938	driver_dump->hdr.os = IPR_DUMP_OS_LINUX;
1939	driver_dump->hdr.driver_name = IPR_DUMP_DRIVER_NAME;
1940
1941	ipr_dump_version_data(ioa_cfg, driver_dump);
1942	ipr_dump_location_data(ioa_cfg, driver_dump);
1943	ipr_dump_ioa_type_data(ioa_cfg, driver_dump);
1944	ipr_dump_trace_data(ioa_cfg, driver_dump);
1945
1946	/* Update dump_header */
1947	driver_dump->hdr.len += sizeof(struct ipr_dump_entry_header);
1948
1949	/* IOA Dump entry */
1950	ipr_init_dump_entry_hdr(&ioa_dump->hdr);
1951	ioa_dump->format = IPR_SDT_FMT2;
1952	ioa_dump->hdr.len = 0;
1953	ioa_dump->hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
1954	ioa_dump->hdr.id = IPR_DUMP_IOA_DUMP_ID;
1955
1956	/* First entries in sdt are actually a list of dump addresses and
1957	 lengths to gather the real dump data.  sdt represents the pointer
1958	 to the ioa generated dump table.  Dump data will be extracted based
1959	 on entries in this table */
1960	sdt = &ioa_dump->sdt;
1961
1962	rc = ipr_get_ldump_data_section(ioa_cfg, start_addr, (__be32 *)sdt,
1963					sizeof(struct ipr_sdt) / sizeof(__be32));
1964
1965	/* Smart Dump table is ready to use and the first entry is valid */
1966	if (rc || (be32_to_cpu(sdt->hdr.state) != IPR_FMT2_SDT_READY_TO_USE)) {
1967		dev_err(&ioa_cfg->pdev->dev,
1968			"Dump of IOA failed. Dump table not valid: %d, %X.\n",
1969			rc, be32_to_cpu(sdt->hdr.state));
1970		driver_dump->hdr.status = IPR_DUMP_STATUS_FAILED;
1971		ioa_cfg->sdt_state = DUMP_OBTAINED;
1972		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1973		return;
1974	}
1975
1976	num_entries = be32_to_cpu(sdt->hdr.num_entries_used);
1977
1978	if (num_entries > IPR_NUM_SDT_ENTRIES)
1979		num_entries = IPR_NUM_SDT_ENTRIES;
1980
1981	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
1982
1983	for (i = 0; i < num_entries; i++) {
1984		if (ioa_dump->hdr.len > IPR_MAX_IOA_DUMP_SIZE) {
1985			driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS;
1986			break;
1987		}
1988
1989		if (sdt->entry[i].flags & IPR_SDT_VALID_ENTRY) {
1990			sdt_word = be32_to_cpu(sdt->entry[i].bar_str_offset);
1991			start_off = sdt_word & IPR_FMT2_MBX_ADDR_MASK;
1992			end_off = be32_to_cpu(sdt->entry[i].end_offset);
1993
1994			if (ipr_sdt_is_fmt2(sdt_word) && sdt_word) {
1995				bytes_to_copy = end_off - start_off;
1996				if (bytes_to_copy > IPR_MAX_IOA_DUMP_SIZE) {
1997					sdt->entry[i].flags &= ~IPR_SDT_VALID_ENTRY;
1998					continue;
1999				}
2000
2001				/* Copy data from adapter to driver buffers */
2002				bytes_copied = ipr_sdt_copy(ioa_cfg, sdt_word,
2003							    bytes_to_copy);
2004
2005				ioa_dump->hdr.len += bytes_copied;
2006
2007				if (bytes_copied != bytes_to_copy) {
2008					driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS;
2009					break;
2010				}
2011			}
2012		}
2013	}
2014
2015	dev_err(&ioa_cfg->pdev->dev, "Dump of IOA completed.\n");
2016
2017	/* Update dump_header */
2018	driver_dump->hdr.len += ioa_dump->hdr.len;
2019	wmb();
2020	ioa_cfg->sdt_state = DUMP_OBTAINED;
2021	LEAVE;
2022}
2023
2024#else
2025#define ipr_get_ioa_dump(ioa_cfg, dump) do { } while(0)
2026#endif
2027
2028/**
2029 * ipr_release_dump - Free adapter dump memory
2030 * @kref:	kref struct
2031 *
2032 * Return value:
2033 *	nothing
2034 **/
2035static void ipr_release_dump(struct kref *kref)
2036{
2037	struct ipr_dump *dump = container_of(kref,struct ipr_dump,kref);
2038	struct ipr_ioa_cfg *ioa_cfg = dump->ioa_cfg;
2039	unsigned long lock_flags = 0;
2040	int i;
2041
2042	ENTER;
2043	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2044	ioa_cfg->dump = NULL;
2045	ioa_cfg->sdt_state = INACTIVE;
2046	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2047
2048	for (i = 0; i < dump->ioa_dump.next_page_index; i++)
2049		free_page((unsigned long) dump->ioa_dump.ioa_data[i]);
2050
2051	kfree(dump);
2052	LEAVE;
2053}
2054
2055/**
2056 * ipr_worker_thread - Worker thread
2057 * @data:		ioa config struct
2058 *
2059 * Called at task level from a work thread. This function takes care
2060 * of adding and removing device from the mid-layer as configuration
2061 * changes are detected by the adapter.
2062 *
2063 * Return value:
2064 * 	nothing
2065 **/
2066static void ipr_worker_thread(void *data)
2067{
2068	unsigned long lock_flags;
2069	struct ipr_resource_entry *res;
2070	struct scsi_device *sdev;
2071	struct ipr_dump *dump;
2072	struct ipr_ioa_cfg *ioa_cfg = data;
2073	u8 bus, target, lun;
2074	int did_work;
2075
2076	ENTER;
2077	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2078
2079	if (ioa_cfg->sdt_state == GET_DUMP) {
2080		dump = ioa_cfg->dump;
2081		if (!dump) {
2082			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2083			return;
2084		}
2085		kref_get(&dump->kref);
2086		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2087		ipr_get_ioa_dump(ioa_cfg, dump);
2088		kref_put(&dump->kref, ipr_release_dump);
2089
2090		spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2091		if (ioa_cfg->sdt_state == DUMP_OBTAINED)
2092			ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
2093		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2094		return;
2095	}
2096
2097restart:
2098	do {
2099		did_work = 0;
2100		if (!ioa_cfg->allow_cmds || !ioa_cfg->allow_ml_add_del) {
2101			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2102			return;
2103		}
2104
2105		list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
2106			if (res->del_from_ml && res->sdev) {
2107				did_work = 1;
2108				sdev = res->sdev;
2109				if (!scsi_device_get(sdev)) {
2110					res->sdev = NULL;
2111					list_move_tail(&res->queue, &ioa_cfg->free_res_q);
2112					spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2113					scsi_remove_device(sdev);
2114					scsi_device_put(sdev);
2115					spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2116				}
2117				break;
2118			}
2119		}
2120	} while(did_work);
2121
2122	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
2123		if (res->add_to_ml) {
2124			bus = res->cfgte.res_addr.bus;
2125			target = res->cfgte.res_addr.target;
2126			lun = res->cfgte.res_addr.lun;
2127			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2128			scsi_add_device(ioa_cfg->host, bus, target, lun);
2129			spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2130			goto restart;
2131		}
2132	}
2133
2134	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2135	kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE, NULL);
2136	LEAVE;
2137}
2138
2139#ifdef CONFIG_SCSI_IPR_TRACE
2140/**
2141 * ipr_read_trace - Dump the adapter trace
2142 * @kobj:		kobject struct
2143 * @buf:		buffer
2144 * @off:		offset
2145 * @count:		buffer size
2146 *
2147 * Return value:
2148 *	number of bytes printed to buffer
2149 **/
2150static ssize_t ipr_read_trace(struct kobject *kobj, char *buf,
2151			      loff_t off, size_t count)
2152{
2153	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
2154	struct Scsi_Host *shost = class_to_shost(cdev);
2155	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2156	unsigned long lock_flags = 0;
2157	int size = IPR_TRACE_SIZE;
2158	char *src = (char *)ioa_cfg->trace;
2159
2160	if (off > size)
2161		return 0;
2162	if (off + count > size) {
2163		size -= off;
2164		count = size;
2165	}
2166
2167	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2168	memcpy(buf, &src[off], count);
2169	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2170	return count;
2171}
2172
2173static struct bin_attribute ipr_trace_attr = {
2174	.attr =	{
2175		.name = "trace",
2176		.mode = S_IRUGO,
2177	},
2178	.size = 0,
2179	.read = ipr_read_trace,
2180};
2181#endif
2182
2183static const struct {
2184	enum ipr_cache_state state;
2185	char *name;
2186} cache_state [] = {
2187	{ CACHE_NONE, "none" },
2188	{ CACHE_DISABLED, "disabled" },
2189	{ CACHE_ENABLED, "enabled" }
2190};
2191
2192/**
2193 * ipr_show_write_caching - Show the write caching attribute
2194 * @class_dev:	class device struct
2195 * @buf:		buffer
2196 *
2197 * Return value:
2198 *	number of bytes printed to buffer
2199 **/
2200static ssize_t ipr_show_write_caching(struct class_device *class_dev, char *buf)
2201{
2202	struct Scsi_Host *shost = class_to_shost(class_dev);
2203	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2204	unsigned long lock_flags = 0;
2205	int i, len = 0;
2206
2207	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2208	for (i = 0; i < ARRAY_SIZE(cache_state); i++) {
2209		if (cache_state[i].state == ioa_cfg->cache_state) {
2210			len = snprintf(buf, PAGE_SIZE, "%s\n", cache_state[i].name);
2211			break;
2212		}
2213	}
2214	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2215	return len;
2216}
2217
2218
2219/**
2220 * ipr_store_write_caching - Enable/disable adapter write cache
2221 * @class_dev:	class_device struct
2222 * @buf:		buffer
2223 * @count:		buffer size
2224 *
2225 * This function will enable/disable adapter write cache.
2226 *
2227 * Return value:
2228 * 	count on success / other on failure
2229 **/
2230static ssize_t ipr_store_write_caching(struct class_device *class_dev,
2231					const char *buf, size_t count)
2232{
2233	struct Scsi_Host *shost = class_to_shost(class_dev);
2234	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2235	unsigned long lock_flags = 0;
2236	enum ipr_cache_state new_state = CACHE_INVALID;
2237	int i;
2238
2239	if (!capable(CAP_SYS_ADMIN))
2240		return -EACCES;
2241	if (ioa_cfg->cache_state == CACHE_NONE)
2242		return -EINVAL;
2243
2244	for (i = 0; i < ARRAY_SIZE(cache_state); i++) {
2245		if (!strncmp(cache_state[i].name, buf, strlen(cache_state[i].name))) {
2246			new_state = cache_state[i].state;
2247			break;
2248		}
2249	}
2250
2251	if (new_state != CACHE_DISABLED && new_state != CACHE_ENABLED)
2252		return -EINVAL;
2253
2254	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2255	if (ioa_cfg->cache_state == new_state) {
2256		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2257		return count;
2258	}
2259
2260	ioa_cfg->cache_state = new_state;
2261	dev_info(&ioa_cfg->pdev->dev, "%s adapter write cache.\n",
2262		 new_state == CACHE_ENABLED ? "Enabling" : "Disabling");
2263	if (!ioa_cfg->in_reset_reload)
2264		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
2265	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2266	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2267
2268	return count;
2269}
2270
2271static struct class_device_attribute ipr_ioa_cache_attr = {
2272	.attr = {
2273		.name =		"write_cache",
2274		.mode =		S_IRUGO | S_IWUSR,
2275	},
2276	.show = ipr_show_write_caching,
2277	.store = ipr_store_write_caching
2278};
2279
2280/**
2281 * ipr_show_fw_version - Show the firmware version
2282 * @class_dev:	class device struct
2283 * @buf:		buffer
2284 *
2285 * Return value:
2286 *	number of bytes printed to buffer
2287 **/
2288static ssize_t ipr_show_fw_version(struct class_device *class_dev, char *buf)
2289{
2290	struct Scsi_Host *shost = class_to_shost(class_dev);
2291	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2292	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
2293	unsigned long lock_flags = 0;
2294	int len;
2295
2296	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2297	len = snprintf(buf, PAGE_SIZE, "%02X%02X%02X%02X\n",
2298		       ucode_vpd->major_release, ucode_vpd->card_type,
2299		       ucode_vpd->minor_release[0],
2300		       ucode_vpd->minor_release[1]);
2301	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2302	return len;
2303}
2304
2305static struct class_device_attribute ipr_fw_version_attr = {
2306	.attr = {
2307		.name =		"fw_version",
2308		.mode =		S_IRUGO,
2309	},
2310	.show = ipr_show_fw_version,
2311};
2312
2313/**
2314 * ipr_show_log_level - Show the adapter's error logging level
2315 * @class_dev:	class device struct
2316 * @buf:		buffer
2317 *
2318 * Return value:
2319 * 	number of bytes printed to buffer
2320 **/
2321static ssize_t ipr_show_log_level(struct class_device *class_dev, char *buf)
2322{
2323	struct Scsi_Host *shost = class_to_shost(class_dev);
2324	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2325	unsigned long lock_flags = 0;
2326	int len;
2327
2328	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2329	len = snprintf(buf, PAGE_SIZE, "%d\n", ioa_cfg->log_level);
2330	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2331	return len;
2332}
2333
2334/**
2335 * ipr_store_log_level - Change the adapter's error logging level
2336 * @class_dev:	class device struct
2337 * @buf:		buffer
2338 *
2339 * Return value:
2340 * 	number of bytes printed to buffer
2341 **/
2342static ssize_t ipr_store_log_level(struct class_device *class_dev,
2343				   const char *buf, size_t count)
2344{
2345	struct Scsi_Host *shost = class_to_shost(class_dev);
2346	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2347	unsigned long lock_flags = 0;
2348
2349	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2350	ioa_cfg->log_level = simple_strtoul(buf, NULL, 10);
2351	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2352	return strlen(buf);
2353}
2354
2355static struct class_device_attribute ipr_log_level_attr = {
2356	.attr = {
2357		.name =		"log_level",
2358		.mode =		S_IRUGO | S_IWUSR,
2359	},
2360	.show = ipr_show_log_level,
2361	.store = ipr_store_log_level
2362};
2363
2364/**
2365 * ipr_store_diagnostics - IOA Diagnostics interface
2366 * @class_dev:	class_device struct
2367 * @buf:		buffer
2368 * @count:		buffer size
2369 *
2370 * This function will reset the adapter and wait a reasonable
2371 * amount of time for any errors that the adapter might log.
2372 *
2373 * Return value:
2374 * 	count on success / other on failure
2375 **/
2376static ssize_t ipr_store_diagnostics(struct class_device *class_dev,
2377				     const char *buf, size_t count)
2378{
2379	struct Scsi_Host *shost = class_to_shost(class_dev);
2380	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2381	unsigned long lock_flags = 0;
2382	int rc = count;
2383
2384	if (!capable(CAP_SYS_ADMIN))
2385		return -EACCES;
2386
2387	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2388	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2389	ioa_cfg->errors_logged = 0;
2390	ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
2391
2392	if (ioa_cfg->in_reset_reload) {
2393		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2394		wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2395
2396		/* Wait for a second for any errors to be logged */
2397		msleep(1000);
2398	} else {
2399		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2400		return -EIO;
2401	}
2402
2403	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2404	if (ioa_cfg->in_reset_reload || ioa_cfg->errors_logged)
2405		rc = -EIO;
2406	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2407
2408	return rc;
2409}
2410
2411static struct class_device_attribute ipr_diagnostics_attr = {
2412	.attr = {
2413		.name =		"run_diagnostics",
2414		.mode =		S_IWUSR,
2415	},
2416	.store = ipr_store_diagnostics
2417};
2418
2419/**
2420 * ipr_show_adapter_state - Show the adapter's state
2421 * @class_dev:	class device struct
2422 * @buf:		buffer
2423 *
2424 * Return value:
2425 * 	number of bytes printed to buffer
2426 **/
2427static ssize_t ipr_show_adapter_state(struct class_device *class_dev, char *buf)
2428{
2429	struct Scsi_Host *shost = class_to_shost(class_dev);
2430	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2431	unsigned long lock_flags = 0;
2432	int len;
2433
2434	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2435	if (ioa_cfg->ioa_is_dead)
2436		len = snprintf(buf, PAGE_SIZE, "offline\n");
2437	else
2438		len = snprintf(buf, PAGE_SIZE, "online\n");
2439	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2440	return len;
2441}
2442
2443/**
2444 * ipr_store_adapter_state - Change adapter state
2445 * @class_dev:	class_device struct
2446 * @buf:		buffer
2447 * @count:		buffer size
2448 *
2449 * This function will change the adapter's state.
2450 *
2451 * Return value:
2452 * 	count on success / other on failure
2453 **/
2454static ssize_t ipr_store_adapter_state(struct class_device *class_dev,
2455				       const char *buf, size_t count)
2456{
2457	struct Scsi_Host *shost = class_to_shost(class_dev);
2458	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2459	unsigned long lock_flags;
2460	int result = count;
2461
2462	if (!capable(CAP_SYS_ADMIN))
2463		return -EACCES;
2464
2465	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2466	if (ioa_cfg->ioa_is_dead && !strncmp(buf, "online", 6)) {
2467		ioa_cfg->ioa_is_dead = 0;
2468		ioa_cfg->reset_retries = 0;
2469		ioa_cfg->in_ioa_bringdown = 0;
2470		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
2471	}
2472	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2473	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2474
2475	return result;
2476}
2477
2478static struct class_device_attribute ipr_ioa_state_attr = {
2479	.attr = {
2480		.name =		"state",
2481		.mode =		S_IRUGO | S_IWUSR,
2482	},
2483	.show = ipr_show_adapter_state,
2484	.store = ipr_store_adapter_state
2485};
2486
2487/**
2488 * ipr_store_reset_adapter - Reset the adapter
2489 * @class_dev:	class_device struct
2490 * @buf:		buffer
2491 * @count:		buffer size
2492 *
2493 * This function will reset the adapter.
2494 *
2495 * Return value:
2496 * 	count on success / other on failure
2497 **/
2498static ssize_t ipr_store_reset_adapter(struct class_device *class_dev,
2499				       const char *buf, size_t count)
2500{
2501	struct Scsi_Host *shost = class_to_shost(class_dev);
2502	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2503	unsigned long lock_flags;
2504	int result = count;
2505
2506	if (!capable(CAP_SYS_ADMIN))
2507		return -EACCES;
2508
2509	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2510	if (!ioa_cfg->in_reset_reload)
2511		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
2512	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2513	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2514
2515	return result;
2516}
2517
2518static struct class_device_attribute ipr_ioa_reset_attr = {
2519	.attr = {
2520		.name =		"reset_host",
2521		.mode =		S_IWUSR,
2522	},
2523	.store = ipr_store_reset_adapter
2524};
2525
2526/**
2527 * ipr_alloc_ucode_buffer - Allocates a microcode download buffer
2528 * @buf_len:		buffer length
2529 *
2530 * Allocates a DMA'able buffer in chunks and assembles a scatter/gather
2531 * list to use for microcode download
2532 *
2533 * Return value:
2534 * 	pointer to sglist / NULL on failure
2535 **/
2536static struct ipr_sglist *ipr_alloc_ucode_buffer(int buf_len)
2537{
2538	int sg_size, order, bsize_elem, num_elem, i, j;
2539	struct ipr_sglist *sglist;
2540	struct scatterlist *scatterlist;
2541	struct page *page;
2542
2543	/* Get the minimum size per scatter/gather element */
2544	sg_size = buf_len / (IPR_MAX_SGLIST - 1);
2545
2546	/* Get the actual size per element */
2547	order = get_order(sg_size);
2548
2549	/* Determine the actual number of bytes per element */
2550	bsize_elem = PAGE_SIZE * (1 << order);
2551
2552	/* Determine the actual number of sg entries needed */
2553	if (buf_len % bsize_elem)
2554		num_elem = (buf_len / bsize_elem) + 1;
2555	else
2556		num_elem = buf_len / bsize_elem;
2557
2558	/* Allocate a scatter/gather list for the DMA */
2559	sglist = kzalloc(sizeof(struct ipr_sglist) +
2560			 (sizeof(struct scatterlist) * (num_elem - 1)),
2561			 GFP_KERNEL);
2562
2563	if (sglist == NULL) {
2564		ipr_trace;
2565		return NULL;
2566	}
2567
2568	scatterlist = sglist->scatterlist;
2569
2570	sglist->order = order;
2571	sglist->num_sg = num_elem;
2572
2573	/* Allocate a bunch of sg elements */
2574	for (i = 0; i < num_elem; i++) {
2575		page = alloc_pages(GFP_KERNEL, order);
2576		if (!page) {
2577			ipr_trace;
2578
2579			/* Free up what we already allocated */
2580			for (j = i - 1; j >= 0; j--)
2581				__free_pages(scatterlist[j].page, order);
2582			kfree(sglist);
2583			return NULL;
2584		}
2585
2586		scatterlist[i].page = page;
2587	}
2588
2589	return sglist;
2590}
2591
2592/**
2593 * ipr_free_ucode_buffer - Frees a microcode download buffer
2594 * @p_dnld:		scatter/gather list pointer
2595 *
2596 * Free a DMA'able ucode download buffer previously allocated with
2597 * ipr_alloc_ucode_buffer
2598 *
2599 * Return value:
2600 * 	nothing
2601 **/
2602static void ipr_free_ucode_buffer(struct ipr_sglist *sglist)
2603{
2604	int i;
2605
2606	for (i = 0; i < sglist->num_sg; i++)
2607		__free_pages(sglist->scatterlist[i].page, sglist->order);
2608
2609	kfree(sglist);
2610}
2611
2612/**
2613 * ipr_copy_ucode_buffer - Copy user buffer to kernel buffer
2614 * @sglist:		scatter/gather list pointer
2615 * @buffer:		buffer pointer
2616 * @len:		buffer length
2617 *
2618 * Copy a microcode image from a user buffer into a buffer allocated by
2619 * ipr_alloc_ucode_buffer
2620 *
2621 * Return value:
2622 * 	0 on success / other on failure
2623 **/
2624static int ipr_copy_ucode_buffer(struct ipr_sglist *sglist,
2625				 u8 *buffer, u32 len)
2626{
2627	int bsize_elem, i, result = 0;
2628	struct scatterlist *scatterlist;
2629	void *kaddr;
2630
2631	/* Determine the actual number of bytes per element */
2632	bsize_elem = PAGE_SIZE * (1 << sglist->order);
2633
2634	scatterlist = sglist->scatterlist;
2635
2636	for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) {
2637		kaddr = kmap(scatterlist[i].page);
2638		memcpy(kaddr, buffer, bsize_elem);
2639		kunmap(scatterlist[i].page);
2640
2641		scatterlist[i].length = bsize_elem;
2642
2643		if (result != 0) {
2644			ipr_trace;
2645			return result;
2646		}
2647	}
2648
2649	if (len % bsize_elem) {
2650		kaddr = kmap(scatterlist[i].page);
2651		memcpy(kaddr, buffer, len % bsize_elem);
2652		kunmap(scatterlist[i].page);
2653
2654		scatterlist[i].length = len % bsize_elem;
2655	}
2656
2657	sglist->buffer_len = len;
2658	return result;
2659}
2660
2661/**
2662 * ipr_build_ucode_ioadl - Build a microcode download IOADL
2663 * @ipr_cmd:	ipr command struct
2664 * @sglist:		scatter/gather list
2665 *
2666 * Builds a microcode download IOA data list (IOADL).
2667 *
2668 **/
2669static void ipr_build_ucode_ioadl(struct ipr_cmnd *ipr_cmd,
2670				  struct ipr_sglist *sglist)
2671{
2672	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
2673	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
2674	struct scatterlist *scatterlist = sglist->scatterlist;
2675	int i;
2676
2677	ipr_cmd->dma_use_sg = sglist->num_dma_sg;
2678	ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
2679	ioarcb->write_data_transfer_length = cpu_to_be32(sglist->buffer_len);
2680	ioarcb->write_ioadl_len =
2681		cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
2682
2683	for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
2684		ioadl[i].flags_and_data_len =
2685			cpu_to_be32(IPR_IOADL_FLAGS_WRITE | sg_dma_len(&scatterlist[i]));
2686		ioadl[i].address =
2687			cpu_to_be32(sg_dma_address(&scatterlist[i]));
2688	}
2689
2690	ioadl[i-1].flags_and_data_len |=
2691		cpu_to_be32(IPR_IOADL_FLAGS_LAST);
2692}
2693
2694/**
2695 * ipr_update_ioa_ucode - Update IOA's microcode
2696 * @ioa_cfg:	ioa config struct
2697 * @sglist:		scatter/gather list
2698 *
2699 * Initiate an adapter reset to update the IOA's microcode
2700 *
2701 * Return value:
2702 * 	0 on success / -EIO on failure
2703 **/
2704static int ipr_update_ioa_ucode(struct ipr_ioa_cfg *ioa_cfg,
2705				struct ipr_sglist *sglist)
2706{
2707	unsigned long lock_flags;
2708
2709	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2710
2711	if (ioa_cfg->ucode_sglist) {
2712		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2713		dev_err(&ioa_cfg->pdev->dev,
2714			"Microcode download already in progress\n");
2715		return -EIO;
2716	}
2717
2718	sglist->num_dma_sg = pci_map_sg(ioa_cfg->pdev, sglist->scatterlist,
2719					sglist->num_sg, DMA_TO_DEVICE);
2720
2721	if (!sglist->num_dma_sg) {
2722		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2723		dev_err(&ioa_cfg->pdev->dev,
2724			"Failed to map microcode download buffer!\n");
2725		return -EIO;
2726	}
2727
2728	ioa_cfg->ucode_sglist = sglist;
2729	ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
2730	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2731	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
2732
2733	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2734	ioa_cfg->ucode_sglist = NULL;
2735	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2736	return 0;
2737}
2738
2739/**
2740 * ipr_store_update_fw - Update the firmware on the adapter
2741 * @class_dev:	class_device struct
2742 * @buf:		buffer
2743 * @count:		buffer size
2744 *
2745 * This function will update the firmware on the adapter.
2746 *
2747 * Return value:
2748 * 	count on success / other on failure
2749 **/
2750static ssize_t ipr_store_update_fw(struct class_device *class_dev,
2751				       const char *buf, size_t count)
2752{
2753	struct Scsi_Host *shost = class_to_shost(class_dev);
2754	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2755	struct ipr_ucode_image_header *image_hdr;
2756	const struct firmware *fw_entry;
2757	struct ipr_sglist *sglist;
2758	char fname[100];
2759	char *src;
2760	int len, result, dnld_size;
2761
2762	if (!capable(CAP_SYS_ADMIN))
2763		return -EACCES;
2764
2765	len = snprintf(fname, 99, "%s", buf);
2766	fname[len-1] = '\0';
2767
2768	if(request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
2769		dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
2770		return -EIO;
2771	}
2772
2773	image_hdr = (struct ipr_ucode_image_header *)fw_entry->data;
2774
2775	if (be32_to_cpu(image_hdr->header_length) > fw_entry->size ||
2776	    (ioa_cfg->vpd_cbs->page3_data.card_type &&
2777	     ioa_cfg->vpd_cbs->page3_data.card_type != image_hdr->card_type)) {
2778		dev_err(&ioa_cfg->pdev->dev, "Invalid microcode buffer\n");
2779		release_firmware(fw_entry);
2780		return -EINVAL;
2781	}
2782
2783	src = (u8 *)image_hdr + be32_to_cpu(image_hdr->header_length);
2784	dnld_size = fw_entry->size - be32_to_cpu(image_hdr->header_length);
2785	sglist = ipr_alloc_ucode_buffer(dnld_size);
2786
2787	if (!sglist) {
2788		dev_err(&ioa_cfg->pdev->dev, "Microcode buffer allocation failed\n");
2789		release_firmware(fw_entry);
2790		return -ENOMEM;
2791	}
2792
2793	result = ipr_copy_ucode_buffer(sglist, src, dnld_size);
2794
2795	if (result) {
2796		dev_err(&ioa_cfg->pdev->dev,
2797			"Microcode buffer copy to DMA buffer failed\n");
2798		goto out;
2799	}
2800
2801	result = ipr_update_ioa_ucode(ioa_cfg, sglist);
2802
2803	if (!result)
2804		result = count;
2805out:
2806	ipr_free_ucode_buffer(sglist);
2807	release_firmware(fw_entry);
2808	return result;
2809}
2810
2811static struct class_device_attribute ipr_update_fw_attr = {
2812	.attr = {
2813		.name =		"update_fw",
2814		.mode =		S_IWUSR,
2815	},
2816	.store = ipr_store_update_fw
2817};
2818
2819static struct class_device_attribute *ipr_ioa_attrs[] = {
2820	&ipr_fw_version_attr,
2821	&ipr_log_level_attr,
2822	&ipr_diagnostics_attr,
2823	&ipr_ioa_state_attr,
2824	&ipr_ioa_reset_attr,
2825	&ipr_update_fw_attr,
2826	&ipr_ioa_cache_attr,
2827	NULL,
2828};
2829
2830#ifdef CONFIG_SCSI_IPR_DUMP
2831/**
2832 * ipr_read_dump - Dump the adapter
2833 * @kobj:		kobject struct
2834 * @buf:		buffer
2835 * @off:		offset
2836 * @count:		buffer size
2837 *
2838 * Return value:
2839 *	number of bytes printed to buffer
2840 **/
2841static ssize_t ipr_read_dump(struct kobject *kobj, char *buf,
2842			      loff_t off, size_t count)
2843{
2844	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
2845	struct Scsi_Host *shost = class_to_shost(cdev);
2846	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
2847	struct ipr_dump *dump;
2848	unsigned long lock_flags = 0;
2849	char *src;
2850	int len;
2851	size_t rc = count;
2852
2853	if (!capable(CAP_SYS_ADMIN))
2854		return -EACCES;
2855
2856	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2857	dump = ioa_cfg->dump;
2858
2859	if (ioa_cfg->sdt_state != DUMP_OBTAINED || !dump) {
2860		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2861		return 0;
2862	}
2863	kref_get(&dump->kref);
2864	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2865
2866	if (off > dump->driver_dump.hdr.len) {
2867		kref_put(&dump->kref, ipr_release_dump);
2868		return 0;
2869	}
2870
2871	if (off + count > dump->driver_dump.hdr.len) {
2872		count = dump->driver_dump.hdr.len - off;
2873		rc = count;
2874	}
2875
2876	if (count && off < sizeof(dump->driver_dump)) {
2877		if (off + count > sizeof(dump->driver_dump))
2878			len = sizeof(dump->driver_dump) - off;
2879		else
2880			len = count;
2881		src = (u8 *)&dump->driver_dump + off;
2882		memcpy(buf, src, len);
2883		buf += len;
2884		off += len;
2885		count -= len;
2886	}
2887
2888	off -= sizeof(dump->driver_dump);
2889
2890	if (count && off < offsetof(struct ipr_ioa_dump, ioa_data)) {
2891		if (off + count > offsetof(struct ipr_ioa_dump, ioa_data))
2892			len = offsetof(struct ipr_ioa_dump, ioa_data) - off;
2893		else
2894			len = count;
2895		src = (u8 *)&dump->ioa_dump + off;
2896		memcpy(buf, src, len);
2897		buf += len;
2898		off += len;
2899		count -= len;
2900	}
2901
2902	off -= offsetof(struct ipr_ioa_dump, ioa_data);
2903
2904	while (count) {
2905		if ((off & PAGE_MASK) != ((off + count) & PAGE_MASK))
2906			len = PAGE_ALIGN(off) - off;
2907		else
2908			len = count;
2909		src = (u8 *)dump->ioa_dump.ioa_data[(off & PAGE_MASK) >> PAGE_SHIFT];
2910		src += off & ~PAGE_MASK;
2911		memcpy(buf, src, len);
2912		buf += len;
2913		off += len;
2914		count -= len;
2915	}
2916
2917	kref_put(&dump->kref, ipr_release_dump);
2918	return rc;
2919}
2920
2921/**
2922 * ipr_alloc_dump - Prepare for adapter dump
2923 * @ioa_cfg:	ioa config struct
2924 *
2925 * Return value:
2926 *	0 on success / other on failure
2927 **/
2928static int ipr_alloc_dump(struct ipr_ioa_cfg *ioa_cfg)
2929{
2930	struct ipr_dump *dump;
2931	unsigned long lock_flags = 0;
2932
2933	ENTER;
2934	dump = kzalloc(sizeof(struct ipr_dump), GFP_KERNEL);
2935
2936	if (!dump) {
2937		ipr_err("Dump memory allocation failed\n");
2938		return -ENOMEM;
2939	}
2940
2941	kref_init(&dump->kref);
2942	dump->ioa_cfg = ioa_cfg;
2943
2944	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2945
2946	if (INACTIVE != ioa_cfg->sdt_state) {
2947		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2948		kfree(dump);
2949		return 0;
2950	}
2951
2952	ioa_cfg->dump = dump;
2953	ioa_cfg->sdt_state = WAIT_FOR_DUMP;
2954	if (ioa_cfg->ioa_is_dead && !ioa_cfg->dump_taken) {
2955		ioa_cfg->dump_taken = 1;
2956		schedule_work(&ioa_cfg->work_q);
2957	}
2958	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2959
2960	LEAVE;
2961	return 0;
2962}
2963
2964/**
2965 * ipr_free_dump - Free adapter dump memory
2966 * @ioa_cfg:	ioa config struct
2967 *
2968 * Return value:
2969 *	0 on success / other on failure
2970 **/
2971static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg)
2972{
2973	struct ipr_dump *dump;
2974	unsigned long lock_flags = 0;
2975
2976	ENTER;
2977
2978	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
2979	dump = ioa_cfg->dump;
2980	if (!dump) {
2981		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2982		return 0;
2983	}
2984
2985	ioa_cfg->dump = NULL;
2986	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2987
2988	kref_put(&dump->kref, ipr_release_dump);
2989
2990	LEAVE;
2991	return 0;
2992}
2993
2994/**
2995 * ipr_write_dump - Setup dump state of adapter
2996 * @kobj:		kobject struct
2997 * @buf:		buffer
2998 * @off:		offset
2999 * @count:		buffer size
3000 *
3001 * Return value:
3002 *	number of bytes printed to buffer
3003 **/
3004static ssize_t ipr_write_dump(struct kobject *kobj, char *buf,
3005			      loff_t off, size_t count)
3006{
3007	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
3008	struct Scsi_Host *shost = class_to_shost(cdev);
3009	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
3010	int rc;
3011
3012	if (!capable(CAP_SYS_ADMIN))
3013		return -EACCES;
3014
3015	if (buf[0] == '1')
3016		rc = ipr_alloc_dump(ioa_cfg);
3017	else if (buf[0] == '0')
3018		rc = ipr_free_dump(ioa_cfg);
3019	else
3020		return -EINVAL;
3021
3022	if (rc)
3023		return rc;
3024	else
3025		return count;
3026}
3027
3028static struct bin_attribute ipr_dump_attr = {
3029	.attr =	{
3030		.name = "dump",
3031		.mode = S_IRUSR | S_IWUSR,
3032	},
3033	.size = 0,
3034	.read = ipr_read_dump,
3035	.write = ipr_write_dump
3036};
3037#else
3038static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg) { return 0; };
3039#endif
3040
3041/**
3042 * ipr_change_queue_depth - Change the device's queue depth
3043 * @sdev:	scsi device struct
3044 * @qdepth:	depth to set
3045 *
3046 * Return value:
3047 * 	actual depth set
3048 **/
3049static int ipr_change_queue_depth(struct scsi_device *sdev, int qdepth)
3050{
3051	scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth);
3052	return sdev->queue_depth;
3053}
3054
3055/**
3056 * ipr_change_queue_type - Change the device's queue type
3057 * @dsev:		scsi device struct
3058 * @tag_type:	type of tags to use
3059 *
3060 * Return value:
3061 * 	actual queue type set
3062 **/
3063static int ipr_change_queue_type(struct scsi_device *sdev, int tag_type)
3064{
3065	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
3066	struct ipr_resource_entry *res;
3067	unsigned long lock_flags = 0;
3068
3069	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3070	res = (struct ipr_resource_entry *)sdev->hostdata;
3071
3072	if (res) {
3073		if (ipr_is_gscsi(res) && sdev->tagged_supported) {
3074			/*
3075			 * We don't bother quiescing the device here since the
3076			 * adapter firmware does it for us.
3077			 */
3078			scsi_set_tag_type(sdev, tag_type);
3079
3080			if (tag_type)
3081				scsi_activate_tcq(sdev, sdev->queue_depth);
3082			else
3083				scsi_deactivate_tcq(sdev, sdev->queue_depth);
3084		} else
3085			tag_type = 0;
3086	} else
3087		tag_type = 0;
3088
3089	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3090	return tag_type;
3091}
3092
3093/**
3094 * ipr_show_adapter_handle - Show the adapter's resource handle for this device
3095 * @dev:	device struct
3096 * @buf:	buffer
3097 *
3098 * Return value:
3099 * 	number of bytes printed to buffer
3100 **/
3101static ssize_t ipr_show_adapter_handle(struct device *dev, struct device_attribute *attr, char *buf)
3102{
3103	struct scsi_device *sdev = to_scsi_device(dev);
3104	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
3105	struct ipr_resource_entry *res;
3106	unsigned long lock_flags = 0;
3107	ssize_t len = -ENXIO;
3108
3109	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3110	res = (struct ipr_resource_entry *)sdev->hostdata;
3111	if (res)
3112		len = snprintf(buf, PAGE_SIZE, "%08X\n", res->cfgte.res_handle);
3113	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3114	return len;
3115}
3116
3117static struct device_attribute ipr_adapter_handle_attr = {
3118	.attr = {
3119		.name = 	"adapter_handle",
3120		.mode =		S_IRUSR,
3121	},
3122	.show = ipr_show_adapter_handle
3123};
3124
3125static struct device_attribute *ipr_dev_attrs[] = {
3126	&ipr_adapter_handle_attr,
3127	NULL,
3128};
3129
3130/**
3131 * ipr_biosparam - Return the HSC mapping
3132 * @sdev:			scsi device struct
3133 * @block_device:	block device pointer
3134 * @capacity:		capacity of the device
3135 * @parm:			Array containing returned HSC values.
3136 *
3137 * This function generates the HSC parms that fdisk uses.
3138 * We want to make sure we return something that places partitions
3139 * on 4k boundaries for best performance with the IOA.
3140 *
3141 * Return value:
3142 * 	0 on success
3143 **/
3144static int ipr_biosparam(struct scsi_device *sdev,
3145			 struct block_device *block_device,
3146			 sector_t capacity, int *parm)
3147{
3148	int heads, sectors;
3149	sector_t cylinders;
3150
3151	heads = 128;
3152	sectors = 32;
3153
3154	cylinders = capacity;
3155	sector_div(cylinders, (128 * 32));
3156
3157	/* return result */
3158	parm[0] = heads;
3159	parm[1] = sectors;
3160	parm[2] = cylinders;
3161
3162	return 0;
3163}
3164
3165/**
3166 * ipr_slave_destroy - Unconfigure a SCSI device
3167 * @sdev:	scsi device struct
3168 *
3169 * Return value:
3170 * 	nothing
3171 **/
3172static void ipr_slave_destroy(struct scsi_device *sdev)
3173{
3174	struct ipr_resource_entry *res;
3175	struct ipr_ioa_cfg *ioa_cfg;
3176	unsigned long lock_flags = 0;
3177
3178	ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
3179
3180	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3181	res = (struct ipr_resource_entry *) sdev->hostdata;
3182	if (res) {
3183		sdev->hostdata = NULL;
3184		res->sdev = NULL;
3185	}
3186	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3187}
3188
3189/**
3190 * ipr_slave_configure - Configure a SCSI device
3191 * @sdev:	scsi device struct
3192 *
3193 * This function configures the specified scsi device.
3194 *
3195 * Return value:
3196 * 	0 on success
3197 **/
3198static int ipr_slave_configure(struct scsi_device *sdev)
3199{
3200	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
3201	struct ipr_resource_entry *res;
3202	unsigned long lock_flags = 0;
3203
3204	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3205	res = sdev->hostdata;
3206	if (res) {
3207		if (ipr_is_af_dasd_device(res))
3208			sdev->type = TYPE_RAID;
3209		if (ipr_is_af_dasd_device(res) || ipr_is_ioa_resource(res)) {
3210			sdev->scsi_level = 4;
3211			sdev->no_uld_attach = 1;
3212		}
3213		if (ipr_is_vset_device(res)) {
3214			sdev->timeout = IPR_VSET_RW_TIMEOUT;
3215			blk_queue_max_sectors(sdev->request_queue, IPR_VSET_MAX_SECTORS);
3216		}
3217		if (IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data))
3218			sdev->allow_restart = 1;
3219		scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
3220	}
3221	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3222	return 0;
3223}
3224
3225/**
3226 * ipr_slave_alloc - Prepare for commands to a device.
3227 * @sdev:	scsi device struct
3228 *
3229 * This function saves a pointer to the resource entry
3230 * in the scsi device struct if the device exists. We
3231 * can then use this pointer in ipr_queuecommand when
3232 * handling new commands.
3233 *
3234 * Return value:
3235 * 	0 on success / -ENXIO if device does not exist
3236 **/
3237static int ipr_slave_alloc(struct scsi_device *sdev)
3238{
3239	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
3240	struct ipr_resource_entry *res;
3241	unsigned long lock_flags;
3242	int rc = -ENXIO;
3243
3244	sdev->hostdata = NULL;
3245
3246	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3247
3248	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
3249		if ((res->cfgte.res_addr.bus == sdev->channel) &&
3250		    (res->cfgte.res_addr.target == sdev->id) &&
3251		    (res->cfgte.res_addr.lun == sdev->lun)) {
3252			res->sdev = sdev;
3253			res->add_to_ml = 0;
3254			res->in_erp = 0;
3255			sdev->hostdata = res;
3256			if (!ipr_is_naca_model(res))
3257				res->needs_sync_complete = 1;
3258			rc = 0;
3259			break;
3260		}
3261	}
3262
3263	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3264
3265	return rc;
3266}
3267
3268/**
3269 * ipr_eh_host_reset - Reset the host adapter
3270 * @scsi_cmd:	scsi command struct
3271 *
3272 * Return value:
3273 * 	SUCCESS / FAILED
3274 **/
3275static int __ipr_eh_host_reset(struct scsi_cmnd * scsi_cmd)
3276{
3277	struct ipr_ioa_cfg *ioa_cfg;
3278	int rc;
3279
3280	ENTER;
3281	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
3282
3283	dev_err(&ioa_cfg->pdev->dev,
3284		"Adapter being reset as a result of error recovery.\n");
3285
3286	if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
3287		ioa_cfg->sdt_state = GET_DUMP;
3288
3289	rc = ipr_reset_reload(ioa_cfg, IPR_SHUTDOWN_ABBREV);
3290
3291	LEAVE;
3292	return rc;
3293}
3294
3295static int ipr_eh_host_reset(struct scsi_cmnd * cmd)
3296{
3297	int rc;
3298
3299	spin_lock_irq(cmd->device->host->host_lock);
3300	rc = __ipr_eh_host_reset(cmd);
3301	spin_unlock_irq(cmd->device->host->host_lock);
3302
3303	return rc;
3304}
3305
3306/**
3307 * ipr_eh_dev_reset - Reset the device
3308 * @scsi_cmd:	scsi command struct
3309 *
3310 * This function issues a device reset to the affected device.
3311 * A LUN reset will be sent to the device first. If that does
3312 * not work, a target reset will be sent.
3313 *
3314 * Return value:
3315 *	SUCCESS / FAILED
3316 **/
3317static int __ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
3318{
3319	struct ipr_cmnd *ipr_cmd;
3320	struct ipr_ioa_cfg *ioa_cfg;
3321	struct ipr_resource_entry *res;
3322	struct ipr_cmd_pkt *cmd_pkt;
3323	u32 ioasc;
3324
3325	ENTER;
3326	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
3327	res = scsi_cmd->device->hostdata;
3328
3329	if (!res)
3330		return FAILED;
3331
3332	/*
3333	 * If we are currently going through reset/reload, return failed. This will force the
3334	 * mid-layer to call ipr_eh_host_reset, which will then go to sleep and wait for the
3335	 * reset to complete
3336	 */
3337	if (ioa_cfg->in_reset_reload)
3338		return FAILED;
3339	if (ioa_cfg->ioa_is_dead)
3340		return FAILED;
3341
3342	list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
3343		if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) {
3344			if (ipr_cmd->scsi_cmd)
3345				ipr_cmd->done = ipr_scsi_eh_done;
3346		}
3347	}
3348
3349	res->resetting_device = 1;
3350
3351	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
3352
3353	ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle;
3354	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
3355	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
3356	cmd_pkt->cdb[0] = IPR_RESET_DEVICE;
3357
3358	ipr_sdev_err(scsi_cmd->device, "Resetting device\n");
3359	ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);
3360
3361	ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
3362
3363	res->resetting_device = 0;
3364
3365	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
3366
3367	LEAVE;
3368	return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
3369}
3370
3371static int ipr_eh_dev_reset(struct scsi_cmnd * cmd)
3372{
3373	int rc;
3374
3375	spin_lock_irq(cmd->device->host->host_lock);
3376	rc = __ipr_eh_dev_reset(cmd);
3377	spin_unlock_irq(cmd->device->host->host_lock);
3378
3379	return rc;
3380}
3381
3382/**
3383 * ipr_bus_reset_done - Op done function for bus reset.
3384 * @ipr_cmd:	ipr command struct
3385 *
3386 * This function is the op done function for a bus reset
3387 *
3388 * Return value:
3389 * 	none
3390 **/
3391static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd)
3392{
3393	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
3394	struct ipr_resource_entry *res;
3395
3396	ENTER;
3397	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
3398		if (!memcmp(&res->cfgte.res_handle, &ipr_cmd->ioarcb.res_handle,
3399			    sizeof(res->cfgte.res_handle))) {
3400			scsi_report_bus_reset(ioa_cfg->host, res->cfgte.res_addr.bus);
3401			break;
3402		}
3403	}
3404
3405	/*
3406	 * If abort has not completed, indicate the reset has, else call the
3407	 * abort's done function to wake the sleeping eh thread
3408	 */
3409	if (ipr_cmd->sibling->sibling)
3410		ipr_cmd->sibling->sibling = NULL;
3411	else
3412		ipr_cmd->sibling->done(ipr_cmd->sibling);
3413
3414	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
3415	LEAVE;
3416}
3417
3418/**
3419 * ipr_abort_timeout - An abort task has timed out
3420 * @ipr_cmd:	ipr command struct
3421 *
3422 * This function handles when an abort task times out. If this
3423 * happens we issue a bus reset since we have resources tied
3424 * up that must be freed before returning to the midlayer.
3425 *
3426 * Return value:
3427 *	none
3428 **/
3429static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd)
3430{
3431	struct ipr_cmnd *reset_cmd;
3432	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
3433	struct ipr_cmd_pkt *cmd_pkt;
3434	unsigned long lock_flags = 0;
3435
3436	ENTER;
3437	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3438	if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) {
3439		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3440		return;
3441	}
3442
3443	ipr_sdev_err(ipr_cmd->u.sdev, "Abort timed out. Resetting bus\n");
3444	reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
3445	ipr_cmd->sibling = reset_cmd;
3446	reset_cmd->sibling = ipr_cmd;
3447	reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle;
3448	cmd_pkt = &reset_cmd->ioarcb.cmd_pkt;
3449	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
3450	cmd_pkt->cdb[0] = IPR_RESET_DEVICE;
3451	cmd_pkt->cdb[2] = IPR_RESET_TYPE_SELECT | IPR_BUS_RESET;
3452
3453	ipr_do_req(reset_cmd, ipr_bus_reset_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);
3454	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3455	LEAVE;
3456}
3457
3458/**
3459 * ipr_cancel_op - Cancel specified op
3460 * @scsi_cmd:	scsi command struct
3461 *
3462 * This function cancels specified op.
3463 *
3464 * Return value:
3465 *	SUCCESS / FAILED
3466 **/
3467static int ipr_cancel_op(struct scsi_cmnd * scsi_cmd)
3468{
3469	struct ipr_cmnd *ipr_cmd;
3470	struct ipr_ioa_cfg *ioa_cfg;
3471	struct ipr_resource_entry *res;
3472	struct ipr_cmd_pkt *cmd_pkt;
3473	u32 ioasc;
3474	int op_found = 0;
3475
3476	ENTER;
3477	ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata;
3478	res = scsi_cmd->device->hostdata;
3479
3480	/* If we are currently going through reset/reload, return failed.
3481	 * This will force the mid-layer to call ipr_eh_host_reset,
3482	 * which will then go to sleep and wait for the reset to complete
3483	 */
3484	if (ioa_cfg->in_reset_reload || ioa_cfg->ioa_is_dead)
3485		return FAILED;
3486	if (!res || (!ipr_is_gscsi(res) && !ipr_is_vset_device(res)))
3487		return FAILED;
3488
3489	list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
3490		if (ipr_cmd->scsi_cmd == scsi_cmd) {
3491			ipr_cmd->done = ipr_scsi_eh_done;
3492			op_found = 1;
3493			break;
3494		}
3495	}
3496
3497	if (!op_found)
3498		return SUCCESS;
3499
3500	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
3501	ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle;
3502	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
3503	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
3504	cmd_pkt->cdb[0] = IPR_CANCEL_ALL_REQUESTS;
3505	ipr_cmd->u.sdev = scsi_cmd->device;
3506
3507	ipr_sdev_err(scsi_cmd->device, "Aborting command: %02X\n", scsi_cmd->cmnd[0]);
3508	ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_CANCEL_ALL_TIMEOUT);
3509	ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
3510
3511	/*
3512	 * If the abort task timed out and we sent a bus reset, we will get
3513	 * one the following responses to the abort
3514	 */
3515	if (ioasc == IPR_IOASC_BUS_WAS_RESET || ioasc == IPR_IOASC_SYNC_REQUIRED) {
3516		ioasc = 0;
3517		ipr_trace;
3518	}
3519
3520	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
3521	if (!ipr_is_naca_model(res))
3522		res->needs_sync_complete = 1;
3523
3524	LEAVE;
3525	return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
3526}
3527
3528/**
3529 * ipr_eh_abort - Abort a single op
3530 * @scsi_cmd:	scsi command struct
3531 *
3532 * Return value:
3533 * 	SUCCESS / FAILED
3534 **/
3535static int ipr_eh_abort(struct scsi_cmnd * scsi_cmd)
3536{
3537	unsigned long flags;
3538	int rc;
3539
3540	ENTER;
3541
3542	spin_lock_irqsave(scsi_cmd->device->host->host_lock, flags);
3543	rc = ipr_cancel_op(scsi_cmd);
3544	spin_unlock_irqrestore(scsi_cmd->device->host->host_lock, flags);
3545
3546	LEAVE;
3547	return rc;
3548}
3549
3550/**
3551 * ipr_handle_other_interrupt - Handle "other" interrupts
3552 * @ioa_cfg:	ioa config struct
3553 * @int_reg:	interrupt register
3554 *
3555 * Return value:
3556 * 	IRQ_NONE / IRQ_HANDLED
3557 **/
3558static irqreturn_t ipr_handle_other_interrupt(struct ipr_ioa_cfg *ioa_cfg,
3559					      volatile u32 int_reg)
3560{
3561	irqreturn_t rc = IRQ_HANDLED;
3562
3563	if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) {
3564		/* Mask the interrupt */
3565		writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.set_interrupt_mask_reg);
3566
3567		/* Clear the interrupt */
3568		writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.clr_interrupt_reg);
3569		int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
3570
3571		list_del(&ioa_cfg->reset_cmd->queue);
3572		del_timer(&ioa_cfg->reset_cmd->timer);
3573		ipr_reset_ioa_job(ioa_cfg->reset_cmd);
3574	} else {
3575		if (int_reg & IPR_PCII_IOA_UNIT_CHECKED)
3576			ioa_cfg->ioa_unit_checked = 1;
3577		else
3578			dev_err(&ioa_cfg->pdev->dev,
3579				"Permanent IOA failure. 0x%08X\n", int_reg);
3580
3581		if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
3582			ioa_cfg->sdt_state = GET_DUMP;
3583
3584		ipr_mask_and_clear_interrupts(ioa_cfg, ~0);
3585		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
3586	}
3587
3588	return rc;
3589}
3590
3591/**
3592 * ipr_isr - Interrupt service routine
3593 * @irq:	irq number
3594 * @devp:	pointer to ioa config struct
3595 * @regs:	pt_regs struct
3596 *
3597 * Return value:
3598 * 	IRQ_NONE / IRQ_HANDLED
3599 **/
3600static irqreturn_t ipr_isr(int irq, void *devp, struct pt_regs *regs)
3601{
3602	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)devp;
3603	unsigned long lock_flags = 0;
3604	volatile u32 int_reg, int_mask_reg;
3605	u32 ioasc;
3606	u16 cmd_index;
3607	struct ipr_cmnd *ipr_cmd;
3608	irqreturn_t rc = IRQ_NONE;
3609
3610	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3611
3612	/* If interrupts are disabled, ignore the interrupt */
3613	if (!ioa_cfg->allow_interrupts) {
3614		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3615		return IRQ_NONE;
3616	}
3617
3618	int_mask_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
3619	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg;
3620
3621	/* If an interrupt on the adapter did not occur, ignore it */
3622	if (unlikely((int_reg & IPR_PCII_OPER_INTERRUPTS) == 0)) {
3623		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3624		return IRQ_NONE;
3625	}
3626
3627	while (1) {
3628		ipr_cmd = NULL;
3629
3630		while ((be32_to_cpu(*ioa_cfg->hrrq_curr) & IPR_HRRQ_TOGGLE_BIT) ==
3631		       ioa_cfg->toggle_bit) {
3632
3633			cmd_index = (be32_to_cpu(*ioa_cfg->hrrq_curr) &
3634				     IPR_HRRQ_REQ_RESP_HANDLE_MASK) >> IPR_HRRQ_REQ_RESP_HANDLE_SHIFT;
3635
3636			if (unlikely(cmd_index >= IPR_NUM_CMD_BLKS)) {
3637				ioa_cfg->errors_logged++;
3638				dev_err(&ioa_cfg->pdev->dev, "Invalid response handle from IOA\n");
3639
3640				if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
3641					ioa_cfg->sdt_state = GET_DUMP;
3642
3643				ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
3644				spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3645				return IRQ_HANDLED;
3646			}
3647
3648			ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index];
3649
3650			ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
3651
3652			ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc);
3653
3654			list_del(&ipr_cmd->queue);
3655			del_timer(&ipr_cmd->timer);
3656			ipr_cmd->done(ipr_cmd);
3657
3658			rc = IRQ_HANDLED;
3659
3660			if (ioa_cfg->hrrq_curr < ioa_cfg->hrrq_end) {
3661				ioa_cfg->hrrq_curr++;
3662			} else {
3663				ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start;
3664				ioa_cfg->toggle_bit ^= 1u;
3665			}
3666		}
3667
3668		if (ipr_cmd != NULL) {
3669			/* Clear the PCI interrupt */
3670			writel(IPR_PCII_HRRQ_UPDATED, ioa_cfg->regs.clr_interrupt_reg);
3671			int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg;
3672		} else
3673			break;
3674	}
3675
3676	if (unlikely(rc == IRQ_NONE))
3677		rc = ipr_handle_other_interrupt(ioa_cfg, int_reg);
3678
3679	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3680	return rc;
3681}
3682
3683/**
3684 * ipr_build_ioadl - Build a scatter/gather list and map the buffer
3685 * @ioa_cfg:	ioa config struct
3686 * @ipr_cmd:	ipr command struct
3687 *
3688 * Return value:
3689 * 	0 on success / -1 on failure
3690 **/
3691static int ipr_build_ioadl(struct ipr_ioa_cfg *ioa_cfg,
3692			   struct ipr_cmnd *ipr_cmd)
3693{
3694	int i;
3695	struct scatterlist *sglist;
3696	u32 length;
3697	u32 ioadl_flags = 0;
3698	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
3699	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
3700	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
3701
3702	length = scsi_cmd->request_bufflen;
3703
3704	if (length == 0)
3705		return 0;
3706
3707	if (scsi_cmd->use_sg) {
3708		ipr_cmd->dma_use_sg = pci_map_sg(ioa_cfg->pdev,
3709						 scsi_cmd->request_buffer,
3710						 scsi_cmd->use_sg,
3711						 scsi_cmd->sc_data_direction);
3712
3713		if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) {
3714			ioadl_flags = IPR_IOADL_FLAGS_WRITE;
3715			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
3716			ioarcb->write_data_transfer_length = cpu_to_be32(length);
3717			ioarcb->write_ioadl_len =
3718				cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
3719		} else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) {
3720			ioadl_flags = IPR_IOADL_FLAGS_READ;
3721			ioarcb->read_data_transfer_length = cpu_to_be32(length);
3722			ioarcb->read_ioadl_len =
3723				cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
3724		}
3725
3726		sglist = scsi_cmd->request_buffer;
3727
3728		for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
3729			ioadl[i].flags_and_data_len =
3730				cpu_to_be32(ioadl_flags | sg_dma_len(&sglist[i]));
3731			ioadl[i].address =
3732				cpu_to_be32(sg_dma_address(&sglist[i]));
3733		}
3734
3735		if (likely(ipr_cmd->dma_use_sg)) {
3736			ioadl[i-1].flags_and_data_len |=
3737				cpu_to_be32(IPR_IOADL_FLAGS_LAST);
3738			return 0;
3739		} else
3740			dev_err(&ioa_cfg->pdev->dev, "pci_map_sg failed!\n");
3741	} else {
3742		if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) {
3743			ioadl_flags = IPR_IOADL_FLAGS_WRITE;
3744			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
3745			ioarcb->write_data_transfer_length = cpu_to_be32(length);
3746			ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
3747		} else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) {
3748			ioadl_flags = IPR_IOADL_FLAGS_READ;
3749			ioarcb->read_data_transfer_length = cpu_to_be32(length);
3750			ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
3751		}
3752
3753		ipr_cmd->dma_handle = pci_map_single(ioa_cfg->pdev,
3754						     scsi_cmd->request_buffer, length,
3755						     scsi_cmd->sc_data_direction);
3756
3757		if (likely(!pci_dma_mapping_error(ipr_cmd->dma_handle))) {
3758			ipr_cmd->dma_use_sg = 1;
3759			ioadl[0].flags_and_data_len =
3760				cpu_to_be32(ioadl_flags | length | IPR_IOADL_FLAGS_LAST);
3761			ioadl[0].address = cpu_to_be32(ipr_cmd->dma_handle);
3762			return 0;
3763		} else
3764			dev_err(&ioa_cfg->pdev->dev, "pci_map_single failed!\n");
3765	}
3766
3767	return -1;
3768}
3769
3770/**
3771 * ipr_get_task_attributes - Translate SPI Q-Tag to task attributes
3772 * @scsi_cmd:	scsi command struct
3773 *
3774 * Return value:
3775 * 	task attributes
3776 **/
3777static u8 ipr_get_task_attributes(struct scsi_cmnd *scsi_cmd)
3778{
3779	u8 tag[2];
3780	u8 rc = IPR_FLAGS_LO_UNTAGGED_TASK;
3781
3782	if (scsi_populate_tag_msg(scsi_cmd, tag)) {
3783		switch (tag[0]) {
3784		case MSG_SIMPLE_TAG:
3785			rc = IPR_FLAGS_LO_SIMPLE_TASK;
3786			break;
3787		case MSG_HEAD_TAG:
3788			rc = IPR_FLAGS_LO_HEAD_OF_Q_TASK;
3789			break;
3790		case MSG_ORDERED_TAG:
3791			rc = IPR_FLAGS_LO_ORDERED_TASK;
3792			break;
3793		};
3794	}
3795
3796	return rc;
3797}
3798
3799/**
3800 * ipr_erp_done - Process completion of ERP for a device
3801 * @ipr_cmd:		ipr command struct
3802 *
3803 * This function copies the sense buffer into the scsi_cmd
3804 * struct and pushes the scsi_done function.
3805 *
3806 * Return value:
3807 * 	nothing
3808 **/
3809static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
3810{
3811	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
3812	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
3813	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
3814	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
3815
3816	if (IPR_IOASC_SENSE_KEY(ioasc) > 0) {
3817		scsi_cmd->result |= (DID_ERROR << 16);
3818		ipr_sdev_err(scsi_cmd->device,
3819			     "Request Sense failed with IOASC: 0x%08X\n", ioasc);
3820	} else {
3821		memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer,
3822		       SCSI_SENSE_BUFFERSIZE);
3823	}
3824
3825	if (res) {
3826		if (!ipr_is_naca_model(res))
3827			res->needs_sync_complete = 1;
3828		res->in_erp = 0;
3829	}
3830	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
3831	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
3832	scsi_cmd->scsi_done(scsi_cmd);
3833}
3834
3835/**
3836 * ipr_reinit_ipr_cmnd_for_erp - Re-initialize a cmnd block to be used for ERP
3837 * @ipr_cmd:	ipr command struct
3838 *
3839 * Return value:
3840 * 	none
3841 **/
3842static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd)
3843{
3844	struct ipr_ioarcb *ioarcb;
3845	struct ipr_ioasa *ioasa;
3846
3847	ioarcb = &ipr_cmd->ioarcb;
3848	ioasa = &ipr_cmd->ioasa;
3849
3850	memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt));
3851	ioarcb->write_data_transfer_length = 0;
3852	ioarcb->read_data_transfer_length = 0;
3853	ioarcb->write_ioadl_len = 0;
3854	ioarcb->read_ioadl_len = 0;
3855	ioasa->ioasc = 0;
3856	ioasa->residual_data_len = 0;
3857}
3858
3859/**
3860 * ipr_erp_request_sense - Send request sense to a device
3861 * @ipr_cmd:	ipr command struct
3862 *
3863 * This function sends a request sense to a device as a result
3864 * of a check condition.
3865 *
3866 * Return value:
3867 * 	nothing
3868 **/
3869static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd)
3870{
3871	struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
3872	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
3873
3874	if (IPR_IOASC_SENSE_KEY(ioasc) > 0) {
3875		ipr_erp_done(ipr_cmd);
3876		return;
3877	}
3878
3879	ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
3880
3881	cmd_pkt->request_type = IPR_RQTYPE_SCSICDB;
3882	cmd_pkt->cdb[0] = REQUEST_SENSE;
3883	cmd_pkt->cdb[4] = SCSI_SENSE_BUFFERSIZE;
3884	cmd_pkt->flags_hi |= IPR_FLAGS_HI_SYNC_OVERRIDE;
3885	cmd_pkt->flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
3886	cmd_pkt->timeout = cpu_to_be16(IPR_REQUEST_SENSE_TIMEOUT / HZ);
3887
3888	ipr_cmd->ioadl[0].flags_and_data_len =
3889		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | SCSI_SENSE_BUFFERSIZE);
3890	ipr_cmd->ioadl[0].address =
3891		cpu_to_be32(ipr_cmd->sense_buffer_dma);
3892
3893	ipr_cmd->ioarcb.read_ioadl_len =
3894		cpu_to_be32(sizeof(struct ipr_ioadl_desc));
3895	ipr_cmd->ioarcb.read_data_transfer_length =
3896		cpu_to_be32(SCSI_SENSE_BUFFERSIZE);
3897
3898	ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout,
3899		   IPR_REQUEST_SENSE_TIMEOUT * 2);
3900}
3901
3902/**
3903 * ipr_erp_cancel_all - Send cancel all to a device
3904 * @ipr_cmd:	ipr command struct
3905 *
3906 * This function sends a cancel all to a device to clear the
3907 * queue. If we are running TCQ on the device, QERR is set to 1,
3908 * which means all outstanding ops have been dropped on the floor.
3909 * Cancel all will return them to us.
3910 *
3911 * Return value:
3912 * 	nothing
3913 **/
3914static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd)
3915{
3916	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
3917	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
3918	struct ipr_cmd_pkt *cmd_pkt;
3919
3920	res->in_erp = 1;
3921
3922	ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
3923
3924	if (!scsi_get_tag_type(scsi_cmd->device)) {
3925		ipr_erp_request_sense(ipr_cmd);
3926		return;
3927	}
3928
3929	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
3930	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
3931	cmd_pkt->cdb[0] = IPR_CANCEL_ALL_REQUESTS;
3932
3933	ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout,
3934		   IPR_CANCEL_ALL_TIMEOUT);
3935}
3936
3937/**
3938 * ipr_dump_ioasa - Dump contents of IOASA
3939 * @ioa_cfg:	ioa config struct
3940 * @ipr_cmd:	ipr command struct
3941 *
3942 * This function is invoked by the interrupt handler when ops
3943 * fail. It will log the IOASA if appropriate. Only called
3944 * for GPDD ops.
3945 *
3946 * Return value:
3947 * 	none
3948 **/
3949static void ipr_dump_ioasa(struct ipr_ioa_cfg *ioa_cfg,
3950			   struct ipr_cmnd *ipr_cmd)
3951{
3952	int i;
3953	u16 data_len;
3954	u32 ioasc;
3955	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
3956	__be32 *ioasa_data = (__be32 *)ioasa;
3957	int error_index;
3958
3959	ioasc = be32_to_cpu(ioasa->ioasc) & IPR_IOASC_IOASC_MASK;
3960
3961	if (0 == ioasc)
3962		return;
3963
3964	if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL)
3965		return;
3966
3967	error_index = ipr_get_error(ioasc);
3968
3969	if (ioa_cfg->log_level < IPR_MAX_LOG_LEVEL) {
3970		/* Don't log an error if the IOA already logged one */
3971		if (ioasa->ilid != 0)
3972			return;
3973
3974		if (ipr_error_table[error_index].log_ioasa == 0)
3975			return;
3976	}
3977
3978	ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n",
3979		     ipr_error_table[error_index].error);
3980
3981	if ((ioasa->u.gpdd.end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
3982	    (ioasa->u.gpdd.bus_phase <=  ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
3983		ipr_sdev_err(ipr_cmd->scsi_cmd->device,
3984			     "Device End state: %s Phase: %s\n",
3985			     ipr_gpdd_dev_end_states[ioasa->u.gpdd.end_state],
3986			     ipr_gpdd_dev_bus_phases[ioasa->u.gpdd.bus_phase]);
3987	}
3988
3989	if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len))
3990		data_len = sizeof(struct ipr_ioasa);
3991	else
3992		data_len = be16_to_cpu(ioasa->ret_stat_len);
3993
3994	ipr_err("IOASA Dump:\n");
3995
3996	for (i = 0; i < data_len / 4; i += 4) {
3997		ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
3998			be32_to_cpu(ioasa_data[i]),
3999			be32_to_cpu(ioasa_data[i+1]),
4000			be32_to_cpu(ioasa_data[i+2]),
4001			be32_to_cpu(ioasa_data[i+3]));
4002	}
4003}
4004
4005/**
4006 * ipr_gen_sense - Generate SCSI sense data from an IOASA
4007 * @ioasa:		IOASA
4008 * @sense_buf:	sense data buffer
4009 *
4010 * Return value:
4011 * 	none
4012 **/
4013static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd)
4014{
4015	u32 failing_lba;
4016	u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer;
4017	struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata;
4018	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
4019	u32 ioasc = be32_to_cpu(ioasa->ioasc);
4020
4021	memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
4022
4023	if (ioasc >= IPR_FIRST_DRIVER_IOASC)
4024		return;
4025
4026	ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION;
4027
4028	if (ipr_is_vset_device(res) &&
4029	    ioasc == IPR_IOASC_MED_DO_NOT_REALLOC &&
4030	    ioasa->u.vset.failing_lba_hi != 0) {
4031		sense_buf[0] = 0x72;
4032		sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc);
4033		sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc);
4034		sense_buf[3] = IPR_IOASC_SENSE_QUAL(ioasc);
4035
4036		sense_buf[7] = 12;
4037		sense_buf[8] = 0;
4038		sense_buf[9] = 0x0A;
4039		sense_buf[10] = 0x80;
4040
4041		failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_hi);
4042
4043		sense_buf[12] = (failing_lba & 0xff000000) >> 24;
4044		sense_buf[13] = (failing_lba & 0x00ff0000) >> 16;
4045		sense_buf[14] = (failing_lba & 0x0000ff00) >> 8;
4046		sense_buf[15] = failing_lba & 0x000000ff;
4047
4048		failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
4049
4050		sense_buf[16] = (failing_lba & 0xff000000) >> 24;
4051		sense_buf[17] = (failing_lba & 0x00ff0000) >> 16;
4052		sense_buf[18] = (failing_lba & 0x0000ff00) >> 8;
4053		sense_buf[19] = failing_lba & 0x000000ff;
4054	} else {
4055		sense_buf[0] = 0x70;
4056		sense_buf[2] = IPR_IOASC_SENSE_KEY(ioasc);
4057		sense_buf[12] = IPR_IOASC_SENSE_CODE(ioasc);
4058		sense_buf[13] = IPR_IOASC_SENSE_QUAL(ioasc);
4059
4060		/* Illegal request */
4061		if ((IPR_IOASC_SENSE_KEY(ioasc) == 0x05) &&
4062		    (be32_to_cpu(ioasa->ioasc_specific) & IPR_FIELD_POINTER_VALID)) {
4063			sense_buf[7] = 10;	/* additional length */
4064
4065			/* IOARCB was in error */
4066			if (IPR_IOASC_SENSE_CODE(ioasc) == 0x24)
4067				sense_buf[15] = 0xC0;
4068			else	/* Parameter data was invalid */
4069				sense_buf[15] = 0x80;
4070
4071			sense_buf[16] =
4072			    ((IPR_FIELD_POINTER_MASK &
4073			      be32_to_cpu(ioasa->ioasc_specific)) >> 8) & 0xff;
4074			sense_buf[17] =
4075			    (IPR_FIELD_POINTER_MASK &
4076			     be32_to_cpu(ioasa->ioasc_specific)) & 0xff;
4077		} else {
4078			if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) {
4079				if (ipr_is_vset_device(res))
4080					failing_lba = be32_to_cpu(ioasa->u.vset.failing_lba_lo);
4081				else
4082					failing_lba = be32_to_cpu(ioasa->u.dasd.failing_lba);
4083
4084				sense_buf[0] |= 0x80;	/* Or in the Valid bit */
4085				sense_buf[3] = (failing_lba & 0xff000000) >> 24;
4086				sense_buf[4] = (failing_lba & 0x00ff0000) >> 16;
4087				sense_buf[5] = (failing_lba & 0x0000ff00) >> 8;
4088				sense_buf[6] = failing_lba & 0x000000ff;
4089			}
4090
4091			sense_buf[7] = 6;	/* additional length */
4092		}
4093	}
4094}
4095
4096/**
4097 * ipr_get_autosense - Copy autosense data to sense buffer
4098 * @ipr_cmd:	ipr command struct
4099 *
4100 * This function copies the autosense buffer to the buffer
4101 * in the scsi_cmd, if there is autosense available.
4102 *
4103 * Return value:
4104 *	1 if autosense was available / 0 if not
4105 **/
4106static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd)
4107{
4108	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
4109
4110	if ((be32_to_cpu(ioasa->ioasc_specific) &
4111	     (IPR_ADDITIONAL_STATUS_FMT | IPR_AUTOSENSE_VALID)) == 0)
4112		return 0;
4113
4114	memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data,
4115	       min_t(u16, be16_to_cpu(ioasa->auto_sense.auto_sense_len),
4116		   SCSI_SENSE_BUFFERSIZE));
4117	return 1;
4118}
4119
4120/**
4121 * ipr_erp_start - Process an error response for a SCSI op
4122 * @ioa_cfg:	ioa config struct
4123 * @ipr_cmd:	ipr command struct
4124 *
4125 * This function determines whether or not to initiate ERP
4126 * on the affected device.
4127 *
4128 * Return value:
4129 * 	nothing
4130 **/
4131static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
4132			      struct ipr_cmnd *ipr_cmd)
4133{
4134	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
4135	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
4136	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
4137
4138	if (!res) {
4139		ipr_scsi_eh_done(ipr_cmd);
4140		return;
4141	}
4142
4143	if (ipr_is_gscsi(res))
4144		ipr_dump_ioasa(ioa_cfg, ipr_cmd);
4145	else
4146		ipr_gen_sense(ipr_cmd);
4147
4148	switch (ioasc & IPR_IOASC_IOASC_MASK) {
4149	case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST:
4150		if (ipr_is_naca_model(res))
4151			scsi_cmd->result |= (DID_ABORT << 16);
4152		else
4153			scsi_cmd->result |= (DID_IMM_RETRY << 16);
4154		break;
4155	case IPR_IOASC_IR_RESOURCE_HANDLE:
4156	case IPR_IOASC_IR_NO_CMDS_TO_2ND_IOA:
4157		scsi_cmd->result |= (DID_NO_CONNECT << 16);
4158		break;
4159	case IPR_IOASC_HW_SEL_TIMEOUT:
4160		scsi_cmd->result |= (DID_NO_CONNECT << 16);
4161		if (!ipr_is_naca_model(res))
4162			res->needs_sync_complete = 1;
4163		break;
4164	case IPR_IOASC_SYNC_REQUIRED:
4165		if (!res->in_erp)
4166			res->needs_sync_complete = 1;
4167		scsi_cmd->result |= (DID_IMM_RETRY << 16);
4168		break;
4169	case IPR_IOASC_MED_DO_NOT_REALLOC: /* prevent retries */
4170	case IPR_IOASA_IR_DUAL_IOA_DISABLED:
4171		scsi_cmd->result |= (DID_PASSTHROUGH << 16);
4172		break;
4173	case IPR_IOASC_BUS_WAS_RESET:
4174	case IPR_IOASC_BUS_WAS_RESET_BY_OTHER:
4175		/*
4176		 * Report the bus reset and ask for a retry. The device
4177		 * will give CC/UA the next command.
4178		 */
4179		if (!res->resetting_device)
4180			scsi_report_bus_reset(ioa_cfg->host, scsi_cmd->device->channel);
4181		scsi_cmd->result |= (DID_ERROR << 16);
4182		if (!ipr_is_naca_model(res))
4183			res->needs_sync_complete = 1;
4184		break;
4185	case IPR_IOASC_HW_DEV_BUS_STATUS:
4186		scsi_cmd->result |= IPR_IOASC_SENSE_STATUS(ioasc);
4187		if (IPR_IOASC_SENSE_STATUS(ioasc) == SAM_STAT_CHECK_CONDITION) {
4188			if (!ipr_get_autosense(ipr_cmd)) {
4189				if (!ipr_is_naca_model(res)) {
4190					ipr_erp_cancel_all(ipr_cmd);
4191					return;
4192				}
4193			}
4194		}
4195		if (!ipr_is_naca_model(res))
4196			res->needs_sync_complete = 1;
4197		break;
4198	case IPR_IOASC_NR_INIT_CMD_REQUIRED:
4199		break;
4200	default:
4201		scsi_cmd->result |= (DID_ERROR << 16);
4202		if (!ipr_is_vset_device(res) && !ipr_is_naca_model(res))
4203			res->needs_sync_complete = 1;
4204		break;
4205	}
4206
4207	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
4208	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4209	scsi_cmd->scsi_done(scsi_cmd);
4210}
4211
4212/**
4213 * ipr_scsi_done - mid-layer done function
4214 * @ipr_cmd:	ipr command struct
4215 *
4216 * This function is invoked by the interrupt handler for
4217 * ops generated by the SCSI mid-layer
4218 *
4219 * Return value:
4220 * 	none
4221 **/
4222static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
4223{
4224	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4225	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
4226	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
4227
4228	scsi_cmd->resid = be32_to_cpu(ipr_cmd->ioasa.residual_data_len);
4229
4230	if (likely(IPR_IOASC_SENSE_KEY(ioasc) == 0)) {
4231		ipr_unmap_sglist(ioa_cfg, ipr_cmd);
4232		list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4233		scsi_cmd->scsi_done(scsi_cmd);
4234	} else
4235		ipr_erp_start(ioa_cfg, ipr_cmd);
4236}
4237
4238/**
4239 * ipr_save_ioafp_mode_select - Save adapters mode select data
4240 * @ioa_cfg:	ioa config struct
4241 * @scsi_cmd:	scsi command struct
4242 *
4243 * This function saves mode select data for the adapter to
4244 * use following an adapter reset.
4245 *
4246 * Return value:
4247 *	0 on success / SCSI_MLQUEUE_HOST_BUSY on failure
4248 **/
4249static int ipr_save_ioafp_mode_select(struct ipr_ioa_cfg *ioa_cfg,
4250				       struct scsi_cmnd *scsi_cmd)
4251{
4252	if (!ioa_cfg->saved_mode_pages) {
4253		ioa_cfg->saved_mode_pages  = kmalloc(sizeof(struct ipr_mode_pages),
4254						     GFP_ATOMIC);
4255		if (!ioa_cfg->saved_mode_pages) {
4256			dev_err(&ioa_cfg->pdev->dev,
4257				"IOA mode select buffer allocation failed\n");
4258			return SCSI_MLQUEUE_HOST_BUSY;
4259		}
4260	}
4261
4262	memcpy(ioa_cfg->saved_mode_pages, scsi_cmd->buffer, scsi_cmd->cmnd[4]);
4263	ioa_cfg->saved_mode_page_len = scsi_cmd->cmnd[4];
4264	return 0;
4265}
4266
4267/**
4268 * ipr_queuecommand - Queue a mid-layer request
4269 * @scsi_cmd:	scsi command struct
4270 * @done:		done function
4271 *
4272 * This function queues a request generated by the mid-layer.
4273 *
4274 * Return value:
4275 *	0 on success
4276 *	SCSI_MLQUEUE_DEVICE_BUSY if device is busy
4277 *	SCSI_MLQUEUE_HOST_BUSY if host is busy
4278 **/
4279static int ipr_queuecommand(struct scsi_cmnd *scsi_cmd,
4280			    void (*done) (struct scsi_cmnd *))
4281{
4282	struct ipr_ioa_cfg *ioa_cfg;
4283	struct ipr_resource_entry *res;
4284	struct ipr_ioarcb *ioarcb;
4285	struct ipr_cmnd *ipr_cmd;
4286	int rc = 0;
4287
4288	scsi_cmd->scsi_done = done;
4289	ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata;
4290	res = scsi_cmd->device->hostdata;
4291	scsi_cmd->result = (DID_OK << 16);
4292
4293	/*
4294	 * We are currently blocking all devices due to a host reset
4295	 * We have told the host to stop giving us new requests, but
4296	 * ERP ops don't count. FIXME
4297	 */
4298	if (unlikely(!ioa_cfg->allow_cmds && !ioa_cfg->ioa_is_dead))
4299		return SCSI_MLQUEUE_HOST_BUSY;
4300
4301	/*
4302	 * FIXME - Create scsi_set_host_offline interface
4303	 *  and the ioa_is_dead check can be removed
4304	 */
4305	if (unlikely(ioa_cfg->ioa_is_dead || !res)) {
4306		memset(scsi_cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
4307		scsi_cmd->result = (DID_NO_CONNECT << 16);
4308		scsi_cmd->scsi_done(scsi_cmd);
4309		return 0;
4310	}
4311
4312	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
4313	ioarcb = &ipr_cmd->ioarcb;
4314	list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
4315
4316	memcpy(ioarcb->cmd_pkt.cdb, scsi_cmd->cmnd, scsi_cmd->cmd_len);
4317	ipr_cmd->scsi_cmd = scsi_cmd;
4318	ioarcb->res_handle = res->cfgte.res_handle;
4319	ipr_cmd->done = ipr_scsi_done;
4320	ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_PHYS_LOC(res->cfgte.res_addr));
4321
4322	if (ipr_is_gscsi(res) || ipr_is_vset_device(res)) {
4323		if (scsi_cmd->underflow == 0)
4324			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
4325
4326		if (res->needs_sync_complete) {
4327			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_SYNC_COMPLETE;
4328			res->needs_sync_complete = 0;
4329		}
4330
4331		ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC;
4332		ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_DELAY_AFTER_RST;
4333		ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_ALIGNED_BFR;
4334		ioarcb->cmd_pkt.flags_lo |= ipr_get_task_attributes(scsi_cmd);
4335	}
4336
4337	if (scsi_cmd->cmnd[0] >= 0xC0 &&
4338	    (!ipr_is_gscsi(res) || scsi_cmd->cmnd[0] == IPR_QUERY_RSRC_STATE))
4339		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
4340
4341	if (ipr_is_ioa_resource(res) && scsi_cmd->cmnd[0] == MODE_SELECT)
4342		rc = ipr_save_ioafp_mode_select(ioa_cfg, scsi_cmd);
4343
4344	if (likely(rc == 0))
4345		rc = ipr_build_ioadl(ioa_cfg, ipr_cmd);
4346
4347	if (likely(rc == 0)) {
4348		mb();
4349		writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
4350		       ioa_cfg->regs.ioarrin_reg);
4351	} else {
4352		 list_move_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4353		 return SCSI_MLQUEUE_HOST_BUSY;
4354	}
4355
4356	return 0;
4357}
4358
4359/**
4360 * ipr_info - Get information about the card/driver
4361 * @scsi_host:	scsi host struct
4362 *
4363 * Return value:
4364 * 	pointer to buffer with description string
4365 **/
4366static const char * ipr_ioa_info(struct Scsi_Host *host)
4367{
4368	static char buffer[512];
4369	struct ipr_ioa_cfg *ioa_cfg;
4370	unsigned long lock_flags = 0;
4371
4372	ioa_cfg = (struct ipr_ioa_cfg *) host->hostdata;
4373
4374	spin_lock_irqsave(host->host_lock, lock_flags);
4375	sprintf(buffer, "IBM %X Storage Adapter", ioa_cfg->type);
4376	spin_unlock_irqrestore(host->host_lock, lock_flags);
4377
4378	return buffer;
4379}
4380
4381static struct scsi_host_template driver_template = {
4382	.module = THIS_MODULE,
4383	.name = "IPR",
4384	.info = ipr_ioa_info,
4385	.queuecommand = ipr_queuecommand,
4386	.eh_abort_handler = ipr_eh_abort,
4387	.eh_device_reset_handler = ipr_eh_dev_reset,
4388	.eh_host_reset_handler = ipr_eh_host_reset,
4389	.slave_alloc = ipr_slave_alloc,
4390	.slave_configure = ipr_slave_configure,
4391	.slave_destroy = ipr_slave_destroy,
4392	.change_queue_depth = ipr_change_queue_depth,
4393	.change_queue_type = ipr_change_queue_type,
4394	.bios_param = ipr_biosparam,
4395	.can_queue = IPR_MAX_COMMANDS,
4396	.this_id = -1,
4397	.sg_tablesize = IPR_MAX_SGLIST,
4398	.max_sectors = IPR_IOA_MAX_SECTORS,
4399	.cmd_per_lun = IPR_MAX_CMD_PER_LUN,
4400	.use_clustering = ENABLE_CLUSTERING,
4401	.shost_attrs = ipr_ioa_attrs,
4402	.sdev_attrs = ipr_dev_attrs,
4403	.proc_name = IPR_NAME
4404};
4405
4406#ifdef CONFIG_PPC_PSERIES
4407static const u16 ipr_blocked_processors[] = {
4408	PV_NORTHSTAR,
4409	PV_PULSAR,
4410	PV_POWER4,
4411	PV_ICESTAR,
4412	PV_SSTAR,
4413	PV_POWER4p,
4414	PV_630,
4415	PV_630p
4416};
4417
4418/**
4419 * ipr_invalid_adapter - Determine if this adapter is supported on this hardware
4420 * @ioa_cfg:	ioa cfg struct
4421 *
4422 * Adapters that use Gemstone revision < 3.1 do not work reliably on
4423 * certain pSeries hardware. This function determines if the given
4424 * adapter is in one of these confgurations or not.
4425 *
4426 * Return value:
4427 * 	1 if adapter is not supported / 0 if adapter is supported
4428 **/
4429static int ipr_invalid_adapter(struct ipr_ioa_cfg *ioa_cfg)
4430{
4431	u8 rev_id;
4432	int i;
4433
4434	if (ioa_cfg->type == 0x5702) {
4435		if (pci_read_config_byte(ioa_cfg->pdev, PCI_REVISION_ID,
4436					 &rev_id) == PCIBIOS_SUCCESSFUL) {
4437			if (rev_id < 4) {
4438				for (i = 0; i < ARRAY_SIZE(ipr_blocked_processors); i++){
4439					if (__is_processor(ipr_blocked_processors[i]))
4440						return 1;
4441				}
4442			}
4443		}
4444	}
4445	return 0;
4446}
4447#else
4448#define ipr_invalid_adapter(ioa_cfg) 0
4449#endif
4450
4451/**
4452 * ipr_ioa_bringdown_done - IOA bring down completion.
4453 * @ipr_cmd:	ipr command struct
4454 *
4455 * This function processes the completion of an adapter bring down.
4456 * It wakes any reset sleepers.
4457 *
4458 * Return value:
4459 * 	IPR_RC_JOB_RETURN
4460 **/
4461static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd)
4462{
4463	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4464
4465	ENTER;
4466	ioa_cfg->in_reset_reload = 0;
4467	ioa_cfg->reset_retries = 0;
4468	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4469	wake_up_all(&ioa_cfg->reset_wait_q);
4470
4471	spin_unlock_irq(ioa_cfg->host->host_lock);
4472	scsi_unblock_requests(ioa_cfg->host);
4473	spin_lock_irq(ioa_cfg->host->host_lock);
4474	LEAVE;
4475
4476	return IPR_RC_JOB_RETURN;
4477}
4478
4479/**
4480 * ipr_ioa_reset_done - IOA reset completion.
4481 * @ipr_cmd:	ipr command struct
4482 *
4483 * This function processes the completion of an adapter reset.
4484 * It schedules any necessary mid-layer add/removes and
4485 * wakes any reset sleepers.
4486 *
4487 * Return value:
4488 * 	IPR_RC_JOB_RETURN
4489 **/
4490static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd)
4491{
4492	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4493	struct ipr_resource_entry *res;
4494	struct ipr_hostrcb *hostrcb, *temp;
4495	int i = 0;
4496
4497	ENTER;
4498	ioa_cfg->in_reset_reload = 0;
4499	ioa_cfg->allow_cmds = 1;
4500	ioa_cfg->reset_cmd = NULL;
4501	ioa_cfg->doorbell |= IPR_RUNTIME_RESET;
4502
4503	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
4504		if (ioa_cfg->allow_ml_add_del && (res->add_to_ml || res->del_from_ml)) {
4505			ipr_trace;
4506			break;
4507		}
4508	}
4509	schedule_work(&ioa_cfg->work_q);
4510
4511	list_for_each_entry_safe(hostrcb, temp, &ioa_cfg->hostrcb_free_q, queue) {
4512		list_del(&hostrcb->queue);
4513		if (i++ < IPR_NUM_LOG_HCAMS)
4514			ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
4515		else
4516			ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
4517	}
4518
4519	dev_info(&ioa_cfg->pdev->dev, "IOA initialized.\n");
4520
4521	ioa_cfg->reset_retries = 0;
4522	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4523	wake_up_all(&ioa_cfg->reset_wait_q);
4524
4525	spin_unlock_irq(ioa_cfg->host->host_lock);
4526	scsi_unblock_requests(ioa_cfg->host);
4527	spin_lock_irq(ioa_cfg->host->host_lock);
4528
4529	if (!ioa_cfg->allow_cmds)
4530		scsi_block_requests(ioa_cfg->host);
4531
4532	LEAVE;
4533	return IPR_RC_JOB_RETURN;
4534}
4535
4536/**
4537 * ipr_set_sup_dev_dflt - Initialize a Set Supported Device buffer
4538 * @supported_dev:	supported device struct
4539 * @vpids:			vendor product id struct
4540 *
4541 * Return value:
4542 * 	none
4543 **/
4544static void ipr_set_sup_dev_dflt(struct ipr_supported_device *supported_dev,
4545				 struct ipr_std_inq_vpids *vpids)
4546{
4547	memset(supported_dev, 0, sizeof(struct ipr_supported_device));
4548	memcpy(&supported_dev->vpids, vpids, sizeof(struct ipr_std_inq_vpids));
4549	supported_dev->num_records = 1;
4550	supported_dev->data_length =
4551		cpu_to_be16(sizeof(struct ipr_supported_device));
4552	supported_dev->reserved = 0;
4553}
4554
4555/**
4556 * ipr_set_supported_devs - Send Set Supported Devices for a device
4557 * @ipr_cmd:	ipr command struct
4558 *
4559 * This function send a Set Supported Devices to the adapter
4560 *
4561 * Return value:
4562 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
4563 **/
4564static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd)
4565{
4566	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4567	struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev;
4568	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
4569	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
4570	struct ipr_resource_entry *res = ipr_cmd->u.res;
4571
4572	ipr_cmd->job_step = ipr_ioa_reset_done;
4573
4574	list_for_each_entry_continue(res, &ioa_cfg->used_res_q, queue) {
4575		if (!IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data))
4576			continue;
4577
4578		ipr_cmd->u.res = res;
4579		ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids);
4580
4581		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
4582		ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
4583		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
4584
4585		ioarcb->cmd_pkt.cdb[0] = IPR_SET_SUPPORTED_DEVICES;
4586		ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_supported_device) >> 8) & 0xff;
4587		ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_supported_device) & 0xff;
4588
4589		ioadl->flags_and_data_len = cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST |
4590							sizeof(struct ipr_supported_device));
4591		ioadl->address = cpu_to_be32(ioa_cfg->vpd_cbs_dma +
4592					     offsetof(struct ipr_misc_cbs, supp_dev));
4593		ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
4594		ioarcb->write_data_transfer_length =
4595			cpu_to_be32(sizeof(struct ipr_supported_device));
4596
4597		ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
4598			   IPR_SET_SUP_DEVICE_TIMEOUT);
4599
4600		ipr_cmd->job_step = ipr_set_supported_devs;
4601		return IPR_RC_JOB_RETURN;
4602	}
4603
4604	return IPR_RC_JOB_CONTINUE;
4605}
4606
4607/**
4608 * ipr_setup_write_cache - Disable write cache if needed
4609 * @ipr_cmd:	ipr command struct
4610 *
4611 * This function sets up adapters write cache to desired setting
4612 *
4613 * Return value:
4614 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
4615 **/
4616static int ipr_setup_write_cache(struct ipr_cmnd *ipr_cmd)
4617{
4618	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4619
4620	ipr_cmd->job_step = ipr_set_supported_devs;
4621	ipr_cmd->u.res = list_entry(ioa_cfg->used_res_q.next,
4622				    struct ipr_resource_entry, queue);
4623
4624	if (ioa_cfg->cache_state != CACHE_DISABLED)
4625		return IPR_RC_JOB_CONTINUE;
4626
4627	ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
4628	ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
4629	ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN;
4630	ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_SHUTDOWN_PREPARE_FOR_NORMAL;
4631
4632	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
4633
4634	return IPR_RC_JOB_RETURN;
4635}
4636
4637/**
4638 * ipr_get_mode_page - Locate specified mode page
4639 * @mode_pages:	mode page buffer
4640 * @page_code:	page code to find
4641 * @len:		minimum required length for mode page
4642 *
4643 * Return value:
4644 * 	pointer to mode page / NULL on failure
4645 **/
4646static void *ipr_get_mode_page(struct ipr_mode_pages *mode_pages,
4647			       u32 page_code, u32 len)
4648{
4649	struct ipr_mode_page_hdr *mode_hdr;
4650	u32 page_length;
4651	u32 length;
4652
4653	if (!mode_pages || (mode_pages->hdr.length == 0))
4654		return NULL;
4655
4656	length = (mode_pages->hdr.length + 1) - 4 - mode_pages->hdr.block_desc_len;
4657	mode_hdr = (struct ipr_mode_page_hdr *)
4658		(mode_pages->data + mode_pages->hdr.block_desc_len);
4659
4660	while (length) {
4661		if (IPR_GET_MODE_PAGE_CODE(mode_hdr) == page_code) {
4662			if (mode_hdr->page_length >= (len - sizeof(struct ipr_mode_page_hdr)))
4663				return mode_hdr;
4664			break;
4665		} else {
4666			page_length = (sizeof(struct ipr_mode_page_hdr) +
4667				       mode_hdr->page_length);
4668			length -= page_length;
4669			mode_hdr = (struct ipr_mode_page_hdr *)
4670				((unsigned long)mode_hdr + page_length);
4671		}
4672	}
4673	return NULL;
4674}
4675
4676/**
4677 * ipr_check_term_power - Check for term power errors
4678 * @ioa_cfg:	ioa config struct
4679 * @mode_pages:	IOAFP mode pages buffer
4680 *
4681 * Check the IOAFP's mode page 28 for term power errors
4682 *
4683 * Return value:
4684 * 	nothing
4685 **/
4686static void ipr_check_term_power(struct ipr_ioa_cfg *ioa_cfg,
4687				 struct ipr_mode_pages *mode_pages)
4688{
4689	int i;
4690	int entry_length;
4691	struct ipr_dev_bus_entry *bus;
4692	struct ipr_mode_page28 *mode_page;
4693
4694	mode_page = ipr_get_mode_page(mode_pages, 0x28,
4695				      sizeof(struct ipr_mode_page28));
4696
4697	entry_length = mode_page->entry_length;
4698
4699	bus = mode_page->bus;
4700
4701	for (i = 0; i < mode_page->num_entries; i++) {
4702		if (bus->flags & IPR_SCSI_ATTR_NO_TERM_PWR) {
4703			dev_err(&ioa_cfg->pdev->dev,
4704				"Term power is absent on scsi bus %d\n",
4705				bus->res_addr.bus);
4706		}
4707
4708		bus = (struct ipr_dev_bus_entry *)((char *)bus + entry_length);
4709	}
4710}
4711
4712/**
4713 * ipr_scsi_bus_speed_limit - Limit the SCSI speed based on SES table
4714 * @ioa_cfg:	ioa config struct
4715 *
4716 * Looks through the config table checking for SES devices. If
4717 * the SES device is in the SES table indicating a maximum SCSI
4718 * bus speed, the speed is limited for the bus.
4719 *
4720 * Return value:
4721 * 	none
4722 **/
4723static void ipr_scsi_bus_speed_limit(struct ipr_ioa_cfg *ioa_cfg)
4724{
4725	u32 max_xfer_rate;
4726	int i;
4727
4728	for (i = 0; i < IPR_MAX_NUM_BUSES; i++) {
4729		max_xfer_rate = ipr_get_max_scsi_speed(ioa_cfg, i,
4730						       ioa_cfg->bus_attr[i].bus_width);
4731
4732		if (max_xfer_rate < ioa_cfg->bus_attr[i].max_xfer_rate)
4733			ioa_cfg->bus_attr[i].max_xfer_rate = max_xfer_rate;
4734	}
4735}
4736
4737/**
4738 * ipr_modify_ioafp_mode_page_28 - Modify IOAFP Mode Page 28
4739 * @ioa_cfg:	ioa config struct
4740 * @mode_pages:	mode page 28 buffer
4741 *
4742 * Updates mode page 28 based on driver configuration
4743 *
4744 * Return value:
4745 * 	none
4746 **/
4747static void ipr_modify_ioafp_mode_page_28(struct ipr_ioa_cfg *ioa_cfg,
4748					  	struct ipr_mode_pages *mode_pages)
4749{
4750	int i, entry_length;
4751	struct ipr_dev_bus_entry *bus;
4752	struct ipr_bus_attributes *bus_attr;
4753	struct ipr_mode_page28 *mode_page;
4754
4755	mode_page = ipr_get_mode_page(mode_pages, 0x28,
4756				      sizeof(struct ipr_mode_page28));
4757
4758	entry_length = mode_page->entry_length;
4759
4760	/* Loop for each device bus entry */
4761	for (i = 0, bus = mode_page->bus;
4762	     i < mode_page->num_entries;
4763	     i++, bus = (struct ipr_dev_bus_entry *)((u8 *)bus + entry_length)) {
4764		if (bus->res_addr.bus > IPR_MAX_NUM_BUSES) {
4765			dev_err(&ioa_cfg->pdev->dev,
4766				"Invalid resource address reported: 0x%08X\n",
4767				IPR_GET_PHYS_LOC(bus->res_addr));
4768			continue;
4769		}
4770
4771		bus_attr = &ioa_cfg->bus_attr[i];
4772		bus->extended_reset_delay = IPR_EXTENDED_RESET_DELAY;
4773		bus->bus_width = bus_attr->bus_width;
4774		bus->max_xfer_rate = cpu_to_be32(bus_attr->max_xfer_rate);
4775		bus->flags &= ~IPR_SCSI_ATTR_QAS_MASK;
4776		if (bus_attr->qas_enabled)
4777			bus->flags |= IPR_SCSI_ATTR_ENABLE_QAS;
4778		else
4779			bus->flags |= IPR_SCSI_ATTR_DISABLE_QAS;
4780	}
4781}
4782
4783/**
4784 * ipr_build_mode_select - Build a mode select command
4785 * @ipr_cmd:	ipr command struct
4786 * @res_handle:	resource handle to send command to
4787 * @parm:		Byte 2 of Mode Sense command
4788 * @dma_addr:	DMA buffer address
4789 * @xfer_len:	data transfer length
4790 *
4791 * Return value:
4792 * 	none
4793 **/
4794static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd,
4795				  __be32 res_handle, u8 parm, u32 dma_addr,
4796				  u8 xfer_len)
4797{
4798	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
4799	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
4800
4801	ioarcb->res_handle = res_handle;
4802	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
4803	ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
4804	ioarcb->cmd_pkt.cdb[0] = MODE_SELECT;
4805	ioarcb->cmd_pkt.cdb[1] = parm;
4806	ioarcb->cmd_pkt.cdb[4] = xfer_len;
4807
4808	ioadl->flags_and_data_len =
4809		cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST | xfer_len);
4810	ioadl->address = cpu_to_be32(dma_addr);
4811	ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
4812	ioarcb->write_data_transfer_length = cpu_to_be32(xfer_len);
4813}
4814
4815/**
4816 * ipr_ioafp_mode_select_page28 - Issue Mode Select Page 28 to IOA
4817 * @ipr_cmd:	ipr command struct
4818 *
4819 * This function sets up the SCSI bus attributes and sends
4820 * a Mode Select for Page 28 to activate them.
4821 *
4822 * Return value:
4823 * 	IPR_RC_JOB_RETURN
4824 **/
4825static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd)
4826{
4827	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4828	struct ipr_mode_pages *mode_pages = &ioa_cfg->vpd_cbs->mode_pages;
4829	int length;
4830
4831	ENTER;
4832	if (ioa_cfg->saved_mode_pages) {
4833		memcpy(mode_pages, ioa_cfg->saved_mode_pages,
4834		       ioa_cfg->saved_mode_page_len);
4835		length = ioa_cfg->saved_mode_page_len;
4836	} else {
4837		ipr_scsi_bus_speed_limit(ioa_cfg);
4838		ipr_check_term_power(ioa_cfg, mode_pages);
4839		ipr_modify_ioafp_mode_page_28(ioa_cfg, mode_pages);
4840		length = mode_pages->hdr.length + 1;
4841		mode_pages->hdr.length = 0;
4842	}
4843
4844	ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11,
4845			      ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, mode_pages),
4846			      length);
4847
4848	ipr_cmd->job_step = ipr_setup_write_cache;
4849	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
4850
4851	LEAVE;
4852	return IPR_RC_JOB_RETURN;
4853}
4854
4855/**
4856 * ipr_build_mode_sense - Builds a mode sense command
4857 * @ipr_cmd:	ipr command struct
4858 * @res:		resource entry struct
4859 * @parm:		Byte 2 of mode sense command
4860 * @dma_addr:	DMA address of mode sense buffer
4861 * @xfer_len:	Size of DMA buffer
4862 *
4863 * Return value:
4864 * 	none
4865 **/
4866static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd,
4867				 __be32 res_handle,
4868				 u8 parm, u32 dma_addr, u8 xfer_len)
4869{
4870	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
4871	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
4872
4873	ioarcb->res_handle = res_handle;
4874	ioarcb->cmd_pkt.cdb[0] = MODE_SENSE;
4875	ioarcb->cmd_pkt.cdb[2] = parm;
4876	ioarcb->cmd_pkt.cdb[4] = xfer_len;
4877	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
4878
4879	ioadl->flags_and_data_len =
4880		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len);
4881	ioadl->address = cpu_to_be32(dma_addr);
4882	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
4883	ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len);
4884}
4885
4886/**
4887 * ipr_reset_cmd_failed - Handle failure of IOA reset command
4888 * @ipr_cmd:	ipr command struct
4889 *
4890 * This function handles the failure of an IOA bringup command.
4891 *
4892 * Return value:
4893 * 	IPR_RC_JOB_RETURN
4894 **/
4895static int ipr_reset_cmd_failed(struct ipr_cmnd *ipr_cmd)
4896{
4897	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4898	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
4899
4900	dev_err(&ioa_cfg->pdev->dev,
4901		"0x%02X failed with IOASC: 0x%08X\n",
4902		ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc);
4903
4904	ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
4905	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
4906	return IPR_RC_JOB_RETURN;
4907}
4908
4909/**
4910 * ipr_reset_mode_sense_failed - Handle failure of IOAFP mode sense
4911 * @ipr_cmd:	ipr command struct
4912 *
4913 * This function handles the failure of a Mode Sense to the IOAFP.
4914 * Some adapters do not handle all mode pages.
4915 *
4916 * Return value:
4917 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
4918 **/
4919static int ipr_reset_mode_sense_failed(struct ipr_cmnd *ipr_cmd)
4920{
4921	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
4922
4923	if (ioasc == IPR_IOASC_IR_INVALID_REQ_TYPE_OR_PKT) {
4924		ipr_cmd->job_step = ipr_setup_write_cache;
4925		return IPR_RC_JOB_CONTINUE;
4926	}
4927
4928	return ipr_reset_cmd_failed(ipr_cmd);
4929}
4930
4931/**
4932 * ipr_ioafp_mode_sense_page28 - Issue Mode Sense Page 28 to IOA
4933 * @ipr_cmd:	ipr command struct
4934 *
4935 * This function send a Page 28 mode sense to the IOA to
4936 * retrieve SCSI bus attributes.
4937 *
4938 * Return value:
4939 * 	IPR_RC_JOB_RETURN
4940 **/
4941static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd)
4942{
4943	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4944
4945	ENTER;
4946	ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE),
4947			     0x28, ioa_cfg->vpd_cbs_dma +
4948			     offsetof(struct ipr_misc_cbs, mode_pages),
4949			     sizeof(struct ipr_mode_pages));
4950
4951	ipr_cmd->job_step = ipr_ioafp_mode_select_page28;
4952	ipr_cmd->job_step_failed = ipr_reset_mode_sense_failed;
4953
4954	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
4955
4956	LEAVE;
4957	return IPR_RC_JOB_RETURN;
4958}
4959
4960/**
4961 * ipr_init_res_table - Initialize the resource table
4962 * @ipr_cmd:	ipr command struct
4963 *
4964 * This function looks through the existing resource table, comparing
4965 * it with the config table. This function will take care of old/new
4966 * devices and schedule adding/removing them from the mid-layer
4967 * as appropriate.
4968 *
4969 * Return value:
4970 * 	IPR_RC_JOB_CONTINUE
4971 **/
4972static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd)
4973{
4974	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
4975	struct ipr_resource_entry *res, *temp;
4976	struct ipr_config_table_entry *cfgte;
4977	int found, i;
4978	LIST_HEAD(old_res);
4979
4980	ENTER;
4981	if (ioa_cfg->cfg_table->hdr.flags & IPR_UCODE_DOWNLOAD_REQ)
4982		dev_err(&ioa_cfg->pdev->dev, "Microcode download required\n");
4983
4984	list_for_each_entry_safe(res, temp, &ioa_cfg->used_res_q, queue)
4985		list_move_tail(&res->queue, &old_res);
4986
4987	for (i = 0; i < ioa_cfg->cfg_table->hdr.num_entries; i++) {
4988		cfgte = &ioa_cfg->cfg_table->dev[i];
4989		found = 0;
4990
4991		list_for_each_entry_safe(res, temp, &old_res, queue) {
4992			if (!memcmp(&res->cfgte.res_addr,
4993				    &cfgte->res_addr, sizeof(cfgte->res_addr))) {
4994				list_move_tail(&res->queue, &ioa_cfg->used_res_q);
4995				found = 1;
4996				break;
4997			}
4998		}
4999
5000		if (!found) {
5001			if (list_empty(&ioa_cfg->free_res_q)) {
5002				dev_err(&ioa_cfg->pdev->dev, "Too many devices attached\n");
5003				break;
5004			}
5005
5006			found = 1;
5007			res = list_entry(ioa_cfg->free_res_q.next,
5008					 struct ipr_resource_entry, queue);
5009			list_move_tail(&res->queue, &ioa_cfg->used_res_q);
5010			ipr_init_res_entry(res);
5011			res->add_to_ml = 1;
5012		}
5013
5014		if (found)
5015			memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry));
5016	}
5017
5018	list_for_each_entry_safe(res, temp, &old_res, queue) {
5019		if (res->sdev) {
5020			res->del_from_ml = 1;
5021			res->sdev->hostdata = NULL;
5022			list_move_tail(&res->queue, &ioa_cfg->used_res_q);
5023		} else {
5024			list_move_tail(&res->queue, &ioa_cfg->free_res_q);
5025		}
5026	}
5027
5028	ipr_cmd->job_step = ipr_ioafp_mode_sense_page28;
5029
5030	LEAVE;
5031	return IPR_RC_JOB_CONTINUE;
5032}
5033
5034/**
5035 * ipr_ioafp_query_ioa_cfg - Send a Query IOA Config to the adapter.
5036 * @ipr_cmd:	ipr command struct
5037 *
5038 * This function sends a Query IOA Configuration command
5039 * to the adapter to retrieve the IOA configuration table.
5040 *
5041 * Return value:
5042 * 	IPR_RC_JOB_RETURN
5043 **/
5044static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd)
5045{
5046	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5047	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5048	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
5049	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
5050
5051	ENTER;
5052	dev_info(&ioa_cfg->pdev->dev, "Adapter firmware version: %02X%02X%02X%02X\n",
5053		 ucode_vpd->major_release, ucode_vpd->card_type,
5054		 ucode_vpd->minor_release[0], ucode_vpd->minor_release[1]);
5055	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
5056	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
5057
5058	ioarcb->cmd_pkt.cdb[0] = IPR_QUERY_IOA_CONFIG;
5059	ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_config_table) >> 8) & 0xff;
5060	ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_config_table) & 0xff;
5061
5062	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
5063	ioarcb->read_data_transfer_length =
5064		cpu_to_be32(sizeof(struct ipr_config_table));
5065
5066	ioadl->address = cpu_to_be32(ioa_cfg->cfg_table_dma);
5067	ioadl->flags_and_data_len =
5068		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(struct ipr_config_table));
5069
5070	ipr_cmd->job_step = ipr_init_res_table;
5071
5072	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
5073
5074	LEAVE;
5075	return IPR_RC_JOB_RETURN;
5076}
5077
5078/**
5079 * ipr_ioafp_inquiry - Send an Inquiry to the adapter.
5080 * @ipr_cmd:	ipr command struct
5081 *
5082 * This utility function sends an inquiry to the adapter.
5083 *
5084 * Return value:
5085 * 	none
5086 **/
5087static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page,
5088			      u32 dma_addr, u8 xfer_len)
5089{
5090	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5091	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
5092
5093	ENTER;
5094	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
5095	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
5096
5097	ioarcb->cmd_pkt.cdb[0] = INQUIRY;
5098	ioarcb->cmd_pkt.cdb[1] = flags;
5099	ioarcb->cmd_pkt.cdb[2] = page;
5100	ioarcb->cmd_pkt.cdb[4] = xfer_len;
5101
5102	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
5103	ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len);
5104
5105	ioadl->address = cpu_to_be32(dma_addr);
5106	ioadl->flags_and_data_len =
5107		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len);
5108
5109	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
5110	LEAVE;
5111}
5112
5113/**
5114 * ipr_inquiry_page_supported - Is the given inquiry page supported
5115 * @page0:		inquiry page 0 buffer
5116 * @page:		page code.
5117 *
5118 * This function determines if the specified inquiry page is supported.
5119 *
5120 * Return value:
5121 *	1 if page is supported / 0 if not
5122 **/
5123static int ipr_inquiry_page_supported(struct ipr_inquiry_page0 *page0, u8 page)
5124{
5125	int i;
5126
5127	for (i = 0; i < min_t(u8, page0->len, IPR_INQUIRY_PAGE0_ENTRIES); i++)
5128		if (page0->page[i] == page)
5129			return 1;
5130
5131	return 0;
5132}
5133
5134/**
5135 * ipr_ioafp_page3_inquiry - Send a Page 3 Inquiry to the adapter.
5136 * @ipr_cmd:	ipr command struct
5137 *
5138 * This function sends a Page 3 inquiry to the adapter
5139 * to retrieve software VPD information.
5140 *
5141 * Return value:
5142 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5143 **/
5144static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd)
5145{
5146	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5147	struct ipr_inquiry_page0 *page0 = &ioa_cfg->vpd_cbs->page0_data;
5148
5149	ENTER;
5150
5151	if (!ipr_inquiry_page_supported(page0, 1))
5152		ioa_cfg->cache_state = CACHE_NONE;
5153
5154	ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg;
5155
5156	ipr_ioafp_inquiry(ipr_cmd, 1, 3,
5157			  ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, page3_data),
5158			  sizeof(struct ipr_inquiry_page3));
5159
5160	LEAVE;
5161	return IPR_RC_JOB_RETURN;
5162}
5163
5164/**
5165 * ipr_ioafp_page0_inquiry - Send a Page 0 Inquiry to the adapter.
5166 * @ipr_cmd:	ipr command struct
5167 *
5168 * This function sends a Page 0 inquiry to the adapter
5169 * to retrieve supported inquiry pages.
5170 *
5171 * Return value:
5172 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5173 **/
5174static int ipr_ioafp_page0_inquiry(struct ipr_cmnd *ipr_cmd)
5175{
5176	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5177	char type[5];
5178
5179	ENTER;
5180
5181	/* Grab the type out of the VPD and store it away */
5182	memcpy(type, ioa_cfg->vpd_cbs->ioa_vpd.std_inq_data.vpids.product_id, 4);
5183	type[4] = '\0';
5184	ioa_cfg->type = simple_strtoul((char *)type, NULL, 16);
5185
5186	ipr_cmd->job_step = ipr_ioafp_page3_inquiry;
5187
5188	ipr_ioafp_inquiry(ipr_cmd, 1, 0,
5189			  ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, page0_data),
5190			  sizeof(struct ipr_inquiry_page0));
5191
5192	LEAVE;
5193	return IPR_RC_JOB_RETURN;
5194}
5195
5196/**
5197 * ipr_ioafp_std_inquiry - Send a Standard Inquiry to the adapter.
5198 * @ipr_cmd:	ipr command struct
5199 *
5200 * This function sends a standard inquiry to the adapter.
5201 *
5202 * Return value:
5203 * 	IPR_RC_JOB_RETURN
5204 **/
5205static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd)
5206{
5207	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5208
5209	ENTER;
5210	ipr_cmd->job_step = ipr_ioafp_page0_inquiry;
5211
5212	ipr_ioafp_inquiry(ipr_cmd, 0, 0,
5213			  ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, ioa_vpd),
5214			  sizeof(struct ipr_ioa_vpd));
5215
5216	LEAVE;
5217	return IPR_RC_JOB_RETURN;
5218}
5219
5220/**
5221 * ipr_ioafp_indentify_hrrq - Send Identify Host RRQ.
5222 * @ipr_cmd:	ipr command struct
5223 *
5224 * This function send an Identify Host Request Response Queue
5225 * command to establish the HRRQ with the adapter.
5226 *
5227 * Return value:
5228 * 	IPR_RC_JOB_RETURN
5229 **/
5230static int ipr_ioafp_indentify_hrrq(struct ipr_cmnd *ipr_cmd)
5231{
5232	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5233	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5234
5235	ENTER;
5236	dev_info(&ioa_cfg->pdev->dev, "Starting IOA initialization sequence.\n");
5237
5238	ioarcb->cmd_pkt.cdb[0] = IPR_ID_HOST_RR_Q;
5239	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
5240
5241	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
5242	ioarcb->cmd_pkt.cdb[2] =
5243		((u32) ioa_cfg->host_rrq_dma >> 24) & 0xff;
5244	ioarcb->cmd_pkt.cdb[3] =
5245		((u32) ioa_cfg->host_rrq_dma >> 16) & 0xff;
5246	ioarcb->cmd_pkt.cdb[4] =
5247		((u32) ioa_cfg->host_rrq_dma >> 8) & 0xff;
5248	ioarcb->cmd_pkt.cdb[5] =
5249		((u32) ioa_cfg->host_rrq_dma) & 0xff;
5250	ioarcb->cmd_pkt.cdb[7] =
5251		((sizeof(u32) * IPR_NUM_CMD_BLKS) >> 8) & 0xff;
5252	ioarcb->cmd_pkt.cdb[8] =
5253		(sizeof(u32) * IPR_NUM_CMD_BLKS) & 0xff;
5254
5255	ipr_cmd->job_step = ipr_ioafp_std_inquiry;
5256
5257	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
5258
5259	LEAVE;
5260	return IPR_RC_JOB_RETURN;
5261}
5262
5263/**
5264 * ipr_reset_timer_done - Adapter reset timer function
5265 * @ipr_cmd:	ipr command struct
5266 *
5267 * Description: This function is used in adapter reset processing
5268 * for timing events. If the reset_cmd pointer in the IOA
5269 * config struct is not this adapter's we are doing nested
5270 * resets and fail_all_ops will take care of freeing the
5271 * command block.
5272 *
5273 * Return value:
5274 * 	none
5275 **/
5276static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd)
5277{
5278	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5279	unsigned long lock_flags = 0;
5280
5281	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
5282
5283	if (ioa_cfg->reset_cmd == ipr_cmd) {
5284		list_del(&ipr_cmd->queue);
5285		ipr_cmd->done(ipr_cmd);
5286	}
5287
5288	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
5289}
5290
5291/**
5292 * ipr_reset_start_timer - Start a timer for adapter reset job
5293 * @ipr_cmd:	ipr command struct
5294 * @timeout:	timeout value
5295 *
5296 * Description: This function is used in adapter reset processing
5297 * for timing events. If the reset_cmd pointer in the IOA
5298 * config struct is not this adapter's we are doing nested
5299 * resets and fail_all_ops will take care of freeing the
5300 * command block.
5301 *
5302 * Return value:
5303 * 	none
5304 **/
5305static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd,
5306				  unsigned long timeout)
5307{
5308	list_add_tail(&ipr_cmd->queue, &ipr_cmd->ioa_cfg->pending_q);
5309	ipr_cmd->done = ipr_reset_ioa_job;
5310
5311	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
5312	ipr_cmd->timer.expires = jiffies + timeout;
5313	ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done;
5314	add_timer(&ipr_cmd->timer);
5315}
5316
5317/**
5318 * ipr_init_ioa_mem - Initialize ioa_cfg control block
5319 * @ioa_cfg:	ioa cfg struct
5320 *
5321 * Return value:
5322 * 	nothing
5323 **/
5324static void ipr_init_ioa_mem(struct ipr_ioa_cfg *ioa_cfg)
5325{
5326	memset(ioa_cfg->host_rrq, 0, sizeof(u32) * IPR_NUM_CMD_BLKS);
5327
5328	/* Initialize Host RRQ pointers */
5329	ioa_cfg->hrrq_start = ioa_cfg->host_rrq;
5330	ioa_cfg->hrrq_end = &ioa_cfg->host_rrq[IPR_NUM_CMD_BLKS - 1];
5331	ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start;
5332	ioa_cfg->toggle_bit = 1;
5333
5334	/* Zero out config table */
5335	memset(ioa_cfg->cfg_table, 0, sizeof(struct ipr_config_table));
5336}
5337
5338/**
5339 * ipr_reset_enable_ioa - Enable the IOA following a reset.
5340 * @ipr_cmd:	ipr command struct
5341 *
5342 * This function reinitializes some control blocks and
5343 * enables destructive diagnostics on the adapter.
5344 *
5345 * Return value:
5346 * 	IPR_RC_JOB_RETURN
5347 **/
5348static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
5349{
5350	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5351	volatile u32 int_reg;
5352
5353	ENTER;
5354	ipr_cmd->job_step = ipr_ioafp_indentify_hrrq;
5355	ipr_init_ioa_mem(ioa_cfg);
5356
5357	ioa_cfg->allow_interrupts = 1;
5358	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
5359
5360	if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) {
5361		writel((IPR_PCII_ERROR_INTERRUPTS | IPR_PCII_HRRQ_UPDATED),
5362		       ioa_cfg->regs.clr_interrupt_mask_reg);
5363		int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
5364		return IPR_RC_JOB_CONTINUE;
5365	}
5366
5367	/* Enable destructive diagnostics on IOA */
5368	writel(ioa_cfg->doorbell, ioa_cfg->regs.set_uproc_interrupt_reg);
5369
5370	writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg);
5371	int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
5372
5373	dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n");
5374
5375	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
5376	ipr_cmd->timer.expires = jiffies + (ipr_transop_timeout * HZ);
5377	ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout;
5378	ipr_cmd->done = ipr_reset_ioa_job;
5379	add_timer(&ipr_cmd->timer);
5380	list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
5381
5382	LEAVE;
5383	return IPR_RC_JOB_RETURN;
5384}
5385
5386/**
5387 * ipr_reset_wait_for_dump - Wait for a dump to timeout.
5388 * @ipr_cmd:	ipr command struct
5389 *
5390 * This function is invoked when an adapter dump has run out
5391 * of processing time.
5392 *
5393 * Return value:
5394 * 	IPR_RC_JOB_CONTINUE
5395 **/
5396static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd)
5397{
5398	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5399
5400	if (ioa_cfg->sdt_state == GET_DUMP)
5401		ioa_cfg->sdt_state = ABORT_DUMP;
5402
5403	ipr_cmd->job_step = ipr_reset_alert;
5404
5405	return IPR_RC_JOB_CONTINUE;
5406}
5407
5408/**
5409 * ipr_unit_check_no_data - Log a unit check/no data error log
5410 * @ioa_cfg:		ioa config struct
5411 *
5412 * Logs an error indicating the adapter unit checked, but for some
5413 * reason, we were unable to fetch the unit check buffer.
5414 *
5415 * Return value:
5416 * 	nothing
5417 **/
5418static void ipr_unit_check_no_data(struct ipr_ioa_cfg *ioa_cfg)
5419{
5420	ioa_cfg->errors_logged++;
5421	dev_err(&ioa_cfg->pdev->dev, "IOA unit check with no data\n");
5422}
5423
5424/**
5425 * ipr_get_unit_check_buffer - Get the unit check buffer from the IOA
5426 * @ioa_cfg:		ioa config struct
5427 *
5428 * Fetches the unit check buffer from the adapter by clocking the data
5429 * through the mailbox register.
5430 *
5431 * Return value:
5432 * 	nothing
5433 **/
5434static void ipr_get_unit_check_buffer(struct ipr_ioa_cfg *ioa_cfg)
5435{
5436	unsigned long mailbox;
5437	struct ipr_hostrcb *hostrcb;
5438	struct ipr_uc_sdt sdt;
5439	int rc, length;
5440
5441	mailbox = readl(ioa_cfg->ioa_mailbox);
5442
5443	if (!ipr_sdt_is_fmt2(mailbox)) {
5444		ipr_unit_check_no_data(ioa_cfg);
5445		return;
5446	}
5447
5448	memset(&sdt, 0, sizeof(struct ipr_uc_sdt));
5449	rc = ipr_get_ldump_data_section(ioa_cfg, mailbox, (__be32 *) &sdt,
5450					(sizeof(struct ipr_uc_sdt)) / sizeof(__be32));
5451
5452	if (rc || (be32_to_cpu(sdt.hdr.state) != IPR_FMT2_SDT_READY_TO_USE) ||
5453	    !(sdt.entry[0].flags & IPR_SDT_VALID_ENTRY)) {
5454		ipr_unit_check_no_data(ioa_cfg);
5455		return;
5456	}
5457
5458	/* Find length of the first sdt entry (UC buffer) */
5459	length = (be32_to_cpu(sdt.entry[0].end_offset) -
5460		  be32_to_cpu(sdt.entry[0].bar_str_offset)) & IPR_FMT2_MBX_ADDR_MASK;
5461
5462	hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next,
5463			     struct ipr_hostrcb, queue);
5464	list_del(&hostrcb->queue);
5465	memset(&hostrcb->hcam, 0, sizeof(hostrcb->hcam));
5466
5467	rc = ipr_get_ldump_data_section(ioa_cfg,
5468					be32_to_cpu(sdt.entry[0].bar_str_offset),
5469					(__be32 *)&hostrcb->hcam,
5470					min(length, (int)sizeof(hostrcb->hcam)) / sizeof(__be32));
5471
5472	if (!rc)
5473		ipr_handle_log_data(ioa_cfg, hostrcb);
5474	else
5475		ipr_unit_check_no_data(ioa_cfg);
5476
5477	list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q);
5478}
5479
5480/**
5481 * ipr_reset_restore_cfg_space - Restore PCI config space.
5482 * @ipr_cmd:	ipr command struct
5483 *
5484 * Description: This function restores the saved PCI config space of
5485 * the adapter, fails all outstanding ops back to the callers, and
5486 * fetches the dump/unit check if applicable to this reset.
5487 *
5488 * Return value:
5489 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5490 **/
5491static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
5492{
5493	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5494	int rc;
5495
5496	ENTER;
5497	pci_unblock_user_cfg_access(ioa_cfg->pdev);
5498	rc = pci_restore_state(ioa_cfg->pdev);
5499
5500	if (rc != PCIBIOS_SUCCESSFUL) {
5501		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
5502		return IPR_RC_JOB_CONTINUE;
5503	}
5504
5505	if (ipr_set_pcix_cmd_reg(ioa_cfg)) {
5506		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
5507		return IPR_RC_JOB_CONTINUE;
5508	}
5509
5510	ipr_fail_all_ops(ioa_cfg);
5511
5512	if (ioa_cfg->ioa_unit_checked) {
5513		ioa_cfg->ioa_unit_checked = 0;
5514		ipr_get_unit_check_buffer(ioa_cfg);
5515		ipr_cmd->job_step = ipr_reset_alert;
5516		ipr_reset_start_timer(ipr_cmd, 0);
5517		return IPR_RC_JOB_RETURN;
5518	}
5519
5520	if (ioa_cfg->in_ioa_bringdown) {
5521		ipr_cmd->job_step = ipr_ioa_bringdown_done;
5522	} else {
5523		ipr_cmd->job_step = ipr_reset_enable_ioa;
5524
5525		if (GET_DUMP == ioa_cfg->sdt_state) {
5526			ipr_reset_start_timer(ipr_cmd, IPR_DUMP_TIMEOUT);
5527			ipr_cmd->job_step = ipr_reset_wait_for_dump;
5528			schedule_work(&ioa_cfg->work_q);
5529			return IPR_RC_JOB_RETURN;
5530		}
5531	}
5532
5533	ENTER;
5534	return IPR_RC_JOB_CONTINUE;
5535}
5536
5537/**
5538 * ipr_reset_start_bist - Run BIST on the adapter.
5539 * @ipr_cmd:	ipr command struct
5540 *
5541 * Description: This function runs BIST on the adapter, then delays 2 seconds.
5542 *
5543 * Return value:
5544 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5545 **/
5546static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
5547{
5548	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5549	int rc;
5550
5551	ENTER;
5552	pci_block_user_cfg_access(ioa_cfg->pdev);
5553	rc = pci_write_config_byte(ioa_cfg->pdev, PCI_BIST, PCI_BIST_START);
5554
5555	if (rc != PCIBIOS_SUCCESSFUL) {
5556		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
5557		rc = IPR_RC_JOB_CONTINUE;
5558	} else {
5559		ipr_cmd->job_step = ipr_reset_restore_cfg_space;
5560		ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
5561		rc = IPR_RC_JOB_RETURN;
5562	}
5563
5564	LEAVE;
5565	return rc;
5566}
5567
5568/**
5569 * ipr_reset_allowed - Query whether or not IOA can be reset
5570 * @ioa_cfg:	ioa config struct
5571 *
5572 * Return value:
5573 * 	0 if reset not allowed / non-zero if reset is allowed
5574 **/
5575static int ipr_reset_allowed(struct ipr_ioa_cfg *ioa_cfg)
5576{
5577	volatile u32 temp_reg;
5578
5579	temp_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
5580	return ((temp_reg & IPR_PCII_CRITICAL_OPERATION) == 0);
5581}
5582
5583/**
5584 * ipr_reset_wait_to_start_bist - Wait for permission to reset IOA.
5585 * @ipr_cmd:	ipr command struct
5586 *
5587 * Description: This function waits for adapter permission to run BIST,
5588 * then runs BIST. If the adapter does not give permission after a
5589 * reasonable time, we will reset the adapter anyway. The impact of
5590 * resetting the adapter without warning the adapter is the risk of
5591 * losing the persistent error log on the adapter. If the adapter is
5592 * reset while it is writing to the flash on the adapter, the flash
5593 * segment will have bad ECC and be zeroed.
5594 *
5595 * Return value:
5596 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5597 **/
5598static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd)
5599{
5600	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5601	int rc = IPR_RC_JOB_RETURN;
5602
5603	if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->u.time_left) {
5604		ipr_cmd->u.time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
5605		ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
5606	} else {
5607		ipr_cmd->job_step = ipr_reset_start_bist;
5608		rc = IPR_RC_JOB_CONTINUE;
5609	}
5610
5611	return rc;
5612}
5613
5614/**
5615 * ipr_reset_alert_part2 - Alert the adapter of a pending reset
5616 * @ipr_cmd:	ipr command struct
5617 *
5618 * Description: This function alerts the adapter that it will be reset.
5619 * If memory space is not currently enabled, proceed directly
5620 * to running BIST on the adapter. The timer must always be started
5621 * so we guarantee we do not run BIST from ipr_isr.
5622 *
5623 * Return value:
5624 * 	IPR_RC_JOB_RETURN
5625 **/
5626static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd)
5627{
5628	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5629	u16 cmd_reg;
5630	int rc;
5631
5632	ENTER;
5633	rc = pci_read_config_word(ioa_cfg->pdev, PCI_COMMAND, &cmd_reg);
5634
5635	if ((rc == PCIBIOS_SUCCESSFUL) && (cmd_reg & PCI_COMMAND_MEMORY)) {
5636		ipr_mask_and_clear_interrupts(ioa_cfg, ~0);
5637		writel(IPR_UPROCI_RESET_ALERT, ioa_cfg->regs.set_uproc_interrupt_reg);
5638		ipr_cmd->job_step = ipr_reset_wait_to_start_bist;
5639	} else {
5640		ipr_cmd->job_step = ipr_reset_start_bist;
5641	}
5642
5643	ipr_cmd->u.time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
5644	ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
5645
5646	LEAVE;
5647	return IPR_RC_JOB_RETURN;
5648}
5649
5650/**
5651 * ipr_reset_ucode_download_done - Microcode download completion
5652 * @ipr_cmd:	ipr command struct
5653 *
5654 * Description: This function unmaps the microcode download buffer.
5655 *
5656 * Return value:
5657 * 	IPR_RC_JOB_CONTINUE
5658 **/
5659static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd)
5660{
5661	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5662	struct ipr_sglist *sglist = ioa_cfg->ucode_sglist;
5663
5664	pci_unmap_sg(ioa_cfg->pdev, sglist->scatterlist,
5665		     sglist->num_sg, DMA_TO_DEVICE);
5666
5667	ipr_cmd->job_step = ipr_reset_alert;
5668	return IPR_RC_JOB_CONTINUE;
5669}
5670
5671/**
5672 * ipr_reset_ucode_download - Download microcode to the adapter
5673 * @ipr_cmd:	ipr command struct
5674 *
5675 * Description: This function checks to see if it there is microcode
5676 * to download to the adapter. If there is, a download is performed.
5677 *
5678 * Return value:
5679 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5680 **/
5681static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd)
5682{
5683	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5684	struct ipr_sglist *sglist = ioa_cfg->ucode_sglist;
5685
5686	ENTER;
5687	ipr_cmd->job_step = ipr_reset_alert;
5688
5689	if (!sglist)
5690		return IPR_RC_JOB_CONTINUE;
5691
5692	ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
5693	ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
5694	ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER;
5695	ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE;
5696	ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16;
5697	ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8;
5698	ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff;
5699
5700	ipr_build_ucode_ioadl(ipr_cmd, sglist);
5701	ipr_cmd->job_step = ipr_reset_ucode_download_done;
5702
5703	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
5704		   IPR_WRITE_BUFFER_TIMEOUT);
5705
5706	LEAVE;
5707	return IPR_RC_JOB_RETURN;
5708}
5709
5710/**
5711 * ipr_reset_shutdown_ioa - Shutdown the adapter
5712 * @ipr_cmd:	ipr command struct
5713 *
5714 * Description: This function issues an adapter shutdown of the
5715 * specified type to the specified adapter as part of the
5716 * adapter reset job.
5717 *
5718 * Return value:
5719 * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
5720 **/
5721static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd)
5722{
5723	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5724	enum ipr_shutdown_type shutdown_type = ipr_cmd->u.shutdown_type;
5725	unsigned long timeout;
5726	int rc = IPR_RC_JOB_CONTINUE;
5727
5728	ENTER;
5729	if (shutdown_type != IPR_SHUTDOWN_NONE && !ioa_cfg->ioa_is_dead) {
5730		ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
5731		ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
5732		ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN;
5733		ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type;
5734
5735		if (shutdown_type == IPR_SHUTDOWN_ABBREV)
5736			timeout = IPR_ABBREV_SHUTDOWN_TIMEOUT;
5737		else if (shutdown_type == IPR_SHUTDOWN_PREPARE_FOR_NORMAL)
5738			timeout = IPR_INTERNAL_TIMEOUT;
5739		else
5740			timeout = IPR_SHUTDOWN_TIMEOUT;
5741
5742		ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout);
5743
5744		rc = IPR_RC_JOB_RETURN;
5745		ipr_cmd->job_step = ipr_reset_ucode_download;
5746	} else
5747		ipr_cmd->job_step = ipr_reset_alert;
5748
5749	LEAVE;
5750	return rc;
5751}
5752
5753/**
5754 * ipr_reset_ioa_job - Adapter reset job
5755 * @ipr_cmd:	ipr command struct
5756 *
5757 * Description: This function is the job router for the adapter reset job.
5758 *
5759 * Return value:
5760 * 	none
5761 **/
5762static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd)
5763{
5764	u32 rc, ioasc;
5765	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
5766
5767	do {
5768		ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
5769
5770		if (ioa_cfg->reset_cmd != ipr_cmd) {
5771			/*
5772			 * We are doing nested adapter resets and this is
5773			 * not the current reset job.
5774			 */
5775			list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
5776			return;
5777		}
5778
5779		if (IPR_IOASC_SENSE_KEY(ioasc)) {
5780			rc = ipr_cmd->job_step_failed(ipr_cmd);
5781			if (rc == IPR_RC_JOB_RETURN)
5782				return;
5783		}
5784
5785		ipr_reinit_ipr_cmnd(ipr_cmd);
5786		ipr_cmd->job_step_failed = ipr_reset_cmd_failed;
5787		rc = ipr_cmd->job_step(ipr_cmd);
5788	} while(rc == IPR_RC_JOB_CONTINUE);
5789}
5790
5791/**
5792 * _ipr_initiate_ioa_reset - Initiate an adapter reset
5793 * @ioa_cfg:		ioa config struct
5794 * @job_step:		first job step of reset job
5795 * @shutdown_type:	shutdown type
5796 *
5797 * Description: This function will initiate the reset of the given adapter
5798 * starting at the selected job step.
5799 * If the caller needs to wait on the completion of the reset,
5800 * the caller must sleep on the reset_wait_q.
5801 *
5802 * Return value:
5803 * 	none
5804 **/
5805static void _ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg,
5806				    int (*job_step) (struct ipr_cmnd *),
5807				    enum ipr_shutdown_type shutdown_type)
5808{
5809	struct ipr_cmnd *ipr_cmd;
5810
5811	ioa_cfg->in_reset_reload = 1;
5812	ioa_cfg->allow_cmds = 0;
5813	scsi_block_requests(ioa_cfg->host);
5814
5815	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
5816	ioa_cfg->reset_cmd = ipr_cmd;
5817	ipr_cmd->job_step = job_step;
5818	ipr_cmd->u.shutdown_type = shutdown_type;
5819
5820	ipr_reset_ioa_job(ipr_cmd);
5821}
5822
5823/**
5824 * ipr_initiate_ioa_reset - Initiate an adapter reset
5825 * @ioa_cfg:		ioa config struct
5826 * @shutdown_type:	shutdown type
5827 *
5828 * Description: This function will initiate the reset of the given adapter.
5829 * If the caller needs to wait on the completion of the reset,
5830 * the caller must sleep on the reset_wait_q.
5831 *
5832 * Return value:
5833 * 	none
5834 **/
5835static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg,
5836				   enum ipr_shutdown_type shutdown_type)
5837{
5838	if (ioa_cfg->ioa_is_dead)
5839		return;
5840
5841	if (ioa_cfg->in_reset_reload && ioa_cfg->sdt_state == GET_DUMP)
5842		ioa_cfg->sdt_state = ABORT_DUMP;
5843
5844	if (ioa_cfg->reset_retries++ >= IPR_NUM_RESET_RELOAD_RETRIES) {
5845		dev_err(&ioa_cfg->pdev->dev,
5846			"IOA taken offline - error recovery failed\n");
5847
5848		ioa_cfg->reset_retries = 0;
5849		ioa_cfg->ioa_is_dead = 1;
5850
5851		if (ioa_cfg->in_ioa_bringdown) {
5852			ioa_cfg->reset_cmd = NULL;
5853			ioa_cfg->in_reset_reload = 0;
5854			ipr_fail_all_ops(ioa_cfg);
5855			wake_up_all(&ioa_cfg->reset_wait_q);
5856
5857			spin_unlock_irq(ioa_cfg->host->host_lock);
5858			scsi_unblock_requests(ioa_cfg->host);
5859			spin_lock_irq(ioa_cfg->host->host_lock);
5860			return;
5861		} else {
5862			ioa_cfg->in_ioa_bringdown = 1;
5863			shutdown_type = IPR_SHUTDOWN_NONE;
5864		}
5865	}
5866
5867	_ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_shutdown_ioa,
5868				shutdown_type);
5869}
5870
5871/**
5872 * ipr_probe_ioa_part2 - Initializes IOAs found in ipr_probe_ioa(..)
5873 * @ioa_cfg:	ioa cfg struct
5874 *
5875 * Description: This is the second phase of adapter intialization
5876 * This function takes care of initilizing the adapter to the point
5877 * where it can accept new commands.
5878
5879 * Return value:
5880 * 	0 on sucess / -EIO on failure
5881 **/
5882static int __devinit ipr_probe_ioa_part2(struct ipr_ioa_cfg *ioa_cfg)
5883{
5884	int rc = 0;
5885	unsigned long host_lock_flags = 0;
5886
5887	ENTER;
5888	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
5889	dev_dbg(&ioa_cfg->pdev->dev, "ioa_cfg adx: 0x%p\n", ioa_cfg);
5890	_ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_enable_ioa, IPR_SHUTDOWN_NONE);
5891
5892	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
5893	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
5894	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
5895
5896	if (ioa_cfg->ioa_is_dead) {
5897		rc = -EIO;
5898	} else if (ipr_invalid_adapter(ioa_cfg)) {
5899		if (!ipr_testmode)
5900			rc = -EIO;
5901
5902		dev_err(&ioa_cfg->pdev->dev,
5903			"Adapter not supported in this hardware configuration.\n");
5904	}
5905
5906	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
5907
5908	LEAVE;
5909	return rc;
5910}
5911
5912/**
5913 * ipr_free_cmd_blks - Frees command blocks allocated for an adapter
5914 * @ioa_cfg:	ioa config struct
5915 *
5916 * Return value:
5917 * 	none
5918 **/
5919static void ipr_free_cmd_blks(struct ipr_ioa_cfg *ioa_cfg)
5920{
5921	int i;
5922
5923	for (i = 0; i < IPR_NUM_CMD_BLKS; i++) {
5924		if (ioa_cfg->ipr_cmnd_list[i])
5925			pci_pool_free(ioa_cfg->ipr_cmd_pool,
5926				      ioa_cfg->ipr_cmnd_list[i],
5927				      ioa_cfg->ipr_cmnd_list_dma[i]);
5928
5929		ioa_cfg->ipr_cmnd_list[i] = NULL;
5930	}
5931
5932	if (ioa_cfg->ipr_cmd_pool)
5933		pci_pool_destroy (ioa_cfg->ipr_cmd_pool);
5934
5935	ioa_cfg->ipr_cmd_pool = NULL;
5936}
5937
5938/**
5939 * ipr_free_mem - Frees memory allocated for an adapter
5940 * @ioa_cfg:	ioa cfg struct
5941 *
5942 * Return value:
5943 * 	nothing
5944 **/
5945static void ipr_free_mem(struct ipr_ioa_cfg *ioa_cfg)
5946{
5947	int i;
5948
5949	kfree(ioa_cfg->res_entries);
5950	pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_misc_cbs),
5951			    ioa_cfg->vpd_cbs, ioa_cfg->vpd_cbs_dma);
5952	ipr_free_cmd_blks(ioa_cfg);
5953	pci_free_consistent(ioa_cfg->pdev, sizeof(u32) * IPR_NUM_CMD_BLKS,
5954			    ioa_cfg->host_rrq, ioa_cfg->host_rrq_dma);
5955	pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_config_table),
5956			    ioa_cfg->cfg_table,
5957			    ioa_cfg->cfg_table_dma);
5958
5959	for (i = 0; i < IPR_NUM_HCAMS; i++) {
5960		pci_free_consistent(ioa_cfg->pdev,
5961				    sizeof(struct ipr_hostrcb),
5962				    ioa_cfg->hostrcb[i],
5963				    ioa_cfg->hostrcb_dma[i]);
5964	}
5965
5966	ipr_free_dump(ioa_cfg);
5967	kfree(ioa_cfg->saved_mode_pages);
5968	kfree(ioa_cfg->trace);
5969}
5970
5971/**
5972 * ipr_free_all_resources - Free all allocated resources for an adapter.
5973 * @ipr_cmd:	ipr command struct
5974 *
5975 * This function frees all allocated resources for the
5976 * specified adapter.
5977 *
5978 * Return value:
5979 * 	none
5980 **/
5981static void ipr_free_all_resources(struct ipr_ioa_cfg *ioa_cfg)
5982{
5983	struct pci_dev *pdev = ioa_cfg->pdev;
5984
5985	ENTER;
5986	free_irq(pdev->irq, ioa_cfg);
5987	iounmap(ioa_cfg->hdw_dma_regs);
5988	pci_release_regions(pdev);
5989	ipr_free_mem(ioa_cfg);
5990	scsi_host_put(ioa_cfg->host);
5991	pci_disable_device(pdev);
5992	LEAVE;
5993}
5994
5995/**
5996 * ipr_alloc_cmd_blks - Allocate command blocks for an adapter
5997 * @ioa_cfg:	ioa config struct
5998 *
5999 * Return value:
6000 * 	0 on success / -ENOMEM on allocation failure
6001 **/
6002static int __devinit ipr_alloc_cmd_blks(struct ipr_ioa_cfg *ioa_cfg)
6003{
6004	struct ipr_cmnd *ipr_cmd;
6005	struct ipr_ioarcb *ioarcb;
6006	dma_addr_t dma_addr;
6007	int i;
6008
6009	ioa_cfg->ipr_cmd_pool = pci_pool_create (IPR_NAME, ioa_cfg->pdev,
6010						 sizeof(struct ipr_cmnd), 8, 0);
6011
6012	if (!ioa_cfg->ipr_cmd_pool)
6013		return -ENOMEM;
6014
6015	for (i = 0; i < IPR_NUM_CMD_BLKS; i++) {
6016		ipr_cmd = pci_pool_alloc (ioa_cfg->ipr_cmd_pool, SLAB_KERNEL, &dma_addr);
6017
6018		if (!ipr_cmd) {
6019			ipr_free_cmd_blks(ioa_cfg);
6020			return -ENOMEM;
6021		}
6022
6023		memset(ipr_cmd, 0, sizeof(*ipr_cmd));
6024		ioa_cfg->ipr_cmnd_list[i] = ipr_cmd;
6025		ioa_cfg->ipr_cmnd_list_dma[i] = dma_addr;
6026
6027		ioarcb = &ipr_cmd->ioarcb;
6028		ioarcb->ioarcb_host_pci_addr = cpu_to_be32(dma_addr);
6029		ioarcb->host_response_handle = cpu_to_be32(i << 2);
6030		ioarcb->write_ioadl_addr =
6031			cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioadl));
6032		ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr;
6033		ioarcb->ioasa_host_pci_addr =
6034			cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioasa));
6035		ioarcb->ioasa_len = cpu_to_be16(sizeof(struct ipr_ioasa));
6036		ipr_cmd->cmd_index = i;
6037		ipr_cmd->ioa_cfg = ioa_cfg;
6038		ipr_cmd->sense_buffer_dma = dma_addr +
6039			offsetof(struct ipr_cmnd, sense_buffer);
6040
6041		list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
6042	}
6043
6044	return 0;
6045}
6046
6047/**
6048 * ipr_alloc_mem - Allocate memory for an adapter
6049 * @ioa_cfg:	ioa config struct
6050 *
6051 * Return value:
6052 * 	0 on success / non-zero for error
6053 **/
6054static int __devinit ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
6055{
6056	struct pci_dev *pdev = ioa_cfg->pdev;
6057	int i, rc = -ENOMEM;
6058
6059	ENTER;
6060	ioa_cfg->res_entries = kzalloc(sizeof(struct ipr_resource_entry) *
6061				       IPR_MAX_PHYSICAL_DEVS, GFP_KERNEL);
6062
6063	if (!ioa_cfg->res_entries)
6064		goto out;
6065
6066	for (i = 0; i < IPR_MAX_PHYSICAL_DEVS; i++)
6067		list_add_tail(&ioa_cfg->res_entries[i].queue, &ioa_cfg->free_res_q);
6068
6069	ioa_cfg->vpd_cbs = pci_alloc_consistent(ioa_cfg->pdev,
6070						sizeof(struct ipr_misc_cbs),
6071						&ioa_cfg->vpd_cbs_dma);
6072
6073	if (!ioa_cfg->vpd_cbs)
6074		goto out_free_res_entries;
6075
6076	if (ipr_alloc_cmd_blks(ioa_cfg))
6077		goto out_free_vpd_cbs;
6078
6079	ioa_cfg->host_rrq = pci_alloc_consistent(ioa_cfg->pdev,
6080						 sizeof(u32) * IPR_NUM_CMD_BLKS,
6081						 &ioa_cfg->host_rrq_dma);
6082
6083	if (!ioa_cfg->host_rrq)
6084		goto out_ipr_free_cmd_blocks;
6085
6086	ioa_cfg->cfg_table = pci_alloc_consistent(ioa_cfg->pdev,
6087						  sizeof(struct ipr_config_table),
6088						  &ioa_cfg->cfg_table_dma);
6089
6090	if (!ioa_cfg->cfg_table)
6091		goto out_free_host_rrq;
6092
6093	for (i = 0; i < IPR_NUM_HCAMS; i++) {
6094		ioa_cfg->hostrcb[i] = pci_alloc_consistent(ioa_cfg->pdev,
6095							   sizeof(struct ipr_hostrcb),
6096							   &ioa_cfg->hostrcb_dma[i]);
6097
6098		if (!ioa_cfg->hostrcb[i])
6099			goto out_free_hostrcb_dma;
6100
6101		ioa_cfg->hostrcb[i]->hostrcb_dma =
6102			ioa_cfg->hostrcb_dma[i] + offsetof(struct ipr_hostrcb, hcam);
6103		list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q);
6104	}
6105
6106	ioa_cfg->trace = kzalloc(sizeof(struct ipr_trace_entry) *
6107				 IPR_NUM_TRACE_ENTRIES, GFP_KERNEL);
6108
6109	if (!ioa_cfg->trace)
6110		goto out_free_hostrcb_dma;
6111
6112	rc = 0;
6113out:
6114	LEAVE;
6115	return rc;
6116
6117out_free_hostrcb_dma:
6118	while (i-- > 0) {
6119		pci_free_consistent(pdev, sizeof(struct ipr_hostrcb),
6120				    ioa_cfg->hostrcb[i],
6121				    ioa_cfg->hostrcb_dma[i]);
6122	}
6123	pci_free_consistent(pdev, sizeof(struct ipr_config_table),
6124			    ioa_cfg->cfg_table, ioa_cfg->cfg_table_dma);
6125out_free_host_rrq:
6126	pci_free_consistent(pdev, sizeof(u32) * IPR_NUM_CMD_BLKS,
6127			    ioa_cfg->host_rrq, ioa_cfg->host_rrq_dma);
6128out_ipr_free_cmd_blocks:
6129	ipr_free_cmd_blks(ioa_cfg);
6130out_free_vpd_cbs:
6131	pci_free_consistent(pdev, sizeof(struct ipr_misc_cbs),
6132			    ioa_cfg->vpd_cbs, ioa_cfg->vpd_cbs_dma);
6133out_free_res_entries:
6134	kfree(ioa_cfg->res_entries);
6135	goto out;
6136}
6137
6138/**
6139 * ipr_initialize_bus_attr - Initialize SCSI bus attributes to default values
6140 * @ioa_cfg:	ioa config struct
6141 *
6142 * Return value:
6143 * 	none
6144 **/
6145static void __devinit ipr_initialize_bus_attr(struct ipr_ioa_cfg *ioa_cfg)
6146{
6147	int i;
6148
6149	for (i = 0; i < IPR_MAX_NUM_BUSES; i++) {
6150		ioa_cfg->bus_attr[i].bus = i;
6151		ioa_cfg->bus_attr[i].qas_enabled = 0;
6152		ioa_cfg->bus_attr[i].bus_width = IPR_DEFAULT_BUS_WIDTH;
6153		if (ipr_max_speed < ARRAY_SIZE(ipr_max_bus_speeds))
6154			ioa_cfg->bus_attr[i].max_xfer_rate = ipr_max_bus_speeds[ipr_max_speed];
6155		else
6156			ioa_cfg->bus_attr[i].max_xfer_rate = IPR_U160_SCSI_RATE;
6157	}
6158}
6159
6160/**
6161 * ipr_init_ioa_cfg - Initialize IOA config struct
6162 * @ioa_cfg:	ioa config struct
6163 * @host:		scsi host struct
6164 * @pdev:		PCI dev struct
6165 *
6166 * Return value:
6167 * 	none
6168 **/
6169static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
6170				       struct Scsi_Host *host, struct pci_dev *pdev)
6171{
6172	const struct ipr_interrupt_offsets *p;
6173	struct ipr_interrupts *t;
6174	void __iomem *base;
6175
6176	ioa_cfg->host = host;
6177	ioa_cfg->pdev = pdev;
6178	ioa_cfg->log_level = ipr_log_level;
6179	ioa_cfg->doorbell = IPR_DOORBELL;
6180	if (!ipr_auto_create)
6181		ioa_cfg->doorbell |= IPR_RUNTIME_RESET;
6182	sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER);
6183	sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL);
6184	sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL);
6185	sprintf(ioa_cfg->ipr_pending_label, IPR_PENDQ_LABEL);
6186	sprintf(ioa_cfg->cfg_table_start, IPR_CFG_TBL_START);
6187	sprintf(ioa_cfg->resource_table_label, IPR_RES_TABLE_LABEL);
6188	sprintf(ioa_cfg->ipr_hcam_label, IPR_HCAM_LABEL);
6189	sprintf(ioa_cfg->ipr_cmd_label, IPR_CMD_LABEL);
6190
6191	INIT_LIST_HEAD(&ioa_cfg->free_q);
6192	INIT_LIST_HEAD(&ioa_cfg->pending_q);
6193	INIT_LIST_HEAD(&ioa_cfg->hostrcb_free_q);
6194	INIT_LIST_HEAD(&ioa_cfg->hostrcb_pending_q);
6195	INIT_LIST_HEAD(&ioa_cfg->free_res_q);
6196	INIT_LIST_HEAD(&ioa_cfg->used_res_q);
6197	INIT_WORK(&ioa_cfg->work_q, ipr_worker_thread, ioa_cfg);
6198	init_waitqueue_head(&ioa_cfg->reset_wait_q);
6199	ioa_cfg->sdt_state = INACTIVE;
6200	if (ipr_enable_cache)
6201		ioa_cfg->cache_state = CACHE_ENABLED;
6202	else
6203		ioa_cfg->cache_state = CACHE_DISABLED;
6204
6205	ipr_initialize_bus_attr(ioa_cfg);
6206
6207	host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS;
6208	host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET;
6209	host->max_channel = IPR_MAX_BUS_TO_SCAN;
6210	host->unique_id = host->host_no;
6211	host->max_cmd_len = IPR_MAX_CDB_LEN;
6212	pci_set_drvdata(pdev, ioa_cfg);
6213
6214	p = &ioa_cfg->chip_cfg->regs;
6215	t = &ioa_cfg->regs;
6216	base = ioa_cfg->hdw_dma_regs;
6217
6218	t->set_interrupt_mask_reg = base + p->set_interrupt_mask_reg;
6219	t->clr_interrupt_mask_reg = base + p->clr_interrupt_mask_reg;
6220	t->sense_interrupt_mask_reg = base + p->sense_interrupt_mask_reg;
6221	t->clr_interrupt_reg = base + p->clr_interrupt_reg;
6222	t->sense_interrupt_reg = base + p->sense_interrupt_reg;
6223	t->ioarrin_reg = base + p->ioarrin_reg;
6224	t->sense_uproc_interrupt_reg = base + p->sense_uproc_interrupt_reg;
6225	t->set_uproc_interrupt_reg = base + p->set_uproc_interrupt_reg;
6226	t->clr_uproc_interrupt_reg = base + p->clr_uproc_interrupt_reg;
6227}
6228
6229/**
6230 * ipr_get_chip_cfg - Find adapter chip configuration
6231 * @dev_id:		PCI device id struct
6232 *
6233 * Return value:
6234 * 	ptr to chip config on success / NULL on failure
6235 **/
6236static const struct ipr_chip_cfg_t * __devinit
6237ipr_get_chip_cfg(const struct pci_device_id *dev_id)
6238{
6239	int i;
6240
6241	if (dev_id->driver_data)
6242		return (const struct ipr_chip_cfg_t *)dev_id->driver_data;
6243
6244	for (i = 0; i < ARRAY_SIZE(ipr_chip); i++)
6245		if (ipr_chip[i].vendor == dev_id->vendor &&
6246		    ipr_chip[i].device == dev_id->device)
6247			return ipr_chip[i].cfg;
6248	return NULL;
6249}
6250
6251/**
6252 * ipr_probe_ioa - Allocates memory and does first stage of initialization
6253 * @pdev:		PCI device struct
6254 * @dev_id:		PCI device id struct
6255 *
6256 * Return value:
6257 * 	0 on success / non-zero on failure
6258 **/
6259static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
6260				   const struct pci_device_id *dev_id)
6261{
6262	struct ipr_ioa_cfg *ioa_cfg;
6263	struct Scsi_Host *host;
6264	unsigned long ipr_regs_pci;
6265	void __iomem *ipr_regs;
6266	u32 rc = PCIBIOS_SUCCESSFUL;
6267
6268	ENTER;
6269
6270	if ((rc = pci_enable_device(pdev))) {
6271		dev_err(&pdev->dev, "Cannot enable adapter\n");
6272		goto out;
6273	}
6274
6275	dev_info(&pdev->dev, "Found IOA with IRQ: %d\n", pdev->irq);
6276
6277	host = scsi_host_alloc(&driver_template, sizeof(*ioa_cfg));
6278
6279	if (!host) {
6280		dev_err(&pdev->dev, "call to scsi_host_alloc failed!\n");
6281		rc = -ENOMEM;
6282		goto out_disable;
6283	}
6284
6285	ioa_cfg = (struct ipr_ioa_cfg *)host->hostdata;
6286	memset(ioa_cfg, 0, sizeof(struct ipr_ioa_cfg));
6287
6288	ioa_cfg->chip_cfg = ipr_get_chip_cfg(dev_id);
6289
6290	if (!ioa_cfg->chip_cfg) {
6291		dev_err(&pdev->dev, "Unknown adapter chipset 0x%04X 0x%04X\n",
6292			dev_id->vendor, dev_id->device);
6293		goto out_scsi_host_put;
6294	}
6295
6296	ipr_regs_pci = pci_resource_start(pdev, 0);
6297
6298	rc = pci_request_regions(pdev, IPR_NAME);
6299	if (rc < 0) {
6300		dev_err(&pdev->dev,
6301			"Couldn't register memory range of registers\n");
6302		goto out_scsi_host_put;
6303	}
6304
6305	ipr_regs = ioremap(ipr_regs_pci, pci_resource_len(pdev, 0));
6306
6307	if (!ipr_regs) {
6308		dev_err(&pdev->dev,
6309			"Couldn't map memory range of registers\n");
6310		rc = -ENOMEM;
6311		goto out_release_regions;
6312	}
6313
6314	ioa_cfg->hdw_dma_regs = ipr_regs;
6315	ioa_cfg->hdw_dma_regs_pci = ipr_regs_pci;
6316	ioa_cfg->ioa_mailbox = ioa_cfg->chip_cfg->mailbox + ipr_regs;
6317
6318	ipr_init_ioa_cfg(ioa_cfg, host, pdev);
6319
6320	pci_set_master(pdev);
6321
6322	rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
6323	if (rc < 0) {
6324		dev_err(&pdev->dev, "Failed to set PCI DMA mask\n");
6325		goto cleanup_nomem;
6326	}
6327
6328	rc = pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
6329				   ioa_cfg->chip_cfg->cache_line_size);
6330
6331	if (rc != PCIBIOS_SUCCESSFUL) {
6332		dev_err(&pdev->dev, "Write of cache line size failed\n");
6333		rc = -EIO;
6334		goto cleanup_nomem;
6335	}
6336
6337	/* Save away PCI config space for use following IOA reset */
6338	rc = pci_save_state(pdev);
6339
6340	if (rc != PCIBIOS_SUCCESSFUL) {
6341		dev_err(&pdev->dev, "Failed to save PCI config space\n");
6342		rc = -EIO;
6343		goto cleanup_nomem;
6344	}
6345
6346	if ((rc = ipr_save_pcix_cmd_reg(ioa_cfg)))
6347		goto cleanup_nomem;
6348
6349	if ((rc = ipr_set_pcix_cmd_reg(ioa_cfg)))
6350		goto cleanup_nomem;
6351
6352	rc = ipr_alloc_mem(ioa_cfg);
6353	if (rc < 0) {
6354		dev_err(&pdev->dev,
6355			"Couldn't allocate enough memory for device driver!\n");
6356		goto cleanup_nomem;
6357	}
6358
6359	ipr_mask_and_clear_interrupts(ioa_cfg, ~IPR_PCII_IOA_TRANS_TO_OPER);
6360	rc = request_irq(pdev->irq, ipr_isr, SA_SHIRQ, IPR_NAME, ioa_cfg);
6361
6362	if (rc) {
6363		dev_err(&pdev->dev, "Couldn't register IRQ %d! rc=%d\n",
6364			pdev->irq, rc);
6365		goto cleanup_nolog;
6366	}
6367
6368	spin_lock(&ipr_driver_lock);
6369	list_add_tail(&ioa_cfg->queue, &ipr_ioa_head);
6370	spin_unlock(&ipr_driver_lock);
6371
6372	LEAVE;
6373out:
6374	return rc;
6375
6376cleanup_nolog:
6377	ipr_free_mem(ioa_cfg);
6378cleanup_nomem:
6379	iounmap(ipr_regs);
6380out_release_regions:
6381	pci_release_regions(pdev);
6382out_scsi_host_put:
6383	scsi_host_put(host);
6384out_disable:
6385	pci_disable_device(pdev);
6386	goto out;
6387}
6388
6389/**
6390 * ipr_scan_vsets - Scans for VSET devices
6391 * @ioa_cfg:	ioa config struct
6392 *
6393 * Description: Since the VSET resources do not follow SAM in that we can have
6394 * sparse LUNs with no LUN 0, we have to scan for these ourselves.
6395 *
6396 * Return value:
6397 * 	none
6398 **/
6399static void ipr_scan_vsets(struct ipr_ioa_cfg *ioa_cfg)
6400{
6401	int target, lun;
6402
6403	for (target = 0; target < IPR_MAX_NUM_TARGETS_PER_BUS; target++)
6404		for (lun = 0; lun < IPR_MAX_NUM_VSET_LUNS_PER_TARGET; lun++ )
6405			scsi_add_device(ioa_cfg->host, IPR_VSET_BUS, target, lun);
6406}
6407
6408/**
6409 * ipr_initiate_ioa_bringdown - Bring down an adapter
6410 * @ioa_cfg:		ioa config struct
6411 * @shutdown_type:	shutdown type
6412 *
6413 * Description: This function will initiate bringing down the adapter.
6414 * This consists of issuing an IOA shutdown to the adapter
6415 * to flush the cache, and running BIST.
6416 * If the caller needs to wait on the completion of the reset,
6417 * the caller must sleep on the reset_wait_q.
6418 *
6419 * Return value:
6420 * 	none
6421 **/
6422static void ipr_initiate_ioa_bringdown(struct ipr_ioa_cfg *ioa_cfg,
6423				       enum ipr_shutdown_type shutdown_type)
6424{
6425	ENTER;
6426	if (ioa_cfg->sdt_state == WAIT_FOR_DUMP)
6427		ioa_cfg->sdt_state = ABORT_DUMP;
6428	ioa_cfg->reset_retries = 0;
6429	ioa_cfg->in_ioa_bringdown = 1;
6430	ipr_initiate_ioa_reset(ioa_cfg, shutdown_type);
6431	LEAVE;
6432}
6433
6434/**
6435 * __ipr_remove - Remove a single adapter
6436 * @pdev:	pci device struct
6437 *
6438 * Adapter hot plug remove entry point.
6439 *
6440 * Return value:
6441 * 	none
6442 **/
6443static void __ipr_remove(struct pci_dev *pdev)
6444{
6445	unsigned long host_lock_flags = 0;
6446	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev);
6447	ENTER;
6448
6449	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
6450	ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL);
6451
6452	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
6453	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
6454	flush_scheduled_work();
6455	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
6456
6457	spin_lock(&ipr_driver_lock);
6458	list_del(&ioa_cfg->queue);
6459	spin_unlock(&ipr_driver_lock);
6460
6461	if (ioa_cfg->sdt_state == ABORT_DUMP)
6462		ioa_cfg->sdt_state = WAIT_FOR_DUMP;
6463	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
6464
6465	ipr_free_all_resources(ioa_cfg);
6466
6467	LEAVE;
6468}
6469
6470/**
6471 * ipr_remove - IOA hot plug remove entry point
6472 * @pdev:	pci device struct
6473 *
6474 * Adapter hot plug remove entry point.
6475 *
6476 * Return value:
6477 * 	none
6478 **/
6479static void ipr_remove(struct pci_dev *pdev)
6480{
6481	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev);
6482
6483	ENTER;
6484
6485	ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
6486			      &ipr_trace_attr);
6487	ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj,
6488			     &ipr_dump_attr);
6489	scsi_remove_host(ioa_cfg->host);
6490
6491	__ipr_remove(pdev);
6492
6493	LEAVE;
6494}
6495
6496/**
6497 * ipr_probe - Adapter hot plug add entry point
6498 *
6499 * Return value:
6500 * 	0 on success / non-zero on failure
6501 **/
6502static int __devinit ipr_probe(struct pci_dev *pdev,
6503			       const struct pci_device_id *dev_id)
6504{
6505	struct ipr_ioa_cfg *ioa_cfg;
6506	int rc;
6507
6508	rc = ipr_probe_ioa(pdev, dev_id);
6509
6510	if (rc)
6511		return rc;
6512
6513	ioa_cfg = pci_get_drvdata(pdev);
6514	rc = ipr_probe_ioa_part2(ioa_cfg);
6515
6516	if (rc) {
6517		__ipr_remove(pdev);
6518		return rc;
6519	}
6520
6521	rc = scsi_add_host(ioa_cfg->host, &pdev->dev);
6522
6523	if (rc) {
6524		__ipr_remove(pdev);
6525		return rc;
6526	}
6527
6528	rc = ipr_create_trace_file(&ioa_cfg->host->shost_classdev.kobj,
6529				   &ipr_trace_attr);
6530
6531	if (rc) {
6532		scsi_remove_host(ioa_cfg->host);
6533		__ipr_remove(pdev);
6534		return rc;
6535	}
6536
6537	rc = ipr_create_dump_file(&ioa_cfg->host->shost_classdev.kobj,
6538				   &ipr_dump_attr);
6539
6540	if (rc) {
6541		ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
6542				      &ipr_trace_attr);
6543		scsi_remove_host(ioa_cfg->host);
6544		__ipr_remove(pdev);
6545		return rc;
6546	}
6547
6548	scsi_scan_host(ioa_cfg->host);
6549	ipr_scan_vsets(ioa_cfg);
6550	scsi_add_device(ioa_cfg->host, IPR_IOA_BUS, IPR_IOA_TARGET, IPR_IOA_LUN);
6551	ioa_cfg->allow_ml_add_del = 1;
6552	ioa_cfg->host->max_channel = IPR_VSET_BUS;
6553	schedule_work(&ioa_cfg->work_q);
6554	return 0;
6555}
6556
6557/**
6558 * ipr_shutdown - Shutdown handler.
6559 * @pdev:	pci device struct
6560 *
6561 * This function is invoked upon system shutdown/reboot. It will issue
6562 * an adapter shutdown to the adapter to flush the write cache.
6563 *
6564 * Return value:
6565 * 	none
6566 **/
6567static void ipr_shutdown(struct pci_dev *pdev)
6568{
6569	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev);
6570	unsigned long lock_flags = 0;
6571
6572	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
6573	ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL);
6574	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
6575	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
6576}
6577
6578static struct pci_device_id ipr_pci_table[] __devinitdata = {
6579	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
6580		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5702,
6581		0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6582	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
6583		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5703,
6584	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6585	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
6586		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573D,
6587	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6588	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
6589		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573E,
6590	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6591	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
6592		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571B,
6593	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6594	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
6595		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572E,
6596	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6597	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
6598		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A,
6599	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6600	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE,
6601		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B,
6602		0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6603	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
6604	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A,
6605	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6606	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN,
6607	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B,
6608	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6609	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
6610	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A,
6611	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6612	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
6613	      PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B,
6614	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
6615	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE,
6616		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780,
6617		0, 0, (kernel_ulong_t)&ipr_chip_cfg[1] },
6618	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
6619		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E,
6620		0, 0, (kernel_ulong_t)&ipr_chip_cfg[1] },
6621	{ PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP,
6622		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F,
6623		0, 0, (kernel_ulong_t)&ipr_chip_cfg[1] },
6624	{ }
6625};
6626MODULE_DEVICE_TABLE(pci, ipr_pci_table);
6627
6628static struct pci_driver ipr_driver = {
6629	.name = IPR_NAME,
6630	.id_table = ipr_pci_table,
6631	.probe = ipr_probe,
6632	.remove = ipr_remove,
6633	.shutdown = ipr_shutdown,
6634};
6635
6636/**
6637 * ipr_init - Module entry point
6638 *
6639 * Return value:
6640 * 	0 on success / negative value on failure
6641 **/
6642static int __init ipr_init(void)
6643{
6644	ipr_info("IBM Power RAID SCSI Device Driver version: %s %s\n",
6645		 IPR_DRIVER_VERSION, IPR_DRIVER_DATE);
6646
6647	return pci_module_init(&ipr_driver);
6648}
6649
6650/**
6651 * ipr_exit - Module unload
6652 *
6653 * Module unload entry point.
6654 *
6655 * Return value:
6656 * 	none
6657 **/
6658static void __exit ipr_exit(void)
6659{
6660	pci_unregister_driver(&ipr_driver);
6661}
6662
6663module_init(ipr_init);
6664module_exit(ipr_exit);
6665