Reviewed-by: Giri P Mudusuru <[email protected]> 

> -----Original Message-----
> From: Gao, Liming
> Sent: Friday, July 8, 2016 7:49 AM
> To: [email protected]
> Cc: Yao, Jiewen <[email protected]>; Mudusuru, Giri P
> <[email protected]>
> Subject: [Patch 2/5] IntelFsp2WrapperPkg
> SecFspWrapperPlatformSecLibSample: Remove MASM/GAS files
> 
> Keep NASM file only for new added modules.
> 
> Cc: Jiewen Yao <[email protected]>
> Cc: Giri Mudusuru <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Liming Gao <[email protected]>
> ---
>  .../Ia32/PeiCoreEntry.S                            | 130 --------
>  .../Ia32/PeiCoreEntry.asm                          | 140 --------
>  .../Ia32/SecEntry.S                                | 336 --------------------
>  .../Ia32/SecEntry.asm                              | 353 
> ---------------------
>  .../SecFspWrapperPlatformSecLibSample/Ia32/Stack.S |  77 -----
>  .../Ia32/Stack.asm                                 |  82 -----
>  .../SecFspWrapperPlatformSecLibSample.inf          |   6 -
>  7 files changed, 1124 deletions(-)
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/PeiCo
> reEntry.S
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/PeiCo
> reEntry.asm
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/SecEn
> try.S
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/SecEn
> try.asm
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Stack.
> S
>  delete mode 100644
> IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Stack.
> asm
> 
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.S
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.S
> deleted file mode 100644
> index c35f02b..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.S
> +++ /dev/null
> @@ -1,130 +0,0 @@
> -#------------------------------------------------------------------------------
> -#
> -# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -# 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.
> -#
> -# Module Name:
> -#
> -#  PeiCoreEntry.S
> -#
> -# Abstract:
> -#
> -#   Find and call SecStartup
> -#
> -#------------------------------------------------------------------------------
> -
> -ASM_GLOBAL ASM_PFX(CallPeiCoreEntryPoint)
> -ASM_PFX(CallPeiCoreEntryPoint):
> -  #
> -  # Obtain the hob list pointer
> -  #
> -  movl    0x4(%esp), %eax
> -  #
> -  # Obtain the stack information
> -  #   ECX: start of range
> -  #   EDX: end of range
> -  #
> -  movl    0x8(%esp), %ecx
> -  movl    0xC(%esp), %edx
> -
> -  #
> -  # Platform init
> -  #
> -  pushal
> -  pushl %edx
> -  pushl %ecx
> -  pushl %eax
> -  call  ASM_PFX(PlatformInit)
> -  popl  %eax
> -  popl  %eax
> -  popl  %eax
> -  popal
> -
> -  #
> -  # Set stack top pointer
> -  #
> -  movl    %edx, %esp
> -
> -  #
> -  # Push the hob list pointer
> -  #
> -  pushl   %eax
> -
> -  #
> -  # Save the value
> -  #   ECX: start of range
> -  #   EDX: end of range
> -  #
> -  movl    %esp, %ebp
> -  pushl   %ecx
> -  pushl   %edx
> -
> -  #
> -  # Push processor count to stack first, then BIST status (AP then BSP)
> -  #
> -  movl    $1, %eax
> -  cpuid
> -  shr     $16, %ebx
> -  andl    $0x000000FF, %ebx
> -  cmp     $1, %bl
> -  jae     PushProcessorCount
> -
> -  #
> -  # Some processors report 0 logical processors.  Effectively 0 = 1.
> -  # So we fix up the processor count
> -  #
> -  inc     %ebx
> -
> -PushProcessorCount:
> -  pushl   %ebx
> -
> -  #
> -  # We need to implement a long-term solution for BIST capture.  For now, we
> just copy BSP BIST
> -  # for all processor threads
> -  #
> -  xorl    %ecx, %ecx
> -  movb    %bl, %cl
> -PushBist:
> -  movd    %mm0, %eax
> -  pushl   %eax
> -  loop    PushBist
> -
> -  # Save Time-Stamp Counter
> -  movd  %mm5, %eax
> -  pushl %eax
> -
> -  movd  %mm6, %eax
> -  pushl %eax
> -
> -  #
> -  # Pass entry point of the PEI core
> -  #
> -  movl    $0xFFFFFFE0, %edi
> -  pushl   %ds:(%edi)
> -
> -  #
> -  # Pass BFV into the PEI Core
> -  #
> -  movl    $0xFFFFFFFC, %edi
> -  pushl   %ds:(%edi)
> -
> -  #
> -  # Pass stack size into the PEI Core
> -  #
> -  movl    -4(%ebp), %ecx
> -  movl    -8(%ebp), %edx
> -  pushl   %ecx       # RamBase
> -
> -  subl    %ecx, %edx
> -  pushl   %edx       # RamSize
> -
> -  #
> -  # Pass Control into the PEI Core
> -  #
> -  call ASM_PFX(SecStartup)
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.asm
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.asm
> deleted file mode 100644
> index cd1c7b8..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Pei
> CoreEntry.asm
> +++ /dev/null
> @@ -1,140 +0,0 @@
> -;------------------------------------------------------------------------------
> -;
> -; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -; 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.
> -;
> -; Module Name:
> -;
> -;  PeiCoreEntry.asm
> -;
> -; Abstract:
> -;
> -;   Find and call SecStartup
> -;
> -;------------------------------------------------------------------------------
> -
> -.686p
> -.xmm
> -.model flat, c
> -.code
> -
> -EXTRN   SecStartup:NEAR
> -EXTRN   PlatformInit:NEAR
> -
> -CallPeiCoreEntryPoint   PROC PUBLIC
> -  ;
> -  ; Obtain the hob list pointer
> -  ;
> -  mov     eax, [esp+4]
> -  ;
> -  ; Obtain the stack information
> -  ;   ECX: start of range
> -  ;   EDX: end of range
> -  ;
> -  mov     ecx, [esp+8]
> -  mov     edx, [esp+0Ch]
> -
> -  ;
> -  ; Platform init
> -  ;
> -  pushad
> -  push edx
> -  push ecx
> -  push eax
> -  call PlatformInit
> -  pop  eax
> -  pop  eax
> -  pop  eax
> -  popad
> -
> -  ;
> -  ; Set stack top pointer
> -  ;
> -  mov     esp, edx
> -
> -  ;
> -  ; Push the hob list pointer
> -  ;
> -  push    eax
> -
> -  ;
> -  ; Save the value
> -  ;   ECX: start of range
> -  ;   EDX: end of range
> -  ;
> -  mov     ebp, esp
> -  push    ecx
> -  push    edx
> -
> -  ;
> -  ; Push processor count to stack first, then BIST status (AP then BSP)
> -  ;
> -  mov     eax, 1
> -  cpuid
> -  shr     ebx, 16
> -  and     ebx, 0000000FFh
> -  cmp     bl, 1
> -  jae     PushProcessorCount
> -
> -  ;
> -  ; Some processors report 0 logical processors.  Effectively 0 = 1.
> -  ; So we fix up the processor count
> -  ;
> -  inc     ebx
> -
> -PushProcessorCount:
> -  push    ebx
> -
> -  ;
> -  ; We need to implement a long-term solution for BIST capture.  For now, we
> just copy BSP BIST
> -  ; for all processor threads
> -  ;
> -  xor     ecx, ecx
> -  mov     cl, bl
> -PushBist:
> -  movd    eax, mm0
> -  push    eax
> -  loop    PushBist
> -
> -  ; Save Time-Stamp Counter
> -  movd eax, mm5
> -  push eax
> -
> -  movd eax, mm6
> -  push eax
> -
> -  ;
> -  ; Pass entry point of the PEI core
> -  ;
> -  mov     edi, 0FFFFFFE0h
> -  push    DWORD PTR ds:[edi]
> -
> -  ;
> -  ; Pass BFV into the PEI Core
> -  ;
> -  mov     edi, 0FFFFFFFCh
> -  push    DWORD PTR ds:[edi]
> -
> -  ;
> -  ; Pass stack size into the PEI Core
> -  ;
> -  mov     ecx, [ebp - 4]
> -  mov     edx, [ebp - 8]
> -  push    ecx       ; RamBase
> -
> -  sub     edx, ecx
> -  push    edx       ; RamSize
> -
> -  ;
> -  ; Pass Control into the PEI Core
> -  ;
> -  call SecStartup
> -CallPeiCoreEntryPoint   ENDP
> -
> -END
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.S
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.S
> deleted file mode 100644
> index aff77f6..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.S
> +++ /dev/null
> @@ -1,336 +0,0 @@
> -#------------------------------------------------------------------------------
> -#
> -# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -# 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.
> -#
> -# Module Name:
> -#
> -#  SecEntry.S
> -#
> -# Abstract:
> -#
> -#  This is the code that goes from real-mode to protected mode.
> -#  It consumes the reset vector, calls TempRamInit API from FSP binary.
> -#
> -#------------------------------------------------------------------------------
> -
> -#include "Fsp.h"
> -
> -ASM_GLOBAL    ASM_PFX(_gPcd_FixedAtBuild_PcdFsptBaseAddress)
> -
> -ASM_GLOBAL ASM_PFX(_TEXT_REALMODE)
> -ASM_PFX(_TEXT_REALMODE):
> -#----------------------------------------------------------------------------
> -#
> -# Procedure:    _ModuleEntryPoint
> -#
> -# Input:        None
> -#
> -# Output:       None
> -#
> -# Destroys:     Assume all registers
> -#
> -# Description:
> -#
> -#   Transition to non-paged flat-model protected mode from a
> -#   hard-coded GDT that provides exactly two descriptors.
> -#   This is a bare bones transition to protected mode only
> -#   used for a while in PEI and possibly DXE.
> -#
> -#   After enabling protected mode, a far jump is executed to
> -#   transfer to PEI using the newly loaded GDT.
> -#
> -# Return:       None
> -#
> -#  MMX Usage:
> -#              MM0 = BIST State
> -#              MM5 = Save time-stamp counter value high32bit
> -#              MM6 = Save time-stamp counter value low32bit.
> -#
> -#----------------------------------------------------------------------------
> -
> -.align 4
> -ASM_GLOBAL ASM_PFX(_ModuleEntryPoint)
> -ASM_PFX(_ModuleEntryPoint):
> -  fninit                                # clear any pending Floating point 
> exceptions
> -  #
> -  # Store the BIST value in mm0
> -  #
> -  movd    %eax, %mm0
> -
> -  #
> -  # Save time-stamp counter value
> -  # rdtsc load 64bit time-stamp counter to EDX:EAX
> -  #
> -  rdtsc
> -  movd    %edx, %mm5
> -  movd    %ecx, %mm6
> -
> -  #
> -  # Load the GDT table in GdtDesc
> -  #
> -  movl    $GdtDesc, %esi
> -  .byte   0x66
> -  lgdt    %cs:(%si)
> -
> -  #
> -  # Transition to 16 bit protected mode
> -  #
> -  movl    %cr0, %eax                 # Get control register 0
> -  orl     $0x00000003, %eax          # Set PE bit (bit #0) & MP bit (bit #1)
> -  movl    %eax, %cr0                 # Activate protected mode
> -
> -  movl    %cr4, %eax                 # Get control register 4
> -  orl     $0x00000600, %eax          # Set OSFXSR bit (bit #9) & OSXMMEXCPT 
> bit
> (bit #10)
> -  movl    %eax, %cr4
> -
> -  #
> -  # Now we're in 16 bit protected mode
> -  # Set up the selectors for 32 bit protected mode entry
> -  #
> -  movw    SYS_DATA_SEL, %ax
> -  movw    %ax, %ds
> -  movw    %ax, %es
> -  movw    %ax, %fs
> -  movw    %ax, %gs
> -  movw    %ax, %ss
> -
> -  #
> -  # Transition to Flat 32 bit protected mode
> -  # The jump to a far pointer causes the transition to 32 bit mode
> -  #
> -  movl    ASM_PFX(ProtectedModeEntryLinearAddress), %esi
> -  jmp     *%cs:(%si)
> -
> -ASM_GLOBAL ASM_PFX(_TEXT_PROTECTED_MODE)
> -ASM_PFX(_TEXT_PROTECTED_MODE):
> -
> -#----------------------------------------------------------------------------
> -#
> -# Procedure:    ProtectedModeEntryPoint
> -#
> -# Input:        None
> -#
> -# Output:       None
> -#
> -# Destroys:     Assume all registers
> -#
> -# Description:
> -#
> -# This function handles:
> -#   Call two basic APIs from FSP binary
> -#   Initializes stack with some early data (BIST, PEI entry, etc)
> -#
> -# Return:       None
> -#
> -#----------------------------------------------------------------------------
> -
> -.align 4
> -ASM_GLOBAL ASM_PFX(ProtectedModeEntryPoint)
> -ASM_PFX(ProtectedModeEntryPoint):
> -
> -  # Find the fsp info header
> -  movl ASM_PFX(_gPcd_FixedAtBuild_PcdFsptBaseAddress), %edi
> -
> -  movl FVH_SIGINATURE_OFFSET(%edi), %eax
> -  cmp  $FVH_SIGINATURE_VALID_VALUE, %eax
> -  jnz  FspHeaderNotFound
> -
> -  xorl %eax, %eax
> -  movw FVH_EXTHEADER_OFFSET_OFFSET(%edi), %ax
> -  cmp  %ax, 0
> -  jnz  FspFvExtHeaderExist
> -
> -  xorl %eax, %eax
> -  movw FVH_HEADER_LENGTH_OFFSET(%edi), %ax   # Bypass Fv Header
> -  addl %eax, %edi
> -  jmp  FspCheckFfsHeader
> -
> -FspFvExtHeaderExist:
> -  addl %eax, %edi
> -  movl FVH_EXTHEADER_SIZE_OFFSET(%edi), %eax  # Bypass Ext Fv Header
> -  addl %eax, %edi
> -
> -  # Round up to 8 byte alignment
> -  movl %edi, %eax
> -  andb $0x07, %al
> -  jz FspCheckFfsHeader
> -
> -  and  $0xFFFFFFF8, %edi
> -  add  $0x08, %edi
> -
> -FspCheckFfsHeader:
> -  # Check the ffs guid
> -  movl (%edi), %eax
> -  cmp  $FSP_HEADER_GUID_DWORD1, %eax
> -  jnz  FspHeaderNotFound
> -
> -  movl 0x4(%edi), %eax
> -  cmp  $FSP_HEADER_GUID_DWORD2, %eax
> -  jnz  FspHeaderNotFound
> -
> -  movl 0x08(%edi), %eax
> -  cmp  $FSP_HEADER_GUID_DWORD3, %eax
> -  jnz  FspHeaderNotFound
> -
> -  movl 0x0c(%edi), %eax
> -  cmp  $FSP_HEADER_GUID_DWORD4, %eax
> -  jnz  FspHeaderNotFound
> -
> -  add  $FFS_HEADER_SIZE_VALUE, %edi        # Bypass the ffs header
> -
> -  # Check the section type as raw section
> -  movb SECTION_HEADER_TYPE_OFFSET(%edi), %al
> -  cmp  $0x19, %al
> -  jnz  FspHeaderNotFound
> -
> -  addl $RAW_SECTION_HEADER_SIZE_VALUE, %edi  # Bypass the section
> header
> -  jmp  FspHeaderFound
> -
> -FspHeaderNotFound:
> -  jmp  .
> -
> -FspHeaderFound:
> -  # Get the fsp TempRamInit Api address
> -  movl FSP_HEADER_IMAGEBASE_OFFSET(%edi), %eax
> -  addl FSP_HEADER_TEMPRAMINIT_OFFSET(%edi), %eax
> -
> -  # Setup the hardcode stack
> -  movl $TempRamInitStack, %esp
> -
> -  # Call the fsp TempRamInit Api
> -  jmp  *%eax
> -
> -TempRamInitDone:
> -  cmp  $0x8000000E, %eax   #Check if EFI_NOT_FOUND returned. Error code
> for Microcode Update not found.
> -  je   CallSecFspInit      #If microcode not found, don't hang, but continue.
> -
> -  cmp  $0x0, %eax
> -  jnz  FspApiFailed
> -
> -  #   ECX: start of range
> -  #   EDX: end of range
> -CallSecFspInit:
> -  xorl    %eax, %eax
> -  movl    %edx, %esp
> -
> -  # Align the stack at DWORD
> -  addl  $3, %esp
> -  andl  $0xFFFFFFFC, %esp
> -
> -  pushl   %edx
> -  pushl   %ecx
> -  pushl   %eax # zero - no hob list yet
> -  call ASM_PFX(CallPeiCoreEntryPoint)
> -
> -FspApiFailed:
> -  jmp .
> -
> -.align 0x10
> -TempRamInitStack:
> -    .long  TempRamInitDone
> -    .long  ASM_PFX(FsptUpdDataPtr)
> -
> -#
> -# ROM-based Global-Descriptor Table for the Tiano PEI Phase
> -#
> -.align 16
> -
> -#
> -# GDT[0]: 0x00: Null entry, never used.
> -#
> -.equ NULL_SEL,             . - GDT_BASE    # Selector [0]
> -GDT_BASE:
> -BootGdtTable:       .long  0
> -                    .long  0
> -#
> -# Linear data segment descriptor
> -#
> -.equ LINEAR_SEL,           . - GDT_BASE    # Selector [0x8]
> -    .word  0xFFFF                          # limit 0xFFFFF
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0x92                            # present, ring 0, data, 
> expand-up, writable
> -    .byte  0xCF                            # page-granular, 32-bit
> -    .byte  0
> -#
> -# Linear code segment descriptor
> -#
> -.equ LINEAR_CODE_SEL,      . - GDT_BASE    # Selector [0x10]
> -    .word  0xFFFF                          # limit 0xFFFFF
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0x9B                            # present, ring 0, data, 
> expand-up, not-writable
> -    .byte  0xCF                            # page-granular, 32-bit
> -    .byte  0
> -#
> -# System data segment descriptor
> -#
> -.equ SYS_DATA_SEL,         . - GDT_BASE    # Selector [0x18]
> -    .word  0xFFFF                          # limit 0xFFFFF
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0x93                            # present, ring 0, data, 
> expand-up, not-writable
> -    .byte  0xCF                            # page-granular, 32-bit
> -    .byte  0
> -
> -#
> -# System code segment descriptor
> -#
> -.equ SYS_CODE_SEL,         . - GDT_BASE    # Selector [0x20]
> -    .word  0xFFFF                          # limit 0xFFFFF
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0x9A                            # present, ring 0, data, 
> expand-up, writable
> -    .byte  0xCF                            # page-granular, 32-bit
> -    .byte  0
> -#
> -# Spare segment descriptor
> -#
> -.equ SYS16_CODE_SEL,       . - GDT_BASE    # Selector [0x28]
> -    .word  0xFFFF                          # limit 0xFFFFF
> -    .word  0                               # base 0
> -    .byte  0x0E                            # Changed from F000 to E000.
> -    .byte  0x9B                            # present, ring 0, code, 
> expand-up, writable
> -    .byte  0x00                            # byte-granular, 16-bit
> -    .byte  0
> -#
> -# Spare segment descriptor
> -#
> -.equ SYS16_DATA_SEL,       . - GDT_BASE    # Selector [0x30]
> -    .word  0xFFFF                          # limit 0xFFFF
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0x93                            # present, ring 0, data, 
> expand-up, not-writable
> -    .byte  0x00                            # byte-granular, 16-bit
> -    .byte  0
> -
> -#
> -# Spare segment descriptor
> -#
> -.equ SPARE5_SEL,           . - GDT_BASE    # Selector [0x38]
> -    .word  0                               # limit 0
> -    .word  0                               # base 0
> -    .byte  0
> -    .byte  0                               # present, ring 0, data, 
> expand-up, writable
> -    .byte  0                               # page-granular, 32-bit
> -    .byte  0
> -.equ GDT_SIZE,             . - BootGdtTable    # Size, in bytes
> -
> -#
> -# GDT Descriptor
> -#
> -GdtDesc:                                # GDT descriptor
> -    .word  GDT_SIZE - 1                    # GDT limit
> -    .long  BootGdtTable                    # GDT base address
> -
> -ASM_PFX(ProtectedModeEntryLinearAddress):
> -ProtectedModeEntryLinearOffset:
> -  .long      ASM_PFX(ProtectedModeEntryPoint)  # Offset of our 32 bit code
> -  .word      LINEAR_CODE_SEL
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.asm
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.asm
> deleted file mode 100644
> index ab8d46e..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sec
> Entry.asm
> +++ /dev/null
> @@ -1,353 +0,0 @@
> -;------------------------------------------------------------------------------
> -;
> -; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -; 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.
> -;
> -; Module Name:
> -;
> -;  SecEntry.asm
> -;
> -; Abstract:
> -;
> -;  This is the code that goes from real-mode to protected mode.
> -;  It consumes the reset vector, calls TempRamInit API from FSP binary.
> -;
> -;------------------------------------------------------------------------------
> -
> -#include "Fsp.h"
> -
> -.686p
> -.xmm
> -.model small, c
> -
> -EXTRN   CallPeiCoreEntryPoint:NEAR
> -EXTRN   FsptUpdDataPtr:FAR
> -
> -; Pcds
> -EXTRN   PcdGet32 (PcdFsptBaseAddress):DWORD
> -
> -_TEXT_REALMODE      SEGMENT PARA PUBLIC USE16 'CODE'
> -                    ASSUME  CS:_TEXT_REALMODE, DS:_TEXT_REALMODE
> -
> -;----------------------------------------------------------------------------
> -;
> -; Procedure:    _ModuleEntryPoint
> -;
> -; Input:        None
> -;
> -; Output:       None
> -;
> -; Destroys:     Assume all registers
> -;
> -; Description:
> -;
> -;   Transition to non-paged flat-model protected mode from a
> -;   hard-coded GDT that provides exactly two descriptors.
> -;   This is a bare bones transition to protected mode only
> -;   used for a while in PEI and possibly DXE.
> -;
> -;   After enabling protected mode, a far jump is executed to
> -;   transfer to PEI using the newly loaded GDT.
> -;
> -; Return:       None
> -;
> -;  MMX Usage:
> -;              MM0 = BIST State
> -;              MM5 = Save time-stamp counter value high32bit
> -;              MM6 = Save time-stamp counter value low32bit.
> -;
> -;----------------------------------------------------------------------------
> -
> -align 4
> -_ModuleEntryPoint PROC NEAR C PUBLIC
> -  fninit                                ; clear any pending Floating point 
> exceptions
> -  ;
> -  ; Store the BIST value in mm0
> -  ;
> -  movd    mm0, eax
> -
> -  ;
> -  ; Save time-stamp counter value
> -  ; rdtsc load 64bit time-stamp counter to EDX:EAX
> -  ;
> -  rdtsc
> -  movd    mm5, edx
> -  movd    mm6, eax
> -
> -  ;
> -  ; Load the GDT table in GdtDesc
> -  ;
> -  mov     esi,  OFFSET GdtDesc
> -  DB      66h
> -  lgdt    fword ptr cs:[si]
> -
> -  ;
> -  ; Transition to 16 bit protected mode
> -  ;
> -  mov     eax, cr0                   ; Get control register 0
> -  or      eax, 00000003h             ; Set PE bit (bit #0) & MP bit (bit #1)
> -  mov     cr0, eax                   ; Activate protected mode
> -
> -  mov     eax, cr4                   ; Get control register 4
> -  or      eax, 00000600h             ; Set OSFXSR bit (bit #9) & OSXMMEXCPT 
> bit (bit
> #10)
> -  mov     cr4, eax
> -
> -  ;
> -  ; Now we're in 16 bit protected mode
> -  ; Set up the selectors for 32 bit protected mode entry
> -  ;
> -  mov     ax, SYS_DATA_SEL
> -  mov     ds, ax
> -  mov     es, ax
> -  mov     fs, ax
> -  mov     gs, ax
> -  mov     ss, ax
> -
> -  ;
> -  ; Transition to Flat 32 bit protected mode
> -  ; The jump to a far pointer causes the transition to 32 bit mode
> -  ;
> -  mov esi, offset ProtectedModeEntryLinearAddress
> -  jmp     fword ptr cs:[si]
> -
> -_ModuleEntryPoint   ENDP
> -_TEXT_REALMODE      ENDS
> -
> -_TEXT_PROTECTED_MODE      SEGMENT PARA PUBLIC USE32 'CODE'
> -                          ASSUME  CS:_TEXT_PROTECTED_MODE,
> DS:_TEXT_PROTECTED_MODE
> -
> -;----------------------------------------------------------------------------
> -;
> -; Procedure:    ProtectedModeEntryPoint
> -;
> -; Input:        None
> -;
> -; Output:       None
> -;
> -; Destroys:     Assume all registers
> -;
> -; Description:
> -;
> -; This function handles:
> -;   Call two basic APIs from FSP binary
> -;   Initializes stack with some early data (BIST, PEI entry, etc)
> -;
> -; Return:       None
> -;
> -;----------------------------------------------------------------------------
> -
> -align 4
> -ProtectedModeEntryPoint PROC NEAR PUBLIC
> -
> -  ; Find the fsp info header
> -  mov  edi, PcdGet32 (PcdFsptBaseAddress)
> -
> -  mov  eax, dword ptr [edi + FVH_SIGINATURE_OFFSET]
> -  cmp  eax, FVH_SIGINATURE_VALID_VALUE
> -  jnz  FspHeaderNotFound
> -
> -  xor  eax, eax
> -  mov  ax, word ptr [edi + FVH_EXTHEADER_OFFSET_OFFSET]
> -  cmp  ax, 0
> -  jnz  FspFvExtHeaderExist
> -
> -  xor  eax, eax
> -  mov  ax, word ptr [edi + FVH_HEADER_LENGTH_OFFSET]   ; Bypass Fv Header
> -  add  edi, eax
> -  jmp  FspCheckFfsHeader
> -
> -FspFvExtHeaderExist:
> -  add  edi, eax
> -  mov  eax, dword ptr [edi + FVH_EXTHEADER_SIZE_OFFSET]  ; Bypass Ext Fv
> Header
> -  add  edi, eax
> -
> -  ; Round up to 8 byte alignment
> -  mov  eax, edi
> -  and  al,  07h
> -  jz   FspCheckFfsHeader
> -
> -  and  edi, 0FFFFFFF8h
> -  add  edi, 08h
> -
> -FspCheckFfsHeader:
> -  ; Check the ffs guid
> -  mov  eax, dword ptr [edi]
> -  cmp  eax, FSP_HEADER_GUID_DWORD1
> -  jnz  FspHeaderNotFound
> -
> -  mov  eax, dword ptr [edi + 4]
> -  cmp  eax, FSP_HEADER_GUID_DWORD2
> -  jnz  FspHeaderNotFound
> -
> -  mov  eax, dword ptr [edi + 8]
> -  cmp  eax, FSP_HEADER_GUID_DWORD3
> -  jnz  FspHeaderNotFound
> -
> -  mov  eax, dword ptr [edi + 0Ch]
> -  cmp  eax, FSP_HEADER_GUID_DWORD4
> -  jnz  FspHeaderNotFound
> -
> -  add  edi, FFS_HEADER_SIZE_VALUE       ; Bypass the ffs header
> -
> -  ; Check the section type as raw section
> -  mov  al, byte ptr [edi + SECTION_HEADER_TYPE_OFFSET]
> -  cmp  al, 019h
> -  jnz FspHeaderNotFound
> -
> -  add  edi, RAW_SECTION_HEADER_SIZE_VALUE ; Bypass the section header
> -  jmp FspHeaderFound
> -
> -FspHeaderNotFound:
> -  jmp  $
> -
> -FspHeaderFound:
> -  ; Get the fsp TempRamInit Api address
> -  mov eax, dword ptr [edi + FSP_HEADER_IMAGEBASE_OFFSET]
> -  add eax, dword ptr [edi + FSP_HEADER_TEMPRAMINIT_OFFSET]
> -
> -  ; Setup the hardcode stack
> -  mov esp, OFFSET TempRamInitStack
> -
> -  ; Call the fsp TempRamInit Api
> -  jmp eax
> -
> -TempRamInitDone:
> -  cmp eax, 8000000Eh      ;Check if EFI_NOT_FOUND returned. Error code for
> Microcode Update not found.
> -  je  CallSecFspInit      ;If microcode not found, don't hang, but continue.
> -
> -  cmp eax, 0              ;Check if EFI_SUCCESS retuned.
> -  jnz FspApiFailed
> -
> -  ;   ECX: start of range
> -  ;   EDX: end of range
> -CallSecFspInit:
> -  xor     eax, eax
> -  mov     esp, edx
> -
> -  ; Align the stack at DWORD
> -  add  esp,  3
> -  and  esp, 0FFFFFFFCh
> -
> -  push    edx
> -  push    ecx
> -  push    eax ; zero - no hob list yet
> -  call    CallPeiCoreEntryPoint
> -
> -FspApiFailed:
> -  jmp $
> -
> -align 10h
> -TempRamInitStack:
> -    DD  OFFSET TempRamInitDone
> -    DD  OFFSET FsptUpdDataPtr ; TempRamInitParams
> -
> -ProtectedModeEntryPoint ENDP
> -
> -;
> -; ROM-based Global-Descriptor Table for the Tiano PEI Phase
> -;
> -align 16
> -PUBLIC  BootGdtTable
> -
> -;
> -; GDT[0]: 0x00: Null entry, never used.
> -;
> -NULL_SEL            EQU $ - GDT_BASE    ; Selector [0]
> -GDT_BASE:
> -BootGdtTable        DD  0
> -                    DD  0
> -;
> -; Linear data segment descriptor
> -;
> -LINEAR_SEL          EQU $ - GDT_BASE    ; Selector [0x8]
> -    DW  0FFFFh                          ; limit 0xFFFFF
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  092h                            ; present, ring 0, data, expand-up, 
> writable
> -    DB  0CFh                            ; page-granular, 32-bit
> -    DB  0
> -;
> -; Linear code segment descriptor
> -;
> -LINEAR_CODE_SEL     EQU $ - GDT_BASE    ; Selector [0x10]
> -    DW  0FFFFh                          ; limit 0xFFFFF
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  09Bh                            ; present, ring 0, data, expand-up, 
> not-writable
> -    DB  0CFh                            ; page-granular, 32-bit
> -    DB  0
> -;
> -; System data segment descriptor
> -;
> -SYS_DATA_SEL        EQU $ - GDT_BASE    ; Selector [0x18]
> -    DW  0FFFFh                          ; limit 0xFFFFF
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  093h                            ; present, ring 0, data, expand-up, 
> not-writable
> -    DB  0CFh                            ; page-granular, 32-bit
> -    DB  0
> -
> -;
> -; System code segment descriptor
> -;
> -SYS_CODE_SEL        EQU $ - GDT_BASE    ; Selector [0x20]
> -    DW  0FFFFh                          ; limit 0xFFFFF
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  09Ah                            ; present, ring 0, data, expand-up, 
> writable
> -    DB  0CFh                            ; page-granular, 32-bit
> -    DB  0
> -;
> -; Spare segment descriptor
> -;
> -SYS16_CODE_SEL      EQU $ - GDT_BASE    ; Selector [0x28]
> -    DW  0FFFFh                          ; limit 0xFFFFF
> -    DW  0                               ; base 0
> -    DB  0Eh                             ; Changed from F000 to E000.
> -    DB  09Bh                            ; present, ring 0, code, expand-up, 
> writable
> -    DB  00h                             ; byte-granular, 16-bit
> -    DB  0
> -;
> -; Spare segment descriptor
> -;
> -SYS16_DATA_SEL      EQU $ - GDT_BASE    ; Selector [0x30]
> -    DW  0FFFFh                          ; limit 0xFFFF
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  093h                            ; present, ring 0, data, expand-up, 
> not-writable
> -    DB  00h                             ; byte-granular, 16-bit
> -    DB  0
> -
> -;
> -; Spare segment descriptor
> -;
> -SPARE5_SEL          EQU $ - GDT_BASE    ; Selector [0x38]
> -    DW  0                               ; limit 0
> -    DW  0                               ; base 0
> -    DB  0
> -    DB  0                               ; present, ring 0, data, expand-up, 
> writable
> -    DB  0                               ; page-granular, 32-bit
> -    DB  0
> -GDT_SIZE            EQU $ - BootGdtTable    ; Size, in bytes
> -
> -;
> -; GDT Descriptor
> -;
> -GdtDesc:                                ; GDT descriptor
> -    DW  GDT_SIZE - 1                    ; GDT limit
> -    DD  OFFSET BootGdtTable             ; GDT base address
> -
> -
> -ProtectedModeEntryLinearAddress   LABEL   FWORD
> -ProtectedModeEntryLinearOffset    LABEL   DWORD
> -  DD      OFFSET ProtectedModeEntryPoint  ; Offset of our 32 bit code
> -  DW      LINEAR_CODE_SEL
> -
> -_TEXT_PROTECTED_MODE    ENDS
> -END
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.S
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.S
> deleted file mode 100644
> index ae42935..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.S
> +++ /dev/null
> @@ -1,77 +0,0 @@
> -#------------------------------------------------------------------------------
> -#
> -# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -# 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.
> -#
> -# Abstract:
> -#
> -#   Switch the stack from temporary memory to permenent memory.
> -#
> -#------------------------------------------------------------------------------
> -
> -
> -#------------------------------------------------------------------------------
> -# VOID
> -# EFIAPI
> -# SecSwitchStack (
> -#   UINT32   TemporaryMemoryBase,
> -#   UINT32   PermanentMemoryBase
> -#   )#
> -#------------------------------------------------------------------------------
> -ASM_GLOBAL ASM_PFX (SecSwitchStack)
> -ASM_PFX(SecSwitchStack):
> -    #
> -    # Save standard registers so they can be used to change stack
> -    #
> -    pushl %eax
> -    pushl %ebx
> -    pushl %ecx
> -    pushl %edx
> -
> -    #
> -    # !!CAUTION!! this function address's is pushed into stack after
> -    # migration of whole temporary memory, so need save it to permanent
> -    # memory at first!
> -    #
> -    movl  20(%esp), %ebx         # Save the first parameter
> -    movl  24(%esp), %ecx         # Save the second parameter
> -
> -    #
> -    # Save this function's return address into permanent memory at first.
> -    # Then, Fixup the esp point to permanent memory
> -    #
> -    movl  %esp, %eax
> -    subl  %ebx, %eax
> -    addl  %ecx, %eax
> -    movl  0(%esp), %edx          # copy pushed register's value to permanent
> memory
> -    movl  %edx, 0(%eax)
> -    movl  4(%esp), %edx
> -    movl  %edx, 4(%eax)
> -    movl  8(%esp), %edx
> -    movl  %edx, 8(%eax)
> -    movl  12(%esp), %edx
> -    movl  %edx, 12(%eax)
> -    movl  16(%esp), %edx        # Update this function's return address into
> permanent memory
> -    movl  %edx, 16(%eax)
> -    movl  %eax, %esp            # From now, esp is pointed to permanent 
> memory
> -
> -    #
> -    # Fixup the ebp point to permanent memory
> -    #
> -    movl  %ebp, %eax
> -    subl  %ebx, %eax
> -    addl  %ecx, %eax
> -    movl  %eax, %ebp            # From now, ebp is pointed to permanent 
> memory
> -
> -    popl  %edx
> -    popl  %ecx
> -    popl  %ebx
> -    popl  %eax
> -    ret
> -
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.asm
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.asm
> deleted file mode 100644
> index 116b738..0000000
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/Sta
> ck.asm
> +++ /dev/null
> @@ -1,82 +0,0 @@
> -;------------------------------------------------------------------------------
> -;
> -; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> -; 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.
> -;
> -; Abstract:
> -;
> -;   Switch the stack from temporary memory to permenent memory.
> -;
> -;------------------------------------------------------------------------------
> -
> -    .586p
> -    .model  flat,C
> -    .code
> -
> -;------------------------------------------------------------------------------
> -; VOID
> -; EFIAPI
> -; SecSwitchStack (
> -;   UINT32   TemporaryMemoryBase,
> -;   UINT32   PermanentMemoryBase
> -;   );
> -;------------------------------------------------------------------------------
> -SecSwitchStack   PROC
> -    ;
> -    ; Save three register: eax, ebx, ecx
> -    ;
> -    push  eax
> -    push  ebx
> -    push  ecx
> -    push  edx
> -
> -    ;
> -    ; !!CAUTION!! this function address's is pushed into stack after
> -    ; migration of whole temporary memory, so need save it to permanent
> -    ; memory at first!
> -    ;
> -
> -    mov   ebx, [esp + 20]          ; Save the first parameter
> -    mov   ecx, [esp + 24]          ; Save the second parameter
> -
> -    ;
> -    ; Save this function's return address into permanent memory at first.
> -    ; Then, Fixup the esp point to permanent memory
> -    ;
> -    mov   eax, esp
> -    sub   eax, ebx
> -    add   eax, ecx
> -    mov   edx, dword ptr [esp]         ; copy pushed register's value to 
> permanent
> memory
> -    mov   dword ptr [eax], edx
> -    mov   edx, dword ptr [esp + 4]
> -    mov   dword ptr [eax + 4], edx
> -    mov   edx, dword ptr [esp + 8]
> -    mov   dword ptr [eax + 8], edx
> -    mov   edx, dword ptr [esp + 12]
> -    mov   dword ptr [eax + 12], edx
> -    mov   edx, dword ptr [esp + 16]    ; Update this function's return 
> address into
> permanent memory
> -    mov   dword ptr [eax + 16], edx
> -    mov   esp, eax                     ; From now, esp is pointed to 
> permanent memory
> -
> -    ;
> -    ; Fixup the ebp point to permanent memory
> -    ;
> -    mov   eax, ebp
> -    sub   eax, ebx
> -    add   eax, ecx
> -    mov   ebp, eax                ; From now, ebp is pointed to permanent 
> memory
> -
> -    pop   edx
> -    pop   ecx
> -    pop   ebx
> -    pop   eax
> -    ret
> -SecSwitchStack   ENDP
> -
> -    END
> diff --git
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/SecFspW
> rapperPlatformSecLibSample.inf
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/SecFspW
> rapperPlatformSecLibSample.inf
> index 5945319..bcb76b8 100644
> ---
> a/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/SecFspW
> rapperPlatformSecLibSample.inf
> +++
> b/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/SecFspW
> rapperPlatformSecLibSample.inf
> @@ -44,17 +44,11 @@
>    SecGetPerformance.c
>    SecTempRamDone.c
>    PlatformInit.c
> 
>  [Sources.IA32]
> -  Ia32/SecEntry.asm
> -  Ia32/PeiCoreEntry.asm
> -  Ia32/Stack.asm
>    Ia32/Fsp.h
> -  Ia32/SecEntry.S
> -  Ia32/PeiCoreEntry.S
> -  Ia32/Stack.S
>    Ia32/SecEntry.nasm
>    Ia32/PeiCoreEntry.nasm
>    Ia32/Stack.nasm
> 
> 
> #################################################################
> ###############
> --
> 1.9.5.msysgit.0

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to