~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to arch/mips/kernel/irq-rm9000.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include <asm/mipsregs.h>
20
20
#include <asm/system.h>
21
21
 
22
 
static inline void unmask_rm9k_irq(unsigned int irq)
23
 
{
24
 
        set_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
25
 
}
26
 
 
27
 
static inline void mask_rm9k_irq(unsigned int irq)
28
 
{
29
 
        clear_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
30
 
}
31
 
 
32
 
static inline void rm9k_cpu_irq_enable(unsigned int irq)
 
22
static inline void unmask_rm9k_irq(struct irq_data *d)
 
23
{
 
24
        set_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
 
25
}
 
26
 
 
27
static inline void mask_rm9k_irq(struct irq_data *d)
 
28
{
 
29
        clear_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
 
30
}
 
31
 
 
32
static inline void rm9k_cpu_irq_enable(struct irq_data *d)
33
33
{
34
34
        unsigned long flags;
35
35
 
36
36
        local_irq_save(flags);
37
 
        unmask_rm9k_irq(irq);
 
37
        unmask_rm9k_irq(d);
38
38
        local_irq_restore(flags);
39
39
}
40
40
 
43
43
 */
44
44
static void local_rm9k_perfcounter_irq_startup(void *args)
45
45
{
46
 
        unsigned int irq = (unsigned int) args;
47
 
 
48
 
        rm9k_cpu_irq_enable(irq);
 
46
        rm9k_cpu_irq_enable(args);
49
47
}
50
48
 
51
 
static unsigned int rm9k_perfcounter_irq_startup(unsigned int irq)
 
49
static unsigned int rm9k_perfcounter_irq_startup(struct irq_data *d)
52
50
{
53
 
        on_each_cpu(local_rm9k_perfcounter_irq_startup, (void *) irq, 1);
 
51
        on_each_cpu(local_rm9k_perfcounter_irq_startup, d, 1);
54
52
 
55
53
        return 0;
56
54
}
57
55
 
58
56
static void local_rm9k_perfcounter_irq_shutdown(void *args)
59
57
{
60
 
        unsigned int irq = (unsigned int) args;
61
58
        unsigned long flags;
62
59
 
63
60
        local_irq_save(flags);
64
 
        mask_rm9k_irq(irq);
 
61
        mask_rm9k_irq(args);
65
62
        local_irq_restore(flags);
66
63
}
67
64
 
68
 
static void rm9k_perfcounter_irq_shutdown(unsigned int irq)
 
65
static void rm9k_perfcounter_irq_shutdown(struct irq_data *d)
69
66
{
70
 
        on_each_cpu(local_rm9k_perfcounter_irq_shutdown, (void *) irq, 1);
 
67
        on_each_cpu(local_rm9k_perfcounter_irq_shutdown, d, 1);
71
68
}
72
69
 
73
70
static struct irq_chip rm9k_irq_controller = {
74
71
        .name = "RM9000",
75
 
        .ack = mask_rm9k_irq,
76
 
        .mask = mask_rm9k_irq,
77
 
        .mask_ack = mask_rm9k_irq,
78
 
        .unmask = unmask_rm9k_irq,
79
 
        .eoi    = unmask_rm9k_irq
 
72
        .irq_ack = mask_rm9k_irq,
 
73
        .irq_mask = mask_rm9k_irq,
 
74
        .irq_mask_ack = mask_rm9k_irq,
 
75
        .irq_unmask = unmask_rm9k_irq,
 
76
        .irq_eoi = unmask_rm9k_irq
80
77
};
81
78
 
82
79
static struct irq_chip rm9k_perfcounter_irq = {
83
80
        .name = "RM9000",
84
 
        .startup = rm9k_perfcounter_irq_startup,
85
 
        .shutdown = rm9k_perfcounter_irq_shutdown,
86
 
        .ack = mask_rm9k_irq,
87
 
        .mask = mask_rm9k_irq,
88
 
        .mask_ack = mask_rm9k_irq,
89
 
        .unmask = unmask_rm9k_irq,
 
81
        .irq_startup = rm9k_perfcounter_irq_startup,
 
82
        .irq_shutdown = rm9k_perfcounter_irq_shutdown,
 
83
        .irq_ack = mask_rm9k_irq,
 
84
        .irq_mask = mask_rm9k_irq,
 
85
        .irq_mask_ack = mask_rm9k_irq,
 
86
        .irq_unmask = unmask_rm9k_irq,
90
87
};
91
88
 
92
89
unsigned int rm9000_perfcount_irq;
101
98
        clear_c0_intcontrol(0x0000f000);                /* Mask all */
102
99
 
103
100
        for (i = base; i < base + 4; i++)
104
 
                set_irq_chip_and_handler(i, &rm9k_irq_controller,
 
101
                irq_set_chip_and_handler(i, &rm9k_irq_controller,
105
102
                                         handle_level_irq);
106
103
 
107
104
        rm9000_perfcount_irq = base + 1;
108
 
        set_irq_chip_and_handler(rm9000_perfcount_irq, &rm9k_perfcounter_irq,
 
105
        irq_set_chip_and_handler(rm9000_perfcount_irq, &rm9k_perfcounter_irq,
109
106
                                 handle_percpu_irq);
110
107
}