MOS Source Code
Loading...
Searching...
No Matches
cpu.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include "mos/platform/platform_defs.hpp"
6
7#include <mos/mos_global.h>
8#include <mos/types.hpp>
9
10MOS_STATIC_ASSERT(sizeof(platform_regs_t) == 264, "please also change cpu/interrupt.S");
11
12#define read_csr(reg) statement_expr(reg_t, { asm volatile("csrr %0, " #reg : "=r"(retval)); })
13#define write_csr(reg, val) __asm__ volatile("csrw " #reg ", %0" ::"r"(val))
14
15#define make_satp(mode, asid, ppn) ((u64) (mode) << 60 | ((u64) (asid) << 44) | (ppn))
16
17#define SATP_MODE_SV39 8
18#define SATP_MODE_SV48 9
19#define SATP_MODE_SV57 10
20
21#define SSTATUS_SIE BIT(1) // Supervisor Interrupt Enable
22#define SSTATUS_SPIE BIT(5) // Supervisor Previous Interrupt Enable
23#define SSTATUS_SPP BIT(8) // Supervisor Previous Privilege
24#define SSTATUS_SUM BIT(18) // Supervisor User Memory Access Enable
25
26#define SSTATUS_FS_OFF 0
27#define SSTATUS_FS_INITIAL BIT(13)
28#define SSTATUS_FS_CLEAN BIT(14)
29#define SSTATUS_FS_DIRTY (BIT(13) | BIT(14))
30
31#define SIE_SEIE BIT(9)
32#define SIE_STIE BIT(5)
33#define SIE_SSIE BIT(1)
34
35extern "C" [[noreturn]] void riscv64_trap_exit(platform_regs_t *regs);
36
37extern const char __riscv64_trap_entry[];
38extern const char __riscv64_usermode_trap_entry[];
#define MOS_STATIC_ASSERT
Definition mos_global.h:14
const char __riscv64_usermode_trap_entry[]
void riscv64_trap_exit(platform_regs_t *regs)
const char __riscv64_trap_entry[]