57
56
sp - sizeof(struct thread_info));
60
desc->handle_irq(irq, desc);
59
generic_handle_irq(irq);
63
62
set_irq_regs(old_regs);
67
* Generic, controller-independent functions:
70
int show_interrupts(struct seq_file *p, void *v)
65
int arch_show_interrupts(struct seq_file *p, int prec)
72
int i = *(loff_t *) v, j;
73
struct irqaction * action;
78
for_each_online_cpu(j)
79
seq_printf(p, "CPU%d ",j);
84
raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
85
action = irq_desc[i].action;
88
seq_printf(p, "%3d: ",i);
90
seq_printf(p, "%10u ", kstat_irqs(i));
92
for_each_online_cpu(j)
93
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
95
seq_printf(p, " %14s", irq_desc[i].chip->name);
96
seq_printf(p, " %s", action->name);
98
for (action=action->next; action; action = action->next)
99
seq_printf(p, ", %s", action->name);
103
raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
104
} else if (i == NR_IRQS) {
105
seq_printf(p, "NMI: ");
106
for_each_online_cpu(j)
107
seq_printf(p, "%10u ", nmi_count(j));
109
seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
67
seq_printf(p, "%*s: ", prec, "ERR");
68
seq_printf(p, "%10u\n", atomic_read(&irq_err_count));
114
static void xtensa_irq_mask(unsigned int irq)
116
cached_irq_mask &= ~(1 << irq);
117
set_sr (cached_irq_mask, INTENABLE);
120
static void xtensa_irq_unmask(unsigned int irq)
122
cached_irq_mask |= 1 << irq;
123
set_sr (cached_irq_mask, INTENABLE);
126
static void xtensa_irq_enable(unsigned int irq)
128
variant_irq_enable(irq);
129
xtensa_irq_unmask(irq);
132
static void xtensa_irq_disable(unsigned int irq)
134
xtensa_irq_mask(irq);
135
variant_irq_disable(irq);
138
static void xtensa_irq_ack(unsigned int irq)
140
set_sr(1 << irq, INTCLEAR);
143
static int xtensa_irq_retrigger(unsigned int irq)
145
set_sr (1 << irq, INTSET);
72
static void xtensa_irq_mask(struct irq_data *d)
74
cached_irq_mask &= ~(1 << d->irq);
75
set_sr (cached_irq_mask, INTENABLE);
78
static void xtensa_irq_unmask(struct irq_data *d)
80
cached_irq_mask |= 1 << d->irq;
81
set_sr (cached_irq_mask, INTENABLE);
84
static void xtensa_irq_enable(struct irq_data *d)
86
variant_irq_enable(d->irq);
87
xtensa_irq_unmask(d->irq);
90
static void xtensa_irq_disable(struct irq_data *d)
92
xtensa_irq_mask(d->irq);
93
variant_irq_disable(d->irq);
96
static void xtensa_irq_ack(struct irq_data *d)
98
set_sr(1 << d->irq, INTCLEAR);
101
static int xtensa_irq_retrigger(struct irq_data *d)
103
set_sr (1 << d->irq, INTSET);
150
108
static struct irq_chip xtensa_irq_chip = {
151
109
.name = "xtensa",
152
.enable = xtensa_irq_enable,
153
.disable = xtensa_irq_disable,
154
.mask = xtensa_irq_mask,
155
.unmask = xtensa_irq_unmask,
156
.ack = xtensa_irq_ack,
157
.retrigger = xtensa_irq_retrigger,
110
.irq_enable = xtensa_irq_enable,
111
.irq_disable = xtensa_irq_disable,
112
.irq_mask = xtensa_irq_mask,
113
.irq_unmask = xtensa_irq_unmask,
114
.irq_ack = xtensa_irq_ack,
115
.irq_retrigger = xtensa_irq_retrigger,
160
118
void __init init_IRQ(void)
165
123
int mask = 1 << index;
167
125
if (mask & XCHAL_INTTYPE_MASK_SOFTWARE)
168
set_irq_chip_and_handler(index, &xtensa_irq_chip,
126
irq_set_chip_and_handler(index, &xtensa_irq_chip,
169
127
handle_simple_irq);
171
129
else if (mask & XCHAL_INTTYPE_MASK_EXTERN_EDGE)
172
set_irq_chip_and_handler(index, &xtensa_irq_chip,
130
irq_set_chip_and_handler(index, &xtensa_irq_chip,
173
131
handle_edge_irq);
175
133
else if (mask & XCHAL_INTTYPE_MASK_EXTERN_LEVEL)
176
set_irq_chip_and_handler(index, &xtensa_irq_chip,
134
irq_set_chip_and_handler(index, &xtensa_irq_chip,
177
135
handle_level_irq);
179
137
else if (mask & XCHAL_INTTYPE_MASK_TIMER)
180
set_irq_chip_and_handler(index, &xtensa_irq_chip,
138
irq_set_chip_and_handler(index, &xtensa_irq_chip,
181
139
handle_edge_irq);
183
141
else /* XCHAL_INTTYPE_MASK_WRITE_ERROR */
184
142
/* XCHAL_INTTYPE_MASK_NMI */
186
set_irq_chip_and_handler(index, &xtensa_irq_chip,
144
irq_set_chip_and_handler(index, &xtensa_irq_chip,
187
145
handle_level_irq);