1 #pragma once 2 3 #include <DragonOS/stdint.h> 4 #include <stdbool.h> 5 #include <common/stddef.h> 6 7 // RISC-V 没有直接的开启/关闭中断的指令,你需要通过修改CSR寄存器来实现 8 // 你可能需要在你的中断处理程序中处理这些操作 9 10 #define nop() __asm__ __volatile__("nop\n\t") 11 12 // RISC-V 没有 hlt 指令,你可能需要使用 wfi 指令来等待中断 13 #define hlt() __asm__ __volatile__("wfi\n\t") 14 15 // RISC-V 没有 pause 指令,你可能需要使用其他方法来实现处理器等待 16 17 // RISC-V 使用 fence 指令来实现内存屏障 18 #define io_mfence() __asm__ __volatile__("fence rw,rw\n\t" :: \ 19 : "memory") 20 #define io_sfence() __asm__ __volatile__("fence w,w\n\t" :: \ 21 : "memory") 22 #define io_lfence() __asm__ __volatile__("fence r,r\n\t" :: \ 23 : "memory") 24 25 // 开启中断 26 #define sti() __asm__ __volatile__("csrsi mstatus, 8\n\t" :: \ 27 : "memory") 28 29 // 关闭中断 30 #define cli() __asm__ __volatile__("csrci mstatus, 8\n\t" :: \ 31 : "memory") 32 33 34 // 从io口读入8个bit 35 unsigned char io_in8(unsigned short port) 36 { 37 while(1); 38 } 39 40 // 从io口读入32个bit 41 unsigned int io_in32(unsigned short port) 42 { 43 while(1); 44 } 45 46 // 输出8个bit到输出端口 47 void io_out8(unsigned short port, unsigned char value) 48 { 49 while(1); 50 } 51 52 // 输出32个bit到输出端口 53 void io_out32(unsigned short port, unsigned int value) 54 { 55 while(1); 56 } 57 58 /** 59 * @brief 验证地址空间是否为用户地址空间 60 * 61 * @param addr_start 地址起始值 62 * @param length 地址长度 63 * @return true 64 * @return false 65 */ 66 bool verify_area(uint64_t addr_start, uint64_t length){ 67 while(1); 68 }