\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
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
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
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
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
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
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
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
//\r
UpdateMainForm (ConfigPrivate);\r
}\r
-\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
break;\r
\r
default:\r
*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
}\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