]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg RamDiskDxe: Do not save 'Size' numeric value by varstore
authorHao Wu <hao.a.wu@intel.com>
Mon, 6 Jun 2016 05:02:52 +0000 (13:02 +0800)
committerHao Wu <hao.a.wu@intel.com>
Sun, 12 Jun 2016 03:11:25 +0000 (11:11 +0800)
The 'Size' numeric value used when creating a raw RAM disk does not
require a varstore to save its previous value in the create raw RAM disk
HII page.

The expecting behavior is that after a user created a raw RAM disk, the
next time when the create raw RAM disk page is entered, the 'Size' numeric
will be the default value (EFI_PAGE_SIZE).

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Tapan Shah <tapandshah@hpe.com>
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskHii.vfr
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.c
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskNVData.h

index 9c3e3e44d24524455c224f02e3dc0b6f7ebdbeb8..270f791007d7126dc52375bb240c587964f1859e 100644 (file)
@@ -20,11 +20,6 @@ formset
   help      = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),\r
   classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,\r
 \r
-  varstore RAM_DISK_CONFIGURATION,\r
-    varid = RAM_DISK_CONFIGURATION_VARSTORE_ID,\r
-    name  = RAM_DISK_CONFIGURATION,\r
-    guid  = RAM_DISK_FORM_SET_GUID;\r
-\r
   //\r
   // Form #1 "Main Form - Add/Remove/Show RAM Disks"\r
   //\r
@@ -65,11 +60,11 @@ formset
 \r
     subtitle text = STRING_TOKEN(STR_RAM_DISK_NULL_STRING);\r
 \r
-    numeric varid   = RAM_DISK_CONFIGURATION.Size,\r
+    numeric\r
       questionid = CREATE_RAW_SIZE_QUESTION_ID,\r
       prompt  = STRING_TOKEN(STR_SIZE_PROMPT),\r
       help    = STRING_TOKEN(STR_SIZE_HELP),\r
-      flags   = DISPLAY_UINT_HEX | INTERACTIVE,\r
+      flags   = NUMERIC_SIZE_8 | DISPLAY_UINT_HEX | INTERACTIVE,\r
       minimum = 1,\r
       maximum = 0xFFFFFFFFFFFFFFFF,\r
     endnumeric;\r
index f402440e45b2d9d2b6c37a7a8bfc1d0942647c09..304d5d75cbc6c9bf472664787876336eec861f6b 100644 (file)
@@ -18,6 +18,9 @@ CHAR16  mRamDiskStorageName[] = L"RAM_DISK_CONFIGURATION";
 \r
 RAM_DISK_CONFIG_PRIVATE_DATA mRamDiskConfigPrivateDataTemplate = {\r
   RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE,\r
+  {\r
+    EFI_PAGE_SIZE\r
+  },\r
   {\r
     RamDiskExtractConfig,\r
     RamDiskRouteConfig,\r
@@ -234,87 +237,11 @@ RamDiskExtractConfig (
        OUT EFI_STRING                       *Results\r
   )\r
 {\r
-  EFI_STATUS                       Status;\r
-  UINTN                            BufferSize;\r
-  RAM_DISK_CONFIGURATION           *Configuration;\r
-  EFI_STRING                       ConfigRequest;\r
-  EFI_STRING                       ConfigRequestHdr;\r
-  RAM_DISK_CONFIG_PRIVATE_DATA     *ConfigPrivate;\r
-  UINTN                            Size;\r
-  BOOLEAN                          AllocatedRequest;\r
-\r
   if (Progress == NULL || Results == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
-\r
   *Progress = Request;\r
-  if ((Request != NULL) &&\r
-    !HiiIsConfigHdrMatch (Request, &gRamDiskFormSetGuid, mRamDiskStorageName)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  ConfigRequestHdr = NULL;\r
-  ConfigRequest    = NULL;\r
-  AllocatedRequest = FALSE;\r
-  Size             = 0;\r
-\r
-  //\r
-  // Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
-  //\r
-  ConfigPrivate = RAM_DISK_CONFIG_PRIVATE_FROM_THIS (This);\r
-  BufferSize = sizeof (RAM_DISK_CONFIGURATION);\r
-  Configuration = AllocateZeroPool (BufferSize);\r
-  if (Configuration == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  ConfigRequest = Request;\r
-  if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {\r
-    //\r
-    // Request has no request element, construct full request string.\r
-    // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
-    // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
-    //\r
-    ConfigRequestHdr = HiiConstructConfigHdr (\r
-                         &gRamDiskFormSetGuid,\r
-                         mRamDiskStorageName,\r
-                         ConfigPrivate->DriverHandle\r
-                         );\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
-    FreePool (ConfigRequestHdr);\r
-  }\r
-\r
-  Status = gHiiConfigRouting->BlockToConfig (\r
-                                gHiiConfigRouting,\r
-                                ConfigRequest,\r
-                                (UINT8 *) &Configuration,\r
-                                BufferSize,\r
-                                Results,\r
-                                Progress\r
-                                );\r
-  //\r
-  // Free the allocated config request string and RAM disk configuration data.\r
-  //\r
-  if (AllocatedRequest) {\r
-    FreePool (ConfigRequest);\r
-    ConfigRequest = NULL;\r
-  }\r
-  FreePool (Configuration);\r
-\r
-  //\r
-  // Set Progress string to the original request string.\r
-  //\r
-  if (Request == NULL) {\r
-    *Progress = NULL;\r
-  } else if (StrStr (Request, L"OFFSET") == NULL) {\r
-    *Progress = Request + StrLen (Request);\r
-  }\r
-\r
-  return Status;\r
+  return EFI_NOT_FOUND;\r
 }\r
 \r
 \r
@@ -348,14 +275,7 @@ RamDiskRouteConfig (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  *Progress = Configuration;\r
-  if (!HiiIsConfigHdrMatch (Configuration, &gRamDiskFormSetGuid, mRamDiskStorageName)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  *Progress = Configuration + StrLen (Configuration);\r
-\r
-  return EFI_SUCCESS;\r
+  return EFI_NOT_FOUND;\r
 }\r
 \r
 \r
@@ -416,6 +336,22 @@ HiiCreateRamDisk (
     Size = FileInformation->FileSize;\r
   }\r
 \r
+  if (Size > (UINTN) -1) {\r
+    do {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"",\r
+        L"The given RAM disk size is too large!",\r
+        L"Press ENTER to continue ...",\r
+        L"",\r
+        NULL\r
+        );\r
+    } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
+\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
   StartingAddr = (UINTN) AllocatePool ((UINTN) Size);\r
   if (0 == StartingAddr) {\r
     do {\r
@@ -641,7 +577,6 @@ RamDiskCallback (
   EFI_STATUS                      Status;\r
   RAM_DISK_PRIVATE_DATA           *PrivateData;\r
   RAM_DISK_CONFIG_PRIVATE_DATA    *ConfigPrivate;\r
-  RAM_DISK_CONFIGURATION          *Configuration;\r
   EFI_DEVICE_PATH_PROTOCOL        *FileDevPath;\r
   EFI_FILE_HANDLE                 FileHandle;\r
   LIST_ENTRY                      *Entry;\r
@@ -651,10 +586,13 @@ RamDiskCallback (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  ConfigPrivate = RAM_DISK_CONFIG_PRIVATE_FROM_THIS (This);\r
+\r
   if (Action == EFI_BROWSER_ACTION_RETRIEVE) {\r
     Status = EFI_UNSUPPORTED;\r
     if (QuestionId == CREATE_RAW_SIZE_QUESTION_ID) {\r
       Value->u64 = EFI_PAGE_SIZE;\r
+      ConfigPrivate->ConfigStore.Size = EFI_PAGE_SIZE;\r
       Status = EFI_SUCCESS;\r
     }\r
     return Status;\r
@@ -666,8 +604,6 @@ RamDiskCallback (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  ConfigPrivate = RAM_DISK_CONFIG_PRIVATE_FROM_THIS (This);\r
-\r
   //\r
   // Update the RAM disk list show at the main form first.\r
   //\r
@@ -680,23 +616,8 @@ RamDiskCallback (
     return Status;\r
   }\r
 \r
-  //\r
-  // Get Browser data\r
-  //\r
-  Configuration = AllocateZeroPool (sizeof (RAM_DISK_CONFIGURATION));\r
-  if (Configuration == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
   Status = EFI_SUCCESS;\r
 \r
-  HiiGetBrowserData (\r
-    &gRamDiskFormSetGuid,\r
-    mRamDiskStorageName,\r
-    sizeof (RAM_DISK_CONFIGURATION),\r
-    (UINT8 *) Configuration\r
-    );\r
-\r
   if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
     switch (QuestionId) {\r
     case MAIN_GOTO_FILE_EXPLORER_ID:\r
@@ -733,8 +654,6 @@ RamDiskCallback (
         //\r
         UpdateMainForm (ConfigPrivate);\r
       }\r
-\r
-      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
       break;\r
 \r
     default:\r
@@ -760,11 +679,15 @@ RamDiskCallback (
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
       break;\r
 \r
+    case CREATE_RAW_SIZE_QUESTION_ID:\r
+      ConfigPrivate->ConfigStore.Size = Value->u64;\r
+      break;\r
+\r
     case CREATE_RAW_SUBMIT_QUESTION_ID:\r
       //\r
       // Create raw, FileHandle is NULL.\r
       //\r
-      Status = HiiCreateRamDisk (Configuration->Size, NULL);\r
+      Status = HiiCreateRamDisk (ConfigPrivate->ConfigStore.Size, NULL);\r
       if (EFI_ERROR (Status)) {\r
         break;\r
       }\r
@@ -798,16 +721,5 @@ RamDiskCallback (
     }\r
   }\r
 \r
-  if (!EFI_ERROR (Status)) {\r
-    HiiSetBrowserData (\r
-      &gRamDiskFormSetGuid,\r
-      mRamDiskStorageName,\r
-      sizeof (RAM_DISK_CONFIGURATION),\r
-      (UINT8 *) Configuration,\r
-      NULL\r
-      );\r
-  }\r
-  FreePool (Configuration);\r
-\r
   return EFI_SUCCESS;\r
 }\r
index d660ab936672b9fd7fab89b107d84882b3c15efb..d5c99a4fa629a5fd259202ba4d79acd0668fd5fe 100644 (file)
@@ -136,6 +136,8 @@ typedef struct {
 typedef struct {\r
   UINTN                           Signature;\r
 \r
+  RAM_DISK_CONFIGURATION          ConfigStore;\r
+\r
   EFI_HII_CONFIG_ACCESS_PROTOCOL  ConfigAccess;\r
   EFI_HANDLE                      DriverHandle;\r
   EFI_HII_HANDLE                  HiiHandle;\r
index 1426320121e9aca6a13da657c8a0d7a98523f7d8..89d1d5a786e0267052b5b2a6d75b38556a4cb21e 100644 (file)
@@ -18,8 +18,6 @@
 #include <Guid/HiiPlatformSetupFormset.h>\r
 #include <Guid/RamDiskHii.h>\r
 \r
-#define RAM_DISK_CONFIGURATION_VARSTORE_ID  0x0001\r
-\r
 #define MAIN_FORM_ID                        0x1000\r
 #define MAIN_GOTO_FILE_EXPLORER_ID          0x1001\r
 #define MAIN_REMOVE_RD_QUESTION_ID          0x1002\r