• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   In EndOfPei notify, it will call FspNotifyPhase API.
3 
4   Copyright (c) 2014 - 2015, 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 
16 #include "FspInitPei.h"
17 
18 /**
19   This function handles S3 resume task at the end of PEI
20 
21   @param[in] PeiServices    Pointer to PEI Services Table.
22   @param[in] NotifyDesc     Pointer to the descriptor for the Notification event that
23                             caused this function to execute.
24   @param[in] Ppi            Pointer to the PPI data associated with this function.
25 
26   @retval EFI_STATUS        Always return EFI_SUCCESS
27 **/
28 EFI_STATUS
29 EFIAPI
30 S3EndOfPeiNotify (
31   IN EFI_PEI_SERVICES          **PeiServices,
32   IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
33   IN VOID                      *Ppi
34   );
35 
36 EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc = {
37   (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
38   &gEfiEndOfPeiSignalPpiGuid,
39   S3EndOfPeiNotify
40 };
41 
42 /**
43   This function handles S3 resume task at the end of PEI
44 
45   @param[in] PeiServices    Pointer to PEI Services Table.
46   @param[in] NotifyDesc     Pointer to the descriptor for the Notification event that
47                             caused this function to execute.
48   @param[in] Ppi            Pointer to the PPI data associated with this function.
49 
50   @retval EFI_STATUS        Always return EFI_SUCCESS
51 **/
52 EFI_STATUS
53 EFIAPI
S3EndOfPeiNotify(IN EFI_PEI_SERVICES ** PeiServices,IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyDesc,IN VOID * Ppi)54 S3EndOfPeiNotify (
55   IN EFI_PEI_SERVICES          **PeiServices,
56   IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
57   IN VOID                      *Ppi
58   )
59 {
60   NOTIFY_PHASE_PARAMS NotifyPhaseParams;
61   EFI_STATUS          Status;
62   FSP_INFO_HEADER     *FspHeader;
63 
64   FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));
65   if (FspHeader == NULL) {
66     return EFI_DEVICE_ERROR;
67   }
68 
69   DEBUG ((DEBUG_INFO, "S3EndOfPeiNotify enter\n"));
70 
71   NotifyPhaseParams.Phase = EnumInitPhaseAfterPciEnumeration;
72   Status = CallFspNotifyPhase (FspHeader, &NotifyPhaseParams);
73   DEBUG((DEBUG_INFO, "FSP S3NotifyPhase AfterPciEnumeration status: 0x%x\n", Status));
74 
75   NotifyPhaseParams.Phase = EnumInitPhaseReadyToBoot;
76   Status = CallFspNotifyPhase (FspHeader, &NotifyPhaseParams);
77   DEBUG((DEBUG_INFO, "FSP S3NotifyPhase ReadyToBoot status: 0x%x\n", Status));
78 
79   return EFI_SUCCESS;
80 }
81