# HG changeset patch
# User Hollis Blanchard <[EMAIL PROTECTED]>
# Node ID a6adf094e08e95e3bacaca62284062b7c7d3591a
# Parent  ab3b5849331da89e578ae0813021376d66b7f333
[POWERPC][XEN][LINUX] Create a start_info_t structure from devtree if 
start_info_t is not passed in.
Signed-off-by: Ryan Harper <[EMAIL PROTECTED]>
Signed-off-by: Hollis Blanchard <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/xen/setup.c |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletion(-)

diff -r ab3b5849331d -r a6adf094e08e arch/powerpc/platforms/xen/setup.c
--- a/arch/powerpc/platforms/xen/setup.c        Sun Jan 21 08:36:53 2007 -0500
+++ b/arch/powerpc/platforms/xen/setup.c        Tue Feb 06 13:55:48 2007 -0600
@@ -32,6 +32,7 @@ EXPORT_SYMBOL(HYPERVISOR_shared_info);
 EXPORT_SYMBOL(HYPERVISOR_shared_info);
 
 /* Raw start-of-day parameters from the hypervisor. */
+start_info_t xsi;
 start_info_t *xen_start_info;
 
 extern struct machdep_calls mach_maple_md;
@@ -94,7 +95,32 @@ static void __init xen_init_early(void)
        xen = of_find_node_by_path("/xen");
 
        si = (u64 *)get_property(xen, "start-info", NULL);
-       xen_start_info = (start_info_t *)__va(*si);
+
+       /* build our own start_info_t if start-info property is not present */
+       if (si != NULL) {
+               xen_start_info = (start_info_t *)__va(*si);
+       } else {
+               struct device_node *console;
+               struct device_node *store;
+
+               console = of_find_node_by_path("/xen/console");
+               store = of_find_node_by_path("/xen/store");
+
+               xen_start_info = &xsi;
+
+               /* fill out start_info_t from devtree */
+               xen_start_info->shared_info = *((u64 *)get_property(xen, 
+                  "shared-info", NULL));
+               xen_start_info->store_mfn = (*((u64 *)get_property(store,
+                  "reg", NULL))) >> PAGE_SHIFT;
+               xen_start_info->store_evtchn = *((u32 *)get_property(store,
+                  "interrupts", NULL));
+               xen_start_info->console.domU.mfn = (*((u64 
*)get_property(console,
+                  "reg", NULL))) >> PAGE_SHIFT;
+               xen_start_info->console.domU.evtchn = *((u32 
*)get_property(console,
+                  "interrupts", NULL));
+       }
+
        HYPERVISOR_shared_info = __va(xen_start_info->shared_info);
 
        udbg_init_xen();

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

Reply via email to