// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZIRCON_KERNEL_LIB_ARCH_INCLUDE_LIB_ARCH_ARM64_FEATURE_H_
#define ZIRCON_KERNEL_LIB_ARCH_INCLUDE_LIB_ARCH_ARM64_FEATURE_H_

#include <lib/arch/sysreg.h>

#include <hwreg/bitfields.h>

namespace arch {

// [arm/sysreg]/ID_AA64ISAR0_EL1: AArch64 Instruction Set Attribute Register 0
struct ArmIdAa64IsaR0El1 : public SysRegBase<ArmIdAa64IsaR0El1, uint64_t, hwreg::EnablePrinter> {
  enum class Rndr : uint8_t {
    kNone = 0b0000,
    kRng = 0b0001,
  };

  enum class Tlb : uint8_t {
    kNone = 0b0000,
    kTlbios = 0b0001,
    kkTlbirange = 0b0010,
  };

  enum class Ts : uint8_t {
    kNone = 0b0000,
    kFlagM = 0b0001,
    kFlagM2 = 0b0010,
  };

  enum class Fhm : uint8_t {
    kNone = 0b0000,
    kFhm = 0b0001,
  };

  enum class DotProd : uint8_t {
    kNone = 0b0000,
    kDotProd = 0b0001,
  };

  enum class Sm4 : uint8_t {
    kNone = 0b0000,
    kSm4 = 0b0001,
  };

  enum class Sm3 : uint8_t {
    kNone = 0b0000,
    kSm3 = 0b0001,
  };

  enum class Sha3 : uint8_t {
    kNone = 0b0000,
    kSha3 = 0b0001,
  };

  enum class Rdm : uint8_t {
    kNone = 0b0000,
    kRdm = 0b0001,
  };

  enum class Atomic : uint8_t {
    kNone = 0b0000,
    kLse = 0b0010,
  };

  enum class Crc32 : uint8_t {
    kNone = 0b0000,
    kCrc32 = 0b0001,
  };

  enum class Sha2 : uint8_t {
    kNone = 0b0000,
    kSha256 = 0b0001,
    kSha512 = 0b0010,
  };

  enum class Sha1 : uint8_t {
    kNone = 0b0000,
    kSha1 = 0b0001,
  };

  enum class Aes : uint8_t {
    kNone = 0b0000,
    kAes = 0b0001,
    kPmull = 0b0010,
  };

  DEF_ENUM_FIELD(Rndr, 63, 60, rndr);
  DEF_ENUM_FIELD(Tlb, 59, 56, tlb);
  DEF_ENUM_FIELD(Ts, 55, 52, ts);
  DEF_ENUM_FIELD(Fhm, 51, 48, fhm);
  DEF_ENUM_FIELD(DotProd, 47, 44, dp);
  DEF_ENUM_FIELD(Sm4, 43, 40, sm4);
  DEF_ENUM_FIELD(Sm3, 39, 36, sm3);
  DEF_ENUM_FIELD(Sha3, 35, 32, sha3);
  DEF_ENUM_FIELD(Rdm, 31, 28, rdm);
  DEF_RSVDZ_FIELD(27, 24);
  DEF_ENUM_FIELD(Atomic, 23, 20, atomic);
  DEF_ENUM_FIELD(Crc32, 19, 16, crc32);
  DEF_ENUM_FIELD(Sha2, 15, 12, sha2);
  DEF_ENUM_FIELD(Sha1, 11, 8, sha1);
  DEF_ENUM_FIELD(Aes, 7, 4, aes);
  DEF_RSVDZ_FIELD(3, 0);
};
ARCH_ARM64_SYSREG(ArmIdAa64IsaR0El1, "ID_AA64ISAR0_EL1");

// [arm/sysreg]/ID_AA64ISAR1_EL1: AArch64 Instruction Set Attribute Register 1
struct ArmIdAa64IsaR1El1 : public SysRegBase<ArmIdAa64IsaR1El1> {
  enum class Ls64 : uint8_t {
    kNone = 0b0000,
    kLs64 = 0b0001,
    kLs64V = 0b0010,
    kLs64Accdata = 0b0011,
  };

  enum class Xs : uint8_t {
    kNone = 0b0000,
    kXs = 0b0001,
  };

  enum class I8mm : uint8_t {
    kNone = 0b0000,
    kI8mm = 0b0001,
  };

  enum class Dgh : uint8_t {
    kNone = 0b0000,
    kDgh = 0b0001,
  };

  enum class Bf16 : uint8_t {
    kNone = 0b0000,
    kBf16 = 0b0001,
  };

  enum class Specres : uint8_t {
    kNone = 0b0000,
    kSpecres = 0b0001,
  };

  enum class Sb : uint8_t {
    kNone = 0b0000,
    kSb = 0b0001,
  };

  enum class Frintts : uint8_t {
    kNone = 0b0000,
    kFrintts = 0b0001,
  };

  enum class Gpi : uint8_t {
    kNone = 0b0000,
    kGpi = 0b0001,
  };

  enum class Gpa : uint8_t {
    kNone = 0b0000,
    kGpa = 0b0001,
  };

  enum class Lrcpc : uint8_t {
    kNone = 0b0000,
    kLrcpc = 0b0001,
    kLrcpc2 = 0b0010,
  };

  enum class Fcma : uint8_t {
    kNone = 0b0000,
    kFcma = 0b0001,
  };

  enum class Jscvt : uint8_t {
    kNone = 0b0000,
    kJscvt = 0b0001,
  };

  enum class Pauth : uint8_t {
    kNone = 0b0000,
    kPauth = 0b0001,
    kPauthEnhanced = 0b0010,
    kPauth2 = 0b0011,
    kFpac = 0b0100,
    kFpacCombined = 0b0101,
  };

  enum class Dpb : uint8_t {
    kNone = 0b0000,
    kDpb = 0b0001,
    kDpb2 = 0b0010,
  };

  DEF_ENUM_FIELD(Ls64, 63, 60, ls64);
  DEF_ENUM_FIELD(Xs, 59, 56, xs);
  DEF_ENUM_FIELD(I8mm, 55, 52, i8mm);
  DEF_ENUM_FIELD(Dgh, 51, 48, dgh);
  DEF_ENUM_FIELD(Bf16, 47, 44, bf16);
  DEF_ENUM_FIELD(Specres, 43, 40, specres);
  DEF_ENUM_FIELD(Sb, 39, 36, sb);
  DEF_ENUM_FIELD(Frintts, 35, 32, frintts);
  DEF_ENUM_FIELD(Gpi, 31, 28, gpi);
  DEF_ENUM_FIELD(Gpa, 27, 24, gpa);
  DEF_ENUM_FIELD(Lrcpc, 23, 20, lrcpc);
  DEF_ENUM_FIELD(Fcma, 19, 16, fcma);
  DEF_ENUM_FIELD(Jscvt, 15, 12, jscvt);
  DEF_ENUM_FIELD(Pauth, 11, 8, api);
  DEF_ENUM_FIELD(Pauth, 7, 4, apa);
  DEF_ENUM_FIELD(Dpb, 3, 0, dpb);
};
ARCH_ARM64_SYSREG(ArmIdAa64IsaR1El1, "ID_AA64ISAR1_EL1");

// [arm/sysreg]/ID_AA64PFR0_EL1: AArch64 Processor Feature Register 0
struct ArmIdAa64Pfr0El1 : public SysRegBase<ArmIdAa64Pfr0El1> {
  enum class Csv3 : uint8_t {
    kNone = 0b0000,
    kCsv3 = 0b0001,
  };

  enum class Csv2 : uint8_t {
    kNone = 0b0000,
    kCsv2 = 0b0001,
    kCsv2_2 = 0b0010,
  };

  enum class Dit : uint8_t {
    kNone = 0b0000,
    kDit = 0b0001,
  };

  enum class Amu : uint8_t {
    kNone = 0b0000,
    kAmuv1 = 0b0001,
    kAmuv1p1 = 0b0010,
  };

  enum class Mpam : uint8_t {
    kNone = 0b0000,
    kMpam = 0b0001,
  };

  enum class Sel2 : uint8_t {
    kNone = 0b0000,
    kSel2 = 0b0001,
  };

  enum class Sve : uint8_t {
    kNone = 0b0000,
    kSve = 0b0001,
  };

  enum class Ras : uint8_t {
    kNone = 0b0000,
    kRas = 0b0001,
    kRasv1p1 = 0b0010,
  };

  enum class Gic : uint8_t {
    kNone = 0b0000,
    kGic4 = 0b0001,
    kGic4_1 = 0b0010,
  };

  enum class Fp : uint8_t {
    kFp = 0b0000,
    kFp16 = 0b0001,
    kNone = 0b1111,
  };

  enum class El : uint8_t {
    kNone = 0b0000,  // EL[23] not implemented.
    k64 = 0b0001,    // ELn supported in AAarch64 state
    k32 = 0b0010,    // ELn supported in AAarch64 or AAarch32 state
  };

  DEF_ENUM_FIELD(Csv3, 63, 60, csv3);
  DEF_ENUM_FIELD(Csv2, 59, 56, csv2);
  DEF_RSVDZ_FIELD(55, 52);
  DEF_ENUM_FIELD(Dit, 51, 48, dit);
  DEF_ENUM_FIELD(Amu, 47, 44, amu);
  DEF_ENUM_FIELD(Mpam, 43, 40, mpam);
  DEF_ENUM_FIELD(Sel2, 39, 36, sel2);
  DEF_ENUM_FIELD(Sve, 35, 32, sve);
  DEF_ENUM_FIELD(Ras, 31, 28, ras);
  DEF_ENUM_FIELD(Gic, 27, 24, gic);
  DEF_ENUM_FIELD(Fp, 23, 20, advsimd);
  DEF_ENUM_FIELD(Fp, 19, 16, fp);
  DEF_ENUM_FIELD(El, 15, 12, el3);
  DEF_ENUM_FIELD(El, 11, 8, el2);
  DEF_ENUM_FIELD(El, 7, 4, el1);
  DEF_ENUM_FIELD(El, 3, 0, el0);
};
ARCH_ARM64_SYSREG(ArmIdAa64Pfr0El1, "ID_AA64PFR0_EL1");

}  // namespace arch

#endif  // ZIRCON_KERNEL_LIB_ARCH_INCLUDE_LIB_ARCH_ARM64_FEATURE_H_
