diff options
Diffstat (limited to 'drivers/scsi/aacraid')
| -rw-r--r-- | drivers/scsi/aacraid/aachba.c | 81 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 26 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/linit.c | 28 |
3 files changed, 57 insertions, 78 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index d7235f42cf5f..bfd0e64964ac 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
| @@ -859,44 +859,31 @@ static int setinqserial(struct aac_dev *dev, void *data, int cid) | |||
| 859 | le32_to_cpu(dev->adapter_info.serial[0]), cid); | 859 | le32_to_cpu(dev->adapter_info.serial[0]), cid); |
| 860 | } | 860 | } |
| 861 | 861 | ||
| 862 | static void set_sense(u8 *sense_buf, u8 sense_key, u8 sense_code, | 862 | static inline void set_sense(struct sense_data *sense_data, u8 sense_key, |
| 863 | u8 a_sense_code, u8 incorrect_length, | 863 | u8 sense_code, u8 a_sense_code, u8 bit_pointer, u16 field_pointer) |
| 864 | u8 bit_pointer, u16 field_pointer, | ||
| 865 | u32 residue) | ||
| 866 | { | 864 | { |
| 867 | sense_buf[0] = 0xF0; /* Sense data valid, err code 70h (current error) */ | 865 | u8 *sense_buf = (u8 *)sense_data; |
| 866 | /* Sense data valid, err code 70h */ | ||
| 867 | sense_buf[0] = 0x70; /* No info field */ | ||
| 868 | sense_buf[1] = 0; /* Segment number, always zero */ | 868 | sense_buf[1] = 0; /* Segment number, always zero */ |
| 869 | 869 | ||
| 870 | if (incorrect_length) { | 870 | sense_buf[2] = sense_key; /* Sense key */ |
| 871 | sense_buf[2] = sense_key | 0x20;/* Set ILI bit | sense key */ | ||
| 872 | sense_buf[3] = BYTE3(residue); | ||
| 873 | sense_buf[4] = BYTE2(residue); | ||
| 874 | sense_buf[5] = BYTE1(residue); | ||
| 875 | sense_buf[6] = BYTE0(residue); | ||
| 876 | } else | ||
| 877 | sense_buf[2] = sense_key; /* Sense key */ | ||
| 878 | |||
| 879 | if (sense_key == ILLEGAL_REQUEST) | ||
| 880 | sense_buf[7] = 10; /* Additional sense length */ | ||
| 881 | else | ||
| 882 | sense_buf[7] = 6; /* Additional sense length */ | ||
| 883 | 871 | ||
| 884 | sense_buf[12] = sense_code; /* Additional sense code */ | 872 | sense_buf[12] = sense_code; /* Additional sense code */ |
| 885 | sense_buf[13] = a_sense_code; /* Additional sense code qualifier */ | 873 | sense_buf[13] = a_sense_code; /* Additional sense code qualifier */ |
| 874 | |||
| 886 | if (sense_key == ILLEGAL_REQUEST) { | 875 | if (sense_key == ILLEGAL_REQUEST) { |
| 887 | sense_buf[15] = 0; | 876 | sense_buf[7] = 10; /* Additional sense length */ |
| 888 | 877 | ||
| 889 | if (sense_code == SENCODE_INVALID_PARAM_FIELD) | 878 | sense_buf[15] = bit_pointer; |
| 890 | sense_buf[15] = 0x80;/* Std sense key specific field */ | ||
| 891 | /* Illegal parameter is in the parameter block */ | 879 | /* Illegal parameter is in the parameter block */ |
| 892 | |||
| 893 | if (sense_code == SENCODE_INVALID_CDB_FIELD) | 880 | if (sense_code == SENCODE_INVALID_CDB_FIELD) |
| 894 | sense_buf[15] = 0xc0;/* Std sense key specific field */ | 881 | sense_buf[15] |= 0xc0;/* Std sense key specific field */ |
| 895 | /* Illegal parameter is in the CDB block */ | 882 | /* Illegal parameter is in the CDB block */ |
| 896 | sense_buf[15] |= bit_pointer; | ||
| 897 | sense_buf[16] = field_pointer >> 8; /* MSB */ | 883 | sense_buf[16] = field_pointer >> 8; /* MSB */ |
| 898 | sense_buf[17] = field_pointer; /* LSB */ | 884 | sense_buf[17] = field_pointer; /* LSB */ |
| 899 | } | 885 | } else |
| 886 | sense_buf[7] = 6; /* Additional sense length */ | ||
| 900 | } | 887 | } |
| 901 | 888 | ||
| 902 | static int aac_bounds_32(struct aac_dev * dev, struct scsi_cmnd * cmd, u64 lba) | 889 | static int aac_bounds_32(struct aac_dev * dev, struct scsi_cmnd * cmd, u64 lba) |
| @@ -906,11 +893,9 @@ static int aac_bounds_32(struct aac_dev * dev, struct scsi_cmnd * cmd, u64 lba) | |||
| 906 | dprintk((KERN_DEBUG "aacraid: Illegal lba\n")); | 893 | dprintk((KERN_DEBUG "aacraid: Illegal lba\n")); |
| 907 | cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | | 894 | cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | |
| 908 | SAM_STAT_CHECK_CONDITION; | 895 | SAM_STAT_CHECK_CONDITION; |
| 909 | set_sense((u8 *) &dev->fsa_dev[cid].sense_data, | 896 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 910 | HARDWARE_ERROR, | 897 | HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE, |
| 911 | SENCODE_INTERNAL_TARGET_FAILURE, | 898 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0); |
| 912 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0, | ||
| 913 | 0, 0); | ||
| 914 | memcpy(cmd->sense_buffer, &dev->fsa_dev[cid].sense_data, | 899 | memcpy(cmd->sense_buffer, &dev->fsa_dev[cid].sense_data, |
| 915 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), | 900 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), |
| 916 | SCSI_SENSE_BUFFERSIZE)); | 901 | SCSI_SENSE_BUFFERSIZE)); |
| @@ -1520,11 +1505,9 @@ static void io_callback(void *context, struct fib * fibptr) | |||
| 1520 | le32_to_cpu(readreply->status)); | 1505 | le32_to_cpu(readreply->status)); |
| 1521 | #endif | 1506 | #endif |
| 1522 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; | 1507 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; |
| 1523 | set_sense((u8 *) &dev->fsa_dev[cid].sense_data, | 1508 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 1524 | HARDWARE_ERROR, | 1509 | HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE, |
| 1525 | SENCODE_INTERNAL_TARGET_FAILURE, | 1510 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0); |
| 1526 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0, | ||
| 1527 | 0, 0); | ||
| 1528 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, | 1511 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, |
| 1529 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), | 1512 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), |
| 1530 | SCSI_SENSE_BUFFERSIZE)); | 1513 | SCSI_SENSE_BUFFERSIZE)); |
| @@ -1733,11 +1716,9 @@ static void synchronize_callback(void *context, struct fib *fibptr) | |||
| 1733 | le32_to_cpu(synchronizereply->status)); | 1716 | le32_to_cpu(synchronizereply->status)); |
| 1734 | cmd->result = DID_OK << 16 | | 1717 | cmd->result = DID_OK << 16 | |
| 1735 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; | 1718 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; |
| 1736 | set_sense((u8 *)&dev->fsa_dev[cid].sense_data, | 1719 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 1737 | HARDWARE_ERROR, | 1720 | HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE, |
| 1738 | SENCODE_INTERNAL_TARGET_FAILURE, | 1721 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0); |
| 1739 | ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0, | ||
| 1740 | 0, 0); | ||
| 1741 | memcpy(cmd->sense_buffer, &dev->fsa_dev[cid].sense_data, | 1722 | memcpy(cmd->sense_buffer, &dev->fsa_dev[cid].sense_data, |
| 1742 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), | 1723 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), |
| 1743 | SCSI_SENSE_BUFFERSIZE)); | 1724 | SCSI_SENSE_BUFFERSIZE)); |
| @@ -1945,10 +1926,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
| 1945 | { | 1926 | { |
| 1946 | dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); | 1927 | dprintk((KERN_WARNING "Only INQUIRY & TUR command supported for controller, rcvd = 0x%x.\n", scsicmd->cmnd[0])); |
| 1947 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; | 1928 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; |
| 1948 | set_sense((u8 *) &dev->fsa_dev[cid].sense_data, | 1929 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 1949 | ILLEGAL_REQUEST, | 1930 | ILLEGAL_REQUEST, SENCODE_INVALID_COMMAND, |
| 1950 | SENCODE_INVALID_COMMAND, | 1931 | ASENCODE_INVALID_COMMAND, 0, 0); |
| 1951 | ASENCODE_INVALID_COMMAND, 0, 0, 0, 0); | ||
| 1952 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, | 1932 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, |
| 1953 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), | 1933 | min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data), |
| 1954 | SCSI_SENSE_BUFFERSIZE)); | 1934 | SCSI_SENSE_BUFFERSIZE)); |
| @@ -1995,10 +1975,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
| 1995 | scsicmd->result = DID_OK << 16 | | 1975 | scsicmd->result = DID_OK << 16 | |
| 1996 | COMMAND_COMPLETE << 8 | | 1976 | COMMAND_COMPLETE << 8 | |
| 1997 | SAM_STAT_CHECK_CONDITION; | 1977 | SAM_STAT_CHECK_CONDITION; |
| 1998 | set_sense((u8 *) &dev->fsa_dev[cid].sense_data, | 1978 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 1999 | ILLEGAL_REQUEST, | 1979 | ILLEGAL_REQUEST, SENCODE_INVALID_CDB_FIELD, |
| 2000 | SENCODE_INVALID_CDB_FIELD, | 1980 | ASENCODE_NO_SENSE, 7, 2); |
| 2001 | ASENCODE_NO_SENSE, 0, 7, 2, 0); | ||
| 2002 | memcpy(scsicmd->sense_buffer, | 1981 | memcpy(scsicmd->sense_buffer, |
| 2003 | &dev->fsa_dev[cid].sense_data, | 1982 | &dev->fsa_dev[cid].sense_data, |
| 2004 | min_t(size_t, | 1983 | min_t(size_t, |
| @@ -2254,9 +2233,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd) | |||
| 2254 | */ | 2233 | */ |
| 2255 | dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n", scsicmd->cmnd[0])); | 2234 | dprintk((KERN_WARNING "Unhandled SCSI Command: 0x%x.\n", scsicmd->cmnd[0])); |
| 2256 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; | 2235 | scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION; |
| 2257 | set_sense((u8 *) &dev->fsa_dev[cid].sense_data, | 2236 | set_sense(&dev->fsa_dev[cid].sense_data, |
| 2258 | ILLEGAL_REQUEST, SENCODE_INVALID_COMMAND, | 2237 | ILLEGAL_REQUEST, SENCODE_INVALID_COMMAND, |
| 2259 | ASENCODE_INVALID_COMMAND, 0, 0, 0, 0); | 2238 | ASENCODE_INVALID_COMMAND, 0, 0); |
| 2260 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, | 2239 | memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, |
| 2261 | min_t(size_t, | 2240 | min_t(size_t, |
| 2262 | sizeof(dev->fsa_dev[cid].sense_data), | 2241 | sizeof(dev->fsa_dev[cid].sense_data), |
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index f8afa358b6b6..abef05146d75 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
| @@ -243,6 +243,7 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
| 243 | * Search the list of AdapterFibContext addresses on the adapter | 243 | * Search the list of AdapterFibContext addresses on the adapter |
| 244 | * to be sure this is a valid address | 244 | * to be sure this is a valid address |
| 245 | */ | 245 | */ |
| 246 | spin_lock_irqsave(&dev->fib_lock, flags); | ||
| 246 | entry = dev->fib_list.next; | 247 | entry = dev->fib_list.next; |
| 247 | fibctx = NULL; | 248 | fibctx = NULL; |
| 248 | 249 | ||
| @@ -251,24 +252,25 @@ static int next_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
| 251 | /* | 252 | /* |
| 252 | * Extract the AdapterFibContext from the Input parameters. | 253 | * Extract the AdapterFibContext from the Input parameters. |
| 253 | */ | 254 | */ |
| 254 | if (fibctx->unique == f.fibctx) { /* We found a winner */ | 255 | if (fibctx->unique == f.fibctx) { /* We found a winner */ |
| 255 | break; | 256 | break; |
| 256 | } | 257 | } |
| 257 | entry = entry->next; | 258 | entry = entry->next; |
| 258 | fibctx = NULL; | 259 | fibctx = NULL; |
| 259 | } | 260 | } |
| 260 | if (!fibctx) { | 261 | if (!fibctx) { |
| 262 | spin_unlock_irqrestore(&dev->fib_lock, flags); | ||
| 261 | dprintk ((KERN_INFO "Fib Context not found\n")); | 263 | dprintk ((KERN_INFO "Fib Context not found\n")); |
| 262 | return -EINVAL; | 264 | return -EINVAL; |
| 263 | } | 265 | } |
| 264 | 266 | ||
| 265 | if((fibctx->type != FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT) || | 267 | if((fibctx->type != FSAFS_NTC_GET_ADAPTER_FIB_CONTEXT) || |
| 266 | (fibctx->size != sizeof(struct aac_fib_context))) { | 268 | (fibctx->size != sizeof(struct aac_fib_context))) { |
| 269 | spin_unlock_irqrestore(&dev->fib_lock, flags); | ||
| 267 | dprintk ((KERN_INFO "Fib Context corrupt?\n")); | 270 | dprintk ((KERN_INFO "Fib Context corrupt?\n")); |
| 268 | return -EINVAL; | 271 | return -EINVAL; |
| 269 | } | 272 | } |
| 270 | status = 0; | 273 | status = 0; |
| 271 | spin_lock_irqsave(&dev->fib_lock, flags); | ||
| 272 | /* | 274 | /* |
| 273 | * If there are no fibs to send back, then either wait or return | 275 | * If there are no fibs to send back, then either wait or return |
| 274 | * -EAGAIN | 276 | * -EAGAIN |
| @@ -414,8 +416,8 @@ static int close_getadapter_fib(struct aac_dev * dev, void __user *arg) | |||
| 414 | * @arg: ioctl arguments | 416 | * @arg: ioctl arguments |
| 415 | * | 417 | * |
| 416 | * This routine returns the driver version. | 418 | * This routine returns the driver version. |
| 417 | * Under Linux, there have been no version incompatibilities, so this is | 419 | * Under Linux, there have been no version incompatibilities, so this is |
| 418 | * simple! | 420 | * simple! |
| 419 | */ | 421 | */ |
| 420 | 422 | ||
| 421 | static int check_revision(struct aac_dev *dev, void __user *arg) | 423 | static int check_revision(struct aac_dev *dev, void __user *arg) |
| @@ -463,7 +465,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
| 463 | u32 data_dir; | 465 | u32 data_dir; |
| 464 | void __user *sg_user[32]; | 466 | void __user *sg_user[32]; |
| 465 | void *sg_list[32]; | 467 | void *sg_list[32]; |
| 466 | u32 sg_indx = 0; | 468 | u32 sg_indx = 0; |
| 467 | u32 byte_count = 0; | 469 | u32 byte_count = 0; |
| 468 | u32 actual_fibsize64, actual_fibsize = 0; | 470 | u32 actual_fibsize64, actual_fibsize = 0; |
| 469 | int i; | 471 | int i; |
| @@ -517,11 +519,11 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
| 517 | // Fix up srb for endian and force some values | 519 | // Fix up srb for endian and force some values |
| 518 | 520 | ||
| 519 | srbcmd->function = cpu_to_le32(SRBF_ExecuteScsi); // Force this | 521 | srbcmd->function = cpu_to_le32(SRBF_ExecuteScsi); // Force this |
| 520 | srbcmd->channel = cpu_to_le32(user_srbcmd->channel); | 522 | srbcmd->channel = cpu_to_le32(user_srbcmd->channel); |
| 521 | srbcmd->id = cpu_to_le32(user_srbcmd->id); | 523 | srbcmd->id = cpu_to_le32(user_srbcmd->id); |
| 522 | srbcmd->lun = cpu_to_le32(user_srbcmd->lun); | 524 | srbcmd->lun = cpu_to_le32(user_srbcmd->lun); |
| 523 | srbcmd->timeout = cpu_to_le32(user_srbcmd->timeout); | 525 | srbcmd->timeout = cpu_to_le32(user_srbcmd->timeout); |
| 524 | srbcmd->flags = cpu_to_le32(flags); | 526 | srbcmd->flags = cpu_to_le32(flags); |
| 525 | srbcmd->retry_limit = 0; // Obsolete parameter | 527 | srbcmd->retry_limit = 0; // Obsolete parameter |
| 526 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); | 528 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); |
| 527 | memcpy(srbcmd->cdb, user_srbcmd->cdb, sizeof(srbcmd->cdb)); | 529 | memcpy(srbcmd->cdb, user_srbcmd->cdb, sizeof(srbcmd->cdb)); |
| @@ -786,9 +788,9 @@ static int aac_get_pci_info(struct aac_dev* dev, void __user *arg) | |||
| 786 | pci_info.bus = dev->pdev->bus->number; | 788 | pci_info.bus = dev->pdev->bus->number; |
| 787 | pci_info.slot = PCI_SLOT(dev->pdev->devfn); | 789 | pci_info.slot = PCI_SLOT(dev->pdev->devfn); |
| 788 | 790 | ||
| 789 | if (copy_to_user(arg, &pci_info, sizeof(struct aac_pci_info))) { | 791 | if (copy_to_user(arg, &pci_info, sizeof(struct aac_pci_info))) { |
| 790 | dprintk((KERN_DEBUG "aacraid: Could not copy pci info\n")); | 792 | dprintk((KERN_DEBUG "aacraid: Could not copy pci info\n")); |
| 791 | return -EFAULT; | 793 | return -EFAULT; |
| 792 | } | 794 | } |
| 793 | return 0; | 795 | return 0; |
| 794 | } | 796 | } |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index fb0886140dd7..e80d2a0c46af 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
| @@ -1130,31 +1130,29 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
| 1130 | if (error < 0) | 1130 | if (error < 0) |
| 1131 | goto out_deinit; | 1131 | goto out_deinit; |
| 1132 | 1132 | ||
| 1133 | if (!(aac->adapter_info.options & AAC_OPT_NEW_COMM)) { | ||
| 1134 | error = pci_set_dma_max_seg_size(pdev, 65536); | ||
| 1135 | if (error) | ||
| 1136 | goto out_deinit; | ||
| 1137 | } | ||
| 1138 | |||
| 1139 | /* | 1133 | /* |
| 1140 | * Lets override negotiations and drop the maximum SG limit to 34 | 1134 | * Lets override negotiations and drop the maximum SG limit to 34 |
| 1141 | */ | 1135 | */ |
| 1142 | if ((aac_drivers[index].quirks & AAC_QUIRK_34SG) && | 1136 | if ((aac_drivers[index].quirks & AAC_QUIRK_34SG) && |
| 1143 | (aac->scsi_host_ptr->sg_tablesize > 34)) { | 1137 | (shost->sg_tablesize > 34)) { |
| 1144 | aac->scsi_host_ptr->sg_tablesize = 34; | 1138 | shost->sg_tablesize = 34; |
| 1145 | aac->scsi_host_ptr->max_sectors | 1139 | shost->max_sectors = (shost->sg_tablesize * 8) + 112; |
| 1146 | = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; | ||
| 1147 | } | 1140 | } |
| 1148 | 1141 | ||
| 1149 | if ((aac_drivers[index].quirks & AAC_QUIRK_17SG) && | 1142 | if ((aac_drivers[index].quirks & AAC_QUIRK_17SG) && |
| 1150 | (aac->scsi_host_ptr->sg_tablesize > 17)) { | 1143 | (shost->sg_tablesize > 17)) { |
| 1151 | aac->scsi_host_ptr->sg_tablesize = 17; | 1144 | shost->sg_tablesize = 17; |
| 1152 | aac->scsi_host_ptr->max_sectors | 1145 | shost->max_sectors = (shost->sg_tablesize * 8) + 112; |
| 1153 | = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; | ||
| 1154 | } | 1146 | } |
| 1155 | 1147 | ||
| 1148 | error = pci_set_dma_max_seg_size(pdev, | ||
| 1149 | (aac->adapter_info.options & AAC_OPT_NEW_COMM) ? | ||
| 1150 | (shost->max_sectors << 9) : 65536); | ||
| 1151 | if (error) | ||
| 1152 | goto out_deinit; | ||
| 1153 | |||
| 1156 | /* | 1154 | /* |
| 1157 | * Firware printf works only with older firmware. | 1155 | * Firmware printf works only with older firmware. |
| 1158 | */ | 1156 | */ |
| 1159 | if (aac_drivers[index].quirks & AAC_QUIRK_34SG) | 1157 | if (aac_drivers[index].quirks & AAC_QUIRK_34SG) |
| 1160 | aac->printf_enabled = 1; | 1158 | aac->printf_enabled = 1; |
