Home | History | Annotate | Download | only in Ia32
      1 ;; @file
      2 ;  Provide FSP API entry points.
      3 ;
      4 ; Copyright (c) 2016, 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     SECTION .text
     15 
     16 ;
     17 ; Following functions will be provided in C
     18 ;
     19 extern ASM_PFX(Loader2PeiSwitchStack)
     20 extern ASM_PFX(FspApiCallingCheck)
     21 
     22 ;
     23 ; Following functions will be provided in ASM
     24 ;
     25 extern ASM_PFX(FspApiCommonContinue)
     26 extern ASM_PFX(AsmGetFspInfoHeader)
     27 
     28 ;----------------------------------------------------------------------------
     29 ; FspApiCommon API
     30 ;
     31 ; This is the FSP API common entry point to resume the FSP execution
     32 ;
     33 ;----------------------------------------------------------------------------
     34 global ASM_PFX(FspApiCommon)
     35 ASM_PFX(FspApiCommon):
     36   ;
     37   ; EAX holds the API index
     38   ;
     39 
     40   ;
     41   ; Stack must be ready
     42   ;
     43   push   eax
     44   add    esp, 4
     45   cmp    eax, dword  [esp - 4]
     46   jz     FspApiCommon1
     47   mov    eax, 080000003h
     48   jmp    exit
     49 
     50 FspApiCommon1:
     51   ;
     52   ; Verify the calling condition
     53   ;
     54   pushad
     55   push   DWORD [esp + (4 * 8 + 4)]  ; push ApiParam
     56   push   eax                ; push ApiIdx
     57   call   ASM_PFX(FspApiCallingCheck)
     58   add    esp, 8
     59   cmp    eax, 0
     60   jz     FspApiCommon2
     61   mov    dword  [esp + (4 * 7)], eax
     62   popad
     63 exit:
     64   ret
     65 
     66 FspApiCommon2:
     67   popad
     68   cmp    eax, 3   ; FspMemoryInit API
     69   jz     FspApiCommon3
     70 
     71   call   ASM_PFX(AsmGetFspInfoHeader)
     72   jmp    ASM_PFX(Loader2PeiSwitchStack)
     73 
     74 FspApiCommon3:
     75   jmp    ASM_PFX(FspApiCommonContinue)
     76 
     77