]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Adjust mips relocator
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 22 Apr 2010 00:44:45 +0000 (02:44 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 22 Apr 2010 00:44:45 +0000 (02:44 +0200)
include/grub/mips/yeeloong/memory.h
lib/mips/relocator.c

index 922db2404f2840a8c73f67efacc35492138698c8..e7e99528382bc97b575ced0018c4dcad46264e2d 100644 (file)
@@ -31,7 +31,6 @@
 #define GRUB_ARCH_LOWMEMMAXSIZE 0x10000000
 #define GRUB_ARCH_HIGHMEMPSTART 0x10000000
 
-
 #define GRUB_MACHINE_MEMORY_AVAILABLE        1
 #define GRUB_MACHINE_MEMORY_MAX_TYPE         1
   /* This one is special: it's used internally but is never reported
 #define GRUB_MACHINE_MEMORY_RESERVED GRUB_MACHINE_MEMORY_HOLE
 
 #ifndef ASM_FILE
+
+typedef grub_addr_t grub_phys_addr_t;
+
+static inline grub_phys_addr_t
+grub_vtop (void *a)
+{
+  return ((grub_phys_addr_t) a) & 0x1fffffff;
+}
+
+static inline void *
+grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__ ((unused)))
+{
+  return (void *) (a | 0x80000000);
+}
+
+static inline void
+grub_unmap_memory (void *a __attribute__ ((unused)),
+                  grub_size_t size __attribute__ ((unused)))
+{
+}
+
 grub_err_t EXPORT_FUNC (grub_machine_mmap_iterate)
 (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t));
 
index 410b68b8ba103aeb73a355151e249a9af7ea77f3..537b0af2ca3b548b87a56aa9f2f9e230a836831a 100644 (file)
@@ -111,15 +111,16 @@ grub_err_t
 grub_relocator32_boot (struct grub_relocator *rel,
                       struct grub_relocator32_state state)
 {
-  grub_addr_t target;
-  void *src, *ptr;
+  grub_relocator_chunk_t ch;
+  void *ptr;
   grub_err_t err;
-  grub_addr_t relst;
+  void *relst;
   grub_size_t relsize;
   grub_size_t stateset_size = 31 * REGW_SIZEOF + JUMP_SIZEOF;
   unsigned i;
+  grub_addr_t vtarget;
 
-  err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0,
+  err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
                                          (0xffffffff - stateset_size)
                                          + 1, stateset_size,
                                          sizeof (grub_uint32_t),
@@ -127,12 +128,15 @@ grub_relocator32_boot (struct grub_relocator *rel,
   if (err)
     return err;
 
-  ptr = src;
+  ptr = get_virtual_current_address (ch);
   for (i = 1; i < 32; i++)
     write_reg (i, state.gpr[i], &ptr);
   write_jump (state.jumpreg, &ptr);
 
-  err = grub_relocator_prepare_relocs (rel, target, &relst, &relsize);
+  vtarget = (grub_addr_t) grub_map_memory (get_physical_target_address (ch),
+                                          stateset_size);
+
+  err = grub_relocator_prepare_relocs (rel, vtarget, &relst, &relsize);
   if (err)
     return err;