From 6c8c97a67aeeb8fcc48e00cf9f63338464699763 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Thu, 29 Jan 2026 17:05:58 +1100 Subject: [PATCH] get MCFG table --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/Makefile | 2 +- kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 35208 -> 35376 bytes kernel/lib/acpi.o | Bin 0 -> 1400 bytes kernel/lib/kernel.o | Bin 1832 -> 1480 bytes kernel/lib/kernelUtil.o | Bin 8496 -> 8000 bytes kernel/lib/pci.o | Bin 0 -> 936 bytes kernel/src/acpi.cpp | 20 ++++++++++++++++++++ kernel/src/acpi.h | 2 ++ kernel/src/kernel.cpp | 3 --- kernel/src/kernelUtil.cpp | 22 ++++++++++++++-------- kernel/src/pci.cpp | 1 + kernel/src/pci.h | 1 + 14 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 kernel/lib/acpi.o create mode 100644 kernel/lib/pci.o create mode 100644 kernel/src/acpi.cpp create mode 100644 kernel/src/pci.cpp create mode 100644 kernel/src/pci.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index eee6b9efa8542381a4fd089eb48ea012b58fd09a..5ffa652f8c172001cc7f5fd487a2661d594038da 100644 GIT binary patch literal 131072 zcmeI*Yiu0V6~OVk-X%7{#2759P*hy;0Zn??t$&QnxDD#wB?n*YrWK%3U7g{m#uEh4Q5QE znSEGhRMhL-jRgv3nest zqdK8KJbnJ`p{OXCJ})KqEgg#S*w=jItT30$#hGi)36jaDLwUsJn!u%ko;iv0$TgAJ z!wHw7Dj5DgQGPxJ|B!L?_pT6On7eZR{g4=bH2Edi_(W zz4C+2HGxang%X;QYa-#vHQ_|$ns6KYNX)rro?WkhdX&9mb4}n%h7vAHI2DZ5ZYQ*uotJh>*Eh+GqHV;_k**UY!;^-nA99h++c zm$C~bG$q$W!jo&liO4nKHue$6TywfCUnS#-UoKzq<-fDWx200(zBhO1!q%%j&sH}?foY(pGHTb8xk=|hQTHsQ4p@gR7wMcmK zS~wATE!@UFQpjsV%^W+wWO}^ZUm)YUfv%K-Bt9k|p)DTe<{Ktd4jnQsT@vXbi zv#YS~UpTK@WAX|aOKpo|Qu}hKT2_RXnI=;&W0&kzJ>GVCN8@_4%50YVTjVD^T5o`E+Xw4f8ozj(O2Mt-7dA5wZGqaoLH+=5XPa+(?!u~z*Jt*Y#{FV%8#cc;UvHL})iR!G+Dxm=sW&U-x6L>6 zQ*uNuXN>NrOP;H`sdo38mRo0iby8b)&C71vuKgF)Cv4mO?KaIwDaj%(?rNg@G;F>3 z*QWgfQZfdcG)i`D6O|_EmrTbNz$Fc>fRNu~2X2f1Mr{tGUd2fpJ ztP^DYGQ2IDBtumym7ZB=RxN+);Qqs()jm>f?mBJZTP^vwvE=gT*REObPcjB?v%YiX zI8t+r_~vryRBE(MOnW(Fv?a#yB3xdBx;F*9hWybZ)P2mdF546pQ|rozsh0v?+vLa8 zsKKe>SXOYl7;0?36Z+Z{jm=mwTr4!k?+LJ&h!~Ia#kssT-Om*gK~pdX#YQ13N@eQI zqifgx<;s1{%WrA#II#bg6<-a#XM~_IgeP z$N2GNDF+hQSi5a1dBn7jr(#6yu`3h&`UEA`U=bQAt2Go4o@)%R5 zoKkeo=UX_>H{AC2-=gL#?Mp??H==u)1BvUgj+&2}Px4P#N5(>=jjP*?(=mbbeC2h{ zjAO^R=7{Nbo^Jy+A2lB}pVzFUZ>PU?P2bLv3l-uxj5rjNeGW*?N6i;k&9{-7kD8B~&pR$s^ZAKbcY&&TzAa#ZAczHo!G+62^m$=7_Fsrjh+sQIY* z3jcg(xayjG(96lS9ZtqdT3krpAQcVUa6ZQU*lOc9M+jK*qM!m8~XCTf4NXS5$>%jiCtuKzF)?OPU|?WiV&q}C;KwO zBL@Q`kXQeog~4wPN2B2UNZ(ezM^ZsLk((wPsAz0{qh`Z6If0X9vX7<~8zTb~12Y3i zeDVYhB~D|IF+dEm#*+hL7z4v(9!;Cc8X75+H|Qv^_yXmD>QyEmFteOI(ZQXQiHVs5 zWO>8nx6Az}GnoocRx(gvWSl&~!JLnopPS)75HK?`0^KutqpJF30V{K$q(PX)W`$J` bTsIr6x&R_hm~Z-!z_{oW-(-VT3tAWfjt4_U diff --git a/kernel/Makefile b/kernel/Makefile index 8300f94..890a384 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -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 diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index 9db85bea3051564a87ec51a030c8670dff2605ee..9b7a4caa1d6dd33bb7027ef9acced6f3f53a3139 100644 GIT binary patch delta 11144 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 literal 0 HcmV?d00001 diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index d0b11ebc70655fba5b22c5d7306b07dcd1482724..b8a476d70600aa02dcee32c916b40f29bb67b182 100644 GIT binary patch delta 244 zcmZ3%cY=F@22%&qL@g-=kLEWD9-Xx>Ji1+9cyu0r!2kpvovt5%{0~6-$HZwW6Ay&& zYJK6+8gv)Ijk7 delta 505 zcmX@Xy@GFo2Ga}XiCR)Y!5+TXtuCWy?$6crW_e_~shKrD#i$S2Uo;+I-c;#xL&Bcmjv=;Vux;`JIJ z#{mHo5QBX1=RX8kfCPa6cb)8 zY+wn_$zK^i1B2rwlR4)OkO@GrVzMT)Ipf^PiOlvuav_*}2qbq-R%EefJTN(t#eT8^ vE63y&EEY@&%#$Cn*l}twLbQIEtjTIVc>ya2(crKZz diff --git a/kernel/lib/kernelUtil.o b/kernel/lib/kernelUtil.o index 44bf972bca36806497dd9c611b0ef681bb67e6ef..53dae3193cfe7ae34b670a2d4c91e2feada85e87 100644 GIT binary patch literal 8000 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 Uu(|Y4V)ILK)GLa2Upln^0`G$&`2YX_ literal 8496 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 - 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; + } +}; \ No newline at end of file diff --git a/kernel/src/acpi.h b/kernel/src/acpi.h index 48ff176..7b7668e 100644 --- a/kernel/src/acpi.h +++ b/kernel/src/acpi.h @@ -30,4 +30,6 @@ namespace ACPI { SDTHeader Header; uint64_t Reserved; }__attribute__((packed)); + + void* FindTable(SDTHeader* sdtHeader, char* signature); }; \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index 101b97b..d95d1d6 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -3,9 +3,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(); diff --git a/kernel/src/kernelUtil.cpp b/kernel/src/kernelUtil.cpp index 72aea4c..1d172c3 100644 --- a/kernel/src/kernelUtil.cpp +++ b/kernel/src/kernelUtil.cpp @@ -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,13 +25,13 @@ 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(); memset(PML4, 0, 0x1000); - pageTableManager = PageTableManager(PML4); + pageTableManager = PageTableManager(PML4); for (uint64_t t = 0; t < GetMemorySize(bootInfo->mMap, mMapEntries, bootInfo->mMapDescriptorSize); t+= 0x1000){ pageTableManager.MapMemory((void*)t, (void*)t); @@ -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..."); diff --git a/kernel/src/pci.cpp b/kernel/src/pci.cpp new file mode 100644 index 0000000..ec1ff88 --- /dev/null +++ b/kernel/src/pci.cpp @@ -0,0 +1 @@ +#include "pci.h" \ No newline at end of file diff --git a/kernel/src/pci.h b/kernel/src/pci.h new file mode 100644 index 0000000..7b9637e --- /dev/null +++ b/kernel/src/pci.h @@ -0,0 +1 @@ +#pragma once \ No newline at end of file