/** @file

  Copyright (c) 2020 - 2021, NUVIA Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef ARM_CACHE_H_
#define ARM_CACHE_H_

#include <Uefi/UefiBaseType.h>

// The ARM Architecture Reference Manual for ARMv8-A defines up
// to 7 levels of cache, L1 through L7.
#define MAX_ARM_CACHE_LEVEL  7

/// Defines the structure of the CSSELR (Cache Size Selection) register
typedef union {
  struct {
    UINT32    InD      : 1;  ///< Instruction not Data bit
    UINT32    Level    : 3;  ///< Cache level (zero based)
    UINT32    TnD      : 1;  ///< Allocation not Data bit
    UINT32    Reserved : 27; ///< Reserved, RES0
  } Bits;         ///< Bitfield definition of the register
  UINT32    Data; ///< The entire 32-bit value
} CSSELR_DATA;

/// The cache type values for the InD field of the CSSELR register
typedef enum {
  /// Select the data or unified cache
  CsselrCacheTypeDataOrUnified = 0,
  /// Select the instruction cache
  CsselrCacheTypeInstruction,
  CsselrCacheTypeMax
} CSSELR_CACHE_TYPE;

/// Defines the structure of the CCSIDR (Current Cache Size ID) register
typedef union {
  struct {
    UINT64    LineSize      : 3;      ///< Line size (Log2(Num bytes in cache) - 4)
    UINT64    Associativity : 10;     ///< Associativity - 1
    UINT64    NumSets       : 15;     ///< Number of sets in the cache -1
    UINT64    Unknown       : 4;      ///< Reserved, UNKNOWN
    UINT64    Reserved      : 32;     ///< Reserved, RES0
  } BitsNonCcidx; ///< Bitfield definition of the register when FEAT_CCIDX is not supported.
  struct {
    UINT64    LineSize      : 3;      ///< Line size (Log2(Num bytes in cache) - 4)
    UINT64    Associativity : 21;     ///< Associativity - 1
    UINT64    Reserved1     : 8;      ///< Reserved, RES0
    UINT64    NumSets       : 24;     ///< Number of sets in the cache -1
    UINT64    Reserved2     : 8;      ///< Reserved, RES0
  } BitsCcidxAA64; ///< Bitfield definition of the register when FEAT_IDX is supported.
  struct {
    UINT64    LineSize      : 3;
    UINT64    Associativity : 21;
    UINT64    Reserved      : 8;
    UINT64    Unallocated   : 32;
  } BitsCcidxAA32;
  UINT64    Data; ///< The entire 64-bit value
} CCSIDR_DATA;

/// Defines the structure of the AARCH32 CCSIDR2 register.
typedef union {
  struct {
    UINT32    NumSets  : 24;          ///< Number of sets in the cache - 1
    UINT32    Reserved : 8;           ///< Reserved, RES0
  } Bits;         ///< Bitfield definition of the register
  UINT32    Data; ///< The entire 32-bit value
} CCSIDR2_DATA;

/** Defines the structure of the CLIDR (Cache Level ID) register.
 *
 * The lower 32 bits are the same for both AARCH32 and AARCH64
 * so we can use the same structure for both.
**/
typedef union {
  struct {
    UINT32    Ctype1 : 3;   ///< Level 1 cache type
    UINT32    Ctype2 : 3;   ///< Level 2 cache type
    UINT32    Ctype3 : 3;   ///< Level 3 cache type
    UINT32    Ctype4 : 3;   ///< Level 4 cache type
    UINT32    Ctype5 : 3;   ///< Level 5 cache type
    UINT32    Ctype6 : 3;   ///< Level 6 cache type
    UINT32    Ctype7 : 3;   ///< Level 7 cache type
    UINT32    LoUIS  : 3;   ///< Level of Unification Inner Shareable
    UINT32    LoC    : 3;   ///< Level of Coherency
    UINT32    LoUU   : 3;   ///< Level of Unification Uniprocessor
    UINT32    Icb    : 3;   ///< Inner Cache Boundary
  } Bits;         ///< Bitfield definition of the register
  UINT32    Data; ///< The entire 32-bit value
} CLIDR_DATA;

/// The cache types reported in the CLIDR register.
typedef enum {
  /// No cache is present
  ClidrCacheTypeNone = 0,
  /// There is only an instruction cache
  ClidrCacheTypeInstructionOnly,
  /// There is only a data cache
  ClidrCacheTypeDataOnly,
  /// There are separate data and instruction caches
  ClidrCacheTypeSeparate,
  /// There is a unified cache
  ClidrCacheTypeUnified,
  ClidrCacheTypeMax
} CLIDR_CACHE_TYPE;

#define CLIDR_GET_CACHE_TYPE(x, level)  ((x >> (3 * (level))) & 0b111)

#endif /* ARM_CACHE_H_ */
