/** @file\r
Utility functions for expression evaluation.\r
\r
-Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2013, 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
IdToForm (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN UINT16 FormId\r
-)\r
+ )\r
{\r
LIST_ENTRY *Link;\r
FORM_BROWSER_FORM *Form;\r
CopyMem (TmpBuf, Value.Buffer, Value.BufferLen * sizeof (CHAR16));\r
PrintFormat = L"%s"; \r
}\r
- UnicodeSPrint (Buffer, MAXIMUM_VALUE_CHARACTERS, PrintFormat, Value.Buffer); \r
+ UnicodeSPrint (Buffer, sizeof (Buffer), PrintFormat, Value.Buffer); \r
String = Buffer; \r
FreePool (TmpBuf);\r
FreePool (Value.Buffer);\r
UINTN Base;\r
UINTN Length;\r
CHAR16 *SubString;\r
- UINT8 *Buffer;\r
UINT16 BufferLen;\r
\r
ZeroMem (Value, sizeof (Value));\r
\r
FreePool (String);\r
} else {\r
- Buffer = Value[2].Buffer;\r
BufferLen = Value[2].BufferLen;\r
\r
Result->Type = EFI_IFR_TYPE_BUFFER;\r
Value->Value.u64 = Temp;\r
}\r
\r
+/**\r
+ Get UINT64 type value.\r
+\r
+ @param Value Input Hii value.\r
+\r
+ @retval UINT64 Return the UINT64 type value.\r
+\r
+**/\r
+UINT64\r
+HiiValueToUINT64 (\r
+ IN EFI_HII_VALUE *Value\r
+ )\r
+{\r
+ UINT64 RetVal;\r
+\r
+ RetVal = 0;\r
+\r
+ switch (Value->Type) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ RetVal = Value->Value.u8;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ RetVal = Value->Value.u16;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ RetVal = Value->Value.u32;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ RetVal = Value->Value.b;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_DATE:\r
+ RetVal = *(UINT64*) &Value->Value.date;\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_TIME:\r
+ RetVal = (*(UINT64*) &Value->Value.time) & 0xffffff;\r
+ break;\r
+\r
+ default:\r
+ RetVal = Value->Value.u64;\r
+ break;\r
+ }\r
+\r
+ return RetVal;\r
+}\r
\r
/**\r
Compare two Hii value.\r
//\r
// Take remain types(integer, boolean, date/time) as integer\r
//\r
- Temp64 = (INT64) (Value1->Value.u64 - Value2->Value.u64);\r
+ Temp64 = HiiValueToUINT64(Value1) - HiiValueToUINT64(Value2);\r
if (Temp64 > 0) {\r
*Result = 1;\r
} else if (Temp64 < 0) {\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HANDLE DriverHandle;\r
- EFI_HANDLE Handle;\r
- EFI_HII_HANDLE *HiiHandles;\r
EFI_HII_HANDLE HiiHandle;\r
- UINTN Index;\r
FORM_BROWSER_STATEMENT *Question;\r
FORM_BROWSER_FORMSET *FormSet;\r
FORM_BROWSER_FORM *Form;\r
(DevicePath == NULL && InputHiiHandle != NULL) );\r
\r
GetTheVal = TRUE;\r
- DriverHandle = NULL;\r
HiiHandle = NULL;\r
Question = NULL;\r
Form = NULL;\r
// Get HiiHandle.\r
//\r
if (DevicePath != NULL) {\r
- //\r
- // 1. Get Driver handle.\r
- //\r
- Status = gBS->LocateDevicePath (\r
- &gEfiDevicePathProtocolGuid,\r
- &DevicePath,\r
- &DriverHandle\r
- );\r
- if (EFI_ERROR (Status) || (DriverHandle == NULL)) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // 2. Get Hii handle\r
- //\r
- HiiHandles = HiiGetHiiHandles (NULL);\r
- if (HiiHandles == NULL) {\r
+ HiiHandle = DevicePathToHiiHandle (DevicePath, FormSetGuid);\r
+ if (HiiHandle == NULL) {\r
return FALSE;\r
}\r
-\r
- for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
- Status = mHiiDatabase->GetPackageListHandle (\r
- mHiiDatabase,\r
- HiiHandles[Index],\r
- &Handle\r
- );\r
- if (!EFI_ERROR (Status) && (Handle == DriverHandle)) {\r
- HiiHandle = HiiHandles[Index];\r
- break;\r
- }\r
- }\r
- FreePool (HiiHandles);\r
} else {\r
HiiHandle = InputHiiHandle;\r
} \r
//\r
FormSet = AllocateZeroPool (sizeof (FORM_BROWSER_FORMSET));\r
ASSERT (FormSet != NULL);\r
- Status = InitializeFormSet(HiiHandle, FormSetGuid, FormSet, FALSE);\r
+ Status = InitializeFormSet(HiiHandle, FormSetGuid, FormSet);\r
if (EFI_ERROR (Status)) {\r
GetTheVal = FALSE;\r
goto Done;\r
UINT8 *TempBuffer;\r
EFI_TIME EfiTime;\r
EFI_HII_VALUE QuestionVal;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
//\r
// Save current stack offset.\r
}\r
\r
if (OpCode->DevicePath != 0) {\r
+ Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
+\r
StrPtr = GetToken (OpCode->DevicePath, FormSet->HiiHandle);\r
- if (StrPtr == NULL) {\r
- Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
- break;\r
+ if (StrPtr != NULL && mPathFromText != NULL) {\r
+ DevicePath = mPathFromText->ConvertTextToDevicePath(StrPtr);\r
+ if (DevicePath != NULL && GetQuestionValueFromForm(DevicePath, NULL, &OpCode->Guid, Value->Value.u16, &QuestionVal)) {\r
+ Value = &QuestionVal;\r
+ }\r
+ if (DevicePath != NULL) {\r
+ FreePool (DevicePath);\r
+ }\r
}\r
\r
- if (!GetQuestionValueFromForm((EFI_DEVICE_PATH_PROTOCOL*)StrPtr, NULL, &OpCode->Guid, Value->Value.u16, &QuestionVal)){\r
- Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
- break;\r
+ if (StrPtr != NULL) {\r
+ FreePool (StrPtr);\r
}\r
- Value = &QuestionVal;\r
} else if (CompareGuid (&OpCode->Guid, &gZeroGuid) != 0) {\r
if (!GetQuestionValueFromForm(NULL, FormSet->HiiHandle, &OpCode->Guid, Value->Value.u16, &QuestionVal)){\r
Value->Type = EFI_IFR_TYPE_UNDEFINED;\r
for (Index = 0; Index < OpCode->ValueWidth; Index ++, TempBuffer --) {\r
StrPtr += UnicodeValueToString (StrPtr, PREFIX_ZERO | RADIX_HEX, *TempBuffer, 2);\r
}\r
- Status = SetValueByName (OpCode->VarStorage, OpCode->ValueName, NameValue, GetSetValueWithEditBuffer);\r
+ Status = SetValueByName (OpCode->VarStorage, OpCode->ValueName, NameValue, GetSetValueWithEditBuffer, NULL);\r
FreePool (NameValue);\r
if (!EFI_ERROR (Status)) {\r
Data1.Value.b = TRUE;\r