[SCSI] stex: Fix for controller type st_yosemite
This is the fix for controller type st_yosemite, including - max_lun is 256 (backward compatible) - remove unneeded special handling of INQUIRY - remove unnecessary listing of sub device ids Signed-off-by: Ed Lin <ed.lin@promise.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
62e5b3d850
commit
e8a091b36c
|
@ -153,35 +153,6 @@ enum {
|
||||||
ST_ADDITIONAL_MEM = 0x200000,
|
ST_ADDITIONAL_MEM = 0x200000,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* SCSI inquiry data */
|
|
||||||
typedef struct st_inq {
|
|
||||||
u8 DeviceType :5;
|
|
||||||
u8 DeviceTypeQualifier :3;
|
|
||||||
u8 DeviceTypeModifier :7;
|
|
||||||
u8 RemovableMedia :1;
|
|
||||||
u8 Versions;
|
|
||||||
u8 ResponseDataFormat :4;
|
|
||||||
u8 HiSupport :1;
|
|
||||||
u8 NormACA :1;
|
|
||||||
u8 ReservedBit :1;
|
|
||||||
u8 AERC :1;
|
|
||||||
u8 AdditionalLength;
|
|
||||||
u8 Reserved[2];
|
|
||||||
u8 SoftReset :1;
|
|
||||||
u8 CommandQueue :1;
|
|
||||||
u8 Reserved2 :1;
|
|
||||||
u8 LinkedCommands :1;
|
|
||||||
u8 Synchronous :1;
|
|
||||||
u8 Wide16Bit :1;
|
|
||||||
u8 Wide32Bit :1;
|
|
||||||
u8 RelativeAddressing :1;
|
|
||||||
u8 VendorId[8];
|
|
||||||
u8 ProductId[16];
|
|
||||||
u8 ProductRevisionLevel[4];
|
|
||||||
u8 VendorSpecific[20];
|
|
||||||
u8 Reserved3[40];
|
|
||||||
} ST_INQ;
|
|
||||||
|
|
||||||
struct st_sgitem {
|
struct st_sgitem {
|
||||||
u8 ctrl; /* SG_CF_xxx */
|
u8 ctrl; /* SG_CF_xxx */
|
||||||
u8 reserved[3];
|
u8 reserved[3];
|
||||||
|
@ -285,7 +256,7 @@ struct st_drvver {
|
||||||
#define MU_REQ_BUFFER_SIZE (MU_REQ_COUNT * sizeof(struct req_msg))
|
#define MU_REQ_BUFFER_SIZE (MU_REQ_COUNT * sizeof(struct req_msg))
|
||||||
#define MU_STATUS_BUFFER_SIZE (MU_STATUS_COUNT * sizeof(struct status_msg))
|
#define MU_STATUS_BUFFER_SIZE (MU_STATUS_COUNT * sizeof(struct status_msg))
|
||||||
#define MU_BUFFER_SIZE (MU_REQ_BUFFER_SIZE + MU_STATUS_BUFFER_SIZE)
|
#define MU_BUFFER_SIZE (MU_REQ_BUFFER_SIZE + MU_STATUS_BUFFER_SIZE)
|
||||||
#define STEX_EXTRA_SIZE max(sizeof(struct st_frame), sizeof(ST_INQ))
|
#define STEX_EXTRA_SIZE sizeof(struct st_frame)
|
||||||
#define STEX_BUFFER_SIZE (MU_BUFFER_SIZE + STEX_EXTRA_SIZE)
|
#define STEX_BUFFER_SIZE (MU_BUFFER_SIZE + STEX_EXTRA_SIZE)
|
||||||
|
|
||||||
struct st_ccb {
|
struct st_ccb {
|
||||||
|
@ -662,24 +633,6 @@ static void stex_ys_commands(struct st_hba *hba,
|
||||||
resp->scsi_status != SAM_STAT_CHECK_CONDITION) {
|
resp->scsi_status != SAM_STAT_CHECK_CONDITION) {
|
||||||
scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) -
|
scsi_set_resid(ccb->cmd, scsi_bufflen(ccb->cmd) -
|
||||||
le32_to_cpu(*(__le32 *)&resp->variable[0]));
|
le32_to_cpu(*(__le32 *)&resp->variable[0]));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resp->srb_status != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* determine inquiry command status by DeviceTypeQualifier */
|
|
||||||
if (ccb->cmd->cmnd[0] == INQUIRY &&
|
|
||||||
resp->scsi_status == SAM_STAT_GOOD) {
|
|
||||||
ST_INQ *inq_data;
|
|
||||||
|
|
||||||
scsi_sg_copy_to_buffer(ccb->cmd, hba->copy_buffer,
|
|
||||||
STEX_EXTRA_SIZE);
|
|
||||||
inq_data = (ST_INQ *)hba->copy_buffer;
|
|
||||||
if (inq_data->DeviceTypeQualifier != 0)
|
|
||||||
ccb->srb_status = SRB_STATUS_SELECTION_TIMEOUT;
|
|
||||||
else
|
|
||||||
ccb->srb_status = SRB_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1148,7 +1101,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
host->max_lun = 8;
|
host->max_lun = 8;
|
||||||
host->max_id = 16 + 1;
|
host->max_id = 16 + 1;
|
||||||
} else if (hba->cardtype == st_yosemite) {
|
} else if (hba->cardtype == st_yosemite) {
|
||||||
host->max_lun = 128;
|
host->max_lun = 256;
|
||||||
host->max_id = 1 + 1;
|
host->max_id = 1 + 1;
|
||||||
} else {
|
} else {
|
||||||
/* st_vsc , st_vsc1 and st_seq */
|
/* st_vsc , st_vsc1 and st_seq */
|
||||||
|
@ -1301,18 +1254,7 @@ static struct pci_device_id stex_pci_tbl[] = {
|
||||||
{ 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc },
|
{ 0x105a, 0x7250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_vsc },
|
||||||
|
|
||||||
/* st_yosemite */
|
/* st_yosemite */
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, 0x4600, 0, 0,
|
{ 0x105a, 0x8650, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_yosemite },
|
||||||
st_yosemite }, /* SuperTrak EX4650 */
|
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, 0x4610, 0, 0,
|
|
||||||
st_yosemite }, /* SuperTrak EX4650o */
|
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, 0x8600, 0, 0,
|
|
||||||
st_yosemite }, /* SuperTrak EX8650EL */
|
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, 0x8601, 0, 0,
|
|
||||||
st_yosemite }, /* SuperTrak EX8650 */
|
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, 0x8602, 0, 0,
|
|
||||||
st_yosemite }, /* SuperTrak EX8654 */
|
|
||||||
{ 0x105a, 0x8650, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
|
|
||||||
st_yosemite }, /* generic st_yosemite */
|
|
||||||
|
|
||||||
/* st_seq */
|
/* st_seq */
|
||||||
{ 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq },
|
{ 0x105a, 0x3360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, st_seq },
|
||||||
|
|
Loading…
Reference in New Issue