C Microkernel Realtime eXecutive
Realtime Operating System for Cortex-M based microcontrollers
 
Loading...
Searching...
No Matches
hal.h
1
5/*
6 * Thin internal RISC-V HAL (CMSIS-like) for CMRX.
7 *
8 * Purpose:
9 * - Provide a minimal, swappable API for CSR and interrupt primitives needed by
10 * the RISC-V thread switcher and its safe-point logic.
11 *
12 * Notes:
13 * - This header intentionally does not define CSR bit layouts or trap semantics.
14 * - Unit-test builds use a testing backend implemented with static fakes.
15 */
16#pragma once
17
18#include <stdbool.h>
19#include <stdint.h>
20
21/* ---- Minimal CSR accessors (subset justified by switcher needs) ---- */
22
23uint32_t cmrx_riscv_csr_read_mstatus(void);
24void cmrx_riscv_csr_write_mstatus(uint32_t value);
25
26uint32_t cmrx_riscv_csr_read_mepc(void);
27void cmrx_riscv_csr_write_mepc(uint32_t value);
28
29uint32_t cmrx_riscv_csr_read_mcause(void);
30void cmrx_riscv_csr_write_mcause(uint32_t value);
31
32uint32_t cmrx_riscv_csr_read_mtvec(void);
33void cmrx_riscv_csr_write_mtvec(uint32_t value);
34
35uint32_t cmrx_riscv_csr_read_mie(void);
36void cmrx_riscv_csr_write_mie(uint32_t value);
37
38uint32_t cmrx_riscv_csr_read_mip(void);
39void cmrx_riscv_csr_write_mip(uint32_t value);
40
41/* ---- Interrupt primitives ---- */
42
43void cmrx_riscv_irq_disable(void);
44void cmrx_riscv_irq_enable(void);
45bool cmrx_riscv_irq_is_enabled(void);
46
47/* ---- Minimal barriers ---- */
48
49static inline void cmrx_riscv_compiler_barrier(void)
50{
51 __asm__ volatile("" ::: "memory");
52}
53