#include "bsp/plic.h" #include "bsp/mmio.h" #include "bsp/soc.h" #define PLIC_PRIORITY(id) (BSP_PLIC_BASE + 4u * (uintptr_t)(id)) #define PLIC_ENABLE0 (BSP_PLIC_BASE + 0x2000u) #define PLIC_THRESHOLD0 (BSP_PLIC_BASE + 0x200000u) #define PLIC_CLAIM0 (BSP_PLIC_BASE + 0x200004u) void bsp_plic_set_priority(uint32_t irq_id, uint32_t priority) { bsp_write32(PLIC_PRIORITY(irq_id), priority); } void bsp_plic_enable(uint32_t irq_id) { if (irq_id < 32u) { bsp_write32(PLIC_ENABLE0, bsp_read32(PLIC_ENABLE0) | (1u << irq_id)); } } void bsp_plic_disable(uint32_t irq_id) { if (irq_id < 32u) { bsp_write32(PLIC_ENABLE0, bsp_read32(PLIC_ENABLE0) & ~(1u << irq_id)); } } void bsp_plic_disable_all(void) { bsp_write32(PLIC_ENABLE0, 0u); } void bsp_plic_set_threshold(uint32_t threshold) { bsp_write32(PLIC_THRESHOLD0, threshold); } uint32_t bsp_plic_claim(void) { return bsp_read32(PLIC_CLAIM0); } void bsp_plic_complete(uint32_t irq_id) { bsp_write32(PLIC_CLAIM0, irq_id); }