/** @file\r
- Copyright (c) 2006 - 2008, Intel Corporation \r
- All rights reserved. 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
+ Implementation of UEFI Driver Configuration Protocol for IDE bus driver which\r
+ provides ability to set IDE bus controller specific options.\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+ Copyright (c) 2006 - 2018, 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
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\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
- TODO: Add function description\r
-\r
- @retval EFI_ABORTED TODO: Add description for return value.\r
- @retval EFI_SUCCESS TODO: Add description for return value.\r
- @retval EFI_NOT_FOUND TODO: Add description for return value.\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\r
- 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\r
- identifier. This is the language of the user interface\r
- that should be presented to the user, and it must match\r
- one of the languages specified in SupportedLanguages.\r
- 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\r
- required to perform when this function returns.\r
- See "Related Definitions" for a list of the actions that\r
- the calling agent is required to perform prior to\r
- accessing ControllerHandle again.\r
-\r
- @retval EFI_SUCCESS The driver specified by This successfully set the\r
- configuration options for the controller specified\r
- 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\r
- valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support\r
- setting configuration options for the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support the\r
- language specified by Language.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to set the\r
- configuration options for the controller specified\r
- by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to set the\r
- configuration options for the controller specified\r
- by ControllerHandle and ChildHandle.\r
-\r
-**/\r
-EFI_STATUS\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\r
- instance.\r
- @param ControllerHandle The handle of the controller to test if it's current\r
- configuration options are valid.\r
- @param ChildHandle The handle of the child controller to test if it's\r
- current\r
- configuration options are valid. This is an optional\r
- parameter that may be NULL. It will be NULL for device\r
- drivers. It will also be NULL for a bus drivers that\r
- wish to test the configuration options for the bus\r
- controller. It will not be NULL for a bus driver that\r
- wishes to test configuration options for one of\r
- its child controllers.\r
-\r
- @retval EFI_SUCCESS The controller specified by ControllerHandle and\r
- ChildHandle that is being managed by the driver\r
- 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\r
- EFI_HANDLE.\r
- @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
- managing the controller specified by\r
- ControllerHandle and ChildHandle.\r
- @retval EFI_DEVICE_ERROR The controller specified by ControllerHandle and\r
- ChildHandle that is being managed by the driver\r
- specified by This has an invalid set of\r
- configuration options.\r
-\r
-**/\r
-EFI_STATUS\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
-/**\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\r
- instance.\r
- @param ControllerHandle The handle of the controller to force default\r
- configuration options on.\r
- @param ChildHandle The handle of the child controller to force default\r
- configuration options on This is an optional parameter\r
- that may be NULL. It will be NULL for device drivers.\r
- It will also be NULL for a bus drivers that wish to\r
- force default configuration options for the bus\r
- controller. It will not be NULL for a bus driver that\r
- wishes to force default configuration options for one\r
- of its child controllers.\r
- @param DefaultType The type of default configuration options to force on\r
- the controller specified by ControllerHandle and\r
- ChildHandle. See Table 9-1 for legal values.\r
- A DefaultType of 0x00000000 must be supported\r
- by this protocol.\r
- @param ActionRequired A pointer to the action that the calling agent\r
- is required to perform when this function returns.\r
-\r
- @retval EFI_SUCCESS The driver specified by This successfully forced\r
- the default configuration options on the\r
- controller specified by ControllerHandle and\r
- 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\r
- valid EFI_HANDLE.\r
- @retval EFI_INVALID_PARAMETER ActionRequired is NULL.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support\r
- forcing the default configuration options on\r
- the controller specified by ControllerHandle\r
- and ChildHandle.\r
- @retval EFI_UNSUPPORTED The driver specified by This does not support\r
- the configuration type specified by DefaultType.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempt to force\r
- the default configuration options on the controller\r
- specified by ControllerHandle and ChildHandle.\r
- @retval EFI_OUT_RESOURCES There are not enough resources available to force\r
- the default configuration options on the controller\r
- specified by ControllerHandle and ChildHandle.\r
-\r
-**/\r
-EFI_STATUS\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