#error "Unknown chipset."\r
#endif\r
\r
-typedef enum {\r
- ARM_CACHE_TYPE_WRITE_BACK,\r
- ARM_CACHE_TYPE_UNKNOWN\r
-} ARM_CACHE_TYPE;\r
-\r
-typedef enum {\r
- ARM_CACHE_ARCHITECTURE_UNIFIED,\r
- ARM_CACHE_ARCHITECTURE_SEPARATE,\r
- ARM_CACHE_ARCHITECTURE_UNKNOWN\r
-} ARM_CACHE_ARCHITECTURE;\r
-\r
-typedef struct {\r
- ARM_CACHE_TYPE Type;\r
- ARM_CACHE_ARCHITECTURE Architecture;\r
- BOOLEAN DataCachePresent;\r
- UINTN DataCacheSize;\r
- UINTN DataCacheAssociativity;\r
- UINTN DataCacheLineLength;\r
- BOOLEAN InstructionCachePresent;\r
- UINTN InstructionCacheSize;\r
- UINTN InstructionCacheAssociativity;\r
- UINTN InstructionCacheLineLength;\r
-} ARM_CACHE_INFO;\r
-\r
/**\r
* The UEFI firmware must not use the ARM_MEMORY_REGION_ATTRIBUTE_NONSECURE_* attributes.\r
*\r
#define GET_MPID(ClusterId, CoreId) (((ClusterId) << 8) | (CoreId))\r
#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
\r
-ARM_CACHE_TYPE\r
-EFIAPI\r
-ArmCacheType (\r
- VOID\r
- );\r
-\r
-ARM_CACHE_ARCHITECTURE\r
-EFIAPI\r
-ArmCacheArchitecture (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmCacheInformation (\r
- OUT ARM_CACHE_INFO *CacheInfo\r
- );\r
-\r
-BOOLEAN\r
-EFIAPI\r
-ArmDataCachePresent (\r
- VOID\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheSize (\r
- VOID\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheAssociativity (\r
- VOID\r
- );\r
-\r
UINTN\r
EFIAPI\r
ArmDataCacheLineLength (\r
VOID\r
);\r
\r
-BOOLEAN\r
-EFIAPI\r
-ArmInstructionCachePresent (\r
- VOID\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSize (\r
- VOID\r
- );\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheAssociativity (\r
- VOID\r
- );\r
-\r
UINTN\r
EFIAPI\r
ArmInstructionCacheLineLength (\r
#include "AArch64Lib.h"\r
#include "ArmLibPrivate.h"\r
\r
-ARM_CACHE_TYPE\r
-EFIAPI\r
-ArmCacheType (\r
- VOID\r
- )\r
-{\r
- return ARM_CACHE_TYPE_WRITE_BACK;\r
-}\r
-\r
-ARM_CACHE_ARCHITECTURE\r
-EFIAPI\r
-ArmCacheArchitecture (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- return (ARM_CACHE_ARCHITECTURE)CLIDR; // BugBug Fix Me\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-ArmDataCachePresent (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- if ((CLIDR & 0x2) == 0x2) {\r
- // Instruction cache exists\r
- return TRUE;\r
- }\r
- if ((CLIDR & 0x7) == 0x4) {\r
- // Unified cache\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheSize (\r
- VOID\r
- )\r
-{\r
- UINT32 NumSets;\r
- UINT32 Associativity;\r
- UINT32 LineSize;\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- LineSize = (1 << ((CCSIDR & 0x7) + 2));\r
- Associativity = ((CCSIDR >> 3) & 0x3ff) + 1;\r
- NumSets = ((CCSIDR >> 13) & 0x7fff) + 1;\r
-\r
- // LineSize is in words (4 byte chunks)\r
- return NumSets * Associativity * LineSize * 4;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- return ((CCSIDR >> 3) & 0x3ff) + 1;\r
-}\r
-\r
-UINTN\r
-ArmDataCacheSets (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- return ((CCSIDR >> 13) & 0x7fff) + 1;\r
-}\r
-\r
UINTN\r
EFIAPI\r
ArmDataCacheLineLength (\r
return (1 << (CCSIDR + 2)) * 4;\r
}\r
\r
-BOOLEAN\r
-EFIAPI\r
-ArmInstructionCachePresent (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- if ((CLIDR & 1) == 1) {\r
- // Instruction cache exists\r
- return TRUE;\r
- }\r
- if ((CLIDR & 0x7) == 0x4) {\r
- // Unified cache\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSize (\r
- VOID\r
- )\r
-{\r
- UINT32 NumSets;\r
- UINT32 Associativity;\r
- UINT32 LineSize;\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- LineSize = (1 << ((CCSIDR & 0x7) + 2));\r
- Associativity = ((CCSIDR >> 3) & 0x3ff) + 1;\r
- NumSets = ((CCSIDR >> 13) & 0x7fff) + 1;\r
-\r
- // LineSize is in words (4 byte chunks)\r
- return NumSets * Associativity * LineSize * 4;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- return ((CCSIDR >> 3) & 0x3ff) + 1;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSets (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- return ((CCSIDR >> 13) & 0x7fff) + 1;\r
-}\r
-\r
UINTN\r
EFIAPI\r
ArmInstructionCacheLineLength (\r
#include "ArmV7Lib.h"\r
#include "ArmLibPrivate.h"\r
\r
-ARM_CACHE_TYPE\r
-EFIAPI\r
-ArmCacheType (\r
- VOID\r
- )\r
-{\r
- return ARM_CACHE_TYPE_WRITE_BACK;\r
-}\r
-\r
-ARM_CACHE_ARCHITECTURE\r
-EFIAPI\r
-ArmCacheArchitecture (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- return (ARM_CACHE_ARCHITECTURE)CLIDR; // BugBug Fix Me\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-ArmDataCachePresent (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- if ((CLIDR & 0x2) == 0x2) {\r
- // Instruction cache exists\r
- return TRUE;\r
- }\r
- if ((CLIDR & 0x7) == 0x4) {\r
- // Unified cache\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheSize (\r
- VOID\r
- )\r
-{\r
- UINT32 NumSets;\r
- UINT32 Associativity;\r
- UINT32 LineSize;\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- LineSize = (1 << ((CCSIDR & 0x7) + 2));\r
- Associativity = ((CCSIDR >> 3) & 0x3ff) + 1;\r
- NumSets = ((CCSIDR >> 13) & 0x7fff) + 1;\r
-\r
- // LineSize is in words (4 byte chunks)\r
- return NumSets * Associativity * LineSize * 4;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- return ((CCSIDR >> 3) & 0x3ff) + 1;\r
-}\r
-\r
-UINTN\r
-ArmDataCacheSets (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (0);\r
-\r
- return ((CCSIDR >> 13) & 0x7fff) + 1;\r
-}\r
-\r
UINTN\r
EFIAPI\r
ArmDataCacheLineLength (\r
return (1 << (CCSIDR + 2)) * 4;\r
}\r
\r
-BOOLEAN\r
-EFIAPI\r
-ArmInstructionCachePresent (\r
- VOID\r
- )\r
-{\r
- UINT32 CLIDR = ReadCLIDR ();\r
-\r
- if ((CLIDR & 1) == 1) {\r
- // Instruction cache exists\r
- return TRUE;\r
- }\r
- if ((CLIDR & 0x7) == 0x4) {\r
- // Unified cache\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSize (\r
- VOID\r
- )\r
-{\r
- UINT32 NumSets;\r
- UINT32 Associativity;\r
- UINT32 LineSize;\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- LineSize = (1 << ((CCSIDR & 0x7) + 2));\r
- Associativity = ((CCSIDR >> 3) & 0x3ff) + 1;\r
- NumSets = ((CCSIDR >> 13) & 0x7fff) + 1;\r
-\r
- // LineSize is in words (4 byte chunks)\r
- return NumSets * Associativity * LineSize * 4;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- return ((CCSIDR >> 3) & 0x3ff) + 1;\r
-// return 4;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSets (\r
- VOID\r
- )\r
-{\r
- UINT32 CCSIDR = ReadCCSIDR (1);\r
-\r
- return ((CCSIDR >> 13) & 0x7fff) + 1;\r
-}\r
-\r
UINTN\r
EFIAPI\r
ArmInstructionCacheLineLength (\r
\r
#include "ArmLibPrivate.h"\r
\r
-VOID\r
-EFIAPI\r
-ArmCacheInformation (\r
- OUT ARM_CACHE_INFO *CacheInfo\r
- )\r
-{\r
- if (CacheInfo != NULL) {\r
- CacheInfo->Type = ArmCacheType();\r
- CacheInfo->Architecture = ArmCacheArchitecture();\r
- CacheInfo->DataCachePresent = ArmDataCachePresent();\r
- CacheInfo->DataCacheSize = ArmDataCacheSize();\r
- CacheInfo->DataCacheAssociativity = ArmDataCacheAssociativity();\r
- CacheInfo->DataCacheLineLength = ArmDataCacheLineLength();\r
- CacheInfo->InstructionCachePresent = ArmInstructionCachePresent();\r
- CacheInfo->InstructionCacheSize = ArmInstructionCacheSize();\r
- CacheInfo->InstructionCacheAssociativity = ArmInstructionCacheAssociativity();\r
- CacheInfo->InstructionCacheLineLength = ArmInstructionCacheLineLength();\r
- }\r
-}\r
-\r
VOID\r
EFIAPI\r
ArmSetAuxCrBit (\r
+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include <Library/ArmLib.h>\r
-#include "ArmLibPrivate.h"\r
-\r
-ARM_CACHE_TYPE\r
-EFIAPI\r
-ArmCacheType (\r
- VOID\r
- )\r
-{\r
- return ARM_CACHE_TYPE_UNKNOWN;\r
-}\r
-\r
-ARM_CACHE_ARCHITECTURE\r
-EFIAPI\r
-ArmCacheArchitecture (\r
- VOID\r
- )\r
-{\r
- return ARM_CACHE_ARCHITECTURE_UNKNOWN;\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-ArmDataCachePresent (\r
- VOID\r
- )\r
-{\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheSize (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmDataCacheLineLength (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
-\r
-BOOLEAN\r
-EFIAPI\r
-ArmInstructionCachePresent (\r
- VOID\r
- )\r
-{\r
- return FALSE;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheSize (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheAssociativity (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
-\r
-UINTN\r
-EFIAPI\r
-ArmInstructionCacheLineLength (\r
- VOID\r
- )\r
-{\r
- return 0;\r
-}\r
../Common/ArmLib.c\r
\r
NullArmLib.c\r
- NullArmCacheInformation.c\r
\r
[Sources.ARM]\r
../Common/Arm/ArmLibSupport.S | GCC\r