mirror of https://github.com/acidanthera/audk.git
165 lines
3.6 KiB
C
165 lines
3.6 KiB
C
/** @file
|
|
|
|
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
|
|
|
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 <Library/ArmLib.h>
|
|
#include "ArmLibPrivate.h"
|
|
|
|
ARM_CACHE_TYPE
|
|
EFIAPI
|
|
ArmCacheType (
|
|
VOID
|
|
)
|
|
{
|
|
switch (CACHE_TYPE(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_TYPE_WRITE_BACK: return ARM_CACHE_TYPE_WRITE_BACK;
|
|
default: return ARM_CACHE_TYPE_UNKNOWN;
|
|
}
|
|
}
|
|
|
|
ARM_CACHE_ARCHITECTURE
|
|
EFIAPI
|
|
ArmCacheArchitecture (
|
|
VOID
|
|
)
|
|
{
|
|
switch (CACHE_ARCHITECTURE(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_ARCHITECTURE_UNIFIED: return ARM_CACHE_ARCHITECTURE_UNIFIED;
|
|
case CACHE_ARCHITECTURE_SEPARATE: return ARM_CACHE_ARCHITECTURE_SEPARATE;
|
|
default: return ARM_CACHE_ARCHITECTURE_UNKNOWN;
|
|
}
|
|
}
|
|
|
|
BOOLEAN
|
|
EFIAPI
|
|
ArmDataCachePresent (
|
|
VOID
|
|
)
|
|
{
|
|
switch (DATA_CACHE_PRESENT(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_PRESENT: return TRUE;
|
|
case CACHE_NOT_PRESENT: return FALSE;
|
|
default: return FALSE;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmDataCacheSize (
|
|
VOID
|
|
)
|
|
{
|
|
switch (DATA_CACHE_SIZE(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_SIZE_4_KB: return 4 * 1024;
|
|
case CACHE_SIZE_8_KB: return 8 * 1024;
|
|
case CACHE_SIZE_16_KB: return 16 * 1024;
|
|
case CACHE_SIZE_32_KB: return 32 * 1024;
|
|
case CACHE_SIZE_64_KB: return 64 * 1024;
|
|
case CACHE_SIZE_128_KB: return 128 * 1024;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmDataCacheAssociativity (
|
|
VOID
|
|
)
|
|
{
|
|
switch (DATA_CACHE_ASSOCIATIVITY(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_ASSOCIATIVITY_4_WAY: return 4;
|
|
case CACHE_ASSOCIATIVITY_DIRECT: return 1;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmDataCacheLineLength (
|
|
VOID
|
|
)
|
|
{
|
|
switch (DATA_CACHE_LINE_LENGTH(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_LINE_LENGTH_32_BYTES: return 32;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
BOOLEAN
|
|
EFIAPI
|
|
ArmInstructionCachePresent (
|
|
VOID
|
|
)
|
|
{
|
|
switch (INSTRUCTION_CACHE_PRESENT(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_PRESENT: return TRUE;
|
|
case CACHE_NOT_PRESENT: return FALSE;
|
|
default: return FALSE;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmInstructionCacheSize (
|
|
VOID
|
|
)
|
|
{
|
|
switch (INSTRUCTION_CACHE_SIZE(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_SIZE_4_KB: return 4 * 1024;
|
|
case CACHE_SIZE_8_KB: return 8 * 1024;
|
|
case CACHE_SIZE_16_KB: return 16 * 1024;
|
|
case CACHE_SIZE_32_KB: return 32 * 1024;
|
|
case CACHE_SIZE_64_KB: return 64 * 1024;
|
|
case CACHE_SIZE_128_KB: return 128 * 1024;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmInstructionCacheAssociativity (
|
|
VOID
|
|
)
|
|
{
|
|
switch (INSTRUCTION_CACHE_ASSOCIATIVITY(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_ASSOCIATIVITY_8_WAY: return 8;
|
|
case CACHE_ASSOCIATIVITY_4_WAY: return 4;
|
|
case CACHE_ASSOCIATIVITY_DIRECT: return 1;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmInstructionCacheLineLength (
|
|
VOID
|
|
)
|
|
{
|
|
switch (INSTRUCTION_CACHE_LINE_LENGTH(Cp15CacheInfo()))
|
|
{
|
|
case CACHE_LINE_LENGTH_32_BYTES: return 32;
|
|
default: return 0;
|
|
}
|
|
}
|
|
|
|
|