diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2008-05-19 09:13:43 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2008-05-27 18:11:10 -0400 |
commit | 85cbc503787d577c215f9540c57294e1ec799144 (patch) | |
tree | 040eabd9681d2691f777574283de9963aa8f2e05 /include/asm-ia64/paravirt.h | |
parent | 33b39e84209b0308b572dce017df7ee9b63f086c (diff) |
[IA64] pvops: add hooks, pv_irq_ops, to paravirtualized irq related operations.
introduce pv_irq_ops which adds hooks to paravirtualize irq related
operations.
On virtualized environment, interruption may be replaced by something
virtualization friendly. So the irq related operation also may need
paravirtualization.
This patch adds necessary hooks to paravirtualize irq related operations.
Signed-off-by: Yaozu (Eddie) Dong <eddie.dong@intel.com>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'include/asm-ia64/paravirt.h')
-rw-r--r-- | include/asm-ia64/paravirt.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/include/asm-ia64/paravirt.h b/include/asm-ia64/paravirt.h index 3a40f624e86e..ee15646b6d66 100644 --- a/include/asm-ia64/paravirt.h +++ b/include/asm-ia64/paravirt.h | |||
@@ -152,6 +152,54 @@ __iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val) | |||
152 | return pv_iosapic_ops.__write(iosapic, reg, val); | 152 | return pv_iosapic_ops.__write(iosapic, reg, val); |
153 | } | 153 | } |
154 | 154 | ||
155 | /****************************************************************************** | ||
156 | * replacement of irq operations. | ||
157 | */ | ||
158 | |||
159 | struct pv_irq_ops { | ||
160 | void (*register_ipi)(void); | ||
161 | |||
162 | int (*assign_irq_vector)(int irq); | ||
163 | void (*free_irq_vector)(int vector); | ||
164 | |||
165 | void (*register_percpu_irq)(ia64_vector vec, | ||
166 | struct irqaction *action); | ||
167 | |||
168 | void (*resend_irq)(unsigned int vector); | ||
169 | }; | ||
170 | |||
171 | extern struct pv_irq_ops pv_irq_ops; | ||
172 | |||
173 | static inline void | ||
174 | ia64_register_ipi(void) | ||
175 | { | ||
176 | pv_irq_ops.register_ipi(); | ||
177 | } | ||
178 | |||
179 | static inline int | ||
180 | assign_irq_vector(int irq) | ||
181 | { | ||
182 | return pv_irq_ops.assign_irq_vector(irq); | ||
183 | } | ||
184 | |||
185 | static inline void | ||
186 | free_irq_vector(int vector) | ||
187 | { | ||
188 | return pv_irq_ops.free_irq_vector(vector); | ||
189 | } | ||
190 | |||
191 | static inline void | ||
192 | register_percpu_irq(ia64_vector vec, struct irqaction *action) | ||
193 | { | ||
194 | pv_irq_ops.register_percpu_irq(vec, action); | ||
195 | } | ||
196 | |||
197 | static inline void | ||
198 | ia64_resend_irq(unsigned int vector) | ||
199 | { | ||
200 | pv_irq_ops.resend_irq(vector); | ||
201 | } | ||
202 | |||
155 | #endif /* !__ASSEMBLY__ */ | 203 | #endif /* !__ASSEMBLY__ */ |
156 | 204 | ||
157 | #else | 205 | #else |