X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=rpikern;a=blobdiff_plain;f=src%2Fintr.c;fp=src%2Fintr.c;h=f9b0f1f17d107963a035db42c74cc08da37462fc;hp=0000000000000000000000000000000000000000;hb=574147e84aafb61db3cf8b595d2a12ce5ba160de;hpb=99bdc8838f189f79ba77bfbbf41d7f1b4839ce0f diff --git a/src/intr.c b/src/intr.c new file mode 100644 index 0000000..f9b0f1f --- /dev/null +++ b/src/intr.c @@ -0,0 +1,51 @@ +#include "rpi.h" +#include "rpi_ioreg.h" +#include "asm.h" + +void enable_arm_irq(int irq) +{ + mem_barrier(); + if(irq == IRQ_TIMER) { + IRQ_FIQCTL_REG = IRQ_FIQCTL_SELARM(IRQ_TIMER) | IRQ_FIQCTL_ENABLE; + } else { + IRQ_ENABLE0_REG |= 1 << irq; + } + mem_barrier(); +} + +void disable_arm_irq(int irq) +{ + mem_barrier(); + if(irq == IRQ_TIMER) { + IRQ_FIQCTL_REG = 0; + } else { + IRQ_ENABLE0_REG &= ~(1 << irq); + } + mem_barrier(); +} + +void enable_gpu_irq(int irq) +{ + mem_barrier(); + if(irq == IRQ_GPU_TIMER1) { + IRQ_FIQCTL_REG = IRQ_FIQCTL_SELGPU(IRQ_GPU_TIMER1) | IRQ_FIQCTL_ENABLE; + } else if(irq < 32) { + IRQ_ENABLE1_REG |= 1 << irq; + } else { + IRQ_ENABLE2_REG |= 1 << (irq - 32); + } + mem_barrier(); +} + +void disable_gpu_irq(int irq) +{ + mem_barrier(); + if(irq == IRQ_GPU_TIMER1) { + IRQ_FIQCTL_REG = 0; + } else if(irq < 32) { + IRQ_ENABLE1_REG &= ~(1 << irq); + } else { + IRQ_ENABLE2_REG &= ~(1 << (irq - 32)); + } + mem_barrier(); +}