X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkNt32Pkg%2FPei%2FFlashMap%2FFlashMap.c;h=ae3ceb9dd7c049cfa3ae01acdd349e330eba352b;hp=a8f7ba06adf9b4699cc0d8317b5353a2f03c380e;hb=d57e875ca3aac3249751b18db03921b6f0cff5fe;hpb=878ddf1fc3540a715f63594ed22b6929e881afb4 diff --git a/EdkNt32Pkg/Pei/FlashMap/FlashMap.c b/EdkNt32Pkg/Pei/FlashMap/FlashMap.c index a8f7ba06ad..ae3ceb9dd7 100644 --- a/EdkNt32Pkg/Pei/FlashMap/FlashMap.c +++ b/EdkNt32Pkg/Pei/FlashMap/FlashMap.c @@ -60,7 +60,9 @@ static EFI_FLASH_AREA_DATA mFlashAreaData[] = { EFI_VARIABLE_STORE_OFFSET, EFI_VARIABLE_STORE_LENGTH, EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, - EFI_FLASH_AREA_EFI_VARIABLES + EFI_FLASH_AREA_EFI_VARIABLES, + 0, 0, 0, + { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // // FTW spare (backup) block @@ -69,7 +71,9 @@ static EFI_FLASH_AREA_DATA mFlashAreaData[] = { EFI_WINNT_FTW_SPARE_BLOCK_OFFSET, EFI_WINNT_FTW_SPARE_BLOCK_LENGTH, EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, - EFI_FLASH_AREA_FTW_BACKUP + EFI_FLASH_AREA_FTW_BACKUP, + 0, 0, 0, + { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // // FTW private working (state) area @@ -78,7 +82,9 @@ static EFI_FLASH_AREA_DATA mFlashAreaData[] = { EFI_FTW_WORKING_OFFSET, EFI_FTW_WORKING_LENGTH, EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, - EFI_FLASH_AREA_FTW_STATE + EFI_FLASH_AREA_FTW_STATE, + 0, 0, 0, + { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // // Recovery FV @@ -87,7 +93,9 @@ static EFI_FLASH_AREA_DATA mFlashAreaData[] = { EFI_WINNT_FIRMWARE_OFFSET, EFI_WINNT_FIRMWARE_LENGTH, EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, - EFI_FLASH_AREA_RECOVERY_BIOS + EFI_FLASH_AREA_RECOVERY_BIOS, + 0, 0, 0, + { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // // System Non-Volatile Storage FV @@ -96,7 +104,9 @@ static EFI_FLASH_AREA_DATA mFlashAreaData[] = { EFI_WINNT_RUNTIME_UPDATABLE_OFFSET, EFI_WINNT_RUNTIME_UPDATABLE_LENGTH + EFI_WINNT_FTW_SPARE_BLOCK_LENGTH, EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, - EFI_FLASH_AREA_GUID_DEFINED + EFI_FLASH_AREA_GUID_DEFINED, + 0, 0, 0, + EFI_SYSTEM_NV_DATA_HOB_GUID }, }; @@ -136,14 +146,14 @@ Returns: // // Install FlashMap PPI // - Status = PeiCoreInstallPpi (&mPpiListFlashMap); + Status = PeiServicesInstallPpi (&mPpiListFlashMap); ASSERT_EFI_ERROR (Status); // // Get the Fwh Information PPI // - Status = PeiCoreLocatePpi ( + Status = PeiServicesLocatePpi ( &gNtFwhPpiGuid, // GUID 0, // INSTANCE &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR @@ -176,6 +186,25 @@ Returns: FlashHobData.SubAreaData.Base = FdBase + (EFI_PHYSICAL_ADDRESS) (UINTN) mFlashAreaData[Index].Base; FlashHobData.SubAreaData.Length = (EFI_PHYSICAL_ADDRESS) (UINTN) mFlashAreaData[Index].Length; + // + // We also update a PCD entry so that any driver that depend on + // PCD entry will get the information. + // + if (FlashHobData.AreaType == EFI_FLASH_AREA_EFI_VARIABLES) { + PcdSet32 (PcdFlashNvStorageVariableBase, (UINT32) FlashHobData.SubAreaData.Base); + PcdSet32 (PcdFlashNvStorageVariableSize, (UINT32) FlashHobData.SubAreaData.Length); + } + + if (FlashHobData.AreaType == EFI_FLASH_AREA_FTW_STATE) { + PcdSet32 (PcdFlashNvStorageFtwWorkingBase, (UINT32) FlashHobData.SubAreaData.Base); + PcdSet32 (PcdFlashNvStorageFtwWorkingSize, (UINT32) FlashHobData.SubAreaData.Length); + } + + if (FlashHobData.AreaType == EFI_FLASH_AREA_FTW_BACKUP) { + PcdSet32 (PcdFlashNvStorageFtwSpareBase, (UINT32) FlashHobData.SubAreaData.Base); + PcdSet32 (PcdFlashNvStorageFtwSpareSize, (UINT32) FlashHobData.SubAreaData.Length); + } + switch (FlashHobData.AreaType) { case EFI_FLASH_AREA_RECOVERY_BIOS: case EFI_FLASH_AREA_MAIN_BIOS: @@ -194,7 +223,7 @@ Returns: case EFI_FLASH_AREA_GUID_DEFINED: (*PeiServices)->CopyMem ( &FlashHobData.AreaTypeGuid, - &gEfiSystemNvDataHobGuid, + &mFlashAreaData[Index].AreaTypeGuid, sizeof (EFI_GUID) ); (*PeiServices)->CopyMem ( @@ -249,14 +278,14 @@ GetAreaInfo ( EFI_PEI_HOB_POINTERS Hob; EFI_HOB_FLASH_MAP_ENTRY_TYPE *FlashMapEntry; - Status = PeiCoreGetHobList (&Hob.Raw); + Status = PeiServicesGetHobList (&Hob.Raw); while (!END_OF_HOB_LIST (Hob)) { if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION && CompareGuid (&Hob.Guid->Name, &gEfiFlashMapHobGuid)) { FlashMapEntry = (EFI_HOB_FLASH_MAP_ENTRY_TYPE *) Hob.Raw; if (AreaType == FlashMapEntry->AreaType) { if (AreaType == EFI_FLASH_AREA_GUID_DEFINED) { if (!CompareGuid (AreaTypeGuid, &FlashMapEntry->AreaTypeGuid)) { - continue; + goto NextHob; } } @@ -265,7 +294,7 @@ GetAreaInfo ( return EFI_SUCCESS; } } - + NextHob: Hob.Raw = GET_NEXT_HOB (Hob); }