Files
gps/soc/software/bsp/drivers/plic.c
T

49 lines
1009 B
C

#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);
}