diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index eee6b9e..5ffa652 100644 Binary files a/OVMFbin/OVMF_VARS-pure-efi.fd and b/OVMFbin/OVMF_VARS-pure-efi.fd differ 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 9db85be..9b7a4ca 100644 Binary files a/kernel/bin/CustomOS.img and b/kernel/bin/CustomOS.img differ diff --git a/kernel/bin/kernel.elf b/kernel/bin/kernel.elf index 1544f9d..87fe387 100755 Binary files a/kernel/bin/kernel.elf and b/kernel/bin/kernel.elf differ diff --git a/kernel/lib/acpi.o b/kernel/lib/acpi.o new file mode 100644 index 0000000..6b29c68 Binary files /dev/null and b/kernel/lib/acpi.o differ diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index d0b11eb..b8a476d 100644 Binary files a/kernel/lib/kernel.o and b/kernel/lib/kernel.o differ diff --git a/kernel/lib/kernelUtil.o b/kernel/lib/kernelUtil.o index 44bf972..53dae31 100644 Binary files a/kernel/lib/kernelUtil.o and b/kernel/lib/kernelUtil.o differ diff --git a/kernel/lib/pci.o b/kernel/lib/pci.o new file mode 100644 index 0000000..527c4ae Binary files /dev/null and b/kernel/lib/pci.o differ diff --git a/kernel/src/acpi.cpp b/kernel/src/acpi.cpp new file mode 100644 index 0000000..d05697b --- /dev/null +++ b/kernel/src/acpi.cpp @@ -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; + } +}; \ 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