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-changelog

[Xen-changelog] [xen-unstable] [IA64] merge pal emulator

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] merge pal emulator
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 26 Oct 2006 12:11:19 +0000
Delivery-date: Thu, 26 Oct 2006 05:18:01 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID fffb36174ddb70ddcda84d66b6389722dc37e1bd
# Parent  c13c3bd7f3b51caeb4219cc65fdd67b277ee06a8
[IA64] merge pal emulator

Merge VTi pal emulator with Xen pal emulator.
Xen/ia64 now has only one pal and one sal emulator.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>
---
 xen/arch/ia64/vmx/pal_emul.c |  515 ++-----------------------------------------
 xen/arch/ia64/xen/fw_emul.c  |   65 +++--
 2 files changed, 73 insertions(+), 507 deletions(-)

diff -r c13c3bd7f3b5 -r fffb36174ddb xen/arch/ia64/vmx/pal_emul.c
--- a/xen/arch/ia64/vmx/pal_emul.c      Wed Oct 18 22:06:23 2006 -0600
+++ b/xen/arch/ia64/vmx/pal_emul.c      Wed Oct 18 22:06:38 2006 -0600
@@ -17,509 +17,46 @@
  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  * Place - Suite 330, Boston, MA 02111-1307 USA.
  */
-
-#include <asm/vmx_vcpu.h>
+  
+#include <xen/lib.h>
+#include <asm/vcpu.h>
+#include <asm/dom_fw.h>
 #include <asm/pal.h>
 #include <asm/sal.h>
-#include <asm/dom_fw.h>
-#include <asm/tlb.h>
-#include <asm/vmx_mm_def.h>
-#include <xen/hypercall.h>
-#include <public/sched.h>
 
-/*
- * Handy macros to make sure that the PAL return values start out
- * as something meaningful.
- */
-#define INIT_PAL_STATUS_UNIMPLEMENTED(x)               \
-       {                                               \
-               x.status = PAL_STATUS_UNIMPLEMENTED;    \
-               x.v0 = 0;                               \
-               x.v1 = 0;                               \
-               x.v2 = 0;                               \
-       }
-
-#define INIT_PAL_STATUS_SUCCESS(x)                     \
-       {                                               \
-               x.status = PAL_STATUS_SUCCESS;          \
-               x.v0 = 0;                               \
-               x.v1 = 0;                               \
-               x.v2 = 0;                               \
-       }
-
-static void
-get_pal_parameters(VCPU *vcpu, u64 *gr29, u64 *gr30, u64 *gr31) {
-
-       vcpu_get_gr_nat(vcpu,29,gr29);
-       vcpu_get_gr_nat(vcpu,30,gr30); 
-       vcpu_get_gr_nat(vcpu,31,gr31);
-}
-
-static void
-set_pal_result(VCPU *vcpu,struct ia64_pal_retval result) {
-
-       vcpu_set_gr(vcpu,8, result.status,0);
-       vcpu_set_gr(vcpu,9, result.v0,0);
-       vcpu_set_gr(vcpu,10, result.v1,0);
-       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) {
-       u64 gr28,gr29, gr30, gr31;
+void
+pal_emul(struct vcpu *vcpu)
+{
+       u64 gr28, gr29, gr30, gr31;
        struct ia64_pal_retval result;
 
-       get_pal_parameters(vcpu, &gr29, &gr30, &gr31);
-       vcpu_get_gr_nat(vcpu, 28, &gr28);
+       vcpu_get_gr_nat(vcpu, 28, &gr28);  //bank1
 
-       /* Always call Host Pal in int=1 */
-       gr30 = gr30 & ~0x2UL;
+       /* FIXME: works only for static calling convention ?  */
+       vcpu_get_gr_nat(vcpu, 29, &gr29);
+       vcpu_get_gr_nat(vcpu, 30, &gr30); 
+       vcpu_get_gr_nat(vcpu, 31, &gr31);
 
-       /*
-        * Call Host PAL cache flush
-        * Clear psr.ic when call PAL_CACHE_FLUSH
-        */
-       result = ia64_pal_call_static(gr28 ,gr29, gr30, gr31, 1);
+       perfc_incrc(vmx_pal_emul);
+       result = xen_pal_emulator(gr28, gr29, gr30, gr31);
 
-       /* If host PAL call is interrupted, then loop to complete it */
-//     while (result.status == 1)
-//             ia64_pal_call_static(gr28 ,gr29, gr30, result.v1, 1LL);
-//
-       if (result.status != 0)
-               panic_domain(vcpu_regs(vcpu), "PAL_CACHE_FLUSH ERROR, "
-                            "status %ld", result.status);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_vm_tr_read(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_prefetch_visibility(VCPU *vcpu) {
-       /* Due to current MM virtualization algorithm,
-        * We do not allow guest to change mapping attribute.
-        * Thus we will not support PAL_PREFETCH_VISIBILITY
-        */
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_platform_addr(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_SUCCESS(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_halt(VCPU *vcpu) {
-       //bugbug: to be implement. 
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_halt_light(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-       
-       if (!is_unmasked_irq(vcpu))
-               do_sched_op_compat(SCHEDOP_block, 0);
-           
-       INIT_PAL_STATUS_SUCCESS(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_read(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_write(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_bus_get_features(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_summary(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_init(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_SUCCESS(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_cache_prot_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_mem_attrib(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_debug_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_fixed_addr(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_freq_base(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-       struct ia64_sal_retval isrv;
-
-       PAL_CALL(result,PAL_FREQ_BASE, 0, 0, 0);
-       /*
-        * PAL_FREQ_BASE may not be implemented in some platforms,
-        * call SAL instead.
-        */
-       if (result.v0 == 0) {
-               SAL_CALL(isrv, SAL_FREQ_BASE, 
-                        SAL_FREQ_BASE_PLATFORM, 0, 0, 0, 0, 0, 0);
-               result.status = isrv.status;
-               result.v0 = isrv.v0;
-               result.v1 = result.v2 = 0;
-       }
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_freq_ratios(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       PAL_CALL(result, PAL_FREQ_RATIOS, 0, 0, 0);
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_halt_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_logical_to_physica(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_perf_mon_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_proc_get_features(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_ptce_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_register_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_rse_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_test_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_vm_summary(VCPU *vcpu) {
-       pal_vm_info_1_u_t vminfo1;
-       pal_vm_info_2_u_t vminfo2;      
-       struct ia64_pal_retval result;
-       
-       PAL_CALL(result, PAL_VM_SUMMARY, 0, 0, 0);
-       if (!result.status) {
-               vminfo1.pvi1_val = result.v0;
-               vminfo1.pal_vm_info_1_s.max_itr_entry = NITRS -1;
-               vminfo1.pal_vm_info_1_s.max_dtr_entry = NDTRS -1;
-               result.v0 = vminfo1.pvi1_val;
-               vminfo2.pal_vm_info_2_s.impl_va_msb = GUEST_IMPL_VA_MSB;
-               vminfo2.pal_vm_info_2_s.rid_size =
-                                            current->domain->arch.rid_bits;
-               result.v1 = vminfo2.pvi2_val;
-       } 
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_vm_info(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
-}
-
-static struct ia64_pal_retval
-pal_vm_page_size(VCPU *vcpu) {
-       struct ia64_pal_retval result;
-
-       INIT_PAL_STATUS_UNIMPLEMENTED(result);
-
-       return result;
+       vcpu_set_gr(vcpu, 8, result.status, 0);
+       vcpu_set_gr(vcpu, 9, result.v0, 0);
+       vcpu_set_gr(vcpu, 10, result.v1, 0);
+       vcpu_set_gr(vcpu, 11, result.v2, 0);
 }
 
 void
-pal_emul(VCPU *vcpu) {
-       u64 gr28;
-       struct ia64_pal_retval result;
-
-       vcpu_get_gr_nat(vcpu,28,&gr28);  //bank1
-
-       perfc_incrc(vmx_pal_emul);
-       switch (gr28) {
-               case PAL_CACHE_FLUSH:
-                       result = pal_cache_flush(vcpu);
-                       break;
-
-               case PAL_PREFETCH_VISIBILITY:
-                       result = pal_prefetch_visibility(vcpu);
-                       break;
-
-               case PAL_VM_TR_READ:
-                       result = pal_vm_tr_read(vcpu);
-                       break;
-
-               case PAL_HALT:
-                       result = pal_halt(vcpu);
-                       break;
-
-               case PAL_HALT_LIGHT:
-                       result = pal_halt_light(vcpu);
-                       break;
-
-               case PAL_CACHE_READ:
-                       result = pal_cache_read(vcpu);
-                       break;
-
-               case PAL_CACHE_WRITE:
-                       result = pal_cache_write(vcpu);
-                       break;
-
-               case PAL_PLATFORM_ADDR:
-                       result = pal_platform_addr(vcpu);
-                       break;
-
-               case PAL_FREQ_RATIOS:
-                       result = pal_freq_ratios(vcpu);
-                       break;
-
-               case PAL_FREQ_BASE:
-                       result = pal_freq_base(vcpu);
-                       break;
-
-               case PAL_BUS_GET_FEATURES :
-                       result = pal_bus_get_features(vcpu);
-                       break;
-
-               case PAL_CACHE_SUMMARY :
-                       result = pal_cache_summary(vcpu);
-                       break;
-
-               case PAL_CACHE_INIT :
-                       result = pal_cache_init(vcpu);
-                       break;
-
-               case PAL_CACHE_INFO :
-                       result = pal_cache_info(vcpu);
-                       break;
-
-               case PAL_CACHE_PROT_INFO :
-                       result = pal_cache_prot_info(vcpu);
-                       break;
-
-               case PAL_MEM_ATTRIB :
-                       result = pal_mem_attrib(vcpu);
-                       break;
-
-               case PAL_DEBUG_INFO :
-                       result = pal_debug_info(vcpu);
-                       break;
-
-               case PAL_FIXED_ADDR :
-                       result = pal_fixed_addr(vcpu);
-                       break;
-
-               case PAL_HALT_INFO :
-                       result = pal_halt_info(vcpu);
-                       break;
-
-               case PAL_LOGICAL_TO_PHYSICAL :
-                       result = pal_logical_to_physica(vcpu);
-                       break;
-
-               case PAL_PERF_MON_INFO :
-                       result = pal_perf_mon_info(vcpu);
-                       break;
-
-               case  PAL_PROC_GET_FEATURES:
-                       result = pal_proc_get_features(vcpu);
-                       break;
-
-               case PAL_PTCE_INFO :
-                       result = pal_ptce_info(vcpu);
-                       break;
-
-               case PAL_REGISTER_INFO :
-                       result = pal_register_info(vcpu);
-                       break;
-
-               case PAL_RSE_INFO :
-                       result = pal_rse_info(vcpu);
-                       break;
-
-               case PAL_TEST_PROC :
-                       result = pal_test_info(vcpu);
-                       break;
-
-               case PAL_VM_SUMMARY :
-                       result = pal_vm_summary(vcpu);
-                       break;
-
-               case PAL_VM_INFO :
-                       result = pal_vm_info(vcpu);
-                       break;
-
-               case PAL_VM_PAGE_SIZE :
-                       result = pal_vm_page_size(vcpu);
-                       break;
-
-               default:
-                       panic_domain(vcpu_regs(vcpu),"pal_emul(): guest "
-                                    "call unsupported pal" );
-       }
-       set_pal_result(vcpu, result);
-}
-
-void
-sal_emul(VCPU *v) {
+sal_emul(struct 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);      
+
+       vcpu_set_gr(v, 8, result.r8, 0);
+       vcpu_set_gr(v, 9, result.r9, 0);
+       vcpu_set_gr(v, 10, result.r10, 0);
+       vcpu_set_gr(v, 11, result.r11, 0);
 }
diff -r c13c3bd7f3b5 -r fffb36174ddb xen/arch/ia64/xen/fw_emul.c
--- a/xen/arch/ia64/xen/fw_emul.c       Wed Oct 18 22:06:23 2006 -0600
+++ b/xen/arch/ia64/xen/fw_emul.c       Wed Oct 18 22:06:38 2006 -0600
@@ -26,9 +26,11 @@
 #include <public/sched.h>
 #include "hpsim_ssc.h"
 #include <asm/vcpu.h>
+#include <asm/vmx_vcpu.h>
 #include <asm/dom_fw.h>
 #include <asm/uaccess.h>
 #include <xen/console.h>
+#include <xen/hypercall.h>
 
 extern unsigned long running_on_sim;
 
@@ -173,6 +175,10 @@ xen_pal_emulator(unsigned long index, u6
                break;
            case PAL_FREQ_BASE:
                status = ia64_pal_freq_base(&r9);
+               if (status == PAL_STATUS_UNIMPLEMENTED) {
+                       status = ia64_sal_freq_base(0, &r9, &r10);
+                       r10 = 0;
+               }
                break;
            case PAL_PROC_GET_FEATURES:
                status = ia64_pal_proc_get_features(&r9,&r10,&r11);
@@ -215,7 +221,7 @@ xen_pal_emulator(unsigned long index, u6
                {
                        /* Use xen-specific values.
                           hash_tag_id is somewhat random! */
-                       const pal_vm_info_1_u_t v1 =
+                       static const pal_vm_info_1_u_t v1 =
                                {.pal_vm_info_1_s =
                                 { .vw = 1,
                                   .phys_add_size = 44,
@@ -232,11 +238,12 @@ xen_pal_emulator(unsigned long index, u6
                                   .num_tc_levels = 1
 #endif
                                 }};
-                       const pal_vm_info_2_u_t v2 =
-                               { .pal_vm_info_2_s =
-                                 { .impl_va_msb = 50,
-                                   .rid_size = current->domain->arch.rid_bits,
-                                   .reserved = 0 }};
+                       pal_vm_info_2_u_t v2;
+                       v2.pvi2_val = 0;
+                       v2.pal_vm_info_2_s.rid_size =
+                               current->domain->arch.rid_bits;
+                       v2.pal_vm_info_2_s.impl_va_msb =
+                               VMX_DOMAIN(current) ? GUEST_IMPL_VA_MSB : 50;
                        r9 = v1.pvi1_val;
                        r10 = v2.pvi2_val;
                        status = PAL_STATUS_SUCCESS;
@@ -294,9 +301,20 @@ xen_pal_emulator(unsigned long index, u6
                status = ia64_pal_register_info(in1, &r9, &r10);
                break;
            case PAL_CACHE_FLUSH:
-               /* FIXME */
-               printk("PAL_CACHE_FLUSH NOT IMPLEMENTED!\n");
-               BUG();
+               /* Always call Host Pal in int=0 */
+               in2 &= ~PAL_CACHE_FLUSH_CHK_INTRS;
+
+               /*
+                * Call Host PAL cache flush
+                * Clear psr.ic when call PAL_CACHE_FLUSH
+                */
+               r10 = in3;
+               status = ia64_pal_cache_flush(in1, in2, &r10, &r9);
+
+               if (status != 0)
+                       panic_domain(NULL, "PAL_CACHE_FLUSH ERROR, "
+                                    "status %lx", status);
+
                break;
            case PAL_PERF_MON_INFO:
                {
@@ -343,15 +361,26 @@ xen_pal_emulator(unsigned long index, u6
                }
                break;
            case PAL_HALT:
-                   if (current->domain == dom0) {
-                           printf ("Domain0 halts the machine\n");
-                           console_start_sync();
-                           (*efi.reset_system)(EFI_RESET_SHUTDOWN,0,0,NULL);
-                   }
-                   else
-                           domain_shutdown (current->domain,
-                                            SHUTDOWN_poweroff);
-                   break;
+               if (current->domain == dom0) {
+                       printf ("Domain0 halts the machine\n");
+                       console_start_sync();
+                       (*efi.reset_system)(EFI_RESET_SHUTDOWN,0,0,NULL);
+               }
+               else
+                       domain_shutdown(current->domain, SHUTDOWN_poweroff);
+               break;
+           case PAL_HALT_LIGHT:
+               if (VMX_DOMAIN(current)) {
+                       /* Called by VTI.  */
+                       if (!is_unmasked_irq(current))
+                               do_sched_op_compat(SCHEDOP_block, 0);
+                       status = PAL_STATUS_SUCCESS;
+               }
+               break;
+           case PAL_PLATFORM_ADDR:
+               if (VMX_DOMAIN(current))
+                       status = PAL_STATUS_SUCCESS;
+               break;
            default:
                printk("xen_pal_emulator: UNIMPLEMENTED PAL CALL %lu!!!!\n",
                                index);

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] merge pal emulator, Xen patchbot-unstable <=