UINT8 HostAdapterStatus;\r
UINT8 TargetStatus;\r
EFI_SCSI_INQUIRY_DATA *InquiryData;\r
+ EFI_SCSI_SENSE_DATA *SenseData;\r
UINT8 MaxRetry;\r
UINT8 Index;\r
BOOLEAN ScsiDeviceFound;\r
\r
HostAdapterStatus = 0;\r
TargetStatus = 0;\r
+ SenseData = NULL;\r
\r
InquiryData = AllocateAlignedBuffer (ScsiIoDevice, sizeof (EFI_SCSI_INQUIRY_DATA));\r
if (InquiryData == NULL) {\r
goto Done;\r
}\r
\r
+ SenseData = AllocateAlignedBuffer (\r
+ ScsiIoDevice,\r
+ sizeof (EFI_SCSI_SENSE_DATA)\r
+ );\r
+ if (SenseData == NULL) {\r
+ ScsiDeviceFound = FALSE;\r
+ goto Done;\r
+ }\r
+\r
//\r
// Using Inquiry command to scan for the device\r
//\r
InquiryDataLength = sizeof (EFI_SCSI_INQUIRY_DATA);\r
- SenseDataLength = 0;\r
+ SenseDataLength = sizeof (EFI_SCSI_SENSE_DATA);\r
ZeroMem (InquiryData, InquiryDataLength);\r
+ ZeroMem (SenseData, SenseDataLength);\r
\r
MaxRetry = 2;\r
for (Index = 0; Index < MaxRetry; Index++) {\r
Status = ScsiInquiryCommand (\r
&ScsiIoDevice->ScsiIo,\r
SCSI_BUS_TIMEOUT,\r
- NULL,\r
+ SenseData,\r
&SenseDataLength,\r
&HostAdapterStatus,\r
&TargetStatus,\r
FALSE\r
);\r
if (!EFI_ERROR (Status)) {\r
+ if ((HostAdapterStatus == EFI_SCSI_IO_STATUS_HOST_ADAPTER_OK) &&\r
+ (TargetStatus == EFI_SCSI_IO_STATUS_TARGET_CHECK_CONDITION) &&\r
+ (SenseData->Error_Code == 0x70) &&\r
+ (SenseData->Sense_Key == EFI_SCSI_SK_ILLEGAL_REQUEST)) {\r
+ ScsiDeviceFound = FALSE;\r
+ goto Done;\r
+ }\r
break;\r
}\r
if ((Status == EFI_BAD_BUFFER_SIZE) ||\r
ScsiDeviceFound = TRUE;\r
\r
Done:\r
+ FreeAlignedBuffer (SenseData, sizeof (EFI_SCSI_SENSE_DATA));\r
FreeAlignedBuffer (InquiryData, sizeof (EFI_SCSI_INQUIRY_DATA));\r
\r
return ScsiDeviceFound;\r