diff options
-rw-r--r-- | drivers/scsi/aacraid/aachba.c | 243 | ||||
-rw-r--r-- | drivers/scsi/aacraid/aacraid.h | 310 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 80 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commsup.c | 201 | ||||
-rw-r--r-- | drivers/scsi/aacraid/linit.c | 88 |
5 files changed, 458 insertions, 464 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 9bd7173072fe..8d7b7703ee2a 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
@@ -56,54 +56,54 @@ | |||
56 | /* | 56 | /* |
57 | * Sense codes | 57 | * Sense codes |
58 | */ | 58 | */ |
59 | 59 | ||
60 | #define SENCODE_NO_SENSE 0x00 | 60 | #define SENCODE_NO_SENSE 0x00 |
61 | #define SENCODE_END_OF_DATA 0x00 | 61 | #define SENCODE_END_OF_DATA 0x00 |
62 | #define SENCODE_BECOMING_READY 0x04 | 62 | #define SENCODE_BECOMING_READY 0x04 |
63 | #define SENCODE_INIT_CMD_REQUIRED 0x04 | 63 | #define SENCODE_INIT_CMD_REQUIRED 0x04 |
64 | #define SENCODE_PARAM_LIST_LENGTH_ERROR 0x1A | 64 | #define SENCODE_PARAM_LIST_LENGTH_ERROR 0x1A |
65 | #define SENCODE_INVALID_COMMAND 0x20 | 65 | #define SENCODE_INVALID_COMMAND 0x20 |
66 | #define SENCODE_LBA_OUT_OF_RANGE 0x21 | 66 | #define SENCODE_LBA_OUT_OF_RANGE 0x21 |
67 | #define SENCODE_INVALID_CDB_FIELD 0x24 | 67 | #define SENCODE_INVALID_CDB_FIELD 0x24 |
68 | #define SENCODE_LUN_NOT_SUPPORTED 0x25 | 68 | #define SENCODE_LUN_NOT_SUPPORTED 0x25 |
69 | #define SENCODE_INVALID_PARAM_FIELD 0x26 | 69 | #define SENCODE_INVALID_PARAM_FIELD 0x26 |
70 | #define SENCODE_PARAM_NOT_SUPPORTED 0x26 | 70 | #define SENCODE_PARAM_NOT_SUPPORTED 0x26 |
71 | #define SENCODE_PARAM_VALUE_INVALID 0x26 | 71 | #define SENCODE_PARAM_VALUE_INVALID 0x26 |
72 | #define SENCODE_RESET_OCCURRED 0x29 | 72 | #define SENCODE_RESET_OCCURRED 0x29 |
73 | #define SENCODE_LUN_NOT_SELF_CONFIGURED_YET 0x3E | 73 | #define SENCODE_LUN_NOT_SELF_CONFIGURED_YET 0x3E |
74 | #define SENCODE_INQUIRY_DATA_CHANGED 0x3F | 74 | #define SENCODE_INQUIRY_DATA_CHANGED 0x3F |
75 | #define SENCODE_SAVING_PARAMS_NOT_SUPPORTED 0x39 | 75 | #define SENCODE_SAVING_PARAMS_NOT_SUPPORTED 0x39 |
76 | #define SENCODE_DIAGNOSTIC_FAILURE 0x40 | 76 | #define SENCODE_DIAGNOSTIC_FAILURE 0x40 |
77 | #define SENCODE_INTERNAL_TARGET_FAILURE 0x44 | 77 | #define SENCODE_INTERNAL_TARGET_FAILURE 0x44 |
78 | #define SENCODE_INVALID_MESSAGE_ERROR 0x49 | 78 | #define SENCODE_INVALID_MESSAGE_ERROR 0x49 |
79 | #define SENCODE_LUN_FAILED_SELF_CONFIG 0x4c | 79 | #define SENCODE_LUN_FAILED_SELF_CONFIG 0x4c |
80 | #define SENCODE_OVERLAPPED_COMMAND 0x4E | 80 | #define SENCODE_OVERLAPPED_COMMAND 0x4E |
81 | 81 | ||
82 | /* | 82 | /* |
83 | * Additional sense codes | 83 | * Additional sense codes |
84 | */ | 84 | */ |
85 | 85 | ||
86 | #define ASENCODE_NO_SENSE 0x00 | 86 | #define ASENCODE_NO_SENSE 0x00 |
87 | #define ASENCODE_END_OF_DATA 0x05 | 87 | #define ASENCODE_END_OF_DATA 0x05 |
88 | #define ASENCODE_BECOMING_READY 0x01 | 88 | #define ASENCODE_BECOMING_READY 0x01 |
89 | #define ASENCODE_INIT_CMD_REQUIRED 0x02 | 89 | #define ASENCODE_INIT_CMD_REQUIRED 0x02 |
90 | #define ASENCODE_PARAM_LIST_LENGTH_ERROR 0x00 | 90 | #define ASENCODE_PARAM_LIST_LENGTH_ERROR 0x00 |
91 | #define ASENCODE_INVALID_COMMAND 0x00 | 91 | #define ASENCODE_INVALID_COMMAND 0x00 |
92 | #define ASENCODE_LBA_OUT_OF_RANGE 0x00 | 92 | #define ASENCODE_LBA_OUT_OF_RANGE 0x00 |
93 | #define ASENCODE_INVALID_CDB_FIELD 0x00 | 93 | #define ASENCODE_INVALID_CDB_FIELD 0x00 |
94 | #define ASENCODE_LUN_NOT_SUPPORTED 0x00 | 94 | #define ASENCODE_LUN_NOT_SUPPORTED 0x00 |
95 | #define ASENCODE_INVALID_PARAM_FIELD 0x00 | 95 | #define ASENCODE_INVALID_PARAM_FIELD 0x00 |
96 | #define ASENCODE_PARAM_NOT_SUPPORTED 0x01 | 96 | #define ASENCODE_PARAM_NOT_SUPPORTED 0x01 |
97 | #define ASENCODE_PARAM_VALUE_INVALID 0x02 | 97 | #define ASENCODE_PARAM_VALUE_INVALID 0x02 |
98 | #define ASENCODE_RESET_OCCURRED 0x00 | 98 | #define ASENCODE_RESET_OCCURRED 0x00 |
99 | #define ASENCODE_LUN_NOT_SELF_CONFIGURED_YET 0x00 | 99 | #define ASENCODE_LUN_NOT_SELF_CONFIGURED_YET 0x00 |
100 | #define ASENCODE_INQUIRY_DATA_CHANGED 0x03 | 100 | #define ASENCODE_INQUIRY_DATA_CHANGED 0x03 |
101 | #define ASENCODE_SAVING_PARAMS_NOT_SUPPORTED 0x00 | 101 | #define ASENCODE_SAVING_PARAMS_NOT_SUPPORTED 0x00 |
102 | #define ASENCODE_DIAGNOSTIC_FAILURE 0x80 | 102 | #define ASENCODE_DIAGNOSTIC_FAILURE 0x80 |
103 | #define ASENCODE_INTERNAL_TARGET_FAILURE 0x00 | 103 | #define ASENCODE_INTERNAL_TARGET_FAILURE 0x00 |
104 | #define ASENCODE_INVALID_MESSAGE_ERROR 0x00 | 104 | #define ASENCODE_INVALID_MESSAGE_ERROR 0x00 |
105 | #define ASENCODE_LUN_FAILED_SELF_CONFIG 0x00 | 105 | #define ASENCODE_LUN_FAILED_SELF_CONFIG 0x00 |
106 | #define ASENCODE_OVERLAPPED_COMMAND 0x00 | 106 | #define ASENCODE_OVERLAPPED_COMMAND 0x00 |
107 | 107 | ||
108 | #define BYTE0(x) (unsigned char)(x) | 108 | #define BYTE0(x) (unsigned char)(x) |
109 | #define BYTE1(x) (unsigned char)((x) >> 8) | 109 | #define BYTE1(x) (unsigned char)((x) >> 8) |
@@ -115,8 +115,8 @@ | |||
115 | *----------------------------------------------------------------------------*/ | 115 | *----------------------------------------------------------------------------*/ |
116 | /* SCSI inquiry data */ | 116 | /* SCSI inquiry data */ |
117 | struct inquiry_data { | 117 | struct inquiry_data { |
118 | u8 inqd_pdt; /* Peripheral qualifier | Peripheral Device Type */ | 118 | u8 inqd_pdt; /* Peripheral qualifier | Peripheral Device Type */ |
119 | u8 inqd_dtq; /* RMB | Device Type Qualifier */ | 119 | u8 inqd_dtq; /* RMB | Device Type Qualifier */ |
120 | u8 inqd_ver; /* ISO version | ECMA version | ANSI-approved version */ | 120 | u8 inqd_ver; /* ISO version | ECMA version | ANSI-approved version */ |
121 | u8 inqd_rdf; /* AENC | TrmIOP | Response data format */ | 121 | u8 inqd_rdf; /* AENC | TrmIOP | Response data format */ |
122 | u8 inqd_len; /* Additional length (n-4) */ | 122 | u8 inqd_len; /* Additional length (n-4) */ |
@@ -130,7 +130,7 @@ struct inquiry_data { | |||
130 | /* | 130 | /* |
131 | * M O D U L E G L O B A L S | 131 | * M O D U L E G L O B A L S |
132 | */ | 132 | */ |
133 | 133 | ||
134 | static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* sgmap); | 134 | static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* sgmap); |
135 | static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* psg); | 135 | static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* psg); |
136 | static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg); | 136 | static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg); |
@@ -141,8 +141,8 @@ static char *aac_get_status_string(u32 status); | |||
141 | 141 | ||
142 | /* | 142 | /* |
143 | * Non dasd selection is handled entirely in aachba now | 143 | * Non dasd selection is handled entirely in aachba now |
144 | */ | 144 | */ |
145 | 145 | ||
146 | static int nondasd = -1; | 146 | static int nondasd = -1; |
147 | static int aac_cache = 0; | 147 | static int aac_cache = 0; |
148 | static int dacmode = -1; | 148 | static int dacmode = -1; |
@@ -196,12 +196,12 @@ static inline int aac_valid_context(struct scsi_cmnd *scsicmd, | |||
196 | struct fib *fibptr) { | 196 | struct fib *fibptr) { |
197 | struct scsi_device *device; | 197 | struct scsi_device *device; |
198 | 198 | ||
199 | if (unlikely(!scsicmd || !scsicmd->scsi_done )) { | 199 | if (unlikely(!scsicmd || !scsicmd->scsi_done)) { |
200 | dprintk((KERN_WARNING "aac_valid_context: scsi command corrupt\n")); | 200 | dprintk((KERN_WARNING "aac_valid_context: scsi command corrupt\n")); |
201 | aac_fib_complete(fibptr); | 201 | aac_fib_complete(fibptr); |
202 | aac_fib_free(fibptr); | 202 | aac_fib_free(fibptr); |
203 | return 0; | 203 | return 0; |
204 | } | 204 | } |
205 | scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; | 205 | scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL; |
206 | device = scsicmd->device; | 206 | device = scsicmd->device; |
207 | if (unlikely(!device || !scsi_device_online(device))) { | 207 | if (unlikely(!device || !scsi_device_online(device))) { |
@@ -243,7 +243,7 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag) | |||
243 | FsaNormal, | 243 | FsaNormal, |
244 | 1, 1, | 244 | 1, 1, |
245 | NULL, NULL); | 245 | NULL, NULL); |
246 | if (status < 0 ) { | 246 | if (status < 0) { |
247 | printk(KERN_WARNING "aac_get_config_status: SendFIB failed.\n"); | 247 | printk(KERN_WARNING "aac_get_config_status: SendFIB failed.\n"); |
248 | } else { | 248 | } else { |
249 | struct aac_get_config_status_resp *reply | 249 | struct aac_get_config_status_resp *reply |
@@ -267,10 +267,10 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag) | |||
267 | struct aac_commit_config * dinfo; | 267 | struct aac_commit_config * dinfo; |
268 | aac_fib_init(fibptr); | 268 | aac_fib_init(fibptr); |
269 | dinfo = (struct aac_commit_config *) fib_data(fibptr); | 269 | dinfo = (struct aac_commit_config *) fib_data(fibptr); |
270 | 270 | ||
271 | dinfo->command = cpu_to_le32(VM_ContainerConfig); | 271 | dinfo->command = cpu_to_le32(VM_ContainerConfig); |
272 | dinfo->type = cpu_to_le32(CT_COMMIT_CONFIG); | 272 | dinfo->type = cpu_to_le32(CT_COMMIT_CONFIG); |
273 | 273 | ||
274 | status = aac_fib_send(ContainerCommand, | 274 | status = aac_fib_send(ContainerCommand, |
275 | fibptr, | 275 | fibptr, |
276 | sizeof (struct aac_commit_config), | 276 | sizeof (struct aac_commit_config), |
@@ -296,7 +296,7 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag) | |||
296 | int aac_get_containers(struct aac_dev *dev) | 296 | int aac_get_containers(struct aac_dev *dev) |
297 | { | 297 | { |
298 | struct fsa_dev_info *fsa_dev_ptr; | 298 | struct fsa_dev_info *fsa_dev_ptr; |
299 | u32 index; | 299 | u32 index; |
300 | int status = 0; | 300 | int status = 0; |
301 | struct fib * fibptr; | 301 | struct fib * fibptr; |
302 | struct aac_get_container_count *dinfo; | 302 | struct aac_get_container_count *dinfo; |
@@ -399,7 +399,7 @@ static void get_container_name_callback(void *context, struct fib * fibptr) | |||
399 | do { | 399 | do { |
400 | *dp++ = (*sp) ? *sp++ : ' '; | 400 | *dp++ = (*sp) ? *sp++ : ' '; |
401 | } while (--count > 0); | 401 | } while (--count > 0); |
402 | aac_internal_transfer(scsicmd, d, | 402 | aac_internal_transfer(scsicmd, d, |
403 | offsetof(struct inquiry_data, inqd_pid), sizeof(d)); | 403 | offsetof(struct inquiry_data, inqd_pid), sizeof(d)); |
404 | } | 404 | } |
405 | } | 405 | } |
@@ -435,13 +435,13 @@ static int aac_get_container_name(struct scsi_cmnd * scsicmd) | |||
435 | dinfo->count = cpu_to_le32(sizeof(((struct aac_get_name_resp *)NULL)->data)); | 435 | dinfo->count = cpu_to_le32(sizeof(((struct aac_get_name_resp *)NULL)->data)); |
436 | 436 | ||
437 | status = aac_fib_send(ContainerCommand, | 437 | status = aac_fib_send(ContainerCommand, |
438 | cmd_fibcontext, | 438 | cmd_fibcontext, |
439 | sizeof (struct aac_get_name), | 439 | sizeof (struct aac_get_name), |
440 | FsaNormal, | 440 | FsaNormal, |
441 | 0, 1, | 441 | 0, 1, |
442 | (fib_callback) get_container_name_callback, | 442 | (fib_callback)get_container_name_callback, |
443 | (void *) scsicmd); | 443 | (void *) scsicmd); |
444 | 444 | ||
445 | /* | 445 | /* |
446 | * Check that the command queued to the controller | 446 | * Check that the command queued to the controller |
447 | */ | 447 | */ |
@@ -449,7 +449,7 @@ static int aac_get_container_name(struct scsi_cmnd * scsicmd) | |||
449 | scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; | 449 | scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; |
450 | return 0; | 450 | return 0; |
451 | } | 451 | } |
452 | 452 | ||
453 | printk(KERN_WARNING "aac_get_container_name: aac_fib_send failed with status: %d.\n", status); | 453 | printk(KERN_WARNING "aac_get_container_name: aac_fib_send failed with status: %d.\n", status); |
454 | aac_fib_complete(cmd_fibcontext); | 454 | aac_fib_complete(cmd_fibcontext); |
455 | aac_fib_free(cmd_fibcontext); | 455 | aac_fib_free(cmd_fibcontext); |
@@ -656,39 +656,39 @@ struct scsi_inq { | |||
656 | * @a: string to copy from | 656 | * @a: string to copy from |
657 | * @b: string to copy to | 657 | * @b: string to copy to |
658 | * | 658 | * |
659 | * Copy a String from one location to another | 659 | * Copy a String from one location to another |
660 | * without copying \0 | 660 | * without copying \0 |
661 | */ | 661 | */ |
662 | 662 | ||
663 | static void inqstrcpy(char *a, char *b) | 663 | static void inqstrcpy(char *a, char *b) |
664 | { | 664 | { |
665 | 665 | ||
666 | while(*a != (char)0) | 666 | while (*a != (char)0) |
667 | *b++ = *a++; | 667 | *b++ = *a++; |
668 | } | 668 | } |
669 | 669 | ||
670 | static char *container_types[] = { | 670 | static char *container_types[] = { |
671 | "None", | 671 | "None", |
672 | "Volume", | 672 | "Volume", |
673 | "Mirror", | 673 | "Mirror", |
674 | "Stripe", | 674 | "Stripe", |
675 | "RAID5", | 675 | "RAID5", |
676 | "SSRW", | 676 | "SSRW", |
677 | "SSRO", | 677 | "SSRO", |
678 | "Morph", | 678 | "Morph", |
679 | "Legacy", | 679 | "Legacy", |
680 | "RAID4", | 680 | "RAID4", |
681 | "RAID10", | 681 | "RAID10", |
682 | "RAID00", | 682 | "RAID00", |
683 | "V-MIRRORS", | 683 | "V-MIRRORS", |
684 | "PSEUDO R4", | 684 | "PSEUDO R4", |
685 | "RAID50", | 685 | "RAID50", |
686 | "RAID5D", | 686 | "RAID5D", |
687 | "RAID5D0", | 687 | "RAID5D0", |
688 | "RAID1E", | 688 | "RAID1E", |
689 | "RAID6", | 689 | "RAID6", |
690 | "RAID60", | 690 | "RAID60", |
691 | "Unknown" | 691 | "Unknown" |
692 | }; | 692 | }; |
693 | 693 | ||
694 | char * get_container_type(unsigned tindex) | 694 | char * get_container_type(unsigned tindex) |
@@ -1230,11 +1230,11 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1230 | memset(info,0,sizeof(*info)); | 1230 | memset(info,0,sizeof(*info)); |
1231 | 1231 | ||
1232 | rcode = aac_fib_send(RequestAdapterInfo, | 1232 | rcode = aac_fib_send(RequestAdapterInfo, |
1233 | fibptr, | 1233 | fibptr, |
1234 | sizeof(*info), | 1234 | sizeof(*info), |
1235 | FsaNormal, | 1235 | FsaNormal, |
1236 | -1, 1, /* First `interrupt' command uses special wait */ | 1236 | -1, 1, /* First `interrupt' command uses special wait */ |
1237 | NULL, | 1237 | NULL, |
1238 | NULL); | 1238 | NULL); |
1239 | 1239 | ||
1240 | if (rcode < 0) { | 1240 | if (rcode < 0) { |
@@ -1266,8 +1266,8 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1266 | } | 1266 | } |
1267 | 1267 | ||
1268 | 1268 | ||
1269 | /* | 1269 | /* |
1270 | * GetBusInfo | 1270 | * GetBusInfo |
1271 | */ | 1271 | */ |
1272 | 1272 | ||
1273 | aac_fib_init(fibptr); | 1273 | aac_fib_init(fibptr); |
@@ -1301,7 +1301,7 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1301 | char buffer[16]; | 1301 | char buffer[16]; |
1302 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); | 1302 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); |
1303 | printk(KERN_INFO "%s%d: kernel %d.%d-%d[%d] %.*s\n", | 1303 | printk(KERN_INFO "%s%d: kernel %d.%d-%d[%d] %.*s\n", |
1304 | dev->name, | 1304 | dev->name, |
1305 | dev->id, | 1305 | dev->id, |
1306 | tmp>>24, | 1306 | tmp>>24, |
1307 | (tmp>>16)&0xff, | 1307 | (tmp>>16)&0xff, |
@@ -1363,7 +1363,7 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1363 | if (dev->raid_scsi_mode != 0) | 1363 | if (dev->raid_scsi_mode != 0) |
1364 | printk(KERN_INFO "%s%d: ROMB RAID/SCSI mode enabled\n", | 1364 | printk(KERN_INFO "%s%d: ROMB RAID/SCSI mode enabled\n", |
1365 | dev->name, dev->id); | 1365 | dev->name, dev->id); |
1366 | 1366 | ||
1367 | if (nondasd != -1) | 1367 | if (nondasd != -1) |
1368 | dev->nondasd_support = (nondasd!=0); | 1368 | dev->nondasd_support = (nondasd!=0); |
1369 | if(dev->nondasd_support != 0) { | 1369 | if(dev->nondasd_support != 0) { |
@@ -1395,7 +1395,7 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1395 | rcode = -ENOMEM; | 1395 | rcode = -ENOMEM; |
1396 | } | 1396 | } |
1397 | } | 1397 | } |
1398 | /* | 1398 | /* |
1399 | * Deal with configuring for the individualized limits of each packet | 1399 | * Deal with configuring for the individualized limits of each packet |
1400 | * interface. | 1400 | * interface. |
1401 | */ | 1401 | */ |
@@ -1419,8 +1419,8 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
1419 | if (dev->dac_support) { | 1419 | if (dev->dac_support) { |
1420 | dev->a_ops.adapter_read = aac_read_block64; | 1420 | dev->a_ops.adapter_read = aac_read_block64; |
1421 | dev->a_ops.adapter_write = aac_write_block64; | 1421 | dev->a_ops.adapter_write = aac_write_block64; |
1422 | /* | 1422 | /* |
1423 | * 38 scatter gather elements | 1423 | * 38 scatter gather elements |
1424 | */ | 1424 | */ |
1425 | dev->scsi_host_ptr->sg_tablesize = | 1425 | dev->scsi_host_ptr->sg_tablesize = |
1426 | (dev->max_fib_size - | 1426 | (dev->max_fib_size - |
@@ -1549,7 +1549,7 @@ static int aac_read(struct scsi_cmnd * scsicmd) | |||
1549 | case READ_6: | 1549 | case READ_6: |
1550 | dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); | 1550 | dprintk((KERN_DEBUG "aachba: received a read(6) command on id %d.\n", scmd_id(scsicmd))); |
1551 | 1551 | ||
1552 | lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | | 1552 | lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | |
1553 | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; | 1553 | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3]; |
1554 | count = scsicmd->cmnd[4]; | 1554 | count = scsicmd->cmnd[4]; |
1555 | 1555 | ||
@@ -1559,32 +1559,32 @@ static int aac_read(struct scsi_cmnd * scsicmd) | |||
1559 | case READ_16: | 1559 | case READ_16: |
1560 | dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); | 1560 | dprintk((KERN_DEBUG "aachba: received a read(16) command on id %d.\n", scmd_id(scsicmd))); |
1561 | 1561 | ||
1562 | lba = ((u64)scsicmd->cmnd[2] << 56) | | 1562 | lba = ((u64)scsicmd->cmnd[2] << 56) | |
1563 | ((u64)scsicmd->cmnd[3] << 48) | | 1563 | ((u64)scsicmd->cmnd[3] << 48) | |
1564 | ((u64)scsicmd->cmnd[4] << 40) | | 1564 | ((u64)scsicmd->cmnd[4] << 40) | |
1565 | ((u64)scsicmd->cmnd[5] << 32) | | 1565 | ((u64)scsicmd->cmnd[5] << 32) | |
1566 | ((u64)scsicmd->cmnd[6] << 24) | | 1566 | ((u64)scsicmd->cmnd[6] << 24) | |
1567 | (scsicmd->cmnd[7] << 16) | | 1567 | (scsicmd->cmnd[7] << 16) | |
1568 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; | 1568 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; |
1569 | count = (scsicmd->cmnd[10] << 24) | | 1569 | count = (scsicmd->cmnd[10] << 24) | |
1570 | (scsicmd->cmnd[11] << 16) | | 1570 | (scsicmd->cmnd[11] << 16) | |
1571 | (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; | 1571 | (scsicmd->cmnd[12] << 8) | scsicmd->cmnd[13]; |
1572 | break; | 1572 | break; |
1573 | case READ_12: | 1573 | case READ_12: |
1574 | dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); | 1574 | dprintk((KERN_DEBUG "aachba: received a read(12) command on id %d.\n", scmd_id(scsicmd))); |
1575 | 1575 | ||
1576 | lba = ((u64)scsicmd->cmnd[2] << 24) | | 1576 | lba = ((u64)scsicmd->cmnd[2] << 24) | |
1577 | (scsicmd->cmnd[3] << 16) | | 1577 | (scsicmd->cmnd[3] << 16) | |
1578 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; | 1578 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; |
1579 | count = (scsicmd->cmnd[6] << 24) | | 1579 | count = (scsicmd->cmnd[6] << 24) | |
1580 | (scsicmd->cmnd[7] << 16) | | 1580 | (scsicmd->cmnd[7] << 16) | |
1581 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; | 1581 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; |
1582 | break; | 1582 | break; |
1583 | default: | 1583 | default: |
1584 | dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); | 1584 | dprintk((KERN_DEBUG "aachba: received a read(10) command on id %d.\n", scmd_id(scsicmd))); |
1585 | 1585 | ||
1586 | lba = ((u64)scsicmd->cmnd[2] << 24) | | 1586 | lba = ((u64)scsicmd->cmnd[2] << 24) | |
1587 | (scsicmd->cmnd[3] << 16) | | 1587 | (scsicmd->cmnd[3] << 16) | |
1588 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; | 1588 | (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5]; |
1589 | count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; | 1589 | count = (scsicmd->cmnd[7] << 8) | scsicmd->cmnd[8]; |
1590 | break; | 1590 | break; |
@@ -1609,7 +1609,7 @@ static int aac_read(struct scsi_cmnd * scsicmd) | |||
1609 | scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; | 1609 | scsicmd->SCp.phase = AAC_OWNER_FIRMWARE; |
1610 | return 0; | 1610 | return 0; |
1611 | } | 1611 | } |
1612 | 1612 | ||
1613 | printk(KERN_WARNING "aac_read: aac_fib_send failed with status: %d.\n", status); | 1613 | printk(KERN_WARNING "aac_read: aac_fib_send failed with status: %d.\n", status); |
1614 | /* | 1614 | /* |
1615 | * For some reason, the Fib didn't queue, return QUEUE_FULL | 1615 | * For some reason, the Fib didn't queue, return QUEUE_FULL |
@@ -1644,11 +1644,11 @@ static int aac_write(struct scsi_cmnd * scsicmd) | |||
1644 | } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ | 1644 | } else if (scsicmd->cmnd[0] == WRITE_16) { /* 16 byte command */ |
1645 | dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); | 1645 | dprintk((KERN_DEBUG "aachba: received a write(16) command on id %d.\n", scmd_id(scsicmd))); |
1646 | 1646 | ||
1647 | lba = ((u64)scsicmd->cmnd[2] << 56) | | 1647 | lba = ((u64)scsicmd->cmnd[2] << 56) | |
1648 | ((u64)scsicmd->cmnd[3] << 48) | | 1648 | ((u64)scsicmd->cmnd[3] << 48) | |
1649 | ((u64)scsicmd->cmnd[4] << 40) | | 1649 | ((u64)scsicmd->cmnd[4] << 40) | |
1650 | ((u64)scsicmd->cmnd[5] << 32) | | 1650 | ((u64)scsicmd->cmnd[5] << 32) | |
1651 | ((u64)scsicmd->cmnd[6] << 24) | | 1651 | ((u64)scsicmd->cmnd[6] << 24) | |
1652 | (scsicmd->cmnd[7] << 16) | | 1652 | (scsicmd->cmnd[7] << 16) | |
1653 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; | 1653 | (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9]; |
1654 | count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | | 1654 | count = (scsicmd->cmnd[10] << 24) | (scsicmd->cmnd[11] << 16) | |
@@ -1875,14 +1875,14 @@ static int aac_synchronize(struct scsi_cmnd *scsicmd) | |||
1875 | * Emulate a SCSI command and queue the required request for the | 1875 | * Emulate a SCSI command and queue the required request for the |
1876 | * aacraid firmware. | 1876 | * aacraid firmware. |
1877 | */ | 1877 | */ |
1878 | 1878 | ||
1879 | int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | 1879 | int aac_scsi_cmd(struct scsi_cmnd * scsicmd) |
1880 | { | 1880 | { |
1881 | u32 cid; | 1881 | u32 cid; |
1882 | struct Scsi_Host *host = scsicmd->device->host; | 1882 | struct Scsi_Host *host = scsicmd->device->host; |
1883 | struct aac_dev *dev = (struct aac_dev *)host->hostdata; | 1883 | struct aac_dev *dev = (struct aac_dev *)host->hostdata; |
1884 | struct fsa_dev_info *fsa_dev_ptr = dev->fsa_dev; | 1884 | struct fsa_dev_info *fsa_dev_ptr = dev->fsa_dev; |
1885 | 1885 | ||
1886 | if (fsa_dev_ptr == NULL) | 1886 | if (fsa_dev_ptr == NULL) |
1887 | return -1; | 1887 | return -1; |
1888 | /* | 1888 | /* |
@@ -1938,7 +1938,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
1938 | * else Command for the controller itself | 1938 | * else Command for the controller itself |
1939 | */ | 1939 | */ |
1940 | else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ | 1940 | else if ((scsicmd->cmnd[0] != INQUIRY) && /* only INQUIRY & TUR cmnd supported for controller */ |
1941 | (scsicmd->cmnd[0] != TEST_UNIT_READY)) | 1941 | (scsicmd->cmnd[0] != TEST_UNIT_READY)) |
1942 | { | 1942 | { |
1943 | dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); | 1943 | dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); |
1944 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; | 1944 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; |
@@ -1963,7 +1963,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
1963 | dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid)); | 1963 | dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", cid)); |
1964 | memset(&inq_data, 0, sizeof (struct inquiry_data)); | 1964 | memset(&inq_data, 0, sizeof (struct inquiry_data)); |
1965 | 1965 | ||
1966 | if (scsicmd->cmnd[1] & 0x1 ) { | 1966 | if (scsicmd->cmnd[1] & 0x1) { |
1967 | char *arr = (char *)&inq_data; | 1967 | char *arr = (char *)&inq_data; |
1968 | 1968 | ||
1969 | /* EVPD bit set */ | 1969 | /* EVPD bit set */ |
@@ -2204,7 +2204,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
2204 | return 0; | 2204 | return 0; |
2205 | } | 2205 | } |
2206 | 2206 | ||
2207 | switch (scsicmd->cmnd[0]) | 2207 | switch (scsicmd->cmnd[0]) |
2208 | { | 2208 | { |
2209 | case READ_6: | 2209 | case READ_6: |
2210 | case READ_10: | 2210 | case READ_10: |
@@ -2217,11 +2217,11 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
2217 | * corresponds to a container. Needed to convert | 2217 | * corresponds to a container. Needed to convert |
2218 | * containers to /dev/sd device names | 2218 | * containers to /dev/sd device names |
2219 | */ | 2219 | */ |
2220 | 2220 | ||
2221 | if (scsicmd->request->rq_disk) | 2221 | if (scsicmd->request->rq_disk) |
2222 | strlcpy(fsa_dev_ptr[cid].devname, | 2222 | strlcpy(fsa_dev_ptr[cid].devname, |
2223 | scsicmd->request->rq_disk->disk_name, | 2223 | scsicmd->request->rq_disk->disk_name, |
2224 | min(sizeof(fsa_dev_ptr[cid].devname), | 2224 | min(sizeof(fsa_dev_ptr[cid].devname), |
2225 | sizeof(scsicmd->request->rq_disk->disk_name) + 1)); | 2225 | sizeof(scsicmd->request->rq_disk->disk_name) + 1)); |
2226 | 2226 | ||
2227 | return aac_read(scsicmd); | 2227 | return aac_read(scsicmd); |
@@ -2275,7 +2275,7 @@ static int query_disk(struct aac_dev *dev, void __user *arg) | |||
2275 | return -EFAULT; | 2275 | return -EFAULT; |
2276 | if (qd.cnum == -1) | 2276 | if (qd.cnum == -1) |
2277 | qd.cnum = qd.id; | 2277 | qd.cnum = qd.id; |
2278 | else if ((qd.bus == -1) && (qd.id == -1) && (qd.lun == -1)) | 2278 | else if ((qd.bus == -1) && (qd.id == -1) && (qd.lun == -1)) |
2279 | { | 2279 | { |
2280 | if (qd.cnum < 0 || qd.cnum >= dev->maximum_num_containers) | 2280 | if (qd.cnum < 0 || qd.cnum >= dev->maximum_num_containers) |
2281 | return -EINVAL; | 2281 | return -EINVAL; |
@@ -2402,7 +2402,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr) | |||
2402 | 2402 | ||
2403 | scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ | 2403 | scsicmd->sense_buffer[0] = '\0'; /* Initialize sense valid flag to false */ |
2404 | /* | 2404 | /* |
2405 | * Calculate resid for sg | 2405 | * Calculate resid for sg |
2406 | */ | 2406 | */ |
2407 | 2407 | ||
2408 | scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) | 2408 | scsi_set_resid(scsicmd, scsi_bufflen(scsicmd) |
@@ -2442,7 +2442,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr) | |||
2442 | case WRITE_12: | 2442 | case WRITE_12: |
2443 | case READ_16: | 2443 | case READ_16: |
2444 | case WRITE_16: | 2444 | case WRITE_16: |
2445 | if(le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow ) { | 2445 | if (le32_to_cpu(srbreply->data_xfer_length) < scsicmd->underflow) { |
2446 | printk(KERN_WARNING"aacraid: SCSI CMD underflow\n"); | 2446 | printk(KERN_WARNING"aacraid: SCSI CMD underflow\n"); |
2447 | } else { | 2447 | } else { |
2448 | printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n"); | 2448 | printk(KERN_WARNING"aacraid: SCSI CMD Data Overrun\n"); |
@@ -2511,14 +2511,14 @@ static void aac_srb_callback(void *context, struct fib * fibptr) | |||
2511 | printk("aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n", | 2511 | printk("aacraid: SRB ERROR(%u) %s scsi cmd 0x%x - scsi status 0x%x\n", |
2512 | le32_to_cpu(srbreply->srb_status) & 0x3F, | 2512 | le32_to_cpu(srbreply->srb_status) & 0x3F, |
2513 | aac_get_status_string( | 2513 | aac_get_status_string( |
2514 | le32_to_cpu(srbreply->srb_status) & 0x3F), | 2514 | le32_to_cpu(srbreply->srb_status) & 0x3F), |
2515 | scsicmd->cmnd[0], | 2515 | scsicmd->cmnd[0], |
2516 | le32_to_cpu(srbreply->scsi_status)); | 2516 | le32_to_cpu(srbreply->scsi_status)); |
2517 | #endif | 2517 | #endif |
2518 | scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; | 2518 | scsicmd->result = DID_ERROR << 16 | COMMAND_COMPLETE << 8; |
2519 | break; | 2519 | break; |
2520 | } | 2520 | } |
2521 | if (le32_to_cpu(srbreply->scsi_status) == 0x02 ){ // Check Condition | 2521 | if (le32_to_cpu(srbreply->scsi_status) == SAM_STAT_CHECK_CONDITION) { |
2522 | int len; | 2522 | int len; |
2523 | scsicmd->result |= SAM_STAT_CHECK_CONDITION; | 2523 | scsicmd->result |= SAM_STAT_CHECK_CONDITION; |
2524 | len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), | 2524 | len = min_t(u32, le32_to_cpu(srbreply->sense_data_size), |
@@ -2528,7 +2528,6 @@ static void aac_srb_callback(void *context, struct fib * fibptr) | |||
2528 | le32_to_cpu(srbreply->status), len); | 2528 | le32_to_cpu(srbreply->status), len); |
2529 | #endif | 2529 | #endif |
2530 | memcpy(scsicmd->sense_buffer, srbreply->sense_data, len); | 2530 | memcpy(scsicmd->sense_buffer, srbreply->sense_data, len); |
2531 | |||
2532 | } | 2531 | } |
2533 | /* | 2532 | /* |
2534 | * OR in the scsi status (already shifted up a bit) | 2533 | * OR in the scsi status (already shifted up a bit) |
@@ -2545,7 +2544,7 @@ static void aac_srb_callback(void *context, struct fib * fibptr) | |||
2545 | * aac_send_scb_fib | 2544 | * aac_send_scb_fib |
2546 | * @scsicmd: the scsi command block | 2545 | * @scsicmd: the scsi command block |
2547 | * | 2546 | * |
2548 | * This routine will form a FIB and fill in the aac_srb from the | 2547 | * This routine will form a FIB and fill in the aac_srb from the |
2549 | * scsicmd passed in. | 2548 | * scsicmd passed in. |
2550 | */ | 2549 | */ |
2551 | 2550 | ||
@@ -2759,7 +2758,7 @@ static struct aac_srb_status_info srb_status_info[] = { | |||
2759 | { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"}, | 2758 | { SRB_STATUS_ERROR_RECOVERY, "Error Recovery"}, |
2760 | { SRB_STATUS_NOT_STARTED, "Not Started"}, | 2759 | { SRB_STATUS_NOT_STARTED, "Not Started"}, |
2761 | { SRB_STATUS_NOT_IN_USE, "Not In Use"}, | 2760 | { SRB_STATUS_NOT_IN_USE, "Not In Use"}, |
2762 | { SRB_STATUS_FORCE_ABORT, "Force Abort"}, | 2761 | { SRB_STATUS_FORCE_ABORT, "Force Abort"}, |
2763 | { SRB_STATUS_DOMAIN_VALIDATION_FAIL,"Domain Validation Failure"}, | 2762 | { SRB_STATUS_DOMAIN_VALIDATION_FAIL,"Domain Validation Failure"}, |
2764 | { 0xff, "Unknown Error"} | 2763 | { 0xff, "Unknown Error"} |
2765 | }; | 2764 | }; |
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 858b97494343..8a5b9c898e5b 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
@@ -1,4 +1,4 @@ | |||
1 | #if (!defined(dprintk)) | 1 | #ifndef dprintk |
2 | # define dprintk(x) | 2 | # define dprintk(x) |
3 | #endif | 3 | #endif |
4 | /* eg: if (nblank(dprintk(x))) */ | 4 | /* eg: if (nblank(dprintk(x))) */ |
@@ -50,9 +50,9 @@ struct diskparm | |||
50 | /* | 50 | /* |
51 | * Firmware constants | 51 | * Firmware constants |
52 | */ | 52 | */ |
53 | 53 | ||
54 | #define CT_NONE 0 | 54 | #define CT_NONE 0 |
55 | #define CT_OK 218 | 55 | #define CT_OK 218 |
56 | #define FT_FILESYS 8 /* ADAPTEC's "FSA"(tm) filesystem */ | 56 | #define FT_FILESYS 8 /* ADAPTEC's "FSA"(tm) filesystem */ |
57 | #define FT_DRIVE 9 /* physical disk - addressable in scsi by bus/id/lun */ | 57 | #define FT_DRIVE 9 /* physical disk - addressable in scsi by bus/id/lun */ |
58 | 58 | ||
@@ -107,12 +107,12 @@ struct user_sgentryraw { | |||
107 | 107 | ||
108 | struct sgmap { | 108 | struct sgmap { |
109 | __le32 count; | 109 | __le32 count; |
110 | struct sgentry sg[1]; | 110 | struct sgentry sg[1]; |
111 | }; | 111 | }; |
112 | 112 | ||
113 | struct user_sgmap { | 113 | struct user_sgmap { |
114 | u32 count; | 114 | u32 count; |
115 | struct user_sgentry sg[1]; | 115 | struct user_sgentry sg[1]; |
116 | }; | 116 | }; |
117 | 117 | ||
118 | struct sgmap64 { | 118 | struct sgmap64 { |
@@ -137,18 +137,18 @@ struct user_sgmapraw { | |||
137 | 137 | ||
138 | struct creation_info | 138 | struct creation_info |
139 | { | 139 | { |
140 | u8 buildnum; /* e.g., 588 */ | 140 | u8 buildnum; /* e.g., 588 */ |
141 | u8 usec; /* e.g., 588 */ | 141 | u8 usec; /* e.g., 588 */ |
142 | u8 via; /* e.g., 1 = FSU, | 142 | u8 via; /* e.g., 1 = FSU, |
143 | * 2 = API | 143 | * 2 = API |
144 | */ | 144 | */ |
145 | u8 year; /* e.g., 1997 = 97 */ | 145 | u8 year; /* e.g., 1997 = 97 */ |
146 | __le32 date; /* | 146 | __le32 date; /* |
147 | * unsigned Month :4; // 1 - 12 | 147 | * unsigned Month :4; // 1 - 12 |
148 | * unsigned Day :6; // 1 - 32 | 148 | * unsigned Day :6; // 1 - 32 |
149 | * unsigned Hour :6; // 0 - 23 | 149 | * unsigned Hour :6; // 0 - 23 |
150 | * unsigned Minute :6; // 0 - 60 | 150 | * unsigned Minute :6; // 0 - 60 |
151 | * unsigned Second :6; // 0 - 60 | 151 | * unsigned Second :6; // 0 - 60 |
152 | */ | 152 | */ |
153 | __le32 serial[2]; /* e.g., 0x1DEADB0BFAFAF001 */ | 153 | __le32 serial[2]; /* e.g., 0x1DEADB0BFAFAF001 */ |
154 | }; | 154 | }; |
@@ -184,7 +184,7 @@ struct creation_info | |||
184 | /* | 184 | /* |
185 | * Set the queues on a 16 byte alignment | 185 | * Set the queues on a 16 byte alignment |
186 | */ | 186 | */ |
187 | 187 | ||
188 | #define QUEUE_ALIGNMENT 16 | 188 | #define QUEUE_ALIGNMENT 16 |
189 | 189 | ||
190 | /* | 190 | /* |
@@ -203,9 +203,9 @@ struct aac_entry { | |||
203 | * The adapter assumes the ProducerIndex and ConsumerIndex are grouped | 203 | * The adapter assumes the ProducerIndex and ConsumerIndex are grouped |
204 | * adjacently and in that order. | 204 | * adjacently and in that order. |
205 | */ | 205 | */ |
206 | 206 | ||
207 | struct aac_qhdr { | 207 | struct aac_qhdr { |
208 | __le64 header_addr;/* Address to hand the adapter to access | 208 | __le64 header_addr;/* Address to hand the adapter to access |
209 | to this queue head */ | 209 | to this queue head */ |
210 | __le32 *producer; /* The producer index for this queue (host address) */ | 210 | __le32 *producer; /* The producer index for this queue (host address) */ |
211 | __le32 *consumer; /* The consumer index for this queue (host address) */ | 211 | __le32 *consumer; /* The consumer index for this queue (host address) */ |
@@ -215,7 +215,7 @@ struct aac_qhdr { | |||
215 | * Define all the events which the adapter would like to notify | 215 | * Define all the events which the adapter would like to notify |
216 | * the host of. | 216 | * the host of. |
217 | */ | 217 | */ |
218 | 218 | ||
219 | #define HostNormCmdQue 1 /* Change in host normal priority command queue */ | 219 | #define HostNormCmdQue 1 /* Change in host normal priority command queue */ |
220 | #define HostHighCmdQue 2 /* Change in host high priority command queue */ | 220 | #define HostHighCmdQue 2 /* Change in host high priority command queue */ |
221 | #define HostNormRespQue 3 /* Change in host normal priority response queue */ | 221 | #define HostNormRespQue 3 /* Change in host normal priority response queue */ |
@@ -286,17 +286,17 @@ struct aac_fibhdr { | |||
286 | u8 StructType; /* Type FIB */ | 286 | u8 StructType; /* Type FIB */ |
287 | u8 Flags; /* Flags for FIB */ | 287 | u8 Flags; /* Flags for FIB */ |
288 | __le16 Size; /* Size of this FIB in bytes */ | 288 | __le16 Size; /* Size of this FIB in bytes */ |
289 | __le16 SenderSize; /* Size of the FIB in the sender | 289 | __le16 SenderSize; /* Size of the FIB in the sender |
290 | (for response sizing) */ | 290 | (for response sizing) */ |
291 | __le32 SenderFibAddress; /* Host defined data in the FIB */ | 291 | __le32 SenderFibAddress; /* Host defined data in the FIB */ |
292 | __le32 ReceiverFibAddress;/* Logical address of this FIB for | 292 | __le32 ReceiverFibAddress;/* Logical address of this FIB for |
293 | the adapter */ | 293 | the adapter */ |
294 | u32 SenderData; /* Place holder for the sender to store data */ | 294 | u32 SenderData; /* Place holder for the sender to store data */ |
295 | union { | 295 | union { |
296 | struct { | 296 | struct { |
297 | __le32 _ReceiverTimeStart; /* Timestamp for | 297 | __le32 _ReceiverTimeStart; /* Timestamp for |
298 | receipt of fib */ | 298 | receipt of fib */ |
299 | __le32 _ReceiverTimeDone; /* Timestamp for | 299 | __le32 _ReceiverTimeDone; /* Timestamp for |
300 | completion of fib */ | 300 | completion of fib */ |
301 | } _s; | 301 | } _s; |
302 | } _u; | 302 | } _u; |
@@ -311,7 +311,7 @@ struct hw_fib { | |||
311 | * FIB commands | 311 | * FIB commands |
312 | */ | 312 | */ |
313 | 313 | ||
314 | #define TestCommandResponse 1 | 314 | #define TestCommandResponse 1 |
315 | #define TestAdapterCommand 2 | 315 | #define TestAdapterCommand 2 |
316 | /* | 316 | /* |
317 | * Lowlevel and comm commands | 317 | * Lowlevel and comm commands |
@@ -350,10 +350,6 @@ struct hw_fib { | |||
350 | #define ContainerCommand64 501 | 350 | #define ContainerCommand64 501 |
351 | #define ContainerRawIo 502 | 351 | #define ContainerRawIo 502 |
352 | /* | 352 | /* |
353 | * Cluster Commands | ||
354 | */ | ||
355 | #define ClusterCommand 550 | ||
356 | /* | ||
357 | * Scsi Port commands (scsi passthrough) | 353 | * Scsi Port commands (scsi passthrough) |
358 | */ | 354 | */ |
359 | #define ScsiPortCommand 600 | 355 | #define ScsiPortCommand 600 |
@@ -375,19 +371,19 @@ struct hw_fib { | |||
375 | */ | 371 | */ |
376 | 372 | ||
377 | enum fib_xfer_state { | 373 | enum fib_xfer_state { |
378 | HostOwned = (1<<0), | 374 | HostOwned = (1<<0), |
379 | AdapterOwned = (1<<1), | 375 | AdapterOwned = (1<<1), |
380 | FibInitialized = (1<<2), | 376 | FibInitialized = (1<<2), |
381 | FibEmpty = (1<<3), | 377 | FibEmpty = (1<<3), |
382 | AllocatedFromPool = (1<<4), | 378 | AllocatedFromPool = (1<<4), |
383 | SentFromHost = (1<<5), | 379 | SentFromHost = (1<<5), |
384 | SentFromAdapter = (1<<6), | 380 | SentFromAdapter = (1<<6), |
385 | ResponseExpected = (1<<7), | 381 | ResponseExpected = (1<<7), |
386 | NoResponseExpected = (1<<8), | 382 | NoResponseExpected = (1<<8), |
387 | AdapterProcessed = (1<<9), | 383 | AdapterProcessed = (1<<9), |
388 | HostProcessed = (1<<10), | 384 | HostProcessed = (1<<10), |
389 | HighPriority = (1<<11), | 385 | HighPriority = (1<<11), |
390 | NormalPriority = (1<<12), | 386 | NormalPriority = (1<<12), |
391 | Async = (1<<13), | 387 | Async = (1<<13), |
392 | AsyncIo = (1<<13), // rpbfix: remove with new regime | 388 | AsyncIo = (1<<13), // rpbfix: remove with new regime |
393 | PageFileIo = (1<<14), // rpbfix: remove with new regime | 389 | PageFileIo = (1<<14), // rpbfix: remove with new regime |
@@ -420,7 +416,7 @@ struct aac_init | |||
420 | __le32 AdapterFibAlign; | 416 | __le32 AdapterFibAlign; |
421 | __le32 printfbuf; | 417 | __le32 printfbuf; |
422 | __le32 printfbufsiz; | 418 | __le32 printfbufsiz; |
423 | __le32 HostPhysMemPages; /* number of 4k pages of host | 419 | __le32 HostPhysMemPages; /* number of 4k pages of host |
424 | physical memory */ | 420 | physical memory */ |
425 | __le32 HostElapsedSeconds; /* number of seconds since 1970. */ | 421 | __le32 HostElapsedSeconds; /* number of seconds since 1970. */ |
426 | /* | 422 | /* |
@@ -481,7 +477,7 @@ struct adapter_ops | |||
481 | 477 | ||
482 | struct aac_driver_ident | 478 | struct aac_driver_ident |
483 | { | 479 | { |
484 | int (*init)(struct aac_dev *dev); | 480 | int (*init)(struct aac_dev *dev); |
485 | char * name; | 481 | char * name; |
486 | char * vname; | 482 | char * vname; |
487 | char * model; | 483 | char * model; |
@@ -489,7 +485,7 @@ struct aac_driver_ident | |||
489 | int quirks; | 485 | int quirks; |
490 | }; | 486 | }; |
491 | /* | 487 | /* |
492 | * Some adapter firmware needs communication memory | 488 | * Some adapter firmware needs communication memory |
493 | * below 2gig. This tells the init function to set the | 489 | * below 2gig. This tells the init function to set the |
494 | * dma mask such that fib memory will be allocated where the | 490 | * dma mask such that fib memory will be allocated where the |
495 | * adapter firmware can get to it. | 491 | * adapter firmware can get to it. |
@@ -531,29 +527,29 @@ struct aac_driver_ident | |||
531 | * physically contigous block. The host structure that defines the | 527 | * physically contigous block. The host structure that defines the |
532 | * commuication queues will assume they are each a separate physically | 528 | * commuication queues will assume they are each a separate physically |
533 | * contigous memory region that will support them all being one big | 529 | * contigous memory region that will support them all being one big |
534 | * contigous block. | 530 | * contigous block. |
535 | * There is a command and response queue for each level and direction of | 531 | * There is a command and response queue for each level and direction of |
536 | * commuication. These regions are accessed by both the host and adapter. | 532 | * commuication. These regions are accessed by both the host and adapter. |
537 | */ | 533 | */ |
538 | 534 | ||
539 | struct aac_queue { | 535 | struct aac_queue { |
540 | u64 logical; /*address we give the adapter */ | 536 | u64 logical; /*address we give the adapter */ |
541 | struct aac_entry *base; /*system virtual address */ | 537 | struct aac_entry *base; /*system virtual address */ |
542 | struct aac_qhdr headers; /*producer,consumer q headers*/ | 538 | struct aac_qhdr headers; /*producer,consumer q headers*/ |
543 | u32 entries; /*Number of queue entries */ | 539 | u32 entries; /*Number of queue entries */ |
544 | wait_queue_head_t qfull; /*Event to wait on if q full */ | 540 | wait_queue_head_t qfull; /*Event to wait on if q full */ |
545 | wait_queue_head_t cmdready; /*Cmd ready from the adapter */ | 541 | wait_queue_head_t cmdready; /*Cmd ready from the adapter */ |
546 | /* This is only valid for adapter to host command queues. */ | 542 | /* This is only valid for adapter to host command queues. */ |
547 | spinlock_t *lock; /* Spinlock for this queue must take this lock before accessing the lock */ | 543 | spinlock_t *lock; /* Spinlock for this queue must take this lock before accessing the lock */ |
548 | spinlock_t lockdata; /* Actual lock (used only on one side of the lock) */ | 544 | spinlock_t lockdata; /* Actual lock (used only on one side of the lock) */ |
549 | struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ | 545 | struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */ |
550 | /* only valid for command queues which receive entries from the adapter. */ | 546 | /* only valid for command queues which receive entries from the adapter. */ |
551 | u32 numpending; /* Number of entries on outstanding queue. */ | 547 | u32 numpending; /* Number of entries on outstanding queue. */ |
552 | struct aac_dev * dev; /* Back pointer to adapter structure */ | 548 | struct aac_dev * dev; /* Back pointer to adapter structure */ |
553 | }; | 549 | }; |
554 | 550 | ||
555 | /* | 551 | /* |
556 | * Message queues. The order here is important, see also the | 552 | * Message queues. The order here is important, see also the |
557 | * queue type ordering | 553 | * queue type ordering |
558 | */ | 554 | */ |
559 | 555 | ||
@@ -565,12 +561,12 @@ struct aac_queue_block | |||
565 | /* | 561 | /* |
566 | * SaP1 Message Unit Registers | 562 | * SaP1 Message Unit Registers |
567 | */ | 563 | */ |
568 | 564 | ||
569 | struct sa_drawbridge_CSR { | 565 | struct sa_drawbridge_CSR { |
570 | /* Offset | Name */ | 566 | /* Offset | Name */ |
571 | __le32 reserved[10]; /* 00h-27h | Reserved */ | 567 | __le32 reserved[10]; /* 00h-27h | Reserved */ |
572 | u8 LUT_Offset; /* 28h | Lookup Table Offset */ | 568 | u8 LUT_Offset; /* 28h | Lookup Table Offset */ |
573 | u8 reserved1[3]; /* 29h-2bh | Reserved */ | 569 | u8 reserved1[3]; /* 29h-2bh | Reserved */ |
574 | __le32 LUT_Data; /* 2ch | Looup Table Data */ | 570 | __le32 LUT_Data; /* 2ch | Looup Table Data */ |
575 | __le32 reserved2[26]; /* 30h-97h | Reserved */ | 571 | __le32 reserved2[26]; /* 30h-97h | Reserved */ |
576 | __le16 PRICLEARIRQ; /* 98h | Primary Clear Irq */ | 572 | __le16 PRICLEARIRQ; /* 98h | Primary Clear Irq */ |
@@ -589,8 +585,8 @@ struct sa_drawbridge_CSR { | |||
589 | __le32 MAILBOX5; /* bch | Scratchpad 5 */ | 585 | __le32 MAILBOX5; /* bch | Scratchpad 5 */ |
590 | __le32 MAILBOX6; /* c0h | Scratchpad 6 */ | 586 | __le32 MAILBOX6; /* c0h | Scratchpad 6 */ |
591 | __le32 MAILBOX7; /* c4h | Scratchpad 7 */ | 587 | __le32 MAILBOX7; /* c4h | Scratchpad 7 */ |
592 | __le32 ROM_Setup_Data; /* c8h | Rom Setup and Data */ | 588 | __le32 ROM_Setup_Data; /* c8h | Rom Setup and Data */ |
593 | __le32 ROM_Control_Addr;/* cch | Rom Control and Address */ | 589 | __le32 ROM_Control_Addr;/* cch | Rom Control and Address */ |
594 | __le32 reserved3[12]; /* d0h-ffh | reserved */ | 590 | __le32 reserved3[12]; /* d0h-ffh | reserved */ |
595 | __le32 LUT[64]; /* 100h-1ffh | Lookup Table Entries */ | 591 | __le32 LUT[64]; /* 100h-1ffh | Lookup Table Entries */ |
596 | }; | 592 | }; |
@@ -603,7 +599,7 @@ struct sa_drawbridge_CSR { | |||
603 | #define Mailbox5 SaDbCSR.MAILBOX5 | 599 | #define Mailbox5 SaDbCSR.MAILBOX5 |
604 | #define Mailbox6 SaDbCSR.MAILBOX6 | 600 | #define Mailbox6 SaDbCSR.MAILBOX6 |
605 | #define Mailbox7 SaDbCSR.MAILBOX7 | 601 | #define Mailbox7 SaDbCSR.MAILBOX7 |
606 | 602 | ||
607 | #define DoorbellReg_p SaDbCSR.PRISETIRQ | 603 | #define DoorbellReg_p SaDbCSR.PRISETIRQ |
608 | #define DoorbellReg_s SaDbCSR.SECSETIRQ | 604 | #define DoorbellReg_s SaDbCSR.SECSETIRQ |
609 | #define DoorbellClrReg_p SaDbCSR.PRICLEARIRQ | 605 | #define DoorbellClrReg_p SaDbCSR.PRICLEARIRQ |
@@ -617,19 +613,19 @@ struct sa_drawbridge_CSR { | |||
617 | #define DOORBELL_5 0x0020 | 613 | #define DOORBELL_5 0x0020 |
618 | #define DOORBELL_6 0x0040 | 614 | #define DOORBELL_6 0x0040 |
619 | 615 | ||
620 | 616 | ||
621 | #define PrintfReady DOORBELL_5 | 617 | #define PrintfReady DOORBELL_5 |
622 | #define PrintfDone DOORBELL_5 | 618 | #define PrintfDone DOORBELL_5 |
623 | 619 | ||
624 | struct sa_registers { | 620 | struct sa_registers { |
625 | struct sa_drawbridge_CSR SaDbCSR; /* 98h - c4h */ | 621 | struct sa_drawbridge_CSR SaDbCSR; /* 98h - c4h */ |
626 | }; | 622 | }; |
627 | 623 | ||
628 | 624 | ||
629 | #define Sa_MINIPORT_REVISION 1 | 625 | #define Sa_MINIPORT_REVISION 1 |
630 | 626 | ||
631 | #define sa_readw(AEP, CSR) readl(&((AEP)->regs.sa->CSR)) | 627 | #define sa_readw(AEP, CSR) readl(&((AEP)->regs.sa->CSR)) |
632 | #define sa_readl(AEP, CSR) readl(&((AEP)->regs.sa->CSR)) | 628 | #define sa_readl(AEP, CSR) readl(&((AEP)->regs.sa->CSR)) |
633 | #define sa_writew(AEP, CSR, value) writew(value, &((AEP)->regs.sa->CSR)) | 629 | #define sa_writew(AEP, CSR, value) writew(value, &((AEP)->regs.sa->CSR)) |
634 | #define sa_writel(AEP, CSR, value) writel(value, &((AEP)->regs.sa->CSR)) | 630 | #define sa_writel(AEP, CSR, value) writel(value, &((AEP)->regs.sa->CSR)) |
635 | 631 | ||
@@ -646,21 +642,21 @@ struct rx_mu_registers { | |||
646 | __le32 IMRx[2]; /* 1310h | 10h | Inbound Message Registers */ | 642 | __le32 IMRx[2]; /* 1310h | 10h | Inbound Message Registers */ |
647 | __le32 OMRx[2]; /* 1318h | 18h | Outbound Message Registers */ | 643 | __le32 OMRx[2]; /* 1318h | 18h | Outbound Message Registers */ |
648 | __le32 IDR; /* 1320h | 20h | Inbound Doorbell Register */ | 644 | __le32 IDR; /* 1320h | 20h | Inbound Doorbell Register */ |
649 | __le32 IISR; /* 1324h | 24h | Inbound Interrupt | 645 | __le32 IISR; /* 1324h | 24h | Inbound Interrupt |
650 | Status Register */ | 646 | Status Register */ |
651 | __le32 IIMR; /* 1328h | 28h | Inbound Interrupt | 647 | __le32 IIMR; /* 1328h | 28h | Inbound Interrupt |
652 | Mask Register */ | 648 | Mask Register */ |
653 | __le32 ODR; /* 132Ch | 2Ch | Outbound Doorbell Register */ | 649 | __le32 ODR; /* 132Ch | 2Ch | Outbound Doorbell Register */ |
654 | __le32 OISR; /* 1330h | 30h | Outbound Interrupt | 650 | __le32 OISR; /* 1330h | 30h | Outbound Interrupt |
655 | Status Register */ | 651 | Status Register */ |
656 | __le32 OIMR; /* 1334h | 34h | Outbound Interrupt | 652 | __le32 OIMR; /* 1334h | 34h | Outbound Interrupt |
657 | Mask Register */ | 653 | Mask Register */ |
658 | __le32 reserved2; /* 1338h | 38h | Reserved */ | 654 | __le32 reserved2; /* 1338h | 38h | Reserved */ |
659 | __le32 reserved3; /* 133Ch | 3Ch | Reserved */ | 655 | __le32 reserved3; /* 133Ch | 3Ch | Reserved */ |
660 | __le32 InboundQueue;/* 1340h | 40h | Inbound Queue Port relative to firmware */ | 656 | __le32 InboundQueue;/* 1340h | 40h | Inbound Queue Port relative to firmware */ |
661 | __le32 OutboundQueue;/*1344h | 44h | Outbound Queue Port relative to firmware */ | 657 | __le32 OutboundQueue;/*1344h | 44h | Outbound Queue Port relative to firmware */ |
662 | /* * Must access through ATU Inbound | 658 | /* * Must access through ATU Inbound |
663 | Translation Window */ | 659 | Translation Window */ |
664 | }; | 660 | }; |
665 | 661 | ||
666 | struct rx_inbound { | 662 | struct rx_inbound { |
@@ -716,12 +712,12 @@ struct rkt_registers { | |||
716 | typedef void (*fib_callback)(void *ctxt, struct fib *fibctx); | 712 | typedef void (*fib_callback)(void *ctxt, struct fib *fibctx); |
717 | 713 | ||
718 | struct aac_fib_context { | 714 | struct aac_fib_context { |
719 | s16 type; // used for verification of structure | 715 | s16 type; // used for verification of structure |
720 | s16 size; | 716 | s16 size; |
721 | u32 unique; // unique value representing this context | 717 | u32 unique; // unique value representing this context |
722 | ulong jiffies; // used for cleanup - dmb changed to ulong | 718 | ulong jiffies; // used for cleanup - dmb changed to ulong |
723 | struct list_head next; // used to link context's into a linked list | 719 | struct list_head next; // used to link context's into a linked list |
724 | struct semaphore wait_sem; // this is used to wait for the next fib to arrive. | 720 | struct semaphore wait_sem; // this is used to wait for the next fib to arrive. |
725 | int wait; // Set to true when thread is in WaitForSingleObject | 721 | int wait; // Set to true when thread is in WaitForSingleObject |
726 | unsigned long count; // total number of FIBs on FibList | 722 | unsigned long count; // total number of FIBs on FibList |
727 | struct list_head fib_list; // this holds fibs and their attachd hw_fibs | 723 | struct list_head fib_list; // this holds fibs and their attachd hw_fibs |
@@ -740,9 +736,9 @@ struct sense_data { | |||
740 | u8 EOM:1; /* End Of Medium - reserved for random access devices */ | 736 | u8 EOM:1; /* End Of Medium - reserved for random access devices */ |
741 | u8 filemark:1; /* Filemark - reserved for random access devices */ | 737 | u8 filemark:1; /* Filemark - reserved for random access devices */ |
742 | 738 | ||
743 | u8 information[4]; /* for direct-access devices, contains the unsigned | 739 | u8 information[4]; /* for direct-access devices, contains the unsigned |
744 | * logical block address or residue associated with | 740 | * logical block address or residue associated with |
745 | * the sense key | 741 | * the sense key |
746 | */ | 742 | */ |
747 | u8 add_sense_len; /* number of additional sense bytes to follow this field */ | 743 | u8 add_sense_len; /* number of additional sense bytes to follow this field */ |
748 | u8 cmnd_info[4]; /* not used */ | 744 | u8 cmnd_info[4]; /* not used */ |
@@ -752,7 +748,7 @@ struct sense_data { | |||
752 | u8 bit_ptr:3; /* indicates which byte of the CDB or parameter data | 748 | u8 bit_ptr:3; /* indicates which byte of the CDB or parameter data |
753 | * was in error | 749 | * was in error |
754 | */ | 750 | */ |
755 | u8 BPV:1; /* bit pointer valid (BPV): 1- indicates that | 751 | u8 BPV:1; /* bit pointer valid (BPV): 1- indicates that |
756 | * the bit_ptr field has valid value | 752 | * the bit_ptr field has valid value |
757 | */ | 753 | */ |
758 | u8 reserved2:2; | 754 | u8 reserved2:2; |
@@ -786,24 +782,24 @@ struct fib { | |||
786 | /* | 782 | /* |
787 | * The Adapter that this I/O is destined for. | 783 | * The Adapter that this I/O is destined for. |
788 | */ | 784 | */ |
789 | struct aac_dev *dev; | 785 | struct aac_dev *dev; |
790 | /* | 786 | /* |
791 | * This is the event the sendfib routine will wait on if the | 787 | * This is the event the sendfib routine will wait on if the |
792 | * caller did not pass one and this is synch io. | 788 | * caller did not pass one and this is synch io. |
793 | */ | 789 | */ |
794 | struct semaphore event_wait; | 790 | struct semaphore event_wait; |
795 | spinlock_t event_lock; | 791 | spinlock_t event_lock; |
796 | 792 | ||
797 | u32 done; /* gets set to 1 when fib is complete */ | 793 | u32 done; /* gets set to 1 when fib is complete */ |
798 | fib_callback callback; | 794 | fib_callback callback; |
799 | void *callback_data; | 795 | void *callback_data; |
800 | u32 flags; // u32 dmb was ulong | 796 | u32 flags; // u32 dmb was ulong |
801 | /* | 797 | /* |
802 | * And for the internal issue/reply queues (we may be able | 798 | * And for the internal issue/reply queues (we may be able |
803 | * to merge these two) | 799 | * to merge these two) |
804 | */ | 800 | */ |
805 | struct list_head fiblink; | 801 | struct list_head fiblink; |
806 | void *data; | 802 | void *data; |
807 | struct hw_fib *hw_fib_va; /* Actual shared object */ | 803 | struct hw_fib *hw_fib_va; /* Actual shared object */ |
808 | dma_addr_t hw_fib_pa; /* physical address of hw_fib*/ | 804 | dma_addr_t hw_fib_pa; /* physical address of hw_fib*/ |
809 | }; | 805 | }; |
@@ -813,7 +809,7 @@ struct fib { | |||
813 | * | 809 | * |
814 | * This is returned by the RequestAdapterInfo block | 810 | * This is returned by the RequestAdapterInfo block |
815 | */ | 811 | */ |
816 | 812 | ||
817 | struct aac_adapter_info | 813 | struct aac_adapter_info |
818 | { | 814 | { |
819 | __le32 platform; | 815 | __le32 platform; |
@@ -832,7 +828,7 @@ struct aac_adapter_info | |||
832 | __le32 biosrev; | 828 | __le32 biosrev; |
833 | __le32 biosbuild; | 829 | __le32 biosbuild; |
834 | __le32 cluster; | 830 | __le32 cluster; |
835 | __le32 clusterchannelmask; | 831 | __le32 clusterchannelmask; |
836 | __le32 serial[2]; | 832 | __le32 serial[2]; |
837 | __le32 battery; | 833 | __le32 battery; |
838 | __le32 options; | 834 | __le32 options; |
@@ -922,13 +918,13 @@ struct aac_bus_info_response { | |||
922 | #define AAC_OPT_HOST_TIME_FIB cpu_to_le32(1<<4) | 918 | #define AAC_OPT_HOST_TIME_FIB cpu_to_le32(1<<4) |
923 | #define AAC_OPT_RAID50 cpu_to_le32(1<<5) | 919 | #define AAC_OPT_RAID50 cpu_to_le32(1<<5) |
924 | #define AAC_OPT_4GB_WINDOW cpu_to_le32(1<<6) | 920 | #define AAC_OPT_4GB_WINDOW cpu_to_le32(1<<6) |
925 | #define AAC_OPT_SCSI_UPGRADEABLE cpu_to_le32(1<<7) | 921 | #define AAC_OPT_SCSI_UPGRADEABLE cpu_to_le32(1<<7) |
926 | #define AAC_OPT_SOFT_ERR_REPORT cpu_to_le32(1<<8) | 922 | #define AAC_OPT_SOFT_ERR_REPORT cpu_to_le32(1<<8) |
927 | #define AAC_OPT_SUPPORTED_RECONDITION cpu_to_le32(1<<9) | 923 | #define AAC_OPT_SUPPORTED_RECONDITION cpu_to_le32(1<<9) |
928 | #define AAC_OPT_SGMAP_HOST64 cpu_to_le32(1<<10) | 924 | #define AAC_OPT_SGMAP_HOST64 cpu_to_le32(1<<10) |
929 | #define AAC_OPT_ALARM cpu_to_le32(1<<11) | 925 | #define AAC_OPT_ALARM cpu_to_le32(1<<11) |
930 | #define AAC_OPT_NONDASD cpu_to_le32(1<<12) | 926 | #define AAC_OPT_NONDASD cpu_to_le32(1<<12) |
931 | #define AAC_OPT_SCSI_MANAGED cpu_to_le32(1<<13) | 927 | #define AAC_OPT_SCSI_MANAGED cpu_to_le32(1<<13) |
932 | #define AAC_OPT_RAID_SCSI_MODE cpu_to_le32(1<<14) | 928 | #define AAC_OPT_RAID_SCSI_MODE cpu_to_le32(1<<14) |
933 | #define AAC_OPT_SUPPLEMENT_ADAPTER_INFO cpu_to_le32(1<<16) | 929 | #define AAC_OPT_SUPPLEMENT_ADAPTER_INFO cpu_to_le32(1<<16) |
934 | #define AAC_OPT_NEW_COMM cpu_to_le32(1<<17) | 930 | #define AAC_OPT_NEW_COMM cpu_to_le32(1<<17) |
@@ -948,7 +944,7 @@ struct aac_dev | |||
948 | 944 | ||
949 | /* | 945 | /* |
950 | * Map for 128 fib objects (64k) | 946 | * Map for 128 fib objects (64k) |
951 | */ | 947 | */ |
952 | dma_addr_t hw_fib_pa; | 948 | dma_addr_t hw_fib_pa; |
953 | struct hw_fib *hw_fib_va; | 949 | struct hw_fib *hw_fib_va; |
954 | struct hw_fib *aif_base_va; | 950 | struct hw_fib *aif_base_va; |
@@ -959,24 +955,24 @@ struct aac_dev | |||
959 | 955 | ||
960 | struct fib *free_fib; | 956 | struct fib *free_fib; |
961 | spinlock_t fib_lock; | 957 | spinlock_t fib_lock; |
962 | 958 | ||
963 | struct aac_queue_block *queues; | 959 | struct aac_queue_block *queues; |
964 | /* | 960 | /* |
965 | * The user API will use an IOCTL to register itself to receive | 961 | * The user API will use an IOCTL to register itself to receive |
966 | * FIBs from the adapter. The following list is used to keep | 962 | * FIBs from the adapter. The following list is used to keep |
967 | * track of all the threads that have requested these FIBs. The | 963 | * track of all the threads that have requested these FIBs. The |
968 | * mutex is used to synchronize access to all data associated | 964 | * mutex is used to synchronize access to all data associated |
969 | * with the adapter fibs. | 965 | * with the adapter fibs. |
970 | */ | 966 | */ |
971 | struct list_head fib_list; | 967 | struct list_head fib_list; |
972 | 968 | ||
973 | struct adapter_ops a_ops; | 969 | struct adapter_ops a_ops; |
974 | unsigned long fsrev; /* Main driver's revision number */ | 970 | unsigned long fsrev; /* Main driver's revision number */ |
975 | 971 | ||
976 | unsigned base_size; /* Size of mapped in region */ | 972 | unsigned base_size; /* Size of mapped in region */ |
977 | struct aac_init *init; /* Holds initialization info to communicate with adapter */ | 973 | struct aac_init *init; /* Holds initialization info to communicate with adapter */ |
978 | dma_addr_t init_pa; /* Holds physical address of the init struct */ | 974 | dma_addr_t init_pa; /* Holds physical address of the init struct */ |
979 | 975 | ||
980 | struct pci_dev *pdev; /* Our PCI interface */ | 976 | struct pci_dev *pdev; /* Our PCI interface */ |
981 | void * printfbuf; /* pointer to buffer used for printf's from the adapter */ | 977 | void * printfbuf; /* pointer to buffer used for printf's from the adapter */ |
982 | void * comm_addr; /* Base address of Comm area */ | 978 | void * comm_addr; /* Base address of Comm area */ |
@@ -990,11 +986,11 @@ struct aac_dev | |||
990 | struct fsa_dev_info *fsa_dev; | 986 | struct fsa_dev_info *fsa_dev; |
991 | struct task_struct *thread; | 987 | struct task_struct *thread; |
992 | int cardtype; | 988 | int cardtype; |
993 | 989 | ||
994 | /* | 990 | /* |
995 | * The following is the device specific extension. | 991 | * The following is the device specific extension. |
996 | */ | 992 | */ |
997 | #if (!defined(AAC_MIN_FOOTPRINT_SIZE)) | 993 | #ifndef AAC_MIN_FOOTPRINT_SIZE |
998 | # define AAC_MIN_FOOTPRINT_SIZE 8192 | 994 | # define AAC_MIN_FOOTPRINT_SIZE 8192 |
999 | #endif | 995 | #endif |
1000 | union | 996 | union |
@@ -1015,7 +1011,7 @@ struct aac_dev | |||
1015 | /* These are in adapter info but they are in the io flow so | 1011 | /* These are in adapter info but they are in the io flow so |
1016 | * lets break them out so we don't have to do an AND to check them | 1012 | * lets break them out so we don't have to do an AND to check them |
1017 | */ | 1013 | */ |
1018 | u8 nondasd_support; | 1014 | u8 nondasd_support; |
1019 | u8 cache_protected; | 1015 | u8 cache_protected; |
1020 | u8 dac_support; | 1016 | u8 dac_support; |
1021 | u8 raid_scsi_mode; | 1017 | u8 raid_scsi_mode; |
@@ -1078,14 +1074,14 @@ struct aac_dev | |||
1078 | /* | 1074 | /* |
1079 | * Define the command values | 1075 | * Define the command values |
1080 | */ | 1076 | */ |
1081 | 1077 | ||
1082 | #define Null 0 | 1078 | #define Null 0 |
1083 | #define GetAttributes 1 | 1079 | #define GetAttributes 1 |
1084 | #define SetAttributes 2 | 1080 | #define SetAttributes 2 |
1085 | #define Lookup 3 | 1081 | #define Lookup 3 |
1086 | #define ReadLink 4 | 1082 | #define ReadLink 4 |
1087 | #define Read 5 | 1083 | #define Read 5 |
1088 | #define Write 6 | 1084 | #define Write 6 |
1089 | #define Create 7 | 1085 | #define Create 7 |
1090 | #define MakeDirectory 8 | 1086 | #define MakeDirectory 8 |
1091 | #define SymbolicLink 9 | 1087 | #define SymbolicLink 9 |
@@ -1181,19 +1177,19 @@ struct aac_dev | |||
1181 | 1177 | ||
1182 | struct aac_read | 1178 | struct aac_read |
1183 | { | 1179 | { |
1184 | __le32 command; | 1180 | __le32 command; |
1185 | __le32 cid; | 1181 | __le32 cid; |
1186 | __le32 block; | 1182 | __le32 block; |
1187 | __le32 count; | 1183 | __le32 count; |
1188 | struct sgmap sg; // Must be last in struct because it is variable | 1184 | struct sgmap sg; // Must be last in struct because it is variable |
1189 | }; | 1185 | }; |
1190 | 1186 | ||
1191 | struct aac_read64 | 1187 | struct aac_read64 |
1192 | { | 1188 | { |
1193 | __le32 command; | 1189 | __le32 command; |
1194 | __le16 cid; | 1190 | __le16 cid; |
1195 | __le16 sector_count; | 1191 | __le16 sector_count; |
1196 | __le32 block; | 1192 | __le32 block; |
1197 | __le16 pad; | 1193 | __le16 pad; |
1198 | __le16 flags; | 1194 | __le16 flags; |
1199 | struct sgmap64 sg; // Must be last in struct because it is variable | 1195 | struct sgmap64 sg; // Must be last in struct because it is variable |
@@ -1201,26 +1197,26 @@ struct aac_read64 | |||
1201 | 1197 | ||
1202 | struct aac_read_reply | 1198 | struct aac_read_reply |
1203 | { | 1199 | { |
1204 | __le32 status; | 1200 | __le32 status; |
1205 | __le32 count; | 1201 | __le32 count; |
1206 | }; | 1202 | }; |
1207 | 1203 | ||
1208 | struct aac_write | 1204 | struct aac_write |
1209 | { | 1205 | { |
1210 | __le32 command; | 1206 | __le32 command; |
1211 | __le32 cid; | 1207 | __le32 cid; |
1212 | __le32 block; | 1208 | __le32 block; |
1213 | __le32 count; | 1209 | __le32 count; |
1214 | __le32 stable; // Not used | 1210 | __le32 stable; // Not used |
1215 | struct sgmap sg; // Must be last in struct because it is variable | 1211 | struct sgmap sg; // Must be last in struct because it is variable |
1216 | }; | 1212 | }; |
1217 | 1213 | ||
1218 | struct aac_write64 | 1214 | struct aac_write64 |
1219 | { | 1215 | { |
1220 | __le32 command; | 1216 | __le32 command; |
1221 | __le16 cid; | 1217 | __le16 cid; |
1222 | __le16 sector_count; | 1218 | __le16 sector_count; |
1223 | __le32 block; | 1219 | __le32 block; |
1224 | __le16 pad; | 1220 | __le16 pad; |
1225 | __le16 flags; | 1221 | __le16 flags; |
1226 | #define IO_TYPE_WRITE 0x00000000 | 1222 | #define IO_TYPE_WRITE 0x00000000 |
@@ -1231,7 +1227,7 @@ struct aac_write64 | |||
1231 | struct aac_write_reply | 1227 | struct aac_write_reply |
1232 | { | 1228 | { |
1233 | __le32 status; | 1229 | __le32 status; |
1234 | __le32 count; | 1230 | __le32 count; |
1235 | __le32 committed; | 1231 | __le32 committed; |
1236 | }; | 1232 | }; |
1237 | 1233 | ||
@@ -1334,10 +1330,10 @@ struct aac_srb_reply | |||
1334 | #define SRB_NoDataXfer 0x0000 | 1330 | #define SRB_NoDataXfer 0x0000 |
1335 | #define SRB_DisableDisconnect 0x0004 | 1331 | #define SRB_DisableDisconnect 0x0004 |
1336 | #define SRB_DisableSynchTransfer 0x0008 | 1332 | #define SRB_DisableSynchTransfer 0x0008 |
1337 | #define SRB_BypassFrozenQueue 0x0010 | 1333 | #define SRB_BypassFrozenQueue 0x0010 |
1338 | #define SRB_DisableAutosense 0x0020 | 1334 | #define SRB_DisableAutosense 0x0020 |
1339 | #define SRB_DataIn 0x0040 | 1335 | #define SRB_DataIn 0x0040 |
1340 | #define SRB_DataOut 0x0080 | 1336 | #define SRB_DataOut 0x0080 |
1341 | 1337 | ||
1342 | /* | 1338 | /* |
1343 | * SRB Functions - set in aac_srb->function | 1339 | * SRB Functions - set in aac_srb->function |
@@ -1360,7 +1356,7 @@ struct aac_srb_reply | |||
1360 | #define SRBF_RemoveDevice 0x0016 | 1356 | #define SRBF_RemoveDevice 0x0016 |
1361 | #define SRBF_DomainValidation 0x0017 | 1357 | #define SRBF_DomainValidation 0x0017 |
1362 | 1358 | ||
1363 | /* | 1359 | /* |
1364 | * SRB SCSI Status - set in aac_srb->scsi_status | 1360 | * SRB SCSI Status - set in aac_srb->scsi_status |
1365 | */ | 1361 | */ |
1366 | #define SRB_STATUS_PENDING 0x00 | 1362 | #define SRB_STATUS_PENDING 0x00 |
@@ -1519,17 +1515,17 @@ struct aac_get_container_count_resp { | |||
1519 | */ | 1515 | */ |
1520 | 1516 | ||
1521 | struct aac_mntent { | 1517 | struct aac_mntent { |
1522 | __le32 oid; | 1518 | __le32 oid; |
1523 | u8 name[16]; /* if applicable */ | 1519 | u8 name[16]; /* if applicable */ |
1524 | struct creation_info create_info; /* if applicable */ | 1520 | struct creation_info create_info; /* if applicable */ |
1525 | __le32 capacity; | 1521 | __le32 capacity; |
1526 | __le32 vol; /* substrate structure */ | 1522 | __le32 vol; /* substrate structure */ |
1527 | __le32 obj; /* FT_FILESYS, etc. */ | 1523 | __le32 obj; /* FT_FILESYS, etc. */ |
1528 | __le32 state; /* unready for mounting, | 1524 | __le32 state; /* unready for mounting, |
1529 | readonly, etc. */ | 1525 | readonly, etc. */ |
1530 | union aac_contentinfo fileinfo; /* Info specific to content | 1526 | union aac_contentinfo fileinfo; /* Info specific to content |
1531 | manager (eg, filesystem) */ | 1527 | manager (eg, filesystem) */ |
1532 | __le32 altoid; /* != oid <==> snapshot or | 1528 | __le32 altoid; /* != oid <==> snapshot or |
1533 | broken mirror exists */ | 1529 | broken mirror exists */ |
1534 | __le32 capacityhigh; | 1530 | __le32 capacityhigh; |
1535 | }; | 1531 | }; |
@@ -1546,7 +1542,7 @@ struct aac_query_mount { | |||
1546 | 1542 | ||
1547 | struct aac_mount { | 1543 | struct aac_mount { |
1548 | __le32 status; | 1544 | __le32 status; |
1549 | __le32 type; /* should be same as that requested */ | 1545 | __le32 type; /* should be same as that requested */ |
1550 | __le32 count; | 1546 | __le32 count; |
1551 | struct aac_mntent mnt[1]; | 1547 | struct aac_mntent mnt[1]; |
1552 | }; | 1548 | }; |
@@ -1616,7 +1612,7 @@ struct aac_delete_disk { | |||
1616 | u32 disknum; | 1612 | u32 disknum; |
1617 | u32 cnum; | 1613 | u32 cnum; |
1618 | }; | 1614 | }; |
1619 | 1615 | ||
1620 | struct fib_ioctl | 1616 | struct fib_ioctl |
1621 | { | 1617 | { |
1622 | u32 fibctx; | 1618 | u32 fibctx; |
@@ -1630,10 +1626,10 @@ struct revision | |||
1630 | __le32 version; | 1626 | __le32 version; |
1631 | __le32 build; | 1627 | __le32 build; |
1632 | }; | 1628 | }; |
1633 | 1629 | ||
1634 | 1630 | ||
1635 | /* | 1631 | /* |
1636 | * Ugly - non Linux like ioctl coding for back compat. | 1632 | * Ugly - non Linux like ioctl coding for back compat. |
1637 | */ | 1633 | */ |
1638 | 1634 | ||
1639 | #define CTL_CODE(function, method) ( \ | 1635 | #define CTL_CODE(function, method) ( \ |
@@ -1641,7 +1637,7 @@ struct revision | |||
1641 | ) | 1637 | ) |
1642 | 1638 | ||
1643 | /* | 1639 | /* |
1644 | * Define the method codes for how buffers are passed for I/O and FS | 1640 | * Define the method codes for how buffers are passed for I/O and FS |
1645 | * controls | 1641 | * controls |
1646 | */ | 1642 | */ |
1647 | 1643 | ||
@@ -1652,15 +1648,15 @@ struct revision | |||
1652 | * Filesystem ioctls | 1648 | * Filesystem ioctls |
1653 | */ | 1649 | */ |
1654 | 1650 | ||
1655 | #define FSACTL_SENDFIB CTL_CODE(2050, METHOD_BUFFERED) | 1651 | #define FSACTL_SENDFIB CTL_CODE(2050, METHOD_BUFFERED) |
1656 | #define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED) | 1652 | #define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED) |
1657 | #define FSACTL_DELETE_DISK 0x163 | 1653 | #define FSACTL_DELETE_DISK 0x163 |
1658 | #define FSACTL_QUERY_DISK 0x173 | 1654 | #define FSACTL_QUERY_DISK 0x173 |
1659 | #define FSACTL_OPEN_GET_ADAPTER_FIB CTL_CODE(2100, METHOD_BUFFERED) | 1655 | #define FSACTL_OPEN_GET_ADAPTER_FIB CTL_CODE(2100, METHOD_BUFFERED) |
1660 | #define FSACTL_GET_NEXT_ADAPTER_FIB CTL_CODE(2101, METHOD_BUFFERED) | 1656 | #define FSACTL_GET_NEXT_ADAPTER_FIB CTL_CODE(2101, METHOD_BUFFERED) |
1661 | #define FSACTL_CLOSE_GET_ADAPTER_FIB CTL_CODE(2102, METHOD_BUFFERED) | 1657 | #define FSACTL_CLOSE_GET_ADAPTER_FIB CTL_CODE(2102, METHOD_BUFFERED) |
1662 | #define FSACTL_MINIPORT_REV_CHECK CTL_CODE(2107, METHOD_BUFFERED) | 1658 | #define FSACTL_MINIPORT_REV_CHECK CTL_CODE(2107, METHOD_BUFFERED) |
1663 | #define FSACTL_GET_PCI_INFO CTL_CODE(2119, METHOD_BUFFERED) | 1659 | #define FSACTL_GET_PCI_INFO CTL_CODE(2119, METHOD_BUFFERED) |
1664 | #define FSACTL_FORCE_DELETE_DISK CTL_CODE(2120, METHOD_NEITHER) | 1660 | #define FSACTL_FORCE_DELETE_DISK CTL_CODE(2120, METHOD_NEITHER) |
1665 | #define FSACTL_GET_CONTAINERS 2131 | 1661 | #define FSACTL_GET_CONTAINERS 2131 |
1666 | #define FSACTL_SEND_LARGE_FIB CTL_CODE(2138, METHOD_BUFFERED) | 1662 | #define FSACTL_SEND_LARGE_FIB CTL_CODE(2138, METHOD_BUFFERED) |
@@ -1669,7 +1665,7 @@ struct revision | |||
1669 | struct aac_common | 1665 | struct aac_common |
1670 | { | 1666 | { |
1671 | /* | 1667 | /* |
1672 | * If this value is set to 1 then interrupt moderation will occur | 1668 | * If this value is set to 1 then interrupt moderation will occur |
1673 | * in the base commuication support. | 1669 | * in the base commuication support. |
1674 | */ | 1670 | */ |
1675 | u32 irq_mod; | 1671 | u32 irq_mod; |
@@ -1698,11 +1694,11 @@ extern struct aac_common aac_config; | |||
1698 | * The following macro is used when sending and receiving FIBs. It is | 1694 | * The following macro is used when sending and receiving FIBs. It is |
1699 | * only used for debugging. | 1695 | * only used for debugging. |
1700 | */ | 1696 | */ |
1701 | 1697 | ||
1702 | #ifdef DBG | 1698 | #ifdef DBG |
1703 | #define FIB_COUNTER_INCREMENT(counter) (counter)++ | 1699 | #define FIB_COUNTER_INCREMENT(counter) (counter)++ |
1704 | #else | 1700 | #else |
1705 | #define FIB_COUNTER_INCREMENT(counter) | 1701 | #define FIB_COUNTER_INCREMENT(counter) |
1706 | #endif | 1702 | #endif |
1707 | 1703 | ||
1708 | /* | 1704 | /* |
@@ -1734,17 +1730,17 @@ extern struct aac_common aac_config; | |||
1734 | * | 1730 | * |
1735 | * The adapter reports is present state through the phase. Only | 1731 | * The adapter reports is present state through the phase. Only |
1736 | * a single phase should be ever be set. Each phase can have multiple | 1732 | * a single phase should be ever be set. Each phase can have multiple |
1737 | * phase status bits to provide more detailed information about the | 1733 | * phase status bits to provide more detailed information about the |
1738 | * state of the board. Care should be taken to ensure that any phase | 1734 | * state of the board. Care should be taken to ensure that any phase |
1739 | * status bits that are set when changing the phase are also valid | 1735 | * status bits that are set when changing the phase are also valid |
1740 | * for the new phase or be cleared out. Adapter software (monitor, | 1736 | * for the new phase or be cleared out. Adapter software (monitor, |
1741 | * iflash, kernel) is responsible for properly maintining the phase | 1737 | * iflash, kernel) is responsible for properly maintining the phase |
1742 | * status mailbox when it is running. | 1738 | * status mailbox when it is running. |
1743 | * | ||
1744 | * MONKER_API Phases | ||
1745 | * | 1739 | * |
1746 | * Phases are bit oriented. It is NOT valid to have multiple bits set | 1740 | * MONKER_API Phases |
1747 | */ | 1741 | * |
1742 | * Phases are bit oriented. It is NOT valid to have multiple bits set | ||
1743 | */ | ||
1748 | 1744 | ||
1749 | #define SELF_TEST_FAILED 0x00000004 | 1745 | #define SELF_TEST_FAILED 0x00000004 |
1750 | #define MONITOR_PANIC 0x00000020 | 1746 | #define MONITOR_PANIC 0x00000020 |
@@ -1767,8 +1763,8 @@ extern struct aac_common aac_config; | |||
1767 | * For FIB communication, we need all of the following things | 1763 | * For FIB communication, we need all of the following things |
1768 | * to send back to the user. | 1764 | * to send back to the user. |
1769 | */ | 1765 | */ |
1770 | 1766 | ||
1771 | #define AifCmdEventNotify 1 /* Notify of event */ | 1767 | #define AifCmdEventNotify 1 /* Notify of event */ |
1772 | #define AifEnConfigChange 3 /* Adapter configuration change */ | 1768 | #define AifEnConfigChange 3 /* Adapter configuration change */ |
1773 | #define AifEnContainerChange 4 /* Container configuration change */ | 1769 | #define AifEnContainerChange 4 /* Container configuration change */ |
1774 | #define AifEnDeviceFailure 5 /* SCSI device failed */ | 1770 | #define AifEnDeviceFailure 5 /* SCSI device failed */ |
@@ -1792,11 +1788,11 @@ extern struct aac_common aac_config; | |||
1792 | #define AifDenVolumeExtendComplete 201 /* A volume extend completed */ | 1788 | #define AifDenVolumeExtendComplete 201 /* A volume extend completed */ |
1793 | #define AifReqJobList 100 /* Gets back complete job list */ | 1789 | #define AifReqJobList 100 /* Gets back complete job list */ |
1794 | #define AifReqJobsForCtr 101 /* Gets back jobs for specific container */ | 1790 | #define AifReqJobsForCtr 101 /* Gets back jobs for specific container */ |
1795 | #define AifReqJobsForScsi 102 /* Gets back jobs for specific SCSI device */ | 1791 | #define AifReqJobsForScsi 102 /* Gets back jobs for specific SCSI device */ |
1796 | #define AifReqJobReport 103 /* Gets back a specific job report or list of them */ | 1792 | #define AifReqJobReport 103 /* Gets back a specific job report or list of them */ |
1797 | #define AifReqTerminateJob 104 /* Terminates job */ | 1793 | #define AifReqTerminateJob 104 /* Terminates job */ |
1798 | #define AifReqSuspendJob 105 /* Suspends a job */ | 1794 | #define AifReqSuspendJob 105 /* Suspends a job */ |
1799 | #define AifReqResumeJob 106 /* Resumes a job */ | 1795 | #define AifReqResumeJob 106 /* Resumes a job */ |
1800 | #define AifReqSendAPIReport 107 /* API generic report requests */ | 1796 | #define AifReqSendAPIReport 107 /* API generic report requests */ |
1801 | #define AifReqAPIJobStart 108 /* Start a job from the API */ | 1797 | #define AifReqAPIJobStart 108 /* Start a job from the API */ |
1802 | #define AifReqAPIJobUpdate 109 /* Update a job report from the API */ | 1798 | #define AifReqAPIJobUpdate 109 /* Update a job report from the API */ |
@@ -1815,8 +1811,8 @@ struct aac_aifcmd { | |||
1815 | }; | 1811 | }; |
1816 | 1812 | ||
1817 | /** | 1813 | /** |
1818 | * Convert capacity to cylinders | 1814 | * Convert capacity to cylinders |
1819 | * accounting for the fact capacity could be a 64 bit value | 1815 | * accounting for the fact capacity could be a 64 bit value |
1820 | * | 1816 | * |
1821 | */ | 1817 | */ |
1822 | static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor) | 1818 | static inline unsigned int cap_to_cyls(sector_t capacity, unsigned divisor) |
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index a27207e27c30..f8afa358b6b6 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
@@ -48,13 +48,13 @@ | |||
48 | * ioctl_send_fib - send a FIB from userspace | 48 | * ioctl_send_fib - send a FIB from userspace |
49 | * @dev: adapter is being processed | 49 | * @dev: adapter is being processed |
50 | * @arg: arguments to the ioctl call | 50 | * @arg: arguments to the ioctl call |
51 | * | 51 | * |
52 | * This routine sends a fib to the adapter on behalf of a user level | 52 | * This routine sends a fib to the adapter on behalf of a user level |
53 | * program. | 53 | * program. |
54 | */ | 54 | */ |
55 | # define AAC_DEBUG_PREAMBLE KERN_INFO | 55 | # define AAC_DEBUG_PREAMBLE KERN_INFO |
56 | # define AAC_DEBUG_POSTAMBLE | 56 | # define AAC_DEBUG_POSTAMBLE |
57 | 57 | ||
58 | static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | 58 | static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) |
59 | { | 59 | { |
60 | struct hw_fib * kfib; | 60 | struct hw_fib * kfib; |
@@ -71,7 +71,7 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
71 | if(fibptr == NULL) { | 71 | if(fibptr == NULL) { |
72 | return -ENOMEM; | 72 | return -ENOMEM; |
73 | } | 73 | } |
74 | 74 | ||
75 | kfib = fibptr->hw_fib_va; | 75 | kfib = fibptr->hw_fib_va; |
76 | /* | 76 | /* |
77 | * First copy in the header so that we can check the size field. | 77 | * First copy in the header so that we can check the size field. |
@@ -109,7 +109,7 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
109 | if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { | 109 | if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { |
110 | aac_adapter_interrupt(dev); | 110 | aac_adapter_interrupt(dev); |
111 | /* | 111 | /* |
112 | * Since we didn't really send a fib, zero out the state to allow | 112 | * Since we didn't really send a fib, zero out the state to allow |
113 | * cleanup code not to assert. | 113 | * cleanup code not to assert. |
114 | */ | 114 | */ |
115 | kfib->header.XferState = 0; | 115 | kfib->header.XferState = 0; |
@@ -169,7 +169,7 @@ static int open_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
169 | 169 | ||
170 | fibctx->type = FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT; | 170 | fibctx->type = FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT; |
171 | fibctx->size = sizeof(struct aac_fib_context); | 171 | fibctx->size = sizeof(struct aac_fib_context); |
172 | /* | 172 | /* |
173 | * Yes yes, I know this could be an index, but we have a | 173 | * Yes yes, I know this could be an index, but we have a |
174 | * better guarantee of uniqueness for the locked loop below. | 174 | * better guarantee of uniqueness for the locked loop below. |
175 | * Without the aid of a persistent history, this also helps | 175 | * Without the aid of a persistent history, this also helps |
@@ -189,7 +189,7 @@ static int open_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
189 | INIT_LIST_HEAD(&fibctx->fib_list); | 189 | INIT_LIST_HEAD(&fibctx->fib_list); |
190 | fibctx->jiffies = jiffies/HZ; | 190 | fibctx->jiffies = jiffies/HZ; |
191 | /* | 191 | /* |
192 | * Now add this context onto the adapter's | 192 | * Now add this context onto the adapter's |
193 | * AdapterFibContext list. | 193 | * AdapterFibContext list. |
194 | */ | 194 | */ |
195 | spin_lock_irqsave(&dev->fib_lock, flags); | 195 | spin_lock_irqsave(&dev->fib_lock, flags); |
@@ -207,12 +207,12 @@ static int open_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
207 | } | 207 | } |
208 | list_add_tail(&fibctx->next, &dev->fib_list); | 208 | list_add_tail(&fibctx->next, &dev->fib_list); |
209 | spin_unlock_irqrestore(&dev->fib_lock, flags); | 209 | spin_unlock_irqrestore(&dev->fib_lock, flags); |
210 | if (copy_to_user(arg, &fibctx->unique, | 210 | if (copy_to_user(arg, &fibctx->unique, |
211 | sizeof(fibctx->unique))) { | 211 | sizeof(fibctx->unique))) { |
212 | status = -EFAULT; | 212 | status = -EFAULT; |
213 | } else { | 213 | } else { |
214 | status = 0; | 214 | status = 0; |
215 | } | 215 | } |
216 | } | 216 | } |
217 | return status; | 217 | return status; |
218 | } | 218 | } |
@@ -221,8 +221,8 @@ static int open_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
221 | * next_getadapter_fib - get the next fib | 221 | * next_getadapter_fib - get the next fib |
222 | * @dev: adapter to use | 222 | * @dev: adapter to use |
223 | * @arg: ioctl argument | 223 | * @arg: ioctl argument |
224 | * | 224 | * |
225 | * This routine will get the next Fib, if available, from the AdapterFibContext | 225 | * This routine will get the next Fib, if available, from the AdapterFibContext |
226 | * passed in from the user. | 226 | * passed in from the user. |
227 | */ | 227 | */ |
228 | 228 | ||
@@ -234,7 +234,7 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
234 | int status; | 234 | int status; |
235 | struct list_head * entry; | 235 | struct list_head * entry; |
236 | unsigned long flags; | 236 | unsigned long flags; |
237 | 237 | ||
238 | if(copy_from_user((void *)&f, arg, sizeof(struct fib_ioctl))) | 238 | if(copy_from_user((void *)&f, arg, sizeof(struct fib_ioctl))) |
239 | return -EFAULT; | 239 | return -EFAULT; |
240 | /* | 240 | /* |
@@ -280,7 +280,7 @@ return_fib: | |||
280 | */ | 280 | */ |
281 | entry = fibctx->fib_list.next; | 281 | entry = fibctx->fib_list.next; |
282 | list_del(entry); | 282 | list_del(entry); |
283 | 283 | ||
284 | fib = list_entry(entry, struct fib, fiblink); | 284 | fib = list_entry(entry, struct fib, fiblink); |
285 | fibctx->count--; | 285 | fibctx->count--; |
286 | spin_unlock_irqrestore(&dev->fib_lock, flags); | 286 | spin_unlock_irqrestore(&dev->fib_lock, flags); |
@@ -288,7 +288,7 @@ return_fib: | |||
288 | kfree(fib->hw_fib_va); | 288 | kfree(fib->hw_fib_va); |
289 | kfree(fib); | 289 | kfree(fib); |
290 | return -EFAULT; | 290 | return -EFAULT; |
291 | } | 291 | } |
292 | /* | 292 | /* |
293 | * Free the space occupied by this copy of the fib. | 293 | * Free the space occupied by this copy of the fib. |
294 | */ | 294 | */ |
@@ -317,7 +317,7 @@ return_fib: | |||
317 | } | 317 | } |
318 | } else { | 318 | } else { |
319 | status = -EAGAIN; | 319 | status = -EAGAIN; |
320 | } | 320 | } |
321 | } | 321 | } |
322 | fibctx->jiffies = jiffies/HZ; | 322 | fibctx->jiffies = jiffies/HZ; |
323 | return status; | 323 | return status; |
@@ -367,7 +367,7 @@ int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context * fibctx) | |||
367 | * | 367 | * |
368 | * This routine will close down the fibctx passed in from the user. | 368 | * This routine will close down the fibctx passed in from the user. |
369 | */ | 369 | */ |
370 | 370 | ||
371 | static int close_getadapter_fib(struct aac_dev * dev, void __user *arg) | 371 | static int close_getadapter_fib(struct aac_dev * dev, void __user *arg) |
372 | { | 372 | { |
373 | struct aac_fib_context *fibctx; | 373 | struct aac_fib_context *fibctx; |
@@ -414,7 +414,7 @@ static int close_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
414 | * @arg: ioctl arguments | 414 | * @arg: ioctl arguments |
415 | * | 415 | * |
416 | * This routine returns the driver version. | 416 | * This routine returns the driver version. |
417 | * Under Linux, there have been no version incompatibilities, so this is | 417 | * Under Linux, there have been no version incompatibilities, so this is |
418 | * simple! | 418 | * simple! |
419 | */ | 419 | */ |
420 | 420 | ||
@@ -425,12 +425,12 @@ static int check_revision(struct aac_dev *dev, void __user *arg) | |||
425 | u32 version; | 425 | u32 version; |
426 | 426 | ||
427 | response.compat = 1; | 427 | response.compat = 1; |
428 | version = (simple_strtol(driver_version, | 428 | version = (simple_strtol(driver_version, |
429 | &driver_version, 10) << 24) | 0x00000400; | 429 | &driver_version, 10) << 24) | 0x00000400; |
430 | version += simple_strtol(driver_version + 1, &driver_version, 10) << 16; | 430 | version += simple_strtol(driver_version + 1, &driver_version, 10) << 16; |
431 | version += simple_strtol(driver_version + 1, NULL, 10); | 431 | version += simple_strtol(driver_version + 1, NULL, 10); |
432 | response.version = cpu_to_le32(version); | 432 | response.version = cpu_to_le32(version); |
433 | # if (defined(AAC_DRIVER_BUILD)) | 433 | # ifdef AAC_DRIVER_BUILD |
434 | response.build = cpu_to_le32(AAC_DRIVER_BUILD); | 434 | response.build = cpu_to_le32(AAC_DRIVER_BUILD); |
435 | # else | 435 | # else |
436 | response.build = cpu_to_le32(9999); | 436 | response.build = cpu_to_le32(9999); |
@@ -474,7 +474,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
474 | return -EBUSY; | 474 | return -EBUSY; |
475 | } | 475 | } |
476 | if (!capable(CAP_SYS_ADMIN)){ | 476 | if (!capable(CAP_SYS_ADMIN)){ |
477 | dprintk((KERN_DEBUG"aacraid: No permission to send raw srb\n")); | 477 | dprintk((KERN_DEBUG"aacraid: No permission to send raw srb\n")); |
478 | return -EPERM; | 478 | return -EPERM; |
479 | } | 479 | } |
480 | /* | 480 | /* |
@@ -489,7 +489,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
489 | 489 | ||
490 | memset(sg_list, 0, sizeof(sg_list)); /* cleanup may take issue */ | 490 | memset(sg_list, 0, sizeof(sg_list)); /* cleanup may take issue */ |
491 | if(copy_from_user(&fibsize, &user_srb->count,sizeof(u32))){ | 491 | if(copy_from_user(&fibsize, &user_srb->count,sizeof(u32))){ |
492 | dprintk((KERN_DEBUG"aacraid: Could not copy data size from user\n")); | 492 | dprintk((KERN_DEBUG"aacraid: Could not copy data size from user\n")); |
493 | rcode = -EFAULT; | 493 | rcode = -EFAULT; |
494 | goto cleanup; | 494 | goto cleanup; |
495 | } | 495 | } |
@@ -506,7 +506,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
506 | goto cleanup; | 506 | goto cleanup; |
507 | } | 507 | } |
508 | if(copy_from_user(user_srbcmd, user_srb,fibsize)){ | 508 | if(copy_from_user(user_srbcmd, user_srb,fibsize)){ |
509 | dprintk((KERN_DEBUG"aacraid: Could not copy srb from user\n")); | 509 | dprintk((KERN_DEBUG"aacraid: Could not copy srb from user\n")); |
510 | rcode = -EFAULT; | 510 | rcode = -EFAULT; |
511 | goto cleanup; | 511 | goto cleanup; |
512 | } | 512 | } |
@@ -525,7 +525,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
525 | srbcmd->retry_limit = 0; // Obsolete parameter | 525 | srbcmd->retry_limit = 0; // Obsolete parameter |
526 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); | 526 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); |
527 | memcpy(srbcmd->cdb, user_srbcmd->cdb, sizeof(srbcmd->cdb)); | 527 | memcpy(srbcmd->cdb, user_srbcmd->cdb, sizeof(srbcmd->cdb)); |
528 | 528 | ||
529 | switch (flags & (SRB_DataIn | SRB_DataOut)) { | 529 | switch (flags & (SRB_DataIn | SRB_DataOut)) { |
530 | case SRB_DataOut: | 530 | case SRB_DataOut: |
531 | data_dir = DMA_TO_DEVICE; | 531 | data_dir = DMA_TO_DEVICE; |
@@ -593,7 +593,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
593 | sg_list[i] = p; // save so we can clean up later | 593 | sg_list[i] = p; // save so we can clean up later |
594 | sg_indx = i; | 594 | sg_indx = i; |
595 | 595 | ||
596 | if( flags & SRB_DataOut ){ | 596 | if (flags & SRB_DataOut) { |
597 | if(copy_from_user(p,sg_user[i],upsg->sg[i].count)){ | 597 | if(copy_from_user(p,sg_user[i],upsg->sg[i].count)){ |
598 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); | 598 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); |
599 | rcode = -EFAULT; | 599 | rcode = -EFAULT; |
@@ -636,7 +636,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
636 | sg_list[i] = p; // save so we can clean up later | 636 | sg_list[i] = p; // save so we can clean up later |
637 | sg_indx = i; | 637 | sg_indx = i; |
638 | 638 | ||
639 | if( flags & SRB_DataOut ){ | 639 | if (flags & SRB_DataOut) { |
640 | if(copy_from_user(p,sg_user[i],upsg->sg[i].count)){ | 640 | if(copy_from_user(p,sg_user[i],upsg->sg[i].count)){ |
641 | kfree (usg); | 641 | kfree (usg); |
642 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); | 642 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); |
@@ -679,7 +679,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
679 | sg_list[i] = p; // save so we can clean up later | 679 | sg_list[i] = p; // save so we can clean up later |
680 | sg_indx = i; | 680 | sg_indx = i; |
681 | 681 | ||
682 | if( flags & SRB_DataOut ){ | 682 | if (flags & SRB_DataOut) { |
683 | if(copy_from_user(p,sg_user[i],usg->sg[i].count)){ | 683 | if(copy_from_user(p,sg_user[i],usg->sg[i].count)){ |
684 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); | 684 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); |
685 | rcode = -EFAULT; | 685 | rcode = -EFAULT; |
@@ -707,7 +707,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
707 | sg_list[i] = p; // save so we can clean up later | 707 | sg_list[i] = p; // save so we can clean up later |
708 | sg_indx = i; | 708 | sg_indx = i; |
709 | 709 | ||
710 | if( flags & SRB_DataOut ){ | 710 | if (flags & SRB_DataOut) { |
711 | if(copy_from_user(p, sg_user[i], | 711 | if(copy_from_user(p, sg_user[i], |
712 | upsg->sg[i].count)) { | 712 | upsg->sg[i].count)) { |
713 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); | 713 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data from user\n")); |
@@ -733,19 +733,19 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
733 | } | 733 | } |
734 | 734 | ||
735 | if (status != 0){ | 735 | if (status != 0){ |
736 | dprintk((KERN_DEBUG"aacraid: Could not send raw srb fib to hba\n")); | 736 | dprintk((KERN_DEBUG"aacraid: Could not send raw srb fib to hba\n")); |
737 | rcode = -ENXIO; | 737 | rcode = -ENXIO; |
738 | goto cleanup; | 738 | goto cleanup; |
739 | } | 739 | } |
740 | 740 | ||
741 | if( flags & SRB_DataIn ) { | 741 | if (flags & SRB_DataIn) { |
742 | for(i = 0 ; i <= sg_indx; i++){ | 742 | for(i = 0 ; i <= sg_indx; i++){ |
743 | byte_count = le32_to_cpu( | 743 | byte_count = le32_to_cpu( |
744 | (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64) | 744 | (dev->adapter_info.options & AAC_OPT_SGMAP_HOST64) |
745 | ? ((struct sgmap64*)&srbcmd->sg)->sg[i].count | 745 | ? ((struct sgmap64*)&srbcmd->sg)->sg[i].count |
746 | : srbcmd->sg.sg[i].count); | 746 | : srbcmd->sg.sg[i].count); |
747 | if(copy_to_user(sg_user[i], sg_list[i], byte_count)){ | 747 | if(copy_to_user(sg_user[i], sg_list[i], byte_count)){ |
748 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data to user\n")); | 748 | dprintk((KERN_DEBUG"aacraid: Could not copy sg data to user\n")); |
749 | rcode = -EFAULT; | 749 | rcode = -EFAULT; |
750 | goto cleanup; | 750 | goto cleanup; |
751 | 751 | ||
@@ -755,7 +755,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
755 | 755 | ||
756 | reply = (struct aac_srb_reply *) fib_data(srbfib); | 756 | reply = (struct aac_srb_reply *) fib_data(srbfib); |
757 | if(copy_to_user(user_reply,reply,sizeof(struct aac_srb_reply))){ | 757 | if(copy_to_user(user_reply,reply,sizeof(struct aac_srb_reply))){ |
758 | dprintk((KERN_DEBUG"aacraid: Could not copy reply to user\n")); | 758 | dprintk((KERN_DEBUG"aacraid: Could not copy reply to user\n")); |
759 | rcode = -EFAULT; | 759 | rcode = -EFAULT; |
760 | goto cleanup; | 760 | goto cleanup; |
761 | } | 761 | } |
@@ -774,34 +774,34 @@ cleanup: | |||
774 | } | 774 | } |
775 | 775 | ||
776 | struct aac_pci_info { | 776 | struct aac_pci_info { |
777 | u32 bus; | 777 | u32 bus; |
778 | u32 slot; | 778 | u32 slot; |
779 | }; | 779 | }; |
780 | 780 | ||
781 | 781 | ||
782 | static int aac_get_pci_info(struct aac_dev* dev, void __user *arg) | 782 | static int aac_get_pci_info(struct aac_dev* dev, void __user *arg) |
783 | { | 783 | { |
784 | struct aac_pci_info pci_info; | 784 | struct aac_pci_info pci_info; |
785 | 785 | ||
786 | pci_info.bus = dev->pdev->bus->number; | 786 | pci_info.bus = dev->pdev->bus->number; |
787 | pci_info.slot = PCI_SLOT(dev->pdev->devfn); | 787 | pci_info.slot = PCI_SLOT(dev->pdev->devfn); |
788 | 788 | ||
789 | if (copy_to_user(arg, &pci_info, sizeof(struct aac_pci_info))) { | 789 | if (copy_to_user(arg, &pci_info, sizeof(struct aac_pci_info))) { |
790 | dprintk((KERN_DEBUG "aacraid: Could not copy pci info\n")); | 790 | dprintk((KERN_DEBUG "aacraid: Could not copy pci info\n")); |
791 | return -EFAULT; | 791 | return -EFAULT; |
792 | } | 792 | } |
793 | return 0; | 793 | return 0; |
794 | } | 794 | } |
795 | 795 | ||
796 | 796 | ||
797 | int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg) | 797 | int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg) |
798 | { | 798 | { |
799 | int status; | 799 | int status; |
800 | 800 | ||
801 | /* | 801 | /* |
802 | * HBA gets first crack | 802 | * HBA gets first crack |
803 | */ | 803 | */ |
804 | 804 | ||
805 | status = aac_dev_ioctl(dev, cmd, arg); | 805 | status = aac_dev_ioctl(dev, cmd, arg); |
806 | if(status != -ENOTTY) | 806 | if(status != -ENOTTY) |
807 | return status; | 807 | return status; |
@@ -831,7 +831,7 @@ int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg) | |||
831 | break; | 831 | break; |
832 | default: | 832 | default: |
833 | status = -ENOTTY; | 833 | status = -ENOTTY; |
834 | break; | 834 | break; |
835 | } | 835 | } |
836 | return status; | 836 | return status; |
837 | } | 837 | } |
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 6d88f30296e1..1dd2e57c3345 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c | |||
@@ -56,7 +56,7 @@ | |||
56 | * Allocate and map the shared PCI space for the FIB blocks used to | 56 | * Allocate and map the shared PCI space for the FIB blocks used to |
57 | * talk to the Adaptec firmware. | 57 | * talk to the Adaptec firmware. |
58 | */ | 58 | */ |
59 | 59 | ||
60 | static int fib_map_alloc(struct aac_dev *dev) | 60 | static int fib_map_alloc(struct aac_dev *dev) |
61 | { | 61 | { |
62 | dprintk((KERN_INFO | 62 | dprintk((KERN_INFO |
@@ -109,14 +109,16 @@ int aac_fib_setup(struct aac_dev * dev) | |||
109 | } | 109 | } |
110 | if (i<0) | 110 | if (i<0) |
111 | return -ENOMEM; | 111 | return -ENOMEM; |
112 | 112 | ||
113 | hw_fib = dev->hw_fib_va; | 113 | hw_fib = dev->hw_fib_va; |
114 | hw_fib_pa = dev->hw_fib_pa; | 114 | hw_fib_pa = dev->hw_fib_pa; |
115 | memset(hw_fib, 0, dev->max_fib_size * (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB)); | 115 | memset(hw_fib, 0, dev->max_fib_size * (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB)); |
116 | /* | 116 | /* |
117 | * Initialise the fibs | 117 | * Initialise the fibs |
118 | */ | 118 | */ |
119 | for (i = 0, fibptr = &dev->fibs[i]; i < (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB); i++, fibptr++) | 119 | for (i = 0, fibptr = &dev->fibs[i]; |
120 | i < (dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB); | ||
121 | i++, fibptr++) | ||
120 | { | 122 | { |
121 | fibptr->dev = dev; | 123 | fibptr->dev = dev; |
122 | fibptr->hw_fib_va = hw_fib; | 124 | fibptr->hw_fib_va = hw_fib; |
@@ -148,13 +150,13 @@ int aac_fib_setup(struct aac_dev * dev) | |||
148 | * Allocate a fib from the adapter fib pool. If the pool is empty we | 150 | * Allocate a fib from the adapter fib pool. If the pool is empty we |
149 | * return NULL. | 151 | * return NULL. |
150 | */ | 152 | */ |
151 | 153 | ||
152 | struct fib *aac_fib_alloc(struct aac_dev *dev) | 154 | struct fib *aac_fib_alloc(struct aac_dev *dev) |
153 | { | 155 | { |
154 | struct fib * fibptr; | 156 | struct fib * fibptr; |
155 | unsigned long flags; | 157 | unsigned long flags; |
156 | spin_lock_irqsave(&dev->fib_lock, flags); | 158 | spin_lock_irqsave(&dev->fib_lock, flags); |
157 | fibptr = dev->free_fib; | 159 | fibptr = dev->free_fib; |
158 | if(!fibptr){ | 160 | if(!fibptr){ |
159 | spin_unlock_irqrestore(&dev->fib_lock, flags); | 161 | spin_unlock_irqrestore(&dev->fib_lock, flags); |
160 | return fibptr; | 162 | return fibptr; |
@@ -184,7 +186,7 @@ struct fib *aac_fib_alloc(struct aac_dev *dev) | |||
184 | * | 186 | * |
185 | * Frees up a fib and places it on the appropriate queue | 187 | * Frees up a fib and places it on the appropriate queue |
186 | */ | 188 | */ |
187 | 189 | ||
188 | void aac_fib_free(struct fib *fibptr) | 190 | void aac_fib_free(struct fib *fibptr) |
189 | { | 191 | { |
190 | unsigned long flags; | 192 | unsigned long flags; |
@@ -205,10 +207,10 @@ void aac_fib_free(struct fib *fibptr) | |||
205 | /** | 207 | /** |
206 | * aac_fib_init - initialise a fib | 208 | * aac_fib_init - initialise a fib |
207 | * @fibptr: The fib to initialize | 209 | * @fibptr: The fib to initialize |
208 | * | 210 | * |
209 | * Set up the generic fib fields ready for use | 211 | * Set up the generic fib fields ready for use |
210 | */ | 212 | */ |
211 | 213 | ||
212 | void aac_fib_init(struct fib *fibptr) | 214 | void aac_fib_init(struct fib *fibptr) |
213 | { | 215 | { |
214 | struct hw_fib *hw_fib = fibptr->hw_fib_va; | 216 | struct hw_fib *hw_fib = fibptr->hw_fib_va; |
@@ -228,12 +230,12 @@ void aac_fib_init(struct fib *fibptr) | |||
228 | * Will deallocate and return to the free pool the FIB pointed to by the | 230 | * Will deallocate and return to the free pool the FIB pointed to by the |
229 | * caller. | 231 | * caller. |
230 | */ | 232 | */ |
231 | 233 | ||
232 | static void fib_dealloc(struct fib * fibptr) | 234 | static void fib_dealloc(struct fib * fibptr) |
233 | { | 235 | { |
234 | struct hw_fib *hw_fib = fibptr->hw_fib_va; | 236 | struct hw_fib *hw_fib = fibptr->hw_fib_va; |
235 | BUG_ON(hw_fib->header.StructType != FIB_MAGIC); | 237 | BUG_ON(hw_fib->header.StructType != FIB_MAGIC); |
236 | hw_fib->header.XferState = 0; | 238 | hw_fib->header.XferState = 0; |
237 | } | 239 | } |
238 | 240 | ||
239 | /* | 241 | /* |
@@ -242,7 +244,7 @@ static void fib_dealloc(struct fib * fibptr) | |||
242 | * these routines and are the only routines which have a knowledge of the | 244 | * these routines and are the only routines which have a knowledge of the |
243 | * how these queues are implemented. | 245 | * how these queues are implemented. |
244 | */ | 246 | */ |
245 | 247 | ||
246 | /** | 248 | /** |
247 | * aac_get_entry - get a queue entry | 249 | * aac_get_entry - get a queue entry |
248 | * @dev: Adapter | 250 | * @dev: Adapter |
@@ -255,7 +257,7 @@ static void fib_dealloc(struct fib * fibptr) | |||
255 | * is full(no free entries) than no entry is returned and the function returns 0 otherwise 1 is | 257 | * is full(no free entries) than no entry is returned and the function returns 0 otherwise 1 is |
256 | * returned. | 258 | * returned. |
257 | */ | 259 | */ |
258 | 260 | ||
259 | static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entry, u32 * index, unsigned long *nonotify) | 261 | static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entry, u32 * index, unsigned long *nonotify) |
260 | { | 262 | { |
261 | struct aac_queue * q; | 263 | struct aac_queue * q; |
@@ -280,26 +282,27 @@ static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entr | |||
280 | idx = ADAP_NORM_RESP_ENTRIES; | 282 | idx = ADAP_NORM_RESP_ENTRIES; |
281 | } | 283 | } |
282 | if (idx != le32_to_cpu(*(q->headers.consumer))) | 284 | if (idx != le32_to_cpu(*(q->headers.consumer))) |
283 | *nonotify = 1; | 285 | *nonotify = 1; |
284 | } | 286 | } |
285 | 287 | ||
286 | if (qid == AdapNormCmdQueue) { | 288 | if (qid == AdapNormCmdQueue) { |
287 | if (*index >= ADAP_NORM_CMD_ENTRIES) | 289 | if (*index >= ADAP_NORM_CMD_ENTRIES) |
288 | *index = 0; /* Wrap to front of the Producer Queue. */ | 290 | *index = 0; /* Wrap to front of the Producer Queue. */ |
289 | } else { | 291 | } else { |
290 | if (*index >= ADAP_NORM_RESP_ENTRIES) | 292 | if (*index >= ADAP_NORM_RESP_ENTRIES) |
291 | *index = 0; /* Wrap to front of the Producer Queue. */ | 293 | *index = 0; /* Wrap to front of the Producer Queue. */ |
292 | } | 294 | } |
293 | 295 | ||
294 | if ((*index + 1) == le32_to_cpu(*(q->headers.consumer))) { /* Queue is full */ | 296 | /* Queue is full */ |
297 | if ((*index + 1) == le32_to_cpu(*(q->headers.consumer))) { | ||
295 | printk(KERN_WARNING "Queue %d full, %u outstanding.\n", | 298 | printk(KERN_WARNING "Queue %d full, %u outstanding.\n", |
296 | qid, q->numpending); | 299 | qid, q->numpending); |
297 | return 0; | 300 | return 0; |
298 | } else { | 301 | } else { |
299 | *entry = q->base + *index; | 302 | *entry = q->base + *index; |
300 | return 1; | 303 | return 1; |
301 | } | 304 | } |
302 | } | 305 | } |
303 | 306 | ||
304 | /** | 307 | /** |
305 | * aac_queue_get - get the next free QE | 308 | * aac_queue_get - get the next free QE |
@@ -321,31 +324,29 @@ int aac_queue_get(struct aac_dev * dev, u32 * index, u32 qid, struct hw_fib * hw | |||
321 | { | 324 | { |
322 | struct aac_entry * entry = NULL; | 325 | struct aac_entry * entry = NULL; |
323 | int map = 0; | 326 | int map = 0; |
324 | 327 | ||
325 | if (qid == AdapNormCmdQueue) { | 328 | if (qid == AdapNormCmdQueue) { |
326 | /* if no entries wait for some if caller wants to */ | 329 | /* if no entries wait for some if caller wants to */ |
327 | while (!aac_get_entry(dev, qid, &entry, index, nonotify)) | 330 | while (!aac_get_entry(dev, qid, &entry, index, nonotify)) { |
328 | { | ||
329 | printk(KERN_ERR "GetEntries failed\n"); | 331 | printk(KERN_ERR "GetEntries failed\n"); |
330 | } | 332 | } |
331 | /* | 333 | /* |
332 | * Setup queue entry with a command, status and fib mapped | 334 | * Setup queue entry with a command, status and fib mapped |
333 | */ | 335 | */ |
334 | entry->size = cpu_to_le32(le16_to_cpu(hw_fib->header.Size)); | 336 | entry->size = cpu_to_le32(le16_to_cpu(hw_fib->header.Size)); |
335 | map = 1; | 337 | map = 1; |
336 | } else { | 338 | } else { |
337 | while(!aac_get_entry(dev, qid, &entry, index, nonotify)) | 339 | while (!aac_get_entry(dev, qid, &entry, index, nonotify)) { |
338 | { | ||
339 | /* if no entries wait for some if caller wants to */ | 340 | /* if no entries wait for some if caller wants to */ |
340 | } | 341 | } |
341 | /* | 342 | /* |
342 | * Setup queue entry with command, status and fib mapped | 343 | * Setup queue entry with command, status and fib mapped |
343 | */ | 344 | */ |
344 | entry->size = cpu_to_le32(le16_to_cpu(hw_fib->header.Size)); | 345 | entry->size = cpu_to_le32(le16_to_cpu(hw_fib->header.Size)); |
345 | entry->addr = hw_fib->header.SenderFibAddress; | 346 | entry->addr = hw_fib->header.SenderFibAddress; |
346 | /* Restore adapters pointer to the FIB */ | 347 | /* Restore adapters pointer to the FIB */ |
347 | hw_fib->header.ReceiverFibAddress = hw_fib->header.SenderFibAddress; /* Let the adapter now where to find its data */ | 348 | hw_fib->header.ReceiverFibAddress = hw_fib->header.SenderFibAddress; /* Let the adapter now where to find its data */ |
348 | map = 0; | 349 | map = 0; |
349 | } | 350 | } |
350 | /* | 351 | /* |
351 | * If MapFib is true than we need to map the Fib and put pointers | 352 | * If MapFib is true than we need to map the Fib and put pointers |
@@ -357,8 +358,8 @@ int aac_queue_get(struct aac_dev * dev, u32 * index, u32 qid, struct hw_fib * hw | |||
357 | } | 358 | } |
358 | 359 | ||
359 | /* | 360 | /* |
360 | * Define the highest level of host to adapter communication routines. | 361 | * Define the highest level of host to adapter communication routines. |
361 | * These routines will support host to adapter FS commuication. These | 362 | * These routines will support host to adapter FS commuication. These |
362 | * routines have no knowledge of the commuication method used. This level | 363 | * routines have no knowledge of the commuication method used. This level |
363 | * sends and receives FIBs. This level has no knowledge of how these FIBs | 364 | * sends and receives FIBs. This level has no knowledge of how these FIBs |
364 | * get passed back and forth. | 365 | * get passed back and forth. |
@@ -380,7 +381,7 @@ int aac_queue_get(struct aac_dev * dev, u32 * index, u32 qid, struct hw_fib * hw | |||
380 | * an event to wait on must be supplied. This event will be set when a | 381 | * an event to wait on must be supplied. This event will be set when a |
381 | * response FIB is received from the adapter. | 382 | * response FIB is received from the adapter. |
382 | */ | 383 | */ |
383 | 384 | ||
384 | int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | 385 | int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, |
385 | int priority, int wait, int reply, fib_callback callback, | 386 | int priority, int wait, int reply, fib_callback callback, |
386 | void *callback_data) | 387 | void *callback_data) |
@@ -393,13 +394,13 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
393 | if (!(hw_fib->header.XferState & cpu_to_le32(HostOwned))) | 394 | if (!(hw_fib->header.XferState & cpu_to_le32(HostOwned))) |
394 | return -EBUSY; | 395 | return -EBUSY; |
395 | /* | 396 | /* |
396 | * There are 5 cases with the wait and reponse requested flags. | 397 | * There are 5 cases with the wait and reponse requested flags. |
397 | * The only invalid cases are if the caller requests to wait and | 398 | * The only invalid cases are if the caller requests to wait and |
398 | * does not request a response and if the caller does not want a | 399 | * does not request a response and if the caller does not want a |
399 | * response and the Fib is not allocated from pool. If a response | 400 | * response and the Fib is not allocated from pool. If a response |
400 | * is not requesed the Fib will just be deallocaed by the DPC | 401 | * is not requesed the Fib will just be deallocaed by the DPC |
401 | * routine when the response comes back from the adapter. No | 402 | * routine when the response comes back from the adapter. No |
402 | * further processing will be done besides deleting the Fib. We | 403 | * further processing will be done besides deleting the Fib. We |
403 | * will have a debug mode where the adapter can notify the host | 404 | * will have a debug mode where the adapter can notify the host |
404 | * it had a problem and the host can log that fact. | 405 | * it had a problem and the host can log that fact. |
405 | */ | 406 | */ |
@@ -415,7 +416,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
415 | } else if (wait && reply) { | 416 | } else if (wait && reply) { |
416 | hw_fib->header.XferState |= cpu_to_le32(ResponseExpected); | 417 | hw_fib->header.XferState |= cpu_to_le32(ResponseExpected); |
417 | FIB_COUNTER_INCREMENT(aac_config.NormalSent); | 418 | FIB_COUNTER_INCREMENT(aac_config.NormalSent); |
418 | } | 419 | } |
419 | /* | 420 | /* |
420 | * Map the fib into 32bits by using the fib number | 421 | * Map the fib into 32bits by using the fib number |
421 | */ | 422 | */ |
@@ -438,7 +439,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
438 | hw_fib->header.Size = cpu_to_le16(sizeof(struct aac_fibhdr) + size); | 439 | hw_fib->header.Size = cpu_to_le16(sizeof(struct aac_fibhdr) + size); |
439 | if (le16_to_cpu(hw_fib->header.Size) > le16_to_cpu(hw_fib->header.SenderSize)) { | 440 | if (le16_to_cpu(hw_fib->header.Size) > le16_to_cpu(hw_fib->header.SenderSize)) { |
440 | return -EMSGSIZE; | 441 | return -EMSGSIZE; |
441 | } | 442 | } |
442 | /* | 443 | /* |
443 | * Get a queue entry connect the FIB to it and send an notify | 444 | * Get a queue entry connect the FIB to it and send an notify |
444 | * the adapter a command is ready. | 445 | * the adapter a command is ready. |
@@ -475,9 +476,9 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
475 | aac_adapter_deliver(fibptr); | 476 | aac_adapter_deliver(fibptr); |
476 | 477 | ||
477 | /* | 478 | /* |
478 | * If the caller wanted us to wait for response wait now. | 479 | * If the caller wanted us to wait for response wait now. |
479 | */ | 480 | */ |
480 | 481 | ||
481 | if (wait) { | 482 | if (wait) { |
482 | spin_unlock_irqrestore(&fibptr->event_lock, flags); | 483 | spin_unlock_irqrestore(&fibptr->event_lock, flags); |
483 | /* Only set for first known interruptable command */ | 484 | /* Only set for first known interruptable command */ |
@@ -524,7 +525,7 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
524 | } | 525 | } |
525 | spin_unlock_irqrestore(&fibptr->event_lock, flags); | 526 | spin_unlock_irqrestore(&fibptr->event_lock, flags); |
526 | BUG_ON(fibptr->done == 0); | 527 | BUG_ON(fibptr->done == 0); |
527 | 528 | ||
528 | if(unlikely(fibptr->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) | 529 | if(unlikely(fibptr->flags & FIB_CONTEXT_FLAG_TIMED_OUT)) |
529 | return -ETIMEDOUT; | 530 | return -ETIMEDOUT; |
530 | return 0; | 531 | return 0; |
@@ -539,15 +540,15 @@ int aac_fib_send(u16 command, struct fib *fibptr, unsigned long size, | |||
539 | return 0; | 540 | return 0; |
540 | } | 541 | } |
541 | 542 | ||
542 | /** | 543 | /** |
543 | * aac_consumer_get - get the top of the queue | 544 | * aac_consumer_get - get the top of the queue |
544 | * @dev: Adapter | 545 | * @dev: Adapter |
545 | * @q: Queue | 546 | * @q: Queue |
546 | * @entry: Return entry | 547 | * @entry: Return entry |
547 | * | 548 | * |
548 | * Will return a pointer to the entry on the top of the queue requested that | 549 | * Will return a pointer to the entry on the top of the queue requested that |
549 | * we are a consumer of, and return the address of the queue entry. It does | 550 | * we are a consumer of, and return the address of the queue entry. It does |
550 | * not change the state of the queue. | 551 | * not change the state of the queue. |
551 | */ | 552 | */ |
552 | 553 | ||
553 | int aac_consumer_get(struct aac_dev * dev, struct aac_queue * q, struct aac_entry **entry) | 554 | int aac_consumer_get(struct aac_dev * dev, struct aac_queue * q, struct aac_entry **entry) |
@@ -562,10 +563,10 @@ int aac_consumer_get(struct aac_dev * dev, struct aac_queue * q, struct aac_entr | |||
562 | * the end of the queue, else we just use the entry | 563 | * the end of the queue, else we just use the entry |
563 | * pointed to by the header index | 564 | * pointed to by the header index |
564 | */ | 565 | */ |
565 | if (le32_to_cpu(*q->headers.consumer) >= q->entries) | 566 | if (le32_to_cpu(*q->headers.consumer) >= q->entries) |
566 | index = 0; | 567 | index = 0; |
567 | else | 568 | else |
568 | index = le32_to_cpu(*q->headers.consumer); | 569 | index = le32_to_cpu(*q->headers.consumer); |
569 | *entry = q->base + index; | 570 | *entry = q->base + index; |
570 | status = 1; | 571 | status = 1; |
571 | } | 572 | } |
@@ -589,12 +590,12 @@ void aac_consumer_free(struct aac_dev * dev, struct aac_queue *q, u32 qid) | |||
589 | 590 | ||
590 | if ((le32_to_cpu(*q->headers.producer)+1) == le32_to_cpu(*q->headers.consumer)) | 591 | if ((le32_to_cpu(*q->headers.producer)+1) == le32_to_cpu(*q->headers.consumer)) |
591 | wasfull = 1; | 592 | wasfull = 1; |
592 | 593 | ||
593 | if (le32_to_cpu(*q->headers.consumer) >= q->entries) | 594 | if (le32_to_cpu(*q->headers.consumer) >= q->entries) |
594 | *q->headers.consumer = cpu_to_le32(1); | 595 | *q->headers.consumer = cpu_to_le32(1); |
595 | else | 596 | else |
596 | *q->headers.consumer = cpu_to_le32(le32_to_cpu(*q->headers.consumer)+1); | 597 | *q->headers.consumer = cpu_to_le32(le32_to_cpu(*q->headers.consumer)+1); |
597 | 598 | ||
598 | if (wasfull) { | 599 | if (wasfull) { |
599 | switch (qid) { | 600 | switch (qid) { |
600 | 601 | ||
@@ -610,7 +611,7 @@ void aac_consumer_free(struct aac_dev * dev, struct aac_queue *q, u32 qid) | |||
610 | } | 611 | } |
611 | aac_adapter_notify(dev, notify); | 612 | aac_adapter_notify(dev, notify); |
612 | } | 613 | } |
613 | } | 614 | } |
614 | 615 | ||
615 | /** | 616 | /** |
616 | * aac_fib_adapter_complete - complete adapter issued fib | 617 | * aac_fib_adapter_complete - complete adapter issued fib |
@@ -632,32 +633,32 @@ int aac_fib_adapter_complete(struct fib *fibptr, unsigned short size) | |||
632 | if (hw_fib->header.XferState == 0) { | 633 | if (hw_fib->header.XferState == 0) { |
633 | if (dev->comm_interface == AAC_COMM_MESSAGE) | 634 | if (dev->comm_interface == AAC_COMM_MESSAGE) |
634 | kfree (hw_fib); | 635 | kfree (hw_fib); |
635 | return 0; | 636 | return 0; |
636 | } | 637 | } |
637 | /* | 638 | /* |
638 | * If we plan to do anything check the structure type first. | 639 | * If we plan to do anything check the structure type first. |
639 | */ | 640 | */ |
640 | if ( hw_fib->header.StructType != FIB_MAGIC ) { | 641 | if (hw_fib->header.StructType != FIB_MAGIC) { |
641 | if (dev->comm_interface == AAC_COMM_MESSAGE) | 642 | if (dev->comm_interface == AAC_COMM_MESSAGE) |
642 | kfree (hw_fib); | 643 | kfree (hw_fib); |
643 | return -EINVAL; | 644 | return -EINVAL; |
644 | } | 645 | } |
645 | /* | 646 | /* |
646 | * This block handles the case where the adapter had sent us a | 647 | * This block handles the case where the adapter had sent us a |
647 | * command and we have finished processing the command. We | 648 | * command and we have finished processing the command. We |
648 | * call completeFib when we are done processing the command | 649 | * call completeFib when we are done processing the command |
649 | * and want to send a response back to the adapter. This will | 650 | * and want to send a response back to the adapter. This will |
650 | * send the completed cdb to the adapter. | 651 | * send the completed cdb to the adapter. |
651 | */ | 652 | */ |
652 | if (hw_fib->header.XferState & cpu_to_le32(SentFromAdapter)) { | 653 | if (hw_fib->header.XferState & cpu_to_le32(SentFromAdapter)) { |
653 | if (dev->comm_interface == AAC_COMM_MESSAGE) { | 654 | if (dev->comm_interface == AAC_COMM_MESSAGE) { |
654 | kfree (hw_fib); | 655 | kfree (hw_fib); |
655 | } else { | 656 | } else { |
656 | u32 index; | 657 | u32 index; |
657 | hw_fib->header.XferState |= cpu_to_le32(HostProcessed); | 658 | hw_fib->header.XferState |= cpu_to_le32(HostProcessed); |
658 | if (size) { | 659 | if (size) { |
659 | size += sizeof(struct aac_fibhdr); | 660 | size += sizeof(struct aac_fibhdr); |
660 | if (size > le16_to_cpu(hw_fib->header.SenderSize)) | 661 | if (size > le16_to_cpu(hw_fib->header.SenderSize)) |
661 | return -EMSGSIZE; | 662 | return -EMSGSIZE; |
662 | hw_fib->header.Size = cpu_to_le16(size); | 663 | hw_fib->header.Size = cpu_to_le16(size); |
663 | } | 664 | } |
@@ -669,12 +670,11 @@ int aac_fib_adapter_complete(struct fib *fibptr, unsigned short size) | |||
669 | if (!(nointr & (int)aac_config.irq_mod)) | 670 | if (!(nointr & (int)aac_config.irq_mod)) |
670 | aac_adapter_notify(dev, AdapNormRespQueue); | 671 | aac_adapter_notify(dev, AdapNormRespQueue); |
671 | } | 672 | } |
673 | } else { | ||
674 | printk(KERN_WARNING "aac_fib_adapter_complete: " | ||
675 | "Unknown xferstate detected.\n"); | ||
676 | BUG(); | ||
672 | } | 677 | } |
673 | else | ||
674 | { | ||
675 | printk(KERN_WARNING "aac_fib_adapter_complete: Unknown xferstate detected.\n"); | ||
676 | BUG(); | ||
677 | } | ||
678 | return 0; | 678 | return 0; |
679 | } | 679 | } |
680 | 680 | ||
@@ -684,7 +684,7 @@ int aac_fib_adapter_complete(struct fib *fibptr, unsigned short size) | |||
684 | * | 684 | * |
685 | * Will do all necessary work to complete a FIB. | 685 | * Will do all necessary work to complete a FIB. |
686 | */ | 686 | */ |
687 | 687 | ||
688 | int aac_fib_complete(struct fib *fibptr) | 688 | int aac_fib_complete(struct fib *fibptr) |
689 | { | 689 | { |
690 | struct hw_fib * hw_fib = fibptr->hw_fib_va; | 690 | struct hw_fib * hw_fib = fibptr->hw_fib_va; |
@@ -694,15 +694,15 @@ int aac_fib_complete(struct fib *fibptr) | |||
694 | */ | 694 | */ |
695 | 695 | ||
696 | if (hw_fib->header.XferState == 0) | 696 | if (hw_fib->header.XferState == 0) |
697 | return 0; | 697 | return 0; |
698 | /* | 698 | /* |
699 | * If we plan to do anything check the structure type first. | 699 | * If we plan to do anything check the structure type first. |
700 | */ | 700 | */ |
701 | 701 | ||
702 | if (hw_fib->header.StructType != FIB_MAGIC) | 702 | if (hw_fib->header.StructType != FIB_MAGIC) |
703 | return -EINVAL; | 703 | return -EINVAL; |
704 | /* | 704 | /* |
705 | * This block completes a cdb which orginated on the host and we | 705 | * This block completes a cdb which orginated on the host and we |
706 | * just need to deallocate the cdb or reinit it. At this point the | 706 | * just need to deallocate the cdb or reinit it. At this point the |
707 | * command is complete that we had sent to the adapter and this | 707 | * command is complete that we had sent to the adapter and this |
708 | * cdb could be reused. | 708 | * cdb could be reused. |
@@ -723,7 +723,7 @@ int aac_fib_complete(struct fib *fibptr) | |||
723 | fib_dealloc(fibptr); | 723 | fib_dealloc(fibptr); |
724 | } else { | 724 | } else { |
725 | BUG(); | 725 | BUG(); |
726 | } | 726 | } |
727 | return 0; | 727 | return 0; |
728 | } | 728 | } |
729 | 729 | ||
@@ -743,7 +743,7 @@ void aac_printf(struct aac_dev *dev, u32 val) | |||
743 | { | 743 | { |
744 | int length = val & 0xffff; | 744 | int length = val & 0xffff; |
745 | int level = (val >> 16) & 0xffff; | 745 | int level = (val >> 16) & 0xffff; |
746 | 746 | ||
747 | /* | 747 | /* |
748 | * The size of the printfbuf is set in port.c | 748 | * The size of the printfbuf is set in port.c |
749 | * There is no variable or define for it | 749 | * There is no variable or define for it |
@@ -757,7 +757,7 @@ void aac_printf(struct aac_dev *dev, u32 val) | |||
757 | else | 757 | else |
758 | printk(KERN_INFO "%s:%s", dev->name, cp); | 758 | printk(KERN_INFO "%s:%s", dev->name, cp); |
759 | } | 759 | } |
760 | memset(cp, 0, 256); | 760 | memset(cp, 0, 256); |
761 | } | 761 | } |
762 | 762 | ||
763 | 763 | ||
@@ -816,9 +816,9 @@ static void aac_handle_aif(struct aac_dev * dev, struct fib * fibptr) | |||
816 | */ | 816 | */ |
817 | 817 | ||
818 | if ((dev != NULL) && (dev->scsi_host_ptr != NULL)) { | 818 | if ((dev != NULL) && (dev->scsi_host_ptr != NULL)) { |
819 | device = scsi_device_lookup(dev->scsi_host_ptr, | 819 | device = scsi_device_lookup(dev->scsi_host_ptr, |
820 | CONTAINER_TO_CHANNEL(container), | 820 | CONTAINER_TO_CHANNEL(container), |
821 | CONTAINER_TO_ID(container), | 821 | CONTAINER_TO_ID(container), |
822 | CONTAINER_TO_LUN(container)); | 822 | CONTAINER_TO_LUN(container)); |
823 | if (device) { | 823 | if (device) { |
824 | dev->fsa_dev[container].config_needed = CHANGE; | 824 | dev->fsa_dev[container].config_needed = CHANGE; |
@@ -1184,13 +1184,13 @@ static int _aac_reset_adapter(struct aac_dev *aac, int forced) | |||
1184 | } | 1184 | } |
1185 | (void)aac_get_adapter_info(aac); | 1185 | (void)aac_get_adapter_info(aac); |
1186 | if ((quirks & AAC_QUIRK_34SG) && (host->sg_tablesize > 34)) { | 1186 | if ((quirks & AAC_QUIRK_34SG) && (host->sg_tablesize > 34)) { |
1187 | host->sg_tablesize = 34; | 1187 | host->sg_tablesize = 34; |
1188 | host->max_sectors = (host->sg_tablesize * 8) + 112; | 1188 | host->max_sectors = (host->sg_tablesize * 8) + 112; |
1189 | } | 1189 | } |
1190 | if ((quirks & AAC_QUIRK_17SG) && (host->sg_tablesize > 17)) { | 1190 | if ((quirks & AAC_QUIRK_17SG) && (host->sg_tablesize > 17)) { |
1191 | host->sg_tablesize = 17; | 1191 | host->sg_tablesize = 17; |
1192 | host->max_sectors = (host->sg_tablesize * 8) + 112; | 1192 | host->max_sectors = (host->sg_tablesize * 8) + 112; |
1193 | } | 1193 | } |
1194 | aac_get_config_status(aac, 1); | 1194 | aac_get_config_status(aac, 1); |
1195 | aac_get_containers(aac); | 1195 | aac_get_containers(aac); |
1196 | /* | 1196 | /* |
@@ -1461,7 +1461,7 @@ out: | |||
1461 | * until the queue is empty. When the queue is empty it will wait for | 1461 | * until the queue is empty. When the queue is empty it will wait for |
1462 | * more FIBs. | 1462 | * more FIBs. |
1463 | */ | 1463 | */ |
1464 | 1464 | ||
1465 | int aac_command_thread(void *data) | 1465 | int aac_command_thread(void *data) |
1466 | { | 1466 | { |
1467 | struct aac_dev *dev = data; | 1467 | struct aac_dev *dev = data; |
@@ -1487,30 +1487,29 @@ int aac_command_thread(void *data) | |||
1487 | add_wait_queue(&dev->queues->queue[HostNormCmdQueue].cmdready, &wait); | 1487 | add_wait_queue(&dev->queues->queue[HostNormCmdQueue].cmdready, &wait); |
1488 | set_current_state(TASK_INTERRUPTIBLE); | 1488 | set_current_state(TASK_INTERRUPTIBLE); |
1489 | dprintk ((KERN_INFO "aac_command_thread start\n")); | 1489 | dprintk ((KERN_INFO "aac_command_thread start\n")); |
1490 | while(1) | 1490 | while (1) { |
1491 | { | ||
1492 | spin_lock_irqsave(dev->queues->queue[HostNormCmdQueue].lock, flags); | 1491 | spin_lock_irqsave(dev->queues->queue[HostNormCmdQueue].lock, flags); |
1493 | while(!list_empty(&(dev->queues->queue[HostNormCmdQueue].cmdq))) { | 1492 | while(!list_empty(&(dev->queues->queue[HostNormCmdQueue].cmdq))) { |
1494 | struct list_head *entry; | 1493 | struct list_head *entry; |
1495 | struct aac_aifcmd * aifcmd; | 1494 | struct aac_aifcmd * aifcmd; |
1496 | 1495 | ||
1497 | set_current_state(TASK_RUNNING); | 1496 | set_current_state(TASK_RUNNING); |
1498 | 1497 | ||
1499 | entry = dev->queues->queue[HostNormCmdQueue].cmdq.next; | 1498 | entry = dev->queues->queue[HostNormCmdQueue].cmdq.next; |
1500 | list_del(entry); | 1499 | list_del(entry); |
1501 | 1500 | ||
1502 | spin_unlock_irqrestore(dev->queues->queue[HostNormCmdQueue].lock, flags); | 1501 | spin_unlock_irqrestore(dev->queues->queue[HostNormCmdQueue].lock, flags); |
1503 | fib = list_entry(entry, struct fib, fiblink); | 1502 | fib = list_entry(entry, struct fib, fiblink); |
1504 | /* | 1503 | /* |
1505 | * We will process the FIB here or pass it to a | 1504 | * We will process the FIB here or pass it to a |
1506 | * worker thread that is TBD. We Really can't | 1505 | * worker thread that is TBD. We Really can't |
1507 | * do anything at this point since we don't have | 1506 | * do anything at this point since we don't have |
1508 | * anything defined for this thread to do. | 1507 | * anything defined for this thread to do. |
1509 | */ | 1508 | */ |
1510 | hw_fib = fib->hw_fib_va; | 1509 | hw_fib = fib->hw_fib_va; |
1511 | memset(fib, 0, sizeof(struct fib)); | 1510 | memset(fib, 0, sizeof(struct fib)); |
1512 | fib->type = FSAFS_NTC_FIB_CONTEXT; | 1511 | fib->type = FSAFS_NTC_FIB_CONTEXT; |
1513 | fib->size = sizeof( struct fib ); | 1512 | fib->size = sizeof(struct fib); |
1514 | fib->hw_fib_va = hw_fib; | 1513 | fib->hw_fib_va = hw_fib; |
1515 | fib->data = hw_fib->data; | 1514 | fib->data = hw_fib->data; |
1516 | fib->dev = dev; | 1515 | fib->dev = dev; |
@@ -1526,17 +1525,17 @@ int aac_command_thread(void *data) | |||
1526 | } else { | 1525 | } else { |
1527 | /* The u32 here is important and intended. We are using | 1526 | /* The u32 here is important and intended. We are using |
1528 | 32bit wrapping time to fit the adapter field */ | 1527 | 32bit wrapping time to fit the adapter field */ |
1529 | 1528 | ||
1530 | u32 time_now, time_last; | 1529 | u32 time_now, time_last; |
1531 | unsigned long flagv; | 1530 | unsigned long flagv; |
1532 | unsigned num; | 1531 | unsigned num; |
1533 | struct hw_fib ** hw_fib_pool, ** hw_fib_p; | 1532 | struct hw_fib ** hw_fib_pool, ** hw_fib_p; |
1534 | struct fib ** fib_pool, ** fib_p; | 1533 | struct fib ** fib_pool, ** fib_p; |
1535 | 1534 | ||
1536 | /* Sniff events */ | 1535 | /* Sniff events */ |
1537 | if ((aifcmd->command == | 1536 | if ((aifcmd->command == |
1538 | cpu_to_le32(AifCmdEventNotify)) || | 1537 | cpu_to_le32(AifCmdEventNotify)) || |
1539 | (aifcmd->command == | 1538 | (aifcmd->command == |
1540 | cpu_to_le32(AifCmdJobProgress))) { | 1539 | cpu_to_le32(AifCmdJobProgress))) { |
1541 | aac_handle_aif(dev, fib); | 1540 | aac_handle_aif(dev, fib); |
1542 | } | 1541 | } |
@@ -1588,7 +1587,7 @@ int aac_command_thread(void *data) | |||
1588 | spin_lock_irqsave(&dev->fib_lock, flagv); | 1587 | spin_lock_irqsave(&dev->fib_lock, flagv); |
1589 | entry = dev->fib_list.next; | 1588 | entry = dev->fib_list.next; |
1590 | /* | 1589 | /* |
1591 | * For each Context that is on the | 1590 | * For each Context that is on the |
1592 | * fibctxList, make a copy of the | 1591 | * fibctxList, make a copy of the |
1593 | * fib, and then set the event to wake up the | 1592 | * fib, and then set the event to wake up the |
1594 | * thread that is waiting for it. | 1593 | * thread that is waiting for it. |
@@ -1613,7 +1612,7 @@ int aac_command_thread(void *data) | |||
1613 | */ | 1612 | */ |
1614 | time_last = fibctx->jiffies; | 1613 | time_last = fibctx->jiffies; |
1615 | /* | 1614 | /* |
1616 | * Has it been > 2 minutes | 1615 | * Has it been > 2 minutes |
1617 | * since the last read off | 1616 | * since the last read off |
1618 | * the queue? | 1617 | * the queue? |
1619 | */ | 1618 | */ |
@@ -1644,7 +1643,7 @@ int aac_command_thread(void *data) | |||
1644 | */ | 1643 | */ |
1645 | list_add_tail(&newfib->fiblink, &fibctx->fib_list); | 1644 | list_add_tail(&newfib->fiblink, &fibctx->fib_list); |
1646 | fibctx->count++; | 1645 | fibctx->count++; |
1647 | /* | 1646 | /* |
1648 | * Set the event to wake up the | 1647 | * Set the event to wake up the |
1649 | * thread that is waiting. | 1648 | * thread that is waiting. |
1650 | */ | 1649 | */ |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 143e4c16b079..6650f6fa9890 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -159,7 +159,7 @@ static struct pci_device_id aac_pci_tbl[] = { | |||
159 | MODULE_DEVICE_TABLE(pci, aac_pci_tbl); | 159 | MODULE_DEVICE_TABLE(pci, aac_pci_tbl); |
160 | 160 | ||
161 | /* | 161 | /* |
162 | * dmb - For now we add the number of channels to this structure. | 162 | * dmb - For now we add the number of channels to this structure. |
163 | * In the future we should add a fib that reports the number of channels | 163 | * In the future we should add a fib that reports the number of channels |
164 | * for the card. At that time we can remove the channels from here | 164 | * for the card. At that time we can remove the channels from here |
165 | */ | 165 | */ |
@@ -239,7 +239,7 @@ static struct aac_driver_ident aac_drivers[] = { | |||
239 | * Queues a command for execution by the associated Host Adapter. | 239 | * Queues a command for execution by the associated Host Adapter. |
240 | * | 240 | * |
241 | * TODO: unify with aac_scsi_cmd(). | 241 | * TODO: unify with aac_scsi_cmd(). |
242 | */ | 242 | */ |
243 | 243 | ||
244 | static int aac_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) | 244 | static int aac_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)) |
245 | { | 245 | { |
@@ -258,7 +258,7 @@ static int aac_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd | |||
258 | } | 258 | } |
259 | cmd->SCp.phase = AAC_OWNER_LOWLEVEL; | 259 | cmd->SCp.phase = AAC_OWNER_LOWLEVEL; |
260 | return (aac_scsi_cmd(cmd) ? FAILED : 0); | 260 | return (aac_scsi_cmd(cmd) ? FAILED : 0); |
261 | } | 261 | } |
262 | 262 | ||
263 | /** | 263 | /** |
264 | * aac_info - Returns the host adapter name | 264 | * aac_info - Returns the host adapter name |
@@ -292,21 +292,21 @@ struct aac_driver_ident* aac_get_driver_ident(int devtype) | |||
292 | * @capacity: the sector capacity of the disk | 292 | * @capacity: the sector capacity of the disk |
293 | * @geom: geometry block to fill in | 293 | * @geom: geometry block to fill in |
294 | * | 294 | * |
295 | * Return the Heads/Sectors/Cylinders BIOS Disk Parameters for Disk. | 295 | * Return the Heads/Sectors/Cylinders BIOS Disk Parameters for Disk. |
296 | * The default disk geometry is 64 heads, 32 sectors, and the appropriate | 296 | * The default disk geometry is 64 heads, 32 sectors, and the appropriate |
297 | * number of cylinders so as not to exceed drive capacity. In order for | 297 | * number of cylinders so as not to exceed drive capacity. In order for |
298 | * disks equal to or larger than 1 GB to be addressable by the BIOS | 298 | * disks equal to or larger than 1 GB to be addressable by the BIOS |
299 | * without exceeding the BIOS limitation of 1024 cylinders, Extended | 299 | * without exceeding the BIOS limitation of 1024 cylinders, Extended |
300 | * Translation should be enabled. With Extended Translation enabled, | 300 | * Translation should be enabled. With Extended Translation enabled, |
301 | * drives between 1 GB inclusive and 2 GB exclusive are given a disk | 301 | * drives between 1 GB inclusive and 2 GB exclusive are given a disk |
302 | * geometry of 128 heads and 32 sectors, and drives above 2 GB inclusive | 302 | * geometry of 128 heads and 32 sectors, and drives above 2 GB inclusive |
303 | * are given a disk geometry of 255 heads and 63 sectors. However, if | 303 | * are given a disk geometry of 255 heads and 63 sectors. However, if |
304 | * the BIOS detects that the Extended Translation setting does not match | 304 | * the BIOS detects that the Extended Translation setting does not match |
305 | * the geometry in the partition table, then the translation inferred | 305 | * the geometry in the partition table, then the translation inferred |
306 | * from the partition table will be used by the BIOS, and a warning may | 306 | * from the partition table will be used by the BIOS, and a warning may |
307 | * be displayed. | 307 | * be displayed. |
308 | */ | 308 | */ |
309 | 309 | ||
310 | static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, | 310 | static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, |
311 | sector_t capacity, int *geom) | 311 | sector_t capacity, int *geom) |
312 | { | 312 | { |
@@ -333,10 +333,10 @@ static int aac_biosparm(struct scsi_device *sdev, struct block_device *bdev, | |||
333 | 333 | ||
334 | param->cylinders = cap_to_cyls(capacity, param->heads * param->sectors); | 334 | param->cylinders = cap_to_cyls(capacity, param->heads * param->sectors); |
335 | 335 | ||
336 | /* | 336 | /* |
337 | * Read the first 1024 bytes from the disk device, if the boot | 337 | * Read the first 1024 bytes from the disk device, if the boot |
338 | * sector partition table is valid, search for a partition table | 338 | * sector partition table is valid, search for a partition table |
339 | * entry whose end_head matches one of the standard geometry | 339 | * entry whose end_head matches one of the standard geometry |
340 | * translations ( 64/32, 128/32, 255/63 ). | 340 | * translations ( 64/32, 128/32, 255/63 ). |
341 | */ | 341 | */ |
342 | buf = scsi_bios_ptable(bdev); | 342 | buf = scsi_bios_ptable(bdev); |
@@ -596,7 +596,7 @@ static int aac_eh_reset(struct scsi_cmnd* cmd) | |||
596 | cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER; | 596 | cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER; |
597 | } | 597 | } |
598 | } | 598 | } |
599 | printk(KERN_ERR "%s: Host adapter reset request. SCSI hang ?\n", | 599 | printk(KERN_ERR "%s: Host adapter reset request. SCSI hang ?\n", |
600 | AAC_DRIVERNAME); | 600 | AAC_DRIVERNAME); |
601 | 601 | ||
602 | if ((count = aac_check_health(aac))) | 602 | if ((count = aac_check_health(aac))) |
@@ -687,8 +687,8 @@ static int aac_cfg_open(struct inode *inode, struct file *file) | |||
687 | * Bugs: Needs locking against parallel ioctls lower down | 687 | * Bugs: Needs locking against parallel ioctls lower down |
688 | * Bugs: Needs to handle hot plugging | 688 | * Bugs: Needs to handle hot plugging |
689 | */ | 689 | */ |
690 | 690 | ||
691 | static int aac_cfg_ioctl(struct inode *inode, struct file *file, | 691 | static int aac_cfg_ioctl(struct inode *inode, struct file *file, |
692 | unsigned int cmd, unsigned long arg) | 692 | unsigned int cmd, unsigned long arg) |
693 | { | 693 | { |
694 | if (!capable(CAP_SYS_RAWIO)) | 694 | if (!capable(CAP_SYS_RAWIO)) |
@@ -701,7 +701,7 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long | |||
701 | { | 701 | { |
702 | long ret; | 702 | long ret; |
703 | lock_kernel(); | 703 | lock_kernel(); |
704 | switch (cmd) { | 704 | switch (cmd) { |
705 | case FSACTL_MINIPORT_REV_CHECK: | 705 | case FSACTL_MINIPORT_REV_CHECK: |
706 | case FSACTL_SENDFIB: | 706 | case FSACTL_SENDFIB: |
707 | case FSACTL_OPEN_GET_ADAPTER_FIB: | 707 | case FSACTL_OPEN_GET_ADAPTER_FIB: |
@@ -711,14 +711,14 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long | |||
711 | case FSACTL_QUERY_DISK: | 711 | case FSACTL_QUERY_DISK: |
712 | case FSACTL_DELETE_DISK: | 712 | case FSACTL_DELETE_DISK: |
713 | case FSACTL_FORCE_DELETE_DISK: | 713 | case FSACTL_FORCE_DELETE_DISK: |
714 | case FSACTL_GET_CONTAINERS: | 714 | case FSACTL_GET_CONTAINERS: |
715 | case FSACTL_SEND_LARGE_FIB: | 715 | case FSACTL_SEND_LARGE_FIB: |
716 | ret = aac_do_ioctl(dev, cmd, (void __user *)arg); | 716 | ret = aac_do_ioctl(dev, cmd, (void __user *)arg); |
717 | break; | 717 | break; |
718 | 718 | ||
719 | case FSACTL_GET_NEXT_ADAPTER_FIB: { | 719 | case FSACTL_GET_NEXT_ADAPTER_FIB: { |
720 | struct fib_ioctl __user *f; | 720 | struct fib_ioctl __user *f; |
721 | 721 | ||
722 | f = compat_alloc_user_space(sizeof(*f)); | 722 | f = compat_alloc_user_space(sizeof(*f)); |
723 | ret = 0; | 723 | ret = 0; |
724 | if (clear_user(f, sizeof(*f))) | 724 | if (clear_user(f, sizeof(*f))) |
@@ -731,9 +731,9 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long | |||
731 | } | 731 | } |
732 | 732 | ||
733 | default: | 733 | default: |
734 | ret = -ENOIOCTLCMD; | 734 | ret = -ENOIOCTLCMD; |
735 | break; | 735 | break; |
736 | } | 736 | } |
737 | unlock_kernel(); | 737 | unlock_kernel(); |
738 | return ret; | 738 | return ret; |
739 | } | 739 | } |
@@ -797,7 +797,7 @@ static ssize_t aac_show_kernel_version(struct class_device *class_dev, | |||
797 | int len, tmp; | 797 | int len, tmp; |
798 | 798 | ||
799 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); | 799 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); |
800 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", | 800 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", |
801 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, | 801 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, |
802 | le32_to_cpu(dev->adapter_info.kernelbuild)); | 802 | le32_to_cpu(dev->adapter_info.kernelbuild)); |
803 | return len; | 803 | return len; |
@@ -810,7 +810,7 @@ static ssize_t aac_show_monitor_version(struct class_device *class_dev, | |||
810 | int len, tmp; | 810 | int len, tmp; |
811 | 811 | ||
812 | tmp = le32_to_cpu(dev->adapter_info.monitorrev); | 812 | tmp = le32_to_cpu(dev->adapter_info.monitorrev); |
813 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", | 813 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", |
814 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, | 814 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, |
815 | le32_to_cpu(dev->adapter_info.monitorbuild)); | 815 | le32_to_cpu(dev->adapter_info.monitorbuild)); |
816 | return len; | 816 | return len; |
@@ -823,7 +823,7 @@ static ssize_t aac_show_bios_version(struct class_device *class_dev, | |||
823 | int len, tmp; | 823 | int len, tmp; |
824 | 824 | ||
825 | tmp = le32_to_cpu(dev->adapter_info.biosrev); | 825 | tmp = le32_to_cpu(dev->adapter_info.biosrev); |
826 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", | 826 | len = snprintf(buf, PAGE_SIZE, "%d.%d-%d[%d]\n", |
827 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, | 827 | tmp >> 24, (tmp >> 16) & 0xff, tmp & 0xff, |
828 | le32_to_cpu(dev->adapter_info.biosbuild)); | 828 | le32_to_cpu(dev->adapter_info.biosbuild)); |
829 | return len; | 829 | return len; |
@@ -983,22 +983,22 @@ static struct scsi_host_template aac_driver_template = { | |||
983 | .compat_ioctl = aac_compat_ioctl, | 983 | .compat_ioctl = aac_compat_ioctl, |
984 | #endif | 984 | #endif |
985 | .queuecommand = aac_queuecommand, | 985 | .queuecommand = aac_queuecommand, |
986 | .bios_param = aac_biosparm, | 986 | .bios_param = aac_biosparm, |
987 | .shost_attrs = aac_attrs, | 987 | .shost_attrs = aac_attrs, |
988 | .slave_configure = aac_slave_configure, | 988 | .slave_configure = aac_slave_configure, |
989 | .change_queue_depth = aac_change_queue_depth, | 989 | .change_queue_depth = aac_change_queue_depth, |
990 | .sdev_attrs = aac_dev_attrs, | 990 | .sdev_attrs = aac_dev_attrs, |
991 | .eh_abort_handler = aac_eh_abort, | 991 | .eh_abort_handler = aac_eh_abort, |
992 | .eh_host_reset_handler = aac_eh_reset, | 992 | .eh_host_reset_handler = aac_eh_reset, |
993 | .can_queue = AAC_NUM_IO_FIB, | 993 | .can_queue = AAC_NUM_IO_FIB, |
994 | .this_id = MAXIMUM_NUM_CONTAINERS, | 994 | .this_id = MAXIMUM_NUM_CONTAINERS, |
995 | .sg_tablesize = 16, | 995 | .sg_tablesize = 16, |
996 | .max_sectors = 128, | 996 | .max_sectors = 128, |
997 | #if (AAC_NUM_IO_FIB > 256) | 997 | #if (AAC_NUM_IO_FIB > 256) |
998 | .cmd_per_lun = 256, | 998 | .cmd_per_lun = 256, |
999 | #else | 999 | #else |
1000 | .cmd_per_lun = AAC_NUM_IO_FIB, | 1000 | .cmd_per_lun = AAC_NUM_IO_FIB, |
1001 | #endif | 1001 | #endif |
1002 | .use_clustering = ENABLE_CLUSTERING, | 1002 | .use_clustering = ENABLE_CLUSTERING, |
1003 | .use_sg_chaining = ENABLE_SG_CHAINING, | 1003 | .use_sg_chaining = ENABLE_SG_CHAINING, |
1004 | .emulated = 1, | 1004 | .emulated = 1, |
@@ -1035,18 +1035,18 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1035 | goto out; | 1035 | goto out; |
1036 | error = -ENODEV; | 1036 | error = -ENODEV; |
1037 | 1037 | ||
1038 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || | 1038 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || |
1039 | pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) | 1039 | pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) |
1040 | goto out_disable_pdev; | 1040 | goto out_disable_pdev; |
1041 | /* | 1041 | /* |
1042 | * If the quirk31 bit is set, the adapter needs adapter | 1042 | * If the quirk31 bit is set, the adapter needs adapter |
1043 | * to driver communication memory to be allocated below 2gig | 1043 | * to driver communication memory to be allocated below 2gig |
1044 | */ | 1044 | */ |
1045 | if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) | 1045 | if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) |
1046 | if (pci_set_dma_mask(pdev, DMA_31BIT_MASK) || | 1046 | if (pci_set_dma_mask(pdev, DMA_31BIT_MASK) || |
1047 | pci_set_consistent_dma_mask(pdev, DMA_31BIT_MASK)) | 1047 | pci_set_consistent_dma_mask(pdev, DMA_31BIT_MASK)) |
1048 | goto out_disable_pdev; | 1048 | goto out_disable_pdev; |
1049 | 1049 | ||
1050 | pci_set_master(pdev); | 1050 | pci_set_master(pdev); |
1051 | 1051 | ||
1052 | shost = scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev)); | 1052 | shost = scsi_host_alloc(&aac_driver_template, sizeof(struct aac_dev)); |
@@ -1059,7 +1059,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1059 | shost->max_cmd_len = 16; | 1059 | shost->max_cmd_len = 16; |
1060 | 1060 | ||
1061 | aac = (struct aac_dev *)shost->hostdata; | 1061 | aac = (struct aac_dev *)shost->hostdata; |
1062 | aac->scsi_host_ptr = shost; | 1062 | aac->scsi_host_ptr = shost; |
1063 | aac->pdev = pdev; | 1063 | aac->pdev = pdev; |
1064 | aac->name = aac_driver_template.name; | 1064 | aac->name = aac_driver_template.name; |
1065 | aac->id = shost->unique_id; | 1065 | aac->id = shost->unique_id; |
@@ -1096,7 +1096,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1096 | if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) | 1096 | if (aac_drivers[index].quirks & AAC_QUIRK_31BIT) |
1097 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) | 1097 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) |
1098 | goto out_deinit; | 1098 | goto out_deinit; |
1099 | 1099 | ||
1100 | aac->maximum_num_channels = aac_drivers[index].channels; | 1100 | aac->maximum_num_channels = aac_drivers[index].channels; |
1101 | error = aac_get_adapter_info(aac); | 1101 | error = aac_get_adapter_info(aac); |
1102 | if (error < 0) | 1102 | if (error < 0) |
@@ -1105,7 +1105,7 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1105 | /* | 1105 | /* |
1106 | * Lets override negotiations and drop the maximum SG limit to 34 | 1106 | * Lets override negotiations and drop the maximum SG limit to 34 |
1107 | */ | 1107 | */ |
1108 | if ((aac_drivers[index].quirks & AAC_QUIRK_34SG) && | 1108 | if ((aac_drivers[index].quirks & AAC_QUIRK_34SG) && |
1109 | (aac->scsi_host_ptr->sg_tablesize > 34)) { | 1109 | (aac->scsi_host_ptr->sg_tablesize > 34)) { |
1110 | aac->scsi_host_ptr->sg_tablesize = 34; | 1110 | aac->scsi_host_ptr->sg_tablesize = 34; |
1111 | aac->scsi_host_ptr->max_sectors | 1111 | aac->scsi_host_ptr->max_sectors |
@@ -1122,11 +1122,11 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
1122 | /* | 1122 | /* |
1123 | * Firware printf works only with older firmware. | 1123 | * Firware printf works only with older firmware. |
1124 | */ | 1124 | */ |
1125 | if (aac_drivers[index].quirks & AAC_QUIRK_34SG) | 1125 | if (aac_drivers[index].quirks & AAC_QUIRK_34SG) |
1126 | aac->printf_enabled = 1; | 1126 | aac->printf_enabled = 1; |
1127 | else | 1127 | else |
1128 | aac->printf_enabled = 0; | 1128 | aac->printf_enabled = 0; |
1129 | 1129 | ||
1130 | /* | 1130 | /* |
1131 | * max channel will be the physical channels plus 1 virtual channel | 1131 | * max channel will be the physical channels plus 1 virtual channel |
1132 | * all containers are on the virtual channel 0 (CONTAINER_CHANNEL) | 1132 | * all containers are on the virtual channel 0 (CONTAINER_CHANNEL) |
@@ -1204,10 +1204,10 @@ static void __devexit aac_remove_one(struct pci_dev *pdev) | |||
1204 | kfree(aac->queues); | 1204 | kfree(aac->queues); |
1205 | 1205 | ||
1206 | aac_adapter_ioremap(aac, 0); | 1206 | aac_adapter_ioremap(aac, 0); |
1207 | 1207 | ||
1208 | kfree(aac->fibs); | 1208 | kfree(aac->fibs); |
1209 | kfree(aac->fsa_dev); | 1209 | kfree(aac->fsa_dev); |
1210 | 1210 | ||
1211 | list_del(&aac->entry); | 1211 | list_del(&aac->entry); |
1212 | scsi_host_put(shost); | 1212 | scsi_host_put(shost); |
1213 | pci_disable_device(pdev); | 1213 | pci_disable_device(pdev); |
@@ -1228,7 +1228,7 @@ static struct pci_driver aac_pci_driver = { | |||
1228 | static int __init aac_init(void) | 1228 | static int __init aac_init(void) |
1229 | { | 1229 | { |
1230 | int error; | 1230 | int error; |
1231 | 1231 | ||
1232 | printk(KERN_INFO "Adaptec %s driver %s\n", | 1232 | printk(KERN_INFO "Adaptec %s driver %s\n", |
1233 | AAC_DRIVERNAME, aac_driver_version); | 1233 | AAC_DRIVERNAME, aac_driver_version); |
1234 | 1234 | ||