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