Files
riscv/emulator/csr.h
2024-05-13 00:04:44 +02:00

37 lines
759 B
C

#pragma once
#include <stdint.h>
typedef struct Hart Hart;
#define CSR_CYCLE 0xC00
#define CSR_CYCLEH 0xC80
#define CSR_INSTRET 0xC02
#define CSR_INSTRETH 0xC82
#define CSR_TIME 0xC01
#define CSR_TIMEH 0xC81
#define CSR_MVENDORID 0xF11
#define CSR_MARCHID 0xF12
#define CSR_MIMPID 0xF13
#define CSR_MHARTID 0xF14
#define CSR_MISA 0x301
enum CsrAction
{
CSR_R = 0,
CSR_W = 1,
CSR_RW = 3,
CSR_RC = 5,
CSR_RS = 7,
};
struct Csr
{
uint32_t (*action)(Hart* hart, uint32_t value_mask, enum CsrAction action);
};
typedef struct Csr Csr;
uint32_t csr_action(Hart* hart, uint16_t id, uint32_t value, enum CsrAction action);