6dd68f8162
- Bootloader: reallocate memory map buffer when ExitBootServices fails, so GetMemoryMap doesn't scribble past the old allocation on retry. - vectors.S: actually store sp_el0 into the exception frame. Previously it was read into x24 and then… vanished. EL0 tasks would wake up with a corrupted stack pointer. Not great. - Serial: split hardcoded 0x09000000 into a fallback default; add SerialUpdate() so the DTB-parsed UART address actually gets used. - DTB: add bounds check on reserved[] with PMM's 3 extra slots accounted for, so malformed/overstuffed DTBs don't silently corrupt memory. - PMM.h: bump kVMMaxReservedRegions 128→256, define kPMMReservedRegionCount. - Types.h: remove `#define loop while(1)`. while(true) is fine. - Rename IOSerial* → Serial* — the IO prefix was redundant, Serial.c already lives under IO/.
33 lines
606 B
C
33 lines
606 B
C
#pragma once
|
|
#include <Types.h>
|
|
|
|
enum {
|
|
kVMPageSize = 4096,
|
|
kVMBlocksPerByte = 8,
|
|
kVMMaxReservedRegions = 256,
|
|
kPMMReservedRegionCount = 3,
|
|
};
|
|
|
|
typedef struct {
|
|
UInt64 base;
|
|
Size size;
|
|
} VMMemoryRegion;
|
|
|
|
typedef struct {
|
|
VMMemoryRegion GICD;
|
|
VMMemoryRegion GICC;
|
|
} GICRegion;
|
|
|
|
|
|
typedef struct {
|
|
VMMemoryRegion totalRAM;
|
|
VMMemoryRegion reserved[kVMMaxReservedRegions];
|
|
UInt32 reservedCount;
|
|
VMMemoryRegion UART;
|
|
GICRegion GIC;
|
|
} VMBootMemoryMap;
|
|
|
|
void PMMInitialize(VMBootMemoryMap* bootMap);
|
|
Pointer PMMAllocatePage();
|
|
void PMMFreePage(Address address);
|