/root/src/xen/xen/include/xen/irq.h
Line | Count | Source (jump to first uncovered line) |
1 | | #ifndef __XEN_IRQ_H__ |
2 | | #define __XEN_IRQ_H__ |
3 | | |
4 | | #include <xen/cpumask.h> |
5 | | #include <xen/rcupdate.h> |
6 | | #include <xen/spinlock.h> |
7 | | #include <xen/time.h> |
8 | | #include <xen/list.h> |
9 | | #include <asm/regs.h> |
10 | | #include <asm/hardirq.h> |
11 | | |
12 | | struct irqaction { |
13 | | void (*handler)(int, void *, struct cpu_user_regs *); |
14 | | const char *name; |
15 | | void *dev_id; |
16 | | bool_t free_on_release; |
17 | | #ifdef CONFIG_IRQ_HAS_MULTIPLE_ACTION |
18 | | struct irqaction *next; |
19 | | #endif |
20 | | }; |
21 | | |
22 | | /* |
23 | | * IRQ line status. |
24 | | */ |
25 | 420k | #define _IRQ_INPROGRESS 0 /* IRQ handler active - do not enter! */ |
26 | 158k | #define _IRQ_DISABLED 1 /* IRQ disabled - do not enter! */ |
27 | 316k | #define _IRQ_PENDING 2 /* IRQ pending - replay on enable */ |
28 | 140k | #define _IRQ_REPLAY 3 /* IRQ has been replayed but not acked yet */ |
29 | 7.60k | #define _IRQ_GUEST 4 /* IRQ is handled by guest OS(es) */ |
30 | 299 | #define _IRQ_MOVE_PENDING 5 /* IRQ is migrating to another CPUs */ |
31 | | #define _IRQ_PER_CPU 6 /* IRQ is per CPU */ |
32 | | #define _IRQ_GUEST_EOI_PENDING 7 /* IRQ was disabled, pending a guest EOI */ |
33 | | #define _IRQF_SHARED 8 /* IRQ is shared */ |
34 | 420k | #define IRQ_INPROGRESS (1u<<_IRQ_INPROGRESS) |
35 | 158k | #define IRQ_DISABLED (1u<<_IRQ_DISABLED) |
36 | 316k | #define IRQ_PENDING (1u<<_IRQ_PENDING) |
37 | 140k | #define IRQ_REPLAY (1u<<_IRQ_REPLAY) |
38 | 7.60k | #define IRQ_GUEST (1u<<_IRQ_GUEST) |
39 | 299 | #define IRQ_MOVE_PENDING (1u<<_IRQ_MOVE_PENDING) |
40 | | #define IRQ_PER_CPU (1u<<_IRQ_PER_CPU) |
41 | | #define IRQ_GUEST_EOI_PENDING (1u<<_IRQ_GUEST_EOI_PENDING) |
42 | | #define IRQF_SHARED (1u<<_IRQF_SHARED) |
43 | | |
44 | | /* Special IRQ numbers. */ |
45 | | #define AUTO_ASSIGN_IRQ (-1) |
46 | | #define NEVER_ASSIGN_IRQ (-2) |
47 | | #define FREE_TO_ASSIGN_IRQ (-3) |
48 | | |
49 | | struct irq_desc; |
50 | | |
51 | | /* |
52 | | * Interrupt controller descriptor. This is all we need |
53 | | * to describe about the low-level hardware. |
54 | | */ |
55 | | struct hw_interrupt_type { |
56 | | const char *typename; |
57 | | unsigned int (*startup)(struct irq_desc *); |
58 | | void (*shutdown)(struct irq_desc *); |
59 | | void (*enable)(struct irq_desc *); |
60 | | void (*disable)(struct irq_desc *); |
61 | | void (*ack)(struct irq_desc *); |
62 | | #ifdef CONFIG_X86 |
63 | | void (*end)(struct irq_desc *, u8 vector); |
64 | | #else |
65 | | void (*end)(struct irq_desc *); |
66 | | #endif |
67 | | void (*set_affinity)(struct irq_desc *, const cpumask_t *); |
68 | | }; |
69 | | |
70 | | typedef const struct hw_interrupt_type hw_irq_controller; |
71 | | |
72 | | #include <asm/irq.h> |
73 | | |
74 | | struct msi_desc; |
75 | | /* |
76 | | * This is the "IRQ descriptor", which contains various information |
77 | | * about the irq, including what kind of hardware handling it has, |
78 | | * whether it is disabled etc etc. |
79 | | * |
80 | | * Note: on ARMv8 we can use normal bit manipulation functions to access |
81 | | * the status field because struct irq_desc contains pointers, therefore |
82 | | * the alignment of the struct is at least 8 bytes and status is the |
83 | | * first field. |
84 | | */ |
85 | | typedef struct irq_desc { |
86 | | unsigned int status; /* IRQ status */ |
87 | | hw_irq_controller *handler; |
88 | | struct msi_desc *msi_desc; |
89 | | struct irqaction *action; /* IRQ action list */ |
90 | | int irq; |
91 | | spinlock_t lock; |
92 | | struct arch_irq_desc arch; |
93 | | cpumask_var_t affinity; |
94 | | |
95 | | /* irq ratelimit */ |
96 | | s_time_t rl_quantum_start; |
97 | | unsigned int rl_cnt; |
98 | | struct list_head rl_link; |
99 | | } __cacheline_aligned irq_desc_t; |
100 | | |
101 | | #ifndef irq_to_desc |
102 | 182k | #define irq_to_desc(irq) (&irq_desc[irq]) |
103 | | #endif |
104 | | |
105 | | int init_one_irq_desc(struct irq_desc *); |
106 | | int arch_init_one_irq_desc(struct irq_desc *); |
107 | | |
108 | 25.6k | #define irq_desc_initialized(desc) ((desc)->handler != NULL) |
109 | | |
110 | | extern int setup_irq(unsigned int irq, unsigned int irqflags, |
111 | | struct irqaction *); |
112 | | extern void release_irq(unsigned int irq, const void *dev_id); |
113 | | extern int request_irq(unsigned int irq, unsigned int irqflags, |
114 | | void (*handler)(int, void *, struct cpu_user_regs *), |
115 | | const char * devname, void *dev_id); |
116 | | |
117 | | extern hw_irq_controller no_irq_type; |
118 | | extern void no_action(int cpl, void *dev_id, struct cpu_user_regs *regs); |
119 | | extern unsigned int irq_startup_none(struct irq_desc *); |
120 | | extern void irq_actor_none(struct irq_desc *); |
121 | | #define irq_shutdown_none irq_actor_none |
122 | | #define irq_disable_none irq_actor_none |
123 | | #define irq_enable_none irq_actor_none |
124 | | |
125 | | struct domain; |
126 | | struct vcpu; |
127 | | |
128 | | struct pirq { |
129 | | int pirq; |
130 | | u16 evtchn; |
131 | | bool_t masked; |
132 | | struct rcu_head rcu_head; |
133 | | struct arch_pirq arch; |
134 | | }; |
135 | | |
136 | 147 | #define INVALID_PIRQ (-1) |
137 | 6.27k | #define pirq_info(d, p) ((struct pirq *)radix_tree_lookup(&(d)->pirq_tree, p)) |
138 | | |
139 | | /* Use this instead of pirq_info() if the structure may need allocating. */ |
140 | | extern struct pirq *pirq_get_info(struct domain *, int pirq); |
141 | | |
142 | 102 | #define pirq_field(d, p, f, def) ({ \ |
143 | 102 | const struct pirq *__pi = pirq_info(d, p); \ |
144 | 90 | __pi ? __pi->f : def; \ |
145 | 102 | }) |
146 | 0 | #define pirq_to_evtchn(d, pirq) pirq_field(d, pirq, evtchn, 0) |
147 | | #define pirq_masked(d, pirq) pirq_field(d, pirq, masked, 0) |
148 | | |
149 | | void pirq_cleanup_check(struct pirq *, struct domain *); |
150 | | |
151 | | #define pirq_cleanup_check(pirq, d) \ |
152 | 0 | ((pirq)->evtchn ? pirq_cleanup_check(pirq, d) : (void)0) |
153 | | |
154 | | extern void pirq_guest_eoi(struct pirq *); |
155 | | extern void desc_guest_eoi(struct irq_desc *, struct pirq *); |
156 | | extern int pirq_guest_unmask(struct domain *d); |
157 | | extern int pirq_guest_bind(struct vcpu *, struct pirq *, int will_share); |
158 | | extern void pirq_guest_unbind(struct domain *d, struct pirq *); |
159 | | extern void pirq_set_affinity(struct domain *d, int irq, const cpumask_t *); |
160 | | extern irq_desc_t *domain_spin_lock_irq_desc( |
161 | | struct domain *d, int irq, unsigned long *pflags); |
162 | | extern irq_desc_t *pirq_spin_lock_irq_desc( |
163 | | const struct pirq *, unsigned long *pflags); |
164 | | |
165 | | static inline void set_native_irq_info(unsigned int irq, const cpumask_t *mask) |
166 | 21 | { |
167 | 21 | cpumask_copy(irq_to_desc(irq)->affinity, mask); |
168 | 21 | } Unexecuted instantiation: cpu.c:set_native_irq_info Unexecuted instantiation: cpupool.c:set_native_irq_info Unexecuted instantiation: domctl.c:set_native_irq_info Unexecuted instantiation: domain.c:set_native_irq_info Unexecuted instantiation: event_2l.c:set_native_irq_info Unexecuted instantiation: event_channel.c:set_native_irq_info Unexecuted instantiation: event_fifo.c:set_native_irq_info Unexecuted instantiation: grant_table.c:set_native_irq_info Unexecuted instantiation: guestcopy.c:set_native_irq_info Unexecuted instantiation: irq.c:set_native_irq_info Unexecuted instantiation: kernel.c:set_native_irq_info Unexecuted instantiation: keyhandler.c:set_native_irq_info Unexecuted instantiation: kexec.c:set_native_irq_info Unexecuted instantiation: kimage.c:set_native_irq_info Unexecuted instantiation: mem_access.c:set_native_irq_info Unexecuted instantiation: memory.c:set_native_irq_info Unexecuted instantiation: monitor.c:set_native_irq_info Unexecuted instantiation: multicall.c:set_native_irq_info Unexecuted instantiation: page_alloc.c:set_native_irq_info Unexecuted instantiation: preempt.c:set_native_irq_info Unexecuted instantiation: rangeset.c:set_native_irq_info Unexecuted instantiation: rcupdate.c:set_native_irq_info Unexecuted instantiation: rwlock.c:set_native_irq_info Unexecuted instantiation: sched_arinc653.c:set_native_irq_info Unexecuted instantiation: sched_credit.c:set_native_irq_info Unexecuted instantiation: sched_credit2.c:set_native_irq_info Unexecuted instantiation: sched_rt.c:set_native_irq_info Unexecuted instantiation: sched_null.c:set_native_irq_info Unexecuted instantiation: schedule.c:set_native_irq_info Unexecuted instantiation: shutdown.c:set_native_irq_info Unexecuted instantiation: softirq.c:set_native_irq_info Unexecuted instantiation: spinlock.c:set_native_irq_info Unexecuted instantiation: stop_machine.c:set_native_irq_info Unexecuted instantiation: symbols.c:set_native_irq_info Unexecuted instantiation: sysctl.c:set_native_irq_info Unexecuted instantiation: tasklet.c:set_native_irq_info Unexecuted instantiation: time.c:set_native_irq_info Unexecuted instantiation: timer.c:set_native_irq_info Unexecuted instantiation: trace.c:set_native_irq_info Unexecuted instantiation: vm_event.c:set_native_irq_info Unexecuted instantiation: vsprintf.c:set_native_irq_info Unexecuted instantiation: wait.c:set_native_irq_info Unexecuted instantiation: xenoprof.c:set_native_irq_info Unexecuted instantiation: xmalloc_tlsf.c:set_native_irq_info Unexecuted instantiation: tmem.c:set_native_irq_info Unexecuted instantiation: tmem_xen.c:set_native_irq_info Unexecuted instantiation: tmem_control.c:set_native_irq_info Unexecuted instantiation: llvm.c:set_native_irq_info Unexecuted instantiation: libelf-loader.c:set_native_irq_info Unexecuted instantiation: console.c:set_native_irq_info Unexecuted instantiation: ns16550.c:set_native_irq_info Unexecuted instantiation: ehci-dbgp.c:set_native_irq_info Unexecuted instantiation: cpufreq.c:set_native_irq_info Unexecuted instantiation: cpufreq_ondemand.c:set_native_irq_info Unexecuted instantiation: cpufreq_misc_governors.c:set_native_irq_info Unexecuted instantiation: utility.c:set_native_irq_info Unexecuted instantiation: pci.c:set_native_irq_info Unexecuted instantiation: vpci.c:set_native_irq_info Unexecuted instantiation: header.c:set_native_irq_info Unexecuted instantiation: msi.c:set_native_irq_info Unexecuted instantiation: msix.c:set_native_irq_info Unexecuted instantiation: iommu.c:set_native_irq_info Unexecuted instantiation: io.c:set_native_irq_info Unexecuted instantiation: dmar.c:set_native_irq_info Unexecuted instantiation: utils.c:set_native_irq_info Unexecuted instantiation: qinval.c:set_native_irq_info Unexecuted instantiation: intremap.c:set_native_irq_info Unexecuted instantiation: quirks.c:set_native_irq_info Unexecuted instantiation: vtd.c:set_native_irq_info Unexecuted instantiation: ats.c:set_native_irq_info Unexecuted instantiation: iommu_init.c:set_native_irq_info Unexecuted instantiation: iommu_map.c:set_native_irq_info Unexecuted instantiation: pci_amd_iommu.c:set_native_irq_info Unexecuted instantiation: iommu_intr.c:set_native_irq_info Unexecuted instantiation: iommu_cmd.c:set_native_irq_info Unexecuted instantiation: iommu_guest.c:set_native_irq_info Unexecuted instantiation: pmstat.c:set_native_irq_info Unexecuted instantiation: reboot.c:set_native_irq_info Unexecuted instantiation: erst.c:set_native_irq_info Unexecuted instantiation: apei-io.c:set_native_irq_info Unexecuted instantiation: vga.c:set_native_irq_info Unexecuted instantiation: xsm_core.c:set_native_irq_info Unexecuted instantiation: apic.c:set_native_irq_info Unexecuted instantiation: cpuid.c:set_native_irq_info Unexecuted instantiation: compat.c:set_native_irq_info Unexecuted instantiation: crash.c:set_native_irq_info Unexecuted instantiation: debug.c:set_native_irq_info Unexecuted instantiation: domain_page.c:set_native_irq_info Unexecuted instantiation: flushtlb.c:set_native_irq_info Unexecuted instantiation: hypercall.c:set_native_irq_info Unexecuted instantiation: i387.c:set_native_irq_info Unexecuted instantiation: i8259.c:set_native_irq_info io_apic.c:set_native_irq_info Line | Count | Source | 166 | 21 | { | 167 | 21 | cpumask_copy(irq_to_desc(irq)->affinity, mask); | 168 | 21 | } |
Unexecuted instantiation: msr.c:set_native_irq_info Unexecuted instantiation: ioport_emulate.c:set_native_irq_info Unexecuted instantiation: machine_kexec.c:set_native_irq_info Unexecuted instantiation: microcode_amd.c:set_native_irq_info Unexecuted instantiation: microcode_intel.c:set_native_irq_info Unexecuted instantiation: microcode.c:set_native_irq_info Unexecuted instantiation: mm.c:set_native_irq_info Unexecuted instantiation: mpparse.c:set_native_irq_info Unexecuted instantiation: nmi.c:set_native_irq_info Unexecuted instantiation: numa.c:set_native_irq_info Unexecuted instantiation: physdev.c:set_native_irq_info Unexecuted instantiation: platform_hypercall.c:set_native_irq_info Unexecuted instantiation: psr.c:set_native_irq_info Unexecuted instantiation: setup.c:set_native_irq_info Unexecuted instantiation: smp.c:set_native_irq_info Unexecuted instantiation: smpboot.c:set_native_irq_info Unexecuted instantiation: traps.c:set_native_irq_info Unexecuted instantiation: usercopy.c:set_native_irq_info Unexecuted instantiation: x86_emulate.c:set_native_irq_info Unexecuted instantiation: tboot.c:set_native_irq_info Unexecuted instantiation: hpet.c:set_native_irq_info Unexecuted instantiation: xstate.c:set_native_irq_info Unexecuted instantiation: lib.c:set_native_irq_info Unexecuted instantiation: power.c:set_native_irq_info Unexecuted instantiation: suspend.c:set_native_irq_info Unexecuted instantiation: cpu_idle.c:set_native_irq_info Unexecuted instantiation: amd.c:set_native_irq_info Unexecuted instantiation: common.c:set_native_irq_info Unexecuted instantiation: intel.c:set_native_irq_info Unexecuted instantiation: mwait-idle.c:set_native_irq_info Unexecuted instantiation: vpmu.c:set_native_irq_info Unexecuted instantiation: vpmu_amd.c:set_native_irq_info Unexecuted instantiation: vpmu_intel.c:set_native_irq_info Unexecuted instantiation: amd_nonfatal.c:set_native_irq_info Unexecuted instantiation: mce_amd.c:set_native_irq_info Unexecuted instantiation: mcaction.c:set_native_irq_info Unexecuted instantiation: barrier.c:set_native_irq_info Unexecuted instantiation: mctelem.c:set_native_irq_info Unexecuted instantiation: mce.c:set_native_irq_info Unexecuted instantiation: mce-apei.c:set_native_irq_info Unexecuted instantiation: mce_intel.c:set_native_irq_info Unexecuted instantiation: non-fatal.c:set_native_irq_info Unexecuted instantiation: util.c:set_native_irq_info Unexecuted instantiation: vmce.c:set_native_irq_info Unexecuted instantiation: bigsmp.c:set_native_irq_info Unexecuted instantiation: x2apic.c:set_native_irq_info Unexecuted instantiation: default.c:set_native_irq_info Unexecuted instantiation: delivery.c:set_native_irq_info Unexecuted instantiation: probe.c:set_native_irq_info Unexecuted instantiation: asid.c:set_native_irq_info Unexecuted instantiation: dm.c:set_native_irq_info Unexecuted instantiation: emulate.c:set_native_irq_info Unexecuted instantiation: hvm.c:set_native_irq_info Unexecuted instantiation: i8254.c:set_native_irq_info Unexecuted instantiation: intercept.c:set_native_irq_info Unexecuted instantiation: ioreq.c:set_native_irq_info Unexecuted instantiation: mtrr.c:set_native_irq_info Unexecuted instantiation: nestedhvm.c:set_native_irq_info Unexecuted instantiation: pmtimer.c:set_native_irq_info Unexecuted instantiation: rtc.c:set_native_irq_info Unexecuted instantiation: save.c:set_native_irq_info Unexecuted instantiation: stdvga.c:set_native_irq_info Unexecuted instantiation: vioapic.c:set_native_irq_info Unexecuted instantiation: viridian.c:set_native_irq_info Unexecuted instantiation: vlapic.c:set_native_irq_info Unexecuted instantiation: vmsi.c:set_native_irq_info Unexecuted instantiation: vpic.c:set_native_irq_info Unexecuted instantiation: vpt.c:set_native_irq_info Unexecuted instantiation: intr.c:set_native_irq_info Unexecuted instantiation: nestedsvm.c:set_native_irq_info Unexecuted instantiation: svm.c:set_native_irq_info Unexecuted instantiation: svmdebug.c:set_native_irq_info Unexecuted instantiation: vmcb.c:set_native_irq_info Unexecuted instantiation: realmode.c:set_native_irq_info Unexecuted instantiation: vmcs.c:set_native_irq_info Unexecuted instantiation: vmx.c:set_native_irq_info Unexecuted instantiation: vvmx.c:set_native_irq_info Unexecuted instantiation: paging.c:set_native_irq_info Unexecuted instantiation: p2m.c:set_native_irq_info Unexecuted instantiation: p2m-pt.c:set_native_irq_info Unexecuted instantiation: p2m-ept.c:set_native_irq_info Unexecuted instantiation: p2m-pod.c:set_native_irq_info Unexecuted instantiation: altp2m.c:set_native_irq_info Unexecuted instantiation: guest_walk.c:set_native_irq_info Unexecuted instantiation: mem_paging.c:set_native_irq_info Unexecuted instantiation: mem_sharing.c:set_native_irq_info Unexecuted instantiation: multi.c:set_native_irq_info Unexecuted instantiation: hap.c:set_native_irq_info Unexecuted instantiation: nested_hap.c:set_native_irq_info Unexecuted instantiation: nested_ept.c:set_native_irq_info Unexecuted instantiation: nmi_int.c:set_native_irq_info Unexecuted instantiation: op_model_p4.c:set_native_irq_info Unexecuted instantiation: op_model_ppro.c:set_native_irq_info Unexecuted instantiation: op_model_athlon.c:set_native_irq_info Unexecuted instantiation: backtrace.c:set_native_irq_info Unexecuted instantiation: callback.c:set_native_irq_info Unexecuted instantiation: descriptor-tables.c:set_native_irq_info Unexecuted instantiation: emul-gate-op.c:set_native_irq_info Unexecuted instantiation: emul-inv-op.c:set_native_irq_info Unexecuted instantiation: emul-priv-op.c:set_native_irq_info Unexecuted instantiation: iret.c:set_native_irq_info Unexecuted instantiation: misc-hypercalls.c:set_native_irq_info Unexecuted instantiation: ro-page-fault.c:set_native_irq_info Unexecuted instantiation: acpi_mmcfg.c:set_native_irq_info Unexecuted instantiation: mmconf-fam10h.c:set_native_irq_info Unexecuted instantiation: mmconfig_64.c:set_native_irq_info Unexecuted instantiation: mmconfig-shared.c:set_native_irq_info |
169 | | |
170 | | unsigned int set_desc_affinity(struct irq_desc *, const cpumask_t *); |
171 | | |
172 | | #ifndef arch_hwdom_irqs |
173 | | unsigned int arch_hwdom_irqs(domid_t); |
174 | | #endif |
175 | | |
176 | | #ifndef arch_evtchn_bind_pirq |
177 | | void arch_evtchn_bind_pirq(struct domain *, int pirq); |
178 | | #endif |
179 | | |
180 | | #endif /* __XEN_IRQ_H__ */ |