[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Another step towards building xenlinux/ia64 from -sparse
# HG changeset patch # User djm@xxxxxxxxxxxxxxx # Node ID 109a27c1c00459e02678beabebbdec73376e736d # Parent 7ddfb9a449729f80305d05dc5faf2f1e7638ef27 Another step towards building xenlinux/ia64 from -sparse diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre --- a/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen-mkbuildtree-pre Fri Sep 23 14:12:28 2005 @@ -13,3 +13,7 @@ mv include/linux include/linux.xen-x86 fi cp ../xen/include/asm-ia64/asm-xsi-offsets.h include/asm-ia64/xen/ +cp arch/ia64/xen/drivers/Makefile drivers/xen/Makefile +cp arch/ia64/xen/drivers/coreMakefile drivers/xen/core/Makefile +cp arch/ia64/xen/drivers/xenia64_init.c drivers/xen/core +cp arch/ia64/xen/drivers/evtchn_ia64.c drivers/xen/core diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/Makefile Fri Sep 23 14:12:28 2005 @@ -0,0 +1,19 @@ + + +obj-y += core/ +obj-y += console/ +obj-y += evtchn/ +#obj-y += balloon/ +obj-y += privcmd/ +obj-y += blkback/ +#obj-y += netback/ +obj-y += blkfront/ +obj-y += xenbus/ +#obj-y += netfront/ +#obj-$(CONFIG_XEN_PRIVILEGED_GUEST) += privcmd/ +#obj-$(CONFIG_XEN_BLKDEV_BACKEND) += blkback/ +#obj-$(CONFIG_XEN_NETDEV_BACKEND) += netback/ +#obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += blkfront/ +#obj-$(CONFIG_XEN_NETDEV_FRONTEND) += netfront/ +#obj-$(CONFIG_XEN_BLKDEV_TAP) += blktap/ + diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen/drivers/README --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/README Fri Sep 23 14:12:28 2005 @@ -0,0 +1,2 @@ +This is a temporary location for source/Makefiles that need to be +patched/reworked in drivers/xen to work with xenlinux/ia64. diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen/drivers/coreMakefile --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/coreMakefile Fri Sep 23 14:12:28 2005 @@ -0,0 +1,24 @@ +# +# Makefile for the linux kernel. +# + +XENARCH := $(subst ",,$(CONFIG_XENARCH)) + +CPPFLAGS_vmlinux.lds += -U$(XENARCH) + +$(obj)/vmlinux.lds.S: + @ln -fsn $(srctree)/arch/$(XENARCH)/kernel/vmlinux.lds.S $@ + + +obj-y := gnttab.o devmem.o +obj-$(CONFIG_PROC_FS) += xen_proc.o + +ifeq ($(ARCH),ia64) +obj-y += evtchn_ia64.o +obj-y += xenia64_init.o +else +extra-y += vmlinux.lds +obj-y += reboot.o evtchn.o fixup.o +obj-$(CONFIG_SMP) += smp.o # setup_profiling_timer def'd in ia64 +obj-$(CONFIG_NET) += skbuff.o # until networking is up on ia64 +endif diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/evtchn_ia64.c Fri Sep 23 14:12:28 2005 @@ -0,0 +1,151 @@ +/* NOTE: This file split off from evtchn.c because there was + some discussion that the mechanism is sufficiently different. + It may be possible to merge it back in the future... djm */ +#include <linux/config.h> +#include <linux/kernel.h> +#include <asm/hw_irq.h> +#include <asm-xen/evtchn.h> + +#define MAX_EVTCHN 256 +static struct { + irqreturn_t (*handler)(int, void *, struct pt_regs *); + void *dev_id; +} evtchns[MAX_EVTCHN]; + +int virq_to_evtchn[NR_VIRQS] = {-1}; +unsigned int bind_virq_to_evtchn(int virq) +{ + evtchn_op_t op; + + op.cmd = EVTCHNOP_bind_virq; + op.u.bind_virq.virq = virq; + if ( HYPERVISOR_event_channel_op(&op) != 0 ) + BUG(); + + virq_to_evtchn[virq] = op.u.bind_virq.port; + return op.u.bind_virq.port; +} + +int bind_virq_to_irq(int virq) +{ + printk("bind_virq_to_irq called... FIXME??\n"); + while(1); +} + +void unbind_virq_from_evtchn(int virq) +{ + evtchn_op_t op; + + op.cmd = EVTCHNOP_close; + op.u.close.dom = DOMID_SELF; + op.u.close.port = virq_to_evtchn[virq]; + if ( HYPERVISOR_event_channel_op(&op) != 0 ) + BUG(); + + virq_to_evtchn[virq] = -1; +} + +int bind_evtchn_to_irqhandler(unsigned int evtchn, + irqreturn_t (*handler)(int, void *, struct pt_regs *), + unsigned long irqflags, const char * devname, void *dev_id) +{ + if (evtchn >= MAX_EVTCHN) + return -EINVAL; + + evtchns[evtchn].handler = handler; + evtchns[evtchn].dev_id = dev_id; + unmask_evtchn(evtchn); + return 0; +} + +void unbind_evtchn_from_irqhandler(unsigned int evtchn, void *dev_id) +{ + if (evtchn >= MAX_EVTCHN) + return; + + mask_evtchn(evtchn); + evtchns[evtchn].handler = NULL; +} + +void unbind_evtchn_from_irq(unsigned int evtchn) +{ + printk("unbind_evtchn_from_irq called... FIXME??\n"); + while(1); +} + +irqreturn_t evtchn_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + u32 l1, l2; + unsigned int l1i, l2i, port; + irqreturn_t (*handler)(int, void *, struct pt_regs *); + shared_info_t *s = HYPERVISOR_shared_info; + vcpu_info_t *vcpu_info = &s->vcpu_data[smp_processor_id()]; + + vcpu_info->evtchn_upcall_mask = 1; + vcpu_info->evtchn_upcall_pending = 0; + + /* NB. No need for a barrier here -- XCHG is a barrier on x86. */ + l1 = xchg(&vcpu_info->evtchn_pending_sel, 0); + while ( l1 != 0 ) + { + l1i = __ffs(l1); + l1 &= ~(1 << l1i); + + while ( (l2 = s->evtchn_pending[l1i] & ~s->evtchn_mask[l1i]) != 0 ) + { + l2i = __ffs(l2); + l2 &= ~(1 << l2i); + + port = (l1i << 5) + l2i; + if ( (handler = evtchns[port].handler) != NULL ) + { + clear_evtchn(port); + handler(port, evtchns[port].dev_id, regs); + } + else + { + evtchn_device_upcall(port); + } + } + } + vcpu_info->evtchn_upcall_mask = 0; + return IRQ_HANDLED; +} + +void force_evtchn_callback(void) +{ + //(void)HYPERVISOR_xen_version(0, NULL); +} + +static struct irqaction evtchn_irqaction = { + .handler = evtchn_interrupt, + .flags = SA_INTERRUPT, + .name = "xen-event-channel" +}; + +int evtchn_irq = 0xe9; +void __init evtchn_init(void) +{ + shared_info_t *s = HYPERVISOR_shared_info; + vcpu_info_t *vcpu_info = &s->vcpu_data[smp_processor_id()]; + +#if 0 + int ret; + irq = assign_irq_vector(AUTO_ASSIGN); + ret = request_irq(irq, evtchn_interrupt, 0, "xen-event-channel", NULL); + if (ret < 0) + { + printk("xen-event-channel unable to get irq %d (%d)\n", irq, ret); + return; + } +#endif + register_percpu_irq(evtchn_irq, &evtchn_irqaction); + + vcpu_info->arch.evtchn_vector = evtchn_irq; + printk("xen-event-channel using irq %d\n", evtchn_irq); +} + +/* Following are set of interfaces unused on IA64/XEN, just keep it here */ + +void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu) {} +int teardown_irq(unsigned int irq, struct irqaction * old) {return 0;} diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c Fri Sep 23 14:12:28 2005 @@ -0,0 +1,48 @@ +#ifdef __ia64__ +#include <linux/config.h> +#include <linux/module.h> +#include <linux/efi.h> +#include <asm/sal.h> +#include <asm/hypervisor.h> +/* #include <asm-xen/evtchn.h> */ +#include <linux/vmalloc.h> + +shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)0xf100000000000000; +EXPORT_SYMBOL(HYPERVISOR_shared_info); + +static int initialized; +start_info_t *xen_start_info; + +int xen_init(void) +{ + shared_info_t *s = HYPERVISOR_shared_info; + + if (initialized) + return running_on_xen ? 0 : -1; + + if (!running_on_xen) + return -1; + + xen_start_info = __va(s->arch.start_info_pfn << PAGE_SHIFT); + xen_start_info->flags = s->arch.flags; + printk("Running on Xen! start_info_pfn=0x%lx lags=0x%x\n", + s->arch.start_info_pfn, xen_start_info->flags); + + evtchn_init(); + initialized = 1; + return 0; +} + +/* We just need a range of legal va here, though finally identity + * mapped one is instead used for gnttab mapping. + */ +unsigned long alloc_empty_foreign_map_page_range(unsigned long pages) +{ + struct vm_struct *vma; + + if ( (vma = get_vm_area(PAGE_SIZE * pages, VM_ALLOC)) == NULL ) + return NULL; + + return (unsigned long)vma->addr; +} +#endif diff -r 7ddfb9a44972 -r 109a27c1c004 linux-2.6-xen-sparse/include/asm-xen/asm-ia64/hypercall.h --- /dev/null Fri Sep 23 00:11:04 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-ia64/hypercall.h Fri Sep 23 14:12:28 2005 @@ -0,0 +1,624 @@ +/****************************************************************************** + * hypercall.h + * + * Linux-specific hypervisor handling. + * + * Copyright (c) 2002-2004, K A Fraser + * + * This file may be distributed separately from the Linux kernel, or + * incorporated into other software packages, subject to the following license: + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this source file (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, modify, + * merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef __HYPERCALL_H__ +#define __HYPERCALL_H__ +#include <asm-xen/xen-public/xen.h> + +/* FIXME: temp place to hold these page related macros */ +#include <asm/page.h> +#define virt_to_machine(v) __pa(v) +#define machine_to_virt(m) __va(m) +//#define virt_to_mfn(v) (__pa(v) >> 14) +//#define mfn_to_virt(m) (__va(m << 14)) +#define virt_to_mfn(v) ((__pa(v)) >> PAGE_SHIFT) +#define mfn_to_virt(m) (__va((m) << PAGE_SHIFT)) + +/* + * Assembler stubs for hyper-calls. + */ + +#if 0 +static inline int +HYPERVISOR_set_trap_table( + trap_info_t *table) +{ +#if 0 + int ret; + unsigned long ignore; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ignore) + : "0" (__HYPERVISOR_set_trap_table), "1" (table) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_mmu_update( + mmu_update_t *req, int count, int *success_count, domid_t domid) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3, ign4; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) + : "0" (__HYPERVISOR_mmu_update), "1" (req), "2" (count), + "3" (success_count), "4" (domid) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_mmuext_op( + struct mmuext_op *op, int count, int *success_count, domid_t domid) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3, ign4; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) + : "0" (__HYPERVISOR_mmuext_op), "1" (op), "2" (count), + "3" (success_count), "4" (domid) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_set_gdt( + unsigned long *frame_list, int entries) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_set_gdt), "1" (frame_list), "2" (entries) + : "memory" ); + + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_stack_switch( + unsigned long ss, unsigned long esp) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_stack_switch), "1" (ss), "2" (esp) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_set_callbacks( + unsigned long event_selector, unsigned long event_address, + unsigned long failsafe_selector, unsigned long failsafe_address) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3, ign4; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) + : "0" (__HYPERVISOR_set_callbacks), "1" (event_selector), + "2" (event_address), "3" (failsafe_selector), "4" (failsafe_address) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_fpu_taskswitch( + int set) +{ +#if 0 + int ret; + unsigned long ign; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign) + : "0" (__HYPERVISOR_fpu_taskswitch), "1" (set) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_yield( + void) +{ +#if 0 + int ret; + unsigned long ign; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign) + : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_yield) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_block( + void) +{ +#if 0 + int ret; + unsigned long ign1; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1) + : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_block) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_shutdown( + void) +{ +#if 0 + int ret; + unsigned long ign1; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1) + : "0" (__HYPERVISOR_sched_op), + "1" (SCHEDOP_shutdown | (SHUTDOWN_poweroff << SCHEDOP_reasonshift)) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_reboot( + void) +{ +#if 0 + int ret; + unsigned long ign1; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1) + : "0" (__HYPERVISOR_sched_op), + "1" (SCHEDOP_shutdown | (SHUTDOWN_reboot << SCHEDOP_reasonshift)) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_suspend( + unsigned long srec) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + /* NB. On suspend, control software expects a suspend record in %esi. */ + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=S" (ign2) + : "0" (__HYPERVISOR_sched_op), + "b" (SCHEDOP_shutdown | (SHUTDOWN_suspend << SCHEDOP_reasonshift)), + "S" (srec) : "memory"); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_crash( + void) +{ +#if 0 + int ret; + unsigned long ign1; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1) + : "0" (__HYPERVISOR_sched_op), + "1" (SCHEDOP_shutdown | (SHUTDOWN_crash << SCHEDOP_reasonshift)) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline long +HYPERVISOR_set_timer_op( + u64 timeout) +{ +#if 0 + int ret; + unsigned long timeout_hi = (unsigned long)(timeout>>32); + unsigned long timeout_lo = (unsigned long)timeout; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_set_timer_op), "b" (timeout_lo), "c" (timeout_hi) + : "memory"); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_dom0_op( + dom0_op_t *dom0_op) +{ +#if 0 + int ret; + unsigned long ign1; + + dom0_op->interface_version = DOM0_INTERFACE_VERSION; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1) + : "0" (__HYPERVISOR_dom0_op), "1" (dom0_op) + : "memory"); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_set_debugreg( + int reg, unsigned long value) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_set_debugreg), "1" (reg), "2" (value) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline unsigned long +HYPERVISOR_get_debugreg( + int reg) +{ +#if 0 + unsigned long ret; + unsigned long ign; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign) + : "0" (__HYPERVISOR_get_debugreg), "1" (reg) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_update_descriptor( + unsigned long ma, unsigned long word1, unsigned long word2) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) + : "0" (__HYPERVISOR_update_descriptor), "1" (ma), "2" (word1), + "3" (word2) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_set_fast_trap( + int idx) +{ +#if 0 + int ret; + unsigned long ign; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign) + : "0" (__HYPERVISOR_set_fast_trap), "1" (idx) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_dom_mem_op( + unsigned int op, unsigned long *extent_list, + unsigned long nr_extents, unsigned int extent_order) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3, ign4, ign5; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4), + "=D" (ign5) + : "0" (__HYPERVISOR_dom_mem_op), "1" (op), "2" (extent_list), + "3" (nr_extents), "4" (extent_order), "5" (DOMID_SELF) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_multicall( + void *call_list, int nr_calls) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_multicall), "1" (call_list), "2" (nr_calls) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_update_va_mapping( + unsigned long va, pte_t new_val, unsigned long flags) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) + : "0" (__HYPERVISOR_update_va_mapping), + "1" (va), "2" ((new_val).pte_low), "3" (flags) + : "memory" ); + + if ( unlikely(ret < 0) ) + { + printk(KERN_ALERT "Failed update VA mapping: %08lx, %08lx, %08lx\n", + va, (new_val).pte_low, flags); + BUG(); + } + + return ret; +#endif + return 1; +} +#endif + +static inline int +HYPERVISOR_event_channel_op( + void *op) +{ + int ret; + __asm__ __volatile__ ( ";; mov r14=%2 ; mov r2=%1 ; break 0x1000 ;; mov %0=r8 ;;" + : "=r" (ret) + : "i" (__HYPERVISOR_event_channel_op), "r"(op) + : "r14","r2","r8","memory" ); + return ret; +} + +#if 0 +static inline int +HYPERVISOR_xen_version( + int cmd) +{ +#if 0 + int ret; + unsigned long ignore; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ignore) + : "0" (__HYPERVISOR_xen_version), "1" (cmd) + : "memory" ); + + return ret; +#endif + return 1; +} +#endif + +static inline int +HYPERVISOR_console_io( + int cmd, int count, char *str) +{ + int ret; + __asm__ __volatile__ ( ";; mov r14=%2 ; mov r15=%3 ; mov r16=%4 ; mov r2=%1 ; break 0x1000 ;; mov %0=r8 ;;" + : "=r" (ret) + : "i" (__HYPERVISOR_console_io), "r"(cmd), "r"(count), "r"(str) + : "r14","r15","r16","r2","r8","memory" ); + return ret; +} + +#if 0 +static inline int +HYPERVISOR_physdev_op( + void *physdev_op) +{ +#if 0 + int ret; + unsigned long ign; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign) + : "0" (__HYPERVISOR_physdev_op), "1" (physdev_op) + : "memory" ); + + return ret; +#endif + return 1; +} +#endif + +static inline int +HYPERVISOR_grant_table_op( + unsigned int cmd, void *uop, unsigned int count) +{ + int ret; + __asm__ __volatile__ ( ";; mov r14=%2 ; mov r15=%3 ; mov r16=%4 ; mov r2=%1 ; break 0x1000 ;; mov %0=r8 ;;" + : "=r" (ret) + : "i" (__HYPERVISOR_grant_table_op), "r"(cmd), "r"(uop), "r"(count) + : "r14","r15","r16","r2","r8","memory" ); + return ret; +} + +#if 0 +static inline int +HYPERVISOR_update_va_mapping_otherdomain( + unsigned long va, pte_t new_val, unsigned long flags, domid_t domid) +{ +#if 0 + int ret; + unsigned long ign1, ign2, ign3, ign4; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) + : "0" (__HYPERVISOR_update_va_mapping_otherdomain), + "1" (va), "2" ((new_val).pte_low), "3" (flags), "4" (domid) : + "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_vm_assist( + unsigned int cmd, unsigned int type) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_vm_assist), "1" (cmd), "2" (type) + : "memory" ); + + return ret; +#endif + return 1; +} + +static inline int +HYPERVISOR_boot_vcpu( + unsigned long vcpu, vcpu_guest_context_t *ctxt) +{ +#if 0 + int ret; + unsigned long ign1, ign2; + + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret), "=b" (ign1), "=c" (ign2) + : "0" (__HYPERVISOR_boot_vcpu), "1" (vcpu), "2" (ctxt) + : "memory"); + + return ret; +#endif + return 1; +} +#endif + +#endif /* __HYPERCALL_H__ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |