diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-05 16:30:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-05 16:30:44 -0400 |
commit | 4f7a307dc6e4d8bfeb56f7cf7231b08cb845687c (patch) | |
tree | 3bf90522c87fcb32373cb2a5ff25b1ead33405f5 /drivers/scsi/ipr.c | |
parent | fabb5c4e4a474ff0f7d6c1d3466a1b79bbce5f49 (diff) | |
parent | 7297824581755593535fc97d2c8b6c47e2dc2db6 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (87 commits)
[SCSI] fusion: fix domain validation loops
[SCSI] qla2xxx: fix regression on sparc64
[SCSI] modalias for scsi devices
[SCSI] sg: cap reserved_size values at max_sectors
[SCSI] BusLogic: stop using check_region
[SCSI] tgt: fix rdma transfer bugs
[SCSI] aacraid: fix aacraid not finding device
[SCSI] aacraid: Correct SMC products in aacraid.txt
[SCSI] scsi_error.c: Add EH Start Unit retry
[SCSI] aacraid: [Fastboot] Panics for AACRAID driver during 'insmod' for kexec test.
[SCSI] ipr: Driver version to 2.3.2
[SCSI] ipr: Faster sg list fetch
[SCSI] ipr: Return better qc_issue errors
[SCSI] ipr: Disrupt device error
[SCSI] ipr: Improve async error logging level control
[SCSI] ipr: PCI unblock config access fix
[SCSI] ipr: Fix for oops following SATA request sense
[SCSI] ipr: Log error for SAS dual path switch
[SCSI] ipr: Enable logging of debug error data for all devices
[SCSI] ipr: Add new PCI-E IDs to device table
...
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r-- | drivers/scsi/ipr.c | 290 |
1 files changed, 169 insertions, 121 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index e9bd29975db4..2c7b77e833f9 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -89,10 +89,9 @@ static unsigned int ipr_log_level = IPR_DEFAULT_LOG_LEVEL; | |||
89 | static unsigned int ipr_max_speed = 1; | 89 | static unsigned int ipr_max_speed = 1; |
90 | static int ipr_testmode = 0; | 90 | static int ipr_testmode = 0; |
91 | static unsigned int ipr_fastfail = 0; | 91 | static unsigned int ipr_fastfail = 0; |
92 | static unsigned int ipr_transop_timeout = IPR_OPERATIONAL_TIMEOUT; | 92 | static unsigned int ipr_transop_timeout = 0; |
93 | static unsigned int ipr_enable_cache = 1; | 93 | static unsigned int ipr_enable_cache = 1; |
94 | static unsigned int ipr_debug = 0; | 94 | static unsigned int ipr_debug = 0; |
95 | static int ipr_auto_create = 1; | ||
96 | static DEFINE_SPINLOCK(ipr_driver_lock); | 95 | static DEFINE_SPINLOCK(ipr_driver_lock); |
97 | 96 | ||
98 | /* This table describes the differences between DMA controller chips */ | 97 | /* This table describes the differences between DMA controller chips */ |
@@ -159,15 +158,13 @@ module_param_named(enable_cache, ipr_enable_cache, int, 0); | |||
159 | MODULE_PARM_DESC(enable_cache, "Enable adapter's non-volatile write cache (default: 1)"); | 158 | MODULE_PARM_DESC(enable_cache, "Enable adapter's non-volatile write cache (default: 1)"); |
160 | module_param_named(debug, ipr_debug, int, 0); | 159 | module_param_named(debug, ipr_debug, int, 0); |
161 | MODULE_PARM_DESC(debug, "Enable device driver debugging logging. Set to 1 to enable. (default: 0)"); | 160 | MODULE_PARM_DESC(debug, "Enable device driver debugging logging. Set to 1 to enable. (default: 0)"); |
162 | module_param_named(auto_create, ipr_auto_create, int, 0); | ||
163 | MODULE_PARM_DESC(auto_create, "Auto-create single device RAID 0 arrays when initialized (default: 1)"); | ||
164 | MODULE_LICENSE("GPL"); | 161 | MODULE_LICENSE("GPL"); |
165 | MODULE_VERSION(IPR_DRIVER_VERSION); | 162 | MODULE_VERSION(IPR_DRIVER_VERSION); |
166 | 163 | ||
167 | /* A constant array of IOASCs/URCs/Error Messages */ | 164 | /* A constant array of IOASCs/URCs/Error Messages */ |
168 | static const | 165 | static const |
169 | struct ipr_error_table_t ipr_error_table[] = { | 166 | struct ipr_error_table_t ipr_error_table[] = { |
170 | {0x00000000, 1, 1, | 167 | {0x00000000, 1, IPR_DEFAULT_LOG_LEVEL, |
171 | "8155: An unknown error was received"}, | 168 | "8155: An unknown error was received"}, |
172 | {0x00330000, 0, 0, | 169 | {0x00330000, 0, 0, |
173 | "Soft underlength error"}, | 170 | "Soft underlength error"}, |
@@ -175,37 +172,37 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
175 | "Command to be cancelled not found"}, | 172 | "Command to be cancelled not found"}, |
176 | {0x00808000, 0, 0, | 173 | {0x00808000, 0, 0, |
177 | "Qualified success"}, | 174 | "Qualified success"}, |
178 | {0x01080000, 1, 1, | 175 | {0x01080000, 1, IPR_DEFAULT_LOG_LEVEL, |
179 | "FFFE: Soft device bus error recovered by the IOA"}, | 176 | "FFFE: Soft device bus error recovered by the IOA"}, |
180 | {0x01088100, 0, 1, | 177 | {0x01088100, 0, IPR_DEFAULT_LOG_LEVEL, |
181 | "4101: Soft device bus fabric error"}, | 178 | "4101: Soft device bus fabric error"}, |
182 | {0x01170600, 0, 1, | 179 | {0x01170600, 0, IPR_DEFAULT_LOG_LEVEL, |
183 | "FFF9: Device sector reassign successful"}, | 180 | "FFF9: Device sector reassign successful"}, |
184 | {0x01170900, 0, 1, | 181 | {0x01170900, 0, IPR_DEFAULT_LOG_LEVEL, |
185 | "FFF7: Media error recovered by device rewrite procedures"}, | 182 | "FFF7: Media error recovered by device rewrite procedures"}, |
186 | {0x01180200, 0, 1, | 183 | {0x01180200, 0, IPR_DEFAULT_LOG_LEVEL, |
187 | "7001: IOA sector reassignment successful"}, | 184 | "7001: IOA sector reassignment successful"}, |
188 | {0x01180500, 0, 1, | 185 | {0x01180500, 0, IPR_DEFAULT_LOG_LEVEL, |
189 | "FFF9: Soft media error. Sector reassignment recommended"}, | 186 | "FFF9: Soft media error. Sector reassignment recommended"}, |
190 | {0x01180600, 0, 1, | 187 | {0x01180600, 0, IPR_DEFAULT_LOG_LEVEL, |
191 | "FFF7: Media error recovered by IOA rewrite procedures"}, | 188 | "FFF7: Media error recovered by IOA rewrite procedures"}, |
192 | {0x01418000, 0, 1, | 189 | {0x01418000, 0, IPR_DEFAULT_LOG_LEVEL, |
193 | "FF3D: Soft PCI bus error recovered by the IOA"}, | 190 | "FF3D: Soft PCI bus error recovered by the IOA"}, |
194 | {0x01440000, 1, 1, | 191 | {0x01440000, 1, IPR_DEFAULT_LOG_LEVEL, |
195 | "FFF6: Device hardware error recovered by the IOA"}, | 192 | "FFF6: Device hardware error recovered by the IOA"}, |
196 | {0x01448100, 0, 1, | 193 | {0x01448100, 0, IPR_DEFAULT_LOG_LEVEL, |
197 | "FFF6: Device hardware error recovered by the device"}, | 194 | "FFF6: Device hardware error recovered by the device"}, |
198 | {0x01448200, 1, 1, | 195 | {0x01448200, 1, IPR_DEFAULT_LOG_LEVEL, |
199 | "FF3D: Soft IOA error recovered by the IOA"}, | 196 | "FF3D: Soft IOA error recovered by the IOA"}, |
200 | {0x01448300, 0, 1, | 197 | {0x01448300, 0, IPR_DEFAULT_LOG_LEVEL, |
201 | "FFFA: Undefined device response recovered by the IOA"}, | 198 | "FFFA: Undefined device response recovered by the IOA"}, |
202 | {0x014A0000, 1, 1, | 199 | {0x014A0000, 1, IPR_DEFAULT_LOG_LEVEL, |
203 | "FFF6: Device bus error, message or command phase"}, | 200 | "FFF6: Device bus error, message or command phase"}, |
204 | {0x014A8000, 0, 1, | 201 | {0x014A8000, 0, IPR_DEFAULT_LOG_LEVEL, |
205 | "FFFE: Task Management Function failed"}, | 202 | "FFFE: Task Management Function failed"}, |
206 | {0x015D0000, 0, 1, | 203 | {0x015D0000, 0, IPR_DEFAULT_LOG_LEVEL, |
207 | "FFF6: Failure prediction threshold exceeded"}, | 204 | "FFF6: Failure prediction threshold exceeded"}, |
208 | {0x015D9200, 0, 1, | 205 | {0x015D9200, 0, IPR_DEFAULT_LOG_LEVEL, |
209 | "8009: Impending cache battery pack failure"}, | 206 | "8009: Impending cache battery pack failure"}, |
210 | {0x02040400, 0, 0, | 207 | {0x02040400, 0, 0, |
211 | "34FF: Disk device format in progress"}, | 208 | "34FF: Disk device format in progress"}, |
@@ -215,85 +212,85 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
215 | "No ready, IOA shutdown"}, | 212 | "No ready, IOA shutdown"}, |
216 | {0x025A0000, 0, 0, | 213 | {0x025A0000, 0, 0, |
217 | "Not ready, IOA has been shutdown"}, | 214 | "Not ready, IOA has been shutdown"}, |
218 | {0x02670100, 0, 1, | 215 | {0x02670100, 0, IPR_DEFAULT_LOG_LEVEL, |
219 | "3020: Storage subsystem configuration error"}, | 216 | "3020: Storage subsystem configuration error"}, |
220 | {0x03110B00, 0, 0, | 217 | {0x03110B00, 0, 0, |
221 | "FFF5: Medium error, data unreadable, recommend reassign"}, | 218 | "FFF5: Medium error, data unreadable, recommend reassign"}, |
222 | {0x03110C00, 0, 0, | 219 | {0x03110C00, 0, 0, |
223 | "7000: Medium error, data unreadable, do not reassign"}, | 220 | "7000: Medium error, data unreadable, do not reassign"}, |
224 | {0x03310000, 0, 1, | 221 | {0x03310000, 0, IPR_DEFAULT_LOG_LEVEL, |
225 | "FFF3: Disk media format bad"}, | 222 | "FFF3: Disk media format bad"}, |
226 | {0x04050000, 0, 1, | 223 | {0x04050000, 0, IPR_DEFAULT_LOG_LEVEL, |
227 | "3002: Addressed device failed to respond to selection"}, | 224 | "3002: Addressed device failed to respond to selection"}, |
228 | {0x04080000, 1, 1, | 225 | {0x04080000, 1, IPR_DEFAULT_LOG_LEVEL, |
229 | "3100: Device bus error"}, | 226 | "3100: Device bus error"}, |
230 | {0x04080100, 0, 1, | 227 | {0x04080100, 0, IPR_DEFAULT_LOG_LEVEL, |
231 | "3109: IOA timed out a device command"}, | 228 | "3109: IOA timed out a device command"}, |
232 | {0x04088000, 0, 0, | 229 | {0x04088000, 0, 0, |
233 | "3120: SCSI bus is not operational"}, | 230 | "3120: SCSI bus is not operational"}, |
234 | {0x04088100, 0, 1, | 231 | {0x04088100, 0, IPR_DEFAULT_LOG_LEVEL, |
235 | "4100: Hard device bus fabric error"}, | 232 | "4100: Hard device bus fabric error"}, |
236 | {0x04118000, 0, 1, | 233 | {0x04118000, 0, IPR_DEFAULT_LOG_LEVEL, |
237 | "9000: IOA reserved area data check"}, | 234 | "9000: IOA reserved area data check"}, |
238 | {0x04118100, 0, 1, | 235 | {0x04118100, 0, IPR_DEFAULT_LOG_LEVEL, |
239 | "9001: IOA reserved area invalid data pattern"}, | 236 | "9001: IOA reserved area invalid data pattern"}, |
240 | {0x04118200, 0, 1, | 237 | {0x04118200, 0, IPR_DEFAULT_LOG_LEVEL, |
241 | "9002: IOA reserved area LRC error"}, | 238 | "9002: IOA reserved area LRC error"}, |
242 | {0x04320000, 0, 1, | 239 | {0x04320000, 0, IPR_DEFAULT_LOG_LEVEL, |
243 | "102E: Out of alternate sectors for disk storage"}, | 240 | "102E: Out of alternate sectors for disk storage"}, |
244 | {0x04330000, 1, 1, | 241 | {0x04330000, 1, IPR_DEFAULT_LOG_LEVEL, |
245 | "FFF4: Data transfer underlength error"}, | 242 | "FFF4: Data transfer underlength error"}, |
246 | {0x04338000, 1, 1, | 243 | {0x04338000, 1, IPR_DEFAULT_LOG_LEVEL, |
247 | "FFF4: Data transfer overlength error"}, | 244 | "FFF4: Data transfer overlength error"}, |
248 | {0x043E0100, 0, 1, | 245 | {0x043E0100, 0, IPR_DEFAULT_LOG_LEVEL, |
249 | "3400: Logical unit failure"}, | 246 | "3400: Logical unit failure"}, |
250 | {0x04408500, 0, 1, | 247 | {0x04408500, 0, IPR_DEFAULT_LOG_LEVEL, |
251 | "FFF4: Device microcode is corrupt"}, | 248 | "FFF4: Device microcode is corrupt"}, |
252 | {0x04418000, 1, 1, | 249 | {0x04418000, 1, IPR_DEFAULT_LOG_LEVEL, |
253 | "8150: PCI bus error"}, | 250 | "8150: PCI bus error"}, |
254 | {0x04430000, 1, 0, | 251 | {0x04430000, 1, 0, |
255 | "Unsupported device bus message received"}, | 252 | "Unsupported device bus message received"}, |
256 | {0x04440000, 1, 1, | 253 | {0x04440000, 1, IPR_DEFAULT_LOG_LEVEL, |
257 | "FFF4: Disk device problem"}, | 254 | "FFF4: Disk device problem"}, |
258 | {0x04448200, 1, 1, | 255 | {0x04448200, 1, IPR_DEFAULT_LOG_LEVEL, |
259 | "8150: Permanent IOA failure"}, | 256 | "8150: Permanent IOA failure"}, |
260 | {0x04448300, 0, 1, | 257 | {0x04448300, 0, IPR_DEFAULT_LOG_LEVEL, |
261 | "3010: Disk device returned wrong response to IOA"}, | 258 | "3010: Disk device returned wrong response to IOA"}, |
262 | {0x04448400, 0, 1, | 259 | {0x04448400, 0, IPR_DEFAULT_LOG_LEVEL, |
263 | "8151: IOA microcode error"}, | 260 | "8151: IOA microcode error"}, |
264 | {0x04448500, 0, 0, | 261 | {0x04448500, 0, 0, |
265 | "Device bus status error"}, | 262 | "Device bus status error"}, |
266 | {0x04448600, 0, 1, | 263 | {0x04448600, 0, IPR_DEFAULT_LOG_LEVEL, |
267 | "8157: IOA error requiring IOA reset to recover"}, | 264 | "8157: IOA error requiring IOA reset to recover"}, |
268 | {0x04448700, 0, 0, | 265 | {0x04448700, 0, 0, |
269 | "ATA device status error"}, | 266 | "ATA device status error"}, |
270 | {0x04490000, 0, 0, | 267 | {0x04490000, 0, 0, |
271 | "Message reject received from the device"}, | 268 | "Message reject received from the device"}, |
272 | {0x04449200, 0, 1, | 269 | {0x04449200, 0, IPR_DEFAULT_LOG_LEVEL, |
273 | "8008: A permanent cache battery pack failure occurred"}, | 270 | "8008: A permanent cache battery pack failure occurred"}, |
274 | {0x0444A000, 0, 1, | 271 | {0x0444A000, 0, IPR_DEFAULT_LOG_LEVEL, |
275 | "9090: Disk unit has been modified after the last known status"}, | 272 | "9090: Disk unit has been modified after the last known status"}, |
276 | {0x0444A200, 0, 1, | 273 | {0x0444A200, 0, IPR_DEFAULT_LOG_LEVEL, |
277 | "9081: IOA detected device error"}, | 274 | "9081: IOA detected device error"}, |
278 | {0x0444A300, 0, 1, | 275 | {0x0444A300, 0, IPR_DEFAULT_LOG_LEVEL, |
279 | "9082: IOA detected device error"}, | 276 | "9082: IOA detected device error"}, |
280 | {0x044A0000, 1, 1, | 277 | {0x044A0000, 1, IPR_DEFAULT_LOG_LEVEL, |
281 | "3110: Device bus error, message or command phase"}, | 278 | "3110: Device bus error, message or command phase"}, |
282 | {0x044A8000, 1, 1, | 279 | {0x044A8000, 1, IPR_DEFAULT_LOG_LEVEL, |
283 | "3110: SAS Command / Task Management Function failed"}, | 280 | "3110: SAS Command / Task Management Function failed"}, |
284 | {0x04670400, 0, 1, | 281 | {0x04670400, 0, IPR_DEFAULT_LOG_LEVEL, |
285 | "9091: Incorrect hardware configuration change has been detected"}, | 282 | "9091: Incorrect hardware configuration change has been detected"}, |
286 | {0x04678000, 0, 1, | 283 | {0x04678000, 0, IPR_DEFAULT_LOG_LEVEL, |
287 | "9073: Invalid multi-adapter configuration"}, | 284 | "9073: Invalid multi-adapter configuration"}, |
288 | {0x04678100, 0, 1, | 285 | {0x04678100, 0, IPR_DEFAULT_LOG_LEVEL, |
289 | "4010: Incorrect connection between cascaded expanders"}, | 286 | "4010: Incorrect connection between cascaded expanders"}, |
290 | {0x04678200, 0, 1, | 287 | {0x04678200, 0, IPR_DEFAULT_LOG_LEVEL, |
291 | "4020: Connections exceed IOA design limits"}, | 288 | "4020: Connections exceed IOA design limits"}, |
292 | {0x04678300, 0, 1, | 289 | {0x04678300, 0, IPR_DEFAULT_LOG_LEVEL, |
293 | "4030: Incorrect multipath connection"}, | 290 | "4030: Incorrect multipath connection"}, |
294 | {0x04679000, 0, 1, | 291 | {0x04679000, 0, IPR_DEFAULT_LOG_LEVEL, |
295 | "4110: Unsupported enclosure function"}, | 292 | "4110: Unsupported enclosure function"}, |
296 | {0x046E0000, 0, 1, | 293 | {0x046E0000, 0, IPR_DEFAULT_LOG_LEVEL, |
297 | "FFF4: Command to logical unit failed"}, | 294 | "FFF4: Command to logical unit failed"}, |
298 | {0x05240000, 1, 0, | 295 | {0x05240000, 1, 0, |
299 | "Illegal request, invalid request type or request packet"}, | 296 | "Illegal request, invalid request type or request packet"}, |
@@ -313,101 +310,103 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
313 | "Illegal request, command sequence error"}, | 310 | "Illegal request, command sequence error"}, |
314 | {0x052C8000, 1, 0, | 311 | {0x052C8000, 1, 0, |
315 | "Illegal request, dual adapter support not enabled"}, | 312 | "Illegal request, dual adapter support not enabled"}, |
316 | {0x06040500, 0, 1, | 313 | {0x06040500, 0, IPR_DEFAULT_LOG_LEVEL, |
317 | "9031: Array protection temporarily suspended, protection resuming"}, | 314 | "9031: Array protection temporarily suspended, protection resuming"}, |
318 | {0x06040600, 0, 1, | 315 | {0x06040600, 0, IPR_DEFAULT_LOG_LEVEL, |
319 | "9040: Array protection temporarily suspended, protection resuming"}, | 316 | "9040: Array protection temporarily suspended, protection resuming"}, |
320 | {0x06288000, 0, 1, | 317 | {0x06288000, 0, IPR_DEFAULT_LOG_LEVEL, |
321 | "3140: Device bus not ready to ready transition"}, | 318 | "3140: Device bus not ready to ready transition"}, |
322 | {0x06290000, 0, 1, | 319 | {0x06290000, 0, IPR_DEFAULT_LOG_LEVEL, |
323 | "FFFB: SCSI bus was reset"}, | 320 | "FFFB: SCSI bus was reset"}, |
324 | {0x06290500, 0, 0, | 321 | {0x06290500, 0, 0, |
325 | "FFFE: SCSI bus transition to single ended"}, | 322 | "FFFE: SCSI bus transition to single ended"}, |
326 | {0x06290600, 0, 0, | 323 | {0x06290600, 0, 0, |
327 | "FFFE: SCSI bus transition to LVD"}, | 324 | "FFFE: SCSI bus transition to LVD"}, |
328 | {0x06298000, 0, 1, | 325 | {0x06298000, 0, IPR_DEFAULT_LOG_LEVEL, |
329 | "FFFB: SCSI bus was reset by another initiator"}, | 326 | "FFFB: SCSI bus was reset by another initiator"}, |
330 | {0x063F0300, 0, 1, | 327 | {0x063F0300, 0, IPR_DEFAULT_LOG_LEVEL, |
331 | "3029: A device replacement has occurred"}, | 328 | "3029: A device replacement has occurred"}, |
332 | {0x064C8000, 0, 1, | 329 | {0x064C8000, 0, IPR_DEFAULT_LOG_LEVEL, |
333 | "9051: IOA cache data exists for a missing or failed device"}, | 330 | "9051: IOA cache data exists for a missing or failed device"}, |
334 | {0x064C8100, 0, 1, | 331 | {0x064C8100, 0, IPR_DEFAULT_LOG_LEVEL, |
335 | "9055: Auxiliary cache IOA contains cache data needed by the primary IOA"}, | 332 | "9055: Auxiliary cache IOA contains cache data needed by the primary IOA"}, |
336 | {0x06670100, 0, 1, | 333 | {0x06670100, 0, IPR_DEFAULT_LOG_LEVEL, |
337 | "9025: Disk unit is not supported at its physical location"}, | 334 | "9025: Disk unit is not supported at its physical location"}, |
338 | {0x06670600, 0, 1, | 335 | {0x06670600, 0, IPR_DEFAULT_LOG_LEVEL, |
339 | "3020: IOA detected a SCSI bus configuration error"}, | 336 | "3020: IOA detected a SCSI bus configuration error"}, |
340 | {0x06678000, 0, 1, | 337 | {0x06678000, 0, IPR_DEFAULT_LOG_LEVEL, |
341 | "3150: SCSI bus configuration error"}, | 338 | "3150: SCSI bus configuration error"}, |
342 | {0x06678100, 0, 1, | 339 | {0x06678100, 0, IPR_DEFAULT_LOG_LEVEL, |
343 | "9074: Asymmetric advanced function disk configuration"}, | 340 | "9074: Asymmetric advanced function disk configuration"}, |
344 | {0x06678300, 0, 1, | 341 | {0x06678300, 0, IPR_DEFAULT_LOG_LEVEL, |
345 | "4040: Incomplete multipath connection between IOA and enclosure"}, | 342 | "4040: Incomplete multipath connection between IOA and enclosure"}, |
346 | {0x06678400, 0, 1, | 343 | {0x06678400, 0, IPR_DEFAULT_LOG_LEVEL, |
347 | "4041: Incomplete multipath connection between enclosure and device"}, | 344 | "4041: Incomplete multipath connection between enclosure and device"}, |
348 | {0x06678500, 0, 1, | 345 | {0x06678500, 0, IPR_DEFAULT_LOG_LEVEL, |
349 | "9075: Incomplete multipath connection between IOA and remote IOA"}, | 346 | "9075: Incomplete multipath connection between IOA and remote IOA"}, |
350 | {0x06678600, 0, 1, | 347 | {0x06678600, 0, IPR_DEFAULT_LOG_LEVEL, |
351 | "9076: Configuration error, missing remote IOA"}, | 348 | "9076: Configuration error, missing remote IOA"}, |
352 | {0x06679100, 0, 1, | 349 | {0x06679100, 0, IPR_DEFAULT_LOG_LEVEL, |
353 | "4050: Enclosure does not support a required multipath function"}, | 350 | "4050: Enclosure does not support a required multipath function"}, |
354 | {0x06690200, 0, 1, | 351 | {0x06690200, 0, IPR_DEFAULT_LOG_LEVEL, |
355 | "9041: Array protection temporarily suspended"}, | 352 | "9041: Array protection temporarily suspended"}, |
356 | {0x06698200, 0, 1, | 353 | {0x06698200, 0, IPR_DEFAULT_LOG_LEVEL, |
357 | "9042: Corrupt array parity detected on specified device"}, | 354 | "9042: Corrupt array parity detected on specified device"}, |
358 | {0x066B0200, 0, 1, | 355 | {0x066B0200, 0, IPR_DEFAULT_LOG_LEVEL, |
359 | "9030: Array no longer protected due to missing or failed disk unit"}, | 356 | "9030: Array no longer protected due to missing or failed disk unit"}, |
360 | {0x066B8000, 0, 1, | 357 | {0x066B8000, 0, IPR_DEFAULT_LOG_LEVEL, |
361 | "9071: Link operational transition"}, | 358 | "9071: Link operational transition"}, |
362 | {0x066B8100, 0, 1, | 359 | {0x066B8100, 0, IPR_DEFAULT_LOG_LEVEL, |
363 | "9072: Link not operational transition"}, | 360 | "9072: Link not operational transition"}, |
364 | {0x066B8200, 0, 1, | 361 | {0x066B8200, 0, IPR_DEFAULT_LOG_LEVEL, |
365 | "9032: Array exposed but still protected"}, | 362 | "9032: Array exposed but still protected"}, |
366 | {0x066B9100, 0, 1, | 363 | {0x066B8300, 0, IPR_DEFAULT_LOG_LEVEL + 1, |
364 | "70DD: Device forced failed by disrupt device command"}, | ||
365 | {0x066B9100, 0, IPR_DEFAULT_LOG_LEVEL, | ||
367 | "4061: Multipath redundancy level got better"}, | 366 | "4061: Multipath redundancy level got better"}, |
368 | {0x066B9200, 0, 1, | 367 | {0x066B9200, 0, IPR_DEFAULT_LOG_LEVEL, |
369 | "4060: Multipath redundancy level got worse"}, | 368 | "4060: Multipath redundancy level got worse"}, |
370 | {0x07270000, 0, 0, | 369 | {0x07270000, 0, 0, |
371 | "Failure due to other device"}, | 370 | "Failure due to other device"}, |
372 | {0x07278000, 0, 1, | 371 | {0x07278000, 0, IPR_DEFAULT_LOG_LEVEL, |
373 | "9008: IOA does not support functions expected by devices"}, | 372 | "9008: IOA does not support functions expected by devices"}, |
374 | {0x07278100, 0, 1, | 373 | {0x07278100, 0, IPR_DEFAULT_LOG_LEVEL, |
375 | "9010: Cache data associated with attached devices cannot be found"}, | 374 | "9010: Cache data associated with attached devices cannot be found"}, |
376 | {0x07278200, 0, 1, | 375 | {0x07278200, 0, IPR_DEFAULT_LOG_LEVEL, |
377 | "9011: Cache data belongs to devices other than those attached"}, | 376 | "9011: Cache data belongs to devices other than those attached"}, |
378 | {0x07278400, 0, 1, | 377 | {0x07278400, 0, IPR_DEFAULT_LOG_LEVEL, |
379 | "9020: Array missing 2 or more devices with only 1 device present"}, | 378 | "9020: Array missing 2 or more devices with only 1 device present"}, |
380 | {0x07278500, 0, 1, | 379 | {0x07278500, 0, IPR_DEFAULT_LOG_LEVEL, |
381 | "9021: Array missing 2 or more devices with 2 or more devices present"}, | 380 | "9021: Array missing 2 or more devices with 2 or more devices present"}, |
382 | {0x07278600, 0, 1, | 381 | {0x07278600, 0, IPR_DEFAULT_LOG_LEVEL, |
383 | "9022: Exposed array is missing a required device"}, | 382 | "9022: Exposed array is missing a required device"}, |
384 | {0x07278700, 0, 1, | 383 | {0x07278700, 0, IPR_DEFAULT_LOG_LEVEL, |
385 | "9023: Array member(s) not at required physical locations"}, | 384 | "9023: Array member(s) not at required physical locations"}, |
386 | {0x07278800, 0, 1, | 385 | {0x07278800, 0, IPR_DEFAULT_LOG_LEVEL, |
387 | "9024: Array not functional due to present hardware configuration"}, | 386 | "9024: Array not functional due to present hardware configuration"}, |
388 | {0x07278900, 0, 1, | 387 | {0x07278900, 0, IPR_DEFAULT_LOG_LEVEL, |
389 | "9026: Array not functional due to present hardware configuration"}, | 388 | "9026: Array not functional due to present hardware configuration"}, |
390 | {0x07278A00, 0, 1, | 389 | {0x07278A00, 0, IPR_DEFAULT_LOG_LEVEL, |
391 | "9027: Array is missing a device and parity is out of sync"}, | 390 | "9027: Array is missing a device and parity is out of sync"}, |
392 | {0x07278B00, 0, 1, | 391 | {0x07278B00, 0, IPR_DEFAULT_LOG_LEVEL, |
393 | "9028: Maximum number of arrays already exist"}, | 392 | "9028: Maximum number of arrays already exist"}, |
394 | {0x07278C00, 0, 1, | 393 | {0x07278C00, 0, IPR_DEFAULT_LOG_LEVEL, |
395 | "9050: Required cache data cannot be located for a disk unit"}, | 394 | "9050: Required cache data cannot be located for a disk unit"}, |
396 | {0x07278D00, 0, 1, | 395 | {0x07278D00, 0, IPR_DEFAULT_LOG_LEVEL, |
397 | "9052: Cache data exists for a device that has been modified"}, | 396 | "9052: Cache data exists for a device that has been modified"}, |
398 | {0x07278F00, 0, 1, | 397 | {0x07278F00, 0, IPR_DEFAULT_LOG_LEVEL, |
399 | "9054: IOA resources not available due to previous problems"}, | 398 | "9054: IOA resources not available due to previous problems"}, |
400 | {0x07279100, 0, 1, | 399 | {0x07279100, 0, IPR_DEFAULT_LOG_LEVEL, |
401 | "9092: Disk unit requires initialization before use"}, | 400 | "9092: Disk unit requires initialization before use"}, |
402 | {0x07279200, 0, 1, | 401 | {0x07279200, 0, IPR_DEFAULT_LOG_LEVEL, |
403 | "9029: Incorrect hardware configuration change has been detected"}, | 402 | "9029: Incorrect hardware configuration change has been detected"}, |
404 | {0x07279600, 0, 1, | 403 | {0x07279600, 0, IPR_DEFAULT_LOG_LEVEL, |
405 | "9060: One or more disk pairs are missing from an array"}, | 404 | "9060: One or more disk pairs are missing from an array"}, |
406 | {0x07279700, 0, 1, | 405 | {0x07279700, 0, IPR_DEFAULT_LOG_LEVEL, |
407 | "9061: One or more disks are missing from an array"}, | 406 | "9061: One or more disks are missing from an array"}, |
408 | {0x07279800, 0, 1, | 407 | {0x07279800, 0, IPR_DEFAULT_LOG_LEVEL, |
409 | "9062: One or more disks are missing from an array"}, | 408 | "9062: One or more disks are missing from an array"}, |
410 | {0x07279900, 0, 1, | 409 | {0x07279900, 0, IPR_DEFAULT_LOG_LEVEL, |
411 | "9063: Maximum number of functional arrays has been exceeded"}, | 410 | "9063: Maximum number of functional arrays has been exceeded"}, |
412 | {0x0B260000, 0, 0, | 411 | {0x0B260000, 0, 0, |
413 | "Aborted command, invalid descriptor"}, | 412 | "Aborted command, invalid descriptor"}, |
@@ -481,12 +480,16 @@ static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd) | |||
481 | { | 480 | { |
482 | struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; | 481 | struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; |
483 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; | 482 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; |
483 | dma_addr_t dma_addr = be32_to_cpu(ioarcb->ioarcb_host_pci_addr); | ||
484 | 484 | ||
485 | memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); | 485 | memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); |
486 | ioarcb->write_data_transfer_length = 0; | 486 | ioarcb->write_data_transfer_length = 0; |
487 | ioarcb->read_data_transfer_length = 0; | 487 | ioarcb->read_data_transfer_length = 0; |
488 | ioarcb->write_ioadl_len = 0; | 488 | ioarcb->write_ioadl_len = 0; |
489 | ioarcb->read_ioadl_len = 0; | 489 | ioarcb->read_ioadl_len = 0; |
490 | ioarcb->write_ioadl_addr = | ||
491 | cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioadl)); | ||
492 | ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; | ||
490 | ioasa->ioasc = 0; | 493 | ioasa->ioasc = 0; |
491 | ioasa->residual_data_len = 0; | 494 | ioasa->residual_data_len = 0; |
492 | ioasa->u.gata.status = 0; | 495 | ioasa->u.gata.status = 0; |
@@ -1610,7 +1613,7 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, | |||
1610 | /* Set indication we have logged an error */ | 1613 | /* Set indication we have logged an error */ |
1611 | ioa_cfg->errors_logged++; | 1614 | ioa_cfg->errors_logged++; |
1612 | 1615 | ||
1613 | if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) | 1616 | if (ioa_cfg->log_level < ipr_error_table[error_index].log_hcam) |
1614 | return; | 1617 | return; |
1615 | if (be32_to_cpu(hostrcb->hcam.length) > sizeof(hostrcb->hcam.u.raw)) | 1618 | if (be32_to_cpu(hostrcb->hcam.length) > sizeof(hostrcb->hcam.u.raw)) |
1616 | hostrcb->hcam.length = cpu_to_be32(sizeof(hostrcb->hcam.u.raw)); | 1619 | hostrcb->hcam.length = cpu_to_be32(sizeof(hostrcb->hcam.u.raw)); |
@@ -3850,6 +3853,8 @@ static int __ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd) | |||
3850 | if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) { | 3853 | if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) { |
3851 | if (ipr_cmd->scsi_cmd) | 3854 | if (ipr_cmd->scsi_cmd) |
3852 | ipr_cmd->done = ipr_scsi_eh_done; | 3855 | ipr_cmd->done = ipr_scsi_eh_done; |
3856 | if (ipr_cmd->qc) | ||
3857 | ipr_cmd->done = ipr_sata_eh_done; | ||
3853 | if (ipr_cmd->qc && !(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { | 3858 | if (ipr_cmd->qc && !(ipr_cmd->qc->flags & ATA_QCFLAG_FAILED)) { |
3854 | ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; | 3859 | ipr_cmd->qc->err_mask |= AC_ERR_TIMEOUT; |
3855 | ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; | 3860 | ipr_cmd->qc->flags |= ATA_QCFLAG_FAILED; |
@@ -4230,6 +4235,14 @@ static int ipr_build_ioadl(struct ipr_ioa_cfg *ioa_cfg, | |||
4230 | 4235 | ||
4231 | sglist = scsi_cmd->request_buffer; | 4236 | sglist = scsi_cmd->request_buffer; |
4232 | 4237 | ||
4238 | if (ipr_cmd->dma_use_sg <= ARRAY_SIZE(ioarcb->add_data.u.ioadl)) { | ||
4239 | ioadl = ioarcb->add_data.u.ioadl; | ||
4240 | ioarcb->write_ioadl_addr = | ||
4241 | cpu_to_be32(be32_to_cpu(ioarcb->ioarcb_host_pci_addr) + | ||
4242 | offsetof(struct ipr_ioarcb, add_data)); | ||
4243 | ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; | ||
4244 | } | ||
4245 | |||
4233 | for (i = 0; i < ipr_cmd->dma_use_sg; i++) { | 4246 | for (i = 0; i < ipr_cmd->dma_use_sg; i++) { |
4234 | ioadl[i].flags_and_data_len = | 4247 | ioadl[i].flags_and_data_len = |
4235 | cpu_to_be32(ioadl_flags | sg_dma_len(&sglist[i])); | 4248 | cpu_to_be32(ioadl_flags | sg_dma_len(&sglist[i])); |
@@ -4260,6 +4273,11 @@ static int ipr_build_ioadl(struct ipr_ioa_cfg *ioa_cfg, | |||
4260 | scsi_cmd->sc_data_direction); | 4273 | scsi_cmd->sc_data_direction); |
4261 | 4274 | ||
4262 | if (likely(!pci_dma_mapping_error(ipr_cmd->dma_handle))) { | 4275 | if (likely(!pci_dma_mapping_error(ipr_cmd->dma_handle))) { |
4276 | ioadl = ioarcb->add_data.u.ioadl; | ||
4277 | ioarcb->write_ioadl_addr = | ||
4278 | cpu_to_be32(be32_to_cpu(ioarcb->ioarcb_host_pci_addr) + | ||
4279 | offsetof(struct ipr_ioarcb, add_data)); | ||
4280 | ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; | ||
4263 | ipr_cmd->dma_use_sg = 1; | 4281 | ipr_cmd->dma_use_sg = 1; |
4264 | ioadl[0].flags_and_data_len = | 4282 | ioadl[0].flags_and_data_len = |
4265 | cpu_to_be32(ioadl_flags | length | IPR_IOADL_FLAGS_LAST); | 4283 | cpu_to_be32(ioadl_flags | length | IPR_IOADL_FLAGS_LAST); |
@@ -4346,11 +4364,9 @@ static void ipr_erp_done(struct ipr_cmnd *ipr_cmd) | |||
4346 | **/ | 4364 | **/ |
4347 | static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) | 4365 | static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) |
4348 | { | 4366 | { |
4349 | struct ipr_ioarcb *ioarcb; | 4367 | struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; |
4350 | struct ipr_ioasa *ioasa; | 4368 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; |
4351 | 4369 | dma_addr_t dma_addr = be32_to_cpu(ioarcb->ioarcb_host_pci_addr); | |
4352 | ioarcb = &ipr_cmd->ioarcb; | ||
4353 | ioasa = &ipr_cmd->ioasa; | ||
4354 | 4370 | ||
4355 | memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); | 4371 | memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt)); |
4356 | ioarcb->write_data_transfer_length = 0; | 4372 | ioarcb->write_data_transfer_length = 0; |
@@ -4359,6 +4375,9 @@ static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd) | |||
4359 | ioarcb->read_ioadl_len = 0; | 4375 | ioarcb->read_ioadl_len = 0; |
4360 | ioasa->ioasc = 0; | 4376 | ioasa->ioasc = 0; |
4361 | ioasa->residual_data_len = 0; | 4377 | ioasa->residual_data_len = 0; |
4378 | ioarcb->write_ioadl_addr = | ||
4379 | cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioadl)); | ||
4380 | ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr; | ||
4362 | } | 4381 | } |
4363 | 4382 | ||
4364 | /** | 4383 | /** |
@@ -4457,12 +4476,13 @@ static void ipr_dump_ioasa(struct ipr_ioa_cfg *ioa_cfg, | |||
4457 | { | 4476 | { |
4458 | int i; | 4477 | int i; |
4459 | u16 data_len; | 4478 | u16 data_len; |
4460 | u32 ioasc; | 4479 | u32 ioasc, fd_ioasc; |
4461 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; | 4480 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; |
4462 | __be32 *ioasa_data = (__be32 *)ioasa; | 4481 | __be32 *ioasa_data = (__be32 *)ioasa; |
4463 | int error_index; | 4482 | int error_index; |
4464 | 4483 | ||
4465 | ioasc = be32_to_cpu(ioasa->ioasc) & IPR_IOASC_IOASC_MASK; | 4484 | ioasc = be32_to_cpu(ioasa->ioasc) & IPR_IOASC_IOASC_MASK; |
4485 | fd_ioasc = be32_to_cpu(ioasa->fd_ioasc) & IPR_IOASC_IOASC_MASK; | ||
4466 | 4486 | ||
4467 | if (0 == ioasc) | 4487 | if (0 == ioasc) |
4468 | return; | 4488 | return; |
@@ -4470,13 +4490,19 @@ static void ipr_dump_ioasa(struct ipr_ioa_cfg *ioa_cfg, | |||
4470 | if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) | 4490 | if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL) |
4471 | return; | 4491 | return; |
4472 | 4492 | ||
4473 | error_index = ipr_get_error(ioasc); | 4493 | if (ioasc == IPR_IOASC_BUS_WAS_RESET && fd_ioasc) |
4494 | error_index = ipr_get_error(fd_ioasc); | ||
4495 | else | ||
4496 | error_index = ipr_get_error(ioasc); | ||
4474 | 4497 | ||
4475 | if (ioa_cfg->log_level < IPR_MAX_LOG_LEVEL) { | 4498 | if (ioa_cfg->log_level < IPR_MAX_LOG_LEVEL) { |
4476 | /* Don't log an error if the IOA already logged one */ | 4499 | /* Don't log an error if the IOA already logged one */ |
4477 | if (ioasa->ilid != 0) | 4500 | if (ioasa->ilid != 0) |
4478 | return; | 4501 | return; |
4479 | 4502 | ||
4503 | if (!ipr_is_gscsi(res)) | ||
4504 | return; | ||
4505 | |||
4480 | if (ipr_error_table[error_index].log_ioasa == 0) | 4506 | if (ipr_error_table[error_index].log_ioasa == 0) |
4481 | return; | 4507 | return; |
4482 | } | 4508 | } |
@@ -4636,11 +4662,11 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg, | |||
4636 | return; | 4662 | return; |
4637 | } | 4663 | } |
4638 | 4664 | ||
4639 | if (ipr_is_gscsi(res)) | 4665 | if (!ipr_is_gscsi(res)) |
4640 | ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); | ||
4641 | else | ||
4642 | ipr_gen_sense(ipr_cmd); | 4666 | ipr_gen_sense(ipr_cmd); |
4643 | 4667 | ||
4668 | ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); | ||
4669 | |||
4644 | switch (ioasc & IPR_IOASC_IOASC_MASK) { | 4670 | switch (ioasc & IPR_IOASC_IOASC_MASK) { |
4645 | case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST: | 4671 | case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST: |
4646 | if (ipr_is_naca_model(res)) | 4672 | if (ipr_is_naca_model(res)) |
@@ -5121,7 +5147,7 @@ static unsigned int ipr_qc_issue(struct ata_queued_cmd *qc) | |||
5121 | struct ipr_ioarcb_ata_regs *regs; | 5147 | struct ipr_ioarcb_ata_regs *regs; |
5122 | 5148 | ||
5123 | if (unlikely(!ioa_cfg->allow_cmds || ioa_cfg->ioa_is_dead)) | 5149 | if (unlikely(!ioa_cfg->allow_cmds || ioa_cfg->ioa_is_dead)) |
5124 | return -EIO; | 5150 | return AC_ERR_SYSTEM; |
5125 | 5151 | ||
5126 | ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); | 5152 | ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg); |
5127 | ioarcb = &ipr_cmd->ioarcb; | 5153 | ioarcb = &ipr_cmd->ioarcb; |
@@ -5166,7 +5192,7 @@ static unsigned int ipr_qc_issue(struct ata_queued_cmd *qc) | |||
5166 | 5192 | ||
5167 | default: | 5193 | default: |
5168 | WARN_ON(1); | 5194 | WARN_ON(1); |
5169 | return -1; | 5195 | return AC_ERR_INVALID; |
5170 | } | 5196 | } |
5171 | 5197 | ||
5172 | mb(); | 5198 | mb(); |
@@ -6188,7 +6214,7 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) | |||
6188 | dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n"); | 6214 | dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n"); |
6189 | 6215 | ||
6190 | ipr_cmd->timer.data = (unsigned long) ipr_cmd; | 6216 | ipr_cmd->timer.data = (unsigned long) ipr_cmd; |
6191 | ipr_cmd->timer.expires = jiffies + (ipr_transop_timeout * HZ); | 6217 | ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); |
6192 | ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; | 6218 | ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; |
6193 | ipr_cmd->done = ipr_reset_ioa_job; | 6219 | ipr_cmd->done = ipr_reset_ioa_job; |
6194 | add_timer(&ipr_cmd->timer); | 6220 | add_timer(&ipr_cmd->timer); |
@@ -6385,6 +6411,7 @@ static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd) | |||
6385 | rc = pci_write_config_byte(ioa_cfg->pdev, PCI_BIST, PCI_BIST_START); | 6411 | rc = pci_write_config_byte(ioa_cfg->pdev, PCI_BIST, PCI_BIST_START); |
6386 | 6412 | ||
6387 | if (rc != PCIBIOS_SUCCESSFUL) { | 6413 | if (rc != PCIBIOS_SUCCESSFUL) { |
6414 | pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev); | ||
6388 | ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); | 6415 | ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR); |
6389 | rc = IPR_RC_JOB_CONTINUE; | 6416 | rc = IPR_RC_JOB_CONTINUE; |
6390 | } else { | 6417 | } else { |
@@ -7117,8 +7144,6 @@ static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg, | |||
7117 | ioa_cfg->pdev = pdev; | 7144 | ioa_cfg->pdev = pdev; |
7118 | ioa_cfg->log_level = ipr_log_level; | 7145 | ioa_cfg->log_level = ipr_log_level; |
7119 | ioa_cfg->doorbell = IPR_DOORBELL; | 7146 | ioa_cfg->doorbell = IPR_DOORBELL; |
7120 | if (!ipr_auto_create) | ||
7121 | ioa_cfg->doorbell |= IPR_RUNTIME_RESET; | ||
7122 | sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER); | 7147 | sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER); |
7123 | sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL); | 7148 | sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL); |
7124 | sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL); | 7149 | sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL); |
@@ -7233,6 +7258,13 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev, | |||
7233 | goto out_scsi_host_put; | 7258 | goto out_scsi_host_put; |
7234 | } | 7259 | } |
7235 | 7260 | ||
7261 | if (ipr_transop_timeout) | ||
7262 | ioa_cfg->transop_timeout = ipr_transop_timeout; | ||
7263 | else if (dev_id->driver_data & IPR_USE_LONG_TRANSOP_TIMEOUT) | ||
7264 | ioa_cfg->transop_timeout = IPR_LONG_OPERATIONAL_TIMEOUT; | ||
7265 | else | ||
7266 | ioa_cfg->transop_timeout = IPR_OPERATIONAL_TIMEOUT; | ||
7267 | |||
7236 | ipr_regs_pci = pci_resource_start(pdev, 0); | 7268 | ipr_regs_pci = pci_resource_start(pdev, 0); |
7237 | 7269 | ||
7238 | rc = pci_request_regions(pdev, IPR_NAME); | 7270 | rc = pci_request_regions(pdev, IPR_NAME); |
@@ -7540,29 +7572,45 @@ static struct pci_device_id ipr_pci_table[] __devinitdata = { | |||
7540 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, | 7572 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, |
7541 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A, 0, 0, 0 }, | 7573 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571A, 0, 0, 0 }, |
7542 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, | 7574 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CITRINE, |
7543 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B, 0, 0, 0 }, | 7575 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575B, 0, 0, |
7576 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7544 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, | 7577 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, |
7545 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, | 7578 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, |
7546 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, | 7579 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, |
7547 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, | 7580 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, |
7548 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, | 7581 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN, |
7549 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, 0 }, | 7582 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, |
7583 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7550 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, | 7584 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, |
7551 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, | 7585 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572A, 0, 0, 0 }, |
7552 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, | 7586 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, |
7553 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, | 7587 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572B, 0, 0, 0 }, |
7554 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, | 7588 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN, |
7555 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, 0 }, | 7589 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575C, 0, 0, |
7590 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7591 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, | ||
7592 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574E, 0, 0, 0 }, | ||
7593 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, | ||
7594 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_575D, 0, 0, | ||
7595 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7596 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, | ||
7597 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B3, 0, 0, 0 }, | ||
7556 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, | 7598 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN_E, |
7557 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7, 0, 0, 0 }, | 7599 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_57B7, 0, 0, |
7600 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7558 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE, | 7601 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE, |
7559 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, 0, 0, 0 }, | 7602 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780, 0, 0, 0 }, |
7560 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, | 7603 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, |
7561 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E, 0, 0, 0 }, | 7604 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571E, 0, 0, 0 }, |
7562 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, | 7605 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, |
7563 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F, 0, 0, 0 }, | 7606 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_571F, 0, 0, |
7607 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7564 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, | 7608 | { PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_SCAMP, |
7565 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F, 0, 0, 0 }, | 7609 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572F, 0, 0, |
7610 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7611 | { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SCAMP_E, | ||
7612 | PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_574D, 0, 0, | ||
7613 | IPR_USE_LONG_TRANSOP_TIMEOUT }, | ||
7566 | { } | 7614 | { } |
7567 | }; | 7615 | }; |
7568 | MODULE_DEVICE_TABLE(pci, ipr_pci_table); | 7616 | MODULE_DEVICE_TABLE(pci, ipr_pci_table); |