First part of virtual addr support in relocator
This commit is contained in:
parent
ba2f141cb5
commit
368c17f85d
4 changed files with 110 additions and 75 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue