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