WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [xenppc-unstable] [IA64] Add sal emulation to VTI domain

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [xenppc-unstable] [IA64] Add sal emulation to VTI domain
From: Xen patchbot-xenppc-unstable <patchbot-xenppc-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 02 Jun 2006 17:56:36 +0000
Delivery-date: Fri, 02 Jun 2006 10:58:27 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID a9d58ef8e4e7ee24fcb2e0c9527390bab14c647c
# Parent  380f87e8003fc9ce6235c7fcd9972ecb749f0a86
[IA64] Add sal emulation to VTI domain

Signed-off-by Anthony.xu <anthony.xu@xxxxxxxxx>
---
 xen/arch/ia64/vmx/pal_emul.c    |   20 +++++++-
 xen/arch/ia64/vmx/vmx_process.c |   92 +++-------------------------------------
 xen/include/asm-ia64/vmx_pal.h  |    1 
 3 files changed, 28 insertions(+), 85 deletions(-)

diff -r 380f87e8003f -r a9d58ef8e4e7 xen/arch/ia64/vmx/pal_emul.c
--- a/xen/arch/ia64/vmx/pal_emul.c      Wed May 31 11:27:59 2006 -0600
+++ b/xen/arch/ia64/vmx/pal_emul.c      Wed May 31 11:28:03 2006 -0600
@@ -21,6 +21,7 @@
 #include <asm/vmx_vcpu.h>
 #include <asm/pal.h>
 #include <asm/sal.h>
+#include <asm/dom_fw.h>
 #include <asm/tlb.h>
 #include <asm/vmx_mm_def.h>
 
@@ -42,7 +43,14 @@ set_pal_result (VCPU *vcpu,struct ia64_p
        vcpu_set_gr(vcpu,11, result.v2,0);
 }
 
-
+static void
+set_sal_result (VCPU *vcpu,struct sal_ret_values result) {
+
+       vcpu_set_gr(vcpu,8, result.r8,0);
+       vcpu_set_gr(vcpu,9, result.r9,0);
+       vcpu_set_gr(vcpu,10, result.r10,0);
+       vcpu_set_gr(vcpu,11, result.r11,0);
+}
 static struct ia64_pal_retval
 pal_cache_flush (VCPU *vcpu) {
        UINT64 gr28,gr29, gr30, gr31;
@@ -450,4 +458,12 @@ pal_emul( VCPU *vcpu) {
                set_pal_result (vcpu, result);
 }
 
-
+void
+sal_emul(VCPU *v) {
+       struct sal_ret_values result;
+       result = sal_emulator(vcpu_get_gr(v,32),vcpu_get_gr(v,33),
+                             vcpu_get_gr(v,34),vcpu_get_gr(v,35),
+                             vcpu_get_gr(v,36),vcpu_get_gr(v,37),
+                             vcpu_get_gr(v,38),vcpu_get_gr(v,39));
+       set_sal_result(v, result);      
+}
diff -r 380f87e8003f -r a9d58ef8e4e7 xen/arch/ia64/vmx/vmx_process.c
--- a/xen/arch/ia64/vmx/vmx_process.c   Wed May 31 11:27:59 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_process.c   Wed May 31 11:28:03 2006 -0600
@@ -64,6 +64,7 @@ extern void ivhpt_fault (VCPU *vcpu, u64
 extern void ivhpt_fault (VCPU *vcpu, u64 vadr);
 
 #define DOMN_PAL_REQUEST    0x110000
+#define DOMN_SAL_REQUEST    0x110001
 
 static UINT64 vec2off[68] = {0x0,0x400,0x800,0xc00,0x1000, 0x1400,0x1800,
     0x1c00,0x2000,0x2400,0x2800,0x2c00,0x3000,0x3400,0x3800,0x3c00,0x4000,
@@ -96,85 +97,6 @@ void vmx_reflect_interruption(UINT64 ifa
     inject_guest_interruption(vcpu, vector);
 }
 
-static void
-vmx_handle_hypercall (VCPU *v, REGS *regs)
-{
-    struct ia64_pal_retval y;
-    struct sal_ret_values x;
-    unsigned long i, sal_param[8];
-
-    switch (regs->r2) {
-        case FW_HYPERCALL_PAL_CALL:
-            //printf("*** PAL hypercall: index=%d\n",regs->r28);
-            //FIXME: This should call a C routine
-            y = pal_emulator_static(VCPU(v, vgr[12]));
-            regs->r8 = y.status; regs->r9 = y.v0;
-            regs->r10 = y.v1; regs->r11 = y.v2;
-#if 0
-            if (regs->r8)
-                printk("Failed vpal emulation, with index:0x%lx\n",
-                       VCPU(v, vgr[12]));
-#endif
-            break;
-        case FW_HYPERCALL_SAL_CALL:
-            for (i = 0; i < 8; i++)
-                vcpu_get_gr_nat(v, 32+i, &sal_param[i]);
-            x = sal_emulator(sal_param[0], sal_param[1],
-                             sal_param[2], sal_param[3],
-                             sal_param[4], sal_param[5],
-                             sal_param[6], sal_param[7]);
-            regs->r8 = x.r8; regs->r9 = x.r9;
-            regs->r10 = x.r10; regs->r11 = x.r11;
-#if 0
-            if (regs->r8)
-                printk("Failed vsal emulation, with index:0x%lx\n",
-                       sal_param[0]);
-#endif
-            break;
-        case FW_HYPERCALL_EFI_RESET_SYSTEM:
-            printf("efi.reset_system called ");
-            if (current->domain == dom0) {
-                printf("(by dom0)\n ");
-                (*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
-            }
-            printf("(not supported for non-0 domain)\n");
-            regs->r8 = EFI_UNSUPPORTED;
-            break;
-        case FW_HYPERCALL_EFI_GET_TIME:
-            {
-                unsigned long *tv, *tc;
-                vcpu_get_gr_nat(v, 32, (u64 *)&tv);
-                vcpu_get_gr_nat(v, 33, (u64 *)&tc);
-                printf("efi_get_time(%p,%p) called...",tv,tc);
-                tv = __va(translate_domain_mpaddr((unsigned long)tv));
-                if (tc) tc = __va(translate_domain_mpaddr((unsigned long)tc));
-                regs->r8 = (*efi.get_time)((efi_time_t *)tv,(efi_time_cap_t 
*)tc);
-                printf("and returns %lx\n",regs->r8);
-            }
-            break;
-        case FW_HYPERCALL_EFI_SET_TIME:
-        case FW_HYPERCALL_EFI_GET_WAKEUP_TIME:
-        case FW_HYPERCALL_EFI_SET_WAKEUP_TIME:
-            // FIXME: need fixes in efi.h from 2.6.9
-        case FW_HYPERCALL_EFI_SET_VIRTUAL_ADDRESS_MAP:
-            // FIXME: WARNING!! IF THIS EVER GETS IMPLEMENTED
-            // SOME OF THE OTHER EFI EMULATIONS WILL CHANGE AS
-            // POINTER ARGUMENTS WILL BE VIRTUAL!!
-        case FW_HYPERCALL_EFI_GET_VARIABLE:
-            // FIXME: need fixes in efi.h from 2.6.9
-        case FW_HYPERCALL_EFI_GET_NEXT_VARIABLE:
-        case FW_HYPERCALL_EFI_SET_VARIABLE:
-        case FW_HYPERCALL_EFI_GET_NEXT_HIGH_MONO_COUNT:
-            // FIXME: need fixes in efi.h from 2.6.9
-            regs->r8 = EFI_UNSUPPORTED;
-            break;
-    }
-#if 0
-    if (regs->r8)
-        printk("Failed vgfw emulation, with index:0x%lx\n",
-               regs->r2);
-#endif
-}
 
 IA64FAULT
 vmx_ia64_handle_break (unsigned long ifa, struct pt_regs *regs, unsigned long 
isr, unsigned long iim)
@@ -197,13 +119,17 @@ vmx_ia64_handle_break (unsigned long ifa
         if (!user_mode(regs)) {
             /* Allow hypercalls only when cpl = 0.  */
             if (iim == d->arch.breakimm) {
-                vmx_handle_hypercall (v ,regs);
-                vmx_vcpu_increment_iip(current);
+                ia64_hypercall(regs);
+                vmx_vcpu_increment_iip(v);
                 return IA64_NO_FAULT;
             }
             else if(iim == DOMN_PAL_REQUEST){
-                pal_emul(current);
-                vmx_vcpu_increment_iip(current);
+                pal_emul(v);
+                vmx_vcpu_increment_iip(v);
+                return IA64_NO_FAULT;
+            }else if(iim == DOMN_SAL_REQUEST){
+                sal_emul(v);
+                vmx_vcpu_increment_iip(v);
                 return IA64_NO_FAULT;
             }
         }
diff -r 380f87e8003f -r a9d58ef8e4e7 xen/include/asm-ia64/vmx_pal.h
--- a/xen/include/asm-ia64/vmx_pal.h    Wed May 31 11:27:59 2006 -0600
+++ b/xen/include/asm-ia64/vmx_pal.h    Wed May 31 11:28:03 2006 -0600
@@ -115,6 +115,7 @@ ia64_pal_vp_save (u64 *vpd, u64 pal_proc
        return iprv.status;
 }
 extern void pal_emul(struct vcpu *vcpu);
+extern void sal_emul(struct vcpu *vcpu);
 #define PAL_PROC_VM_BIT                (1UL << 40)
 #define PAL_PROC_VMSW_BIT      (1UL << 54)
 #endif /* _ASM_IA64_VT_PAL_H */

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [xenppc-unstable] [IA64] Add sal emulation to VTI domain, Xen patchbot-xenppc-unstable <=