\r
CHAR16 VariableName[] = L"MyIfrNVData";\r
\r
+EFI_HANDLE DriverHandle[2] = {NULL, NULL};\r
+DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL;\r
+\r
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath0 = {\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
+ //\r
+ // {C153B68D-EBFC-488e-B110-662867745B87}\r
+ //\r
+ { 0xc153b68d, 0xebfc, 0x488e, { 0xb1, 0x10, 0x66, 0x28, 0x67, 0x74, 0x5b, 0x87 } }\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
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath1 = {\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
+ //\r
+ // {06F37F07-0C48-40e9-8436-0A08A0BB76B0}\r
+ //\r
+ { 0x6f37f07, 0xc48, 0x40e9, { 0x84, 0x36, 0xa, 0x8, 0xa0, 0xbb, 0x76, 0xb0 } }\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
Encode the password using a simple algorithm.\r
\r
VOID\r
EncodePassword (\r
IN CHAR16 *Password,\r
- IN UINT8 MaxSize\r
+ IN UINTN MaxSize\r
)\r
{\r
UINTN Index;\r
//\r
// Get user input password\r
//\r
- BufferSize = 21 * sizeof (CHAR16);\r
- Password = AllocateZeroPool (BufferSize);\r
- ASSERT (Password != NULL);\r
-\r
- Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
- if (EFI_ERROR (Status)) {\r
+ Password = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+ if (Password == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+ if (StrLen (Password) > 20) {\r
FreePool (Password);\r
- return Status;\r
+ return EFI_NOT_READY;\r
}\r
\r
//\r
// Validate old password\r
//\r
- EncodedPassword = AllocateCopyPool (21 * sizeof (CHAR16), Password);\r
+ EncodedPassword = AllocateZeroPool (21 * sizeof (CHAR16));\r
ASSERT (EncodedPassword != NULL);\r
+ StrnCpy (EncodedPassword, Password, 21);\r
EncodePassword (EncodedPassword, 20 * sizeof (CHAR16));\r
if (CompareMem (EncodedPassword, PrivateData->Configuration.WhatIsThePassword2, 20 * sizeof (CHAR16)) != 0) {\r
//\r
)\r
{\r
EFI_STATUS Status;\r
- UINTN BufferSize;\r
CHAR16 *Password;\r
+ CHAR16 *TempPassword;\r
+ UINTN PasswordSize;\r
DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
+ UINTN BufferSize;\r
\r
//\r
// Get Buffer Storage data from EFI variable\r
// Get user input password\r
//\r
Password = &PrivateData->Configuration.WhatIsThePassword2[0];\r
- ZeroMem (Password, 20 * sizeof (CHAR16));\r
- Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ PasswordSize = sizeof (PrivateData->Configuration.WhatIsThePassword2); \r
+ ZeroMem (Password, PasswordSize);\r
+ \r
+ TempPassword = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+ if (TempPassword == NULL) {\r
+ return EFI_NOT_READY;\r
}\r
+ if (StrLen (TempPassword) > PasswordSize / sizeof (CHAR16)) {\r
+ FreePool (TempPassword);\r
+ return EFI_NOT_READY;\r
+ }\r
+ StrnCpy (Password, TempPassword, PasswordSize / sizeof (CHAR16));\r
+ FreePool (TempPassword);\r
\r
//\r
// Retrive uncommitted data from Browser\r
//\r
- BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_PRIVATE_DATA));\r
- ASSERT (Configuration != NULL);\r
- Status = GetBrowserData (&mFormSetGuid, VariableName, &BufferSize, (UINT8 *) Configuration);\r
- if (!EFI_ERROR (Status)) {\r
+ Configuration = (DRIVER_SAMPLE_CONFIGURATION *) HiiGetBrowserData (&mFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION));\r
+ if (Configuration != NULL) {\r
//\r
// Update password's clear text in the screen\r
//\r
- CopyMem (Configuration->PasswordClearText, Password, 20 * sizeof (CHAR16));\r
+ CopyMem (Configuration->PasswordClearText, Password, PasswordSize);\r
\r
//\r
// Update uncommitted data of Browser\r
//\r
- BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = SetBrowserData (\r
- &mFormSetGuid,\r
- VariableName,\r
- BufferSize,\r
- (UINT8 *) Configuration,\r
- NULL\r
- );\r
+ HiiSetBrowserData (\r
+ &mFormSetGuid,\r
+ VariableName,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ (UINT8 *) Configuration,\r
+ NULL\r
+ );\r
+ \r
+ FreePool (Configuration);\r
}\r
- FreePool (Configuration);\r
+\r
\r
//\r
// Set password\r
//\r
- EncodePassword (Password, 20 * sizeof (CHAR16));\r
+ EncodePassword (Password, PasswordSize);\r
Status = gRT->SetVariable(\r
VariableName,\r
&mFormSetGuid,\r
//\r
// Request is set to NULL, return all configurable elements together with ALTCFG\r
//\r
- Status = ConstructConfigAltResp (\r
- NULL,\r
- NULL,\r
- Results,\r
- &mFormSetGuid,\r
- VariableName,\r
- PrivateData->DriverHandle[0],\r
- &PrivateData->Configuration,\r
- BufferSize,\r
- VfrMyIfrNVDataBlockName,\r
- 2,\r
- STRING_TOKEN (STR_STANDARD_DEFAULT_PROMPT),\r
- VfrMyIfrNVDataDefault0000,\r
- STRING_TOKEN (STR_MANUFACTURE_DEFAULT_PROMPT),\r
- VfrMyIfrNVDataDefault0001\r
+ *Results = HiiConstructConfigAltResp (\r
+ &mFormSetGuid,\r
+ VariableName,\r
+ PrivateData->DriverHandle[0],\r
+ &PrivateData->Configuration,\r
+ BufferSize,\r
+ VfrMyIfrNVDataBlockName,\r
+ STRING_TOKEN (STR_STANDARD_DEFAULT_PROMPT),\r
+ VfrMyIfrNVDataDefault0000,\r
+ STRING_TOKEN (STR_MANUFACTURE_DEFAULT_PROMPT),\r
+ VfrMyIfrNVDataDefault0001,\r
+ 0,\r
+ NULL\r
);\r
+ \r
+ //\r
+ // No matched storage is found.\r
+ //\r
+ if (*Results == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
//\r
// Check routing data in <ConfigHdr>.\r
// Note: if only one Storage is used, then this checking could be skipped.\r
//\r
- if (!IsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) {\r
+ if (!HiiIsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) {\r
*Progress = Request;\r
return EFI_NOT_FOUND;\r
}\r
// Check routing data in <ConfigHdr>.\r
// Note: if only one Storage is used, then this checking could be skipped.\r
//\r
- if (!IsConfigHdrMatch (Configuration, &mFormSetGuid, VariableName)) {\r
+ if (!HiiIsConfigHdrMatch (Configuration, &mFormSetGuid, VariableName)) {\r
*Progress = Configuration;\r
return EFI_NOT_FOUND;\r
}\r
{\r
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
EFI_STATUS Status;\r
- EFI_HII_UPDATE_DATA UpdateData;\r
- IFR_OPTION *IfrOptionList;\r
UINT8 MyVar;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
\r
if ((Value == NULL) || (ActionRequest == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
//\r
// Initialize the container for dynamic opcodes\r
//\r
- IfrLibInitUpdateData (&UpdateData, 0x1000);\r
-\r
- IfrOptionList = AllocatePool (2 * sizeof (IFR_OPTION));\r
- ASSERT (IfrOptionList != NULL);\r
-\r
- IfrOptionList[0].Flags = 0;\r
- IfrOptionList[0].StringToken = STRING_TOKEN (STR_BOOT_OPTION1);\r
- IfrOptionList[0].Value.u8 = 1;\r
- IfrOptionList[1].Flags = EFI_IFR_OPTION_DEFAULT;\r
- IfrOptionList[1].StringToken = STRING_TOKEN (STR_BOOT_OPTION2);\r
- IfrOptionList[1].Value.u8 = 2;\r
-\r
- CreateActionOpCode (\r
- 0x1237, // Question ID\r
- STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
- STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
- EFI_IFR_FLAG_CALLBACK, // Question flag\r
- 0, // Action String ID\r
- &UpdateData // Container for dynamic created opcodes\r
- );\r
- \r
- //\r
- // Prepare initial value for the dynamic created oneof Question\r
- //\r
- PrivateData->Configuration.DynamicOneof = 2;\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
- CreateOneOfOpCode (\r
- 0x8001, // Question ID (or call it "key")\r
- CONFIGURATION_VARSTORE_ID, // VarStore ID\r
- DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage\r
- STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text\r
- STRING_TOKEN (STR_ONE_OF_HELP), // Question help text\r
- EFI_IFR_FLAG_CALLBACK, // Question flag\r
- EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value\r
- IfrOptionList, // Option list\r
- 2, // Number of options in Option list\r
- &UpdateData // Container for dynamic created opcodes\r
- );\r
- \r
- CreateOrderedListOpCode (\r
- 0x8002, // Question ID\r
- CONFIGURATION_VARSTORE_ID, // VarStore ID\r
- DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage\r
- STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text\r
- STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text\r
- EFI_IFR_FLAG_RESET_REQUIRED, // 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
- 5, // Maximum container\r
- IfrOptionList, // Option list\r
- 2, // Number of options in Option list\r
- &UpdateData // Container for dynamic created opcodes\r
- );\r
- \r
- CreateGotoOpCode (\r
- 1, // Target Form ID\r
- STRING_TOKEN (STR_GOTO_FORM1), // Prompt text\r
- STRING_TOKEN (STR_GOTO_HELP), // Help text\r
- 0, // Question flag\r
- 0x8003, // Question ID\r
- &UpdateData // Container for dynamic created opcodes\r
- );\r
- \r
- Status = IfrLibUpdateForm (\r
- PrivateData->HiiHandle[0], // HII handle\r
- &mFormSetGuid, // Formset GUID\r
- 0x1234, // Form ID\r
- 0x1234, // Label for where to insert opcodes\r
- TRUE, // Append or replace\r
- &UpdateData // Dynamic created opcodes\r
- );\r
- FreePool (IfrOptionList);\r
- IfrLibFreeUpdateData (&UpdateData);\r
- break;\r
- \r
- case 0x5678:\r
- //\r
- // We will reach here once the Question is refreshed\r
- //\r
- IfrLibInitUpdateData (&UpdateData, 0x1000);\r
- \r
- IfrOptionList = AllocatePool (2 * sizeof (IFR_OPTION));\r
- ASSERT (IfrOptionList != NULL);\r
- \r
- CreateActionOpCode (\r
- 0x1237, // Question ID\r
- STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
- STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
- EFI_IFR_FLAG_CALLBACK, // Question flag\r
- 0, // Action String ID\r
- &UpdateData // Container for dynamic created opcodes\r
- );\r
- \r
- Status = IfrLibUpdateForm (\r
- PrivateData->HiiHandle[0], // HII handle\r
- &mFormSetGuid, // Formset GUID\r
- 3, // Form ID\r
- 0x2234, // Label for where to insert opcodes\r
- TRUE, // Append or replace\r
- &UpdateData // Dynamic created opcodes\r
- );\r
- IfrLibFreeUpdateData (&UpdateData);\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_UPDATE1;\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
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x1237, // Question ID\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ 0 // Action String ID\r
+ );\r
+\r
+ //\r
+ // Create Option OpCode\r
+ //\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_BOOT_OPTION1),\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 1\r
+ );\r
+\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_BOOT_OPTION2),\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 2\r
+ );\r
+\r
+ //\r
+ // Prepare initial value for the dynamic created oneof Question\r
+ //\r
+ PrivateData->Configuration.DynamicOneof = 2;\r
+ Status = gRT->SetVariable(\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
+\r
+ HiiCreateOneOfOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x8001, // Question ID (or call it "key")\r
+ CONFIGURATION_VARSTORE_ID, // VarStore ID\r
+ (UINT16) DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage\r
+ STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text\r
+ STRING_TOKEN (STR_ONE_OF_HELP), // Question help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value\r
+ OptionsOpCodeHandle, // Option Opcode list\r
+ NULL // Default Opcode is NULl\r
+ );\r
+\r
+ HiiCreateOrderedListOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x8002, // Question ID\r
+ CONFIGURATION_VARSTORE_ID, // VarStore ID\r
+ (UINT16) DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage\r
+ STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text\r
+ STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text\r
+ EFI_IFR_FLAG_RESET_REQUIRED, // 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
+ 5, // Maximum container\r
+ OptionsOpCodeHandle, // Option Opcode list\r
+ NULL // Default Opcode is NULl\r
+ );\r
+\r
+ HiiCreateGotoOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 1, // Target Form ID\r
+ STRING_TOKEN (STR_GOTO_FORM1), // Prompt text\r
+ STRING_TOKEN (STR_GOTO_HELP), // Help text\r
+ 0, // Question flag\r
+ 0x8003 // Question ID\r
+ );\r
+\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &mFormSetGuid, // Formset GUID\r
+ 0x1234, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ EndOpCodeHandle // Replace data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ break;\r
\r
- //\r
- // Refresh the Question value\r
- //\r
- PrivateData->Configuration.DynamicRefresh++;\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
+ case 0x5678:\r
+ //\r
+ // We will reach here once the Question is refreshed\r
+ //\r
+\r
+ //\r
+ // Initialize the container for dynamic opcodes\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != 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_UPDATE2;\r
+\r
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x1237, // Question ID\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
+ STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ 0 // Action String ID\r
+ );\r
\r
- //\r
- // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
- // the first statement in Form 3 be suppressed\r
- //\r
- MyVar = 111;\r
- Status = gRT->SetVariable(\r
- L"MyVar",\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- 1,\r
- &MyVar\r
- );\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &mFormSetGuid, // Formset GUID\r
+ 0x3, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ NULL // Insert data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle); \r
+ \r
+ //\r
+ // Refresh the Question value\r
+ //\r
+ PrivateData->Configuration.DynamicRefresh++;\r
+ Status = gRT->SetVariable(\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
+ \r
+ //\r
+ // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
+ // the first statement in Form 3 be suppressed\r
+ //\r
+ MyVar = 111;\r
+ Status = gRT->SetVariable(\r
+ L"MyVar",\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ 1,\r
+ &MyVar\r
+ );\r
break;\r
\r
case 0x1237:\r
{\r
EFI_STATUS Status;\r
EFI_STATUS SavedStatus;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
EFI_HII_HANDLE HiiHandle[2];\r
- EFI_HANDLE DriverHandle[2];\r
- DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
EFI_SCREEN_DESCRIPTOR Screen;\r
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
EFI_HII_STRING_PROTOCOL *HiiString;\r
}\r
PrivateData->HiiConfigRouting = HiiConfigRouting;\r
\r
- //\r
- // Install Config Access protocol\r
- //\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle[0]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- PrivateData->DriverHandle[0] = DriverHandle[0];\r
-\r
- Status = gBS->InstallProtocolInterface (\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
&DriverHandle[0],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath0,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &PrivateData->ConfigAccess\r
+ &PrivateData->ConfigAccess,\r
+ NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ PrivateData->DriverHandle[0] = DriverHandle[0];\r
+\r
//\r
// Publish our HII data\r
//\r
- PackageList = HiiLibPreparePackageList (\r
- 2,\r
- &mFormSetGuid,\r
- DriverSampleStrings,\r
- VfrBin\r
- );\r
- if (PackageList == NULL) {\r
+ HiiHandle[0] = HiiAddPackages (\r
+ &mFormSetGuid,\r
+ DriverHandle[0],\r
+ DriverSampleStrings,\r
+ VfrBin,\r
+ NULL\r
+ );\r
+ if (HiiHandle[0] == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- DriverHandle[0],\r
- &HiiHandle[0]\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
PrivateData->HiiHandle[0] = HiiHandle[0];\r
\r
//\r
// Publish another Fromset\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&DriverHandle[1]);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &DriverHandle[1],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath1,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
PrivateData->DriverHandle[1] = DriverHandle[1];\r
\r
- PackageList = HiiLibPreparePackageList (\r
- 2,\r
- &mInventoryGuid,\r
- DriverSampleStrings,\r
- InventoryBin\r
- );\r
- if (PackageList == NULL) {\r
+ HiiHandle[1] = HiiAddPackages (\r
+ &mInventoryGuid,\r
+ DriverHandle[1],\r
+ DriverSampleStrings,\r
+ InventoryBin,\r
+ NULL\r
+ );\r
+ if (HiiHandle[1] == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- DriverHandle[1],\r
- &HiiHandle[1]\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
PrivateData->HiiHandle[1] = HiiHandle[1];\r
\r
//\r
//\r
NewString = L"700 Mhz";\r
\r
- Status = HiiLibSetString (HiiHandle[0], STRING_TOKEN (STR_CPU_STRING2), NewString);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (HiiSetString (HiiHandle[0], STRING_TOKEN (STR_CPU_STRING2), NewString, NULL) == 0) {\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
//\r
// based on default values stored in IFR\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = IfrLibExtractDefault (Configuration, &BufferSize, 1, VfrMyIfrNVDataDefault0000);\r
+ Status = HiiIfrLibExtractDefault (Configuration, &BufferSize, 1, VfrMyIfrNVDataDefault0000);\r
\r
if (!EFI_ERROR (Status)) {\r
gRT->SetVariable(\r
);\r
}\r
}\r
+ \r
+ SavedStatus = EFI_SUCCESS;\r
+\r
+ //\r
+ // Default this driver is built into Flash device image, \r
+ // the following code doesn't run.\r
+ //\r
\r
//\r
// Example of how to display only the item we sent to HII\r
+ // When this driver is not built into Flash device image, \r
+ // it need to call SendForm to show front page by itself.\r
//\r
- if (DISPLAY_ONLY_MY_ITEM == 0x0001) {\r
+ if (DISPLAY_ONLY_MY_ITEM <= 1) {\r
//\r
// Have the browser pull out our copy of the data, and only display our data\r
//\r
- // Status = FormConfig->SendForm (FormConfig, TRUE, HiiHandle, NULL, NULL, NULL, &Screen, NULL);\r
- //\r
Status = FormBrowser2->SendForm (\r
FormBrowser2,\r
- HiiHandle,\r
+ &(HiiHandle[DISPLAY_ONLY_MY_ITEM]),\r
1,\r
NULL,\r
0,\r
NULL\r
);\r
SavedStatus = Status;\r
-\r
+ \r
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[0]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
-\r
+ \r
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[1]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ }\r
\r
- return SavedStatus;\r
- } else {\r
- //\r
- // Have the browser pull out all the data in the HII Database and display it.\r
- //\r
- // Status = FormConfig->SendForm (FormConfig, TRUE, 0, NULL, NULL, NULL, NULL, NULL);\r
- //\r
+ return SavedStatus;\r
+}\r
+\r
+/**\r
+ Unloads the application and its installed protocol.\r
+\r
+ @param[in] ImageHandle Handle that identifies the image to be unloaded.\r
+\r
+ @retval EFI_SUCCESS The image has been unloaded.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DriverSampleUnload (\r
+ IN EFI_HANDLE ImageHandle\r
+ )\r
+{\r
+ if (DriverHandle[0] != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverHandle[0],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath0,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &PrivateData->ConfigAccess,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (DriverHandle[1] != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ DriverHandle[1],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath1,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (PrivateData != NULL) {\r
+ FreePool (PrivateData);\r
}\r
\r
return EFI_SUCCESS;\r