summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Include/Guid/MigratedFvInfo.h
blob: 1c8b0dfefc49786eabed25bcc3a469b70e38646a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/** @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__