提交 8408dbe7 编写于 作者: Z Zihao Yu

riscv64,clint: associate with mtip

上级 1c1555e0
#include "monitor/monitor.h"
#include "device/alarm.h"
#include "device/map.h"
#include "csr.h"
#define CLINT_MMIO 0xa2000000
#define CLINT_MTIMECMP (0x4000 / sizeof(clint_base[0]))
......@@ -8,18 +9,23 @@
static uint64_t *clint_base = NULL;
static inline void update_mtip(void) {
mip->mtip = (clint_base[CLINT_MTIME] >= clint_base[CLINT_MTIMECMP]);
}
void clint_intr(void) {
if (nemu_state.state == NEMU_RUNNING) {
clint_base[CLINT_MTIME] += 0x800;
update_mtip();
}
}
bool clint_query_intr(void) {
return clint_base[CLINT_MTIME] >= clint_base[CLINT_MTIMECMP];
static void clint_io_handler(uint32_t offset, int len, bool is_write) {
update_mtip();
}
void init_clint(void) {
clint_base = (void *)new_space(0x10000);
add_mmio_map("clint", CLINT_MMIO, (void *)clint_base, 0x10000, NULL);
add_mmio_map("clint", CLINT_MMIO, (void *)clint_base, 0x10000, clint_io_handler);
add_alarm_handle(clint_intr);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册