123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*++ @file
- Defines data structure that is the volume header found.These data is intent
- to decouple FVB driver with FV header.
- Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
- Portions copyright (c) 2011, Apple Inc. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiDxe.h>
- #include <Guid/EventGroup.h>
- #include <Guid/FirmwareFileSystem2.h>
- #include <Guid/SystemNvDataGuid.h>
- #include <Protocol/FirmwareVolumeBlock.h>
- #include <Protocol/DevicePath.h>
- #include <Library/UefiLib.h>
- #include <Library/UefiDriverEntryPoint.h>
- #include <Library/BaseLib.h>
- #include <Library/DxeServicesTableLib.h>
- #include <Library/UefiRuntimeLib.h>
- #include <Library/DebugLib.h>
- #include <Library/HobLib.h>
- #include <Library/BaseMemoryLib.h>
- #include <Library/MemoryAllocationLib.h>
- #include <Library/UefiBootServicesTableLib.h>
- #include <Library/PcdLib.h>
- #include <Library/DevicePathLib.h>
- typedef struct {
- UINT64 FvLength;
- EFI_FIRMWARE_VOLUME_HEADER FvbInfo;
- //
- // EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0
- //
- EFI_FV_BLOCK_MAP_ENTRY End[1];
- } EFI_FVB_MEDIA_INFO;
- EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = {
- //
- // Recovery BOIS FVB
- //
- {
- FixedPcdGet32 (PcdEmuFlashFvRecoverySize),
- {
- {
- 0,
- }, // ZeroVector[16]
- EFI_FIRMWARE_FILE_SYSTEM2_GUID,
- FixedPcdGet32 (PcdEmuFlashFvRecoverySize),
- EFI_FVH_SIGNATURE,
- EFI_FVB2_READ_ENABLED_CAP |
- EFI_FVB2_READ_STATUS |
- EFI_FVB2_WRITE_ENABLED_CAP |
- EFI_FVB2_WRITE_STATUS |
- EFI_FVB2_ERASE_POLARITY,
- sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),
- 0, // CheckSum
- 0, // ExtHeaderOffset
- {
- 0,
- }, // Reserved[1]
- 2, // Revision
- {
- {
- FixedPcdGet32 (PcdEmuFlashFvRecoverySize)/FixedPcdGet32 (PcdEmuFirmwareBlockSize),
- FixedPcdGet32 (PcdEmuFirmwareBlockSize),
- }
- }
- },
- {
- {
- 0,
- 0
- }
- }
- },
- //
- // Systen NvStorage FVB
- //
- {
- FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \
- FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize),
- {
- {
- 0,
- }, // ZeroVector[16]
- EFI_SYSTEM_NV_DATA_FV_GUID,
- FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \
- FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize),
- EFI_FVH_SIGNATURE,
- EFI_FVB2_READ_ENABLED_CAP |
- EFI_FVB2_READ_STATUS |
- EFI_FVB2_WRITE_ENABLED_CAP |
- EFI_FVB2_WRITE_STATUS |
- EFI_FVB2_ERASE_POLARITY,
- sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY),
- 0, // CheckSum
- 0, // ExtHeaderOffset
- {
- 0,
- }, // Reserved[1]
- 2, // Revision
- {
- {
- (FixedPcdGet32 (PcdFlashNvStorageVariableSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) + \
- FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) + \
- FixedPcdGet32 (PcdEmuFlashNvStorageEventLogSize)) / FixedPcdGet32 (PcdEmuFirmwareBlockSize),
- FixedPcdGet32 (PcdEmuFirmwareBlockSize),
- }
- }
- },
- {
- {
- 0,
- 0
- }
- }
- }
- };
- EFI_STATUS
- GetFvbInfo (
- IN UINT64 FvLength,
- OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
- )
- {
- UINTN Index;
- for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); Index += 1) {
- if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) {
- *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo;
- return EFI_SUCCESS;
- }
- }
- return EFI_NOT_FOUND;
- }
|