Update IntelFspPkg to support FSP1.1
-- Add BootLoaderTolumSize support -- Extend FspApiCallingCheck with ApiParam for BootLoaderTolumSize -- Rename all Bootloader to BootLoader as official name -- Rename Ucode to Microcode -- Remove FspSelfCheck API, because it is merged into SecPlatformInit -- Add GetFspVpdDataPointer() in FspCommonLib.h -- Document FspSecPlatformLib.h -- Reorg FSP_PLAT_DATA data structure to let it match FSP spec. -- Move helper function in FspSecCore to reduce platform enabling effort -- Fix LibraryClasses declaration in DEC file. -- Enhance PatchFv to check if it is valid FSP bin. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" <Jiewen.Yao@intel.com> Reviewed-by: "Ma, Maurice" <maurice.ma@intel.com> Reviewed-by: "Rangarajan, Ravi P" <ravi.p.rangarajan@intel.com> Reviewed-by: "Mudusuru, Giri P" <giri.p.mudusuru@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17196 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
183
IntelFspPkg/Library/SecFspSecPlatformLibNull/Ia32/Flat32.asm
Normal file
183
IntelFspPkg/Library/SecFspSecPlatformLibNull/Ia32/Flat32.asm
Normal file
@@ -0,0 +1,183 @@
|
||||
;; @file
|
||||
; This is the code that goes from real-mode to protected mode.
|
||||
; It consumes the reset vector, configures the stack.
|
||||
;
|
||||
; Copyright (c) 2015, 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.
|
||||
;;
|
||||
|
||||
;
|
||||
; Define assembler characteristics
|
||||
;
|
||||
.586p
|
||||
.xmm
|
||||
.model flat, c
|
||||
|
||||
EXTRN TempRamInitApi:NEAR
|
||||
EXTRN FspInitApi:NEAR
|
||||
|
||||
;
|
||||
; Contrary to the name, this file contains 16 bit code as well.
|
||||
;
|
||||
_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
|
||||
;
|
||||
;----------------------------------------------------------------------------
|
||||
align 16
|
||||
_ModuleEntryPoint PROC C PUBLIC
|
||||
;
|
||||
; 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
|
||||
|
||||
;
|
||||
; 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
|
||||
|
||||
.code
|
||||
;
|
||||
; Protected mode portion initializes stack, configures cache, and calls C entry point
|
||||
;
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
;
|
||||
; Procedure: ProtectedModeEntryPoint
|
||||
;
|
||||
; Input: Executing in 32 Bit Protected (flat) mode
|
||||
; cs: 0-4GB
|
||||
; ds: 0-4GB
|
||||
; es: 0-4GB
|
||||
; fs: 0-4GB
|
||||
; gs: 0-4GB
|
||||
; ss: 0-4GB
|
||||
;
|
||||
; Output: This function never returns
|
||||
;
|
||||
; Destroys:
|
||||
; ecx
|
||||
; edi
|
||||
; esi
|
||||
; esp
|
||||
;
|
||||
; Description:
|
||||
; Perform any essential early platform initilaisation
|
||||
; Setup a stack
|
||||
;
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
ProtectedModeEntryPoint PROC NEAR C PUBLIC
|
||||
;
|
||||
; Dummy function. Consume 2 API to make sure they can be linked.
|
||||
;
|
||||
mov eax, TempRamInitApi
|
||||
mov eax, FspInitApi
|
||||
|
||||
; Should never return
|
||||
jmp $
|
||||
|
||||
ProtectedModeEntryPoint ENDP
|
||||
|
||||
;
|
||||
; ROM-based Global-Descriptor Table for the 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 code segment descriptor
|
||||
;
|
||||
LINEAR_CODE_SEL equ $ - GDT_BASE ; Selector [0x8]
|
||||
DW 0FFFFh ; limit 0xFFFF
|
||||
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 [0x10]
|
||||
DW 0FFFFh ; limit 0xFFFF
|
||||
DW 0 ; base 0
|
||||
DB 0
|
||||
DB 093h ; present, ring 0, data, expand-up, not-writable
|
||||
DB 0CFh ; 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
|
||||
|
||||
END
|
171
IntelFspPkg/Library/SecFspSecPlatformLibNull/Ia32/Flat32.s
Normal file
171
IntelFspPkg/Library/SecFspSecPlatformLibNull/Ia32/Flat32.s
Normal file
@@ -0,0 +1,171 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2015, 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:
|
||||
#
|
||||
# This is the code that goes from real-mode to protected mode.
|
||||
# It consumes the reset vector, configures the stack.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#
|
||||
# Contrary to the name, this file contains 16 bit code as well.
|
||||
#
|
||||
.text
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#----------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(_ModuleEntryPoint)
|
||||
ASM_PFX(_ModuleEntryPoint):
|
||||
|
||||
#
|
||||
# Load the GDT table in GdtDesc
|
||||
#
|
||||
.byte 0x66,0xbe #movl $GdtDesc, %esi
|
||||
.long GdtDesc
|
||||
|
||||
.byte 0x66,0x2e,0x0f,0x01,0x14 #lgdt %cs:(%si)
|
||||
|
||||
#
|
||||
# Transition to 16 bit protected mode
|
||||
#
|
||||
.byte 0x0f,0x20,0xc0 #movl %cr0, %eax # Get control register 0
|
||||
.byte 0x66,0x83,0xc8,0x03 #orl $0x0000003, %eax # Set PE bit (bit #0) & MP bit (bit #1)
|
||||
.byte 0x0f,0x22,0xc0 #movl %eax, %cr0 # Activate protected mode
|
||||
|
||||
#
|
||||
# Now we're in 16 bit protected mode
|
||||
# Set up the selectors for 32 bit protected mode entry
|
||||
#
|
||||
.byte 0xb8 #movw SYS_DATA_SEL, %ax
|
||||
.word SYS_DATA_SEL
|
||||
|
||||
.byte 0x8e,0xd8 #movw %ax, %ds
|
||||
.byte 0x8e,0xc0 #movw %ax, %es
|
||||
.byte 0x8e,0xe0 #movw %ax, %fs
|
||||
.byte 0x8e,0xe8 #movw %ax, %gs
|
||||
.byte 0x8e,0xd0 #movw %ax, %ss
|
||||
|
||||
#
|
||||
# Transition to Flat 32 bit protected mode
|
||||
# The jump to a far pointer causes the transition to 32 bit mode
|
||||
#
|
||||
.byte 0x66,0xbe #movl ProtectedModeEntryLinearAddress, %esi
|
||||
.long ProtectedModeEntryLinearAddress
|
||||
.byte 0x66,0x2e,0xff,0x2c #jmp %cs:(%esi)
|
||||
|
||||
#
|
||||
# Protected mode portion initializes stack, configures cache, and calls C entry point
|
||||
#
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# Procedure: ProtectedModeEntryPoint
|
||||
#
|
||||
# Input: Executing in 32 Bit Protected (flat) mode
|
||||
# cs: 0-4GB
|
||||
# ds: 0-4GB
|
||||
# es: 0-4GB
|
||||
# fs: 0-4GB
|
||||
# gs: 0-4GB
|
||||
# ss: 0-4GB
|
||||
#
|
||||
# Output: This function never returns
|
||||
#
|
||||
# Destroys:
|
||||
# ecx
|
||||
# edi
|
||||
# esi
|
||||
# esp
|
||||
#
|
||||
# Description:
|
||||
# Perform any essential early platform initilaisation
|
||||
# Setup a stack
|
||||
#
|
||||
#----------------------------------------------------------------------------
|
||||
ProtectedModeEntryPoint:
|
||||
#
|
||||
# Dummy function. Consume 2 API to make sure they can be linked.
|
||||
#
|
||||
movl ASM_PFX(TempRamInitApi), %eax
|
||||
movl ASM_PFX(FspInitApi), %eax
|
||||
#
|
||||
# Should never return
|
||||
#
|
||||
jmp . #'$'
|
||||
|
||||
#
|
||||
# ROM-based Global-Descriptor Table for the PEI Phase
|
||||
#
|
||||
.align 16
|
||||
#
|
||||
# GDT[0]: 000h: Null entry, never used.
|
||||
#
|
||||
.equ NULL_SEL, . - GDT_BASE # Selector [0]
|
||||
GDT_BASE:
|
||||
BootGdtTable:
|
||||
.long 0
|
||||
.long 0
|
||||
#
|
||||
# Linear code segment descriptor
|
||||
#
|
||||
.equ LINEAR_CODE_SEL, . - GDT_BASE # Selector [08h]
|
||||
.word 0xFFFF # limit 0FFFFh
|
||||
.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 [010h]
|
||||
.word 0xFFFF # limit 0FFFFh
|
||||
.word 0 # base 0
|
||||
.byte 0
|
||||
.byte 0x93 # present, ring 0, data, expand-up, not-writable
|
||||
.byte 0xCF # page-granular, 32-bit
|
||||
.byte 0
|
||||
|
||||
.equ GDT_SIZE, . - BootGdtTable # Size, in bytes
|
||||
|
||||
#
|
||||
# GDT Descriptor
|
||||
#
|
||||
GdtDesc: # GDT descriptor
|
||||
.word GDT_SIZE - 1
|
||||
.long BootGdtTable
|
||||
|
||||
ProtectedModeEntryLinearAddress:
|
||||
ProtectedModeEntryLinearOffset:
|
||||
.long ProtectedModeEntryPoint
|
||||
.word LINEAR_CODE_SEL
|
@@ -0,0 +1,51 @@
|
||||
;; @file
|
||||
; SEC CAR function
|
||||
;
|
||||
; Copyright (c) 2015, 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.
|
||||
;;
|
||||
|
||||
;
|
||||
; Define assembler characteristics
|
||||
;
|
||||
.586p
|
||||
.xmm
|
||||
.model flat, c
|
||||
|
||||
RET_ESI MACRO
|
||||
|
||||
movd esi, mm7 ; move ReturnAddress from MM7 to ESI
|
||||
jmp esi
|
||||
|
||||
ENDM
|
||||
|
||||
.code
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
;
|
||||
; Section: SecCarInit
|
||||
;
|
||||
; Description: This function initializes the Cache for Data, Stack, and Code
|
||||
;
|
||||
;-----------------------------------------------------------------------------
|
||||
SecCarInit PROC NEAR PUBLIC
|
||||
|
||||
;
|
||||
; Set up CAR
|
||||
;
|
||||
|
||||
xor eax, eax
|
||||
|
||||
SecCarInitExit:
|
||||
|
||||
RET_ESI
|
||||
|
||||
SecCarInit ENDP
|
||||
|
||||
END
|
@@ -0,0 +1,37 @@
|
||||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2015, 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:
|
||||
#
|
||||
# SEC CAR function
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
#
|
||||
# Section: SecCarInit
|
||||
#
|
||||
# Description: This function initializes the Cache for Data, Stack, and Code
|
||||
#
|
||||
#-----------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(SecCarInit)
|
||||
ASM_PFX(SecCarInit):
|
||||
|
||||
#
|
||||
# Set up CAR
|
||||
#
|
||||
|
||||
xor %eax, %eax
|
||||
|
||||
SecCarInitExit:
|
||||
|
||||
movd %mm7, %esi #RET_ESI
|
||||
jmp *%esi
|
Reference in New Issue
Block a user