/** @file
  Migrated FV information

Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __EDKII_MIGRATED_FV_INFO_GUID_H__
#define __EDKII_MIGRATED_FV_INFO_GUID_H__

//
// FLAGS_FV_RAW_DATA_COPY indicates FV raw data will be copied to permanent memory
// or not. When FV is migrated to permanent memory, it will be rebased and raw
// data will be lost. This bit can be configured as below values:
// 0: FV raw data will not be used in later phase, and the copy will be skipped to
//    optimize boot performance.
// 1: FV raw data will be copied to permanent memory for later phase use (such as
//    FV measurement).
//
#define FLAGS_FV_RAW_DATA_COPY  BIT0

///
/// In real use cases, not all FVs need migrate to permanent memory before TempRam tears
/// down. EDKII_MIGRATION_INFO hob should be published by platform to indicate which
/// FVs need migration to optimize boot performance. If this hob is not detected by Pei
/// Core, all FVs on TempRam will be migrated and FV raw data will also be copied.
/// Only one EDKII_MIGRATION_INFO hob should be published by platform, and this hob will
/// take effect only when migration feature is enabled by PCD.
///
typedef struct {
  UINT32    FvOrgBaseOnTempRam;        // Original FV address on Temporary Ram
  //
  // FV Migration Flags:
  // Bit0: Indicate to copy FV raw data or not
  // Others: Reserved bits
  //
  UINT32    FvMigrationFlags;
} TO_MIGRATE_FV_INFO;

typedef struct {
  BOOLEAN    MigrateAll;                    // Migrate all FVs and also copy FV raw data
  //
  // ToMigrateFvCount and ToMigrateFvInfo array indicate which FVs need be migrated, and
  // these info should be ignored when MigrateAll field is set to TRUE.
  //
  UINT32     ToMigrateFvCount;
  // TO_MIGRATE_FV_INFO    ToMigrateFvInfo[];
} EDKII_MIGRATION_INFO;

typedef struct {
  UINT32    FvOrgBase;         // original FV address
  UINT32    FvNewBase;         // new FV address
  UINT32    FvDataBase;        // original FV data, 0 means raw data is not copied
  UINT32    FvLength;          // Fv Length
} EDKII_MIGRATED_FV_INFO;

extern EFI_GUID  gEdkiiMigrationInfoGuid;
extern EFI_GUID  gEdkiiMigratedFvInfoGuid;

#endif // #ifndef __EDKII_MIGRATED_FV_INFO_GUID_H__
