X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFspPkg%2FLibrary%2FBaseFspPlatformLib%2FFspPlatformNotify.c;h=9005ef25a33b5f3efed144fcdbb274a9dabecf50;hp=d405233e41e208dd4262044b652ed981d98d2d5e;hb=16a16ea6e39a92971cd60fdbd642c3c6f2b4be6f;hpb=8e89d9ceeb3a69f3554471095ded6b0496fa541e diff --git a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c index d405233e41..9005ef25a3 100644 --- a/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c +++ b/IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformNotify.c @@ -1,13 +1,7 @@ /** @file - Copyright (c) 2014, Intel Corporation. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php. - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -89,7 +83,7 @@ FspNotificationHandler ( /** This function transfer control to the ContinuationFunc passed in by the - bootloader. + BootLoader. **/ VOID @@ -98,32 +92,49 @@ FspInitDone ( VOID ) { - FSP_INIT_PARAMS *FspInitParams; - - FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter (); + FSP_INIT_PARAMS *FspInitParams; - // - // Modify the parameters for ContinuationFunc - // - SetFspContinuationFuncParameter(EFI_SUCCESS, 0); - SetFspContinuationFuncParameter((UINT32)GetHobList(), 1); + if (GetFspApiCallingMode() == 0) { + // + // FspInit API is used, so jump into the ContinuationFunc + // + FspInitParams = (FSP_INIT_PARAMS *)GetFspApiParameter (); + + // + // Modify the parameters for ContinuationFunc + // + SetFspContinuationFuncParameter(EFI_SUCCESS, 0); + SetFspContinuationFuncParameter((UINT32)GetHobList(), 1); + + // + // Modify the return address to ContinuationFunc + // + SetFspApiReturnAddress((UINT32)FspInitParams->ContinuationFunc); + + // + // Give control back to the boot loader framework caller after FspInit is done + // It is done throught the continuation function + // + SetFspMeasurePoint (FSP_PERF_ID_API_FSPINIT_EXIT); + } else { + // + // FspMemoryInit API is used, so return directly + // - // - // Modify the return address to ContinuationFunc - // - SetFspApiReturnAddress((UINT32)FspInitParams->ContinuationFunc); + // + // This is the end of the FspSiliconInit API + // Give control back to the boot loader + // + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n")); + SetFspApiReturnStatus (EFI_SUCCESS); + } - // - // Give control back to the boot loader framework caller after FspInit is done - // It is done throught the continuation function - // - SetFspMeasurePoint (FSP_PERF_ID_API_FSPINIT_EXIT); Pei2LoaderSwitchStack(); } /** - This function handle NotifyPhase API call from the bootloader. - It gives control back to the bootloader after it is handled. If the + This function handle NotifyPhase API call from the BootLoader. + It gives control back to the BootLoader after it is handled. If the Notification code is a ReadyToBoot event, this function will return and FSP continues the remaining execution until it reaches the DxeIpl. @@ -151,12 +162,14 @@ FspWaitForNotify ( // // Notify code does not follow the predefined order // + DEBUG ((DEBUG_INFO, "Unsupported FSP Notification Value\n")); SetFspApiReturnStatus(EFI_UNSUPPORTED); } else { // // Process Notification and Give control back to the boot loader framework caller // Status = FspNotificationHandler (NotificationValue); + DEBUG ((DEBUG_INFO, "FSP Notification Handler Returns : 0x%08X\n", Status)); SetFspApiReturnStatus(Status); if (!EFI_ERROR(Status)) { NotificationCount++;