\r
@param[in] *IdeDev Pointer pointing to IDE_BLK_IO_DEV data structure, used\r
to record all the information of the IDE device.\r
- @param[in] *SenseCount Sense count for this packet command\r
+ @param[in] *SResult Sense result for this packet command.\r
\r
@retval EFI_SUCCESS Device is accessible.\r
@retval EFI_DEVICE_ERROR Device is not accessible.\r
EFI_STATUS\r
AtapiTestUnitReady (\r
IN IDE_BLK_IO_DEV *IdeDev,\r
- OUT UINTN *SenseCount\r
+ OUT SENSE_RESULT *SResult \r
)\r
{\r
ATAPI_PACKET_COMMAND Packet;\r
EFI_STATUS Status;\r
-\r
- *SenseCount = 0;\r
+ UINTN SenseCount;\r
\r
//\r
// fill command packet\r
return Status;\r
}\r
\r
- Status = AtapiRequestSense (IdeDev, SenseCount);\r
+ Status = AtapiRequestSense (IdeDev, &SenseCount);\r
if (EFI_ERROR (Status)) {\r
- *SenseCount = 0;\r
return Status;\r
}\r
\r
+ ParseSenseData (IdeDev, SenseCount, SResult);\r
return EFI_SUCCESS;\r
}\r
\r
\r
@param[in] *IdeDev Pointer pointing to IDE_BLK_IO_DEV data structure, used\r
to record all the information of the IDE device.\r
- @param[in] SenseCount Sense count for this packet command\r
+ @param[in] SResult Sense result for this packet command\r
\r
@retval EFI_SUCCESS Read Capacity Command finally completes successfully.\r
@retval EFI_DEVICE_ERROR Read Capacity Command failed because of device error.\r
EFI_STATUS\r
AtapiReadCapacity (\r
IN IDE_BLK_IO_DEV *IdeDev,\r
- OUT UINTN *SenseCount\r
+ OUT SENSE_RESULT *SResult \r
)\r
{\r
//\r
EFI_STATUS Status;\r
EFI_STATUS SenseStatus;\r
ATAPI_PACKET_COMMAND Packet;\r
+ UINTN SenseCount;\r
\r
//\r
// used for capacity data returned from ATAPI device\r
ATAPI_READ_CAPACITY_DATA Data;\r
ATAPI_READ_FORMAT_CAPACITY_DATA FormatData;\r
\r
- *SenseCount = 0;\r
-\r
ZeroMem (&Data, sizeof (Data));\r
ZeroMem (&FormatData, sizeof (FormatData));\r
\r
}\r
\r
if (Status == EFI_TIMEOUT) {\r
- *SenseCount = 0;\r
return Status;\r
}\r
\r
- SenseStatus = AtapiRequestSense (IdeDev, SenseCount);\r
+ SenseStatus = AtapiRequestSense (IdeDev, &SenseCount);\r
\r
if (!EFI_ERROR (SenseStatus)) {\r
-\r
- if (!EFI_ERROR (Status)) {\r
-\r
+ ParseSenseData (IdeDev, SenseCount, SResult); \r
+ \r
+ if (!EFI_ERROR (Status) && *SResult == SenseNoSenseKey) {\r
if (IdeDev->Type == IdeCdRom) {\r
\r
IdeDev->BlkIo.Media->LastBlock = (Data.LastLba3 << 24) |\r
(Data.LastLba1 << 8) |\r
Data.LastLba0;\r
\r
- if (IdeDev->BlkIo.Media->LastBlock != 0) {\r
-\r
- IdeDev->BlkIo.Media->BlockSize = (Data.BlockSize3 << 24) |\r
- (Data.BlockSize2 << 16) |\r
- (Data.BlockSize1 << 8) |\r
- Data.BlockSize0;\r
-\r
- IdeDev->BlkIo.Media->MediaPresent = TRUE;\r
- } else {\r
- IdeDev->BlkIo.Media->MediaPresent = FALSE;\r
- return EFI_DEVICE_ERROR;\r
- }\r
+ IdeDev->BlkIo.Media->MediaPresent = TRUE;\r
\r
IdeDev->BlkIo.Media->ReadOnly = TRUE;\r
\r
return EFI_SUCCESS;\r
\r
} else {\r
- *SenseCount = 0;\r
return EFI_DEVICE_ERROR;\r
}\r
}\r
EFI_BLOCK_IO_MEDIA OldMediaInfo;\r
UINTN RetryTimes;\r
UINTN RetryNotReady;\r
- UINTN SenseCount;\r
SENSE_RESULT SResult;\r
BOOLEAN WriteProtected;\r
\r
RetryTimes = 5;\r
while (RetryTimes != 0) {\r
\r
- Status = AtapiTestUnitReady (IdeDev, &SenseCount);\r
+ Status = AtapiTestUnitReady (IdeDev, &SResult);\r
\r
if (EFI_ERROR (Status)) {\r
//\r
//\r
continue;\r
} else {\r
-\r
- ParseSenseData (IdeDev, SenseCount, &SResult);\r
-\r
switch (SResult) {\r
case SenseNoSenseKey:\r
if (IdeDev->BlkIo.Media->MediaPresent) {\r
\r
while (RetryTimes != 0) {\r
\r
- Status = AtapiReadCapacity (IdeDev, &SenseCount);\r
+ Status = AtapiReadCapacity (IdeDev, &SResult);\r
\r
if (EFI_ERROR (Status)) {\r
RetryTimes--;\r
continue;\r
} else {\r
-\r
- ParseSenseData (IdeDev, SenseCount, &SResult);\r
-\r
switch (SResult) {\r
case SenseNoSenseKey:\r
goto Done;\r