VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c@ 77662

Last change on this file since 77662 was 77662, checked in by vboxsync, 6 years ago

EFI: First step in UDK2018 merge. Does not build yet.

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1/** @file
2 Source file for FSP notify phase PEI module
3
4 Copyright (c) 2016, Intel Corporation. All rights reserved.
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#include "FspNotifyPhasePeim.h"
15
16/**
17
18 This function waits for FSP notify.
19
20 @param This Entry point for DXE IPL PPI.
21 @param PeiServices General purpose services available to every PEIM.
22 @param HobList Address to the Pei HOB list.
23
24 @return EFI_SUCCESS This function never returns.
25
26**/
27EFI_STATUS
28EFIAPI
29WaitForNotify (
30 IN CONST EFI_DXE_IPL_PPI *This,
31 IN EFI_PEI_SERVICES **PeiServices,
32 IN EFI_PEI_HOB_POINTERS HobList
33 );
34
35CONST EFI_DXE_IPL_PPI mDxeIplPpi = {
36 WaitForNotify
37};
38
39CONST EFI_PEI_PPI_DESCRIPTOR mInstallDxeIplPpi = {
40 EFI_PEI_PPI_DESCRIPTOR_PPI,
41 &gEfiDxeIplPpiGuid,
42 (VOID *) &mDxeIplPpi
43};
44
45CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi = {
46 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
47 &gEfiEndOfPeiSignalPpiGuid,
48 NULL
49};
50
51/**
52
53 This function waits for FSP notify.
54
55 @param This Entry point for DXE IPL PPI.
56 @param PeiServices General purpose services available to every PEIM.
57 @param HobList Address to the Pei HOB list.
58
59 @return EFI_SUCCESS This function never returns.
60
61**/
62EFI_STATUS
63EFIAPI
64WaitForNotify (
65 IN CONST EFI_DXE_IPL_PPI *This,
66 IN EFI_PEI_SERVICES **PeiServices,
67 IN EFI_PEI_HOB_POINTERS HobList
68 )
69{
70 EFI_STATUS Status;
71
72 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP HOB is located at 0x%08X\n", HobList));
73
74 //
75 // End of PEI phase signal
76 //
77 Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);
78 ASSERT_EFI_ERROR (Status);
79
80 //
81 // Give control back to BootLoader after FspSiliconInit
82 //
83 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP is waiting for NOTIFY\n"));
84 FspSiliconInitDone2 (EFI_SUCCESS);
85
86 //
87 // BootLoader called FSP again through NotifyPhase
88 //
89 FspWaitForNotify ();
90
91 //
92 // Should not come here
93 //
94 while (TRUE) {
95 DEBUG ((DEBUG_ERROR, "No FSP API should be called after FSP is DONE!\n"));
96 SetFspApiReturnStatus (EFI_UNSUPPORTED);
97 Pei2LoaderSwitchStack ();
98 }
99
100 return EFI_SUCCESS;
101}
102
103/**
104 FSP notify phase PEI module entry point
105
106 @param[in] FileHandle Not used.
107 @param[in] PeiServices General purpose services available to every PEIM.
108
109 @retval EFI_SUCCESS The function completes successfully
110 @retval EFI_OUT_OF_RESOURCES Insufficient resources to create database
111**/
112EFI_STATUS
113FspNotifyPhasePeimEntryPoint (
114 IN EFI_PEI_FILE_HANDLE FileHandle,
115 IN CONST EFI_PEI_SERVICES **PeiServices
116 )
117{
118 EFI_STATUS Status;
119 VOID *OldDxeIplPpi;
120 EFI_PEI_PPI_DESCRIPTOR *OldDescriptor;
121
122 DEBUG ((DEBUG_INFO | DEBUG_INIT, "The entry of FspNotificationPeim\n"));
123
124 //
125 // Locate old DXE IPL PPI
126 //
127 Status = PeiServicesLocatePpi (
128 &gEfiDxeIplPpiGuid,
129 0,
130 &OldDescriptor,
131 &OldDxeIplPpi
132 );
133 ASSERT_EFI_ERROR (Status);
134
135 //
136 // Re-install the DXE IPL PPI to wait for notify
137 //
138 Status = PeiServicesReInstallPpi (OldDescriptor, &mInstallDxeIplPpi);
139 ASSERT_EFI_ERROR (Status);
140
141 return EFI_SUCCESS;
142}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette