[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-ia64-devel] [patch] emulate more SN2 SAL calls
Hi, We need some more SAL calls emulated on SN2. Cheers, Jes # HG changeset patch # User jes@xxxxxxxxxxxxxxxx # Date 1179839290 -7200 # Node ID a00f130f36c7e182494d0fdf0aaf2206bdfb3a6e # Parent ce09d8e7f7334cda03f26e2493398f3cface8060 A few extra SN SAL calls that needs to be emulated to get anywhere with dom0 on an SN2. Also reduce the verbosity of the emulated calls a bit. Signed-off-by: Jes Sorensen <jes@xxxxxxx> diff -r ce09d8e7f733 -r a00f130f36c7 xen/arch/ia64/xen/fw_emul.c --- a/xen/arch/ia64/xen/fw_emul.c Tue May 22 14:53:26 2007 +0200 +++ b/xen/arch/ia64/xen/fw_emul.c Tue May 22 15:08:10 2007 +0200 @@ -23,6 +23,7 @@ #include <asm/pal.h> #include <asm/sal.h> #include <asm/sn/sn_sal.h> +#include <asm/sn/hubdev.h> #include <asm/xenmca.h> #include <public/sched.h> @@ -380,7 +381,7 @@ sal_emulator (long index, unsigned long case SN_SAL_GET_MASTER_NASID: status = -1; if (current->domain == dom0) { - printk("*** Emulating SN_SAL_GET_MASTER_NASID ***\n"); + /* printk("*** Emulating SN_SAL_GET_MASTER_NASID ***\n"); */ SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_MASTER_NASID, 0, 0, 0, 0, 0, 0, 0); status = ret_stuff.status; @@ -392,7 +393,7 @@ sal_emulator (long index, unsigned long case SN_SAL_GET_KLCONFIG_ADDR: status = -1; if (current->domain == dom0) { - printk("*** Emulating SN_SAL_GET_KLCONFIG_ADDR ***\n"); + /* printk("*** Emulating SN_SAL_GET_KLCONFIG_ADDR ***\n"); */ SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_KLCONFIG_ADDR, in1, 0, 0, 0, 0, 0, 0); status = ret_stuff.status; @@ -404,9 +405,9 @@ sal_emulator (long index, unsigned long case SN_SAL_GET_SAPIC_INFO: status = -1; if (current->domain == dom0) { - printk("*** Emulating SN_SAL_GET_SAPIC_INFO ***\n"); - SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SAPIC_INFO, in1, - 0, 0, 0, 0, 0, 0); + /* printk("*** Emulating SN_SAL_GET_SAPIC_INFO ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SAPIC_INFO, + in1, 0, 0, 0, 0, 0, 0); status = ret_stuff.status; r9 = ret_stuff.v0; r10 = ret_stuff.v1; @@ -416,9 +417,9 @@ sal_emulator (long index, unsigned long case SN_SAL_GET_SN_INFO: status = -1; if (current->domain == dom0) { - printk("*** Emulating SN_SAL_GET_SN_INFO ***\n"); - SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SN_INFO, in1, - 0, 0, 0, 0, 0, 0); + /* printk("*** Emulating SN_SAL_GET_SN_INFO ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_SN_INFO, + in1, 0, 0, 0, 0, 0, 0); status = ret_stuff.status; r9 = ret_stuff.v0; r10 = ret_stuff.v1; @@ -428,9 +429,120 @@ sal_emulator (long index, unsigned long case SN_SAL_IOIF_GET_HUBDEV_INFO: status = -1; if (current->domain == dom0) { - printk("*** Emulating SN_SAL_IOIF_GET_HUBDEV_INFO ***\n"); + /* printk("*** Emulating SN_SAL_IOIF_GET_HUBDEV_INFO ***\n"); */ SAL_CALL_NOLOCK(ret_stuff, SN_SAL_IOIF_GET_HUBDEV_INFO, in1, in2, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; + case SN_SAL_IOIF_INIT: + status = -1; + if (current->domain == dom0) { + /* printk("*** Emulating SN_SAL_IOIF_INIT ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_IOIF_INIT, + 0, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; + case SN_SAL_GET_PROM_FEATURE_SET: + status = -1; + if (current->domain == dom0) { + /* printk("*** Emulating SN_SAL_GET_PROM_FEATURE_SET ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_GET_PROM_FEATURE_SET, + in1, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; + case SN_SAL_SET_OS_FEATURE_SET: + status = -1; + if (current->domain == dom0) { + /* printk("*** Emulating SN_SAL_SET_OS_FEATURE_SET ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_SET_OS_FEATURE_SET, + in1, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; + case SN_SAL_SET_ERROR_HANDLING_FEATURES: + status = -1; + if (current->domain == dom0) { + /* printk("*** Emulating SN_SAL_SET_ERROR_HANDLING_FEATURES ***\n"); */ + SAL_CALL_NOLOCK(ret_stuff, + SN_SAL_SET_ERROR_HANDLING_FEATURES, + in1, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; +#if 0 +/* + * Somehow ACPI breaks if allowing this one + */ + case SN_SAL_SET_CPU_NUMBER: + status = -1; + if (current->domain == dom0) { + printk("*** Emulating SN_SAL_SET_CPU_NUMBER ***\n"); + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_SET_CPU_NUMBER, + in1, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; +#endif + case SN_SAL_LOG_CE: + status = -1; + if (current->domain == dom0) { + static int log_ce = 0; + if (!log_ce) { + printk("*** Emulating SN_SAL_LOG_CE *** " + " this will only be printed once\n"); + log_ce = 1; + } + SAL_CALL_NOLOCK(ret_stuff, SN_SAL_LOG_CE, + 0, 0, 0, 0, 0, 0, 0); + status = ret_stuff.status; + r9 = ret_stuff.v0; + r10 = ret_stuff.v1; + r11 = ret_stuff.v2; + } + break; + case SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST: + status = -1; + if (current->domain == dom0) { + struct sn_flush_device_common flush; + void *dest = NULL; + u64 offset; + + offset = in4 & (PAGE_SIZE - 1); + dest = __va(____lookup_domain_mpa(dom0, __pa(in4))) + + offset; + + SAL_CALL_NOLOCK(ret_stuff, + SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST, + in1, in2, in3, &flush, 0, 0, 0); + +#if 0 + printk("*** Emulating " + "SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST ***\n"); +#endif + printk("."); + memcpy(dest, &flush, sizeof(struct sn_flush_device_common)); + status = ret_stuff.status; r9 = ret_stuff.v0; r10 = ret_stuff.v1; _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |