21 __asm__
volatile(
"csrr %0, mhartid" :
"=r" (x) );
28#define MSTATUS_MPP_MASK (3L << 11)
29#define MSTATUS_MPP_M (3L << 11)
30#define MSTATUS_MPP_S (1L << 11)
31#define MSTATUS_MPP_U (0L << 11)
33#define MSTATUS_MIE (1L << 3)
34#define MSTATUS_SIE (1L << 1)
35#define MSTATUS_MPIE (1L << 7)
36#define MSTATUS_SPIE (1L << 5)
46 __asm__
volatile(
"csrr %0, mstatus" :
"=r"(x) );
57 __asm__
volatile(
"csrw mstatus, %0" : :
"r" (x));
69 __asm__
volatile(
"csrw mepc, %0" : :
"r" (x));
73#define SSTATUS_SPP (1L << 8)
74#define SSTATUS_SPIE (1L << 5)
75#define SSTATUS_UPIE (1L << 4)
76#define SSTATUS_SIE (1L << 1)
77#define SSTATUS_UIE (1L << 0)
87 __asm__
volatile(
"csrr %0, sstatus" :
"=r"(x) );
98 __asm__
volatile(
"csrw sstatus, %0" : :
"r" (x));
111 __asm__
volatile(
"csrr %0, sip" :
"=r"(x) );
122 __asm__
volatile(
"csrw sip, %0" : :
"r" (x));
126#define SIE_SEIE (1L << 9)
127#define SIE_STIE (1L << 5)
128#define SIE_SSIE (1L << 1)
138 __asm__
volatile(
"csrr %0, sie" :
"=r"(x) );
149 __asm__
volatile(
"csrw sie, %0" : :
"r" (x));
153#define MIE_MEIE (1L << 11)
154#define MIE_MTIE (1L << 7)
155#define MIE_MSIE (1L << 3)
165 __asm__
volatile(
"csrr %0, mie" :
"=r" (x) );
176 __asm__
volatile(
"csrw mie, %0" : :
"r" (x));
189 __asm__
volatile(
"csrr %0, sepc" :
"=r"(x) );
200 __asm__
volatile(
"csrw sepc, %0" : :
"r" (x));
213 __asm__
volatile(
"csrr %0, medeleg" :
"=r"(x) );
224 __asm__
volatile(
"csrw medeleg, %0" : :
"r" (x));
237 __asm__
volatile(
"csrr %0, mideleg" :
"=r"(x) );
248 __asm__
volatile(
"csrw mideleg, %0" : :
"r" (x));
261 __asm__
volatile(
"csrr %0, stvec" :
"=r"(x) );
272 __asm__
volatile(
"csrw stvec, %0" : :
"r" (x));
284 __asm__
volatile(
"csrw mtvec, %0" : :
"r" (x));
296 __asm__
volatile(
"csrw pmpcfg0, %0" : :
"r" (x));
306 __asm__
volatile(
"csrw pmpaddr0, %0" : :
"r" (x));
311#define SATP_MASK (0xF << 60)
312#define SATP_SV39 (8L << 60)
313#define SATP_SV48 (9L << 60)
316#define MAKE_SATP(pagetable) ( SATP_SV39 | (((uint64)pagetable) >> 12) )
318#define MAKE_SV48(pagetable) ( SATP_SV48 | (((uint64)pagetable) >> 12) )
328 __asm__
volatile(
"csrr %0, satp" :
"=r"(x) );
339 __asm__
volatile(
"csrw satp, %0" : :
"r" (x));
352 __asm__
volatile(
"csrr %0, mscratch" :
"=r"(x) );
363 __asm__
volatile(
"csrw mscratch, %0" : :
"r" (x));
376 __asm__
volatile(
"csrr %0, scause" :
"=r"(x) );
389 __asm__
volatile(
"csrr %0, stval" :
"=r"(x) );
402 __asm__
volatile(
"csrw mcounteren, %0" : :
"r" (x));
413 __asm__
volatile(
"csrr %0, mcounteren" :
"=r"(x) );
427 __asm__
volatile(
"csrr %0, time" :
"=r"(x) );
442 __asm__
volatile(
"mv %0, sp" :
"=r"(x) );
456 __asm__
volatile(
"mv %0, tp" :
"=r"(x) );
467 __asm__
volatile(
"mv tp, %0" : :
"r" (x));
480 __asm__
volatile(
"mv %0, ra" :
"=r"(x) );
519 __asm__
volatile(
"sfence.vma zero, zero");
530#define PTE_V (1L << 0)
531#define PTE_R (1L << 1)
532#define PTE_W (1L << 2)
533#define PTE_X (1L << 3)
534#define PTE_U (1L << 4)
537#define PA2PTE(pa) ((((uint64)(pa)) >> 12) << 10)
539#define PTE2PA(pte) (((pte) >> 10) << 12)
541#define PTE_FLAGS(pte) ((pte) & 0x3FF)
547#define PXSHIFT(level) ( PGSHIFT + (9*(level)) )
549#define PX(level, va) ( (((uint64)(va)) >> PXSHIFT(level)) & PXMASK)
552#define PGROUNDUP(sz) ( ((sz) + PGSIZE - 1) & ~(PGSIZE-1) )
554#define PGROUNDDOWN(a) ( (a) & ~(PGSIZE-1) )
557#define MAXVA (1L << (9 + 9 + 9 + 12 - 1))
558#define MAXVA_48 (1L << (9 + 9 + 9 + 9 + 12 - 1))
#define SSTATUS_SIE
Definition riscv.h:76
uint64 * pagetable_t
Definition riscv.h:523
uint64 pte_t
Definition riscv.h:522
unsigned long uint64
Definition types.h:24