X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkNt32Pkg%2FPei%2FFlashMap%2FFlashMap.c;h=ae3ceb9dd7c049cfa3ae01acdd349e330eba352b;hp=54dc137a765cac4200b84db1dcc0db800a70113c;hb=7f0ceb225d52f43a9a133f7e5b2f137bcb268ec7;hpb=dd70a8c4e6c8c439dfcc7c94c478c76ab8fda1ec diff --git a/EdkNt32Pkg/Pei/FlashMap/FlashMap.c b/EdkNt32Pkg/Pei/FlashMap/FlashMap.c index 54dc137a76..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 }, }; @@ -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 ( @@ -202,12 +231,6 @@ Returns: &gEfiFirmwareVolumeBlockProtocolGuid, sizeof (EFI_GUID) ); - - // - // We also update a PCD entry so that any driver that depend on - // PCD entry PcdFlashNvStorageVariableBase will get the information. - // - PcdSet32 (PcdFlashNvStorageVariableBase, (UINT32) FlashHobData.SubAreaData.Base); break; default: @@ -262,7 +285,7 @@ GetAreaInfo ( if (AreaType == FlashMapEntry->AreaType) { if (AreaType == EFI_FLASH_AREA_GUID_DEFINED) { if (!CompareGuid (AreaTypeGuid, &FlashMapEntry->AreaTypeGuid)) { - continue; + goto NextHob; } } @@ -271,7 +294,7 @@ GetAreaInfo ( return EFI_SUCCESS; } } - + NextHob: Hob.Raw = GET_NEXT_HOB (Hob); }