Subversion Repositories freemyipod

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
881 theseven 1
#include "global.h"
2
#include "soc/s5l87xx/irq.h"
3
#include "soc/s5l87xx/regs.h"
4
#include "cpu/arm/old/armutil.h"
5
#include "sys/util.h"
6
 
7
__attribute__((weak)) void unhandled_irq_handler()
8
{
9
    fault_handler();
10
}
11
 
12
__attribute__((weak,alias("unhandled_irq_handler"))) void ext0_irqhandler();
13
__attribute__((weak,alias("unhandled_irq_handler"))) void ext1_irqhandler();
14
__attribute__((weak,alias("unhandled_irq_handler"))) void ext2_irqhandler();
15
__attribute__((weak,alias("unhandled_irq_handler"))) void eint_vbus_irqhandler();
16
__attribute__((weak,alias("unhandled_irq_handler"))) void eintg_irqhandler();
17
__attribute__((weak,alias("unhandled_irq_handler"))) void int_timer_irqhandler();
18
__attribute__((weak,alias("unhandled_irq_handler"))) void int_wdt_irqhandler();
19
__attribute__((weak,alias("unhandled_irq_handler"))) void int_unk1_irqhandler();
20
__attribute__((weak,alias("unhandled_irq_handler"))) void int_unk2_irqhandler();
21
__attribute__((weak,alias("unhandled_irq_handler"))) void int_unk3_irqhandler();
22
__attribute__((weak,alias("unhandled_irq_handler"))) void int_dma_irqhandler();
23
__attribute__((weak,alias("unhandled_irq_handler"))) void int_alarm_rtc_irqhandler();
24
__attribute__((weak,alias("unhandled_irq_handler"))) void int_pri_rtc_irqhandler();
25
__attribute__((weak,alias("unhandled_irq_handler"))) void reserved1_irqhandler();
26
__attribute__((weak,alias("unhandled_irq_handler"))) void int_uart_irqhandler();
27
__attribute__((weak,alias("unhandled_irq_handler"))) void int_usb_host_irqhandler();
28
__attribute__((weak,alias("unhandled_irq_handler"))) void int_usb_func_irqhandler();
29
__attribute__((weak,alias("unhandled_irq_handler"))) void int_lcdc_0_irqhandler();
30
__attribute__((weak,alias("unhandled_irq_handler"))) void int_lcdc_1_irqhandler();
31
__attribute__((weak,alias("unhandled_irq_handler"))) void int_calm_irqhandler();
32
__attribute__((weak,alias("unhandled_irq_handler"))) void int_ata_irqhandler();
33
__attribute__((weak,alias("unhandled_irq_handler"))) void int_uart0_irqhandler();
34
__attribute__((weak,alias("unhandled_irq_handler"))) void int_spdif_out_irqhandler();
35
__attribute__((weak,alias("unhandled_irq_handler"))) void int_ecc_irqhandler();
36
__attribute__((weak,alias("unhandled_irq_handler"))) void int_sdci_irqhandler();
37
__attribute__((weak,alias("unhandled_irq_handler"))) void int_lcd_irqhandler();
38
__attribute__((weak,alias("unhandled_irq_handler"))) void int_wheel_irqhandler();
39
__attribute__((weak,alias("unhandled_irq_handler"))) void int_iic_irqhandler();
40
__attribute__((weak,alias("unhandled_irq_handler"))) void reserved2_irqhandler();
41
__attribute__((weak,alias("unhandled_irq_handler"))) void int_mstick_irqhandler();
42
__attribute__((weak,alias("unhandled_irq_handler"))) void int_adc_wakeup_irqhandler();
43
__attribute__((weak,alias("unhandled_irq_handler"))) void int_adc_irqhandler();
44
 
45
static void (* s5l8701_irq_vector[])(void) =
46
{
47
    ext0_irqhandler,
48
    ext1_irqhandler,
49
    ext2_irqhandler,
50
    eint_vbus_irqhandler,
51
    eintg_irqhandler,
52
    int_timer_irqhandler,
53
    int_wdt_irqhandler,
54
    int_unk1_irqhandler,
55
    int_unk2_irqhandler,
56
    int_unk3_irqhandler,
57
    int_dma_irqhandler,
58
    int_alarm_rtc_irqhandler,
59
    int_pri_rtc_irqhandler,
60
    reserved1_irqhandler,
61
    int_uart_irqhandler,
62
    int_usb_host_irqhandler,
63
    int_usb_func_irqhandler,
64
    int_lcdc_0_irqhandler,
65
    int_lcdc_1_irqhandler,
66
    int_calm_irqhandler,
67
    int_ata_irqhandler,
68
    int_uart0_irqhandler,
69
    int_spdif_out_irqhandler,
70
    int_ecc_irqhandler,
71
    int_sdci_irqhandler,
72
    int_lcd_irqhandler,
73
    int_wheel_irqhandler,
74
    int_iic_irqhandler,
75
    reserved2_irqhandler,
76
    int_mstick_irqhandler,
77
    int_adc_wakeup_irqhandler,
78
    int_adc_irqhandler,
79
};
80
 
81
__attribute__((interrupt("IRQ"))) void _irq_handler(void)
82
{
83
    int irq_no = INTOFFSET;
84
    s5l8701_irq_vector[irq_no]();
85
    SRCPND = (1 << irq_no);
86
    INTPND = INTPND;
87
}
88
 
89
void s5l87xx_irq_enable(int irq, bool state)
90
{
91
    enter_critical_section();
92
    if (state) INTMSK |= 1 << irq;
93
    else INTMSK &= ~(1 << irq);
94
    leave_critical_section();
95
}