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

@ -28,4 +28,28 @@
#define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080
#define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100
#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;
}
static inline void *
grub_map_memory (grub_phys_addr_t a, grub_size_t size __attribute__ ((unused)))
{
return (void *) a;
}
static inline void
grub_unmap_memory (void *a __attribute__ ((unused)),
grub_size_t size __attribute__ ((unused)))
{
}
#endif
#endif /* ! GRUB_MEMORY_CPU_HEADER */

View file

@ -31,8 +31,9 @@ extern grub_size_t grub_relocator_jumper_size;
void
grub_cpu_relocator_init (void);
grub_err_t
grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr,
grub_addr_t *relstart, grub_size_t *relsize);
grub_relocator_prepare_relocs (struct grub_relocator *rel,
void *addr,
void **relstart, grub_size_t *relsize);
void grub_cpu_relocator_forward (void *rels, void *src, void *tgt,
grub_size_t size);
void grub_cpu_relocator_backward (void *rels, void *src, void *tgt,
@ -72,7 +73,7 @@ struct grub_relocator_mmap_event
COLLISION_START = 10,
COLLISION_END = COLLISION_START | 1
} type;
grub_addr_t pos;
grub_phys_addr_t pos;
union
{
struct
@ -91,10 +92,12 @@ struct grub_relocator_mmap_event
/* Return 0 on failure, 1 on success. The failure here
can be very time-expensive, so please make sure fill events is accurate. */
#if GRUB_RELOCATOR_HAVE_FIRMWARE_REQUESTS
int grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size);
int grub_relocator_firmware_alloc_region (grub_phys_addr_t start,
grub_size_t size);
unsigned grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events);
unsigned grub_relocator_firmware_get_max_events (void);
void grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size);
void grub_relocator_firmware_free_region (grub_phys_addr_t start,
grub_size_t size);
#endif
#endif