First part of virtual addr support in relocator

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-04-21 15:25:49 +02:00
parent ba2f141cb5
commit 368c17f85d
4 changed files with 110 additions and 75 deletions

View file

@ -84,6 +84,12 @@ grub_size_t grub_relocator_jumper_size = 12;
grub_size_t grub_relocator_jumper_size = 7;
#endif
static inline void *
ptov (grub_addr_t a)
{
return (void *) a;
}
void
grub_cpu_relocator_init (void)
{
@ -148,10 +154,10 @@ grub_err_t
grub_relocator32_boot (struct grub_relocator *rel,
struct grub_relocator32_state state)
{
grub_addr_t target;
grub_phys_addr_t target;
void *src;
grub_err_t err;
grub_addr_t relst;
void *relst;
err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0,
(0xffffffff - RELOCATOR_SIZEOF (32))
@ -170,7 +176,7 @@ grub_relocator32_boot (struct grub_relocator *rel,
grub_memmove (src, &grub_relocator32_start, RELOCATOR_SIZEOF (32));
err = grub_relocator_prepare_relocs (rel, target, &relst, NULL);
err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL);
if (err)
return err;
@ -185,10 +191,10 @@ grub_err_t
grub_relocator16_boot (struct grub_relocator *rel,
struct grub_relocator16_state state)
{
grub_addr_t target;
grub_phys_addr_t target;
void *src;
grub_err_t err;
grub_addr_t relst;
void *relst;
err = grub_relocator_alloc_chunk_align (rel, &src, &target, 0,
0xa0000 - RELOCATOR_SIZEOF (16),
@ -212,7 +218,7 @@ grub_relocator16_boot (struct grub_relocator *rel,
grub_memmove (src, &grub_relocator16_start, RELOCATOR_SIZEOF (16));
err = grub_relocator_prepare_relocs (rel, target, &relst, NULL);
err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL);
if (err)
return err;
@ -228,10 +234,10 @@ grub_relocator64_boot (struct grub_relocator *rel,
struct grub_relocator64_state state,
grub_addr_t min_addr, grub_addr_t max_addr)
{
grub_addr_t target;
grub_phys_addr_t target;
void *src;
grub_err_t err;
grub_addr_t relst;
void *relst;
err = grub_relocator_alloc_chunk_align (rel, &src, &target, min_addr,
max_addr - RELOCATOR_SIZEOF (64),
@ -251,7 +257,7 @@ grub_relocator64_boot (struct grub_relocator *rel,
grub_memmove (src, &grub_relocator64_start, RELOCATOR_SIZEOF (64));
err = grub_relocator_prepare_relocs (rel, target, &relst, NULL);
err = grub_relocator_prepare_relocs (rel, ptov (target), &relst, NULL);
if (err)
return err;