#include <Library/MemoryAllocationLib.h>\r
#include <Library/PerformanceLib.h>\r
#include <Library/ReportStatusCodeLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedIfrSupportLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/HobLib.h>\r
#include <Library/BaseLib.h>\r
BaseLib\r
HobLib\r
UefiRuntimeServicesTableLib\r
- IfrSupportLib\r
- ExtendedIfrSupportLib\r
GenericBdsLib\r
ReportStatusCodeLib\r
PerformanceLib\r
gEfiMemorySubClassGuid ## CONSUMES ## GUID (Indicate the datahub for holding memory record)\r
gEfiProcessorSubClassGuid ## CONSUMES ## GUID (Indicate the datahub for holding processor record)\r
gEfiCapsuleVendorGuid ## CONSUMES ## GUID (Indicate the hob for holding capsule update image)\r
+ gEfiHiiPlatformSetupFormsetGuid ## CONSUMES ## GUID (Indicate the formset class guid to be displayed)\r
+ gEfiIfrTianoGuid ## CONSUMES ## GUID (Extended IFR Guid Opcode)\r
\r
[Protocols]\r
gEfiHiiStringProtocolGuid # PROTOCOL ALWAYS_CONSUMES\r
\r
#include "FormGuid.h"\r
\r
-#define LABEL_END 0xffff\r
-\r
formset\r
guid = BOOT_MAINT_FORMSET_GUID,\r
title = STRING_TOKEN(STR_FORM_MAIN_TITLE),\r
help = STRING_TOKEN(STR_NULL_STRING),\r
+ classguid = BOOT_MAINT_FORMSET_GUID,\r
class = 0,\r
subclass = 0,\r
\r
EFI_GUID mBootMaintGuid = BOOT_MAINT_FORMSET_GUID;\r
EFI_GUID mFileExplorerGuid = FILE_EXPLORE_FORMSET_GUID;\r
\r
-CHAR16 mBootMaintStorageName[] = L"BmData";\r
+CHAR16 mBootMaintStorageName[] = L"BmmData";\r
CHAR16 mFileExplorerStorageName[] = L"FeData";\r
\r
/**\r
UINT8 *NewLegacyDev;\r
UINT8 *DisMap;\r
EFI_FORM_ID FormId;\r
- UINTN BufferSize;\r
-\r
+ \r
if ((Value == NULL) || (ActionRequest == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
//\r
// Retrive uncommitted data from Form Browser\r
//\r
- CurrentFakeNVMap = &Private->BmmFakeNvData;\r
- BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
- Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) CurrentFakeNVMap);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ CurrentFakeNVMap = (BMM_FAKE_NV_DATA *) HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA));\r
+ if (CurrentFakeNVMap == NULL) {\r
+ CurrentFakeNVMap = &Private->BmmFakeNvData;\r
}\r
\r
//\r
//\r
// Pass changed uncommitted data back to Form Browser\r
//\r
- BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
- Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) CurrentFakeNVMap, NULL);\r
+ Status = HiiSetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
+\r
+ //\r
+ // Update local settting.\r
+ //\r
+ if ((UINTN) CurrentFakeNVMap != (UINTN) &Private->BmmFakeNvData) {\r
+ CopyMem (&Private->BmmFakeNvData, CurrentFakeNVMap, sizeof (BMM_FAKE_NV_DATA));\r
+ FreePool (CurrentFakeNVMap);\r
+ }\r
\r
return Status;\r
}\r
ASSERT (BmmCallbackInfo->FeHiiHandle != NULL);\r
\r
//\r
- // Allocate space for creation of Buffer\r
+ // Init OpCode Handle and Allocate space for creation of Buffer\r
//\r
- gUpdateData.BufferSize = UPDATE_DATA_SIZE;\r
- gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
- if (gUpdateData.Data == NULL) {\r
+ mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ if (mStartOpCodeHandle == NULL) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Exit;\r
+ }\r
+\r
+ mEndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ if (mEndOpCodeHandle == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Exit;\r
}\r
\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ mEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ mEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ mEndLabel->Number = LABEL_END;\r
+\r
InitializeStringDepository ();\r
\r
InitAllMenu (BmmCallbackInfo);\r
Status = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID **) &LegacyBios);\r
if (!EFI_ERROR (Status)) {\r
RefreshUpdateData ();\r
+ mStartLabel->Number = FORM_BOOT_LEGACY_DEVICE_ID;\r
\r
//\r
// If LegacyBios Protocol is installed, add 3 tags about legacy boot option\r
// in BootOption form: legacy FD/HD/CD/NET/BEV\r
//\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_SET_FD_ORDER_ID,\r
STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
EFI_IFR_FLAG_CALLBACK,\r
- FORM_SET_FD_ORDER_ID,\r
- &gUpdateData\r
+ FORM_SET_FD_ORDER_ID\r
);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_SET_HD_ORDER_ID,\r
STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
EFI_IFR_FLAG_CALLBACK,\r
- FORM_SET_HD_ORDER_ID,\r
- &gUpdateData\r
+ FORM_SET_HD_ORDER_ID\r
);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_SET_CD_ORDER_ID,\r
STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
EFI_IFR_FLAG_CALLBACK,\r
- FORM_SET_CD_ORDER_ID,\r
- &gUpdateData\r
+ FORM_SET_CD_ORDER_ID\r
);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_SET_NET_ORDER_ID,\r
STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
EFI_IFR_FLAG_CALLBACK,\r
- FORM_SET_NET_ORDER_ID,\r
- &gUpdateData\r
+ FORM_SET_NET_ORDER_ID\r
);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_SET_BEV_ORDER_ID,\r
STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
EFI_IFR_FLAG_CALLBACK,\r
- FORM_SET_BEV_ORDER_ID,\r
- &gUpdateData\r
+ FORM_SET_BEV_ORDER_ID\r
);\r
-\r
- IfrLibUpdateForm (\r
+ \r
+ HiiUpdateForm (\r
BmmCallbackInfo->BmmHiiHandle,\r
&mBootMaintGuid,\r
FORM_BOOT_SETUP_ID,\r
- FORM_BOOT_LEGACY_DEVICE_ID,\r
- FALSE,\r
- &gUpdateData\r
+ mStartOpCodeHandle, // Label FORM_BOOT_LEGACY_DEVICE_ID\r
+ mEndOpCodeHandle // LABEL_END\r
);\r
}\r
\r
\r
FreeAllMenu ();\r
\r
- FreePool (gUpdateData.Data);\r
- gUpdateData.Data = NULL;\r
-\r
Exit:\r
+ if (mStartOpCodeHandle != NULL) {\r
+ HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
+ }\r
+\r
+ if (mEndOpCodeHandle != NULL) {\r
+ HiiFreeOpCodeHandle (mEndOpCodeHandle);\r
+ }\r
+\r
if (BmmCallbackInfo->FeDriverHandle != NULL) {\r
gBS->UninstallMultipleProtocolInterfaces (\r
BmmCallbackInfo->FeDriverHandle,\r
gFormBrowser2,\r
&CallbackData->BmmHiiHandle,\r
1,\r
- NULL,\r
+ &mBootMaintGuid,\r
0,\r
NULL,\r
&ActionRequest\r
gFormBrowser2,\r
&CallbackData->FeHiiHandle,\r
1,\r
- NULL,\r
+ &mFileExplorerGuid,\r
0,\r
NULL,\r
&ActionRequest\r
\r
extern EFI_GUID mBootMaintGuid;\r
extern EFI_GUID mFileExplorerGuid;\r
-\r
+extern CHAR16 mFileExplorerStorageName[];\r
//\r
// These are the VFR compiler generated data representing our VFR data.\r
//\r
extern COM_ATTR ParityList[5];\r
extern COM_ATTR StopBitsList[3];\r
extern EFI_GUID TerminalTypeGuid[4];\r
-extern EFI_HII_UPDATE_DATA gUpdateData;\r
extern STRING_DEPOSITORY *FileOptionStrDepository;\r
extern STRING_DEPOSITORY *ConsoleOptionStrDepository;\r
extern STRING_DEPOSITORY *BootOptionStrDepository;\r
extern EFI_DEVICE_PATH_PROTOCOL EndDevicePath[];\r
extern EFI_GUID EfiLegacyDevOrderGuid;\r
\r
+//\r
+// Shared IFR form update data\r
+//\r
+extern VOID *mStartOpCodeHandle;\r
+extern VOID *mEndOpCodeHandle;\r
+extern EFI_IFR_GUID_LABEL *mStartLabel;\r
+extern EFI_IFR_GUID_LABEL *mEndLabel;\r
+\r
#endif\r
\r
#include "BootMaint.h"\r
\r
-EFI_HII_UPDATE_DATA gUpdateData;\r
+VOID *mStartOpCodeHandle = NULL;\r
+VOID *mEndOpCodeHandle = NULL;\r
+EFI_IFR_GUID_LABEL *mStartLabel = NULL;\r
+EFI_IFR_GUID_LABEL *mEndLabel = NULL;\r
+\r
STRING_DEPOSITORY *FileOptionStrDepository;\r
STRING_DEPOSITORY *ConsoleOptionStrDepository;\r
STRING_DEPOSITORY *BootOptionStrDepository;\r
\r
#include "FormGuid.h"\r
\r
-#define LABEL_END 0xffff\r
-\r
formset\r
guid = FILE_EXPLORE_FORMSET_GUID,\r
title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE),\r
help = STRING_TOKEN(STR_NULL_STRING),\r
+ classguid = FILE_EXPLORE_FORMSET_GUID,\r
class = 0,\r
subclass = 0,\r
\r
FormId = 0;\r
\r
RefreshUpdateData ();\r
+ mStartLabel->Number = FORM_FILE_EXPLORER_ID;\r
\r
for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (MenuOption, Index);\r
//\r
// Create Text opcode for directory, also create Text opcode for file in BOOT_FROM_FILE_STATE.\r
//\r
- CreateActionOpCode (\r
+ HiiCreateActionOpCode (\r
+ mStartOpCodeHandle,\r
(UINT16) (FILE_OPTION_OFFSET + Index),\r
NewMenuEntry->DisplayStringToken,\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- 0,\r
- &gUpdateData\r
+ 0\r
);\r
} else {\r
//\r
FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
}\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FormId,\r
NewMenuEntry->DisplayStringToken,\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- (UINT16) (FILE_OPTION_OFFSET + Index),\r
- &gUpdateData\r
+ (UINT16) (FILE_OPTION_OFFSET + Index)\r
);\r
}\r
}\r
\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
CallbackData->FeHiiHandle,\r
&mFileExplorerGuid,\r
FORM_FILE_EXPLORER_ID,\r
- FORM_FILE_EXPLORER_ID,\r
- FALSE,\r
- &gUpdateData\r
+ mStartOpCodeHandle, // Label FORM_FILE_EXPLORER_ID\r
+ mEndOpCodeHandle // LABEL_END\r
);\r
}\r
\r
// Create Subtitle op-code for the display string of the option.\r
//\r
RefreshUpdateData ();\r
+ mStartLabel->Number = FormId;\r
\r
- CreateSubTitleOpCode (\r
+ HiiCreateSubTitleOpCode (\r
+ mStartOpCodeHandle,\r
NewMenuEntry->DisplayStringToken,\r
0,\r
0,\r
- 0,\r
- &gUpdateData\r
+ 0\r
);\r
\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
CallbackData->FeHiiHandle,\r
&mFileExplorerGuid,\r
FormId,\r
- FormId,\r
- FALSE,\r
- &gUpdateData\r
+ mStartOpCodeHandle, // Label FormId\r
+ mEndOpCodeHandle // LABEL_END\r
);\r
break;\r
\r
BMM_CALLBACK_DATA *Private;\r
FILE_EXPLORER_NV_DATA *NvRamMap;\r
EFI_STATUS Status;\r
- UINTN BufferSize;\r
\r
if ((Value == NULL) || (ActionRequest == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
//\r
// Retrieve uncommitted data from Form Browser\r
//\r
- NvRamMap = &Private->FeFakeNvData;\r
- BufferSize = sizeof (FILE_EXPLORER_NV_DATA);\r
- Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) NvRamMap);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ NvRamMap = (FILE_EXPLORER_NV_DATA *) HiiGetBrowserData (&mFileExplorerGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA));\r
+ if (NvRamMap == NULL) {\r
+ return EFI_NOT_FOUND;\r
}\r
+ CopyMem (&Private->FeFakeNvData, NvRamMap, sizeof (FILE_EXPLORER_NV_DATA));\r
+ FreePool (NvRamMap);\r
+ NvRamMap = &Private->FeFakeNvData;\r
\r
if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
//\r
#define VARSTORE_ID_BOOT_MAINT 0x1000\r
#define VARSTORE_ID_FILE_EXPLORER 0x1001\r
\r
+//\r
+// End Label\r
+//\r
+#define LABEL_END 0xffff\r
+\r
///\r
/// This is the structure that will be used to store the\r
/// question's current value. Use it at initialize time to\r
VOID\r
)\r
{\r
- gUpdateData.Offset = 0;\r
+ //\r
+ // Free current updated date\r
+ // \r
+ if (mStartOpCodeHandle != NULL) {\r
+ HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
+ }\r
+\r
+ //\r
+ // Create new OpCode Handle\r
+ //\r
+ mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+\r
}\r
\r
/**\r
)\r
{\r
RefreshUpdateData ();\r
+ mStartLabel->Number = CallbackData->BmmCurrentPageId;\r
\r
if (!(CallbackData->BmmAskSaveOrNot)) {\r
//\r
// Add a "Go back to main page" tag in front of the form when there are no\r
// "Apply changes" and "Discard changes" tags in the end of the form.\r
//\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_MAIN_ID,\r
STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
0,\r
- FORM_MAIN_ID,\r
- &gUpdateData\r
+ FORM_MAIN_ID\r
);\r
}\r
\r
// Create the "Apply changes" and "Discard changes" tags.\r
//\r
if (CallbackData->BmmAskSaveOrNot) {\r
- CreateSubTitleOpCode (\r
+ HiiCreateSubTitleOpCode (\r
+ mStartOpCodeHandle,\r
STRING_TOKEN (STR_NULL_STRING),\r
0,\r
0,\r
- 0,\r
- &gUpdateData\r
+ 0\r
);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_MAIN_ID,\r
STRING_TOKEN (STR_SAVE_AND_EXIT),\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- KEY_VALUE_SAVE_AND_EXIT,\r
- &gUpdateData\r
+ KEY_VALUE_SAVE_AND_EXIT\r
);\r
}\r
\r
//\r
// Ensure user can return to the main page.\r
//\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_MAIN_ID,\r
STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- KEY_VALUE_NO_SAVE_AND_EXIT,\r
- &gUpdateData\r
+ KEY_VALUE_NO_SAVE_AND_EXIT\r
);\r
\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
CallbackData->BmmHiiHandle,\r
&mBootMaintGuid,\r
CallbackData->BmmCurrentPageId,\r
- CallbackData->BmmCurrentPageId,\r
- FALSE,\r
- &gUpdateData\r
+ mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId\r
+ mEndOpCodeHandle // LABEL_END\r
);\r
}\r
\r
//\r
// Remove all op-codes from dynamic page\r
//\r
- IfrLibUpdateForm (\r
+ mStartLabel->Number = LabelId;\r
+ HiiUpdateForm (\r
CallbackData->BmmHiiHandle,\r
&mBootMaintGuid,\r
LabelId,\r
- LabelId,\r
- FALSE,\r
- &gUpdateData\r
+ mStartOpCodeHandle, // Label LabelId\r
+ mEndOpCodeHandle // LABEL_END\r
);\r
}\r
\r
for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_CON_COM_SETUP_ID,\r
NewMenuEntry->DisplayStringToken,\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- (UINT16) (TERMINAL_OPTION_OFFSET + Index),\r
- &gUpdateData\r
+ (UINT16) (TERMINAL_OPTION_OFFSET + Index)\r
);\r
}\r
\r
NewLoadContext->Deleted = FALSE;\r
CallbackData->BmmFakeNvData.BootOptionDel[Index] = 0x00;\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
(UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->HelpStringToken,\r
0,\r
0,\r
- &gUpdateData\r
+ NULL\r
);\r
}\r
\r
for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
\r
- CreateGotoOpCode (\r
+ HiiCreateGotoOpCode (\r
+ mStartOpCodeHandle,\r
FORM_DRV_ADD_HANDLE_DESC_ID,\r
NewMenuEntry->DisplayStringToken,\r
STRING_TOKEN (STR_NULL_STRING),\r
EFI_IFR_FLAG_CALLBACK,\r
- (UINT16) (HANDLE_OPTION_OFFSET + Index),\r
- &gUpdateData\r
+ (UINT16) (HANDLE_OPTION_OFFSET + Index)\r
);\r
}\r
\r
NewLoadContext->Deleted = FALSE;\r
CallbackData->BmmFakeNvData.DriverOptionDel[Index] = 0x00;\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
(UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->HelpStringToken,\r
0,\r
0,\r
- &gUpdateData\r
+ NULL\r
);\r
}\r
\r
\r
UpdatePageStart (CallbackData);\r
\r
- CreateSubTitleOpCode (\r
+ HiiCreateSubTitleOpCode (\r
+ mStartOpCodeHandle,\r
NewMenuEntry->DisplayStringToken,\r
0,\r
0,\r
- 0,\r
- &gUpdateData\r
+ 0\r
);\r
\r
- CreateStringOpCode (\r
+ HiiCreateStringOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) DRV_ADD_HANDLE_DESC_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
DRV_ADD_HANDLE_DESC_VAR_OFFSET,\r
0,\r
6,\r
75,\r
- &gUpdateData\r
+ NULL\r
);\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) DRV_ADD_RECON_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
DRV_ADD_RECON_VAR_OFFSET,\r
STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
0,\r
0,\r
- &gUpdateData\r
+ NULL\r
);\r
\r
- CreateStringOpCode (\r
+ HiiCreateStringOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) DRIVER_ADD_OPTION_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
DRIVER_ADD_OPTION_VAR_OFFSET,\r
0,\r
6,\r
75,\r
- &gUpdateData\r
+ NULL\r
);\r
\r
UpdatePageEnd (CallbackData);\r
CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
}\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
(UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
NewMenuEntry->HelpStringToken,\r
0,\r
CheckFlags,\r
- &gUpdateData\r
+ NULL\r
);\r
}\r
\r
CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
}\r
\r
- CreateCheckBoxOpCode (\r
+ HiiCreateCheckBoxOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
(UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
NewMenuEntry->HelpStringToken,\r
0,\r
CheckFlags,\r
- &gUpdateData\r
+ NULL\r
);\r
\r
Index++;\r
{\r
BM_MENU_ENTRY *NewMenuEntry;\r
UINT16 Index;\r
- IFR_OPTION *IfrOptionList;\r
+ VOID *OptionsOpCodeHandle;\r
\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
\r
ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, 100);\r
\r
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);\r
- if (IfrOptionList == NULL) {\r
- return ;\r
- }\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
- IfrOptionList[Index].Value.u8 = (UINT8) (NewMenuEntry->OptionNumber + 1);\r
- IfrOptionList[Index].Flags = 0;\r
- CallbackData->BmmFakeNvData.OptionOrder[Index] = IfrOptionList[Index].Value.u8;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ NewMenuEntry->DisplayStringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) (NewMenuEntry->OptionNumber + 1)\r
+ );\r
+ CallbackData->BmmFakeNvData.OptionOrder[Index] = (UINT8) (NewMenuEntry->OptionNumber + 1);\r
}\r
\r
if (OptionMenu->MenuNumber > 0) {\r
- CreateOrderedListOpCode (\r
- (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID,\r
- VARSTORE_ID_BOOT_MAINT,\r
- OPTION_ORDER_VAR_OFFSET,\r
- STRING_TOKEN (STR_CHANGE_ORDER),\r
- STRING_TOKEN (STR_CHANGE_ORDER),\r
- 0,\r
- 0,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- 100,\r
- IfrOptionList,\r
- OptionMenu->MenuNumber,\r
- &gUpdateData\r
+ HiiCreateOrderedListOpCode ( \r
+ mStartOpCodeHandle, // Container for dynamic created opcodes \r
+ (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID, // Question ID \r
+ VARSTORE_ID_BOOT_MAINT, // VarStore ID \r
+ OPTION_ORDER_VAR_OFFSET, // Offset in Buffer Storage \r
+ STRING_TOKEN (STR_CHANGE_ORDER), // Question prompt text \r
+ STRING_TOKEN (STR_CHANGE_ORDER), // Question help text \r
+ 0, // Question flag \r
+ 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
+ EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value \r
+ 100, // Maximum container \r
+ OptionsOpCodeHandle, // Option Opcode list \r
+ NULL // Default Opcode is NULL \r
);\r
}\r
\r
- FreePool (IfrOptionList);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
\r
UpdatePageEnd (CallbackData);\r
\r
{\r
BM_MENU_ENTRY *NewMenuEntry;\r
BM_LOAD_CONTEXT *NewLoadContext;\r
- IFR_OPTION *IfrOptionList;\r
UINTN NumberOfOptions;\r
UINT16 Index;\r
+ VOID *OptionsOpCodeHandle;\r
\r
- IfrOptionList = NULL;\r
NumberOfOptions = BootOptionMenu.MenuNumber;\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
\r
if (NumberOfOptions > 0) {\r
- IfrOptionList = AllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));\r
-\r
- ASSERT (IfrOptionList);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
CallbackData->BmmFakeNvData.BootNext = (UINT16) (BootOptionMenu.MenuNumber);\r
\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
+\r
if (NewLoadContext->IsBootNext) {\r
- IfrOptionList[Index].Flags = EFI_IFR_OPTION_DEFAULT;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ NewMenuEntry->DisplayStringToken,\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ Index\r
+ );\r
CallbackData->BmmFakeNvData.BootNext = Index;\r
} else {\r
- IfrOptionList[Index].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ NewMenuEntry->DisplayStringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ Index\r
+ );\r
}\r
-\r
- IfrOptionList[Index].Value.u16 = Index;\r
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
}\r
\r
- IfrOptionList[Index].Value.u16 = Index;\r
- IfrOptionList[Index].StringToken = STRING_TOKEN (STR_NONE);\r
- IfrOptionList[Index].Flags = 0;\r
if (CallbackData->BmmFakeNvData.BootNext == Index) {\r
- IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;\r
- }\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_NONE),\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ Index\r
+ );\r
+ } else {\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_NONE),\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ Index\r
+ );\r
+ } \r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) BOOT_NEXT_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
BOOT_NEXT_VAR_OFFSET,\r
STRING_TOKEN (STR_BOOT_NEXT_HELP),\r
0,\r
EFI_IFR_NUMERIC_SIZE_2,\r
- IfrOptionList,\r
- (UINTN) (NumberOfOptions + 1),\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
- FreePool (IfrOptionList);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
}\r
\r
UpdatePageEnd (CallbackData);\r
)\r
{\r
UINT16 BootTimeOut;\r
+ VOID *DefaultOpCodeHandle;\r
\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
\r
BootTimeOut = PcdGet16 (PcdPlatformBootTimeOut);\r
\r
- CreateNumericOpCode (\r
+ DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (DefaultOpCodeHandle != NULL);\r
+ HiiCreateDefaultOpCode (DefaultOpCodeHandle, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_NUMERIC_SIZE_2, BootTimeOut);\r
+\r
+ HiiCreateNumericOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) BOOT_TIME_OUT_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
BOOT_TIME_OUT_VAR_OFFSET,\r
0,\r
65535,\r
0,\r
- BootTimeOut,\r
- &gUpdateData\r
+ DefaultOpCodeHandle\r
);\r
+ \r
+ HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
\r
CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;\r
\r
UINTN MaxMode;\r
UINTN ValidMode;\r
EFI_STRING_ID *ModeToken;\r
- IFR_OPTION *IfrOptionList;\r
EFI_STATUS Status;\r
+ VOID *OptionsOpCodeHandle;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;\r
\r
ConOut = gST->ConOut;\r
return;\r
}\r
\r
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * ValidMode);\r
- ASSERT(IfrOptionList != NULL);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
ModeToken = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);\r
ASSERT(ModeToken != NULL);\r
\r
ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);\r
\r
- IfrOptionList[Index].StringToken = ModeToken[Index];\r
- IfrOptionList[Index].Value.u16 = (UINT16) Mode;\r
if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {\r
- IfrOptionList[Index].Flags = EFI_IFR_OPTION_DEFAULT;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ ModeToken[Index],\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ (UINT16) Mode\r
+ );\r
} else {\r
- IfrOptionList[Index].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ ModeToken[Index],\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ (UINT16) Mode\r
+ );\r
}\r
Index++;\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) CON_MODE_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
CON_MODE_VAR_OFFSET,\r
STRING_TOKEN (STR_CON_MODE_SETUP),\r
EFI_IFR_FLAG_RESET_REQUIRED,\r
EFI_IFR_NUMERIC_SIZE_2,\r
- IfrOptionList,\r
- ValidMode,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
- FreePool (IfrOptionList);\r
+\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
FreePool (ModeToken);\r
\r
UpdatePageEnd (CallbackData);\r
{\r
UINT8 Index;\r
UINT8 CheckFlags;\r
- IFR_OPTION *IfrOptionList;\r
BM_MENU_ENTRY *NewMenuEntry;\r
BM_TERMINAL_CONTEXT *NewTerminalContext;\r
+ VOID *OptionsOpCodeHandle;\r
\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
\r
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
\r
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 19);\r
- if (IfrOptionList == NULL) {\r
- return ;\r
- }\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList [0]); Index++) {\r
CheckFlags = 0;\r
CallbackData->BmmFakeNvData.COMBaudRate = NewTerminalContext->BaudRateIndex;\r
}\r
\r
- IfrOptionList[Index].Flags = CheckFlags;\r
- IfrOptionList[Index].StringToken = BaudRateList[Index].StringToken;\r
- IfrOptionList[Index].Value.u8 = Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ BaudRateList[Index].StringToken,\r
+ CheckFlags,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index\r
+ );\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) COM_BAUD_RATE_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
COM_BAUD_RATE_VAR_OFFSET,\r
STRING_TOKEN (STR_COM_BAUD_RATE),\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- 19,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
+ \r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
for (Index = 0; Index < sizeof (DataBitsList) / sizeof (DataBitsList[0]); Index++) {\r
CheckFlags = 0;\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
}\r
\r
- IfrOptionList[Index].Flags = CheckFlags;\r
- IfrOptionList[Index].StringToken = DataBitsList[Index].StringToken;\r
- IfrOptionList[Index].Value.u8 = Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ DataBitsList[Index].StringToken,\r
+ CheckFlags,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index\r
+ );\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) COM_DATA_RATE_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
COM_DATA_RATE_VAR_OFFSET,\r
STRING_TOKEN (STR_COM_DATA_BITS),\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- 4,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
for (Index = 0; Index < sizeof (ParityList) / sizeof (ParityList[0]); Index++) {\r
CheckFlags = 0;\r
if (NewTerminalContext->Parity == ParityList[Index].Value) {\r
CallbackData->BmmFakeNvData.COMParity = NewTerminalContext->ParityIndex;\r
}\r
\r
- IfrOptionList[Index].Flags = CheckFlags;\r
- IfrOptionList[Index].StringToken = ParityList[Index].StringToken;\r
- IfrOptionList[Index].Value.u8 = Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ ParityList[Index].StringToken,\r
+ CheckFlags,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index\r
+ );\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) COM_PARITY_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
COM_PARITY_VAR_OFFSET,\r
STRING_TOKEN (STR_COM_PARITY),\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- 5,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
for (Index = 0; Index < sizeof (StopBitsList) / sizeof (StopBitsList[0]); Index++) {\r
CheckFlags = 0;\r
if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {\r
CallbackData->BmmFakeNvData.COMStopBits = NewTerminalContext->StopBitsIndex;\r
}\r
\r
- IfrOptionList[Index].Flags = CheckFlags;\r
- IfrOptionList[Index].StringToken = StopBitsList[Index].StringToken;\r
- IfrOptionList[Index].Value.u8 = Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ StopBitsList[Index].StringToken,\r
+ CheckFlags,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index\r
+ );\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) COM_STOP_BITS_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
COM_STOP_BITS_VAR_OFFSET,\r
STRING_TOKEN (STR_COM_STOP_BITS),\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- 3,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
for (Index = 0; Index < 4; Index++) {\r
CheckFlags = 0;\r
if (NewTerminalContext->TerminalType == Index) {\r
CallbackData->BmmFakeNvData.COMTerminalType = NewTerminalContext->TerminalType;\r
}\r
\r
- IfrOptionList[Index].Flags = CheckFlags;\r
- IfrOptionList[Index].StringToken = (EFI_STRING_ID) TerminalType[Index];\r
- IfrOptionList[Index].Value.u8 = Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ (EFI_STRING_ID) TerminalType[Index],\r
+ CheckFlags,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ Index\r
+ );\r
}\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) COM_TERMINAL_QUESTION_ID,\r
VARSTORE_ID_BOOT_MAINT,\r
COM_TERMINAL_VAR_OFFSET,\r
STRING_TOKEN (STR_COM_TERMI_TYPE),\r
0,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- 4,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
- FreePool (IfrOptionList);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
\r
UpdatePageEnd (CallbackData);\r
}\r
BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
BM_MENU_OPTION *OptionMenu;\r
BM_MENU_ENTRY *NewMenuEntry;\r
- IFR_OPTION *IfrOptionList;\r
EFI_STRING_ID StrRef;\r
EFI_STRING_ID StrRefHelp;\r
BBS_TYPE BbsType;\r
UINT8 *LegacyOrder;\r
UINT8 *OldData;\r
UINT8 *DisMap;\r
+ VOID *OptionsOpCodeHandle;\r
\r
OptionMenu = NULL;\r
Key = 0;\r
\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
\r
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));\r
- if (NULL == IfrOptionList) {\r
- return ;\r
- }\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
\r
for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
- IfrOptionList[Index].Flags = 0;\r
- if (0 == Index) {\r
- IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;\r
+\r
+ if (Index == 0) {\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ NewMenuEntry->DisplayStringToken,\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index\r
+ );\r
}\r
\r
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
- IfrOptionList[Index].Value.u8 = (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ NewMenuEntry->DisplayStringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index\r
+ );\r
}\r
+\r
//\r
// for item "Disabled"\r
//\r
- IfrOptionList[Index].Flags = 0;\r
- IfrOptionList[Index].StringToken = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);\r
- IfrOptionList[Index].Value.u8 = 0xFF;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE),\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 0xFF\r
+ );\r
\r
//\r
// Get Device Order from variable\r
UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
StrRefHelp = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ mStartOpCodeHandle,\r
(EFI_QUESTION_ID) (Key + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
(UINT16) (Key + Index - CONFIG_OPTION_OFFSET),\r
StrRefHelp,\r
EFI_IFR_FLAG_CALLBACK,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- IfrOptionList,\r
- OptionMenu->MenuNumber + 1,\r
- &gUpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));\r
\r
CopyMem (OldData, LegacyOrder, 100);\r
\r
- if (IfrOptionList != NULL) {\r
- FreePool (IfrOptionList);\r
- IfrOptionList = NULL;\r
- }\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
\r
UpdatePageEnd (CallbackData);\r
}\r
EFI_STATUS Status;\r
BDS_COMMON_OPTION *Option;\r
LIST_ENTRY *Link;\r
- EFI_HII_UPDATE_DATA UpdateData;\r
CHAR16 *ExitData;\r
UINTN ExitDataSize;\r
EFI_STRING_ID Token;\r
EFI_HII_HANDLE HiiHandle;\r
EFI_BROWSER_ACTION_REQUEST ActionRequest;\r
UINTN TempSize;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
\r
gOption = NULL;\r
InitializeListHead (&BdsBootOptionList);\r
//\r
// Allocate space for creation of UpdateData Buffer\r
//\r
- UpdateData.BufferSize = 0x1000;\r
- UpdateData.Offset = 0;\r
- UpdateData.Data = AllocateZeroPool (0x1000);\r
- ASSERT (UpdateData.Data != NULL);\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 = LABEL_BOOT_OPTION;\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_BOOT_OPTION_END;\r
\r
mKeyInput = 0;\r
\r
\r
HelpToken = HiiSetString (HiiHandle, 0, HelpString, NULL);\r
\r
- CreateActionOpCode (\r
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle,\r
mKeyInput,\r
Token,\r
HelpToken,\r
EFI_IFR_FLAG_CALLBACK,\r
- 0,\r
- &UpdateData\r
+ 0\r
);\r
}\r
\r
- IfrLibUpdateForm (\r
+ HiiUpdateForm (\r
HiiHandle,\r
&mBootManagerGuid,\r
BOOT_MANAGER_FORM_ID,\r
- LABEL_BOOT_OPTION,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle,\r
+ EndOpCodeHandle\r
);\r
- FreePool (UpdateData.Data);\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
\r
ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
Status = gFormBrowser2->SendForm (\r
gFormBrowser2,\r
&HiiHandle,\r
1,\r
- NULL,\r
+ &mBootManagerGuid,\r
0,\r
NULL,\r
&ActionRequest\r
#define BOOT_MANAGER_FORM_ID 0x1000\r
\r
#define LABEL_BOOT_OPTION 0x00\r
+#define LABEL_BOOT_OPTION_END 0x01\r
\r
//\r
// These are the VFR compiler generated data representing our VFR data.\r
#define BOOT_MANAGER_SUBCLASS 0x00\r
\r
formset\r
- guid = FORMSET_GUID,\r
- title = STRING_TOKEN(STR_BM_BANNER),\r
- help = STRING_TOKEN(STR_LAST_STRING),\r
- class = BOOT_MANAGER_CLASS,\r
- subclass = BOOT_MANAGER_SUBCLASS,\r
+ guid = FORMSET_GUID,\r
+ title = STRING_TOKEN(STR_BM_BANNER),\r
+ help = STRING_TOKEN(STR_LAST_STRING),\r
+ classguid = FORMSET_GUID,\r
+ class = BOOT_MANAGER_CLASS,\r
+ subclass = BOOT_MANAGER_SUBCLASS,\r
\r
form formid = BOOT_MANAGER_FORM_ID,\r
title = STRING_TOKEN(STR_BM_BANNER);\r
**/\r
\r
#include "DeviceManager.h"\r
+#include <Guid/HiiPlatformSetupFormset.h>\r
\r
DEVICE_MANAGER_CALLBACK_DATA gDeviceManagerPrivate = {\r
DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE,\r
}\r
};\r
\r
-#define MENU_ITEM_NUM \\r
- (sizeof (mDeviceManagerMenuItemTable) / sizeof (DEVICE_MANAGER_MENU_ITEM))\r
-\r
/**\r
This function is invoked if user selected a iteractive opcode from Device Manager's\r
Formset. The decision by user is saved to gCallbackKey for later processing. If\r
return Status;\r
}\r
\r
+/**\r
+ Extract the displayed formset for given HII handle and class guid.\r
+\r
+ @param Handle The HII handle.\r
+ @param SetupClassGuid The class guid specifies which form set will be displayed.\r
+ @param FormSetTitle Formset title string.\r
+ @param FormSetHelp Formset help string.\r
+\r
+ @retval TRUE The formset for given HII handle will be displayed.\r
+ @return FALSE The formset for given HII handle will not be displayed.\r
+\r
+**/\r
+BOOLEAN\r
+ExtractDisplayedHiiFormFromHiiHandle (\r
+ IN EFI_HII_HANDLE Handle,\r
+ IN EFI_GUID *SetupClassGuid,\r
+ OUT EFI_STRING_ID *FormSetTitle,\r
+ OUT EFI_STRING_ID *FormSetHelp\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINTN BufferSize;\r
+ EFI_HII_PACKAGE_LIST_HEADER *HiiPackageList;\r
+ UINT8 *Package;\r
+ UINT8 *OpCodeData;\r
+ UINT32 Offset;\r
+ UINT32 Offset2;\r
+ UINT32 PackageListLength;\r
+ EFI_HII_PACKAGE_HEADER PackageHeader;\r
+ EFI_GUID *ClassGuid;\r
+ UINT8 ClassGuidNum;\r
+\r
+ ASSERT (Handle != NULL);\r
+ ASSERT (SetupClassGuid != NULL); \r
+ ASSERT (FormSetTitle != NULL);\r
+ ASSERT (FormSetHelp != NULL);\r
+\r
+ *FormSetTitle = 0;\r
+ *FormSetHelp = 0;\r
+ ClassGuidNum = 0;\r
+ ClassGuid = NULL;\r
+\r
+ //\r
+ // Get HII PackageList\r
+ //\r
+ BufferSize = 0;\r
+ HiiPackageList = NULL;\r
+ Status = gHiiDatabase->ExportPackageLists (gHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
+ //\r
+ // Handle is a invalid handle. Check if Handle is corrupted.\r
+ //\r
+ ASSERT (Status != EFI_NOT_FOUND);\r
+ //\r
+ // The return status should always be EFI_BUFFER_TOO_SMALL as input buffer's size is 0.\r
+ //\r
+ ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
+ \r
+ HiiPackageList = AllocatePool (BufferSize);\r
+ ASSERT (HiiPackageList != NULL);\r
+\r
+ Status = gHiiDatabase->ExportPackageLists (gHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
+ if (EFI_ERROR (Status)) {\r
+ return FALSE;\r
+ }\r
+\r
+ //\r
+ // Get Form package from this HII package List\r
+ //\r
+ Offset = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
+ Offset2 = 0;\r
+ PackageListLength = ReadUnaligned32 (&HiiPackageList->PackageLength);\r
+\r
+ while (Offset < PackageListLength) {\r
+ Package = ((UINT8 *) HiiPackageList) + Offset;\r
+ CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
+\r
+ if (PackageHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
+ //\r
+ // Search FormSet Opcode in this Form Package\r
+ //\r
+ Offset2 = sizeof (EFI_HII_PACKAGE_HEADER);\r
+ while (Offset2 < PackageHeader.Length) {\r
+ OpCodeData = Package + Offset2;\r
+\r
+ if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {\r
+ //\r
+ // Find FormSet OpCode\r
+ //\r
+ ClassGuidNum = ((EFI_IFR_FORM_SET *) OpCodeData)->Flags;\r
+ ClassGuid = (EFI_GUID *) (VOID *)(OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
+ while (ClassGuidNum-- > 0) {\r
+ if (CompareGuid (SetupClassGuid, ClassGuid)) {\r
+ CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));\r
+ CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));\r
+ FreePool (HiiPackageList);\r
+ return TRUE;\r
+ }\r
+ }\r
+ }\r
+ \r
+ //\r
+ // Go to next opcode\r
+ //\r
+ Offset2 += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length;\r
+ }\r
+ }\r
+ \r
+ //\r
+ // Go to next package\r
+ //\r
+ Offset += PackageHeader.Length;\r
+ }\r
+\r
+ FreePool (HiiPackageList);\r
+\r
+ return FALSE;\r
+}\r
+\r
/**\r
Call the browser and display the device manager to allow user\r
to configure the platform.\r
)\r
{\r
EFI_STATUS Status;\r
- UINTN Count;\r
UINTN Index;\r
EFI_STRING String;\r
- EFI_HII_UPDATE_DATA UpdateData[MENU_ITEM_NUM];\r
EFI_STRING_ID Token;\r
EFI_STRING_ID TokenHelp;\r
EFI_HII_HANDLE *HiiHandles;\r
EFI_HII_HANDLE HiiHandle;\r
- UINT16 FormSetClass;\r
EFI_STRING_ID FormSetTitle;\r
EFI_STRING_ID FormSetHelp;\r
EFI_BROWSER_ACTION_REQUEST ActionRequest;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
\r
- HiiHandles = NULL;\r
-\r
+ HiiHandles = NULL;\r
Status = EFI_SUCCESS;\r
gCallbackKey = 0;\r
\r
//\r
// Create Subtitle OpCodes\r
//\r
- for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
- //\r
- // Allocate space for creation of UpdateData Buffer\r
- //\r
- UpdateData[Index].BufferSize = 0x1000;\r
- UpdateData[Index].Offset = 0;\r
- UpdateData[Index].Data = AllocatePool (0x1000);\r
- ASSERT (UpdateData[Index].Data != NULL);\r
+ //\r
+ // Allocate space for creation of UpdateData Buffer\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
\r
- CreateSubTitleOpCode (mDeviceManagerMenuItemTable[Index].StringId, 0, 0, 1, &UpdateData[Index]);\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 = LABEL_DEVICES_LIST;\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
+ HiiCreateSubTitleOpCode (StartOpCodeHandle, STRING_TOKEN (STR_DEVICES_LIST), 0, 0, 1);\r
\r
//\r
// Get all the Hii handles\r
// Search for formset of each class type\r
//\r
for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
- IfrLibExtractClassFromHiiHandle (HiiHandles[Index], &FormSetClass, &FormSetTitle, &FormSetHelp);\r
-\r
- if (FormSetClass == EFI_NON_DEVICE_CLASS) {\r
+ if (!ExtractDisplayedHiiFormFromHiiHandle (HiiHandles[Index], &gEfiHiiPlatformSetupFormsetGuid, &FormSetTitle, &FormSetHelp)) {\r
continue;\r
}\r
\r
TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);\r
FreePool (String);\r
\r
- for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
- if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
- CreateActionOpCode (\r
- (EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),\r
- Token,\r
- TokenHelp,\r
- EFI_IFR_FLAG_CALLBACK,\r
- 0,\r
- &UpdateData[Count]\r
- );\r
- }\r
- }\r
- }\r
-\r
- for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
- //\r
- // Add End Opcode for Subtitle\r
- //\r
- CreateEndOpCode (&UpdateData[Index]);\r
-\r
- IfrLibUpdateForm (\r
- HiiHandle,\r
- &mDeviceManagerGuid,\r
- DEVICE_MANAGER_FORM_ID,\r
- mDeviceManagerMenuItemTable[Index].Class,\r
- FALSE,\r
- &UpdateData[Index]\r
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),\r
+ Token,\r
+ TokenHelp,\r
+ EFI_IFR_FLAG_CALLBACK,\r
+ 0\r
);\r
}\r
\r
+ //\r
+ // Add End Opcode for Subtitle\r
+ //\r
+ HiiCreateEndOpCode (StartOpCodeHandle);\r
+\r
+ HiiUpdateForm (\r
+ HiiHandle,\r
+ &mDeviceManagerGuid,\r
+ DEVICE_MANAGER_FORM_ID,\r
+ StartOpCodeHandle,\r
+ EndOpCodeHandle\r
+ );\r
+\r
ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
Status = gFormBrowser2->SendForm (\r
gFormBrowser2,\r
&HiiHandle,\r
1,\r
- NULL,\r
+ &mDeviceManagerGuid,\r
0,\r
NULL,\r
&ActionRequest\r
Status = EFI_SUCCESS;\r
}\r
\r
- for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
- FreePool (UpdateData[Index].Data);\r
- }\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
FreePool (HiiHandles);\r
\r
return Status;\r
0x3ebfa8e6, 0x511d, 0x4b5b, {0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27} \\r
}\r
\r
+#define LABEL_DEVICES_LIST 0x0080\r
+#define LABEL_END 0xffff\r
+\r
#define LABEL_VBIOS 0x0040\r
\r
#define DEVICE_MANAGER_FORM_ID 0x1000\r
#define EFI_OTHER_DEVICE_CLASS 0x0020\r
#define LABEL_VBIOS 0x0040\r
\r
+#define LABEL_DEVICES_LIST 0x0080\r
#define LABEL_END 0xffff\r
\r
#define DEVICE_MANAGER_CLASS 0x0000\r
#define DEVICE_MANAGER_FORM_ID 0x1000\r
\r
formset\r
- guid = FORMSET_GUID,\r
- title = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE),\r
- help = STRING_TOKEN(STR_EMPTY_STRING),\r
- class = DEVICE_MANAGER_CLASS,\r
- subclass = FRONT_PAGE_SUBCLASS,\r
+ guid = FORMSET_GUID,\r
+ title = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE),\r
+ help = STRING_TOKEN(STR_EMPTY_STRING),\r
+ classguid = FORMSET_GUID,\r
+ class = DEVICE_MANAGER_CLASS,\r
+ subclass = FRONT_PAGE_SUBCLASS,\r
\r
form formid = DEVICE_MANAGER_FORM_ID,\r
title = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE);\r
label EFI_ON_BOARD_DEVICE_CLASS;\r
// label LABEL_END;\r
\r
- label EFI_OTHER_DEVICE_CLASS;\r
+// label EFI_OTHER_DEVICE_CLASS;\r
+\r
+ label LABEL_DEVICES_LIST;\r
label LABEL_END;\r
\r
subtitle text = STRING_TOKEN(STR_EMPTY_STRING);\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_UPDATE_DATA UpdateData;\r
- IFR_OPTION *OptionList;\r
CHAR8 *LanguageString;\r
CHAR8 *LangCode;\r
CHAR8 *Lang;\r
CHAR8 *CurrentLang;\r
CHAR8 *BestLanguage;\r
UINTN OptionCount;\r
- EFI_STRING_ID Token;\r
CHAR16 *StringBuffer;\r
UINTN BufferSize;\r
- UINTN Index;\r
EFI_HII_HANDLE HiiHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
+ BOOLEAN FirstFlag;\r
\r
if (InitializeHiiData) {\r
//\r
\r
\r
//\r
- // Allocate space for creation of UpdateData Buffer\r
+ // Init OpCode Handle and Allocate space for creation of UpdateData Buffer\r
//\r
- UpdateData.BufferSize = 0x1000;\r
- UpdateData.Data = AllocateZeroPool (0x1000);\r
- ASSERT (UpdateData.Data != NULL);\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
\r
- OptionList = AllocateZeroPool (0x1000);\r
- ASSERT (OptionList != NULL);\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\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 = LABEL_SELECT_LANGUAGE;\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
// Collect the languages from what our current Language support is based on our VFR\r
//\r
ASSERT (BestLanguage != NULL);\r
\r
+ OptionCount = 0;\r
+ LangCode = LanguageString;\r
+ FirstFlag = FALSE;\r
+ \r
+ if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ while (*LangCode != 0) {\r
+ HiiLibGetNextLanguage (&LangCode, Lang);\r
+ OptionCount ++;\r
+ }\r
+ gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
+ ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
+ FirstFlag = TRUE;\r
+ }\r
+\r
OptionCount = 0;\r
LangCode = LanguageString;\r
while (*LangCode != 0) {\r
GetNextLanguage (&LangCode, Lang);\r
\r
- if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ if (FirstFlag) {\r
//\r
// Get Language Name from String Package. The StringId of Printable Language\r
// Name is always 1 which is generated by StringGather Tool.\r
}\r
ASSERT_EFI_ERROR (Status);\r
\r
- Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
+ //\r
+ // Save the string Id for each language\r
+ //\r
+ gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
FreePool (StringBuffer);\r
- } else {\r
- Token = gFrontPagePrivate.LanguageToken[OptionCount];\r
}\r
\r
if (AsciiStrCmp (Lang, BestLanguage) == 0) {\r
- OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
} else {\r
- OptionList[OptionCount].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
}\r
- OptionList[OptionCount].StringToken = Token;\r
- OptionList[OptionCount].Value.u8 = (UINT8) OptionCount;\r
\r
OptionCount++;\r
}\r
FreePool (Lang);\r
FreePool (LanguageString);\r
\r
- UpdateData.Offset = 0;\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ StartOpCodeHandle,\r
FRONT_PAGE_KEY_LANGUAGE,\r
0,\r
0,\r
STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),\r
EFI_IFR_FLAG_CALLBACK,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- OptionList,\r
- OptionCount,\r
- &UpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
- Status = IfrLibUpdateForm (\r
+ Status = HiiUpdateForm (\r
HiiHandle,\r
&mFrontPageGuid,\r
FRONT_PAGE_FORM_ID,\r
- LABEL_SELECT_LANGUAGE,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // LABEL_SELECT_LANGUAGE\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- //\r
- // Save the string Id for each language\r
- //\r
- gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
- ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
- for (Index = 0; Index < OptionCount; Index++) {\r
- gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken;\r
- }\r
-\r
- FreePool (UpdateData.Data);\r
- FreePool (OptionList);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
return Status;\r
}\r
\r
#define FRONT_PAGE_KEY_BOOT_MAINTAIN 0x9876\r
\r
#define LABEL_SELECT_LANGUAGE 0x1000\r
+#define LABEL_END 0xffff\r
\r
#define FRONT_PAGE_FORMSET_GUID \\r
{ \\r
guid = FORMSET_GUID,\r
title = STRING_TOKEN(STR_FRONT_PAGE_TITLE),\r
help = STRING_TOKEN(STR_NULL_STRING),\r
+ classguid = FORMSET_GUID,\r
class = FRONT_PAGE_CLASS,\r
subclass = FRONT_PAGE_SUBCLASS,\r
\r