X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FDriverSampleDxe%2FDriverSample.c;h=38d36f8a287a26c292f8a5e0c9278c7293870fe1;hp=39e72909daed87a9dfe183f448bf8ce562d66484;hb=086cd2c8e932297641aba4986e3376b202365b5a;hpb=1f1cb2f2166f48a63b54dfc40f43c1a998e00a37 diff --git a/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c b/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c index 39e72909da..38d36f8a28 100644 --- a/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c +++ b/MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c @@ -22,7 +22,6 @@ EFI_GUID mFormSetGuid = FORMSET_GUID; EFI_GUID mInventoryGuid = INVENTORY_GUID; CHAR16 VariableName[] = L"MyIfrNVData"; - EFI_HANDLE DriverHandle[2] = {NULL, NULL}; DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL; @@ -342,17 +341,20 @@ ExtractConfig ( UINTN BufferSize; DRIVER_SAMPLE_PRIVATE_DATA *PrivateData; EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting; - EFI_STRING ConfigRequestHdr; EFI_STRING ConfigRequest; + EFI_STRING ConfigRequestHdr; UINTN Size; - + + if (Progress == NULL || Results == NULL || Request == NULL) { + return EFI_INVALID_PARAMETER; + } // // Initialize the local variables. // - ConfigRequestHdr = NULL; - ConfigRequest = NULL; - Size = 0; - *Progress = Request; + ConfigRequestHdr = NULL; + ConfigRequest = NULL; + Size = 0; + *Progress = Request; PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This); HiiConfigRouting = PrivateData->HiiConfigRouting; @@ -362,46 +364,40 @@ ExtractConfig ( // Try to get the current setting from variable. // BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION); - gRT->GetVariable ( - VariableName, - &mFormSetGuid, - NULL, - &BufferSize, - &PrivateData->Configuration - ); + Status = gRT->GetVariable ( + VariableName, + &mFormSetGuid, + NULL, + &BufferSize, + &PrivateData->Configuration + ); + if (EFI_ERROR (Status)) { + return EFI_NOT_FOUND; + } if (Request == NULL) { // // Request is set to NULL, construct full request string. // - // - // First Set ConfigRequestHdr string. - // - ConfigRequestHdr = HiiConstructConfigHdr (&mFormSetGuid, VariableName, PrivateData->DriverHandle[0]); - ASSERT (ConfigRequestHdr != NULL); - // // Allocate and fill a buffer large enough to hold the template // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator // - Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16); + ConfigRequestHdr = HiiConstructConfigHdr (&mFormSetGuid, VariableName, PrivateData->DriverHandle[0]); + Size = (StrLen (ConfigRequest) + 32 + 1) * sizeof (CHAR16); ConfigRequest = AllocateZeroPool (Size); UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize); FreePool (ConfigRequestHdr); } else { - ConfigRequest = Request; - } - - // - // Check routing data in . - // Note: if only one Storage is used, then this checking could be skipped. - // - if (!HiiIsConfigHdrMatch (ConfigRequest, &mFormSetGuid, VariableName)) { - if (Request == NULL) { - FreePool (ConfigRequest); + // + // Check routing data in . + // Note: if only one Storage is used, then this checking could be skipped. + // + if (!HiiIsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) { + return EFI_NOT_FOUND; } - return EFI_NOT_FOUND; + ConfigRequest = Request; } // @@ -476,13 +472,16 @@ RouteConfig ( // Get Buffer Storage data from EFI variable // BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION); - gRT->GetVariable ( - VariableName, - &mFormSetGuid, - NULL, - &BufferSize, - &PrivateData->Configuration - ); + Status = gRT->GetVariable ( + VariableName, + &mFormSetGuid, + NULL, + &BufferSize, + &PrivateData->Configuration + ); + if (EFI_ERROR (Status)) { + return Status; + } // // Convert to buffer data by helper function ConfigToBlock() @@ -822,12 +821,11 @@ DriverSampleInit ( DRIVER_SAMPLE_CONFIGURATION *Configuration; BOOLEAN ActionFlag; EFI_STRING ConfigRequestHdr; - + // // Initialize the local variables. // ConfigRequestHdr = NULL; - // // Initialize screen dimensions for SendForm(). // Remove 3 characters from top and bottom @@ -968,6 +966,17 @@ DriverSampleInit ( BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION); Status = gRT->GetVariable (VariableName, &mFormSetGuid, NULL, &BufferSize, Configuration); if (EFI_ERROR (Status)) { + // + // Store zero data Buffer Storage to EFI variable + // + Status = gRT->SetVariable( + VariableName, + &mFormSetGuid, + EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, + sizeof (DRIVER_SAMPLE_CONFIGURATION), + Configuration + ); + ASSERT (Status == EFI_SUCCESS); // // EFI variable for NV config doesn't exit, we should build this variable // based on default values stored in IFR