# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1175854552 -32400 # Node ID b7c63ce297a325f808a331c9a67d2d9b769a67c6 # Parent dfb094327ba5ace51001ac8a675eefdb53fbd546 move pal_call_stub from xenasm.S to dom_fw_asm.S to be shared by xen and libxc. PATCHNAME: move_pal_call_stub Signed-off-by: Isaku Yamahata diff -r dfb094327ba5 -r b7c63ce297a3 xen/arch/ia64/xen/Makefile --- a/xen/arch/ia64/xen/Makefile Fri Apr 06 19:04:46 2007 +0900 +++ b/xen/arch/ia64/xen/Makefile Fri Apr 06 19:15:52 2007 +0900 @@ -6,6 +6,7 @@ obj-y += dom0_ops.o obj-y += dom0_ops.o obj-y += domain.o obj-y += dom_fw.o +obj-y += dom_fw_asm.o obj-y += fw_emul.o obj-y += hpsimserial.o obj-y += hypercall.o diff -r dfb094327ba5 -r b7c63ce297a3 xen/arch/ia64/xen/dom_fw_asm.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/arch/ia64/xen/dom_fw_asm.S Fri Apr 06 19:15:52 2007 +0900 @@ -0,0 +1,41 @@ +// moved from xenasm.S to be shared by xen and libxc +/* + * Assembly support routines for Xen/ia64 + * + * Copyright (C) 2004 Hewlett-Packard Co + * Dan Magenheimer + * + * Copyright (c) 2007 Isaku Yamahata + * VA Linux Systems Japan K.K. + */ + +// These instructions are copied in the domains. +// This is the virtual PAL, which simply does a hypercall. +// The size is 2 bundles (32 Bytes). It handles both static and stacked +// convention. +// If you modify this code, you have to modify dom_fw.h (for the size) and +// dom_fw_pal_hypercall_patch. + +// This file is shared with xen and libxc. +// GLOBAL_ENTRY() end END() macro can't be used. + +//GLOBAL_ENTRY(xen_ia64_pal_call_stub) +.global xen_ia64_pal_call_stub; +.align 32; +.proc xen_ia64_pal_call_stub; +xen_ia64_pal_call_stub: + { + .mii + addl r2=0x1000,r0 // Hypercall number (Value is patched). + mov r9=256 + ;; + cmp.gtu p7,p8=r9,r28 /* r32 <= 255? */ + } + { + .mbb + break 0x1000 // Hypercall vector (Value is patched). +(p7) br.cond.sptk.few rp +(p8) br.ret.sptk.few rp + } +//END(xen_ia64_pal_call_stub) +.endp xen_ia64_pal_call_stub diff -r dfb094327ba5 -r b7c63ce297a3 xen/arch/ia64/xen/dom_fw_common.c --- a/xen/arch/ia64/xen/dom_fw_common.c Fri Apr 06 19:04:46 2007 +0900 +++ b/xen/arch/ia64/xen/dom_fw_common.c Fri Apr 06 19:15:52 2007 +0900 @@ -110,17 +110,19 @@ static void static void build_pal_hypercall_bundles(uint64_t *imva, uint64_t brkimm, uint64_t hypnum) { - extern unsigned long pal_call_stub[]; + extern unsigned long xen_ia64_pal_call_stub[]; IA64_BUNDLE bundle; INST64_A5 slot_a5; INST64_M37 slot_m37; - /* The source of the hypercall stub is the pal_call_stub function - defined in xenasm.S. */ + /* + * The source of the hypercall stub is + * the xen_ia64_pal_call_stub function defined in dom_fw_asm.S. + */ /* Copy the first bundle and patch the hypercall number. */ - bundle.i64[0] = pal_call_stub[0]; - bundle.i64[1] = pal_call_stub[1]; + bundle.i64[0] = xen_ia64_pal_call_stub[0]; + bundle.i64[1] = xen_ia64_pal_call_stub[1]; slot_a5.inst = bundle.slot0; slot_a5.imm7b = hypnum; slot_a5.imm9d = hypnum >> 7; @@ -132,8 +134,8 @@ build_pal_hypercall_bundles(uint64_t *im ia64_fc(imva + 1); /* Copy the second bundle and patch the hypercall vector. */ - bundle.i64[0] = pal_call_stub[2]; - bundle.i64[1] = pal_call_stub[3]; + bundle.i64[0] = xen_ia64_pal_call_stub[2]; + bundle.i64[1] = xen_ia64_pal_call_stub[3]; slot_m37.inst = bundle.slot0; slot_m37.imm20a = brkimm; slot_m37.i = brkimm >> 20; diff -r dfb094327ba5 -r b7c63ce297a3 xen/arch/ia64/xen/xenasm.S --- a/xen/arch/ia64/xen/xenasm.S Fri Apr 06 19:04:46 2007 +0900 +++ b/xen/arch/ia64/xen/xenasm.S Fri Apr 06 19:15:52 2007 +0900 @@ -356,26 +356,3 @@ stacked: br.ret.sptk.few rp END(pal_emulator_static) -// These instructions are copied in the domains. -// This is the virtual PAL, which simply does a hypercall. -// The size is 2 bundles (32 Bytes). It handles both static and stacked -// convention. -// If you modify this code, you have to modify dom_fw.h (for the size) and -// dom_fw_pal_hypercall_patch. -GLOBAL_ENTRY(pal_call_stub) - { - .mii - addl r2=0x1000,r0 // Hypercall number (Value is patched). - mov r9=256 - ;; - cmp.gtu p7,p8=r9,r28 /* r32 <= 255? */ - } - { - .mbb - break 0x1000 // Hypercall vector (Value is patched). -(p7) br.cond.sptk.few rp -(p8) br.ret.sptk.few rp - } -END(pal_call_stub) - - diff -r dfb094327ba5 -r b7c63ce297a3 xen/include/asm-ia64/dom_fw.h --- a/xen/include/asm-ia64/dom_fw.h Fri Apr 06 19:04:46 2007 +0900 +++ b/xen/include/asm-ia64/dom_fw.h Fri Apr 06 19:15:52 2007 +0900 @@ -59,7 +59,8 @@ * rp=b0 indicates the return point. * * A single hypercall is used for all PAL calls. - * The hypercall stub is pal_call_stub (xenasm.S). Its size is 2 bundles. + * The hypercall stub is xen_ia64_pal_call_stub (dom_fw_asm.S). + * Its size is 2 bundles. */ #define FW_HYPERCALL_PAL_CALL_INDEX 0x80UL