1 #include <xen/irq.h>
2 #include <xen/errno.h>
3
4 DEFINE_PER_CPU(const struct cpu_user_regs *, irq_regs);
5
6 const hw_irq_controller no_irq_type = {
7 .typename = "none",
8 .startup = irq_startup_none,
9 .shutdown = irq_shutdown_none,
10 .enable = irq_enable_none,
11 .disable = irq_disable_none,
12 .ack = irq_ack_none,
13
14 #ifdef irq_end_none /* Hook is optional per arch */
15 .end = irq_end_none,
16 #endif
17 };
18
init_one_irq_desc(struct irq_desc * desc)19 int init_one_irq_desc(struct irq_desc *desc)
20 {
21 int err;
22
23 if (irq_desc_initialized(desc))
24 return 0;
25
26 if ( !alloc_cpumask_var(&desc->affinity) )
27 return -ENOMEM;
28
29 desc->status = IRQ_DISABLED;
30 desc->handler = &no_irq_type;
31 spin_lock_init(&desc->lock);
32 cpumask_setall(desc->affinity);
33 INIT_LIST_HEAD(&desc->rl_link);
34
35 err = arch_init_one_irq_desc(desc);
36 if ( err )
37 {
38 free_cpumask_var(desc->affinity);
39 desc->handler = NULL;
40 }
41
42 return err;
43 }
44
no_action(int cpl,void * dev_id)45 void cf_check no_action(int cpl, void *dev_id)
46 {
47 }
48
irq_actor_none(struct irq_desc * desc)49 void cf_check irq_actor_none(struct irq_desc *desc)
50 {
51 }
52
irq_startup_none(struct irq_desc * desc)53 unsigned int cf_check irq_startup_none(struct irq_desc *desc)
54 {
55 return 0;
56 }
57