aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2013-02-19 01:15:36 -0500
committerKevin O'Connor <kevin@koconnor.net>2013-02-19 21:57:24 -0500
commit0b314abc5841d5d1b25486e604cd91a6b3063e2c (patch)
tree6384f481e8944eafc2f567fc35f4d456130e5ec8
parent6afc6f8fbbed5da90893da1865e003d911cc89eb (diff)
downloadseabios-0b314abc5841d5d1b25486e604cd91a6b3063e2c.tar.gz
Move malloc's ZoneFSeg and ZoneLow setup to malloc_init.
This reduces some duplicate code between malloc_preinit() and csm_malloc_preinit(). Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/pmm.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/pmm.c b/src/pmm.c
index 02fa328..4805168 100644
--- a/src/pmm.c
+++ b/src/pmm.c
@@ -254,12 +254,8 @@ malloc_preinit(void)
addSpace(&ZoneTmpHigh, (void*)s, (void*)e);
}
- // Populate other regions
+ // Populate regions
addSpace(&ZoneTmpLow, (void*)BUILD_STACK_ADDR, (void*)BUILD_EBDA_MINIMUM);
- addSpace(&ZoneFSeg, BiosTableSpace, &BiosTableSpace[CONFIG_MAX_BIOSTABLE]);
- extern u8 final_varlow_start[];
- addSpace(&ZoneLow, zonelow_base + OPROM_HEADER_RESERVE, final_varlow_start);
- RomBase = findLast(&ZoneLow);
if (highram) {
addSpace(&ZoneHigh, (void*)highram
, (void*)highram + CONFIG_MAX_HIGHTABLE);
@@ -280,10 +276,6 @@ csm_malloc_preinit(u32 low_pmm, u32 low_pmm_size, u32 hi_pmm, u32 hi_pmm_size)
addSpace(&ZoneTmpHigh, (void *)hi_pmm, (void *)hi_pmm + hi_pmm_size);
}
addSpace(&ZoneTmpLow, (void *)low_pmm, (void *)low_pmm + low_pmm_size);
- addSpace(&ZoneFSeg, BiosTableSpace, &BiosTableSpace[CONFIG_MAX_BIOSTABLE]);
- extern u8 final_varlow_start[];
- addSpace(&ZoneLow, zonelow_base + OPROM_HEADER_RESERVE, final_varlow_start);
- RomBase = findLast(&ZoneLow);
}
// Update pointers after code relocation.
@@ -303,11 +295,14 @@ malloc_init(void)
}
}
- // Move low-memory initial variable content to new location.
+ // Initialize low-memory region
extern u8 varlow_start[], varlow_end[], final_varlow_start[];
memmove(final_varlow_start, varlow_start, varlow_end - varlow_start);
+ addSpace(&ZoneLow, zonelow_base + OPROM_HEADER_RESERVE, final_varlow_start);
+ RomBase = findLast(&ZoneLow);
// Add space available in f-segment to ZoneFSeg
+ addSpace(&ZoneFSeg, BiosTableSpace, &BiosTableSpace[CONFIG_MAX_BIOSTABLE]);
extern u8 code32init_end[];
if ((u32)code32init_end > BUILD_BIOS_ADDR) {
memset((void*)BUILD_BIOS_ADDR, 0, (u32)code32init_end - BUILD_BIOS_ADDR);