This is an example of how a driver might export data to the HII protocol to be\r
later utilized by the Setup Protocol\r
\r
-Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
-\r
#include "DriverSample.h"\r
\r
#define DISPLAY_ONLY_MY_ITEM 0x0002\r
\r
-CHAR16 VariableName[] = L"MyIfrNVData";\r
-CHAR16 MyEfiVar[] = L"MyEfiVar";\r
-EFI_HANDLE DriverHandle[2] = {NULL, NULL};\r
-DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL;\r
-EFI_EVENT mEvent;\r
+CHAR16 VariableName[] = L"MyIfrNVData";\r
+CHAR16 MyEfiVar[] = L"MyEfiVar";\r
+CHAR16 MyEfiBitVar[] = L"MyEfiBitVar";\r
+CHAR16 MyEfiUnionVar[] = L"MyEfiUnionVar";\r
+\r
+EFI_HANDLE DriverHandle[2] = { NULL, NULL };\r
+DRIVER_SAMPLE_PRIVATE_DATA *mPrivateData = NULL;\r
+EFI_EVENT mEvent;\r
\r
HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath0 = {\r
{\r
HARDWARE_DEVICE_PATH,\r
HW_VENDOR_DP,\r
{\r
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
}\r
},\r
DRIVER_SAMPLE_FORMSET_GUID\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
+ (UINT8)(END_DEVICE_PATH_LENGTH),\r
+ (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)\r
}\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
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
}\r
},\r
DRIVER_SAMPLE_INVENTORY_GUID\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
+ (UINT8)(END_DEVICE_PATH_LENGTH),\r
+ (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)\r
}\r
}\r
};\r
\r
/**\r
- Add empty function for event process function.\r
+ Set value of a data element in an Array by its Index.\r
\r
- @param Event The Event need to be process\r
- @param Context The context of the event.\r
+ @param Array The data array.\r
+ @param Type Type of the data in this array.\r
+ @param Index Zero based index for data in this array.\r
+ @param Value The value to be set.\r
\r
**/\r
VOID\r
-EFIAPI\r
-DriverSampleInternalEmptyFunction (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+SetArrayData (\r
+ IN VOID *Array,\r
+ IN UINT8 Type,\r
+ IN UINTN Index,\r
+ IN UINT64 Value\r
)\r
{\r
+ ASSERT (Array != NULL);\r
+\r
+ switch (Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ *(((UINT8 *)Array) + Index) = (UINT8)Value;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ *(((UINT16 *)Array) + Index) = (UINT16)Value;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ *(((UINT32 *)Array) + Index) = (UINT32)Value;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ *(((UINT64 *)Array) + Index) = (UINT64)Value;\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
}\r
\r
/**\r
**/\r
EFI_STATUS\r
EFIAPI\r
-NotificationFunction(\r
- IN EFI_KEY_DATA *KeyData\r
+NotificationFunction (\r
+ IN EFI_KEY_DATA *KeyData\r
)\r
{\r
gBS->SignalEvent (mEvent);\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
/**\r
- Function to start monitoring for CTRL-C using SimpleTextInputEx. \r
+ Function to start monitoring for CTRL-C using SimpleTextInputEx.\r
\r
@retval EFI_SUCCESS The feature is enabled.\r
@retval EFI_OUT_OF_RESOURCES There is not enough mnemory available.\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InternalStartMonitor(\r
+InternalStartMonitor (\r
VOID\r
)\r
{\r
- EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *SimpleEx;\r
- EFI_KEY_DATA KeyData;\r
- EFI_STATUS Status;\r
- EFI_HANDLE *Handles;\r
- UINTN HandleCount;\r
- UINTN HandleIndex;\r
- EFI_HANDLE NotifyHandle;\r
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *SimpleEx;\r
+ EFI_KEY_DATA KeyData;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *Handles;\r
+ UINTN HandleCount;\r
+ UINTN HandleIndex;\r
+ VOID *NotifyHandle;\r
\r
Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiSimpleTextInputExProtocolGuid,\r
- NULL,\r
- &HandleCount,\r
- &Handles\r
- );\r
+ ByProtocol,\r
+ &gEfiSimpleTextInputExProtocolGuid,\r
+ NULL,\r
+ &HandleCount,\r
+ &Handles\r
+ );\r
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {\r
- Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **) &SimpleEx);\r
+ Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **)&SimpleEx);\r
ASSERT_EFI_ERROR (Status);\r
\r
KeyData.KeyState.KeyToggleState = 0;\r
KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED;\r
KeyData.Key.UnicodeChar = L'c';\r
\r
- Status = SimpleEx->RegisterKeyNotify(\r
- SimpleEx,\r
- &KeyData,\r
- NotificationFunction,\r
- &NotifyHandle);\r
+ Status = SimpleEx->RegisterKeyNotify (\r
+ SimpleEx,\r
+ &KeyData,\r
+ NotificationFunction,\r
+ &NotifyHandle\r
+ );\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
- \r
- KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED;\r
- Status = SimpleEx->RegisterKeyNotify(\r
- SimpleEx,\r
- &KeyData,\r
- NotificationFunction,\r
- &NotifyHandle);\r
+\r
+ KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED;\r
+ Status = SimpleEx->RegisterKeyNotify (\r
+ SimpleEx,\r
+ &KeyData,\r
+ NotificationFunction,\r
+ &NotifyHandle\r
+ );\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
}\r
\r
/**\r
- Function to stop monitoring for CTRL-C using SimpleTextInputEx. \r
+ Function to stop monitoring for CTRL-C using SimpleTextInputEx.\r
\r
@retval EFI_SUCCESS The feature is enabled.\r
@retval EFI_OUT_OF_RESOURCES There is not enough mnemory available.\r
**/\r
EFI_STATUS\r
EFIAPI\r
-InternalStopMonitor(\r
+InternalStopMonitor (\r
VOID\r
)\r
{\r
- EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *SimpleEx;\r
- EFI_STATUS Status;\r
- EFI_HANDLE *Handles;\r
- EFI_KEY_DATA KeyData; \r
- UINTN HandleCount;\r
- UINTN HandleIndex;\r
- EFI_HANDLE NotifyHandle;\r
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *SimpleEx;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *Handles;\r
+ EFI_KEY_DATA KeyData;\r
+ UINTN HandleCount;\r
+ UINTN HandleIndex;\r
+ VOID *NotifyHandle;\r
\r
Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiSimpleTextInputExProtocolGuid,\r
- NULL,\r
- &HandleCount,\r
- &Handles\r
- );\r
+ ByProtocol,\r
+ &gEfiSimpleTextInputExProtocolGuid,\r
+ NULL,\r
+ &HandleCount,\r
+ &Handles\r
+ );\r
for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {\r
- Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **) &SimpleEx);\r
+ Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiSimpleTextInputExProtocolGuid, (VOID **)&SimpleEx);\r
ASSERT_EFI_ERROR (Status);\r
\r
KeyData.KeyState.KeyToggleState = 0;\r
KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_LEFT_CONTROL_PRESSED;\r
KeyData.Key.UnicodeChar = L'c';\r
\r
- Status = SimpleEx->RegisterKeyNotify(\r
- SimpleEx,\r
- &KeyData,\r
- NotificationFunction,\r
- &NotifyHandle);\r
+ Status = SimpleEx->RegisterKeyNotify (\r
+ SimpleEx,\r
+ &KeyData,\r
+ NotificationFunction,\r
+ &NotifyHandle\r
+ );\r
if (!EFI_ERROR (Status)) {\r
Status = SimpleEx->UnregisterKeyNotify (SimpleEx, NotifyHandle);\r
}\r
\r
- KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED;\r
- Status = SimpleEx->RegisterKeyNotify(\r
- SimpleEx,\r
- &KeyData,\r
- NotificationFunction,\r
- &NotifyHandle);\r
+ KeyData.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID|EFI_RIGHT_CONTROL_PRESSED;\r
+ Status = SimpleEx->RegisterKeyNotify (\r
+ SimpleEx,\r
+ &KeyData,\r
+ NotificationFunction,\r
+ &NotifyHandle\r
+ );\r
if (!EFI_ERROR (Status)) {\r
Status = SimpleEx->UnregisterKeyNotify (SimpleEx, NotifyHandle);\r
}\r
}\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Encode the password using a simple algorithm.\r
-\r
- @param Password The string to be encoded.\r
- @param MaxSize The size of the string.\r
-\r
-**/\r
-VOID\r
-EncodePassword (\r
- IN CHAR16 *Password,\r
- IN UINTN MaxSize\r
- )\r
-{\r
- UINTN Index;\r
- UINTN Loop;\r
- CHAR16 *Buffer;\r
- CHAR16 *Key;\r
-\r
- Key = L"MAR10648567";\r
- Buffer = AllocateZeroPool (MaxSize);\r
- ASSERT (Buffer != NULL);\r
-\r
- for (Index = 0; Key[Index] != 0; Index++) {\r
- for (Loop = 0; Loop < (UINT8) (MaxSize / 2); Loop++) {\r
- Buffer[Loop] = (CHAR16) (Password[Loop] ^ Key[Index]);\r
- }\r
- }\r
-\r
- CopyMem (Password, Buffer, MaxSize);\r
-\r
- FreePool (Buffer);\r
- return ;\r
-}\r
-\r
-/**\r
- Validate the user's password.\r
-\r
- @param PrivateData This driver's private context data.\r
- @param StringId The user's input.\r
-\r
- @retval EFI_SUCCESS The user's input matches the password.\r
- @retval EFI_NOT_READY The user's input does not match the password.\r
-**/\r
-EFI_STATUS\r
-ValidatePassword (\r
- IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData,\r
- IN EFI_STRING_ID StringId\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- UINTN BufferSize;\r
- UINTN PasswordMaxSize;\r
- CHAR16 *Password;\r
- CHAR16 *EncodedPassword;\r
- BOOLEAN OldPassword;\r
-\r
- //\r
- // Get encoded password first\r
- //\r
- BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = gRT->GetVariable (\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
- if (EFI_ERROR (Status)) {\r
- //\r
- // Old password not exist, prompt for new password\r
- //\r
- return EFI_SUCCESS;\r
- }\r
-\r
- OldPassword = FALSE;\r
- PasswordMaxSize = sizeof (PrivateData->Configuration.WhatIsThePassword2);\r
- //\r
- // Check whether we have any old password set\r
- //\r
- for (Index = 0; Index < PasswordMaxSize / sizeof (UINT16); Index++) {\r
- if (PrivateData->Configuration.WhatIsThePassword2[Index] != 0) {\r
- OldPassword = TRUE;\r
- break;\r
- }\r
- }\r
- if (!OldPassword) {\r
- //\r
- // Old password not exist, return EFI_SUCCESS to prompt for new password\r
- //\r
- return EFI_SUCCESS;\r
- }\r
-\r
- //\r
- // Get user input password\r
- //\r
- Password = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
- if (Password == NULL) {\r
- return EFI_NOT_READY;\r
- }\r
- if (StrSize (Password) > PasswordMaxSize) {\r
- FreePool (Password);\r
- return EFI_NOT_READY;\r
- }\r
-\r
- //\r
- // Validate old password\r
- //\r
- EncodedPassword = AllocateZeroPool (PasswordMaxSize);\r
- ASSERT (EncodedPassword != NULL);\r
- StrnCpy (EncodedPassword, Password, StrLen (Password));\r
- EncodePassword (EncodedPassword, StrLen (EncodedPassword) * sizeof (CHAR16));\r
- if (CompareMem (EncodedPassword, PrivateData->Configuration.WhatIsThePassword2, PasswordMaxSize) != 0) {\r
- //\r
- // Old password mismatch, return EFI_NOT_READY to prompt for error message\r
- //\r
- Status = EFI_NOT_READY;\r
- } else {\r
- Status = EFI_SUCCESS;\r
- }\r
-\r
- FreePool (Password);\r
- FreePool (EncodedPassword);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Encode the password using a simple algorithm.\r
-\r
- @param PrivateData This driver's private context data.\r
- @param StringId The password from User.\r
-\r
- @retval EFI_SUCESS The operation is successful.\r
- @return Other value if gRT->SetVariable () fails.\r
-\r
-**/\r
-EFI_STATUS\r
-SetPassword (\r
- IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData,\r
- IN EFI_STRING_ID StringId\r
- )\r
-{\r
- EFI_STATUS Status;\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
- //\r
- BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = gRT->GetVariable (\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- //\r
- // Get user input password\r
- //\r
- Password = &PrivateData->Configuration.WhatIsThePassword2[0];\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 (StrSize (TempPassword) > PasswordSize) {\r
- FreePool (TempPassword);\r
- return EFI_NOT_READY;\r
- }\r
- StrnCpy (Password, TempPassword, StrLen (TempPassword));\r
- FreePool (TempPassword);\r
-\r
- //\r
- // Retrive uncommitted data from Browser\r
- //\r
- Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_CONFIGURATION));\r
- ASSERT (Configuration != NULL);\r
- if (HiiGetBrowserData (&gDriverSampleFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration)) {\r
- //\r
- // Update password's clear text in the screen\r
- //\r
- CopyMem (Configuration->PasswordClearText, Password, StrSize (Password));\r
-\r
- //\r
- // Update uncommitted data of Browser\r
- //\r
- HiiSetBrowserData (\r
- &gDriverSampleFormSetGuid,\r
- VariableName,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- (UINT8 *) Configuration,\r
- NULL\r
- );\r
- }\r
-\r
- //\r
- // Free Configuration Buffer\r
- //\r
- FreePool (Configuration);\r
-\r
\r
- //\r
- // Set password\r
- //\r
- EncodePassword (Password, StrLen (Password) * 2);\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
**/\r
EFI_STATUS\r
LoadNameValueNames (\r
- IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData\r
+ IN DRIVER_SAMPLE_PRIVATE_DATA *PrivateData\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
//\r
// Get Name/Value name string of current language\r
//\r
for (Index = 0; Index < NAME_VALUE_NAME_NUMBER; Index++) {\r
PrivateData->NameValueName[Index] = HiiGetString (\r
- PrivateData->HiiHandle[0],\r
- PrivateData->NameStringId[Index],\r
- NULL\r
- );\r
+ PrivateData->HiiHandle[0],\r
+ PrivateData->NameStringId[Index],\r
+ NULL\r
+ );\r
if (PrivateData->NameValueName[Index] == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Get the value of <Number> in <BlockConfig> format, i.e. the value of OFFSET\r
or WIDTH or VALUE.\r
**/\r
EFI_STATUS\r
GetValueOfNumber (\r
- IN EFI_STRING StringPtr,\r
- OUT UINT8 **Number,\r
- OUT UINTN *Len\r
+ IN EFI_STRING StringPtr,\r
+ OUT UINT8 **Number,\r
+ OUT UINTN *Len\r
)\r
{\r
- EFI_STRING TmpPtr;\r
- UINTN Length;\r
- EFI_STRING Str;\r
- UINT8 *Buf;\r
- EFI_STATUS Status;\r
- UINT8 DigitUint8;\r
- UINTN Index;\r
- CHAR16 TemStr[2];\r
-\r
- if (StringPtr == NULL || *StringPtr == L'\0' || Number == NULL || Len == NULL) {\r
+ EFI_STRING TmpPtr;\r
+ UINTN Length;\r
+ EFI_STRING Str;\r
+ UINT8 *Buf;\r
+ EFI_STATUS Status;\r
+ UINT8 DigitUint8;\r
+ UINTN Index;\r
+ CHAR16 TemStr[2];\r
+\r
+ if ((StringPtr == NULL) || (*StringPtr == L'\0') || (Number == NULL) || (Len == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
while (*StringPtr != L'\0' && *StringPtr != L'&') {\r
StringPtr++;\r
}\r
+\r
*Len = StringPtr - TmpPtr;\r
Length = *Len + 1;\r
\r
- Str = (EFI_STRING) AllocateZeroPool (Length * sizeof (CHAR16));\r
+ Str = (EFI_STRING)AllocateZeroPool (Length * sizeof (CHAR16));\r
if (Str == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Exit;\r
}\r
+\r
CopyMem (Str, TmpPtr, *Len * sizeof (CHAR16));\r
*(Str + *Len) = L'\0';\r
\r
Length = (Length + 1) / 2;\r
- Buf = (UINT8 *) AllocateZeroPool (Length);\r
+ Buf = (UINT8 *)AllocateZeroPool (Length);\r
if (Buf == NULL) {\r
Status = EFI_OUT_OF_RESOURCES;\r
goto Exit;\r
}\r
- \r
+\r
Length = *Len;\r
ZeroMem (TemStr, sizeof (TemStr));\r
- for (Index = 0; Index < Length; Index ++) {\r
- TemStr[0] = Str[Length - Index - 1];\r
- DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ for (Index = 0; Index < Length; Index++) {\r
+ TemStr[0] = Str[Length - Index - 1];\r
+ DigitUint8 = (UINT8)StrHexToUint64 (TemStr);\r
if ((Index & 1) == 0) {\r
- Buf [Index/2] = DigitUint8;\r
+ Buf[Index/2] = DigitUint8;\r
} else {\r
- Buf [Index/2] = (UINT8) ((DigitUint8 << 4) + Buf [Index/2]);\r
+ Buf[Index/2] = (UINT8)((DigitUint8 << 4) + Buf[Index/2]);\r
}\r
}\r
\r
}\r
\r
/**\r
- Create altcfg string. \r
+ Create altcfg string.\r
\r
@param Result The request result string.\r
@param ConfigHdr The request head info. <ConfigHdr> format.\r
\r
@retval The string with altcfg info append at the end.\r
**/\r
-EFI_STRING \r
+EFI_STRING\r
CreateAltCfgString (\r
- IN EFI_STRING Result,\r
- IN EFI_STRING ConfigHdr,\r
- IN UINTN Offset,\r
- IN UINTN Width\r
+ IN EFI_STRING Result,\r
+ IN EFI_STRING ConfigHdr,\r
+ IN UINTN Offset,\r
+ IN UINTN Width\r
)\r
{\r
- EFI_STRING StringPtr;\r
- EFI_STRING TmpStr;\r
- UINTN NewLen;\r
+ EFI_STRING StringPtr;\r
+ EFI_STRING TmpStr;\r
+ UINTN NewLen;\r
\r
NewLen = StrLen (Result);\r
//\r
// String Len = ConfigResp + AltConfig + AltConfig + 1("\0")\r
//\r
- NewLen = (NewLen + ((1 + StrLen (ConfigHdr) + 8 + 4) + (8 + 4 + 7 + 4 + 7 + 4)) * 2 + 1) * sizeof (CHAR16);\r
+ NewLen = (NewLen + ((1 + StrLen (ConfigHdr) + 8 + 4) + (8 + 4 + 7 + 4 + 7 + 4)) * 2 + 1) * sizeof (CHAR16);\r
StringPtr = AllocateZeroPool (NewLen);\r
if (StringPtr == NULL) {\r
return NULL;\r
\r
TmpStr = StringPtr;\r
if (Result != NULL) {\r
- StrCpy (StringPtr, Result);\r
- StringPtr += StrLen (Result); \r
+ StrCpyS (StringPtr, NewLen / sizeof (CHAR16), Result);\r
+ StringPtr += StrLen (Result);\r
FreePool (Result);\r
}\r
- \r
+\r
UnicodeSPrint (\r
- StringPtr, \r
- (1 + StrLen (ConfigHdr) + 8 + 4 + 1) * sizeof (CHAR16), \r
- L"&%s&ALTCFG=%04x", \r
- ConfigHdr, \r
- EFI_HII_DEFAULT_CLASS_STANDARD\r
- );\r
+ StringPtr,\r
+ (1 + StrLen (ConfigHdr) + 8 + 4 + 1) * sizeof (CHAR16),\r
+ L"&%s&ALTCFG=%04x",\r
+ ConfigHdr,\r
+ EFI_HII_DEFAULT_CLASS_STANDARD\r
+ );\r
StringPtr += StrLen (StringPtr);\r
\r
UnicodeSPrint (\r
- StringPtr, \r
+ StringPtr,\r
(8 + 4 + 7 + 4 + 7 + 4 + 1) * sizeof (CHAR16),\r
- L"&OFFSET=%04x&WIDTH=%04x&VALUE=%04x", \r
- Offset, \r
+ L"&OFFSET=%04x&WIDTH=%04x&VALUE=%04x",\r
+ Offset,\r
Width,\r
DEFAULT_CLASS_STANDARD_VALUE\r
);\r
- StringPtr += StrLen (StringPtr); \r
+ StringPtr += StrLen (StringPtr);\r
\r
UnicodeSPrint (\r
- StringPtr, \r
- (1 + StrLen (ConfigHdr) + 8 + 4 + 1) * sizeof (CHAR16), \r
- L"&%s&ALTCFG=%04x", \r
- ConfigHdr, \r
- EFI_HII_DEFAULT_CLASS_MANUFACTURING\r
- );\r
+ StringPtr,\r
+ (1 + StrLen (ConfigHdr) + 8 + 4 + 1) * sizeof (CHAR16),\r
+ L"&%s&ALTCFG=%04x",\r
+ ConfigHdr,\r
+ EFI_HII_DEFAULT_CLASS_MANUFACTURING\r
+ );\r
StringPtr += StrLen (StringPtr);\r
\r
UnicodeSPrint (\r
- StringPtr, \r
+ StringPtr,\r
(8 + 4 + 7 + 4 + 7 + 4 + 1) * sizeof (CHAR16),\r
- L"&OFFSET=%04x&WIDTH=%04x&VALUE=%04x", \r
- Offset, \r
+ L"&OFFSET=%04x&WIDTH=%04x&VALUE=%04x",\r
+ Offset,\r
Width,\r
DEFAULT_CLASS_MANUFACTURING_VALUE\r
);\r
- StringPtr += StrLen (StringPtr); \r
+ StringPtr += StrLen (StringPtr);\r
\r
return TmpStr;\r
}\r
\r
/**\r
- Check whether need to add the altcfg string. if need to add, add the altcfg \r
+ Check whether need to add the altcfg string. if need to add, add the altcfg\r
string.\r
\r
@param RequestResult The request result string.\r
@param ConfigRequestHdr The request head info. <ConfigHdr> format.\r
\r
**/\r
-VOID \r
+VOID\r
AppendAltCfgString (\r
- IN OUT EFI_STRING *RequestResult,\r
- IN EFI_STRING ConfigRequestHdr\r
+ IN OUT EFI_STRING *RequestResult,\r
+ IN EFI_STRING ConfigRequestHdr\r
)\r
{\r
- EFI_STRING StringPtr;\r
- UINTN Length;\r
- UINT8 *TmpBuffer;\r
- UINTN Offset;\r
- UINTN Width;\r
- UINTN BlockSize;\r
- UINTN ValueOffset;\r
- UINTN ValueWidth;\r
- EFI_STATUS Status;\r
-\r
- StringPtr = *RequestResult;\r
- StringPtr = StrStr (StringPtr, L"OFFSET");\r
- BlockSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
+ EFI_STRING StringPtr;\r
+ UINTN Length;\r
+ UINT8 *TmpBuffer;\r
+ UINTN Offset;\r
+ UINTN Width;\r
+ UINTN BlockSize;\r
+ UINTN ValueOffset;\r
+ UINTN ValueWidth;\r
+ EFI_STATUS Status;\r
+\r
+ TmpBuffer = NULL;\r
+ StringPtr = *RequestResult;\r
+ StringPtr = StrStr (StringPtr, L"OFFSET");\r
+ BlockSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
ValueOffset = OFFSET_OF (DRIVER_SAMPLE_CONFIGURATION, GetDefaultValueFromAccess);\r
ValueWidth = sizeof (((DRIVER_SAMPLE_CONFIGURATION *)0)->GetDefaultValueFromAccess);\r
\r
if (EFI_ERROR (Status)) {\r
return;\r
}\r
+\r
Offset = 0;\r
CopyMem (\r
- &Offset,\r
- TmpBuffer,\r
- (((Length + 1) / 2) < sizeof (UINTN)) ? ((Length + 1) / 2) : sizeof (UINTN)\r
- );\r
+ &Offset,\r
+ TmpBuffer,\r
+ (((Length + 1) / 2) < sizeof (UINTN)) ? ((Length + 1) / 2) : sizeof (UINTN)\r
+ );\r
FreePool (TmpBuffer);\r
\r
StringPtr += Length;\r
if (StrnCmp (StringPtr, L"&WIDTH=", StrLen (L"&WIDTH=")) != 0) {\r
return;\r
}\r
+\r
StringPtr += StrLen (L"&WIDTH=");\r
\r
//\r
if (EFI_ERROR (Status)) {\r
return;\r
}\r
+\r
Width = 0;\r
CopyMem (\r
- &Width,\r
- TmpBuffer,\r
- (((Length + 1) / 2) < sizeof (UINTN)) ? ((Length + 1) / 2) : sizeof (UINTN)\r
- );\r
+ &Width,\r
+ TmpBuffer,\r
+ (((Length + 1) / 2) < sizeof (UINTN)) ? ((Length + 1) / 2) : sizeof (UINTN)\r
+ );\r
FreePool (TmpBuffer);\r
\r
StringPtr += Length;\r
if (StrnCmp (StringPtr, L"&VALUE=", StrLen (L"&VALUE=")) != 0) {\r
return;\r
}\r
+\r
StringPtr += StrLen (L"&VALUE=");\r
\r
//\r
if (EFI_ERROR (Status)) {\r
return;\r
}\r
+\r
StringPtr += Length;\r
\r
+ //\r
+ // Skip the character "&" before "OFFSET".\r
+ //\r
+ StringPtr++;\r
+\r
//\r
// Calculate Value and convert it to hex string.\r
//\r
return;\r
}\r
\r
- if (Offset <= ValueOffset && Offset + Width >= ValueOffset + ValueWidth) {\r
- *RequestResult = CreateAltCfgString(*RequestResult, ConfigRequestHdr, ValueOffset, ValueWidth);\r
+ if ((Offset <= ValueOffset) && (Offset + Width >= ValueOffset + ValueWidth)) {\r
+ *RequestResult = CreateAltCfgString (*RequestResult, ConfigRequestHdr, ValueOffset, ValueWidth);\r
return;\r
}\r
}\r
EFI_STATUS\r
EFIAPI\r
ExtractConfig (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN CONST EFI_STRING Request,\r
- OUT EFI_STRING *Progress,\r
- OUT EFI_STRING *Results\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Request,\r
+ OUT EFI_STRING *Progress,\r
+ OUT EFI_STRING *Results\r
)\r
{\r
EFI_STATUS Status;\r
CHAR16 *StrPointer;\r
BOOLEAN AllocatedRequest;\r
\r
- if (Progress == NULL || Results == NULL) {\r
+ if ((Progress == NULL) || (Results == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// Initialize the local variables.\r
//\r
- ConfigRequestHdr = NULL;\r
- ConfigRequest = NULL;\r
- Size = 0;\r
- *Progress = Request;\r
- AllocatedRequest = FALSE;\r
+ ConfigRequestHdr = NULL;\r
+ ConfigRequest = NULL;\r
+ Size = 0;\r
+ *Progress = Request;\r
+ AllocatedRequest = FALSE;\r
\r
- PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
+ PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
HiiConfigRouting = PrivateData->HiiConfigRouting;\r
\r
//\r
// Try to get the current setting from variable.\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = gRT->GetVariable (\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
+ Status = gRT->GetVariable (\r
+ VariableName,\r
+ &gDriverSampleFormSetGuid,\r
+ NULL,\r
+ &BufferSize,\r
+ &PrivateData->Configuration\r
+ );\r
if (EFI_ERROR (Status)) {\r
return EFI_NOT_FOUND;\r
}\r
// followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
//\r
ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, VariableName, PrivateData->DriverHandle[0]);\r
- Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
- ConfigRequest = AllocateZeroPool (Size);\r
+ Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (Size);\r
ASSERT (ConfigRequest != NULL);\r
AllocatedRequest = TRUE;\r
UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);\r
if (!HiiIsConfigHdrMatch (Request, &gDriverSampleFormSetGuid, NULL)) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
//\r
// Check whether request for EFI Varstore. EFI varstore get data\r
// through hii database, not support in this path.\r
//\r
- if (HiiIsConfigHdrMatch(Request, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
+ if (HiiIsConfigHdrMatch (Request, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ if (HiiIsConfigHdrMatch (Request, &gDriverSampleFormSetGuid, MyEfiBitVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ if (HiiIsConfigHdrMatch (Request, &gDriverSampleFormSetGuid, MyEfiUnionVar)) {\r
return EFI_UNSUPPORTED;\r
}\r
+\r
//\r
// Set Request to the unified request string.\r
//\r
if (StrPointer == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if (StrStr (StrPointer, L"&") == NULL) {\r
- Size = (StrLen (Request) + 32 + 1) * sizeof (CHAR16);\r
- ConfigRequest = AllocateZeroPool (Size);\r
+ Size = (StrLen (Request) + 32 + 1) * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (Size);\r
ASSERT (ConfigRequest != NULL);\r
AllocatedRequest = TRUE;\r
UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", Request, (UINT64)BufferSize);\r
// <ConfigResp>::=<ConfigHdr>&Name0=11&Name1=1234&Name2=0041004200430044\r
//\r
BufferSize = (StrLen (ConfigRequest) +\r
- 1 + sizeof (PrivateData->Configuration.NameValueVar0) * 2 +\r
- 1 + sizeof (PrivateData->Configuration.NameValueVar1) * 2 +\r
- 1 + sizeof (PrivateData->Configuration.NameValueVar2) * 2 + 1) * sizeof (CHAR16);\r
+ 1 + sizeof (PrivateData->Configuration.NameValueVar0) * 2 +\r
+ 1 + sizeof (PrivateData->Configuration.NameValueVar1) * 2 +\r
+ 1 + sizeof (PrivateData->Configuration.NameValueVar2) * 2 + 1) * sizeof (CHAR16);\r
*Results = AllocateZeroPool (BufferSize);\r
ASSERT (*Results != NULL);\r
- StrCpy (*Results, ConfigRequest);\r
+ StrCpyS (*Results, BufferSize / sizeof (CHAR16), ConfigRequest);\r
Value = *Results;\r
\r
//\r
// Append value of NameValueVar0, type is UINT8\r
//\r
if ((Value = StrStr (*Results, PrivateData->NameValueName[0])) != NULL) {\r
- Value += StrLen (PrivateData->NameValueName[0]);\r
+ Value += StrLen (PrivateData->NameValueName[0]);\r
ValueStrLen = ((sizeof (PrivateData->Configuration.NameValueVar0) * 2) + 1);\r
CopyMem (Value + ValueStrLen, Value, StrSize (Value));\r
\r
BackupChar = Value[ValueStrLen];\r
*Value++ = L'=';\r
- Value += UnicodeValueToString (\r
- Value, \r
- PREFIX_ZERO | RADIX_HEX, \r
- PrivateData->Configuration.NameValueVar0, \r
- sizeof (PrivateData->Configuration.NameValueVar0) * 2\r
- );\r
+ UnicodeValueToStringS (\r
+ Value,\r
+ BufferSize - ((UINTN)Value - (UINTN)*Results),\r
+ PREFIX_ZERO | RADIX_HEX,\r
+ PrivateData->Configuration.NameValueVar0,\r
+ sizeof (PrivateData->Configuration.NameValueVar0) * 2\r
+ );\r
+ Value += StrnLenS (Value, (BufferSize - ((UINTN)Value - (UINTN)*Results)) / sizeof (CHAR16));\r
*Value = BackupChar;\r
}\r
\r
// Append value of NameValueVar1, type is UINT16\r
//\r
if ((Value = StrStr (*Results, PrivateData->NameValueName[1])) != NULL) {\r
- Value += StrLen (PrivateData->NameValueName[1]);\r
+ Value += StrLen (PrivateData->NameValueName[1]);\r
ValueStrLen = ((sizeof (PrivateData->Configuration.NameValueVar1) * 2) + 1);\r
CopyMem (Value + ValueStrLen, Value, StrSize (Value));\r
\r
BackupChar = Value[ValueStrLen];\r
*Value++ = L'=';\r
- Value += UnicodeValueToString (\r
- Value, \r
- PREFIX_ZERO | RADIX_HEX, \r
- PrivateData->Configuration.NameValueVar1, \r
- sizeof (PrivateData->Configuration.NameValueVar1) * 2\r
- );\r
+ UnicodeValueToStringS (\r
+ Value,\r
+ BufferSize - ((UINTN)Value - (UINTN)*Results),\r
+ PREFIX_ZERO | RADIX_HEX,\r
+ PrivateData->Configuration.NameValueVar1,\r
+ sizeof (PrivateData->Configuration.NameValueVar1) * 2\r
+ );\r
+ Value += StrnLenS (Value, (BufferSize - ((UINTN)Value - (UINTN)*Results)) / sizeof (CHAR16));\r
*Value = BackupChar;\r
}\r
\r
// Append value of NameValueVar2, type is CHAR16 *\r
//\r
if ((Value = StrStr (*Results, PrivateData->NameValueName[2])) != NULL) {\r
- Value += StrLen (PrivateData->NameValueName[2]);\r
+ Value += StrLen (PrivateData->NameValueName[2]);\r
ValueStrLen = StrLen (PrivateData->Configuration.NameValueVar2) * 4 + 1;\r
CopyMem (Value + ValueStrLen, Value, StrSize (Value));\r
\r
//\r
// Convert Unicode String to Config String, e.g. "ABCD" => "0041004200430044"\r
//\r
- StrPointer = (CHAR16 *) PrivateData->Configuration.NameValueVar2;\r
- for (; *StrPointer != L'\0'; StrPointer++) {\r
- Value += UnicodeValueToString (Value, PREFIX_ZERO | RADIX_HEX, *StrPointer, 4);\r
+ StrPointer = (CHAR16 *)PrivateData->Configuration.NameValueVar2;\r
+ for ( ; *StrPointer != L'\0'; StrPointer++) {\r
+ UnicodeValueToStringS (\r
+ Value,\r
+ BufferSize - ((UINTN)Value - (UINTN)*Results),\r
+ PREFIX_ZERO | RADIX_HEX,\r
+ *StrPointer,\r
+ 4\r
+ );\r
+ Value += StrnLenS (Value, (BufferSize - ((UINTN)Value - (UINTN)*Results)) / sizeof (CHAR16));\r
}\r
}\r
- \r
+\r
Status = EFI_SUCCESS;\r
} else {\r
//\r
// Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
//\r
Status = HiiConfigRouting->BlockToConfig (\r
- HiiConfigRouting,\r
- ConfigRequest,\r
- (UINT8 *) &PrivateData->Configuration,\r
- BufferSize,\r
- Results,\r
- Progress\r
- );\r
+ HiiConfigRouting,\r
+ ConfigRequest,\r
+ (UINT8 *)&PrivateData->Configuration,\r
+ BufferSize,\r
+ Results,\r
+ Progress\r
+ );\r
if (!EFI_ERROR (Status)) {\r
ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, VariableName, PrivateData->DriverHandle[0]);\r
- AppendAltCfgString(Results, ConfigRequestHdr);\r
+ AppendAltCfgString (Results, ConfigRequestHdr);\r
}\r
}\r
\r
if (ConfigRequestHdr != NULL) {\r
FreePool (ConfigRequestHdr);\r
}\r
+\r
//\r
// Set Progress string to the original request string.\r
//\r
return Status;\r
}\r
\r
-\r
/**\r
This function processes the results of changes in configuration.\r
\r
EFI_STATUS\r
EFIAPI\r
RouteConfig (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN CONST EFI_STRING Configuration,\r
- OUT EFI_STRING *Progress\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Configuration,\r
+ OUT EFI_STRING *Progress\r
)\r
{\r
EFI_STATUS Status;\r
UINTN Index;\r
CHAR16 *StrBuffer;\r
\r
- if (Configuration == NULL || Progress == NULL) {\r
+ if ((Configuration == NULL) || (Progress == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
+ PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
HiiConfigRouting = PrivateData->HiiConfigRouting;\r
- *Progress = Configuration;\r
+ *Progress = Configuration;\r
\r
//\r
// Check routing data in <ConfigHdr>.\r
// Check whether request for EFI Varstore. EFI varstore get data\r
// through hii database, not support in this path.\r
//\r
- if (HiiIsConfigHdrMatch(Configuration, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
+ if (HiiIsConfigHdrMatch (Configuration, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ if (HiiIsConfigHdrMatch (Configuration, &gDriverSampleFormSetGuid, MyEfiBitVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ if (HiiIsConfigHdrMatch (Configuration, &gDriverSampleFormSetGuid, MyEfiUnionVar)) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
// Get Buffer Storage data from EFI variable\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = gRT->GetVariable (\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
+ Status = gRT->GetVariable (\r
+ VariableName,\r
+ &gDriverSampleFormSetGuid,\r
+ NULL,\r
+ &BufferSize,\r
+ &PrivateData->Configuration\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
if (StrPtr == NULL) {\r
StrPtr = Value + StrLen (Value);\r
}\r
+\r
//\r
// Convert Value to Buffer data\r
//\r
- DataBuffer = (UINT8 *) &PrivateData->Configuration.NameValueVar0;\r
+ DataBuffer = (UINT8 *)&PrivateData->Configuration.NameValueVar0;\r
ZeroMem (TemStr, sizeof (TemStr));\r
- for (Index = 0, StrPtr --; StrPtr >= Value; StrPtr --, Index ++) {\r
- TemStr[0] = *StrPtr;\r
- DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ for (Index = 0, StrPtr--; StrPtr >= Value; StrPtr--, Index++) {\r
+ TemStr[0] = *StrPtr;\r
+ DigitUint8 = (UINT8)StrHexToUint64 (TemStr);\r
if ((Index & 1) == 0) {\r
- DataBuffer [Index/2] = DigitUint8;\r
+ DataBuffer[Index/2] = DigitUint8;\r
} else {\r
- DataBuffer [Index/2] = (UINT8) ((UINT8) (DigitUint8 << 4) + DataBuffer [Index/2]);\r
+ DataBuffer[Index/2] = (UINT8)((UINT8)(DigitUint8 << 4) + DataBuffer[Index/2]);\r
}\r
}\r
}\r
if (StrPtr == NULL) {\r
StrPtr = Value + StrLen (Value);\r
}\r
+\r
//\r
// Convert Value to Buffer data\r
//\r
- DataBuffer = (UINT8 *) &PrivateData->Configuration.NameValueVar1;\r
+ DataBuffer = (UINT8 *)&PrivateData->Configuration.NameValueVar1;\r
ZeroMem (TemStr, sizeof (TemStr));\r
- for (Index = 0, StrPtr --; StrPtr >= Value; StrPtr --, Index ++) {\r
- TemStr[0] = *StrPtr;\r
- DigitUint8 = (UINT8) StrHexToUint64 (TemStr);\r
+ for (Index = 0, StrPtr--; StrPtr >= Value; StrPtr--, Index++) {\r
+ TemStr[0] = *StrPtr;\r
+ DigitUint8 = (UINT8)StrHexToUint64 (TemStr);\r
if ((Index & 1) == 0) {\r
- DataBuffer [Index/2] = DigitUint8;\r
+ DataBuffer[Index/2] = DigitUint8;\r
} else {\r
- DataBuffer [Index/2] = (UINT8) ((UINT8) (DigitUint8 << 4) + DataBuffer [Index/2]);\r
+ DataBuffer[Index/2] = (UINT8)((UINT8)(DigitUint8 << 4) + DataBuffer[Index/2]);\r
}\r
}\r
}\r
if (StrPtr == NULL) {\r
StrPtr = Value + StrLen (Value);\r
}\r
+\r
//\r
// Convert Config String to Unicode String, e.g "0041004200430044" => "ABCD"\r
//\r
- StrBuffer = (CHAR16 *) PrivateData->Configuration.NameValueVar2;\r
+ StrBuffer = (CHAR16 *)PrivateData->Configuration.NameValueVar2;\r
ZeroMem (TemStr, sizeof (TemStr));\r
while (Value < StrPtr) {\r
- StrnCpy (TemStr, Value, 4);\r
- *(StrBuffer++) = (CHAR16) StrHexToUint64 (TemStr);\r
- Value += 4;\r
+ StrnCpyS (TemStr, sizeof (TemStr) / sizeof (CHAR16), Value, 4);\r
+ *(StrBuffer++) = (CHAR16)StrHexToUint64 (TemStr);\r
+ Value += 4;\r
}\r
+\r
*StrBuffer = L'\0';\r
}\r
\r
//\r
// Store Buffer Storage back to EFI variable\r
//\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
+ Status = gRT->SetVariable (\r
+ VariableName,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
\r
return Status;\r
}\r
// Convert <ConfigResp> to buffer data by helper function ConfigToBlock()\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = HiiConfigRouting->ConfigToBlock (\r
- HiiConfigRouting,\r
- Configuration,\r
- (UINT8 *) &PrivateData->Configuration,\r
- &BufferSize,\r
- Progress\r
- );\r
+ Status = HiiConfigRouting->ConfigToBlock (\r
+ HiiConfigRouting,\r
+ Configuration,\r
+ (UINT8 *)&PrivateData->Configuration,\r
+ &BufferSize,\r
+ Progress\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// Store Buffer Storage back to EFI variable\r
//\r
- Status = gRT->SetVariable(\r
+ Status = gRT->SetVariable (\r
VariableName,\r
&gDriverSampleFormSetGuid,\r
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
return Status;\r
}\r
\r
-\r
/**\r
This function processes the results of changes in configuration.\r
\r
EFI_STATUS\r
EFIAPI\r
DriverCallback (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN EFI_BROWSER_ACTION Action,\r
- IN EFI_QUESTION_ID QuestionId,\r
- IN UINT8 Type,\r
- IN EFI_IFR_TYPE_VALUE *Value,\r
- OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN EFI_BROWSER_ACTION Action,\r
+ IN EFI_QUESTION_ID QuestionId,\r
+ IN UINT8 Type,\r
+ IN EFI_IFR_TYPE_VALUE *Value,\r
+ OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
)\r
{\r
- DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
- EFI_STATUS Status;\r
- VOID *StartOpCodeHandle;\r
- VOID *OptionsOpCodeHandle;\r
- EFI_IFR_GUID_LABEL *StartLabel;\r
- VOID *EndOpCodeHandle;\r
- EFI_IFR_GUID_LABEL *EndLabel;\r
- EFI_INPUT_KEY Key;\r
- DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
- MY_EFI_VARSTORE_DATA *EfiData;\r
- EFI_FORM_ID FormId;\r
- \r
- if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE))||\r
- (ActionRequest == NULL)) {\r
+ DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
+ EFI_STATUS Status;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
+ EFI_INPUT_KEY Key;\r
+ DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
+ MY_EFI_VARSTORE_DATA *EfiData;\r
+ EFI_FORM_ID FormId;\r
+ EFI_STRING Progress;\r
+ EFI_STRING Results;\r
+ UINT32 ProgressErr;\r
+ CHAR16 *TmpStr;\r
+ UINTN Index;\r
+ UINT64 BufferValue;\r
+ EFI_HII_POPUP_SELECTION UserSelection;\r
+\r
+ UserSelection = 0xFF;\r
+\r
+ if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE)) ||\r
+ (ActionRequest == NULL))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
-\r
- FormId = 0;\r
- Status = EFI_SUCCESS;\r
+ FormId = 0;\r
+ ProgressErr = 0;\r
+ Status = EFI_SUCCESS;\r
+ BufferValue = 3;\r
PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
\r
switch (Action) {\r
- case EFI_BROWSER_ACTION_FORM_OPEN:\r
+ case EFI_BROWSER_ACTION_FORM_OPEN:\r
{\r
if (QuestionId == 0x1234) {\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 = (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
0x1238, // Question ID\r
- STRING_TOKEN(STR_SAVE_TEXT), // Prompt text\r
- STRING_TOKEN(STR_SAVE_TEXT), // Help text\r
+ STRING_TOKEN (STR_SAVE_TEXT), // Prompt text\r
+ STRING_TOKEN (STR_SAVE_TEXT), // Help text\r
EFI_IFR_FLAG_CALLBACK, // Question flag\r
0 // Action String ID\r
- );\r
+ );\r
\r
HiiUpdateForm (\r
PrivateData->HiiHandle[0], // HII handle\r
Status = InternalStartMonitor ();\r
ASSERT_EFI_ERROR (Status);\r
}\r
+\r
+ break;\r
}\r
- break;\r
\r
- case EFI_BROWSER_ACTION_FORM_CLOSE:\r
+ case EFI_BROWSER_ACTION_FORM_CLOSE:\r
{\r
if (QuestionId == 0x5678) {\r
//\r
Status = InternalStopMonitor ();\r
ASSERT_EFI_ERROR (Status);\r
}\r
+\r
+ break;\r
}\r
- break;\r
- \r
- case EFI_BROWSER_ACTION_RETRIEVE:\r
+\r
+ case EFI_BROWSER_ACTION_RETRIEVE:\r
{\r
- if (QuestionId == 0x1248) {\r
- {\r
+ switch (QuestionId ) {\r
+ case 0x1248:\r
if (Type != EFI_IFR_TYPE_REF) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- \r
+\r
Value->ref.FormId = 0x3;\r
- }\r
+ break;\r
+\r
+ case 0x5678:\r
+ case 0x1247:\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
+ if (QuestionId == 0x5678) {\r
+ StartLabel->Number = LABEL_UPDATE2;\r
+ FormId = 0x03;\r
+ PrivateData->Configuration.DynamicRefresh++;\r
+ } else if (QuestionId == 0x1247 ) {\r
+ StartLabel->Number = LABEL_UPDATE3;\r
+ FormId = 0x06;\r
+ PrivateData->Configuration.RefreshGuidCount++;\r
+ }\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
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &gDriverSampleFormSetGuid, // Formset GUID\r
+ FormId, // 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
+ Status = gRT->SetVariable (\r
+ VariableName,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
+\r
+ if (QuestionId == 0x5678) {\r
+ //\r
+ // Update uncommitted data of Browser\r
+ //\r
+ EfiData = AllocateZeroPool (sizeof (MY_EFI_VARSTORE_DATA));\r
+ ASSERT (EfiData != NULL);\r
+ if (HiiGetBrowserData (&gDriverSampleFormSetGuid, MyEfiVar, sizeof (MY_EFI_VARSTORE_DATA), (UINT8 *)EfiData)) {\r
+ EfiData->Field8 = 111;\r
+ HiiSetBrowserData (\r
+ &gDriverSampleFormSetGuid,\r
+ MyEfiVar,\r
+ sizeof (MY_EFI_VARSTORE_DATA),\r
+ (UINT8 *)EfiData,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ FreePool (EfiData);\r
+ }\r
+\r
+ break;\r
}\r
+\r
+ break;\r
}\r
- break;\r
\r
- case EFI_BROWSER_ACTION_DEFAULT_STANDARD:\r
+ case EFI_BROWSER_ACTION_DEFAULT_STANDARD:\r
{\r
switch (QuestionId) {\r
- case 0x1240:\r
- Value->u8 = DEFAULT_CLASS_STANDARD_VALUE;\r
- break;\r
+ case 0x1240:\r
+ Value->u8 = DEFAULT_CLASS_STANDARD_VALUE;\r
+ break;\r
\r
- default:\r
- Status = EFI_UNSUPPORTED;\r
- break;\r
+ case 0x1252:\r
+ for (Index = 0; Index < 3; Index++) {\r
+ SetArrayData (Value, EFI_IFR_TYPE_NUM_SIZE_8, Index, BufferValue--);\r
+ }\r
+\r
+ break;\r
+\r
+ case 0x6666:\r
+ Value->u8 = 12;\r
+ break;\r
+\r
+ default:\r
+ Status = EFI_UNSUPPORTED;\r
+ break;\r
}\r
+\r
+ break;\r
}\r
- break;\r
\r
- case EFI_BROWSER_ACTION_DEFAULT_MANUFACTURING:\r
+ case EFI_BROWSER_ACTION_DEFAULT_MANUFACTURING:\r
{\r
switch (QuestionId) {\r
- case 0x1240:\r
- Value->u8 = DEFAULT_CLASS_MANUFACTURING_VALUE;\r
- break;\r
+ case 0x1240:\r
+ Value->u8 = DEFAULT_CLASS_MANUFACTURING_VALUE;\r
+ break;\r
\r
- default:\r
- Status = EFI_UNSUPPORTED; \r
- break;\r
+ case 0x6666:\r
+ Value->u8 = 13;\r
+ break;\r
+\r
+ default:\r
+ Status = EFI_UNSUPPORTED;\r
+ break;\r
}\r
+\r
+ break;\r
}\r
- break;\r
\r
- case EFI_BROWSER_ACTION_CHANGING:\r
- {\r
- switch (QuestionId) {\r
- case 0x1249:\r
- {\r
- if (Type != EFI_IFR_TYPE_REF) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
+ case EFI_BROWSER_ACTION_CHANGING:\r
+ {\r
+ switch (QuestionId) {\r
+ case 0x1249:\r
+ {\r
+ if (Type != EFI_IFR_TYPE_REF) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
- Value->ref.FormId = 0x1234;\r
- }\r
- break;\r
- case 0x1234:\r
- //\r
- // Initialize the container for dynamic opcodes\r
- //\r
- StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (StartOpCodeHandle != NULL);\r
+ Value->ref.FormId = 0x1234;\r
+ break;\r
+ }\r
+ case 0x1234:\r
+ //\r
+ // Initialize the container for dynamic opcodes\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 = 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
- EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (EndOpCodeHandle != NULL);\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
- //\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
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ STRING_TOKEN (STR_BOOT_OPTION2),\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 2\r
+ );\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
+ // Prepare initial value for the dynamic created oneof Question\r
+ //\r
+ PrivateData->Configuration.DynamicOneof = 2;\r
+ Status = gRT->SetVariable (\r
+ VariableName,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ &PrivateData->Configuration\r
+ );\r
+\r
+ //\r
+ // Set initial vlaue of dynamic created oneof Question in Form Browser\r
+ //\r
+ Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_CONFIGURATION));\r
+ ASSERT (Configuration != NULL);\r
+ if (HiiGetBrowserData (&gDriverSampleFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *)Configuration)) {\r
+ Configuration->DynamicOneof = 2;\r
+\r
+ //\r
+ // Update uncommitted data of Browser\r
+ //\r
+ HiiSetBrowserData (\r
+ &gDriverSampleFormSetGuid,\r
+ VariableName,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ (UINT8 *)Configuration,\r
+ NULL\r
+ );\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
+ FreePool (Configuration);\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
- HiiCreateOneOfOptionOpCode (\r
- OptionsOpCodeHandle,\r
- STRING_TOKEN (STR_BOOT_OPTION2),\r
- 0,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- 2\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
- //\r
- // Prepare initial value for the dynamic created oneof Question\r
- //\r
- PrivateData->Configuration.DynamicOneof = 2;\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
+ HiiCreateTextOpCode (\r
+ StartOpCodeHandle,\r
+ STRING_TOKEN (STR_TEXT_SAMPLE_HELP),\r
+ STRING_TOKEN (STR_TEXT_SAMPLE_HELP),\r
+ STRING_TOKEN (STR_TEXT_SAMPLE_STRING)\r
+ );\r
\r
- //\r
- // Set initial vlaue of dynamic created oneof Question in Form Browser\r
- //\r
- Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_CONFIGURATION));\r
- ASSERT (Configuration != NULL);\r
- if (HiiGetBrowserData (&gDriverSampleFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration)) {\r
- Configuration->DynamicOneof = 2;\r
+ HiiCreateDateOpCode (\r
+ StartOpCodeHandle,\r
+ 0x8004,\r
+ 0x0,\r
+ 0x0,\r
+ STRING_TOKEN (STR_DATE_SAMPLE_HELP),\r
+ STRING_TOKEN (STR_DATE_SAMPLE_HELP),\r
+ 0,\r
+ QF_DATE_STORAGE_TIME,\r
+ NULL\r
+ );\r
\r
- //\r
- // Update uncommitted data of Browser\r
- //\r
- HiiSetBrowserData (\r
- &gDriverSampleFormSetGuid,\r
- VariableName,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- (UINT8 *) Configuration,\r
- NULL\r
- );\r
- }\r
- FreePool (Configuration);\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
+ HiiCreateTimeOpCode (\r
+ StartOpCodeHandle,\r
+ 0x8005,\r
+ 0x0,\r
+ 0x0,\r
+ STRING_TOKEN (STR_TIME_SAMPLE_HELP),\r
+ STRING_TOKEN (STR_TIME_SAMPLE_HELP),\r
+ 0,\r
+ QF_TIME_STORAGE_TIME,\r
+ 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
+ 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
- HiiCreateTextOpCode (\r
- StartOpCodeHandle,\r
- STRING_TOKEN(STR_TEXT_SAMPLE_HELP),\r
- STRING_TOKEN(STR_TEXT_SAMPLE_HELP),\r
- STRING_TOKEN(STR_TEXT_SAMPLE_STRING)\r
- );\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &gDriverSampleFormSetGuid, // Formset GUID\r
+ 0x1234, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ EndOpCodeHandle // Replace data\r
+ );\r
\r
- HiiCreateDateOpCode (\r
- StartOpCodeHandle,\r
- 0x8004,\r
- 0x0,\r
- 0x0,\r
- STRING_TOKEN(STR_DATE_SAMPLE_HELP),\r
- STRING_TOKEN(STR_DATE_SAMPLE_HELP),\r
- 0,\r
- QF_DATE_STORAGE_TIME,\r
- NULL\r
- );\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ break;\r
\r
- HiiCreateTimeOpCode (\r
- StartOpCodeHandle,\r
- 0x8005,\r
- 0x0,\r
- 0x0,\r
- STRING_TOKEN(STR_TIME_SAMPLE_HELP),\r
- STRING_TOKEN(STR_TIME_SAMPLE_HELP),\r
- 0,\r
- QF_TIME_STORAGE_TIME,\r
- NULL\r
- );\r
+ default:\r
+ break;\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
+ break;\r
+ }\r
\r
- HiiUpdateForm (\r
- PrivateData->HiiHandle[0], // HII handle\r
- &gDriverSampleFormSetGuid, // Formset GUID\r
- 0x1234, // Form ID\r
- StartOpCodeHandle, // Label for where to insert opcodes\r
- EndOpCodeHandle // Replace data\r
- );\r
+ case EFI_BROWSER_ACTION_CHANGED:\r
+ switch (QuestionId) {\r
+ case 0x1237:\r
+ //\r
+ // User press "Exit now", request Browser to exit\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ break;\r
+\r
+ case 0x1238:\r
+ //\r
+ // User press "Save now", request Browser to save the uncommitted data.\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+ break;\r
+\r
+ case 0x1241:\r
+ case 0x1246:\r
+ //\r
+ // User press "Submit current form and Exit now", request Browser to submit current form and exit\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;\r
+ break;\r
+\r
+ case 0x1242:\r
+ //\r
+ // User press "Discard current form now", request Browser to discard the uncommitted data.\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD;\r
+ break;\r
+\r
+ case 0x1243:\r
+ //\r
+ // User press "Submit current form now", request Browser to save the uncommitted data.\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
+ break;\r
+\r
+ case 0x1244:\r
+ case 0x1245:\r
+ //\r
+ // User press "Discard current form and Exit now", request Browser to discard the uncommitted data and exit.\r
+ //\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
+ break;\r
+\r
+ case 0x1231:\r
+ //\r
+ // 1. Check to see whether system support keyword.\r
+ //\r
+ Status = PrivateData->HiiKeywordHandler->GetData (\r
+ PrivateData->HiiKeywordHandler,\r
+ L"NAMESPACE=x-UEFI-ns",\r
+ L"KEYWORD=iSCSIBootEnable",\r
+ &Progress,\r
+ &ProgressErr,\r
+ &Results\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ do {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"",\r
+ L"This system not support this keyword!",\r
+ L"Press ENTER to continue ...",\r
+ L"",\r
+ NULL\r
+ );\r
+ } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
\r
- HiiFreeOpCodeHandle (StartOpCodeHandle);\r
- HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
- HiiFreeOpCodeHandle (EndOpCodeHandle);\r
- break;\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
\r
- case 0x5678:\r
- case 0x1247:\r
- //\r
- // We will reach here once the Question is refreshed\r
- //\r
+ //\r
+ // 2. If system support this keyword, just try to change value.\r
+ //\r
+\r
+ //\r
+ // Change value from '0' to '1' or from '1' to '0'\r
+ //\r
+ TmpStr = StrStr (Results, L"&VALUE=");\r
+ ASSERT (TmpStr != NULL);\r
+ TmpStr += StrLen (L"&VALUE=");\r
+ TmpStr++;\r
+ if (*TmpStr == L'0') {\r
+ *TmpStr = L'1';\r
+ } else {\r
+ *TmpStr = L'0';\r
+ }\r
\r
- //\r
- // Initialize the container for dynamic opcodes\r
- //\r
- StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (StartOpCodeHandle != NULL);\r
+ //\r
+ // 3. Call the keyword handler protocol to change the value.\r
+ //\r
+ Status = PrivateData->HiiKeywordHandler->SetData (\r
+ PrivateData->HiiKeywordHandler,\r
+ Results,\r
+ &Progress,\r
+ &ProgressErr\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ do {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"",\r
+ L"Set keyword to the system failed!",\r
+ L"Press ENTER to continue ...",\r
+ L"",\r
+ NULL\r
+ );\r
+ } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\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
- if (QuestionId == 0x5678) {\r
- StartLabel->Number = LABEL_UPDATE2;\r
- FormId = 0x03;\r
- PrivateData->Configuration.DynamicRefresh++;\r
- } else if (QuestionId == 0x1247 ) {\r
- StartLabel->Number = LABEL_UPDATE3;\r
- FormId = 0x06;\r
- PrivateData->Configuration.RefreshGuidCount++;\r
- }\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\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
+ break;\r
+\r
+ case 0x1330:\r
+ Status = mPrivateData->HiiPopup->CreatePopup (\r
+ mPrivateData->HiiPopup,\r
+ EfiHiiPopupStyleInfo,\r
+ EfiHiiPopupTypeYesNo,\r
+ mPrivateData->HiiHandle[0],\r
+ STRING_TOKEN (STR_POPUP_STRING),\r
+ &UserSelection\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ if (UserSelection == EfiHiiPopupSelectionYes) {\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ }\r
+ }\r
\r
- HiiUpdateForm (\r
- PrivateData->HiiHandle[0], // HII handle\r
- &gDriverSampleFormSetGuid, // Formset GUID\r
- FormId, // Form ID\r
- StartOpCodeHandle, // Label for where to insert opcodes\r
- NULL // Insert data\r
- );\r
+ break;\r
\r
- HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ default:\r
+ break;\r
+ }\r
\r
- //\r
- // Refresh the Question value\r
- //\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &gDriverSampleFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
+ break;\r
\r
- if (QuestionId == 0x5678) {\r
+ case EFI_BROWSER_ACTION_SUBMITTED:\r
+ {\r
+ if (QuestionId == 0x1250) {\r
//\r
- // Update uncommitted data of Browser\r
+ // Sample CallBack for EFI_BROWSER_ACTION_SUBMITTED action:\r
+ // Show up a pop-up to show SUBMITTED callback has been triggered.\r
//\r
- EfiData = AllocateZeroPool (sizeof (MY_EFI_VARSTORE_DATA));\r
- ASSERT (EfiData != NULL);\r
- if (HiiGetBrowserData (&gDriverSampleFormSetGuid, MyEfiVar, sizeof (MY_EFI_VARSTORE_DATA), (UINT8 *) EfiData)) {\r
- EfiData->Field8 = 111;\r
- HiiSetBrowserData (\r
- &gDriverSampleFormSetGuid,\r
- MyEfiVar,\r
- sizeof (MY_EFI_VARSTORE_DATA),\r
- (UINT8 *) EfiData,\r
+ do {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"",\r
+ L"EfiVarstore value has been submitted!",\r
+ L"Press ESC or ENTER to continue ...",\r
+ L"",\r
NULL\r
);\r
- }\r
- FreePool (EfiData);\r
- }\r
- break;\r
-\r
- case 0x2000:\r
- //\r
- // Only used to update the state.\r
- //\r
- if ((Type == EFI_IFR_TYPE_STRING) && (Value->string == 0) && \r
- (PrivateData->PasswordState == BROWSER_STATE_SET_PASSWORD)) {\r
- PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- //\r
- // When try to set a new password, user will be chanlleged with old password.\r
- // The Callback is responsible for validating old password input by user,\r
- // If Callback return EFI_SUCCESS, it indicates validation pass.\r
- //\r
- switch (PrivateData->PasswordState) {\r
- case BROWSER_STATE_VALIDATE_PASSWORD:\r
- Status = ValidatePassword (PrivateData, Value->string);\r
- if (Status == EFI_SUCCESS) {\r
- PrivateData->PasswordState = BROWSER_STATE_SET_PASSWORD;\r
- }\r
- break;\r
-\r
- case BROWSER_STATE_SET_PASSWORD:\r
- Status = SetPassword (PrivateData, Value->string);\r
- PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;\r
- break;\r
-\r
- default:\r
- break;\r
+ } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));\r
}\r
\r
break;\r
-\r
- default:\r
- break;\r
}\r
- }\r
- break;\r
\r
- case EFI_BROWSER_ACTION_CHANGED:\r
- switch (QuestionId) {\r
- case 0x1237:\r
- //\r
- // User press "Exit now", request Browser to exit\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
- break;\r
- \r
- case 0x1238:\r
- //\r
- // User press "Save now", request Browser to save the uncommitted data.\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
- break;\r
- \r
- case 0x1241:\r
- case 0x1246:\r
- //\r
- // User press "Submit current form and Exit now", request Browser to submit current form and exit\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;\r
- break;\r
- \r
- case 0x1242:\r
- //\r
- // User press "Discard current form now", request Browser to discard the uncommitted data.\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD;\r
- break;\r
- \r
- case 0x1243:\r
- //\r
- // User press "Submit current form now", request Browser to save the uncommitted data.\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
- break;\r
- \r
- case 0x1244:\r
- case 0x1245:\r
- //\r
- // User press "Discard current form and Exit now", request Browser to discard the uncommitted data and exit.\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
- break;\r
- \r
- default:\r
+ default:\r
+ Status = EFI_UNSUPPORTED;\r
break;\r
- }\r
- break;\r
-\r
- default:\r
- Status = EFI_UNSUPPORTED;\r
- break;\r
}\r
\r
return Status;\r
}\r
\r
-\r
-/**\r
- Transfer the binary device path to string.\r
-\r
- @param DevicePath The device path info.\r
-\r
- @retval Device path string info.\r
-\r
-**/\r
-CHAR16 *\r
-GenerateDevicePathString (\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
- )\r
-{\r
- CHAR16 *String;\r
- CHAR16 *TmpBuf;\r
- UINTN Index;\r
- UINT8 *Buffer;\r
- UINTN DevicePathSize;\r
-\r
- //\r
- // Compute the size of the device path in bytes\r
- //\r
- DevicePathSize = GetDevicePathSize (DevicePath);\r
- \r
- String = AllocateZeroPool ((DevicePathSize * 2 + 1) * sizeof (CHAR16));\r
- if (String == NULL) {\r
- return NULL;\r
- }\r
-\r
- TmpBuf = String;\r
- for (Index = 0, Buffer = (UINT8 *)DevicePath; Index < DevicePathSize; Index++) {\r
- TmpBuf += UnicodeValueToString (TmpBuf, PREFIX_ZERO | RADIX_HEX, *(Buffer++), 2);\r
- }\r
-\r
- return String;\r
-}\r
-\r
/**\r
Main entry for this driver.\r
\r
EFI_STATUS\r
EFIAPI\r
DriverSampleInit (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HII_HANDLE HiiHandle[2];\r
- EFI_SCREEN_DESCRIPTOR Screen;\r
- EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
- EFI_HII_STRING_PROTOCOL *HiiString;\r
- EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
- EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
- CHAR16 *NewString;\r
- UINTN BufferSize;\r
- DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
- BOOLEAN ActionFlag;\r
- EFI_STRING ConfigRequestHdr;\r
- MY_EFI_VARSTORE_DATA *VarStoreConfig;\r
- EFI_INPUT_KEY HotKey;\r
- EFI_FORM_BROWSER_EXTENSION_PROTOCOL *FormBrowserEx;\r
+ EFI_STATUS Status;\r
+ EFI_HII_HANDLE HiiHandle[2];\r
+ EFI_SCREEN_DESCRIPTOR Screen;\r
+ EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
+ EFI_HII_STRING_PROTOCOL *HiiString;\r
+ EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
+ EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
+ EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;\r
+ EFI_HII_POPUP_PROTOCOL *PopupHandler;\r
+ CHAR16 *NewString;\r
+ UINTN BufferSize;\r
+ DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
+ BOOLEAN ActionFlag;\r
+ EFI_STRING ConfigRequestHdr;\r
+ EFI_STRING NameRequestHdr;\r
+ MY_EFI_VARSTORE_DATA *VarStoreConfig;\r
+ MY_EFI_BITS_VARSTORE_DATA *BitsVarStoreConfig;\r
+ MY_EFI_UNION_DATA *UnionConfig;\r
+ EFI_INPUT_KEY HotKey;\r
+ EDKII_FORM_BROWSER_EXTENSION_PROTOCOL *FormBrowserEx;\r
\r
//\r
// Initialize the local variables.\r
ZeroMem (&Screen, sizeof (EFI_SCREEN_DESCRIPTOR));\r
gST->ConOut->QueryMode (gST->ConOut, gST->ConOut->Mode->Mode, &Screen.RightColumn, &Screen.BottomRow);\r
\r
- Screen.TopRow = 3;\r
- Screen.BottomRow = Screen.BottomRow - 3;\r
+ Screen.TopRow = 3;\r
+ Screen.BottomRow = Screen.BottomRow - 3;\r
\r
//\r
// Initialize driver private data\r
//\r
- PrivateData = AllocateZeroPool (sizeof (DRIVER_SAMPLE_PRIVATE_DATA));\r
- if (PrivateData == NULL) {\r
+ mPrivateData = AllocateZeroPool (sizeof (DRIVER_SAMPLE_PRIVATE_DATA));\r
+ if (mPrivateData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- PrivateData->Signature = DRIVER_SAMPLE_PRIVATE_SIGNATURE;\r
+ mPrivateData->Signature = DRIVER_SAMPLE_PRIVATE_SIGNATURE;\r
\r
- PrivateData->ConfigAccess.ExtractConfig = ExtractConfig;\r
- PrivateData->ConfigAccess.RouteConfig = RouteConfig;\r
- PrivateData->ConfigAccess.Callback = DriverCallback;\r
- PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;\r
+ mPrivateData->ConfigAccess.ExtractConfig = ExtractConfig;\r
+ mPrivateData->ConfigAccess.RouteConfig = RouteConfig;\r
+ mPrivateData->ConfigAccess.Callback = DriverCallback;\r
\r
//\r
// Locate Hii Database protocol\r
//\r
- Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &HiiDatabase);\r
+ Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **)&HiiDatabase);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- PrivateData->HiiDatabase = HiiDatabase;\r
+\r
+ mPrivateData->HiiDatabase = HiiDatabase;\r
\r
//\r
// Locate HiiString protocol\r
//\r
- Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **) &HiiString);\r
+ Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **)&HiiString);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- PrivateData->HiiString = HiiString;\r
+\r
+ mPrivateData->HiiString = HiiString;\r
\r
//\r
// Locate Formbrowser2 protocol\r
//\r
- Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **) &FormBrowser2);\r
+ Status = gBS->LocateProtocol (&gEfiFormBrowser2ProtocolGuid, NULL, (VOID **)&FormBrowser2);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- PrivateData->FormBrowser2 = FormBrowser2;\r
+\r
+ mPrivateData->FormBrowser2 = FormBrowser2;\r
\r
//\r
// Locate ConfigRouting protocol\r
//\r
- Status = gBS->LocateProtocol (&gEfiHiiConfigRoutingProtocolGuid, NULL, (VOID **) &HiiConfigRouting);\r
+ Status = gBS->LocateProtocol (&gEfiHiiConfigRoutingProtocolGuid, NULL, (VOID **)&HiiConfigRouting);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ mPrivateData->HiiConfigRouting = HiiConfigRouting;\r
+\r
+ //\r
+ // Locate keyword handler protocol\r
+ //\r
+ Status = gBS->LocateProtocol (&gEfiConfigKeywordHandlerProtocolGuid, NULL, (VOID **)&HiiKeywordHandler);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- PrivateData->HiiConfigRouting = HiiConfigRouting;\r
+\r
+ mPrivateData->HiiKeywordHandler = HiiKeywordHandler;\r
+\r
+ //\r
+ // Locate HiiPopup protocol\r
+ //\r
+ Status = gBS->LocateProtocol (&gEfiHiiPopupProtocolGuid, NULL, (VOID **)&PopupHandler);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ mPrivateData->HiiPopup = PopupHandler;\r
\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&DriverHandle[0],\r
&gEfiDevicePathProtocolGuid,\r
&mHiiVendorDevicePath0,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- &PrivateData->ConfigAccess,\r
+ &mPrivateData->ConfigAccess,\r
NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- PrivateData->DriverHandle[0] = DriverHandle[0];\r
+ mPrivateData->DriverHandle[0] = DriverHandle[0];\r
\r
//\r
// Publish our HII data\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- PrivateData->HiiHandle[0] = HiiHandle[0];\r
+ mPrivateData->HiiHandle[0] = HiiHandle[0];\r
\r
//\r
// Publish another Fromset\r
&DriverHandle[1],\r
&gEfiDevicePathProtocolGuid,\r
&mHiiVendorDevicePath1,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &mPrivateData->ConfigAccess,\r
NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- PrivateData->DriverHandle[1] = DriverHandle[1];\r
+ mPrivateData->DriverHandle[1] = DriverHandle[1];\r
\r
HiiHandle[1] = HiiAddPackages (\r
&gDriverSampleInventoryGuid,\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- PrivateData->HiiHandle[1] = HiiHandle[1];\r
+ mPrivateData->HiiHandle[1] = HiiHandle[1];\r
\r
//\r
// Update the device path string.\r
//\r
- NewString = GenerateDevicePathString((EFI_DEVICE_PATH_PROTOCOL*)&mHiiVendorDevicePath0);\r
+ NewString = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL *)&mHiiVendorDevicePath0, FALSE, FALSE);\r
if (HiiSetString (HiiHandle[0], STRING_TOKEN (STR_DEVICE_PATH), NewString, NULL) == 0) {\r
DriverSampleUnload (ImageHandle);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
if (NewString != NULL) {\r
FreePool (NewString);\r
}\r
//\r
// Initialize Name/Value name String ID\r
//\r
- PrivateData->NameStringId[0] = STR_NAME_VALUE_VAR_NAME0;\r
- PrivateData->NameStringId[1] = STR_NAME_VALUE_VAR_NAME1;\r
- PrivateData->NameStringId[2] = STR_NAME_VALUE_VAR_NAME2;\r
+ mPrivateData->NameStringId[0] = STR_NAME_VALUE_VAR_NAME0;\r
+ mPrivateData->NameStringId[1] = STR_NAME_VALUE_VAR_NAME1;\r
+ mPrivateData->NameStringId[2] = STR_NAME_VALUE_VAR_NAME2;\r
\r
//\r
// Initialize configuration data\r
//\r
- Configuration = &PrivateData->Configuration;\r
+ Configuration = &mPrivateData->Configuration;\r
ZeroMem (Configuration, sizeof (DRIVER_SAMPLE_CONFIGURATION));\r
\r
//\r
ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, VariableName, DriverHandle[0]);\r
ASSERT (ConfigRequestHdr != NULL);\r
\r
+ NameRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, NULL, DriverHandle[0]);\r
+ ASSERT (NameRequestHdr != NULL);\r
+\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- Status = gRT->GetVariable (VariableName, &gDriverSampleFormSetGuid, NULL, &BufferSize, Configuration);\r
+ Status = gRT->GetVariable (VariableName, &gDriverSampleFormSetGuid, NULL, &BufferSize, Configuration);\r
if (EFI_ERROR (Status)) {\r
//\r
// Store zero data Buffer Storage to EFI variable\r
//\r
- Status = gRT->SetVariable(\r
+ Status = gRT->SetVariable (\r
VariableName,\r
&gDriverSampleFormSetGuid,\r
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
Configuration\r
);\r
- ASSERT (Status == EFI_SUCCESS);\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\r
+\r
//\r
// EFI variable for NV config doesn't exit, we should build this variable\r
// based on default values stored in IFR\r
//\r
+ ActionFlag = HiiSetToDefaults (NameRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
- ASSERT (ActionFlag);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
} else {\r
//\r
// EFI variable does exist and Validate Current Setting\r
//\r
+ ActionFlag = HiiValidateSettings (NameRequestHdr);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
- ASSERT (ActionFlag);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
}\r
+\r
FreePool (ConfigRequestHdr);\r
\r
//\r
// Initialize efi varstore configuration data\r
//\r
- VarStoreConfig = &PrivateData->VarStoreConfig;\r
+ VarStoreConfig = &mPrivateData->VarStoreConfig;\r
ZeroMem (VarStoreConfig, sizeof (MY_EFI_VARSTORE_DATA));\r
\r
ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, MyEfiVar, DriverHandle[0]);\r
ASSERT (ConfigRequestHdr != NULL);\r
\r
BufferSize = sizeof (MY_EFI_VARSTORE_DATA);\r
- Status = gRT->GetVariable (MyEfiVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, VarStoreConfig);\r
+ Status = gRT->GetVariable (MyEfiVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, VarStoreConfig);\r
if (EFI_ERROR (Status)) {\r
//\r
// Store zero data to EFI variable Storage.\r
//\r
- Status = gRT->SetVariable(\r
+ Status = gRT->SetVariable (\r
MyEfiVar,\r
&gDriverSampleFormSetGuid,\r
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
sizeof (MY_EFI_VARSTORE_DATA),\r
VarStoreConfig\r
);\r
- ASSERT (Status == EFI_SUCCESS);\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\r
+\r
//\r
// EFI variable for NV config doesn't exit, we should build this variable\r
// based on default values stored in IFR\r
//\r
ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
- ASSERT (ActionFlag);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
} else {\r
//\r
// EFI variable does exist and Validate Current Setting\r
//\r
ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
- ASSERT (ActionFlag);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
}\r
+\r
+ FreePool (ConfigRequestHdr);\r
+\r
+ //\r
+ // Initialize Bits efi varstore configuration data\r
+ //\r
+ BitsVarStoreConfig = &mPrivateData->BitsVarStoreConfig;\r
+ ZeroMem (BitsVarStoreConfig, sizeof (MY_EFI_BITS_VARSTORE_DATA));\r
+\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, MyEfiBitVar, DriverHandle[0]);\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+\r
+ BufferSize = sizeof (MY_EFI_BITS_VARSTORE_DATA);\r
+ Status = gRT->GetVariable (MyEfiBitVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, BitsVarStoreConfig);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data to EFI variable Storage.\r
+ //\r
+ Status = gRT->SetVariable (\r
+ MyEfiBitVar,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (MY_EFI_BITS_VARSTORE_DATA),\r
+ BitsVarStoreConfig\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // EFI variable for NV config doesn't exit, we should build this variable\r
+ // based on default values stored in IFR\r
+ //\r
+ ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ } else {\r
+ //\r
+ // EFI variable does exist and Validate Current Setting\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
+ FreePool (ConfigRequestHdr);\r
+\r
+ //\r
+ // Initialize Union efi varstore configuration data\r
+ //\r
+ UnionConfig = &mPrivateData->UnionConfig;\r
+ ZeroMem (UnionConfig, sizeof (MY_EFI_UNION_DATA));\r
+\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, MyEfiUnionVar, DriverHandle[0]);\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+\r
+ BufferSize = sizeof (MY_EFI_UNION_DATA);\r
+ Status = gRT->GetVariable (MyEfiUnionVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, UnionConfig);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data to EFI variable Storage.\r
+ //\r
+ Status = gRT->SetVariable (\r
+ MyEfiUnionVar,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (MY_EFI_UNION_DATA),\r
+ UnionConfig\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // EFI variable for NV config doesn't exit, we should build this variable\r
+ // based on default values stored in IFR\r
+ //\r
+ ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ } else {\r
+ //\r
+ // EFI variable does exist and Validate Current Setting\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
FreePool (ConfigRequestHdr);\r
\r
Status = gBS->CreateEventEx (\r
- EVT_NOTIFY_SIGNAL, \r
- TPL_NOTIFY,\r
- DriverSampleInternalEmptyFunction,\r
- NULL,\r
- &gEfiIfrRefreshIdOpGuid,\r
- &mEvent\r
- );\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ EfiEventEmptyFunction,\r
+ NULL,\r
+ &gEfiIfrRefreshIdOpGuid,\r
+ &mEvent\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Example of how to use BrowserEx protocol to register HotKey.\r
- // \r
- Status = gBS->LocateProtocol (&gEfiFormBrowserExProtocolGuid, NULL, (VOID **) &FormBrowserEx);\r
+ //\r
+ Status = gBS->LocateProtocol (&gEdkiiFormBrowserExProtocolGuid, NULL, (VOID **)&FormBrowserEx);\r
if (!EFI_ERROR (Status)) {\r
//\r
// First unregister the default hot key F9 and F10.\r
HotKey.UnicodeChar = CHAR_NULL;\r
HotKey.ScanCode = SCAN_F9;\r
FormBrowserEx->RegisterHotKey (&HotKey, 0, 0, NULL);\r
- HotKey.ScanCode = SCAN_F10;\r
+ HotKey.ScanCode = SCAN_F10;\r
FormBrowserEx->RegisterHotKey (&HotKey, 0, 0, NULL);\r
- \r
+\r
//\r
// Register the default HotKey F9 and F10 again.\r
//\r
- HotKey.ScanCode = SCAN_F10;\r
- NewString = HiiGetString (PrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_TEN_STRING), NULL);\r
+ HotKey.ScanCode = SCAN_F10;\r
+ NewString = HiiGetString (mPrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_TEN_STRING), NULL);\r
ASSERT (NewString != NULL);\r
FormBrowserEx->RegisterHotKey (&HotKey, BROWSER_ACTION_SUBMIT, 0, NewString);\r
- HotKey.ScanCode = SCAN_F9;\r
- NewString = HiiGetString (PrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_NINE_STRING), NULL);\r
+ HotKey.ScanCode = SCAN_F9;\r
+ NewString = HiiGetString (mPrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_NINE_STRING), NULL);\r
ASSERT (NewString != NULL);\r
FormBrowserEx->RegisterHotKey (&HotKey, BROWSER_ACTION_DEFAULT, EFI_HII_DEFAULT_CLASS_STANDARD, NewString);\r
}\r
IN EFI_HANDLE ImageHandle\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
- ASSERT (PrivateData != NULL);\r
+ ASSERT (mPrivateData != NULL);\r
\r
if (DriverHandle[0] != NULL) {\r
gBS->UninstallMultipleProtocolInterfaces (\r
- DriverHandle[0],\r
- &gEfiDevicePathProtocolGuid,\r
- &mHiiVendorDevicePath0,\r
- &gEfiHiiConfigAccessProtocolGuid,\r
- &PrivateData->ConfigAccess,\r
- NULL\r
+ DriverHandle[0],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath0,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &mPrivateData->ConfigAccess,\r
+ NULL\r
);\r
DriverHandle[0] = NULL;\r
}\r
\r
if (DriverHandle[1] != NULL) {\r
gBS->UninstallMultipleProtocolInterfaces (\r
- DriverHandle[1],\r
- &gEfiDevicePathProtocolGuid,\r
- &mHiiVendorDevicePath1,\r
- NULL\r
+ DriverHandle[1],\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mHiiVendorDevicePath1,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &mPrivateData->ConfigAccess,\r
+ NULL\r
);\r
DriverHandle[1] = NULL;\r
}\r
\r
- if (PrivateData->HiiHandle[0] != NULL) {\r
- HiiRemovePackages (PrivateData->HiiHandle[0]);\r
+ if (mPrivateData->HiiHandle[0] != NULL) {\r
+ HiiRemovePackages (mPrivateData->HiiHandle[0]);\r
}\r
\r
- if (PrivateData->HiiHandle[1] != NULL) {\r
- HiiRemovePackages (PrivateData->HiiHandle[1]);\r
+ if (mPrivateData->HiiHandle[1] != NULL) {\r
+ HiiRemovePackages (mPrivateData->HiiHandle[1]);\r
}\r
\r
for (Index = 0; Index < NAME_VALUE_NAME_NUMBER; Index++) {\r
- if (PrivateData->NameValueName[Index] != NULL) {\r
- FreePool (PrivateData->NameValueName[Index]);\r
+ if (mPrivateData->NameValueName[Index] != NULL) {\r
+ FreePool (mPrivateData->NameValueName[Index]);\r
}\r
}\r
- FreePool (PrivateData);\r
- PrivateData = NULL;\r
+\r
+ FreePool (mPrivateData);\r
+ mPrivateData = NULL;\r
\r
gBS->CloseEvent (mEvent);\r
\r