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