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 <[email protected]>
---
 .../Universal/Disk/RamDiskDxe/RamDiskHii.vfr       |   9 +-
 .../Universal/Disk/RamDiskDxe/RamDiskImpl.c        | 146 ++++-----------------
 .../Universal/Disk/RamDiskDxe/RamDiskImpl.h        |   2 +
 .../Universal/Disk/RamDiskDxe/RamDiskNVData.h      |   2 -
 4 files changed, 33 insertions(+), 126 deletions(-)

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

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to