REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2698 To enhance FSP silicon initialization flexibility an optional Multi-Phase API is introduced and FSP header needs update for new API offset. Also new SecCore module created for FspMultiPhaseSiInit API New ARCH_UPD introduced for enhancing FSP debug message flexibility now bootloader can pass its own debug handler function pointer and FSP will call the function to handle debug message. To support calling bootloader functions, a FspGlobalData field added to indicate if FSP needs to switch stack when FSP running on separate stack from bootloader. Cc: Maurice Ma <maurice.ma@intel.com> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> Cc: Star Zeng <star.zeng@intel.com> Signed-off-by: Chasel Chiu <chasel.chiu@intel.com> Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
74 lines
1.6 KiB
NASM
74 lines
1.6 KiB
NASM
;; @file
|
|
; Provide FSP API entry points.
|
|
;
|
|
; Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
|
|
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
;;
|
|
|
|
SECTION .text
|
|
|
|
;
|
|
; Following functions will be provided in C
|
|
;
|
|
extern ASM_PFX(Loader2PeiSwitchStack)
|
|
extern ASM_PFX(FspApiCallingCheck)
|
|
|
|
;
|
|
; Following functions will be provided in ASM
|
|
;
|
|
extern ASM_PFX(FspApiCommonContinue)
|
|
extern ASM_PFX(AsmGetFspInfoHeader)
|
|
|
|
;----------------------------------------------------------------------------
|
|
; FspApiCommon API
|
|
;
|
|
; This is the FSP API common entry point to resume the FSP execution
|
|
;
|
|
;----------------------------------------------------------------------------
|
|
global ASM_PFX(FspApiCommon)
|
|
ASM_PFX(FspApiCommon):
|
|
;
|
|
; EAX holds the API index
|
|
;
|
|
|
|
;
|
|
; Stack must be ready
|
|
;
|
|
push eax
|
|
add esp, 4
|
|
cmp eax, dword [esp - 4]
|
|
jz FspApiCommon1
|
|
mov eax, 080000003h
|
|
jmp exit
|
|
|
|
FspApiCommon1:
|
|
;
|
|
; Verify the calling condition
|
|
;
|
|
pushad
|
|
push DWORD [esp + (4 * 8 + 4)] ; push ApiParam
|
|
push eax ; push ApiIdx
|
|
call ASM_PFX(FspApiCallingCheck)
|
|
add esp, 8
|
|
cmp eax, 0
|
|
jz FspApiCommon2
|
|
mov dword [esp + (4 * 7)], eax
|
|
popad
|
|
exit:
|
|
ret
|
|
|
|
FspApiCommon2:
|
|
popad
|
|
cmp eax, 3 ; FspMemoryInit API
|
|
jz FspApiCommon3
|
|
|
|
cmp eax, 6 ; FspMultiPhaseSiInitApiIndex API
|
|
jz FspApiCommon3
|
|
|
|
call ASM_PFX(AsmGetFspInfoHeader)
|
|
jmp ASM_PFX(Loader2PeiSwitchStack)
|
|
|
|
FspApiCommon3:
|
|
jmp ASM_PFX(FspApiCommonContinue)
|
|
|