]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
Add ACPI5.1 header file.
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / ProcessOptions.c
index aca043a8c2a7aaa8739ae163e8b3cf3ceaa6360e..1ab38b1df2e5fd8fbabfcba8874ebb8a97149f3b 100644 (file)
@@ -15,6 +15,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "FormDisplay.h"\r
 \r
+#define MAX_TIME_OUT_LEN  0x10\r
+\r
 /**\r
   Concatenate a narrow string to another string.\r
 \r
@@ -46,6 +48,56 @@ NewStrCat (
   StrCpy (Destination + Length, Source);\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
@@ -145,7 +197,7 @@ CompareHiiValue (
   //\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
@@ -561,52 +613,52 @@ CreateMultiStringPopUp (
 }\r
 \r
 /**\r
-  Process validate for one question.\r
-\r
-  @param  Question               The question need to be validate.\r
+  Process nothing.\r
 \r
-  @retval EFI_SUCCESS            Question Option process success.\r
-  @retval EFI_INVALID_PARAMETER  Question Option process fail.\r
+  @param Event    The Event need to be process\r
+  @param Context  The context of the event.\r
 \r
 **/\r
-EFI_STATUS \r
-ValidateQuestion (\r
-  IN FORM_DISPLAY_ENGINE_STATEMENT   *Question\r
+VOID\r
+EFIAPI\r
+EmptyEventProcess (\r
+  IN  EFI_EVENT    Event,\r
+  IN  VOID         *Context\r
   )\r
 {\r
-  CHAR16                          *ErrorInfo;\r
-  EFI_INPUT_KEY                   Key;\r
-  EFI_STATUS                      Status;\r
-  STATEMENT_ERROR_INFO            RetInfo;\r
-  UINT32                          RetVal;\r
+}\r
 \r
-  if (Question->ValidateQuestion == NULL) {\r
-    return EFI_SUCCESS;\r
-  }\r
+/**\r
+  Process for the refresh interval statement.\r
 \r
-  Status = EFI_SUCCESS; \r
-  RetVal = Question->ValidateQuestion(gFormData, Question, &gUserInput->InputValue, &RetInfo);\r
\r
-  switch (RetVal) {\r
-  case INCOSISTENT_IF_TRUE:\r
-    //\r
-    // Condition meet, show up error message\r
-    //\r
-    ASSERT (RetInfo.StringId != 0);\r
-    ErrorInfo = GetToken (RetInfo.StringId, gFormData->HiiHandle);\r
-    do {\r
-      CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL);\r
-    } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
-    FreePool (ErrorInfo);\r
+  @param Event    The Event need to be process\r
+  @param Context  The context of the event.\r
 \r
-    Status = EFI_INVALID_PARAMETER;\r
-  break;\r
+**/\r
+VOID\r
+EFIAPI\r
+RefreshTimeOutProcess (\r
+  IN  EFI_EVENT    Event,\r
+  IN  VOID         *Context\r
+  )\r
+{\r
+  WARNING_IF_CONTEXT     *EventInfo;\r
+  CHAR16                 TimeOutString[MAX_TIME_OUT_LEN];\r
 \r
-  default:\r
-    break;\r
+  EventInfo   = (WARNING_IF_CONTEXT *) Context;\r
+\r
+  if (*(EventInfo->TimeOut) == 0) {\r
+    gBS->CloseEvent (Event);\r
+\r
+    gBS->SignalEvent (EventInfo->SyncEvent);\r
+    return;\r
   }\r
 \r
-  return Status;\r
+  UnicodeSPrint(TimeOutString, MAX_TIME_OUT_LEN, L"%d", *(EventInfo->TimeOut));\r
+\r
+  CreateDialog (NULL, gEmptyString, EventInfo->ErrorInfo, gPressEnter, gEmptyString, TimeOutString, NULL);\r
+\r
+  *(EventInfo->TimeOut) -= 1;\r
 }\r
 \r
 /**\r
@@ -740,7 +792,7 @@ PasswordProcess (
     gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
     FreePool (StringPtr); \r
 \r
-    Status = ValidateQuestion (Question);\r
+    Status = EFI_SUCCESS;\r
 \r
     if (EFI_ERROR (Status)) {\r
       //\r
@@ -1033,8 +1085,24 @@ ProcessOptions (
           Link = GetFirstNode (&Question->OptionListHead);\r
           Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);\r
 \r
-          CopyMem (&gUserInput->InputValue.Value, &Option->OptionOpCode->Value, sizeof (EFI_IFR_TYPE_VALUE));\r
           gUserInput->InputValue.Type = Option->OptionOpCode->Type;\r
+          switch (gUserInput->InputValue.Type) {\r
+          case EFI_IFR_TYPE_NUM_SIZE_8:\r
+            gUserInput->InputValue.Value.u8 = Option->OptionOpCode->Value.u8;\r
+            break;\r
+          case EFI_IFR_TYPE_NUM_SIZE_16:\r
+            CopyMem (&gUserInput->InputValue.Value.u16, &Option->OptionOpCode->Value.u16, sizeof (UINT16));\r
+            break;\r
+          case EFI_IFR_TYPE_NUM_SIZE_32:\r
+            CopyMem (&gUserInput->InputValue.Value.u32, &Option->OptionOpCode->Value.u32, sizeof (UINT32));\r
+            break;\r
+          case EFI_IFR_TYPE_NUM_SIZE_64:\r
+            CopyMem (&gUserInput->InputValue.Value.u64, &Option->OptionOpCode->Value.u64, sizeof (UINT64));\r
+            break;\r
+          default:\r
+            ASSERT (FALSE);\r
+            break;\r
+          }\r
           gUserInput->SelectedStatement = Question;\r
 \r
           FreePool (*OptionString);\r
@@ -1066,7 +1134,7 @@ ProcessOptions (
       //\r
       // Perform inconsistent check\r
       //\r
-      return ValidateQuestion (Question);\r
+      return EFI_SUCCESS;\r
     } else {    \r
       *OptionString = AllocateZeroPool (BufferSize);\r
       ASSERT (*OptionString);\r
@@ -1186,7 +1254,7 @@ ProcessOptions (
       gUserInput->InputValue.Type = Question->CurrentValue.Type;\r
       gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
       FreePool (StringPtr);\r
-      return ValidateQuestion (Question);\r
+      return EFI_SUCCESS;\r
     } else {\r
       *OptionString = AllocateZeroPool (BufferSize);\r
       ASSERT (*OptionString);\r