49 lines
1009 B
C
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);
|
|
}
|