• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   Build FV related hobs for platform.
3 
4   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #include "PiPei.h"
16 #include "Platform.h"
17 #include <Library/DebugLib.h>
18 #include <Library/HobLib.h>
19 #include <Library/PeiServicesLib.h>
20 #include <Library/PcdLib.h>
21 
22 
23 /**
24   Publish PEI & DXE (Decompressed) Memory based FVs to let PEI
25   and DXE know about them.
26 
27   @retval EFI_SUCCESS   Platform PEI FVs were initialized successfully.
28 
29 **/
30 EFI_STATUS
PeiFvInitialization(VOID)31 PeiFvInitialization (
32   VOID
33   )
34 {
35   BOOLEAN SecureS3Needed;
36 
37   DEBUG ((EFI_D_INFO, "Platform PEI Firmware Volume Initialization\n"));
38 
39   //
40   // Create a memory allocation HOB for the PEI FV.
41   //
42   // Allocate as ACPI NVS is S3 is supported
43   //
44   BuildMemoryAllocationHob (
45     PcdGet32 (PcdOvmfPeiMemFvBase),
46     PcdGet32 (PcdOvmfPeiMemFvSize),
47     mS3Supported ? EfiACPIMemoryNVS : EfiBootServicesData
48     );
49 
50   //
51   // Let DXE know about the DXE FV
52   //
53   BuildFvHob (PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize));
54 
55   SecureS3Needed = mS3Supported && FeaturePcdGet (PcdSmmSmramRequire);
56 
57   //
58   // Create a memory allocation HOB for the DXE FV.
59   //
60   // If "secure" S3 is needed, then SEC will decompress both PEI and DXE
61   // firmware volumes at S3 resume too, hence we need to keep away the OS from
62   // DXEFV as well. Otherwise we only need to keep away DXE itself from the
63   // DXEFV area.
64   //
65   BuildMemoryAllocationHob (
66     PcdGet32 (PcdOvmfDxeMemFvBase),
67     PcdGet32 (PcdOvmfDxeMemFvSize),
68     SecureS3Needed ? EfiACPIMemoryNVS : EfiBootServicesData
69     );
70 
71   //
72   // Additionally, said decompression will use temporary memory above the end
73   // of DXEFV, so let's keep away the OS from there too.
74   //
75   if (SecureS3Needed) {
76     UINT32 DxeMemFvEnd;
77 
78     DxeMemFvEnd = PcdGet32 (PcdOvmfDxeMemFvBase) +
79                   PcdGet32 (PcdOvmfDxeMemFvSize);
80     BuildMemoryAllocationHob (
81       DxeMemFvEnd,
82       PcdGet32 (PcdOvmfDecompressionScratchEnd) - DxeMemFvEnd,
83       EfiACPIMemoryNVS
84       );
85   }
86 
87   //
88   // Let PEI know about the DXE FV so it can find the DXE Core
89   //
90   PeiServicesInstallFvInfoPpi (
91     NULL,
92     (VOID *)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase),
93     PcdGet32 (PcdOvmfDxeMemFvSize),
94     NULL,
95     NULL
96     );
97 
98   return EFI_SUCCESS;
99 }
100 
101