summaryrefslogtreecommitdiff
path: root/kernel/start.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/start.c')
-rw-r--r--kernel/start.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/start.c b/kernel/start.c
index d1fc9c6..0f3453d 100644
--- a/kernel/start.c
+++ b/kernel/start.c
@@ -12,8 +12,8 @@ __attribute__ ((aligned (16))) char stack0[4096 * NCPU];
// scratch area for timer interrupt, one per CPU.
uint64 mscratch0[NCPU * 32];
-// assembly code in kernelvec for machine-mode timer interrupt.
-extern void machinevec();
+// assembly code in kernelvec.S for machine-mode timer interrupt.
+extern void timervec();
// entry.S jumps here in machine mode on stack0.
void
@@ -36,16 +36,17 @@ start()
w_medeleg(0xffff);
w_mideleg(0xffff);
+ int id = r_mhartid();
+
// set up to receive timer interrupts in machine mode,
- // which arrive at machinevec in kernelvec.S,
+ // which arrive at timervec in kernelvec.S,
// which turns them into software interrupts for
// devintr() in trap.c.
- int id = r_mhartid();
// ask the CLINT for a timer interrupt.
int interval = 1000000; // cycles; about 1/10th second in qemu.
*(uint64*)CLINT_MTIMECMP(id) = *(uint64*)CLINT_MTIME + interval;
- // prepare information in scratch[] for machinevec.
- // scratch[0..3] : space for machinevec to save registers.
+ // prepare information in scratch[] for timervec.
+ // scratch[0..3] : space for timervec to save registers.
// scratch[4] : address of CLINT MTIMECMP register.
// scratch[5] : desired interval (in cycles) between timer interrupts.
uint64 *scratch = &mscratch0[32 * id];
@@ -53,7 +54,7 @@ start()
scratch[5] = interval;
w_mscratch((uint64)scratch);
// set the machine-mode trap handler.
- w_mtvec((uint64)machinevec);
+ w_mtvec((uint64)timervec);
// enable machine-mode interrupts.
w_mstatus(r_mstatus() | MSTATUS_MIE);
// enable machine-mode timer interrupts.