1) Add in EcpEfiBreakPoint and EcpMemoryFence which will be defined as EFI_BREAKPOINT and MEMORY_FENCE.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6806 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12 2008-12-02 14:35:15 +00:00
parent 8ad4884016
commit f90eb36c15
9 changed files with 397 additions and 0 deletions

View File

@ -0,0 +1,93 @@
#/*++
#
# Copyright (c) 2004 - 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:
#
# EfiDriverLib.inf
#
# Abstract:
#
# Component description file for the EFI driver library.
#
#--*/
[defines]
BASE_NAME = EfiDriverLib
COMPONENT_TYPE = LIBRARY
[sources.common]
Debug.c
DevicePath.c
EfiDriverLib.c
DxeDriverLib.c
EfiGetConfigTable.c
EfiDriverModelLib.c
Event.c
Handle.c
LibGlobalSt.c
LibGlobalDs.c
LibGlobalErrorLevel.c
Lock.c
EfiLibAllocate.c
Perf.c
ReportStatusCode.c
GetImage.c
../Hob/Hob.c
[sources.ia32]
Ia32/PerformancePrimitives.c
[sources.x64]
X64/PerformancePrimitives.c
[sources.ipf]
Ipf/PerformancePrimitives.s
#
# Only for CYGWINGCC IPF tool chain, EFI_BREAKPOINT and MEMORY_FENCE
# is defined as two functions EcpEfiBreakPoint and EcpMemoryFence.
#
Ipf/AsmCpuMisc.s | GCC
[sources.ebc]
Ebc/PerformancePrimitives.c
[includes.common]
$(EDK_SOURCE)/Foundation
$(EDK_SOURCE)/Foundation/Framework
$(EDK_SOURCE)/Foundation/Efi
$(EDK_SOURCE)/Foundation/Include
$(EDK_SOURCE)/Foundation/Efi/Include
$(EDK_SOURCE)/Foundation/Framework/Include
$(EDK_SOURCE)/Foundation/Include/IndustryStandard
$(EDK_SOURCE)/Foundation/Core/Dxe
$(EDK_SOURCE)/Foundation/Library/Dxe/Include
$(EDK_SOURCE)/Foundation/Cpu/Pentium/Include
[libraries.common]
EdkGuidLib
EdkProtocolLib
EdkFrameworkProtocolLib
EfiGuidLib
EfiProtocolLib
ArchProtocolLib
EfiCommonLib
[libraries.ia32]
CpuIA32Lib
[libraries.x64]
CpuIA32Lib
[libraries.ipf]
CpuIA64Lib
[nmake.common]

View File

@ -0,0 +1,44 @@
/// @file
/// Contains an implementation of EcpEfiBreakPoint and EcpMemoryFence on Itanium-based
/// architecture.
///
/// Copyright (c) 2008, 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: AsmCpuMisc.s
///
///
.text
.proc EcpEfiBreakPoint
.type EcpEfiBreakPoint, @function
EcpEfiBreakPoint::
break.i 0;;
br.ret.dpnt b0;;
.endp EcpEfiBreakPoint
.proc EcpMemoryFence
.type EcpMemoryFence, @function
EcpMemoryFence::
mf;; // memory access ordering
// do we need the mf.a also here?
mf.a // wait for any IO to complete?
// not sure if we need serialization here, just put it, in case...
srlz.d;;
srlz.i;;
br.ret.dpnt b0;;
.endp EcpMemoryFence

View File

@ -47,6 +47,60 @@ Abstract:
#include EFI_PROTOCOL_DEFINITION (DebugMask) #include EFI_PROTOCOL_DEFINITION (DebugMask)
#if defined(__GNUC__) && defined(ECP_CPU_IPF)
VOID
EFIAPI
EcpEfiBreakPoint (
VOID
)
/*++
Routine Description:
Generates a breakpoint on the CPU.
Generates a breakpoint on the CPU. The breakpoint must be implemented such
that code can resume normal execution after the breakpoint.
Arguments:
VOID
Returns:
VOID
--*/
;
VOID
EFIAPI
EcpMemoryFence (
VOID
)
/*++
Routine Description:
Used to serialize load and store operations.
All loads and stores that proceed calls to this function are guaranteed to be
globally visible when this function returns.
Arguments:
VOID
Returns:
VOID
--*/
;
#endif
typedef struct { typedef struct {
CHAR8 *Language; CHAR8 *Language;
CHAR16 *UnicodeString; CHAR16 *UnicodeString;

View File

@ -54,6 +54,60 @@ extern EFI_DXE_SERVICES *gDS;
extern UINTN gRtErrorLevel; extern UINTN gRtErrorLevel;
extern FVB_ENTRY *mFvbEntry; extern FVB_ENTRY *mFvbEntry;
#if defined(__GNUC__) && defined(ECP_CPU_IPF)
VOID
EFIAPI
EcpEfiBreakPoint (
VOID
)
/*++
Routine Description:
Generates a breakpoint on the CPU.
Generates a breakpoint on the CPU. The breakpoint must be implemented such
that code can resume normal execution after the breakpoint.
Arguments:
VOID
Returns:
VOID
--*/
;
VOID
EFIAPI
EcpMemoryFence (
VOID
)
/*++
Routine Description:
Used to serialize load and store operations.
All loads and stores that proceed calls to this function are guaranteed to be
globally visible when this function returns.
Arguments:
VOID
Returns:
VOID
--*/
;
#endif
VOID VOID
EFIAPI EFIAPI
EfiRuntimeLibFvbVirtualNotifyEvent ( EfiRuntimeLibFvbVirtualNotifyEvent (

View File

@ -31,6 +31,60 @@ Abstract:
#include EFI_GUID_DEFINITION (PeiPeCoffLoader) #include EFI_GUID_DEFINITION (PeiPeCoffLoader)
#include EFI_PPI_DEFINITION (FindFv) #include EFI_PPI_DEFINITION (FindFv)
#if defined(__GNUC__) && defined(ECP_CPU_IPF)
VOID
EFIAPI
EcpEfiBreakPoint (
VOID
)
/*++
Routine Description:
Generates a breakpoint on the CPU.
Generates a breakpoint on the CPU. The breakpoint must be implemented such
that code can resume normal execution after the breakpoint.
Arguments:
VOID
Returns:
VOID
--*/
;
VOID
EFIAPI
EcpMemoryFence (
VOID
)
/*++
Routine Description:
Used to serialize load and store operations.
All loads and stores that proceed calls to this function are guaranteed to be
globally visible when this function returns.
Arguments:
VOID
Returns:
VOID
--*/
;
#endif
#if (PI_SPECIFICATION_VERSION >= 0x00010000) #if (PI_SPECIFICATION_VERSION >= 0x00010000)

View File

@ -0,0 +1,44 @@
/// @file
/// Contains an implementation of EcpEfiBreakPoint and EcpMemoryFence on Itanium-based
/// architecture.
///
/// Copyright (c) 2008, 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: AsmCpuMisc.s
///
///
.text
.proc EcpEfiBreakPoint
.type EcpEfiBreakPoint, @function
EcpEfiBreakPoint::
break.i 0;;
br.ret.dpnt b0;;
.endp EcpEfiBreakPoint
.proc EcpMemoryFence
.type EcpMemoryFence, @function
EcpMemoryFence::
mf;; // memory access ordering
// do we need the mf.a also here?
mf.a // wait for any IO to complete?
// not sure if we need serialization here, just put it, in case...
srlz.d;;
srlz.i;;
br.ret.dpnt b0;;
.endp EcpMemoryFence

View File

@ -83,6 +83,11 @@ COMPONENT_TYPE = LIBRARY
Ipf/Ia_64Gen.h Ipf/Ia_64Gen.h
Ipf/HwAccess.s Ipf/HwAccess.s
Ipf/PeiServicePointer.c Ipf/PeiServicePointer.c
#
# Only for CYGWINGCC IPF tool chain, EFI_BREAKPOINT and MEMORY_FENCE
# is defined as two functions EcpEfiBreakPoint and EcpMemoryFence.
#
Ipf/AsmCpuMisc.s | GCC
[libraries.common] [libraries.common]

View File

@ -57,6 +57,11 @@ COMPONENT_TYPE = LIBRARY
Ipf/Fvb.c Ipf/Fvb.c
Ipf/EsalLib.s Ipf/EsalLib.s
Ipf/IpfCpuCache.s Ipf/IpfCpuCache.s
#
# Only for CYGWINGCC IPF tool chain, EFI_BREAKPOINT and MEMORY_FENCE
# is defined as two functions EcpEfiBreakPoint and EcpMemoryFence.
#
Ipf/AsmCpuMisc.s | GCC
[sources.ebc] [sources.ebc]
Ebc/RuntimeLib.c Ebc/RuntimeLib.c

View File

@ -0,0 +1,44 @@
/// @file
/// Contains an implementation of EcpEfiBreakPoint and EcpMemoryFence on Itanium-based
/// architecture.
///
/// Copyright (c) 2008, 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: AsmCpuMisc.s
///
///
.text
.proc EcpEfiBreakPoint
.type EcpEfiBreakPoint, @function
EcpEfiBreakPoint::
break.i 0;;
br.ret.dpnt b0;;
.endp EcpEfiBreakPoint
.proc EcpMemoryFence
.type EcpMemoryFence, @function
EcpMemoryFence::
mf;; // memory access ordering
// do we need the mf.a also here?
mf.a // wait for any IO to complete?
// not sure if we need serialization here, just put it, in case...
srlz.d;;
srlz.i;;
br.ret.dpnt b0;;
.endp EcpMemoryFence