/*
 * Copyright 2024 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef MPACT_CHERIOT__RISCV_CHERIOT_CSR_ENUM_H_
#define MPACT_CHERIOT__RISCV_CHERIOT_CSR_ENUM_H_

// This file contains CHERIoT specific definitions for classes used to model the
// RiscV control and status registers. For now, these are not modeled as actual
// register state, instead, they're tied into the RiscV machine state a bit
// more. This is so that side-effects from reads/writes can more easily be
// handled.

namespace mpact {
namespace sim {
namespace cheriot {

enum class RiscVCheriotCsrEnum {
  // User trap setup.
  kUStatus = 0x000,
  kUIe = 0x004,
  kUTvec = 0x005,
  // User vector CSRs.
  kVstart = 0x008,
  kVxsat = 0x009,
  kVxrm = 0x00a,
  kVcsr = 0x00f,
  // User trap handling.
  kUScratch = 0x040,
  kUEpc = 0x041,
  kUCause = 0x042,
  kUTval = 0x043,
  kUIp = 0x044,
  // User floating point CSRs.
  kFFlags = 0x001,
  kFrm = 0x002,
  kFCsr = 0x003,
  // User counters/timers.
  kCycle = 0xc00,
  kTime = 0xc01,
  kInstret = 0xc02,

  // Ignoring perf monitoring counters for now.

  kCycleH = 0xc80,
  kTimeH = 0xc81,
  kInstretH = 0x82,

  // Ignoring high bits of perf monitoring counters for now.

  // Supervisor trap setup.
  kSStatus = 0x100,
  kSEDeleg = 0x102,
  kSIDeleg = 0x103,
  kSIe = 0x104,
  kSTvec = 0x105,
  kSCounteren = 0x106,
  // Supervisor trap handling.
  kSScratch = 0x140,  // Scratch register for supervisor trap handlers.
  kSEpc = 0x141,      // Supervisor exception program counter.
  kSCause = 0x142,    // Supervisor trap cause.
  kSTval = 0x143,     // Supervisor bad address or instruction.
  kSIp = 0x144,       // Supervisor interrupt pending.

  // Supervisor protection and translation.
  kSAtp = 0x180,  // Supervisor address translation and protection.

  // Machine information registers.
  kMVendorId = 0xf11,  // Vendor ID.
  kMArchId = 0xf12,    // Architecture ID.
  kMImpId = 0xf13,     // Implementation ID.
  kMHartId = 0xf14,    // Hardware thread ID.
  // Machine trap setup.
  kMStatus = 0x300,     // Machine status register.
  kMIsa = 0x301,        // ISA and extensions.
  kMEDeleg = 0x302,     // Machine exception delegation register.
  kMIDeleg = 0x303,     // Machine interrupt delegation register.
  kMIe = 0x304,         // Machine interrupt-enable register.
  kMTvec = 0x305,       // Machine trap-handler base address.
  kMCounterEn = 0x306,  // Machine counter enable.
  // Machine trap handling.
  kMScratch = 0x340,  // Scratch register for machine trap handlers.
  kMEpc = 0x341,      // Machine exception program counter.
  kMCause = 0x342,    // Machine trap cause.
  kMTval = 0x343,     // Machine bad address or instruction.
  kMIp = 0x344,       // Machine interrupt pending.

  // PMP registers.
  kPmpCfg0 = 0x3a0,    // PMP configuration register 0.
  kPmpCfg1 = 0x3a1,    // PMP configuration register 1 (only for RV32).
  kPmpCfg2 = 0x3a2,    // PMP configuration register 2.
  kPmpCfg3 = 0x3a3,    // PMP configuration register 3 (only for RV32).
  kPmpAddr0 = 0x3b0,   // PMP address register 0.
  kPmpAddr1 = 0x3b1,   // PMP address register 1.
  kPmpAddr2 = 0x3b2,   // PMP address register 2.
  kPmpAddr3 = 0x3b3,   // PMP address register 3.
  kPmpAddr4 = 0x3b4,   // PMP address register 4.
  kPmpAddr5 = 0x3b5,   // PMP address register 5.
  kPmpAddr6 = 0x3b6,   // PMP address register 6.
  kPmpAddr7 = 0x3b7,   // PMP address register 7.
  kPmpAddr8 = 0x3b8,   // PMP address register 8.
  kPmpAddr9 = 0x3b9,   // PMP address register 9.
  kPmpAddr10 = 0x3ba,  // PMP address register 10.
  kPmpAddr11 = 0x3bb,  // PMP address register 11.
  kPmpAddr12 = 0x3bc,  // PMP address register 12.
  kPmpAddr13 = 0x3bd,  // PMP address register 13.
  kPmpAddr14 = 0x3be,  // PMP address register 14.
  kPmpAddr15 = 0x3bf,  // PMP address register 15.

  kMCycle = 0xb00,    // Machine cycle counter.
  kMInstret = 0xb02,  // Machine instructions-retired counter.

  // Permformance counters.
  kMHpmcounter3 = 0xb03,
  kMHpmcounter4 = 0xb04,
  kMHpmcounter5 = 0xb05,
  kMHpmcounter6 = 0xb06,
  kMHpmcounter7 = 0xb07,
  kMHpmcounter8 = 0xb08,
  kMHpmcounter9 = 0xb09,
  kMHpmcounter10 = 0xb0a,
  kMHpmcounter11 = 0xb0b,
  kMHpmcounter12 = 0xb0c,
  kMHpmcounter13 = 0xb0d,
  kMHpmcounter14 = 0xb0e,
  kMHpmcounter15 = 0xb0f,
  kMHpmcounter16 = 0xb10,
  kMHpmcounter17 = 0xb11,
  kMHpmcounter18 = 0xb12,
  kMHpmcounter19 = 0xb13,
  kMHpmcounter20 = 0xb14,
  kMHpmcounter21 = 0xb15,
  kMHpmcounter22 = 0xb16,
  kMHpmcounter23 = 0xb17,
  kMHpmcounter24 = 0xb18,
  kMHpmcounter25 = 0xb19,
  kMHpmcounter26 = 0xb1a,
  kMHpmcounter27 = 0xb1b,
  kMHpmcounter28 = 0xb1c,
  kMHpmcounter29 = 0xb1d,
  kMHpmcounter30 = 0xb1e,
  kMHpmcounter31 = 0xb1f,

  kVl = 0xc20,     // Vector length.
  kVtype = 0xc21,  // Vector type.
  kVlenb = 0xc22,  // Vector length in bytes.

  kMCycleH = 0xb80,    // Upper 32 bits of mcycle.
  kMInstretH = 0xb82,  // Upper 32 bits of MInstret

  // Performance counters (high).
  kMHpmcounter3H = 0xb83,
  kMHpmcounter4H = 0xb84,
  kMHpmcounter5H = 0xb85,
  kMHpmcounter6H = 0xb86,
  kMHpmcounter7H = 0xb87,
  kMHpmcounter8H = 0xb88,
  kMHpmcounter9H = 0xb89,
  kMHpmcounter10H = 0xb8a,
  kMHpmcounter11H = 0xb8b,
  kMHpmcounter12H = 0xb8c,
  kMHpmcounter13H = 0xb8d,
  kMHpmcounter14H = 0xb8e,
  kMHpmcounter15H = 0xb8f,
  kMHpmcounter16H = 0xb90,
  kMHpmcounter17H = 0xb91,
  kMHpmcounter18H = 0xb92,
  kMHpmcounter19H = 0xb93,
  kMHpmcounter20H = 0xb94,
  kMHpmcounter21H = 0xb95,
  kMHpmcounter22H = 0xb96,
  kMHpmcounter23H = 0xb97,
  kMHpmcounter24H = 0xb98,
  kMHpmcounter25H = 0xb99,
  kMHpmcounter26H = 0xb9a,
  kMHpmcounter27H = 0xb9b,
  kMHpmcounter28H = 0xb9c,
  kMHpmcounter29H = 0xb9d,
  kMHpmcounter30H = 0xb9e,
  kMHpmcounter31H = 0xb9f,

  // CHERI mccsr register.
  kMCcsr = 0xbc0,

  // Ignoring debug trace registers.

  // Ignoring debug mode registers.

  // CherIoT specific registers.
  kMshwm = 0xbc1,   // Stack high water mark.
  kMshwmb = 0xbc2,  // Stack high water mark base.

  // Simulator specific CSRs. These are numbered 0x1800-0x18ff.
  kSimMode = 0x1800,
};

}  // namespace cheriot
}  // namespace sim
}  // namespace mpact

#endif  // MPACT_CHERIOT__RISCV_CHERIOT_CSR_ENUM_H_
