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