The redundant functions which are never called have been removed.
They are AtaNonDataCommandInExt,IDEBusDriverConfigurationSetOptions,
GetResponse,IDEBusDriverConfigurationOptionsValid and
IDEBusDriverConfigurationForceDefaults.
https://bugzilla.tianocore.org/show_bug.cgi?id=1063
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: shenglei <shenglei.zhang@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
return EFI_SUCCESS;\r
}\r
\r
-/**\r
- Send ATA Ext command into device with NON_DATA protocol\r
-\r
- @param IdeDev Standard IDE device private data structure\r
- @param AtaCommand The ATA command to be sent\r
- @param Device The value in Device register\r
- @param Feature The value in Feature register\r
- @param SectorCount The value in SectorCount register\r
- @param LbaAddress The LBA address in 48-bit mode\r
-\r
- @retval EFI_SUCCESS Reading succeed\r
- @retval EFI_ABORTED Command failed\r
- @retval EFI_DEVICE_ERROR Device status error.\r
-\r
-**/\r
-EFI_STATUS\r
-AtaNonDataCommandInExt (\r
- IN IDE_BLK_IO_DEV *IdeDev,\r
- IN UINT8 AtaCommand,\r
- IN UINT8 Device,\r
- IN UINT16 Feature,\r
- IN UINT16 SectorCount,\r
- IN EFI_LBA LbaAddress\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT8 StatusRegister;\r
- UINT8 SectorCount8;\r
- UINT8 Feature8;\r
- UINT8 LbaLow;\r
- UINT8 LbaMid;\r
- UINT8 LbaHigh;\r
-\r
- Status = WaitForBSYClear (IdeDev, ATATIMEOUT);\r
- if (EFI_ERROR (Status)) {\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- //\r
- // Select device (bit4), set LBA mode(bit6) (use 0xe0 for compatibility)\r
- //\r
- IDEWritePortB (\r
- IdeDev->PciIo,\r
- IdeDev->IoPort->Head,\r
- (UINT8) ((IdeDev->Device << 4) | 0xe0)\r
- );\r
-\r
- //\r
- // ATA commands for ATA device must be issued when DRDY is set\r
- //\r
- Status = DRDYReady (IdeDev, ATATIMEOUT);\r
- if (EFI_ERROR (Status)) {\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- //\r
- // Pass parameter into device register block\r
- //\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Head, Device);\r
-\r
- //\r
- // Fill the feature register, which is a two-byte FIFO. Need write twice.\r
- //\r
- Feature8 = (UINT8) (Feature >> 8);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);\r
-\r
- Feature8 = (UINT8) Feature;\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg1.Feature, Feature8);\r
-\r
- //\r
- // Fill the sector count register, which is a two-byte FIFO. Need write twice.\r
- //\r
- SectorCount8 = (UINT8) (SectorCount >> 8);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);\r
-\r
- SectorCount8 = (UINT8) SectorCount;\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorCount, SectorCount8);\r
-\r
- //\r
- // Fill the start LBA registers, which are also two-byte FIFO\r
- //\r
- LbaLow = (UINT8) RShiftU64 (LbaAddress, 24);\r
- LbaMid = (UINT8) RShiftU64 (LbaAddress, 32);\r
- LbaHigh = (UINT8) RShiftU64 (LbaAddress, 40);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);\r
-\r
- LbaLow = (UINT8) LbaAddress;\r
- LbaMid = (UINT8) RShiftU64 (LbaAddress, 8);\r
- LbaHigh = (UINT8) RShiftU64 (LbaAddress, 16);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->SectorNumber, LbaLow);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderLsb, LbaMid);\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->CylinderMsb, LbaHigh);\r
-\r
- //\r
- // Send command via Command Register\r
- //\r
- IDEWritePortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Command, AtaCommand);\r
-\r
- //\r
- // Wait for command completion\r
- //\r
- Status = WaitForBSYClear (IdeDev, ATATIMEOUT);\r
- if (EFI_ERROR (Status)) {\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- StatusRegister = IDEReadPortB (IdeDev->PciIo, IdeDev->IoPort->Reg.Status);\r
- if ((StatusRegister & ATA_STSREG_ERR) == ATA_STSREG_ERR) {\r
- //\r
- // Failed to execute command, abort operation\r
- //\r
- return EFI_ABORTED;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
\r
\r
//\r
// EFI Driver Configuration Protocol\r
//\r
-EFI_DRIVER_CONFIGURATION_PROTOCOL gIDEBusDriverConfiguration = {\r
- IDEBusDriverConfigurationSetOptions,\r
- IDEBusDriverConfigurationOptionsValid,\r
- IDEBusDriverConfigurationForceDefaults,\r
- "eng"\r
-};\r
-\r
-/**\r
- Interprete keyboard input.\r
-\r
- @retval EFI_ABORTED Get an 'ESC' key inputed.\r
- @retval EFI_SUCCESS Get an 'Y' or 'y' inputed.\r
- @retval EFI_NOT_FOUND Get an 'N' or 'n' inputed..\r
-\r
-**/\r
-EFI_STATUS\r
-GetResponse (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_INPUT_KEY Key;\r
-\r
- while (TRUE) {\r
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
- if (!EFI_ERROR (Status)) {\r
- if (Key.ScanCode == SCAN_ESC) {\r
- return EFI_ABORTED;\r
- }\r
-\r
- switch (Key.UnicodeChar) {\r
-\r
- //\r
- // fall through\r
- //\r
- case L'y':\r
- case L'Y':\r
- gST->ConOut->OutputString (gST->ConOut, L"Y\n");\r
- return EFI_SUCCESS;\r
-\r
- //\r
- // fall through\r
- //\r
- case L'n':\r
- case L'N':\r
- gST->ConOut->OutputString (gST->ConOut, L"N\n");\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- }\r
- }\r
-}\r
-\r
-/**\r
- Allows the user to set controller specific options for a controller that a\r
- driver is currently managing.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to set options on.\r
- @param ChildHandle The handle of the child controller to set options on.\r
- This is an optional parameter that may be NULL.\r
- It will be NULL for device drivers, and for a bus drivers\r
- that wish to set options for the bus controller.\r
- It will not be NULL for a bus driver that wishes to set\r
- options for one of its child controllers.\r
- @param Language A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the user interface that should be presented\r
- to the user, and it must match one of the languages specified in\r
- SupportedLanguages. The number of languages supported by a driver is up to\r
- the driver writer.\r
- @param ActionRequired A pointer to the action that the calling agent is required\r
- to perform when this function returns.\r
-\r
-\r
- @retval EFI_SUCCESS The driver specified by This successfully set the configuration\r
- options for the controller specified by ControllerHandle..\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support setting configuration options for\r
- the controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to set the configuration options for the\r
- controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to set the configuration options for the\r
- controller specified by ControllerHandle and ChildHandle\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationSetOptions (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT8 Value;\r
- UINT8 NewValue;\r
- UINTN DataSize;\r
- UINTN Index;\r
-\r
- if (ChildHandle != NULL) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- *ActionRequired = EfiDriverConfigurationActionNone;\r
\r
- DataSize = sizeof (Value);\r
- Status = gRT->GetVariable (\r
- L"Configuration",\r
- &gEfiCallerIdGuid,\r
- NULL,\r
- &DataSize,\r
- &Value\r
- );\r
-\r
- gST->ConOut->OutputString (gST->ConOut, L"IDE Bus Driver Configuration\n");\r
- gST->ConOut->OutputString (gST->ConOut, L"===============================\n");\r
-\r
- NewValue = 0;\r
- for (Index = 0; Index < 4; Index++) {\r
- gST->ConOut->OutputString (gST->ConOut, OptionString[Index]);\r
-\r
- Status = GetResponse ();\r
- if (Status == EFI_ABORTED) {\r
- return EFI_SUCCESS;\r
- }\r
-\r
- if (!EFI_ERROR (Status)) {\r
- NewValue = (UINT8) (NewValue | (1 << Index));\r
- }\r
- }\r
-\r
- if (EFI_ERROR (Status) || (NewValue != Value)) {\r
- gRT->SetVariable (\r
- L"Configuration",\r
- &gEfiCallerIdGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (NewValue),\r
- &NewValue\r
- );\r
-\r
- *ActionRequired = EfiDriverConfigurationActionRestartController;\r
- } else {\r
- *ActionRequired = EfiDriverConfigurationActionNone;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Tests to see if a controller's current configuration options are valid.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to test if it's current configuration options\r
- are valid.\r
- @param ChildHandle The handle of the child controller to test if it's current configuration\r
- options are valid. This is an optional parameter that may be NULL. It will\r
- be NULL for device drivers. It will also be NULL for a bus drivers that\r
- wish to test the configuration options for the bus controller. It will\r
- not be NULL for a bus driver that wishes to test configuration options for\r
- one of its child controllers.\r
- @retval EFI_SUCCESS The controller specified by ControllerHandle and ChildHandle that is being\r
- managed by the driver specified by This has a valid set of configuration\r
- options.\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @retval EFI_DEVICE_ERROR The controller specified by ControllerHandle and ChildHandle that is being\r
- managed by the driver specified by This has an invalid set of configuration\r
- options.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationOptionsValid (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT8 Value;\r
- UINTN DataSize;\r
-\r
- if (ChildHandle != NULL) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- DataSize = sizeof (Value);\r
- Status = gRT->GetVariable (\r
- L"Configuration",\r
- &gEfiCallerIdGuid,\r
- NULL,\r
- &DataSize,\r
- &Value\r
- );\r
- if (EFI_ERROR (Status) || Value > 0x0f) {\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-/**\r
- Forces a driver to set the default configuration options for a controller.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to force default configuration options on.\r
- @param ChildHandle The handle of the child controller to force default configuration\r
- options on This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL for a bus\r
- drivers that wish to force default configuration options for the bus\r
- controller. It will not be NULL for a bus driver that wishes to force\r
- default configuration options for one of its child controllers.\r
- @param DefaultType The type of default configuration options to force on the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @param ActionRequired A pointer to the action that the calling agent is required to perform\r
- when this function returns.\r
-\r
- @retval EFI_SUCCESS The driver specified by This successfully forced the\r
- default configuration options on the controller specified by\r
- ControllerHandle and ChildHandle.\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support forcing the default\r
- configuration options on the controller specified by ControllerHandle\r
- and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support the configuration type\r
- specified by DefaultType.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to force the default configuration\r
- options on the controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to force the default configuration\r
- options on the controller specified by ControllerHandle and ChildHandle.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationForceDefaults (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN UINT32 DefaultType,\r
- OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired\r
- )\r
-{\r
- UINT8 Value;\r
\r
- if (ChildHandle != NULL) {\r
- return EFI_UNSUPPORTED;\r
- }\r
\r
- Value = 0x0f;\r
- gRT->SetVariable (\r
- L"Configuration",\r
- &gEfiCallerIdGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (Value),\r
- &Value\r
- );\r
- *ActionRequired = EfiDriverConfigurationActionRestartController;\r
- return EFI_SUCCESS;\r
-}\r
IN UINT8 LbaHigh\r
);\r
\r
-/**\r
- Send ATA Ext command into device with NON_DATA protocol.\r
-\r
- @param IdeDev Standard IDE device private data structure\r
- @param AtaCommand The ATA command to be sent\r
- @param Device The value in Device register\r
- @param Feature The value in Feature register\r
- @param SectorCount The value in SectorCount register\r
- @param LbaAddress The Lba address in 48-bit mode\r
-\r
- @retval EFI_SUCCESS Reading succeed\r
- @retval EFI_ABORTED Command failed\r
- @retval EFI_DEVICE_ERROR Device status error.\r
-\r
-**/\r
-EFI_STATUS\r
-AtaNonDataCommandInExt (\r
- IN IDE_BLK_IO_DEV *IdeDev,\r
- IN UINT8 AtaCommand,\r
- IN UINT8 Device,\r
- IN UINT16 Feature,\r
- IN UINT16 SectorCount,\r
- IN EFI_LBA LbaAddress\r
- );\r
/**\r
Enable Long Physical Sector Feature for ATA device.\r
\r
//\r
// EFI Driver Configuration Functions\r
//\r
-/**\r
- Allows the user to set controller specific options for a controller that a\r
- driver is currently managing.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to set options on.\r
- @param ChildHandle The handle of the child controller to set options on.\r
- This is an optional parameter that may be NULL.\r
- It will be NULL for device drivers, and for a bus drivers\r
- that wish to set options for the bus controller.\r
- It will not be NULL for a bus driver that wishes to set\r
- options for one of its child controllers.\r
- @param Language A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the user interface that should be presented\r
- to the user, and it must match one of the languages specified in\r
- SupportedLanguages. The number of languages supported by a driver is up to\r
- the driver writer.\r
- @param ActionRequired A pointer to the action that the calling agent is required\r
- to perform when this function returns.\r
-\r
-\r
- @retval EFI_SUCCESS The driver specified by This successfully set the configuration\r
- options for the controller specified by ControllerHandle..\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support setting configuration options for\r
- the controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to set the configuration options for the\r
- controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to set the configuration options for the\r
- controller specified by ControllerHandle and ChildHandle\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationSetOptions (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired\r
- );\r
\r
-/**\r
- Tests to see if a controller's current configuration options are valid.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to test if it's current configuration options\r
- are valid.\r
- @param ChildHandle The handle of the child controller to test if it's current configuration\r
- options are valid. This is an optional parameter that may be NULL. It will\r
- be NULL for device drivers. It will also be NULL for a bus drivers that\r
- wish to test the configuration options for the bus controller. It will\r
- not be NULL for a bus driver that wishes to test configuration options for\r
- one of its child controllers.\r
- @retval EFI_SUCCESS The controller specified by ControllerHandle and ChildHandle that is being\r
- managed by the driver specified by This has a valid set of configuration\r
- options.\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @retval EFI_DEVICE_ERROR The controller specified by ControllerHandle and ChildHandle that is being\r
- managed by the driver specified by This has an invalid set of configuration\r
- options.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationOptionsValid (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL\r
- );\r
\r
-/**\r
- Forces a driver to set the default configuration options for a controller.\r
-\r
- @param This A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.\r
- @param ControllerHandle The handle of the controller to force default configuration options on.\r
- @param ChildHandle The handle of the child controller to force default configuration\r
- options on This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL for a bus\r
- drivers that wish to force default configuration options for the bus\r
- controller. It will not be NULL for a bus driver that wishes to force\r
- default configuration options for one of its child controllers.\r
- @param DefaultType The type of default configuration options to force on the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @param ActionRequired A pointer to the action that the calling agent is required to perform\r
- when this function returns.\r
\r
- @retval EFI_SUCCESS The driver specified by This successfully forced the\r
- default configuration options on the controller specified by\r
- ControllerHandle and ChildHandle.\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support forcing the default\r
- configuration options on the controller specified by ControllerHandle\r
- and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support the configuration type\r
- specified by DefaultType.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to force the default configuration\r
- options on the controller specified by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to force the default configuration\r
- options on the controller specified by ControllerHandle and ChildHandle.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IDEBusDriverConfigurationForceDefaults (\r
- IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN UINT32 DefaultType,\r
- OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired\r
- );\r
\r
//\r
// EFI Driver Diagnostics Functions\r