diff options
Diffstat (limited to 'plic.c')
-rw-r--r-- | plic.c | 63 |
1 files changed, 0 insertions, 63 deletions
@@ -1,63 +0,0 @@ -#include "types.h" -#include "param.h" -#include "memlayout.h" -#include "riscv.h" -#include "defs.h" - -// -// the riscv Platform Level Interrupt Controller (PLIC). -// - -void -plicinit(void) -{ - // set uart's priority to be non-zero (otherwise disabled). - *(uint32*)(PLIC + UART0_IRQ*4) = 1; -} - -void -plicinithart(void) -{ - int hart = cpuid(); - - // set uart's enable bit for this hart's S-mode. - //*(uint32*)(PLIC + 0x2080)= (1 << UART0_IRQ); - *(uint32*)PLIC_SENABLE(hart)= (1 << UART0_IRQ); - - // set this hart's S-mode priority threshold to 0. - //*(uint32*)(PLIC + 0x201000) = 0; - *(uint32*)PLIC_SPRIORITY(hart) = 0; -} - -// return a bitmap of which IRQs are waiting -// to be served. -uint64 -plic_pending(void) -{ - uint64 mask; - - //mask = *(uint32*)(PLIC + 0x1000); - //mask |= (uint64)*(uint32*)(PLIC + 0x1004) << 32; - mask = *(uint64*)PLIC_PENDING; - - return mask; -} - -// ask the PLIC what interrupt we should serve. -int -plic_claim(void) -{ - int hart = cpuid(); - //int irq = *(uint32*)(PLIC + 0x201004); - int irq = *(uint32*)PLIC_SCLAIM(hart); - return irq; -} - -// tell the PLIC we've served this IRQ. -void -plic_complete(int irq) -{ - int hart = cpuid(); - //*(uint32*)(PLIC + 0x201004) = irq; - *(uint32*)PLIC_SCLAIM(hart) = irq; -} |