diff options
author | Andrew Waterman <andrew@sifive.com> | 2017-02-19 15:55:02 -0800 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2017-02-19 16:01:48 -0800 |
commit | 7c4765029820580c0c01b3321fe4310c8416dcb6 (patch) | |
tree | 24dc412c7a301ba46f9217097290660be734f144 /machine/mtrap.h | |
parent | b14d4187fe1a328b9e87f61a984fd70e17211954 (diff) | |
download | riscv-pk-7c4765029820580c0c01b3321fe4310c8416dcb6.zip riscv-pk-7c4765029820580c0c01b3321fe4310c8416dcb6.tar.gz riscv-pk-7c4765029820580c0c01b3321fe4310c8416dcb6.tar.bz2 |
Handle IPIs and timer interrupts more quickly
Diffstat (limited to 'machine/mtrap.h')
-rw-r--r-- | machine/mtrap.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/machine/mtrap.h b/machine/mtrap.h index 1f692b3..6f38cf6 100644 --- a/machine/mtrap.h +++ b/machine/mtrap.h @@ -36,10 +36,10 @@ extern volatile uint32_t* plic_priorities; extern size_t plic_ndevs; typedef struct { - uint64_t* timecmp; uint32_t* ipi; volatile int mipi_pending; - volatile int sipi_pending; + + uint64_t* timecmp; volatile uint32_t* plic_m_thresh; volatile uintptr_t* plic_m_ie; @@ -47,10 +47,6 @@ typedef struct { volatile uintptr_t* plic_s_ie; } hls_t; -#define IPI_SOFT 0x1 -#define IPI_FENCE_I 0x2 -#define IPI_SFENCE_VM 0x4 - #define MACHINE_STACK_TOP() ({ \ register uintptr_t sp asm ("sp"); \ (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); }) @@ -79,9 +75,15 @@ static inline void wfi() #endif // !__ASSEMBLER__ +#define IPI_SOFT 0x1 +#define IPI_FENCE_I 0x2 +#define IPI_SFENCE_VM 0x4 + #define MACHINE_STACK_SIZE RISCV_PGSIZE -#define MENTRY_FRAME_SIZE (INTEGER_CONTEXT_SIZE + SOFT_FLOAT_CONTEXT_SIZE \ - + HLS_SIZE) +#define MENTRY_HLS_OFFSET (INTEGER_CONTEXT_SIZE + SOFT_FLOAT_CONTEXT_SIZE) +#define MENTRY_FRAME_SIZE (MENTRY_HLS_OFFSET + HLS_SIZE) +#define MENTRY_IPI_OFFSET (MENTRY_HLS_OFFSET) +#define MENTRY_IPI_PENDING_OFFSET (MENTRY_HLS_OFFSET + REGBYTES) #ifdef __riscv_flen # define SOFT_FLOAT_CONTEXT_SIZE 0 |