#include <Protocol/DriverBinding.h>\r
#include <Protocol/DevicePathToText.h>\r
#include <Protocol/DevicePath.h>\r
+#include <Guid/MdeModuleHii.h>\r
\r
-#include <Guid/GlobalVariable.h>\r
-\r
+#include <Library/DevicePathLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiLib.h>\r
#include <Library/UefiApplicationEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/PlatformDriverOverrideLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedHiiLib.h>\r
-#include <Library/ExtendedIfrSupportLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/DevicePathLib.h>\r
+#include <Library/HiiLib.h>\r
+\r
#include "PlatOverMngr.h"\r
\r
#define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')\r
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;\r
} EFI_CALLBACK_INFO;\r
\r
+#pragma pack(1)\r
+\r
+///\r
+/// HII specific Vendor Device Path definition.\r
+///\r
+typedef struct {\r
+ VENDOR_DEVICE_PATH VendorDevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL End;\r
+} HII_VENDOR_DEVICE_PATH;\r
+\r
+#pragma pack()\r
+\r
//\r
// uni string and Vfr Binary data.\r
//\r
// module global data\r
//\r
EFI_GUID mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;\r
+CHAR16 mVariableName[] = L"Data";\r
LIST_ENTRY mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);\r
\r
EFI_HANDLE *mDevicePathHandleBuffer;\r
EFI_DEVICE_PATH_PROTOCOL *mControllerDevicePathProtocol[MAX_CHOICE_NUM];\r
UINTN mSelectedDriverImageNum;\r
UINTN mLastSavedDriverImageNum;\r
-CHAR8 mLanguage[RFC_3066_ENTRY_SIZE];\r
UINT16 mCurrentPage;\r
+EFI_CALLBACK_INFO *mCallbackInfo;\r
+\r
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {\r
+ {\r
+ {\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_VENDOR_DP,\r
+ {\r
+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ }\r
+ },\r
+ EFI_CALLER_ID_GUID\r
+ },\r
+ {\r
+ END_DEVICE_PATH_TYPE,\r
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+ { \r
+ (UINT8) (END_DEVICE_PATH_LENGTH),\r
+ (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
+ }\r
+ }\r
+};\r
\r
/**\r
Converting a given device to an unicode string. \r
);\r
\r
/**\r
- Do string convertion for the ComponentName supported language. It do\r
- the convertion just for english language code from RFC 3066 to ISO 639-2.\r
- Then it will check whether the converted language is in the supported language list.\r
- If not supported, NULL is returned.\r
- If Language is not english, NULL is returned.\r
+ Worker function to get the driver name by ComponentName or ComponentName2 protocol \r
+ according to the driver binding handle.\r
\r
- @param SupportedLanguages Pointer to ComponentName supported language string list. ISO 639-2 language\r
- @param Language The language string. RFC 3066 language\r
+ @param DriverBindingHandle The Handle of DriverBinding.\r
+ @param ProtocolGuid The pointer to Component Name (2) protocol GUID.\r
+ @param VariableName The name of the RFC 4646 or ISO 639-2 language variable.\r
\r
- @return English language string (ISO 639-2)\r
- @return NULL if the conertion is not successful.\r
+ @retval !NULL Pointer into the image name if the image name is found,\r
+ @retval NULL Pointer to NULL if the image name is not found.\r
\r
**/\r
-CHAR8 *\r
-ConvertComponentNameSupportLanguage (\r
- IN CHAR8 *SupportedLanguages,\r
- IN CHAR8 *Language\r
+CHAR16 *\r
+GetComponentNameWorker (\r
+ IN EFI_HANDLE DriverBindingHandle,\r
+ IN EFI_GUID *ProtocolGuid,\r
+ IN CONST CHAR16 *VariableName\r
)\r
{\r
- CHAR8 *LangCode;\r
- LangCode = NULL;\r
+ EFI_STATUS Status;\r
+ EFI_COMPONENT_NAME_PROTOCOL *ComponentName;\r
+ CHAR16 *DriverName;\r
+ CHAR8 *Language;\r
+ CHAR8 *BestLanguage;\r
\r
- //\r
- // Check the input language is English\r
- //\r
- if (AsciiStrnCmp (Language, "en-", 3) != 0) {\r
+ Status = gBS->OpenProtocol (\r
+ DriverBindingHandle,\r
+ ProtocolGuid,\r
+ (VOID *) &ComponentName,\r
+ NULL,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
- \r
+\r
//\r
- // Check SupportedLanguages format\r
+ // Find the best matching language.\r
//\r
- if (AsciiStrStr (SupportedLanguages, "en-") != NULL) {\r
- //\r
- // Create RFC 3066 language\r
- //\r
- LangCode = AllocateZeroPool(AsciiStrSize (Language));\r
- AsciiStrCpy (LangCode, Language);\r
- } else if (AsciiStrStr (SupportedLanguages, "en") != NULL) {\r
- //\r
- // Create ISO 639-2 Language\r
- //\r
- LangCode = AllocateZeroPool(4);\r
- AsciiStrCpy (LangCode, "eng"); \r
+ Language = GetEfiGlobalVariable (VariableName);\r
+ BestLanguage = GetBestLanguage (\r
+ ComponentName->SupportedLanguages,\r
+ (BOOLEAN) (ProtocolGuid == &gEfiComponentNameProtocolGuid),\r
+ Language,\r
+ NULL\r
+ );\r
+\r
+ DriverName = NULL;\r
+ if (BestLanguage != NULL) {\r
+ ComponentName->GetDriverName (\r
+ ComponentName,\r
+ BestLanguage,\r
+ &DriverName\r
+ );\r
+ FreePool (BestLanguage);\r
}\r
- \r
- return LangCode;\r
+\r
+ if (Language != NULL) {\r
+ FreePool (Language);\r
+ }\r
+\r
+ return DriverName;\r
}\r
\r
+\r
/**\r
Get the driver name by ComponentName or ComponentName2 protocol \r
according to the driver binding handle\r
IN EFI_HANDLE DriverBindingHandle\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_COMPONENT_NAME_PROTOCOL *ComponentName;\r
- EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;\r
- CHAR8 *SupportedLanguage;\r
- CHAR16 *DriverName;\r
-\r
- ComponentName = NULL;\r
- ComponentName2 = NULL;\r
- Status = gBS->OpenProtocol (\r
- DriverBindingHandle,\r
- &gEfiComponentName2ProtocolGuid,\r
- (VOID **) &ComponentName2,\r
- NULL,\r
- NULL,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
- if (EFI_ERROR(Status)) {\r
- Status = gBS->OpenProtocol (\r
- DriverBindingHandle,\r
- &gEfiComponentNameProtocolGuid,\r
- (VOID **) &ComponentName,\r
- NULL,\r
- NULL,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
- }\r
+ CHAR16 *DriverName;\r
\r
- Status = EFI_SUCCESS;\r
- DriverName = NULL;\r
- if (ComponentName != NULL) {\r
- if (ComponentName->GetDriverName != NULL) {\r
- SupportedLanguage = ConvertComponentNameSupportLanguage (ComponentName->SupportedLanguages, mLanguage);\r
- if (SupportedLanguage != NULL) {\r
- Status = ComponentName->GetDriverName (\r
- ComponentName,\r
- SupportedLanguage,\r
- &DriverName\r
- );\r
- FreePool (SupportedLanguage);\r
- }\r
- }\r
- } else if (ComponentName2 != NULL) {\r
- if (ComponentName2->GetDriverName != NULL) {\r
- Status = ComponentName2->GetDriverName (\r
- ComponentName2,\r
- mLanguage,\r
- &DriverName\r
- );\r
- }\r
- }\r
-\r
- if (EFI_ERROR (Status)) {\r
- return NULL;\r
+ //\r
+ // Try RFC 4646 Component Name 2 protocol first.\r
+ //\r
+ DriverName = GetComponentNameWorker (DriverBindingHandle, &gEfiComponentName2ProtocolGuid, L"PlatformLang");\r
+ if (DriverName == NULL) {\r
+ //\r
+ // If we can not get driver name from Component Name 2 protocol, we can try ISO 639-2 Component Name protocol. \r
+ //\r
+ DriverName = GetComponentNameWorker (DriverBindingHandle, &gEfiComponentNameProtocolGuid, L"Lang");\r
}\r
\r
return DriverName;\r
\r
/**\r
Get the image name from EFI UI section.\r
- Get FV protocol by its loaded image protoocl to abastract EFI UI section.\r
+ Get FV protocol by its loaded image protocol to abstract EFI UI section.\r
\r
@param Image Pointer to the loaded image protocol\r
\r
IN PLAT_OVER_MNGR_DATA *FakeNvData\r
)\r
{\r
- EFI_HII_UPDATE_DATA UpdateData;\r
EFI_STATUS Status;\r
- UINTN LangSize;\r
UINTN Index;\r
UINTN DevicePathHandleCount;\r
CHAR16 *NewString;\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;\r
UINTN Len;\r
- \r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel; \r
+\r
//\r
- // set current page form ID.\r
+ // Set current page form ID.\r
//\r
mCurrentPage = FORM_ID_DEVICE; \r
\r
//\r
- // Get Platform supported Language (RFC_3066 format)\r
+ // Initial the mapping database in memory\r
//\r
- LangSize = RFC_3066_ENTRY_SIZE;\r
- Status = gRT->GetVariable (\r
- L"PlatformLang",\r
- &gEfiGlobalVariableGuid,\r
- NULL,\r
- &LangSize,\r
- mLanguage\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ FreeMappingDatabase (&mMappingDataBase);\r
+ InitOverridesMapping (&mMappingDataBase);\r
\r
//\r
- // Initial the mapping database in memory\r
+ // Init OpCode Handle\r
//\r
- FreeMappingDatabase (&mMappingDataBase);\r
- Status = InitOverridesMapping (&mMappingDataBase);\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
\r
//\r
- // Clear all the content in the first page\r
+ // Create Hii Extend Label OpCode as the start opcode\r
//\r
- UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
- UpdateData.Offset = 0;\r
- UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
- ASSERT (UpdateData.Data != NULL);\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = FORM_ID_DEVICE;\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndLabel->Number = LABEL_END;\r
+\r
//\r
// Clear first page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_DEVICE,\r
- FORM_ID_DEVICE,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // Label FORM_ID_DEVICE\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
//\r
// then the 'first refresh' string will be replaced by the 'refresh' string, and the two strings content are same after the replacement\r
//\r
NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH);\r
- HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), &NewString);\r
+ NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), NULL);\r
ASSERT (NewString != NULL);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
FreePool (NewString);\r
\r
NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH_HELP);\r
- HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), &NewString);\r
+ NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), NULL);\r
ASSERT (NewString != NULL);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
FreePool (NewString);\r
\r
//\r
}\r
StrCat (NewString, ControllerName);\r
\r
- NewStringToken = mControllerToken[Index];\r
- if (NewStringToken == 0) {\r
- Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
- } else {\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- }\r
- ASSERT_EFI_ERROR (Status);\r
+ NewStringToken = HiiSetString (Private->RegisteredHandle, mControllerToken[Index], NewString, NULL);\r
+ ASSERT (NewStringToken != 0);\r
FreePool (NewString);\r
//\r
// Save the device path string toke for next access use\r
//\r
mControllerToken[Index] = NewStringToken;\r
-\r
- CreateGotoOpCode (\r
+ \r
+ HiiCreateGotoOpCode (\r
+ StartOpCodeHandle,\r
FORM_ID_DRIVER,\r
NewStringToken,\r
STRING_TOKEN (STR_GOTO_HELP_DRIVER),\r
EFI_IFR_FLAG_CALLBACK,\r
- (UINT16) (Index + KEY_VALUE_DEVICE_OFFSET),\r
- &UpdateData\r
+ (UINT16) (Index + KEY_VALUE_DEVICE_OFFSET)\r
);\r
}\r
\r
//\r
// Update first page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_DEVICE,\r
- FORM_ID_DEVICE,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // Label FORM_ID_DEVICE\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- FreePool (UpdateData.Data);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+\r
return EFI_SUCCESS;\r
}\r
\r
IN PLAT_OVER_MNGR_DATA *FakeNvData\r
)\r
{\r
- EFI_HII_UPDATE_DATA UpdateData;\r
EFI_STATUS Status;\r
UINTN Index;\r
CHAR16 *NewString;\r
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;\r
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;\r
EFI_HANDLE DriverBindingHandle;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
\r
//\r
// If user select a controller item in the first page the following code will be run.\r
// Switch the item callback key value to its NO. in mDevicePathHandleBuffer\r
//\r
mSelectedCtrIndex = KeyValue - KEY_VALUE_DEVICE_OFFSET;\r
- ASSERT (mSelectedCtrIndex > 0 && mSelectedCtrIndex < MAX_CHOICE_NUM);\r
+ ASSERT (mSelectedCtrIndex < MAX_CHOICE_NUM);\r
\r
mLastSavedDriverImageNum = 0;\r
+\r
+ //\r
+ // Init OpCode Handle\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
//\r
- // Clear all the content in dynamic page\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = FORM_ID_DRIVER;\r
+\r
//\r
- UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
- UpdateData.Offset = 0;\r
- UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
- ASSERT (UpdateData.Data != NULL);\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndLabel->Number = LABEL_END;\r
+\r
//\r
// Clear second page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_DRIVER,\r
- FORM_ID_DRIVER,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle,\r
+ EndOpCodeHandle\r
);\r
\r
//\r
//\r
// give a default name\r
//\r
- HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), &DriverName);\r
+ DriverName = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), NULL);\r
ASSERT (DriverName != NULL);\r
FreeDriverName = TRUE; // the DriverName string need to free pool\r
}\r
mLastSavedDriverImageNum++;\r
}\r
StrCat (NewString, DriverName);\r
- NewStringToken = mDriverImageToken[Index];\r
- if (NewStringToken == 0) {\r
- Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
- } else {\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- }\r
+ NewStringToken = HiiSetString (Private->RegisteredHandle, mDriverImageToken[Index], NewString, NULL);\r
+ ASSERT (NewStringToken != 0);\r
mDriverImageToken[Index] = NewStringToken;\r
- ASSERT_EFI_ERROR (Status);\r
FreePool (NewString);\r
if (FreeDriverName) {\r
FreePool (DriverName);\r
NewString = AllocateZeroPool (StrSize (DriverName));\r
ASSERT (NewString != NULL); \r
StrCat (NewString, DriverName);\r
- NewStringHelpToken = mDriverImageFilePathToken[Index];\r
- if (NewStringHelpToken == 0) {\r
- Status = HiiLibNewString (Private->RegisteredHandle, &NewStringHelpToken, NewString);\r
- } else {\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringHelpToken, NewString);\r
- }\r
+ NewStringHelpToken = HiiSetString (Private->RegisteredHandle, mDriverImageFilePathToken[Index], NewString, NULL);\r
+ ASSERT (NewStringHelpToken != 0);\r
mDriverImageFilePathToken[Index] = NewStringHelpToken;\r
- ASSERT_EFI_ERROR (Status);\r
FreePool (NewString);\r
FreePool (DriverName);\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ StartOpCodeHandle,\r
(UINT16) (DRIVER_SELECTION_QUESTION_ID + Index),\r
VARSTORE_ID_PLAT_OVER_MNGR,\r
(UINT16) (DRIVER_SELECTION_VAR_OFFSET + Index),\r
NewStringHelpToken,\r
0,\r
0,\r
- &UpdateData\r
+ NULL\r
);\r
}\r
\r
//\r
// Update second page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_DRIVER,\r
- FORM_ID_DRIVER,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // Label FORM_ID_DRIVER\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- FreePool (UpdateData.Data);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
return EFI_SUCCESS;\r
}\r
\r
IN PLAT_OVER_MNGR_DATA *FakeNvData\r
)\r
{\r
- EFI_HII_UPDATE_DATA UpdateData;\r
UINTN Index;\r
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;\r
- IFR_OPTION *IfrOptionList;\r
UINTN SelectedDriverImageNum;\r
UINT32 DriverImageNO;\r
UINTN MinNO;\r
UINTN Index1;\r
UINTN TempNO[100];\r
+ UINTN OrderNO[100];\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
\r
//\r
// Following code will be run if user select 'order ... priority' item in second page\r
//\r
mCurrentPage = FORM_ID_ORDER;\r
\r
- UpdateData.BufferSize = UPDATE_DATA_SIZE;\r
- UpdateData.Offset = 0;\r
- UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
- ASSERT (UpdateData.Data != NULL);\r
+ //\r
+ // Init OpCode Handle\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = FORM_ID_ORDER;\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndLabel->Number = LABEL_END;\r
+\r
//\r
// Clear third page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_ORDER,\r
- FORM_ID_ORDER,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle,\r
+ EndOpCodeHandle\r
);\r
\r
//\r
if (SelectedDriverImageNum == 0) {\r
return EFI_SUCCESS;\r
}\r
- \r
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * mSelectedDriverImageNum);\r
- ASSERT (IfrOptionList != NULL);\r
+\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
//\r
// Create order list for those selected drivers\r
//\r
SelectedDriverImageNum = 0;\r
for (Index = 0; Index < mDriverImageHandleCount; Index++) {\r
if (FakeNvData->DriSelection[Index] != 0) {\r
- IfrOptionList[SelectedDriverImageNum].StringToken = mDriverImageToken[Index];\r
//\r
// Use the NO. in driver binding buffer as value, will use it later\r
//\r
- IfrOptionList[SelectedDriverImageNum].Value.u8 = (UINT8) (Index + 1);\r
- IfrOptionList[SelectedDriverImageNum].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ mDriverImageToken[Index],\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index + 1\r
+ );\r
\r
//\r
// Get the EFI Loaded Image Device Path Protocol\r
mLastSavedDriverImageNum++;\r
}\r
TempNO[SelectedDriverImageNum] = DriverImageNO;\r
+ OrderNO[SelectedDriverImageNum] = Index + 1;\r
SelectedDriverImageNum ++;\r
}\r
}\r
//\r
// the IfrOptionList[MinNO].Value = the driver NO. in driver binding buffer\r
//\r
- FakeNvData->DriOrder[Index] =IfrOptionList[MinNO].Value.u8;\r
+ FakeNvData->DriOrder[Index] = (UINT8) OrderNO[MinNO];\r
TempNO[MinNO] = MAX_CHOICE_NUM + 1;\r
}\r
-\r
- CreateOrderedListOpCode (\r
+ \r
+ //\r
+ // Create Order List OpCode\r
+ //\r
+ HiiCreateOrderedListOpCode (\r
+ StartOpCodeHandle,\r
(UINT16) DRIVER_ORDER_QUESTION_ID,\r
VARSTORE_ID_PLAT_OVER_MNGR,\r
(UINT16) DRIVER_ORDER_VAR_OFFSET,\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
(UINT8) MAX_CHOICE_NUM,\r
- IfrOptionList,\r
- SelectedDriverImageNum,\r
- &UpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
//\r
// Update third page form\r
//\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
Private->RegisteredHandle,\r
&mPlatformOverridesManagerGuid,\r
FORM_ID_ORDER,\r
- FORM_ID_ORDER,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // Label FORM_ID_ORDER\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- FreePool (IfrOptionList);\r
- FreePool (UpdateData.Data);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+\r
return EFI_SUCCESS;\r
}\r
\r
EFI_STATUS Status;\r
EFI_CALLBACK_INFO *Private;\r
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
-\r
+ \r
if (Request == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
)\r
{\r
EFI_CALLBACK_INFO *Private;\r
- EFI_STATUS Status;\r
UINT16 KeyValue;\r
- UINTN BufferSize;\r
PLAT_OVER_MNGR_DATA *FakeNvData;\r
\r
- Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
-\r
- FakeNvData = &Private->FakeNvData;\r
- BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
- Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
+ FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));\r
+ if (FakeNvData == NULL) {\r
+ return EFI_NOT_FOUND;\r
}\r
\r
if (mCurrentPage == FORM_ID_DRIVER) {\r
KeyValue = KEY_VALUE_ORDER_SAVE_AND_EXIT;\r
CommintChanges (Private, KeyValue, FakeNvData);\r
}\r
+\r
+ if (FakeNvData != NULL) {\r
+ FreePool (FakeNvData);\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
EFI_CALLBACK_INFO *Private;\r
EFI_STATUS Status;\r
EFI_STRING_ID NewStringToken;\r
- UINTN BufferSize;\r
- PLAT_OVER_MNGR_DATA *FakeNvData;\r
EFI_INPUT_KEY Key;\r
-\r
+ PLAT_OVER_MNGR_DATA *FakeNvData;\r
+ \r
Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
-\r
- FakeNvData = &Private->FakeNvData;\r
- BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
- Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));\r
+ if (FakeNvData == NULL) {\r
+ return EFI_NOT_FOUND;\r
}\r
\r
if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||\r
// Update page title string\r
//\r
NewStringToken = STRING_TOKEN (STR_TITLE);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path");\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
}\r
\r
if (((KeyValue >= KEY_VALUE_DEVICE_OFFSET) && (KeyValue < KEY_VALUE_DEVICE_MAX)) || (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS)) {\r
// Update page title string\r
//\r
NewStringToken = STRING_TOKEN (STR_TITLE);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller");\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller", NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
}\r
\r
if (KeyValue == KEY_VALUE_DRIVER_GOTO_ORDER) {\r
// Update page title string\r
//\r
NewStringToken = STRING_TOKEN (STR_TITLE);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them");\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them", NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
}\r
\r
if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {\r
Status = CommintChanges (Private, KeyValue, FakeNvData);\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
if (EFI_ERROR (Status)) {\r
- IfrLibCreatePopUp (1, &Key, L"Single Override Info too large, Saving Error!");\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);\r
return EFI_DEVICE_ERROR;\r
}\r
}\r
//\r
// Pass changed uncommitted data back to Form Browser\r
//\r
- BufferSize = sizeof (PLAT_OVER_MNGR_DATA);\r
- Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) FakeNvData, NULL);\r
+ HiiSetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);\r
+ \r
+ //\r
+ // Update local configuration buffer.\r
+ //\r
+ CopyMem (&Private->FakeNvData, FakeNvData, sizeof (PLAT_OVER_MNGR_DATA));\r
+ if (FakeNvData != NULL) {\r
+ FreePool (FakeNvData);\r
+ }\r
\r
return EFI_SUCCESS;\r
}\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
- EFI_CALLBACK_INFO *CallbackInfo;\r
- EFI_HANDLE DriverHandle;\r
- EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
+ EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
\r
- //\r
- // There should only be one HII protocol\r
- //\r
- Status = gBS->LocateProtocol (\r
- &gEfiHiiDatabaseProtocolGuid,\r
- NULL,\r
- (VOID **) &HiiDatabase\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
//\r
// There should only be one Form Configuration protocol\r
//\r
return Status;\r
}\r
\r
- CallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));\r
- if (CallbackInfo == NULL) {\r
+ mCallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));\r
+ if (mCallbackInfo == NULL) {\r
return EFI_BAD_BUFFER_SIZE;\r
}\r
\r
- CallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;\r
- CallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;\r
- CallbackInfo->ConfigAccess.RouteConfig = PlatOverMngrRouteConfig;\r
- CallbackInfo->ConfigAccess.Callback = PlatOverMngrCallback;\r
+ mCallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;\r
+ mCallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;\r
+ mCallbackInfo->ConfigAccess.RouteConfig = PlatOverMngrRouteConfig;\r
+ mCallbackInfo->ConfigAccess.Callback = PlatOverMngrCallback;\r
\r
//\r
- // Create driver handle used by HII database\r
+ // Install Device Path Protocol and Config Access protocol to driver handle\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle);\r
- if (EFI_ERROR (Status)) {\r
- goto Finish;\r
- }\r
- CallbackInfo->DriverHandle = DriverHandle;\r
-\r
- //\r
- // Install Config Access protocol to driver handle\r
- //\r
- Status = gBS->InstallProtocolInterface (\r
- &DriverHandle,\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mCallbackInfo->DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &CallbackInfo->ConfigAccess\r
+ &mCallbackInfo->ConfigAccess,\r
+ NULL\r
);\r
if (EFI_ERROR (Status)) {\r
goto Finish;\r
//\r
// Publish our HII data\r
//\r
- PackageList = HiiLibPreparePackageList (\r
- 2,\r
- &mPlatformOverridesManagerGuid,\r
- VfrBin,\r
- PlatOverMngrStrings\r
- );\r
- ASSERT (PackageList != NULL);\r
-\r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- DriverHandle,\r
- &CallbackInfo->RegisteredHandle\r
- );\r
- FreePool (PackageList);\r
-\r
- if (EFI_ERROR (Status)) {\r
+ mCallbackInfo->RegisteredHandle = HiiAddPackages (\r
+ &mPlatformOverridesManagerGuid,\r
+ mCallbackInfo->DriverHandle,\r
+ VfrBin,\r
+ PlatOverMngrStrings,\r
+ NULL\r
+ );\r
+ if (mCallbackInfo->RegisteredHandle == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
goto Finish;\r
}\r
\r
Status = gBS->LocateProtocol (\r
&gEfiHiiConfigRoutingProtocolGuid,\r
NULL,\r
- (VOID **) &CallbackInfo->HiiConfigRouting\r
+ (VOID **) &mCallbackInfo->HiiConfigRouting\r
);\r
if (EFI_ERROR (Status)) {\r
goto Finish;\r
//\r
Status = FormBrowser2->SendForm (\r
FormBrowser2,\r
- &CallbackInfo->RegisteredHandle,\r
+ &mCallbackInfo->RegisteredHandle,\r
1,\r
NULL,\r
0,\r
NULL,\r
NULL\r
);\r
- if (EFI_ERROR (Status)) {\r
- goto Finish;\r
- }\r
\r
- Status = HiiDatabase->RemovePackageList (HiiDatabase, CallbackInfo->RegisteredHandle);\r
- if (EFI_ERROR (Status)) {\r
- goto Finish;\r
- }\r
- \r
- return EFI_SUCCESS;\r
+ HiiRemovePackages (mCallbackInfo->RegisteredHandle);\r
+ Status = EFI_SUCCESS;\r
\r
Finish:\r
- if (CallbackInfo->DriverHandle != NULL) {\r
- HiiLibDestroyHiiDriverHandle (CallbackInfo->DriverHandle);\r
+ if (mCallbackInfo->DriverHandle != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ mCallbackInfo->DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &mCallbackInfo->ConfigAccess,\r
+ NULL\r
+ );\r
}\r
- if (CallbackInfo != NULL) {\r
- FreePool (CallbackInfo);\r
+\r
+ if (mCallbackInfo != NULL) {\r
+ FreePool (mCallbackInfo);\r
}\r
\r
return Status;\r