]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-01-20 Robert Millan <rmh@aybabtu.com>
authorrobertmh <robertmh@localhost>
Sun, 20 Jan 2008 14:08:54 +0000 (14:08 +0000)
committerrobertmh <robertmh@localhost>
Sun, 20 Jan 2008 14:08:54 +0000 (14:08 +0000)
        Fix detection of "real mode" when /options/real-mode? doesn't exist.

        * include/grub/ieee1275/ieee1275.h (grub_ieee1275_mmu): New variable
        declaration.
        * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_mmu): New variable.
        (grub_ieee1275_find_options): If `grub_ieee1275_mmu' is 0, set
        `GRUB_IEEE1275_FLAG_REAL_MODE'.
        (cmain): Intialize `grub_ieee1275_mmu' (using /chosen/mmu integer
        property).
        * kern/powerpc/ieee1275/openfw.c (grub_map): Rely on pre-initialized
        `grub_ieee1275_mmu' rather than obtaining a handler on every call.

ChangeLog
include/grub/ieee1275/ieee1275.h
kern/powerpc/ieee1275/cmain.c
kern/powerpc/ieee1275/openfw.c

index 4c9bc34bc37a6de9eaadd2bc5613bba0b9d136e1..a4b7d285455dae1a2ddaaa59bf9ba43f16ef7c05 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2008-01-20  Robert Millan  <rmh@aybabtu.com>
+
+       Fix detection of "real mode" when /options/real-mode? doesn't exist.
+
+       * include/grub/ieee1275/ieee1275.h (grub_ieee1275_mmu): New variable
+       declaration.
+       * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_mmu): New variable.
+       (grub_ieee1275_find_options): If `grub_ieee1275_mmu' is 0, set
+       `GRUB_IEEE1275_FLAG_REAL_MODE'.
+       (cmain): Intialize `grub_ieee1275_mmu' (using /chosen/mmu integer
+       property).
+       * kern/powerpc/ieee1275/openfw.c (grub_map): Rely on pre-initialized
+       `grub_ieee1275_mmu' rather than obtaining a handler on every call.
+
 2008-01-19  Robert Millan  <rmh@aybabtu.com>
 
        Get rid of confusing function (superceeded by
index 94e8151f8020ba7cd2d37284a2638291fc86e495..4ca81a160b75dd15bfef59268a8ee57c5232ebcb 100644 (file)
@@ -64,6 +64,7 @@ typedef grub_ieee1275_cell_t grub_ieee1275_ihandle_t;
 typedef grub_ieee1275_cell_t grub_ieee1275_phandle_t;
 
 extern grub_ieee1275_phandle_t EXPORT_VAR(grub_ieee1275_chosen);
+extern grub_ieee1275_ihandle_t EXPORT_VAR(grub_ieee1275_mmu);
 extern int (* EXPORT_VAR(grub_ieee1275_entry_fn)) (void *);
 
 enum grub_ieee1275_flag
index 115a16f5f2dca0683e7ff2508b86234880d415d9..91e22b374693a56ab120d6e76f05badcd097bf2a 100644 (file)
@@ -28,6 +28,7 @@
 int (*grub_ieee1275_entry_fn) (void *);
 
 grub_ieee1275_phandle_t grub_ieee1275_chosen;
+grub_ieee1275_ihandle_t grub_ieee1275_mmu;
 
 static grub_uint32_t grub_ieee1275_flags;
 \f
@@ -58,7 +59,7 @@ grub_ieee1275_find_options (void)
   grub_ieee1275_finddevice ("/options", &options);
   rc = grub_ieee1275_get_integer_property (options, "real-mode?", &realmode,
                                           sizeof realmode, 0);
-  if ((rc >= 0) && realmode)
+  if (((rc >= 0) && realmode) || (grub_ieee1275_mmu == 0))
     grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_REAL_MODE);
 
   grub_ieee1275_finddevice ("/openprom", &openprom);
@@ -108,6 +109,10 @@ cmain (void)
 {
   grub_ieee1275_finddevice ("/chosen", &grub_ieee1275_chosen);
 
+  if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, "mmu", &grub_ieee1275_mmu,
+                                         sizeof grub_ieee1275_mmu, 0) < 0)
+    grub_ieee1275_mmu = 0;
+
   grub_ieee1275_find_options ();
 
   /* Now invoke the main function.  */
index c9e80135583ff8aafb62d8aea8ace95d32788952..146c2d800d5170adbb1c8945a8a8d0791b4acaab 100644 (file)
@@ -200,17 +200,10 @@ grub_map (grub_addr_t phys, grub_addr_t virt, grub_uint32_t size,
     grub_uint32_t phys;
     int catch_result;
   } args;
-  grub_ieee1275_ihandle_t mmu;
-  int len;
-
-  grub_ieee1275_get_integer_property (grub_ieee1275_chosen, "mmu", &mmu, sizeof mmu,
-                                     &len);
-  if (len != sizeof mmu)
-    return -1;
 
   INIT_IEEE1275_COMMON (&args.common, "call-method", 6, 1);
   args.method = "map";
-  args.ihandle = mmu;
+  args.ihandle = grub_ieee1275_mmu;
   args.phys = phys;
   args.virt = virt;
   args.size = size;