- Copyright (c) 2006, Intel Corporation\r
- All rights reserved. This program and the accompanying materials\r
+ Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
{ OP_INQUIRY, DataIn },\r
{ OP_LOAD_UNLOAD_CD, NoData },\r
{ OP_MECHANISM_STATUS, DataIn },\r
{ OP_INQUIRY, DataIn },\r
{ OP_LOAD_UNLOAD_CD, NoData },\r
{ OP_MECHANISM_STATUS, DataIn },\r
Routine Description:\r
Test to see if this driver supports ControllerHandle. Any ControllerHandle\r
that has gEfiPciIoProtocolGuid installed and is IDE Controller it will be supported.\r
Routine Description:\r
Test to see if this driver supports ControllerHandle. Any ControllerHandle\r
that has gEfiPciIoProtocolGuid installed and is IDE Controller it will be supported.\r
Arguments:\r
\r
This - Protocol instance pointer.\r
Controller - Handle of device to test\r
RemainingDevicePath - Not used\r
Arguments:\r
\r
This - Protocol instance pointer.\r
Controller - Handle of device to test\r
RemainingDevicePath - Not used\r
Routine Description:\r
Create handles for IDE channels specified by RemainingDevicePath.\r
Install SCSI Pass Thru Protocol onto each created handle.\r
Routine Description:\r
Create handles for IDE channels specified by RemainingDevicePath.\r
Install SCSI Pass Thru Protocol onto each created handle.\r
Arguments:\r
\r
This - Protocol instance pointer.\r
Controller - Handle of device to test\r
RemainingDevicePath - Not used\r
Arguments:\r
\r
This - Protocol instance pointer.\r
Controller - Handle of device to test\r
RemainingDevicePath - Not used\r
- //\r
- // Restore original PCI attributes\r
- //\r
- PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationSet,\r
- OriginalPciAttributes,\r
- NULL\r
- );\r
+ if (PciAttributesSaved == TRUE) {\r
+ //\r
+ // Restore original PCI attributes\r
+ //\r
+ PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ OriginalPciAttributes,\r
+ NULL\r
+ );\r
+ }\r
Controller - Handle of device to stop driver on\r
NumberOfChildren - Number of Children in the ChildHandleBuffer\r
ChildHandleBuffer - List of handles for the children we need to stop.\r
Controller - Handle of device to stop driver on\r
NumberOfChildren - Number of Children in the ChildHandleBuffer\r
ChildHandleBuffer - List of handles for the children we need to stop.\r
- Controller - Parent device handle to the IDE channel. \r
- PciIo - PCI I/O protocol attached on the "Controller". \r
- \r
+ Controller - Parent device handle to the IDE channel.\r
+ PciIo - PCI I/O protocol attached on the "Controller".\r
+\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Lun: The LUN of the ATAPI device to send the SCSI Request\r
Packet. To the ATAPI device, Lun is always 0.\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Lun: The LUN of the ATAPI device to send the SCSI Request\r
Packet. To the ATAPI device, Lun is always 0.\r
and blocking I/O is performed.\r
If Event is NULL, then blocking I/O is performed.\r
and blocking I/O is performed.\r
If Event is NULL, then blocking I/O is performed.\r
- If Event is not NULL and non blocking I/O is supported, \r
- then non-blocking I/O is performed, and Event will be signaled \r
- when the SCSI Request Packet completes. \r
+ If Event is not NULL and non blocking I/O is supported,\r
+ then non-blocking I/O is performed, and Event will be signaled\r
+ when the SCSI Request Packet completes.\r
- Target - On input, a pointer to the Target ID of a SCSI \r
- device present on the SCSI channel. On output, \r
+ Target - On input, a pointer to the Target ID of a SCSI\r
+ device present on the SCSI channel. On output,\r
- present on a SCSI channel. An input value of \r
- 0xFFFFFFFF retrieves the Target ID of the first \r
+ present on a SCSI channel. An input value of\r
+ 0xFFFFFFFF retrieves the Target ID of the first\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
This - Protocol instance pointer.\r
Target - The Target ID of the SCSI device for which\r
a device path node is to be allocated and built.\r
This - Protocol instance pointer.\r
Target - The Target ID of the SCSI device for which\r
a device path node is to be allocated and built.\r
- DevicePath - A pointer to a single device path node that \r
- describes the SCSI device specified by \r
- Target and Lun. This function is responsible \r
+ DevicePath - A pointer to a single device path node that\r
+ describes the SCSI device specified by\r
+ Target and Lun. This function is responsible\r
returned in DevicePath.\r
EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does\r
not exist on the SCSI channel.\r
EFI_INVALID_PARAMETER - DevicePath is NULL.\r
returned in DevicePath.\r
EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does\r
not exist on the SCSI channel.\r
EFI_INVALID_PARAMETER - DevicePath is NULL.\r
- Target - A pointer to the Target ID of a SCSI device \r
- on the SCSI channel. \r
- Lun - A pointer to the LUN of a SCSI device on \r
- the SCSI channel. \r
+ Target - A pointer to the Target ID of a SCSI device\r
+ on the SCSI channel.\r
+ Lun - A pointer to the LUN of a SCSI device on\r
+ the SCSI channel.\r
- EFI_SUCCESS - DevicePath was successfully translated to a \r
- Target ID and LUN, and they were returned \r
+ EFI_SUCCESS - DevicePath was successfully translated to a\r
+ Target ID and LUN, and they were returned\r
WritePortB (\r
AtapiScsiPrivate->PciIo,\r
AtapiScsiPrivate->IoPort->Alt.DeviceControl,\r
WritePortB (\r
AtapiScsiPrivate->PciIo,\r
AtapiScsiPrivate->IoPort->Alt.DeviceControl,\r
Lun was reset.\r
EFI_UNSUPPORTED - The SCSI channel does not support a target\r
reset operation.\r
EFI_INVALID_PARAMETER - Target or Lun are invalid.\r
Lun was reset.\r
EFI_UNSUPPORTED - The SCSI channel does not support a target\r
reset operation.\r
EFI_INVALID_PARAMETER - Target or Lun are invalid.\r
- EFI_DEVICE_ERROR - A device error occurred while attempting \r
- to reset the SCSI device specified by Target \r
+ EFI_DEVICE_ERROR - A device error occurred while attempting\r
+ to reset the SCSI device specified by Target\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Head, DeviceSelect);\r
\r
Command = ATAPI_SOFT_RESET_CMD;\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Head, DeviceSelect);\r
\r
Command = ATAPI_SOFT_RESET_CMD;\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Lun: The LUN of the ATAPI device to send the SCSI Request\r
Packet. To the ATAPI device, Lun is always 0.\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Lun: The LUN of the ATAPI device to send the SCSI Request\r
Packet. To the ATAPI device, Lun is always 0.\r
and blocking I/O is performed.\r
If Event is NULL, then blocking I/O is performed.\r
and blocking I/O is performed.\r
If Event is NULL, then blocking I/O is performed.\r
- If Event is not NULL and non blocking I/O is supported, \r
- then non-blocking I/O is performed, and Event will be signaled \r
- when the SCSI Request Packet completes. \r
+ If Event is not NULL and non blocking I/O is supported,\r
+ then non-blocking I/O is performed, and Event will be signaled\r
+ when the SCSI Request Packet completes.\r
AtapiScsiPrivate = ATAPI_EXT_SCSI_PASS_THRU_DEV_FROM_THIS (This);\r
\r
//\r
// For ATAPI device, UINT8 is enough to represent the SCSI ID on channel.\r
//\r
TargetId = Target[0];\r
AtapiScsiPrivate = ATAPI_EXT_SCSI_PASS_THRU_DEV_FROM_THIS (This);\r
\r
//\r
// For ATAPI device, UINT8 is enough to represent the SCSI ID on channel.\r
//\r
TargetId = Target[0];\r
//\r
// Target is not allowed beyond MAX_TARGET_ID\r
//\r
if ((TargetId > MAX_TARGET_ID) || (Lun != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
//\r
// Target is not allowed beyond MAX_TARGET_ID\r
//\r
if ((TargetId > MAX_TARGET_ID) || (Lun != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
//\r
// According to Target ID, reset the Atapi I/O Register mapping\r
// (Target Id in [0,1] area, using AtapiIoPortRegisters[0],\r
//\r
// According to Target ID, reset the Atapi I/O Register mapping\r
// (Target Id in [0,1] area, using AtapiIoPortRegisters[0],\r
TargetId = (UINT8) (TargetId % 2);\r
AtapiScsiPrivate->IoPort = &AtapiScsiPrivate->AtapiIoPortRegisters[1];\r
}\r
TargetId = (UINT8) (TargetId % 2);\r
AtapiScsiPrivate->IoPort = &AtapiScsiPrivate->AtapiIoPortRegisters[1];\r
}\r
- Target - On input, a pointer to the Target ID of a SCSI \r
- device present on the SCSI channel. On output, \r
+ Target - On input, a pointer to the Target ID of a SCSI\r
+ device present on the SCSI channel. On output,\r
- present on a SCSI channel. An input value of \r
- 0xFFFFFFFF retrieves the Target ID of the first \r
+ present on a SCSI channel. An input value of\r
+ 0xFFFFFFFF retrieves the Target ID of the first\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
if ((CompareMem(*Target, ScsiId, TARGET_MAX_BYTES) != 0) &&\r
((TargetId != AtapiScsiPrivate->LatestTargetId) ||\r
(*Lun != AtapiScsiPrivate->LatestLun))) {\r
if ((CompareMem(*Target, ScsiId, TARGET_MAX_BYTES) != 0) &&\r
((TargetId != AtapiScsiPrivate->LatestTargetId) ||\r
(*Lun != AtapiScsiPrivate->LatestLun))) {\r
This - Protocol instance pointer.\r
Target - The Target ID of the SCSI device for which\r
a device path node is to be allocated and built.\r
This - Protocol instance pointer.\r
Target - The Target ID of the SCSI device for which\r
a device path node is to be allocated and built.\r
- DevicePath - A pointer to a single device path node that \r
- describes the SCSI device specified by \r
- Target and Lun. This function is responsible \r
+ DevicePath - A pointer to a single device path node that\r
+ describes the SCSI device specified by\r
+ Target and Lun. This function is responsible\r
returned in DevicePath.\r
EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does\r
not exist on the SCSI channel.\r
EFI_INVALID_PARAMETER - DevicePath is NULL.\r
returned in DevicePath.\r
EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does\r
not exist on the SCSI channel.\r
EFI_INVALID_PARAMETER - DevicePath is NULL.\r
- Target - A pointer to the Target ID of a SCSI device \r
- on the SCSI channel. \r
- Lun - A pointer to the LUN of a SCSI device on \r
- the SCSI channel. \r
+ Target - A pointer to the Target ID of a SCSI device\r
+ on the SCSI channel.\r
+ Lun - A pointer to the LUN of a SCSI device on\r
+ the SCSI channel.\r
- EFI_SUCCESS - DevicePath was successfully translated to a \r
- Target ID and LUN, and they were returned \r
+ EFI_SUCCESS - DevicePath was successfully translated to a\r
+ Target ID and LUN, and they were returned\r
WritePortB (\r
AtapiScsiPrivate->PciIo,\r
AtapiScsiPrivate->IoPort->Alt.DeviceControl,\r
WritePortB (\r
AtapiScsiPrivate->PciIo,\r
AtapiScsiPrivate->IoPort->Alt.DeviceControl,\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Alt.DeviceControl, DeviceControlValue);\r
\r
//\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Alt.DeviceControl, DeviceControlValue);\r
\r
//\r
Lun was reset.\r
EFI_UNSUPPORTED - The SCSI channel does not support a target\r
reset operation.\r
EFI_INVALID_PARAMETER - Target or Lun are invalid.\r
Lun was reset.\r
EFI_UNSUPPORTED - The SCSI channel does not support a target\r
reset operation.\r
EFI_INVALID_PARAMETER - Target or Lun are invalid.\r
- EFI_DEVICE_ERROR - A device error occurred while attempting \r
- to reset the SCSI device specified by Target \r
+ EFI_DEVICE_ERROR - A device error occurred while attempting\r
+ to reset the SCSI device specified by Target\r
//\r
// According to Target ID, reset the Atapi I/O Register mapping\r
// (Target Id in [0,1] area, using AtapiIoPortRegisters[0],\r
//\r
// According to Target ID, reset the Atapi I/O Register mapping\r
// (Target Id in [0,1] area, using AtapiIoPortRegisters[0],\r
//\r
// for ATAPI device, no need to wait DRDY ready after device selecting.\r
//\r
// bit7 and bit5 are both set to 1 for backward compatibility\r
//\r
//\r
// for ATAPI device, no need to wait DRDY ready after device selecting.\r
//\r
// bit7 and bit5 are both set to 1 for backward compatibility\r
//\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Head, DeviceSelect);\r
\r
Command = ATAPI_SOFT_RESET_CMD;\r
WritePortB (AtapiScsiPrivate->PciIo, AtapiScsiPrivate->IoPort->Head, DeviceSelect);\r
\r
Command = ATAPI_SOFT_RESET_CMD;\r
- Target - On input, a pointer to the Target ID of a SCSI \r
- device present on the SCSI channel. On output, \r
+ Target - On input, a pointer to the Target ID of a SCSI\r
+ device present on the SCSI channel. On output,\r
- present on a SCSI channel. An input value of \r
- 0xFFFFFFFF retrieves the Target ID of the first \r
+ present on a SCSI channel. An input value of\r
+ 0xFFFFFFFF retrieves the Target ID of the first\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
SCSI device present on a SCSI channel.\r
Lun - On input, a pointer to the LUN of a SCSI device\r
present on the SCSI channel. On output, a pointer\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
on the SCSI channel was returned in Target and Lun.\r
EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.\r
EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not\r
- for (Index = 0; CompareMem (&gSupportedATAPICommands[Index], &gEndTable, sizeof (SCSI_COMMAND_SET)); Index++) {\r
+ for (Index = 0; (Index < ArrayLen) && (CompareMem (&gSupportedATAPICommands[Index], &gEndTable, sizeof (SCSI_COMMAND_SET)) != 0); Index++) {\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
- for (Index = 0; CompareMem (&gSupportedATAPICommands[Index], &gEndTable, sizeof (SCSI_COMMAND_SET)); Index++) {\r
+ for (Index = 0; (Index < ArrayLen) && (CompareMem (&gSupportedATAPICommands[Index], &gEndTable, sizeof (SCSI_COMMAND_SET)) != 0); Index++) {\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
if (!EFI_ERROR (PacketCommandStatus) || (Packet->SenseData == NULL)) {\r
Packet->SenseDataLength = 0;\r
return PacketCommandStatus;\r
}\r
if (!EFI_ERROR (PacketCommandStatus) || (Packet->SenseData == NULL)) {\r
Packet->SenseDataLength = 0;\r
return PacketCommandStatus;\r
}\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Request Packet. To ATAPI devices attached on an IDE\r
Channel, Target ID 0 indicates Master device;Target\r
ID 1 indicates Slave device.\r
Buffer: Points to the transferred data.\r
ByteCount: When input,indicates the buffer size; when output,\r
indicates the actually transferred data size.\r
Buffer: Points to the transferred data.\r
ByteCount: When input,indicates the buffer size; when output,\r
indicates the actually transferred data size.\r
- A TimeoutInMicroSeconds value of 0 means that \r
- this function will wait indefinitely for the ATAPI \r
+ A TimeoutInMicroSeconds value of 0 means that\r
+ this function will wait indefinitely for the ATAPI\r
- If TimeoutInMicroSeconds is greater than zero, then \r
- this function will return EFI_TIMEOUT if the time \r
- required to execute the ATAPI command is greater \r
+ If TimeoutInMicroSeconds is greater than zero, then\r
+ this function will return EFI_TIMEOUT if the time\r
+ required to execute the ATAPI command is greater\r
Buffer: Points to the transferred data.\r
ByteCount: When input,indicates the buffer size; when output,\r
indicates the actually transferred data size.\r
Buffer: Points to the transferred data.\r
ByteCount: When input,indicates the buffer size; when output,\r
indicates the actually transferred data size.\r
- A TimeoutInMicroSeconds value of 0 means that \r
- this function will wait indefinitely for the ATAPI \r
+ A TimeoutInMicroSeconds value of 0 means that\r
+ this function will wait indefinitely for the ATAPI\r
- If TimeoutInMicroSeconds is greater than zero, then \r
- this function will return EFI_TIMEOUT if the time \r
- required to execute the ATAPI command is greater \r
+ If TimeoutInMicroSeconds is greater than zero, then\r
+ this function will return EFI_TIMEOUT if the time\r
+ required to execute the ATAPI command is greater\r
\r
Check whether DRQ is clear in the Status Register. (BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
\r
Check whether DRQ is clear in the Status Register. (BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
- Check whether DRQ is clear in the Alternate Status Register. \r
- (BSY must also be cleared).If TimeoutInMicroSeconds is zero, this routine should \r
- wait infinitely for DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is \r
+ Check whether DRQ is clear in the Alternate Status Register.\r
+ (BSY must also be cleared).If TimeoutInMicroSeconds is zero, this routine should\r
+ wait infinitely for DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
\r
Check whether DRQ is ready in the Status Register. (BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
\r
Check whether DRQ is ready in the Status Register. (BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
\r
Check whether BSY is clear in the Status Register.\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
\r
Check whether BSY is clear in the Status Register.\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
\r
Check whether BSY is clear in the Alternate Status Register.\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
\r
Check whether BSY is clear in the Alternate Status Register.\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
(BSY must also be cleared)\r
If TimeoutInMicroSeconds is zero, this routine should wait infinitely for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
elapsed.\r
\r
Arguments:\r
\r
AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV\r
TimeoutInMicroSeconds - The time to wait for\r
// EFI drivers that are on PCI and other plug in cards.\r
//\r
gAtapiScsiPassThruDriverSupportedEfiVersion.FirmwareVersion = PcdGet32 (PcdDriverSupportedEfiVersion);\r
// EFI drivers that are on PCI and other plug in cards.\r
//\r
gAtapiScsiPassThruDriverSupportedEfiVersion.FirmwareVersion = PcdGet32 (PcdDriverSupportedEfiVersion);\r