]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/ia64/kernel/paravirt.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
[linux-2.6-omap-h63xx.git] / arch / ia64 / kernel / paravirt.c
index e5482bb6841e05f576f9172b639dde3282bc050a..de35d8e8b7d27360fac4ccd7e05256701c27ee9d 100644 (file)
@@ -41,6 +41,13 @@ struct pv_info pv_info = {
        .name = "bare hardware"
 };
 
+/***************************************************************************
+ * pv_init_ops
+ * initialization hooks.
+ */
+
+struct pv_init_ops pv_init_ops;
+
 /***************************************************************************
  * pv_cpu_ops
  * intrinsics hooks.
@@ -286,3 +293,77 @@ struct pv_cpu_ops pv_cpu_ops = {
                        = ia64_native_intrin_local_irq_restore_func,
 };
 EXPORT_SYMBOL(pv_cpu_ops);
+
+/******************************************************************************
+ * replacement of hand written assembly codes.
+ */
+
+void
+paravirt_cpu_asm_init(const struct pv_cpu_asm_switch *cpu_asm_switch)
+{
+       extern unsigned long paravirt_switch_to_targ;
+       extern unsigned long paravirt_leave_syscall_targ;
+       extern unsigned long paravirt_work_processed_syscall_targ;
+       extern unsigned long paravirt_leave_kernel_targ;
+
+       paravirt_switch_to_targ = cpu_asm_switch->switch_to;
+       paravirt_leave_syscall_targ = cpu_asm_switch->leave_syscall;
+       paravirt_work_processed_syscall_targ =
+               cpu_asm_switch->work_processed_syscall;
+       paravirt_leave_kernel_targ = cpu_asm_switch->leave_kernel;
+}
+
+/***************************************************************************
+ * pv_iosapic_ops
+ * iosapic read/write hooks.
+ */
+
+static unsigned int
+ia64_native_iosapic_read(char __iomem *iosapic, unsigned int reg)
+{
+       return __ia64_native_iosapic_read(iosapic, reg);
+}
+
+static void
+ia64_native_iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val)
+{
+       __ia64_native_iosapic_write(iosapic, reg, val);
+}
+
+struct pv_iosapic_ops pv_iosapic_ops = {
+       .pcat_compat_init = ia64_native_iosapic_pcat_compat_init,
+       .__get_irq_chip = ia64_native_iosapic_get_irq_chip,
+
+       .__read = ia64_native_iosapic_read,
+       .__write = ia64_native_iosapic_write,
+};
+
+/***************************************************************************
+ * pv_irq_ops
+ * irq operations
+ */
+
+struct pv_irq_ops pv_irq_ops = {
+       .register_ipi = ia64_native_register_ipi,
+
+       .assign_irq_vector = ia64_native_assign_irq_vector,
+       .free_irq_vector = ia64_native_free_irq_vector,
+       .register_percpu_irq = ia64_native_register_percpu_irq,
+
+       .resend_irq = ia64_native_resend_irq,
+};
+
+/***************************************************************************
+ * pv_time_ops
+ * time operations
+ */
+
+static int
+ia64_native_do_steal_accounting(unsigned long *new_itm)
+{
+       return 0;
+}
+
+struct pv_time_ops pv_time_ops = {
+       .do_steal_accounting = ia64_native_do_steal_accounting,
+};