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
This commit is contained in:
qwang12 2008-08-23 11:25:00 +00:00
parent 78d41186a5
commit 822a6944bc
4 changed files with 329 additions and 0 deletions

View File

@ -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]

View File

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

View File

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

View File

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