]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
Old driver sample code does not return an EFI_UNSUPPORTED status code if a callback...
[mirror_edk2.git] / MdeModulePkg / Universal / DriverSampleDxe / DriverSample.c
index 9b664b4958c50912d98dfe3e2cd2d4f29caa0964..947df96b2cb0453bfe7d278c3984cf63539c2787 100644 (file)
@@ -840,378 +840,412 @@ DriverCallback (
   EFI_INPUT_KEY                   Key;\r
   DRIVER_SAMPLE_CONFIGURATION     *Configuration;\r
   UINTN                           MyVarSize;\r
+  \r
+  if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE))||\r
+    (ActionRequest == NULL)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {\r
-    if (QuestionId == 0x1234) {\r
-      //\r
-      // Sample CallBack for UEFI FORM_OPEN action:\r
-      //   Add Save action into Form 3 when Form 1 is opened.\r
-      //   This will be done only in FORM_OPEN CallBack of question with ID 0x1234 from Form 1.\r
-      //\r
-      PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
 \r
+  Status = EFI_SUCCESS;\r
+  PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
+\r
+  switch (Action) {\r
+  case EFI_BROWSER_ACTION_FORM_OPEN:\r
+    {\r
+      if (QuestionId == 0x1234) {\r
+        //\r
+        // Sample CallBack for UEFI FORM_OPEN action:\r
+        //   Add Save action into Form 3 when Form 1 is opened.\r
+        //   This will be done only in FORM_OPEN CallBack of question with ID 0x1234 from Form 1.\r
+        //\r
+        PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
+\r
+        //\r
+        // Initialize the container for dynamic opcodes\r
+        //\r
+        StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+        ASSERT (StartOpCodeHandle != NULL);\r
+\r
+        //\r
+        // Create Hii Extend Label OpCode as the start opcode\r
+        //\r
+        StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+        StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+        StartLabel->Number       = LABEL_UPDATE2;\r
+\r
+        HiiCreateActionOpCode (\r
+          StartOpCodeHandle,                // Container for dynamic created opcodes\r
+          0x1238,                           // Question ID\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
+        HiiUpdateForm (\r
+          PrivateData->HiiHandle[0],  // HII handle\r
+          &mFormSetGuid,              // Formset GUID\r
+          0x3,                        // Form ID\r
+          StartOpCodeHandle,          // Label for where to insert opcodes\r
+          NULL                        // Insert data\r
+          );\r
+\r
+        HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+      }\r
+    }\r
+    break;\r
+\r
+  case EFI_BROWSER_ACTION_FORM_CLOSE:\r
+    {\r
+      if (QuestionId == 0x5678) {\r
+        //\r
+        // Sample CallBack for UEFI FORM_CLOSE action:\r
+        //   Show up a pop-up to specify Form 3 will be closed when exit Form 3.\r
+        //\r
+        do {\r
+          CreatePopUp (\r
+            EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+            &Key,\r
+            L"",\r
+            L"You are going to leave third Form!",\r
+            L"Press ESC or ENTER to continue ...",\r
+            L"",\r
+            NULL\r
+            );\r
+        } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));\r
+      }\r
+    }\r
+    break;\r
+    \r
+  case EFI_BROWSER_ACTION_RETRIEVE:\r
+    {\r
+      if (QuestionId == 0x1111) {\r
+        //\r
+        // EfiVarstore question takes sample action (print value as debug information) \r
+        // after read/write question.\r
+        //\r
+        MyVarSize = 1;\r
+        Status = gRT->GetVariable(\r
+                        L"MyVar",\r
+                        &mFormSetGuid,\r
+                        NULL,\r
+                        &MyVarSize,\r
+                        &MyVar\r
+                        );\r
+        ASSERT_EFI_ERROR (Status);\r
+        DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
+      }\r
+    }\r
+    break;\r
+\r
+  case EFI_BROWSER_ACTION_CHANGING:\r
+  {\r
+    switch (QuestionId) {\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_UPDATE2;\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
-        0x1238,                           // Question ID\r
-        STRING_TOKEN(STR_SAVE_TEXT),      // Prompt text\r
-        STRING_TOKEN(STR_SAVE_TEXT),      // Help text\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
-        &mFormSetGuid,              // Formset GUID\r
-        0x3,                        // Form ID\r
-        StartOpCodeHandle,          // Label for where to insert opcodes\r
-        NULL                        // Insert data\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
-      HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-    }\r
-    return EFI_SUCCESS;\r
-  }\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        STRING_TOKEN (STR_BOOT_OPTION2),\r
+        0,\r
+        EFI_IFR_NUMERIC_SIZE_1,\r
+        2\r
+        );\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) {\r
-    if (QuestionId == 0x5678) {\r
       //\r
-      // Sample CallBack for UEFI FORM_CLOSE action:\r
-      //   Show up a pop-up to specify Form 3 will be closed when exit Form 3.\r
+      // Prepare initial value for the dynamic created oneof Question\r
+      //\r
+      PrivateData->Configuration.DynamicOneof = 2;\r
+      Status = gRT->SetVariable(\r
+                      VariableName,\r
+                      &mFormSetGuid,\r
+                      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                      sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+                      &PrivateData->Configuration\r
+                      );\r
+\r
       //\r
-      do {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"",\r
-          L"You are going to leave third Form!",\r
-          L"Press ESC or ENTER to continue ...",\r
-          L"",\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 (&mFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration)) {\r
+        Configuration->DynamicOneof = 2;\r
+\r
+        //\r
+        // Update uncommitted data of Browser\r
+        //\r
+        HiiSetBrowserData (\r
+          &mFormSetGuid,\r
+          VariableName,\r
+          sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+          (UINT8 *) Configuration,\r
           NULL\r
           );\r
-      } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));\r
-    }\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  if ((Value == NULL) || (ActionRequest == NULL)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
-\r
-\r
-  Status = EFI_SUCCESS;\r
-  PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
-\r
-  switch (QuestionId) {\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
+      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
-    //\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
+      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
-    // 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
+      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
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      STRING_TOKEN (STR_BOOT_OPTION2),\r
-      0,\r
-      EFI_IFR_NUMERIC_SIZE_1,\r
-      2\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
 \r
-    //\r
-    // Prepare initial value for the dynamic created oneof Question\r
-    //\r
-    PrivateData->Configuration.DynamicOneof = 2;\r
-    Status = gRT->SetVariable(\r
-                    VariableName,\r
-                    &mFormSetGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
-                    &PrivateData->Configuration\r
-                    );\r
+      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
-    //\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 (&mFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION), (UINT8 *) Configuration)) {\r
-      Configuration->DynamicOneof = 2;\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
-      //\r
-      // Update uncommitted data of Browser\r
-      //\r
-      HiiSetBrowserData (\r
-        &mFormSetGuid,\r
-        VariableName,\r
-        sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
-        (UINT8 *) Configuration,\r
-        NULL\r
+      HiiUpdateForm (\r
+        PrivateData->HiiHandle[0],  // HII handle\r
+        &mFormSetGuid,              // Formset GUID\r
+        0x1234,                     // Form ID\r
+        StartOpCodeHandle,          // Label for where to insert opcodes\r
+        EndOpCodeHandle             // Replace data\r
         );\r
-    }\r
-    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
-    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
+      HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+      HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+      HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+      break;\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
-    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
+    case 0x5678:\r
+      //\r
+      // We will reach here once the Question is refreshed\r
+      //\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
+      // Initialize the container for dynamic opcodes\r
+      //\r
+      StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+      ASSERT (StartOpCodeHandle != 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
+      // Create Hii Extend Label OpCode as the start opcode\r
+      //\r
+      StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+      StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+      StartLabel->Number       = LABEL_UPDATE2;\r
 \r
-    HiiUpdateForm (\r
-      PrivateData->HiiHandle[0],  // HII handle\r
-      &mFormSetGuid,              // Formset GUID\r
-      0x1234,                     // Form ID\r
-      StartOpCodeHandle,          // Label for where to insert opcodes\r
-      EndOpCodeHandle             // Replace data\r
+      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
-    HiiFreeOpCodeHandle (StartOpCodeHandle);\r
-    HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-    HiiFreeOpCodeHandle (EndOpCodeHandle);\r
-    break;\r
-\r
-  case 0x5678:\r
-    //\r
-    // We will reach here once the Question is refreshed\r
-    //\r
+      HiiUpdateForm (\r
+        PrivateData->HiiHandle[0],  // HII handle\r
+        &mFormSetGuid,              // Formset GUID\r
+        0x3,                        // Form ID\r
+        StartOpCodeHandle,          // Label for where to insert opcodes\r
+        NULL                        // Insert data\r
+        );\r
 \r
-    //\r
-    // Initialize the container for dynamic opcodes\r
-    //\r
-    StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-    ASSERT (StartOpCodeHandle != NULL);\r
+      HiiFreeOpCodeHandle (StartOpCodeHandle);\r
 \r
-    //\r
-    // Create Hii Extend Label OpCode as the start opcode\r
-    //\r
-    StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
-    StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
-    StartLabel->Number       = LABEL_UPDATE2;\r
-\r
-    HiiCreateActionOpCode (\r
-      StartOpCodeHandle,                // Container for dynamic created opcodes\r
-      0x1237,                           // Question ID\r
-      STRING_TOKEN(STR_EXIT_TEXT),      // Prompt text\r
-      STRING_TOKEN(STR_EXIT_TEXT),      // Help text\r
-      EFI_IFR_FLAG_CALLBACK,            // Question flag\r
-      0                                 // Action String ID\r
-    );\r
-\r
-    HiiUpdateForm (\r
-      PrivateData->HiiHandle[0],  // HII handle\r
-      &mFormSetGuid,              // Formset GUID\r
-      0x3,                        // Form ID\r
-      StartOpCodeHandle,          // Label for where to insert opcodes\r
-      NULL                        // Insert data\r
-      );\r
+      //\r
+      // Refresh the Question value\r
+      //\r
+      PrivateData->Configuration.DynamicRefresh++;\r
+      Status = gRT->SetVariable(\r
+                      VariableName,\r
+                      &mFormSetGuid,\r
+                      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                      sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+                      &PrivateData->Configuration\r
+                      );\r
 \r
-    HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+      //\r
+      // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
+      // the first statement in Form 3 be suppressed\r
+      //\r
+      MyVarSize = 1;\r
+      MyVar = 111;\r
+      Status = gRT->SetVariable(\r
+                      L"MyVar",\r
+                      &mFormSetGuid,\r
+                      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+                      MyVarSize,\r
+                      &MyVar\r
+                      );\r
+      break;\r
 \r
-    //\r
-    // Refresh the Question value\r
-    //\r
-    PrivateData->Configuration.DynamicRefresh++;\r
-    Status = gRT->SetVariable(\r
-                    VariableName,\r
-                    &mFormSetGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
-                    &PrivateData->Configuration\r
-                    );\r
+    case 0x1237:\r
+      //\r
+      // User press "Exit now", request Browser to exit\r
+      //\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+      break;\r
 \r
-    //\r
-    // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
-    // the first statement in Form 3 be suppressed\r
-    //\r
-    MyVarSize = 1;\r
-    MyVar = 111;\r
-    Status = gRT->SetVariable(\r
-                    L"MyVar",\r
-                    &mFormSetGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
-                    MyVarSize,\r
-                    &MyVar\r
-                    );\r
-    break;\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 0x1237:\r
-    //\r
-    // User press "Exit now", request Browser to exit\r
-    //\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-    break;\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
-  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
+      // 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 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
+      case BROWSER_STATE_SET_PASSWORD:\r
+        Status = SetPassword (PrivateData, Value->string);\r
+        PrivateData->PasswordState = BROWSER_STATE_VALIDATE_PASSWORD;\r
+        break;\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
+      default:\r
+        break;\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
+    case 0x1111:\r
+      //\r
+      // EfiVarstore question takes sample action (print value as debug information) \r
+      // after read/write question.\r
+      //\r
+      MyVarSize = 1;\r
+      Status = gRT->GetVariable(\r
+                      L"MyVar",\r
+                      &mFormSetGuid,\r
+                      NULL,\r
+                      &MyVarSize,\r
+                      &MyVar\r
+                      );\r
+      ASSERT_EFI_ERROR (Status);\r
+      DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
     default:\r
       break;\r
     }\r
+  }\r
+  break;\r
 \r
-    break;\r
-\r
-  case 0x1111:\r
-    //\r
-    // EfiVarstore question takes sample action (print value as debug information) \r
-    // after read/write question.\r
-    //\r
-    MyVarSize = 1;\r
-    Status = gRT->GetVariable(\r
-                    L"MyVar",\r
-                    &mFormSetGuid,\r
-                    NULL,\r
-                    &MyVarSize,\r
-                    &MyVar\r
-                    );\r
-    ASSERT_EFI_ERROR (Status);\r
-    DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
   default:\r
+    Status = EFI_UNSUPPORTED;\r
     break;\r
   }\r
 \r