diff options
author | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-08-23 11:25:00 +0000 |
---|---|---|
committer | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-08-23 11:25:00 +0000 |
commit | 822a6944bcfc11b562bf6599a4649ddd285dc08a (patch) | |
tree | 1d95c37dc66e959b0f8bbcb79b3d8f830b4755a6 | |
parent | 78d41186a52d63dafad39e251700c58ae4674e9c (diff) | |
download | edk2-platforms-822a6944bcfc11b562bf6599a4649ddd285dc08a.tar.xz |
Add .S (for GCC) file for Pei/PeiLib/PeiLib_Edk2.inf.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5721 6f19259b-4bc3-4df7-8a09-765794883524
4 files changed, 329 insertions, 0 deletions
diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/PeiLib_Edk2.inf b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/PeiLib_Edk2.inf index da93a1c28d..3816b061e9 100644 --- a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/PeiLib_Edk2.inf +++ b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/PeiLib_Edk2.inf @@ -42,13 +42,16 @@ COMPONENT_TYPE = LIBRARY ia32/Processor.c
ia32/ProcessorAsms.Asm |MSFT
ia32/ProcessorAsms.Asm |INTEL
+ ia32/ProcessorAsms.S |GCC
ia32/SupportItpDebug.asm |MSFT
ia32/SupportItpDebug.asm |INTEL
ia32/EfiJump.h
ia32/ReadIdt.asm |MSFT
ia32/ReadIdt.asm |INTEL
+ ia32/ReadIdt.S |GCC
ia32/WriteIdt.asm |MSFT
ia32/WriteIdt.asm |INTEL
+ ia32/WriteIdt.S |GCC
ia32/PeiServicePointer.c
[sources.x64]
diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S new file mode 100644 index 0000000000..d878b3b8b2 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S @@ -0,0 +1,207 @@ +# +# Copyright (c) 2004, Intel Corporation +# All rights reserved. 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: +# +# ProcessorAsms.Asm +# +# +# +#include "EfiBind.h" +#------------------------------------------------------------------------------ + + .686P: + .MMX: + #.MODEL SMALL + .CODE: +#------------------------------------------------------------------------------ + +.globl ASM_PFX(TransferControlSetJump) +.globl ASM_PFX(TransferControlLongJump) +.globl ASM_PFX(SwitchStacks) +.globl ASM_PFX(SwitchIplStacks) + +.equ EFI_SUCCESS, 0 +.equ EFI_WARN_RETURN_FROM_LONG_JUMP, 5 + +# +# typedef struct { +# UINT32 ebx; +# UINT32 esi; +# UINT32 edi; +# UINT32 ebp; +# UINT32 esp; +# UINT32 eip; +#} EFI_JUMP_BUFFER; +# + +#typedef +#EFI_STATUS +#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_SET_JUMP) ( +# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This, +# OUT EFI_JUMP_BUFFER *Context +# ); +# +#Routine Description: +# +# This routine implements the IA32 variant of the SetJump call. Its +# responsibility is to store system state information for a possible +# subsequent LongJump. +# +#Arguments: +# +# Pointer to CPU context save buffer. +# +#Returns: +# +# EFI_SUCCESS +# +ASM_PFX(TransferControlSetJump): + push %ebp + mov %esp,%ebp + mov 0x8(%ebp),%eax + mov 0xc(%ebp),%ecx + mov %ebx,(%ecx) + mov %esi,0x4(%ecx) + mov %edi,0x8(%ecx) + mov 0x0(%ebp),%eax + mov %eax,0xc(%ecx) + lea 0x4(%ebp),%eax + mov %eax,0x10(%ecx) + mov 0x4(%ebp),%eax + mov %eax,0x14(%ecx) + mov $0x0,%eax + leave + ret + +#typedef +#EFI_STATUS +#(EFIAPI *EFI_PEI_TRANSFER_CONTROL_LONG_JUMP) ( +# IN EFI_PEI_TRANSFER_CONTROL_PROTOCOL *This, +# IN EFI_JUMP_BUFFER *Context +# ); +# +# Routine Description: +# +# This routine implements the IA32 variant of the LongJump call. Its +# responsibility is restore the system state to the Context Buffer and +# pass control back. +# +# Arguments: +# +# Pointer to CPU context save buffer. +# +# Returns: +# +# EFI_WARN_RETURN_FROM_LONG_JUMP +# + +ASM_PFX(TransferControlLongJump): + push %ebp + mov %esp,%ebp + push %ebx + push %esi + push %edi + mov 0x8(%ebp),%eax + mov $0x5,%eax + mov 0xc(%ebp),%ecx + mov (%ecx),%ebx + mov 0x4(%ecx),%esi + mov 0x8(%ecx),%edi + mov 0xc(%ecx),%ebp + mov 0x10(%ecx),%esp + add $0x4,%esp + jmp *0x14(%ecx) + mov $0x5,%eax + pop %edi + pop %esi + pop %ebx + leave + ret + +# +# Routine Description: +# This allows the caller to switch the stack and goes to the new entry point +# +# Arguments: +# EntryPoint - Pointer to the location to enter +# Parameter - Parameter to pass in +# NewStack - New Location of the stack +# NewBsp - New BSP +# +# Returns: +# +# Nothing. Goes to the Entry Point passing in the new parameters +# +#SwitchStacks PROC C \ +# EntryPoint:PTR DWORD, \ +# Parameter:DWORD, \ +# NewStack:PTR DWORD, \ +# NewBsp:PTR DWORD +ASM_PFX(SwitchStacks): + push %ebp + mov %esp,%ebp + push %ebx + mov 0x14(%ebp),%eax + mov 0xc(%ebp),%ebx + mov 0x8(%ebp),%ecx + mov 0x10(%ebp),%eax + mov %eax,%esp + push %ebx + push $0x0 + jmp *%ecx + pop %ebx + leave + ret + + + + +# +# Routine Description: +# This allows the caller to switch the stack and goes to the new entry point +# +# Arguments: +# EntryPoint - Pointer to the location to enter +# Parameter1/Parameter2 - Parameter to pass in +# NewStack - New Location of the stack +# NewBsp - New BSP +# +# Returns: +# +# Nothing. Goes to the Entry Point passing in the new parameters +# +#SwitchIplStacks PROC C \ +# EntryPoint:PTR DWORD, \ +# Parameter1:DWORD, \ +# Parameter2:DWORD, \ +# NewStack:PTR DWORD, \ +# NewBsp:PTR DWORD +ASM_PFX(SwitchIplStacks): + push %ebp + mov %esp,%ebp + push %ebx + mov 0x18(%ebp),%eax + mov 0xc(%ebp),%ebx + mov 0x10(%ebp),%edx + mov 0x8(%ebp),%ecx + mov 0x14(%ebp),%eax + mov %eax,%esp + push %edx + push %ebx + call *%ecx + pop %ebx + leave + ret + +#SwitchIplStacks ENDP + + + diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ReadIdt.S b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ReadIdt.S new file mode 100644 index 0000000000..0abd84f902 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ReadIdt.S @@ -0,0 +1,69 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. 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: +# +# ReadIdtBase.Asm +# +# Abstract: +# +# ReadIdtBase function +# +# Notes: +# +#include "EfiBind.h" +#------------------------------------------------------------------------------ + + .586: + #.MODEL flat,C + .code: + +.globl ASM_PFX(ReadIdtBasea) +.globl ASM_PFX(ReadIdtLimita) + +#------------------------------------------------------------------------------ +# UINTN +# ReadIdtBase ( +# void +# ) +# +# Abstract: Returns physical address of IDTR +# +ASM_PFX(ReadIdtBasea): + push %ebp + mov %esp,%ebp + add $0xfffffff8,%esp + sidtl 0xfffffffa(%ebp) + mov 0xfffffffc(%ebp),%eax + leave + ret + + + +#------------------------------------------------------------------------------ +# UINT16 +# ReadIdtLimit ( +# void +# ) +# +# Abstract: Returns Limit of IDTR +# +ASM_PFX(ReadIdtLimita): + push %ebp + mov %esp,%ebp + add $0xfffffff8,%esp + sidtl 0xfffffffa(%ebp) + mov 0xfffffffa(%ebp),%ax + leave + ret + + + diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/WriteIdt.S b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/WriteIdt.S new file mode 100644 index 0000000000..5d072c4921 --- /dev/null +++ b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/WriteIdt.S @@ -0,0 +1,50 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006, Intel Corporation +# All rights reserved. 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: +# +# WriteIdt.Asm +# +# Abstract: +# +# SetIdtBase function +# +# Notes: +# +#include "EfiBind.h" +#------------------------------------------------------------------------------ + + .586: + #.MODEL flat,C + .code: +#------------------------------------------------------------------------------ + +.globl ASM_PFX(SetIdtBase) + +# void +# SetIdtBase ( +# UINT32 IdtBase, +# UINT16 IdtLimit +# ) +# +# Abstract: Set IDTR with the given physical address +# +ASM_PFX(SetIdtBase): + push %ebp + mov %esp,%ebp + add $0xfffffff8,%esp + mov 0x8(%ebp),%eax + mov 0xc(%ebp),%cx + mov %eax,0xfffffffc(%ebp) + mov %cx,0xfffffffa(%ebp) + lidtl 0xfffffffa(%ebp) + leave + ret |