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