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