diff options
author | Robert Morris <[email protected]> | 2019-06-11 09:57:14 -0400 |
---|---|---|
committer | Robert Morris <[email protected]> | 2019-06-11 09:57:14 -0400 |
commit | 5753553213df8f9de851adb68377db43faecb91f (patch) | |
tree | 3b629ff54897fca414146677532cb459a2ed11ba /plic.c | |
parent | 91ba81110acd3163f7de3580b677eece0c57f5e7 (diff) | |
download | xv6-labs-5753553213df8f9de851adb68377db43faecb91f.tar.gz xv6-labs-5753553213df8f9de851adb68377db43faecb91f.tar.bz2 xv6-labs-5753553213df8f9de851adb68377db43faecb91f.zip |
separate source into kernel/ user/ mkfs/
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; -} |