mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
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/Processor.c
|
||||||
ia32/ProcessorAsms.Asm |MSFT
|
ia32/ProcessorAsms.Asm |MSFT
|
||||||
ia32/ProcessorAsms.Asm |INTEL
|
ia32/ProcessorAsms.Asm |INTEL
|
||||||
|
ia32/ProcessorAsms.S |GCC
|
||||||
ia32/SupportItpDebug.asm |MSFT
|
ia32/SupportItpDebug.asm |MSFT
|
||||||
ia32/SupportItpDebug.asm |INTEL
|
ia32/SupportItpDebug.asm |INTEL
|
||||||
ia32/EfiJump.h
|
ia32/EfiJump.h
|
||||||
ia32/ReadIdt.asm |MSFT
|
ia32/ReadIdt.asm |MSFT
|
||||||
ia32/ReadIdt.asm |INTEL
|
ia32/ReadIdt.asm |INTEL
|
||||||
|
ia32/ReadIdt.S |GCC
|
||||||
ia32/WriteIdt.asm |MSFT
|
ia32/WriteIdt.asm |MSFT
|
||||||
ia32/WriteIdt.asm |INTEL
|
ia32/WriteIdt.asm |INTEL
|
||||||
|
ia32/WriteIdt.S |GCC
|
||||||
ia32/PeiServicePointer.c
|
ia32/PeiServicePointer.c
|
||||||
|
|
||||||
[sources.x64]
|
[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…
x
Reference in New Issue
Block a user