]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add .S (for GCC) file for Pei/PeiLib/PeiLib_Edk2.inf.
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 23 Aug 2008 11:25:00 +0000 (11:25 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 23 Aug 2008 11:25:00 +0000 (11:25 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5721 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/PeiLib_Edk2.inf
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S [new file with mode: 0644]
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ReadIdt.S [new file with mode: 0644]
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/WriteIdt.S [new file with mode: 0644]

index da93a1c28d472cc896873fd70dc047508f696f0b..3816b061e9527f41e96888e1cdd438d7856535a2 100644 (file)
@@ -42,13 +42,16 @@ COMPONENT_TYPE    = LIBRARY
   ia32/Processor.c\r
   ia32/ProcessorAsms.Asm         |MSFT\r
   ia32/ProcessorAsms.Asm         |INTEL\r
+  ia32/ProcessorAsms.S           |GCC\r
   ia32/SupportItpDebug.asm       |MSFT\r
   ia32/SupportItpDebug.asm       |INTEL\r
   ia32/EfiJump.h\r
   ia32/ReadIdt.asm               |MSFT\r
   ia32/ReadIdt.asm               |INTEL\r
+  ia32/ReadIdt.S                 |GCC\r
   ia32/WriteIdt.asm              |MSFT\r
   ia32/WriteIdt.asm              |INTEL\r
+  ia32/WriteIdt.S                |GCC\r
   ia32/PeiServicePointer.c\r
 \r
 [sources.x64]\r
diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S b/EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/ia32/ProcessorAsms.S
new file mode 100644 (file)
index 0000000..d878b3b
--- /dev/null
@@ -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 (file)
index 0000000..0abd84f
--- /dev/null
@@ -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 (file)
index 0000000..5d072c4
--- /dev/null
@@ -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