summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-06-19 19:08:17 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-06-19 19:08:17 +0200
commitdd643d1266229e5b7e81ae9ace988921e9c2c3b0 (patch)
tree9e1ff454a1334e3c33b97bf8853bb6c687816513
parent19d0857d84cbc0267a8b222368e143bdcdaaf9a7 (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.hxx2
-rw-r--r--Boot/amd64-efi.make6
-rw-r--r--Kernel/FSKit/NewFS.hxx11
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp7
-rw-r--r--Kernel/HALKit/AMD64/HalInterruptAPI.asm15
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx23
-rw-r--r--Kernel/Sources/FS/NewFS.cxx2
-rw-r--r--Kernel/Sources/KeMain.cxx40
-rw-r--r--Kernel/Sources/Pmm.cxx4
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.