get MCFG table

This commit is contained in:
2026-01-29 17:05:58 +11:00
parent fa9d74fb1c
commit 6c8c97a67a
14 changed files with 39 additions and 12 deletions

Binary file not shown.

View File

@@ -61,4 +61,4 @@ buildimg:
mcopy -i $(BUILDDIR)/$(OSNAME).img $(BUILDDIR)/zap-light18.psf ::
run:
qemu-system-x86_64 -drive file=$(BUILDDIR)/$(OSNAME).img -m 256M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none
qemu-system-x86_64 -machine q35 -drive file=$(BUILDDIR)/$(OSNAME).img -m 256M -cpu qemu64 -drive if=pflash,format=raw,unit=0,file="$(OVMFDIR)/OVMF_CODE-pure-efi.fd",readonly=on -drive if=pflash,format=raw,unit=1,file="$(OVMFDIR)/OVMF_VARS-pure-efi.fd" -net none

Binary file not shown.

Binary file not shown.

BIN
kernel/lib/acpi.o Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
kernel/lib/pci.o Normal file

Binary file not shown.

20
kernel/src/acpi.cpp Normal file
View File

@@ -0,0 +1,20 @@
#include "acpi.h"
namespace ACPI {
void* FindTable(SDTHeader* sdtHeader, char* signature) {
int entries = (sdtHeader->Length - sizeof(ACPI::SDTHeader)) / 8;
for (int t = 0; t < entries; t++) {
ACPI::SDTHeader* newSDTHeader = (ACPI::SDTHeader*)*(uint64_t*)((uint64_t)sdtHeader + sizeof(ACPI::SDTHeader) + (t * 8));
for (int i = 0; i < 4; i++) {
if (newSDTHeader->Signature[i] != signature[i]) {
break;
}
if (i == 3) return newSDTHeader;
}
}
return 0;
}
};

View File

@@ -30,4 +30,6 @@ namespace ACPI {
SDTHeader Header;
uint64_t Reserved;
}__attribute__((packed));
void* FindTable(SDTHeader* sdtHeader, char* signature);
};

View File

@@ -4,9 +4,6 @@ extern "C" void _start(BootInfo* bootInfo) {
KernelInfo kernelInfo = InitializeKernel(bootInfo);
PageTableManager* pageTableManager = kernelInfo.pageTableManager;
GlobalRenderer->Print(to_hstring((uint64_t)bootInfo->rsdp));
GlobalRenderer->Next();
while (true) {
ProcessMousePacket();
}

View File

@@ -13,9 +13,8 @@ extern "C" void __stack_chk_fail(void) {
KernelInfo kernelInfo;
PageTableManager pageTableManager = NULL;
void PrepareMemory(BootInfo* bootInfo){
GlobalRenderer->Print(" - Locking kernel pages...");
GlobalRenderer->Print("Preparing memory...");
GlobalRenderer->Next();
uint64_t mMapEntries = bootInfo->mMapSize / bootInfo->mMapDescriptorSize;
GlobalAllocator = PageFrameAllocator();
@@ -26,7 +25,7 @@ void PrepareMemory(BootInfo* bootInfo){
GlobalAllocator.LockPages(&_KernelStart, kernelPages);
GlobalRenderer->Print(" - Setting up page table manager...");
/*GlobalRenderer->Print(" - Setting up page table manager...");
GlobalRenderer->Next();
PageTable* PML4 = (PageTable*)GlobalAllocator.RequestPage();
@@ -47,7 +46,7 @@ void PrepareMemory(BootInfo* bootInfo){
asm ("mov %0, %%cr3" : : "r" (PML4));
kernelInfo.pageTableManager = &pageTableManager;
kernelInfo.pageTableManager = &pageTableManager;*/
}
IDTR idtr;
@@ -62,6 +61,11 @@ void SetIDTGate(void* handler, uint8_t entryOffset, uint8_t type_attr, uint8_t s
void PrepareACPI(BootInfo* bootInfo) {
ACPI::SDTHeader* xsdt = (ACPI::SDTHeader*)(bootInfo->rsdp->XSDTAddress);
ACPI::MCFGHeader* mcfg = (ACPI::MCFGHeader*)ACPI::FindTable(xsdt, (char*)"MCFG");
GlobalRenderer->Print("All ACPI tables:");
GlobalRenderer->Next();
int entries = (xsdt->Length - sizeof(ACPI::SDTHeader)) / 8;
for (int t = 0; t < entries; t++) {
ACPI::SDTHeader* newSDTHeader = (ACPI::SDTHeader*)*(uint64_t*)((uint64_t)xsdt + sizeof(ACPI::SDTHeader) + (t * 8));
@@ -72,6 +76,11 @@ void PrepareACPI(BootInfo* bootInfo) {
}
GlobalRenderer->Next();
GlobalRenderer->Print("MCFG header location: 0x");
GlobalRenderer->Print(to_hstring((uint64_t)mcfg));
GlobalRenderer->Next();
GlobalRenderer->Next();
}
void PrepareInterrupts() {
@@ -109,9 +118,6 @@ KernelInfo InitializeKernel(BootInfo* bootInfo){
gdtDescriptor.Offset = (uint64_t)&DefaultGDT;
LoadGDT(&gdtDescriptor);
GlobalRenderer->Print("Preparing memory...");
GlobalRenderer->Next();
PrepareMemory(bootInfo);
GlobalRenderer->Print("Setting up interrupts...");

1
kernel/src/pci.cpp Normal file
View File

@@ -0,0 +1 @@
#include "pci.h"

1
kernel/src/pci.h Normal file
View File

@@ -0,0 +1 @@
#pragma once