diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-06-19 19:08:17 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-06-19 19:08:17 +0200 |
| commit | dd643d1266229e5b7e81ae9ace988921e9c2c3b0 (patch) | |
| tree | 9e1ff454a1334e3c33b97bf8853bb6c687816513 | |
| parent | 19d0857d84cbc0267a8b222368e143bdcdaaf9a7 (diff) | |
unstable: AMD64 fixes, finish AMD64 HAL after release of phone.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | Boot/BootKit/BootKit.hxx | 2 | ||||
| -rw-r--r-- | Boot/amd64-efi.make | 6 | ||||
| -rw-r--r-- | Kernel/FSKit/NewFS.hxx | 11 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 7 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalInterruptAPI.asm | 15 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalKernelMain.cxx | 23 | ||||
| -rw-r--r-- | Kernel/Sources/FS/NewFS.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/KeMain.cxx | 40 | ||||
| -rw-r--r-- | Kernel/Sources/Pmm.cxx | 4 |
9 files changed, 48 insertions, 62 deletions
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx index 93b9986e..77943a10 100644 --- a/Boot/BootKit/BootKit.hxx +++ b/Boot/BootKit/BootKit.hxx @@ -330,7 +330,7 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName, /// @note A catalog roughly equal to a sector. - constexpr auto cMinimumDiskSize = 10; // at minimum. + constexpr auto cMinimumDiskSize = 2; // at minimum. /// @note also look at EPM headers, for free part blocks. diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make index 37ac3704..7439ebf3 100644 --- a/Boot/amd64-efi.make +++ b/Boot/amd64-efi.make @@ -28,7 +28,7 @@ BIOS=OVMF.fd IMG=epm.img IMG_2=epm-slave.img -EMU_FLAGS=-net none -smp 4 -m 4G -M q35 -d int \ +EMU_FLAGS=-net none -m 4G -M q35 -d int \ -bios $(BIOS) -device piix3-ide,id=ide \ -drive id=disk,file=$(IMG),format=raw,if=none \ -device ide-hd,drive=disk,bus=ide.0 -drive \ @@ -86,8 +86,8 @@ run-efi-amd64: # img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta. .PHONY: epm-img epm-img: - qemu-img create -f raw $(IMG) 10G - qemu-img create -f raw $(IMG_2) 512M + qemu-img create -f raw $(IMG) 4G + qemu-img create -f raw $(IMG_2) 4G .PHONY: download-edk download-edk: diff --git a/Kernel/FSKit/NewFS.hxx b/Kernel/FSKit/NewFS.hxx index c400ff30..47e42c88 100644 --- a/Kernel/FSKit/NewFS.hxx +++ b/Kernel/FSKit/NewFS.hxx @@ -39,12 +39,12 @@ default. /// @brief Partition GUID on EPM and GPT disks. #define kNewFSUUID "@{DD997393-9CCE-4288-A8D5-C0FDE3908DBE}" -#define kNewFSVersionInteger (0x125) -#define kNewFSVerionString "1.25" +#define kNewFSVersionInteger (0x126) +#define kNewFSVerionString "1.26" /// @brief Standard fork types. -#define kNewFSDataFork "data" -#define kNewFSResourceFork "rsrc" +#define kNewFSDataFork "main_data" +#define kNewFSResourceFork "main_rsrc" #define kNewFSCatalogKindFile (1) #define kNewFSCatalogKindDir (2) @@ -71,7 +71,7 @@ default. #define kNewFSSeparator '\\' #define kNewFSUpDir ".." -#define kNewFSRoot "\\" +#define kNewFSRoot "C:\\" #define kNewFSLF '\r' #define kNewFSEOF (-1) @@ -106,6 +106,7 @@ enum kNewFSOpticalDrive = 0x0C, // Blu-Ray/DVD kNewFSMassStorageDevice = 0xCC, // USB kNewFSScsi = 0xC4, // SCSI Hard Drive + kNewFSFlashDrive = 0xC6, kNewFSUnknown = 0xFF, // Unknown device. (floppy) kNewFSDriveCount = 5, }; diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp index 4e9d2ff6..c8eb094c 100644 --- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp +++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp @@ -163,7 +163,8 @@ namespace NewOS::HAL EXTERN_C Void hal_apic_acknowledge_cont(Void) { - _hal_spin_core(); + kcout << "newoskrnl: stopping core...\r"; + ke_stop(RUNTIME_CHECK_BOOTSTRAP); } EXTERN_C StackFramePtr _hal_leak_current_context(Void) @@ -211,12 +212,12 @@ namespace NewOS::HAL for (SizeT coreAt = cStartAt; coreAt < cMaxProbableCores; ++coreAt) { - if (madt->MadtRecords[coreAt].Flags != kThreadBoot) // if local apic. + if (madt->MadtRecords[coreAt].Flags < kThreadBoot) // if local apic. { MadtType::MadtAddress& madtRecord = madt->MadtRecords[coreAt]; // then register as a core for scheduler. - kcout << "newoskrnl: Register Local APIC.\r"; + kcout << "newoskrnl: Register APIC.\r"; kApicMadtAddresses[kApicMadtAddressesCount].fAddress = madtRecord.Address; kApicMadtAddresses[kApicMadtAddressesCount].fKind = madt->MadtRecords[coreAt].Flags; diff --git a/Kernel/HALKit/AMD64/HalInterruptAPI.asm b/Kernel/HALKit/AMD64/HalInterruptAPI.asm index 4832ecf3..9c5b0d6a 100644 --- a/Kernel/HALKit/AMD64/HalInterruptAPI.asm +++ b/Kernel/HALKit/AMD64/HalInterruptAPI.asm @@ -32,7 +32,6 @@ __NEW_INT_%1: ; This file handles the core interrupt table ; Last edited 31/01/24 -global _ke_power_on_self_test global ke_handle_irq global kInterruptVectorTable @@ -250,20 +249,6 @@ IntNormal 60 %assign i i+1 %endrep -;; this one is doing a POST for us. -;; testing interrupts. -_ke_power_on_self_test: - mov rcx, 0x10 - mov rdx, _ke_string_post - - int 0x32 - - ret - -section .data -_ke_string_post: - db "POST has been successful.", 0 - section .text [global hal_load_gdt] diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 8efe94b7..855b769e 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -62,7 +62,7 @@ EXTERN_C void hal_init_platform( NewOS::HEL::HandoverInformationHeader* HandoverHeader) { /* Setup globals. */ - + kHandoverHeader = HandoverHeader; if (kHandoverHeader->f_Magic != kHandoverMagic && @@ -95,9 +95,9 @@ EXTERN_C void hal_init_platform( idt.Load(idtBase); /** - register basic syscalls. + register basic syscalls. */ - + constexpr auto cSerialWriteInterrupt = 0x10; // 16 constexpr auto cTlsInterrupt = 0x11; // 17 constexpr auto cTlsInstallInterrupt = 0x12; // 18 @@ -111,7 +111,7 @@ EXTERN_C void hal_init_platform( constexpr auto cCatalogClose = 0x20; constexpr auto cCatalogRemove = 0x21; constexpr auto cCatalogCreate = 0x22; - + kSyscalls[cSerialWriteInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx) -> void { const char* msg = (const char*)rdx; NewOS::kcout << "newoskrnl: " << msg << "\r"; @@ -124,7 +124,7 @@ EXTERN_C void hal_init_platform( kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { /// get HAC struct. HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); - + /// assign the fThe field with the pointer. rdxInf->fThe = NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().New(rdxInf->fTheSz); }; @@ -132,18 +132,18 @@ EXTERN_C void hal_init_platform( kSyscalls[cDeleteInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { /// get HAC struct. HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); - + /// delete ptr with sz in mind. NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Delete(rdxInf->fThe, rdxInf->fTheSz); }; - + kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { ProcessBlockInfo* rdxPb = reinterpret_cast<ProcessBlockInfo*>(rdx); /// install the process's fTIB and fPIB. rt_install_tib(rdxPb->fTIB, rdxPb->fPIB); }; - + kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx); @@ -164,12 +164,9 @@ EXTERN_C void hal_init_platform( kSyscalls[cExitInterrupt].Leak().Leak()->fHooked = true; kSyscalls[cLastExitInterrupt].Leak().Leak()->fHooked = true; - NewOS::HAL::Detail::_ke_power_on_self_test(); + KeMain(); - /** - call kernel entrypoint. - */ - KeMain(); + NewOS::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr); NewOS::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx index 3d9cd2e7..255511e3 100644 --- a/Kernel/Sources/FS/NewFS.cxx +++ b/Kernel/Sources/FS/NewFS.cxx @@ -660,6 +660,8 @@ _Output NewCatalog* NewFSParser::FindCatalog(_Input const char* catalogName, } } + kcout << "newoskrnl: fetching catalog...\r"; + _NewFSSearchThroughCatalogList: while (drive->fPacket.fPacketGood) { diff --git a/Kernel/Sources/KeMain.cxx b/Kernel/Sources/KeMain.cxx index 418bda20..59f53f34 100644 --- a/Kernel/Sources/KeMain.cxx +++ b/Kernel/Sources/KeMain.cxx @@ -55,8 +55,8 @@ namespace NewOS::Detail constexpr auto cFolderInfo = "META-INF"; const auto cDirCount = 8; const char* cDirStr[cDirCount] = { - "\\Boot\\", "\\System\\", "\\Support\\", "\\Packages\\", - "\\Users\\", "\\Library\\", "\\Mount\\", "\\DCIM\\"}; + "C:\\Boot\\", "C:\\System\\", "C:\\Support\\", "C:\\Applications\\", + "C:\\Users\\", "C:\\Library\\", "C:\\Mount\\", "C:\\DCIM\\"}; for (NewOS::SizeT dirIndx = 0UL; dirIndx < cDirCount; ++dirIndx) { @@ -64,6 +64,8 @@ namespace NewOS::Detail if (catalogDir) { + NewOS::kcout << "newoskrnl: Already here\r"; + delete catalogDir; continue; } @@ -93,7 +95,7 @@ namespace NewOS::Detail metadataFolder += "<p>Kind: folder</p>\r<p>Created by: system</p>\r<p>Edited by: " - "system</p>\r<p>Volume Type: s10 Filesystem</p>\r"; + "system</p>\r<p>Volume Type: Zeta</p>\r"; metadataFolder += "<p>Path: "; metadataFolder += cDirStr[dirIndx]; @@ -103,8 +105,12 @@ namespace NewOS::Detail auto catalogSystem = fNewFS->GetParser()->GetCatalog(cDirStr[dirIndx]); + kcout << "newoskrnl: write fork...\r"; + fNewFS->GetParser()->CreateFork(catalogSystem, theFork); + kcout << "newoskrnl: write catalog...\r"; + fNewFS->GetParser()->WriteCatalog( catalogSystem, (NewOS::VoidPtr)(metadataFolder.CData()), metadataSz, cFolderInfo); @@ -114,7 +120,7 @@ namespace NewOS::Detail } NewCatalog* catalogDisk = - this->fNewFS->GetParser()->GetCatalog("\\Mount\\C:\\"); + this->fNewFS->GetParser()->GetCatalog("C:\\Mount\\SIM:"); const NewOS::Char* cSrcName = "DISK-INF"; @@ -129,14 +135,14 @@ namespace NewOS::Detail else { catalogDisk = - (NewCatalog*)this->Leak()->CreateAlias("\\Mount\\C:\\"); + (NewCatalog*)this->Leak()->CreateAlias("C:\\Mount\\SIM:"); NewOS::StringView diskFolder(kNewFSSectorSz); diskFolder += - "<p>Kind: alias to disk</p>\r<p>Created by: system</p>\r<p>Edited " + "<p>Kind: alias to SIM</p>\r<p>Created by: system</p>\r<p>Edited " "by: " - "system</p>\r<p>Volume Type: s10 Filesystem</p>\r"; + "system</p>\r<p>Volume Type: SIM</p>\r"; diskFolder += "<p>Root: "; diskFolder += NewOS::NewFilesystemHelper::Root(); @@ -161,6 +167,8 @@ namespace NewOS::Detail (NewOS::VoidPtr)diskFolder.CData(), kNewFSSectorSz, cSrcName); + NewOS::kcout << diskFolder.CData() << NewOS::end_line(); + delete catalogDisk; } } @@ -183,7 +191,7 @@ namespace NewOS::Detail /// @return void no return value. STATIC NewOS::Void ke_launch_srv(NewOS::Void) { - NewOS::PEFLoader secureSrv("\\System\\securesrv.exe"); + NewOS::PEFLoader secureSrv("C:\\System\\securesrv.exe"); if (!secureSrv.IsLoaded()) { @@ -193,7 +201,7 @@ namespace NewOS::Detail NewOS::Utils::execute_from_image(secureSrv, NewOS::ProcessHeader::kAppKind); - NewOS::PEFLoader uiSrv("\\System\\uisrv.exe"); + NewOS::PEFLoader uiSrv("C:\\System\\uisrv.exe"); if (!uiSrv.IsLoaded()) { @@ -211,18 +219,6 @@ namespace NewOS::Detail EXTERN_C NewOS::Void KeMain(NewOS::Void) { /// Now run kernel loop, until no process are running. - NewOS::Detail::FilesystemInstaller installer; // automatic filesystem creation. - + NewOS::Detail::FilesystemInstaller(); // automatic filesystem creation. NewOS::Detail::ke_launch_srv(); - -#if __NEWOS_AMD64__ - /// fetch system cores. - NewOS::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr); -#else - /// ... or fetch using CoreBoot. -#endif - - NewOS::ProcessHelper::StartScheduling(); - - NewOS::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/Kernel/Sources/Pmm.cxx b/Kernel/Sources/Pmm.cxx index f3535968..dc1168bd 100644 --- a/Kernel/Sources/Pmm.cxx +++ b/Kernel/Sources/Pmm.cxx @@ -11,6 +11,10 @@ #include <HALKit/ARM64/Processor.hxx> #endif +#if defined(__NEWOS_AMD64__) +#include <HALKit/AMD64/Processor.hpp> +#endif + namespace NewOS { /// @brief Pmm constructor. |
