Bring a bit more apic infrastructure up.
[akaros.git] / kern / arch / riscv / entry.S
index 6e610c5..484beda 100644 (file)
 save_kernel_tf_asm:
   mfpcr  a1,ASM_CR(PCR_SR)
 
-  STORE  s0,20*REGBYTES(a0)
-  STORE  s1,21*REGBYTES(a0)
-  STORE  s2,22*REGBYTES(a0)
-  STORE  s3,23*REGBYTES(a0)
-  STORE  s4,24*REGBYTES(a0)
-  STORE  s5,25*REGBYTES(a0)
-  STORE  s6,26*REGBYTES(a0)
-  STORE  s7,27*REGBYTES(a0)
-  STORE  s8,28*REGBYTES(a0)
-  STORE  s9,29*REGBYTES(a0)
-  STORE  sp,30*REGBYTES(a0)
+  STORE s0,  2*REGBYTES(a0)
+  STORE s1,  3*REGBYTES(a0)
+  STORE s2,  4*REGBYTES(a0)
+  STORE s3,  5*REGBYTES(a0)
+  STORE s4,  6*REGBYTES(a0)
+  STORE s5,  7*REGBYTES(a0)
+  STORE s6,  8*REGBYTES(a0)
+  STORE s7,  9*REGBYTES(a0)
+  STORE s8, 10*REGBYTES(a0)
+  STORE s9, 11*REGBYTES(a0)
+  STORE s10,12*REGBYTES(a0)
+  STORE s11,13*REGBYTES(a0)
+  STORE sp, 14*REGBYTES(a0)
 
   STORE  a1,32*REGBYTES(a0)
 
@@ -42,17 +44,19 @@ pop_kernel_ctx:
   LOAD  a1,32*REGBYTES(a0)
   LOAD  ra,33*REGBYTES(a0)
 
-  LOAD  s0,20*REGBYTES(a0)
-  LOAD  s1,21*REGBYTES(a0)
-  LOAD  s2,22*REGBYTES(a0)
-  LOAD  s3,23*REGBYTES(a0)
-  LOAD  s4,24*REGBYTES(a0)
-  LOAD  s5,25*REGBYTES(a0)
-  LOAD  s6,26*REGBYTES(a0)
-  LOAD  s7,27*REGBYTES(a0)
-  LOAD  s8,28*REGBYTES(a0)
-  LOAD  s9,29*REGBYTES(a0)
-  LOAD  sp,30*REGBYTES(a0)
+  LOAD  s0,  2*REGBYTES(a0)
+  LOAD  s1,  3*REGBYTES(a0)
+  LOAD  s2,  4*REGBYTES(a0)
+  LOAD  s3,  5*REGBYTES(a0)
+  LOAD  s4,  6*REGBYTES(a0)
+  LOAD  s5,  7*REGBYTES(a0)
+  LOAD  s6,  8*REGBYTES(a0)
+  LOAD  s7,  9*REGBYTES(a0)
+  LOAD  s8, 10*REGBYTES(a0)
+  LOAD  s9, 11*REGBYTES(a0)
+  LOAD  s10,12*REGBYTES(a0)
+  LOAD  s11,13*REGBYTES(a0)
+  LOAD  sp, 14*REGBYTES(a0)
 
   mtpcr  a1,ASM_CR(PCR_SR)
   ret
@@ -62,16 +66,17 @@ save_tf:  # write the trap frame onto the stack
 
   ret
 
-  .globl  env_pop_tf
-env_pop_tf:  # write the trap frame onto the stack
-  # restore gprs
-  LOAD  v0,32*REGBYTES(a0)  # restore sr (should disable interrupts)
+  .globl  pop_hw_tf
+pop_hw_tf:  # write the trap frame onto the stack
+  # restore SR.{PS, EF, U64} and disable interrupts
+  LOAD  v0,32*REGBYTES(a0)
   mfpcr v1, ASM_CR(PCR_SR)
-  andi  v1, v1, ~(SR_PS | SR_EF | SR_U64)
-  andi  v0, v0, SR_PS | SR_EF | SR_U64
+  andi  v0, v0,  (SR_PS | SR_EF | SR_U64)
+  andi  v1, v1, ~(SR_PS | SR_EF | SR_U64 | SR_ET)
   or    v0, v0, v1
   mtpcr v0, ASM_CR(PCR_SR)
 
+  # restore gprs
   LOAD  x1,1*REGBYTES(a0)
   mtpcr  x1,ASM_CR(PCR_K0)
   LOAD  x1,2*REGBYTES(a0)