mirror of https://github.com/acidanthera/audk.git
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:
parent
78d41186a5
commit
822a6944bc
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -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
|
Loading…
Reference in New Issue