|
|
|
@ -48,18 +48,13 @@ typedef struct { |
|
|
|
volatile uint32_t* plic_s_ie; |
|
|
|
} hls_t; |
|
|
|
|
|
|
|
#define STACK_POINTER() ({ \ |
|
|
|
uintptr_t __sp; \ |
|
|
|
__asm__("mv %0, sp" : "=r"(__sp)); \ |
|
|
|
__sp; \ |
|
|
|
}) |
|
|
|
|
|
|
|
#define MACHINE_STACK_TOP() \ |
|
|
|
({ (void*)((STACK_POINTER() + RISCV_PGSIZE) & -RISCV_PGSIZE); }) |
|
|
|
#define MACHINE_STACK_TOP() ({ \ |
|
|
|
uintptr_t sp = (uintptr_t)__builtin_frame_address(0) ; \ |
|
|
|
(char *)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); }) |
|
|
|
|
|
|
|
// hart-local storage, at top of stack
|
|
|
|
#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE)) |
|
|
|
#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid)))) |
|
|
|
#define OTHER_HLS(id) ((hls_t*)((char*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid)))) |
|
|
|
|
|
|
|
hls_t* hls_init(uintptr_t hart_id); |
|
|
|
void parse_config_string(); |
|
|
|
|