Procdata uses user_contexts (XCC)
[akaros.git] / kern / arch / riscv / entry.S
index 6ffdabc..46f1421 100644 (file)
@@ -14,7 +14,6 @@
 #define REGBYTES (1 << LOG_REGBYTES)
 
   .text
-  .ent    save_kernel_tf_asm
   .global save_kernel_tf_asm
 save_kernel_tf_asm:
   STORE  s0,20*REGBYTES(a0)
@@ -34,13 +33,11 @@ save_kernel_tf_asm:
 
   # set EPC to this function's return address
   STORE  ra,33*REGBYTES(a0)
-
-  .end  save_kernel_tf_asm
+  ret
 
   .text
-  .ent    pop_kernel_tf
-  .global pop_kernel_tf
-pop_kernel_tf:
+  .global pop_kernel_ctx
+pop_kernel_ctx:
   LOAD  t0,32*REGBYTES(a0)
   LOAD  ra,33*REGBYTES(a0)
 
@@ -59,20 +56,20 @@ pop_kernel_tf:
   mtpcr  t0,ASM_CR(PCR_SR)
   ret
 
-  .end  pop_kernel_tf
 
-  .ent  save_tf
 save_tf:  # write the trap frame onto the stack
 
   ret
-  .end  save_tf
 
   .globl  env_pop_tf
-  .ent  env_pop_tf
 env_pop_tf:  # write the trap frame onto the stack
   # restore gprs
   LOAD  t0,32*REGBYTES(a0)  # restore sr (should disable interrupts)
-  mtpcr  t0,ASM_CR(PCR_SR)
+  mfpcr t1, ASM_CR(PCR_SR)
+  andi  t1, t1, ~(SR_PS | SR_EF | SR_U64)
+  andi  t0, t0, SR_PS | SR_EF | SR_U64
+  or    t0, t0, t1
+  mtpcr t0, ASM_CR(PCR_SR)
 
   LOAD  x1,1*REGBYTES(a0)
   mtpcr  x1,ASM_CR(PCR_K0)
@@ -115,10 +112,8 @@ env_pop_tf:  # write the trap frame onto the stack
   mfpcr x1,ASM_CR(PCR_K0)
   mfpcr x2,ASM_CR(PCR_K1)
   eret
-  .end  env_pop_tf
 
   .global  trap_entry
-  .ent  trap_entry
 trap_entry:
   # save x1 and x2 so we can use them as temporaries
   mtpcr x1, ASM_CR(PCR_K0)
@@ -127,7 +122,7 @@ trap_entry:
   # when coming from kernel, continue below its stack
   mfpcr x1, ASM_CR(PCR_SR)
   and   x1, x1, SR_PS
-  add   x2, sp, -SIZEOF_TRAPFRAME_T
+  add   x2, sp, -SIZEOF_HW_TRAPFRAME
   bnez  x1, 1f
 
   # otherwise, start at the top of the per-core stack
@@ -136,6 +131,7 @@ trap_entry:
   sll   x1, x1, LOG_REGBYTES
   add   x2, x2, x1
   LOAD  x2, 0(x2)
+  add   x2, x2, -SIZEOF_HW_TRAPFRAME
 
 1:# save gprs
   STORE  x3,3*REGBYTES(x2)
@@ -187,14 +183,11 @@ trap_entry:
   move  sp, x2
   move  a0, x2
   j     handle_trap
-  .end  trap_entry
 
   .global  cpu_halt
   .global  after_cpu_halt
-  .ent  cpu_halt
 cpu_halt:
   setpcr ASM_CR(PCR_SR), SR_ET
 1:b     1b   # handle_ipi can advance the PC to break out of this loop.
   ret
 after_cpu_halt:
-  .end  cpu_halt