f9b0f1f17d107963a035db42c74cc08da37462fc
[rpikern] / src / intr.c
1 #include "rpi.h"
2 #include "rpi_ioreg.h"
3 #include "asm.h"
4
5 void enable_arm_irq(int irq)
6 {
7         mem_barrier();
8         if(irq == IRQ_TIMER) {
9                 IRQ_FIQCTL_REG = IRQ_FIQCTL_SELARM(IRQ_TIMER) | IRQ_FIQCTL_ENABLE;
10         } else {
11                 IRQ_ENABLE0_REG |= 1 << irq;
12         }
13         mem_barrier();
14 }
15
16 void disable_arm_irq(int irq)
17 {
18         mem_barrier();
19         if(irq == IRQ_TIMER) {
20                 IRQ_FIQCTL_REG = 0;
21         } else {
22                 IRQ_ENABLE0_REG &= ~(1 << irq);
23         }
24         mem_barrier();
25 }
26
27 void enable_gpu_irq(int irq)
28 {
29         mem_barrier();
30         if(irq == IRQ_GPU_TIMER1) {
31                 IRQ_FIQCTL_REG = IRQ_FIQCTL_SELGPU(IRQ_GPU_TIMER1) | IRQ_FIQCTL_ENABLE;
32         } else if(irq < 32) {
33                 IRQ_ENABLE1_REG |= 1 << irq;
34         } else {
35                 IRQ_ENABLE2_REG |= 1 << (irq - 32);
36         }
37         mem_barrier();
38 }
39
40 void disable_gpu_irq(int irq)
41 {
42         mem_barrier();
43         if(irq == IRQ_GPU_TIMER1) {
44                 IRQ_FIQCTL_REG = 0;
45         } else if(irq < 32) {
46                 IRQ_ENABLE1_REG &= ~(1 << irq);
47         } else {
48                 IRQ_ENABLE2_REG &= ~(1 << (irq - 32));
49         }
50         mem_barrier();
51 }