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)
 | |
| 
 |