aboutsummaryrefslogtreecommitdiff
path: root/machine/mtrap.h
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-02-19 15:55:02 -0800
committerAndrew Waterman <andrew@sifive.com>2017-02-19 16:01:48 -0800
commit7c4765029820580c0c01b3321fe4310c8416dcb6 (patch)
tree24dc412c7a301ba46f9217097290660be734f144 /machine/mtrap.h
parentb14d4187fe1a328b9e87f61a984fd70e17211954 (diff)
downloadriscv-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.h18
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