mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
Add ASSERT check for AsmFlushCacheRange().
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8465 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
63fffe4e72
commit
287f4f47b4
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Cache Maintenance Functions.
|
Cache Maintenance Functions.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation<BR>
|
Copyright (c) 2006 - 2009, Intel Corporation<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -64,7 +64,6 @@ InvalidateInstructionCacheRange (
|
|||||||
IN UINTN Length
|
IN UINTN Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
|
|
||||||
return AsmFlushCacheRange (Address, Length);
|
return AsmFlushCacheRange (Address, Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +119,6 @@ WriteBackInvalidateDataCacheRange (
|
|||||||
IN UINTN Length
|
IN UINTN Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
|
|
||||||
|
|
||||||
return AsmFlushCacheRange (Address, Length);
|
return AsmFlushCacheRange (Address, Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,8 +173,6 @@ WriteBackDataCacheRange (
|
|||||||
IN UINTN Length
|
IN UINTN Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
|
|
||||||
|
|
||||||
return AsmFlushCacheRange (Address, Length);
|
return AsmFlushCacheRange (Address, Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,7 +234,6 @@ InvalidateDataCacheRange (
|
|||||||
IN UINTN Length
|
IN UINTN Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
|
|
||||||
//
|
//
|
||||||
// Invalidation of a data cache range without writing back is not supported on
|
// Invalidation of a data cache range without writing back is not supported on
|
||||||
// IPF architecture, so write back and invalidate operation is performed.
|
// IPF architecture, so write back and invalidate operation is performed.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#/** @file
|
#/** @file
|
||||||
# Base Library implementation.
|
# Base Library implementation.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2008, Intel Corporation.
|
# Copyright (c) 2007 - 2009, Intel Corporation.
|
||||||
#
|
#
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -558,7 +558,8 @@
|
|||||||
Ipf/AccessMsr.s | INTEL
|
Ipf/AccessMsr.s | INTEL
|
||||||
Ipf/AccessMsr.s | GCC
|
Ipf/AccessMsr.s | GCC
|
||||||
Ipf/AccessMsrDb.s | MSFT
|
Ipf/AccessMsrDb.s | MSFT
|
||||||
Ipf/FlushCacheRange.s
|
Ipf/InternalFlushCacheRange.s
|
||||||
|
Ipf/FlushCacheRange.c
|
||||||
Ipf/InternalSwitchStack.c
|
Ipf/InternalSwitchStack.c
|
||||||
Ipf/GetInterruptState.s
|
Ipf/GetInterruptState.s
|
||||||
Ipf/CpuPause.s
|
Ipf/CpuPause.s
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Declaration of internal functions in BaseLib.
|
Declaration of internal functions in BaseLib.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation<BR>
|
Copyright (c) 2006 - 2009, Intel Corporation<BR>
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -1616,6 +1616,38 @@ AsmSwitchStackAndBackingStore (
|
|||||||
IN VOID *NewStack,
|
IN VOID *NewStack,
|
||||||
IN VOID *NewBsp
|
IN VOID *NewBsp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Internal worker function to invalidate a range of instruction cache lines
|
||||||
|
in the cache coherency domain of the calling CPU.
|
||||||
|
|
||||||
|
Internal worker function to invalidate the instruction cache lines specified
|
||||||
|
by Address and Length. If Address is not aligned on a cache line boundary,
|
||||||
|
then entire instruction cache line containing Address is invalidated. If
|
||||||
|
Address + Length is not aligned on a cache line boundary, then the entire
|
||||||
|
instruction cache line containing Address + Length -1 is invalidated. This
|
||||||
|
function may choose to invalidate the entire instruction cache if that is more
|
||||||
|
efficient than invalidating the specified range. If Length is 0, the no instruction
|
||||||
|
cache lines are invalidated. Address is returned.
|
||||||
|
This function is only available on IPF.
|
||||||
|
|
||||||
|
@param Address The base address of the instruction cache lines to
|
||||||
|
invalidate. If the CPU is in a physical addressing mode, then
|
||||||
|
Address is a physical address. If the CPU is in a virtual
|
||||||
|
addressing mode, then Address is a virtual address.
|
||||||
|
|
||||||
|
@param Length The number of bytes to invalidate from the instruction cache.
|
||||||
|
|
||||||
|
@return Address
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalFlushCacheRange (
|
||||||
|
IN VOID *Address,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
51
MdePkg/Library/BaseLib/Ipf/FlushCacheRange.c
Normal file
51
MdePkg/Library/BaseLib/Ipf/FlushCacheRange.c
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/** @file
|
||||||
|
AsmFlushCacheRange() function for IPF.
|
||||||
|
|
||||||
|
Copyright (c) 2009, Intel Corporation<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
#include "BaseLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Flush a range of cache lines in the cache coherency domain of the calling
|
||||||
|
CPU.
|
||||||
|
|
||||||
|
Flushes the cache lines specified by Address and Length. If Address is not aligned
|
||||||
|
on a cache line boundary, then entire cache line containing Address is flushed.
|
||||||
|
If Address + Length is not aligned on a cache line boundary, then the entire cache
|
||||||
|
line containing Address + Length - 1 is flushed. This function may choose to flush
|
||||||
|
the entire cache if that is more efficient than flushing the specified range. If
|
||||||
|
Length is 0, the no cache lines are flushed. Address is returned.
|
||||||
|
This function is only available on IPF.
|
||||||
|
|
||||||
|
If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Address The base address of the instruction lines to invalidate. If
|
||||||
|
the CPU is in a physical addressing mode, then Address is a
|
||||||
|
physical address. If the CPU is in a virtual addressing mode,
|
||||||
|
then Address is a virtual address.
|
||||||
|
|
||||||
|
@param Length The number of bytes to invalidate from the instruction cache.
|
||||||
|
|
||||||
|
@return Address.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
AsmFlushCacheRange (
|
||||||
|
IN VOID *Address,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (Length <= MAX_ADDRESS - (UINTN)Address + 1);
|
||||||
|
return InternalFlushCacheRange (Address, Length);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
//++
|
//++
|
||||||
// Copyright (c) 2006 - 2008, Intel Corporation
|
// Copyright (c) 2006 - 2009, Intel Corporation
|
||||||
// All rights reserved. This program and the accompanying materials
|
// All rights reserved. This program and the accompanying materials
|
||||||
// are licensed and made available under the terms and conditions of the BSD License
|
// 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
|
// which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -9,7 +9,7 @@
|
|||||||
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
//
|
//
|
||||||
// Module Name:
|
// Module Name:
|
||||||
// FlushCacheRange.s
|
// InternalFlushCacheRange.s
|
||||||
//
|
//
|
||||||
// Abstract:
|
// Abstract:
|
||||||
// Assemble routine to flush cache lines
|
// Assemble routine to flush cache lines
|
||||||
@ -22,21 +22,19 @@
|
|||||||
#include <IpfMacro.i>
|
#include <IpfMacro.i>
|
||||||
|
|
||||||
//
|
//
|
||||||
// Invalidates a range of instruction cache lines in the cache coherency domain
|
// Internal worker function to invalidate a range of instruction cache lines
|
||||||
// of the calling CPU.
|
// in the cache coherency domain of the calling CPU.
|
||||||
//
|
//
|
||||||
// Invalidates the instruction cache lines specified by Address and Length. If
|
// Internal worker function to invalidate the instruction cache lines specified
|
||||||
// Address is not aligned on a cache line boundary, then entire instruction
|
// by Address and Length. If Address is not aligned on a cache line boundary,
|
||||||
// cache line containing Address is invalidated. If Address + Length is not
|
// then entire instruction cache line containing Address is invalidated. If
|
||||||
// aligned on a cache line boundary, then the entire instruction cache line
|
// Address + Length is not aligned on a cache line boundary, then the entire
|
||||||
// containing Address + Length -1 is invalidated. This function may choose to
|
// instruction cache line containing Address + Length -1 is invalidated. This
|
||||||
// invalidate the entire instruction cache if that is more efficient than
|
// function may choose to invalidate the entire instruction cache if that is more
|
||||||
// invalidating the specified range. If Length is 0, the no instruction cache
|
// efficient than invalidating the specified range. If Length is 0, the no instruction
|
||||||
// lines are invalidated. Address is returned.
|
// cache lines are invalidated. Address is returned.
|
||||||
// This function is only available on IPF.
|
// This function is only available on IPF.
|
||||||
//
|
//
|
||||||
// If Length is greater than (MAX_ADDRESS - Address + 1), then ASSERT().
|
|
||||||
//
|
|
||||||
// @param Address The base address of the instruction cache lines to
|
// @param Address The base address of the instruction cache lines to
|
||||||
// invalidate. If the CPU is in a physical addressing mode, then
|
// invalidate. If the CPU is in a physical addressing mode, then
|
||||||
// Address is a physical address. If the CPU is in a virtual
|
// Address is a physical address. If the CPU is in a virtual
|
||||||
@ -48,12 +46,12 @@
|
|||||||
//
|
//
|
||||||
// VOID *
|
// VOID *
|
||||||
// EFIAPI
|
// EFIAPI
|
||||||
// AsmFlushCacheRange (
|
// InternalFlushCacheRange (
|
||||||
// IN VOID *Address,
|
// IN VOID *Address,
|
||||||
// IN UINTN Length
|
// IN UINTN Length
|
||||||
// );
|
// );
|
||||||
//
|
//
|
||||||
PROCEDURE_ENTRY (AsmFlushCacheRange)
|
PROCEDURE_ENTRY (InternalFlushCacheRange)
|
||||||
|
|
||||||
NESTED_SETUP (5,8,0,0)
|
NESTED_SETUP (5,8,0,0)
|
||||||
|
|
||||||
@ -92,5 +90,5 @@ DoneFlushingC:
|
|||||||
mov r8 = in0 // return *Address
|
mov r8 = in0 // return *Address
|
||||||
NESTED_RETURN
|
NESTED_RETURN
|
||||||
|
|
||||||
PROCEDURE_EXIT (AsmFlushCacheRange)
|
PROCEDURE_EXIT (InternalFlushCacheRange)
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user