summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dev/INSTALL/Install.asm10
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx3
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootMain.cxx4
-rw-r--r--dev/ZKA/ArchKit/ArchKit.hxx1
-rw-r--r--dev/ZKA/Docs/TODO-LIST.md2
-rw-r--r--dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx8
-rw-r--r--dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx14
-rw-r--r--dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm52
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMain.cxx16
-rw-r--r--dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm41
-rw-r--r--dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx11
-rw-r--r--dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx6
-rw-r--r--dev/ZKA/HALKit/AMD64/HalProcessor.cxx26
-rw-r--r--dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx10
-rw-r--r--dev/ZKA/HALKit/AMD64/Processor.hxx30
-rw-r--r--dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx6
-rw-r--r--dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx6
-rw-r--r--dev/ZKA/HALKit/ARM64/HalKernelMain.cxx4
-rw-r--r--dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx4
-rw-r--r--dev/ZKA/HALKit/AXP/CoreSyscallHandlerDEC.cpp4
-rw-r--r--dev/ZKA/KernelKit/DriveManager.hxx2
-rw-r--r--dev/ZKA/KernelKit/FileManager.hxx5
-rw-r--r--dev/ZKA/KernelKit/Heap.hxx22
-rw-r--r--dev/ZKA/KernelKit/UserProcessScheduler.hxx2
-rw-r--r--dev/ZKA/NetworkKit/NetworkDevice.inl4
-rw-r--r--dev/ZKA/Sources/CxxAbi-AMD64.cxx2
-rw-r--r--dev/ZKA/Sources/CxxAbi-ARM64.cxx2
-rw-r--r--dev/ZKA/Sources/DLLInterface.cxx2
-rw-r--r--dev/ZKA/Sources/DLLMain.cxx8
-rw-r--r--dev/ZKA/Sources/DriveManager.cxx2
-rw-r--r--dev/ZKA/Sources/FS/NewFS.cxx70
-rw-r--r--dev/ZKA/Sources/IndexableProperty.cxx2
-rw-r--r--dev/ZKA/Sources/KernelCheck.cxx4
-rw-r--r--dev/ZKA/Sources/MP.cxx5
-rw-r--r--dev/ZKA/Sources/NewFS+FileManager.cxx4
-rw-r--r--dev/ZKA/Sources/PEFCodeManager.cxx2
-rw-r--r--dev/ZKA/Sources/ThreadLocalStorage.cxx8
-rw-r--r--dev/ZKA/Sources/User.cxx4
-rw-r--r--dev/ZKA/Sources/UserProcessScheduler.cxx8
39 files changed, 178 insertions, 238 deletions
diff --git a/dev/INSTALL/Install.asm b/dev/INSTALL/Install.asm
new file mode 100644
index 00000000..3845316c
--- /dev/null
+++ b/dev/INSTALL/Install.asm
@@ -0,0 +1,10 @@
+;; /*
+;; * ---------------------------------------------------
+;; *
+;; * Copyright ZKA Technologies., all rights reserved.
+;; *
+;; * File: Install.asm
+;; * Purpose: ZKA installer program, runs at ring-0.
+;; *
+;; * ---------------------------------------------------
+;; */
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx b/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
index c8e0bb4e..c2dff978 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
+++ b/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
@@ -13,6 +13,7 @@
#include <BootKit/BootKit.hxx>
#include <FirmwareKit/Handover.hxx>
#include <FirmwareKit/EFI/API.hxx>
+#include <Modules/CoreCG/TextRenderer.hxx>
/// @file BootFileReader
/// @brief Bootloader File reader.
@@ -85,6 +86,8 @@ BFileReader::BFileReader(const CharacterTypeUTF16* path,
.Write(L"\r");
this->mErrorCode = kNotSupported;
+ CGDrawString("NEWOSLDR: PLEASE RECOVER YOUR NEWOSKRNL INSTALL.", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+
mRootFs->Close(mRootFs);
return;
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
index cd131a2d..67b2a478 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
+++ b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
@@ -265,6 +265,10 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
loader = new Boot::BThread(readerKernel.Blob());
loader->SetName("64-bit Kernel DLL.");
}
+ else
+ {
+ CGDrawString("NEWOSLDR: PLEASE RECOVER YOUR NEWOSKRNL INSTALL.", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ }
EFI::ExitBootServices(MapKey, ImageHandle);
diff --git a/dev/ZKA/ArchKit/ArchKit.hxx b/dev/ZKA/ArchKit/ArchKit.hxx
index 97a4c17a..60a2b2ec 100644
--- a/dev/ZKA/ArchKit/ArchKit.hxx
+++ b/dev/ZKA/ArchKit/ArchKit.hxx
@@ -107,5 +107,6 @@ inline Kernel::Array<HAL_SYSCALL_RECORD,
kKerncalls;
EXTERN_C Kernel::HAL::StackFramePtr mp_get_current_context();
+EXTERN_C Kernel::Void mp_do_context_switch_pre(Kernel::Void);
/// @note The context gives out the return address in return register.
EXTERN_C Kernel::UIntPtr mp_do_context_switch(Kernel::VoidPtr image, Kernel::UInt8* stack_ptr, Kernel::HAL::StackFramePtr stackPtr);
diff --git a/dev/ZKA/Docs/TODO-LIST.md b/dev/ZKA/Docs/TODO-LIST.md
index d0be1adc..ec50c89d 100644
--- a/dev/ZKA/Docs/TODO-LIST.md
+++ b/dev/ZKA/Docs/TODO-LIST.md
@@ -20,6 +20,6 @@ Status:
newosldr: Need to boot from EPM partition. [ X ]
<br>
-NewKernel: New Filesystem is done. [ X ]
+newoskrnl: New Filesystem is done. [ X ]
**Refer to Jira please!**
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
index 1e9e6ec1..6d5396f2 100644
--- a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
@@ -54,12 +54,12 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr
{
if (rcx <= (kSyscalls.Count() - 1))
{
- Kernel::kcout << "newoskrnl: syscall: enter.\r";
+ Kernel::kcout << "newoskrnl.dll: syscall: enter.\r";
if (kSyscalls[rcx].fHooked)
(kSyscalls[rcx].fProc)((Kernel::VoidPtr)rdx);
- Kernel::kcout << "newoskrnl: syscall: exit.\r";
+ Kernel::kcout << "newoskrnl.dll: syscall: exit.\r";
}
}
@@ -70,11 +70,11 @@ EXTERN_C Kernel::Void hal_Kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr
{
if (rcx <= (kSyscalls.Count() - 1))
{
- Kernel::kcout << "newoskrnl: kerncall: enter.\r";
+ Kernel::kcout << "newoskrnl.dll: kerncall: enter.\r";
if (kKerncalls[rcx].fHooked)
(kKerncalls[rcx].fProc)((Kernel::VoidPtr)rdx);
- Kernel::kcout << "newoskrnl: kerncall: exit.\r";
+ Kernel::kcout << "newoskrnl.dll: kerncall: exit.\r";
}
}
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
index 9d9b546b..a6a27695 100644
--- a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
@@ -147,12 +147,11 @@ namespace Kernel::HAL
struct PROCESS_CONTROL_BLOCK final
{
UserProcessPtr f_Process;
- HAL::StackFramePtr f_Frame;
} fBlocks[kSchedProcessLimitPerTeam] = {0};
EXTERN_C HAL::StackFramePtr _hal_leak_current_context(Void)
{
- return fBlocks[UserProcessScheduler::The().CurrentProcess().Leak().ProcessId % kSchedProcessLimitPerTeam].f_Frame;
+ return fBlocks[UserProcessScheduler::The().CurrentProcess().Leak().ProcessId % kSchedProcessLimitPerTeam].f_Process->StackFrame;
}
EXTERN_C Bool mp_register_process(HAL::StackFramePtr stack_frame)
@@ -160,8 +159,7 @@ namespace Kernel::HAL
if (kSMPAware)
{
fBlocks[UserProcessScheduler::The().CurrentProcess().Leak().ProcessId % kSchedProcessLimitPerTeam].f_Process = &UserProcessScheduler::The().CurrentProcess().Leak();
- fBlocks[UserProcessScheduler::The().CurrentProcess().Leak().ProcessId % kSchedProcessLimitPerTeam].f_Frame = stack_frame;
-
+
return true;
}
@@ -193,7 +191,7 @@ namespace Kernel::HAL
cSMPInterrupt = 0;
kSMPCount = 0;
- kcout << "newoskrnl: Probing MADT cores...\r";
+ kcout << "newoskrnl.dll: Probing MADT cores...\r";
UIntPtr madt_address = kMADTBlock->Address;
@@ -207,13 +205,13 @@ namespace Kernel::HAL
{
case 0x00: {
cSMPCores[index] = kMADTBlock->List[index].LAPIC.ProcessorID;
- kcout << "newoskrnl: Core ID: " << number(cSMPCores[index]) << endl;
+ kcout << "newoskrnl.dll: Core ID: " << number(cSMPCores[index]) << endl;
++kSMPCount;
break;
}
case 0x05: {
madt_address = kMADTBlock->List[index].LAPIC_ADDRESS_OVERRIDE.Address;
- kcout << "newoskrnl: Address: " << number(madt_address) << endl;
+ kcout << "newoskrnl.dll: Address: " << number(madt_address) << endl;
break;
}
}
@@ -221,7 +219,7 @@ namespace Kernel::HAL
++index;
}
- kcout << "newoskrnl: # of cores: " << number(kSMPCount) << endl;
+ kcout << "newoskrnl.dll: # of cores: " << number(kSMPCount) << endl;
// Kernel is now SMP aware.
// That means that the scheduler is now available (on MP Kernels)
diff --git a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
index 89cb4078..2eae172a 100644
--- a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
@@ -4,7 +4,7 @@
;; * Copyright ZKA Technologies., all rights reserved.
;; *
;; * File: HalInterruptAPI.asm
-;; * Purpose: Interrupt routing, redirect raw interrupts into their handlers.
+;; * Purpose: Interrupt API, redirect raw interrupts into their handlers.
;; *
;; * ---------------------------------------------------
;; */
@@ -240,56 +240,6 @@ hal_load_idt:
sti
ret
-[global hal_switch_to_user_code]
-
-hal_switch_to_user_code:
- ; Enable SCE that enables sysret and syscall
- mov rcx, 0xc0000082
- wrmsr
- mov rcx, 0xc0000080
- rdmsr
- or eax, 1
- wrmsr
- mov rcx, 0xc0000081
- rdmsr
- mov edx, 0x00180008
- wrmsr
-
- mov rbx, 0x28
- mov ds, rbx
-
- mov rbx, 0x28
- mov fs, rbx
-
- mov rbx, 0x28
- mov gs, rbx
-
- mov rbx, 0x28
- mov es, rbx
-
- mov rsp, hal_user_code_stack_end
- mov rcx, hal_user_code_start
-
- mov r11, 0x0202
-
- o64 sysret
-
-hal_user_code_start:
- hlt
- nop
- jmp $
-hal_user_code_end:
-
-section .data
-
-hal_user_code_sz: dq hal_user_code_end - hal_user_code_start
-
-section .bss
-
-hal_user_code_stack:
- resb 4096*4
-hal_user_code_stack_end:
-
section .data
kInterruptVectorTable:
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
index da77a13c..12926ee8 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
@@ -63,12 +63,12 @@ namespace Kernel::HAL
/* GDT. */
STATIC Kernel::HAL::Detail::ZKA_GDT cGdt = {
- {0, 0, 0, 0x00, 0x00, 0}, // Null entry
- {0, 0, 0, 0x9A, 0xA0, 0}, // Kernel code
- {0, 0, 0, 0x92, 0xA0, 0}, // Kernel data
- {0, 0, 0, 0x00, 0x00, 0}, // Null entry
- {0, 0, 0, 0xFA, 0xA0, 0}, // User code
- {0, 0, 0, 0xF2, 0xA0, 0}, // User data
+ .fKernNull = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 0, .fAccessByte = 0x00, .fLimit1_Flags = 0x00, .fBase2 = 0}, // Null entry
+ .fKernCode = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 00, .fAccessByte = 0x9A, .fLimit1_Flags = 0xA0, .fBase2 = 0}, // Kernel code
+ .fKernData = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 00, .fAccessByte = 0x92, .fLimit1_Flags = 0xA0, .fBase2 = 0}, // Kernel data
+ .fUserNull = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 00, .fAccessByte = 0x00, .fLimit1_Flags = 0x00, .fBase2 = 0}, // Null entry
+ .fUserCode = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 00, .fAccessByte = 0xCF, .fLimit1_Flags = 0xA0, .fBase2 = 0}, // User code
+ .fUserData = { .fLimit0 = 0, .fBase0 = 0, .fBase1 = 00, .fAccessByte = 0x92, .fLimit1_Flags = 0xA0, .fBase2 = 0}, // User data
};
Kernel::Void hal_real_init(Kernel::Void) noexcept;
@@ -204,7 +204,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
if (!rdxEi)
return;
- Kernel::kcout << "newoskrnl: " << rdxEi->fReason << "\r";
+ Kernel::kcout << "newoskrnl.dll: " << rdxEi->fReason << "\r";
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Exit(rdxEi->fCode);
};
@@ -240,7 +240,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
if (kHandoverHeader->f_MultiProcessingEnabled)
Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- Kernel::kcout << "newoskrnl: Creating filesystem and such.\r";
+ Kernel::kcout << "newoskrnl.dll: Creating filesystem and such.\r";
auto fs = new Kernel::NewFilesystemManager();
diff --git a/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm b/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
index f5f36b27..9ef3122c 100644
--- a/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
+++ b/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
@@ -13,6 +13,7 @@
[global mp_do_context_switch]
[extern _hal_switch_context]
[extern _hal_leak_current_context]
+[global mp_do_context_switch_pre]
section .text
@@ -20,9 +21,16 @@ section .text
;; rcx: code ptr.
;; rdx: stack ptr.
mp_do_context_switch:
- mov r11, rdx
- mov r12, rcx
-
+ mov r11, 0x0202
+ mov rsp, rdx
+ o64 sysret
+
+;; @brief Gets the current stack frame.
+mp_get_current_context:
+ call _hal_leak_current_context
+ ret
+
+mp_do_context_switch_pre:
; Enable SCE that enables sysret and syscall
mov rcx, 0xc0000082
wrmsr
@@ -33,30 +41,7 @@ mp_do_context_switch:
mov rcx, 0xc0000081
rdmsr
mov edx, 0x00180008
- wrmsr
- mov rbx, 0x28
- mov ds, rbx
+ wrmsr
- mov rbx, 0x28
- mov fs, rbx
-
- mov rbx, 0x28
- mov gs, rbx
-
- mov rbx, 0x28
- mov es, rbx
-
- ;; Swap registers, since it's the other way around.
-
- mov rcx, r12 ;; code ptr
- mov rsp, r11 ;; stack ptr
- mov r11, 0x0202
-
- ;; rcx and rdx already set.
- o64 sysret
-
-;; @brief Gets the current stack frame.
-mp_get_current_context:
- call _hal_leak_current_context
- ret
+ ret \ No newline at end of file
diff --git a/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx b/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
index 82eea45e..b0a490ed 100644
--- a/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
@@ -99,16 +99,9 @@ namespace Kernel
auto result = reinterpret_cast<VoidPtr>(vmh_header + sizeof(Detail::VIRTUAL_MEMORY_HEADER));
- VoidPtr cr3_value;
+ VoidPtr cr3 = hal_read_cr3();
- asm volatile(
- "mov %%cr3, %0" // Move CR3 into the variable
- : "=r"(cr3_value) // Output operand, cr3 page directory.
- : // No input operands
- : "memory"
- );
-
- mm_update_page(cr3_value, 0, (UIntPtr)result, eFlagsPresent | (rw ? eFlagsRw : 0) | (user ? eFlagsUser : 0));
+ mm_update_page(cr3, 0, result, eFlagsPresent | (rw ? eFlagsRw : 0) | (user ? eFlagsUser : 0));
return result;
}
diff --git a/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx b/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx
index 38666e7e..81ea2bd8 100644
--- a/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx
+++ b/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx
@@ -34,9 +34,9 @@ EXTERN_C void hal_flush_tlb();
EXTERN_C void hal_write_cr3(Kernel::UIntPtr pde);
EXTERN_C void hal_write_cr0(Kernel::UIntPtr bit);
-EXTERN_C Kernel::UIntPtr hal_read_cr0(); // @brief CPU control register.
-EXTERN_C Kernel::UIntPtr hal_read_cr2(); // @brief Fault address.
-EXTERN_C Kernel::UIntPtr hal_read_cr3(); // @brief Page table.
+EXTERN_C Kernel::VoidPtr hal_read_cr0(); // @brief CPU control register.
+EXTERN_C Kernel::VoidPtr hal_read_cr2(); // @brief Fault address.
+EXTERN_C Kernel::VoidPtr hal_read_cr3(); // @brief Page table.
namespace Kernel::HAL
{
diff --git a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
index 367e9314..dffaed3e 100644
--- a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
@@ -2,6 +2,9 @@
Copyright ZKA Technologies.
+ File: HalProcessor.cxx
+ Purpose: Platform processor routines.
+
------------------------------------------- */
#include <HALKit/AMD64/Processor.hxx>
@@ -13,6 +16,29 @@
namespace Kernel::HAL
{
+ EXTERN_C Int32 mm_update_page(VoidPtr pd_base, VoidPtr phys_addr, VoidPtr virt_addr, UInt32 flags)
+ {
+ UIntPtr pde_idx = (UIntPtr)virt_addr >> 22;
+ UIntPtr pte_idx = (UIntPtr)virt_addr >> 12 & 0x03FF;
+
+ volatile PTE* pte = (volatile PTE*)((UIntPtr)pd_base + (kPTEAlign * pde_idx));
+
+ if (pte)
+ {
+ if ((flags & eFlagsSetPhysAddress))
+ pte->PhysicalAddress = (UInt32)(UIntPtr)phys_addr;
+
+ pte->Present = flags & eFlagsPresent;
+ pte->Rw = flags & eFlagsRw;
+ pte->User = flags & eFlagsUser;
+ pte->ExecDisable = flags & eFlagsExecDisable;
+
+ return 0;
+ }
+
+ return 1;
+ }
+
Void Out8(UInt16 port, UInt8 value)
{
asm volatile("outb %%al, %1"
diff --git a/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx b/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
index 3897cb6a..b3449026 100644
--- a/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalSchedulerCore.cxx
@@ -14,15 +14,7 @@ Void UserProcess::SetEntrypoint(VoidPtr imageStart) noexcept
if (imageStart == nullptr)
this->Crash();
- VoidPtr cr3_pd;
-
- asm volatile(
- "mov %%cr3, %0" // Move CR3 into the variable
- : "=r"(cr3_pd) // Output operand, cr3 page directory.
- : // No input operands
- : "memory");
-
- HAL::mm_update_page(cr3_pd, 0, (UIntPtr)imageStart, HAL::eFlagsPresent | HAL::eFlagsRw | HAL::eFlagsUser);
+ HAL::mm_update_page(hal_read_cr3(), 0, imageStart, HAL::eFlagsPresent | HAL::eFlagsRw | HAL::eFlagsUser);
this->Image = imageStart;
}
diff --git a/dev/ZKA/HALKit/AMD64/Processor.hxx b/dev/ZKA/HALKit/AMD64/Processor.hxx
index 68bcbec9..bb41de54 100644
--- a/dev/ZKA/HALKit/AMD64/Processor.hxx
+++ b/dev/ZKA/HALKit/AMD64/Processor.hxx
@@ -30,7 +30,7 @@ EXTERN_C
#define kCPUBackendName "AMD64"
-#define kSyscallRoute 0x32
+#define kSyscallRoute (0x32)
#define IsActiveLow(FLG) (FLG & 2)
#define IsLevelTriggered(FLG) (FLG & 8)
@@ -77,28 +77,7 @@ namespace Kernel::HAL
/// @param phys_addr a valid phyiscal address.
/// @param virt_addr a valid virtual address.
/// @param flags the flags to put on the page.
- inline Int32 mm_update_page(VoidPtr pd_base, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
- {
- UIntPtr pde_idx = (UIntPtr)virt_addr >> 22;
- UIntPtr pte_idx = (UIntPtr)virt_addr >> 12 & 0x03FF;
-
- volatile PTE* pte = (volatile PTE*)((UIntPtr)pd_base + (kPTEAlign * pde_idx));
-
- if (pte)
- {
- if ((flags & eFlagsSetPhysAddress))
- pte->PhysicalAddress = phys_addr;
-
- pte->Present = flags & eFlagsPresent;
- pte->Rw = flags & eFlagsRw;
- pte->User = flags & eFlagsUser;
- pte->ExecDisable = flags & eFlagsExecDisable;
-
- return 0;
- }
-
- return 1;
- }
+ EXTERN_C Int32 mm_update_page(VoidPtr pd_base, VoidPtr phys_addr, VoidPtr virt_addr, UInt32 flags);
EXTERN_C UChar In8(UInt16 port);
EXTERN_C UShort In16(UInt16 port);
@@ -128,9 +107,8 @@ namespace Kernel::HAL
};
using RawRegister = UInt64;
- using Reg = RawRegister;
+ using Reg = RawRegister;
using InterruptId = UInt16; /* For each element in the IVT */
-
/// @brief Stack frame (as retrieved from assembly.)
struct PACKED StackFrame final
@@ -275,7 +253,7 @@ namespace Kernel::HAL
struct PACKED ALIGN(0x1000) ZKA_GDT final
{
- ZKA_GDT_ENTRY fNull;
+ ZKA_GDT_ENTRY fKernNull;
ZKA_GDT_ENTRY fKernCode;
ZKA_GDT_ENTRY fKernData;
ZKA_GDT_ENTRY fUserNull;
diff --git a/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx b/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
index c37bc01a..4fefee46 100644
--- a/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
+++ b/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
@@ -63,7 +63,7 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented)
{
if (ports_implemented)
{
- kcout << "newoskrnl: Port is implemented by host.\r";
+ kcout << "newoskrnl.dll: Port is implemented by host.\r";
UInt8 ipm = (mem_ahci->Ports[ahci_index].Ssts >> 8) & 0x0F;
UInt8 det = mem_ahci->Ports[ahci_index].Ssts & 0x0F;
@@ -72,8 +72,8 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented)
det == cAhciPresent &&
ipm == cAhciIPMActive)
{
- kcout << "newoskrnl: Found AHCI controller.\r";
- kcout << "newoskrnl: Device is of SATA type.\r";
+ kcout << "newoskrnl.dll: Found AHCI controller.\r";
+ kcout << "newoskrnl.dll: Device is of SATA type.\r";
detected = true;
diff --git a/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx b/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
index 74869dc3..6dc252fc 100644
--- a/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
+++ b/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
@@ -68,7 +68,7 @@ Boolean drv_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster)
drv_std_select(IO);
- Kernel::kcout << "newoskrnl: Initializing drive...\r";
+ Kernel::kcout << "newoskrnl.dll: Initializing drive...\r";
ATAInit_Retry:
// Bus init, NEIN bit.
@@ -80,7 +80,7 @@ ATAInit_Retry:
if (statRdy & ATA_SR_ERR)
{
- Kernel::kcout << "newoskrnl: Failing drive...\r";
+ Kernel::kcout << "newoskrnl.dll: Failing drive...\r";
return false;
}
@@ -107,7 +107,7 @@ ATAInit_Retry:
OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE;
- Kernel::kcout << "newoskrnl: Create ATA module.\r";
+ Kernel::kcout << "newoskrnl.dll: Create ATA module.\r";
return true;
}
diff --git a/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx b/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx
index 645e509a..eed255da 100644
--- a/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx
+++ b/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx
@@ -155,7 +155,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
if (!rdxEi)
return;
- Kernel::kcout << "newoskrnl: " << rdxEi->fReason << "\r";
+ Kernel::kcout << "newoskrnl.dll: " << rdxEi->fReason << "\r";
Kernel::UserProcessScheduler::The().Leak().CurrentProcess().Leak().Exit(rdxEi->fCode);
};
@@ -192,7 +192,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
else
Kernel::HAL::mp_get_cores(nullptr);
- Kernel::kcout << "newoskrnl: Creating filesystem and such.\r";
+ Kernel::kcout << "newoskrnl.dll: Creating filesystem and such.\r";
auto fs = new Kernel::NewFilesystemManager();
diff --git a/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx b/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
index ac17d658..53238609 100644
--- a/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
+++ b/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
@@ -53,13 +53,13 @@ namespace Kernel
/// @brief Enable flash memory at slot.
STATIC Void drv_enable_flash(Int32 arg)
{
- kcout << "newoskrnl: Enabled FLSH hardware.\r";
+ kcout << "newoskrnl.dll: Enabled FLSH hardware.\r";
}
/// @brief Disable flash memory at slot.
STATIC Void drv_disable_flash(Int32 arg)
{
- kcout << "newoskrnl: Disabled FLSH hardware.\r";
+ kcout << "newoskrnl.dll: Disabled FLSH hardware.\r";
}
} // namespace Kernel
diff --git a/dev/ZKA/HALKit/AXP/CoreSyscallHandlerDEC.cpp b/dev/ZKA/HALKit/AXP/CoreSyscallHandlerDEC.cpp
index 9d20a0f3..148fa020 100644
--- a/dev/ZKA/HALKit/AXP/CoreSyscallHandlerDEC.cpp
+++ b/dev/ZKA/HALKit/AXP/CoreSyscallHandlerDEC.cpp
@@ -14,11 +14,11 @@ EXTERN_C void rt_syscall_handle(Kernel::HAL::StackFrame* stack)
{
if (stack->Rcx <= (kSyscalls.Count() - 1))
{
- Kernel::kcout << "newoskrnl: syscall: enter.\r";
+ Kernel::kcout << "newoskrnl.dll: syscall: enter.\r";
if (kSyscalls[stack->Rcx].Leak().Leak().fHooked)
(kSyscalls[stack->Rcx].Leak().Leak().fProc)(stack);
- Kernel::kcout << "newoskrnl: syscall: exit.\r";
+ Kernel::kcout << "newoskrnl.dll: syscall: exit.\r";
}
}
diff --git a/dev/ZKA/KernelKit/DriveManager.hxx b/dev/ZKA/KernelKit/DriveManager.hxx
index 9d90a42c..fa700907 100644
--- a/dev/ZKA/KernelKit/DriveManager.hxx
+++ b/dev/ZKA/KernelKit/DriveManager.hxx
@@ -116,7 +116,7 @@ namespace Kernel
return &mD;
default: {
ErrLocal() = kErrorNoSuchDisk;
- kcout << "newoskrnl: No such disk.\n";
+ kcout << "newoskrnl.dll: No such disk.\n";
break;
}
diff --git a/dev/ZKA/KernelKit/FileManager.hxx b/dev/ZKA/KernelKit/FileManager.hxx
index cbfc1e30..daaf65b3 100644
--- a/dev/ZKA/KernelKit/FileManager.hxx
+++ b/dev/ZKA/KernelKit/FileManager.hxx
@@ -2,6 +2,9 @@
Copyright ZKA Technologies.
+ File: FileManager.hxx
+ Purpose: Kernel file manager.
+
------------------------------------------- */
/* -------------------------------------------
@@ -405,7 +408,7 @@ namespace Kernel
}
}
- kcout << "newoskrnl: new file: " << path << ".\r";
+ kcout << "newoskrnl.dll: new file: " << path << ".\r";
}
/// @brief destructor
diff --git a/dev/ZKA/KernelKit/Heap.hxx b/dev/ZKA/KernelKit/Heap.hxx
index 5ce5a293..65b71774 100644
--- a/dev/ZKA/KernelKit/Heap.hxx
+++ b/dev/ZKA/KernelKit/Heap.hxx
@@ -16,19 +16,19 @@
namespace Kernel
{
/// @brief Declare pointer as free.
- /// @param allocatedPtr the pointer.
+ /// @param heap_ptr the pointer.
/// @return
- Int32 mm_delete_ke_heap(voidPtr allocatedPtr);
+ Int32 mm_delete_ke_heap(voidPtr heap_ptr);
- /// @brief Declare a new size for allocatedPtr.
- /// @param allocatedPtr the pointer.
+ /// @brief Declare a new size for heap_ptr.
+ /// @param heap_ptr the pointer.
/// @return
- voidPtr mm_realloc_ke_heap(voidPtr allocatedPtr, SizeT newSz);
+ voidPtr mm_realloc_ke_heap(voidPtr heap_ptr, SizeT new_sz);
/// @brief Check if pointer is a valid Kernel pointer.
- /// @param allocatedPtr the pointer
+ /// @param heap_ptr the pointer
/// @return if it exists.
- Boolean mm_is_valid_heap(VoidPtr allocatedPtr);
+ Boolean mm_is_valid_heap(VoidPtr heap_ptr);
/// @brief allocate chunk of memory.
/// @param sz size of pointer
@@ -38,14 +38,14 @@ namespace Kernel
VoidPtr mm_new_ke_heap(const SizeT sz, const Bool rw, const Bool user);
/// @brief Protect the heap with a CRC value.
- /// @param allocatedPtr pointer.
+ /// @param heap_ptr pointer.
/// @return if it valid: point has crc now., otherwise fail.
- Boolean mm_protect_ke_heap(VoidPtr allocatedPtr);
+ Boolean mm_protect_ke_heap(VoidPtr heap_ptr);
/// @brief Makes a Kernel page.
- /// @param allocatedPtr the page pointer.
+ /// @param heap_ptr the page pointer.
/// @return
- Int32 mm_make_ke_page(VoidPtr allocatedPtr);
+ Int32 mm_make_ke_page(VoidPtr heap_ptr);
} // namespace Kernel
#endif // !_INC_KERNEL_HEAP_HXX_
diff --git a/dev/ZKA/KernelKit/UserProcessScheduler.hxx b/dev/ZKA/KernelKit/UserProcessScheduler.hxx
index fafe474c..3a393874 100644
--- a/dev/ZKA/KernelKit/UserProcessScheduler.hxx
+++ b/dev/ZKA/KernelKit/UserProcessScheduler.hxx
@@ -286,7 +286,7 @@ namespace Kernel
class ProcessHelper final
{
public:
- STATIC bool Switch(VoidPtr image_ptr, UInt8* stack, HAL::StackFramePtr frame_ptr, const PID& new_pid);
+ STATIC bool Switch(VoidPtr image_ptr, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr, const PID& new_pid);
STATIC bool CanBeScheduled(UserProcess& process);
STATIC PID& TheCurrentPID();
STATIC SizeT StartScheduling();
diff --git a/dev/ZKA/NetworkKit/NetworkDevice.inl b/dev/ZKA/NetworkKit/NetworkDevice.inl
index 5579eba3..9fa34298 100644
--- a/dev/ZKA/NetworkKit/NetworkDevice.inl
+++ b/dev/ZKA/NetworkKit/NetworkDevice.inl
@@ -15,7 +15,7 @@ namespace Kernel
void (*on_cleanup)(void))
: DeviceInterface<NetworkDeviceCommand>(out, in), fCleanup(on_cleanup)
{
- kcout << "newoskrnl: NetworkDevice initialized.\r";
+ kcout << "newoskrnl.dll: NetworkDevice initialized.\r";
MUST_PASS(out && in && on_cleanup);
}
@@ -24,7 +24,7 @@ namespace Kernel
{
MUST_PASS(fCleanup);
- kcout << "newoskrnl: NetworkDevice cleanup.\r";
+ kcout << "newoskrnl.dll: NetworkDevice cleanup.\r";
if (fCleanup)
fCleanup();
diff --git a/dev/ZKA/Sources/CxxAbi-AMD64.cxx b/dev/ZKA/Sources/CxxAbi-AMD64.cxx
index 66fae2f5..ab4f8147 100644
--- a/dev/ZKA/Sources/CxxAbi-AMD64.cxx
+++ b/dev/ZKA/Sources/CxxAbi-AMD64.cxx
@@ -19,7 +19,7 @@ Kernel::UIntPtr __dso_handle;
EXTERN_C void __cxa_pure_virtual()
{
- Kernel::kcout << "newoskrnl: C++ placeholder method.\n";
+ Kernel::kcout << "newoskrnl.dll: C++ placeholder method.\n";
}
EXTERN_C void ___chkstk_ms(void)
diff --git a/dev/ZKA/Sources/CxxAbi-ARM64.cxx b/dev/ZKA/Sources/CxxAbi-ARM64.cxx
index 798cecab..1475ae85 100644
--- a/dev/ZKA/Sources/CxxAbi-ARM64.cxx
+++ b/dev/ZKA/Sources/CxxAbi-ARM64.cxx
@@ -68,7 +68,7 @@ EXTERN_C void __cdecl _Init_thread_footer(int* const pOnce) noexcept
EXTERN_C void _purecall()
{
- Kernel::kcout << "newoskrnl: C++ placeholder method.\n";
+ Kernel::kcout << "newoskrnl.dll: C++ placeholder method.\n";
}
#endif // ifdef __ZKA_ARM64__
diff --git a/dev/ZKA/Sources/DLLInterface.cxx b/dev/ZKA/Sources/DLLInterface.cxx
index 13ee07cf..1c08b860 100644
--- a/dev/ZKA/Sources/DLLInterface.cxx
+++ b/dev/ZKA/Sources/DLLInterface.cxx
@@ -21,6 +21,6 @@ using namespace Kernel;
EXTERN_C void __zka_pure_call(void)
{
- kcout << "newoskrnl: Unimplemented entrypoint symbol!\r";
+ kcout << "newoskrnl.dll: Unimplemented entrypoint symbol!\r";
UserProcessScheduler::The().CurrentProcess().Leak().Crash();
}
diff --git a/dev/ZKA/Sources/DLLMain.cxx b/dev/ZKA/Sources/DLLMain.cxx
index e4352a00..514834d0 100644
--- a/dev/ZKA/Sources/DLLMain.cxx
+++ b/dev/ZKA/Sources/DLLMain.cxx
@@ -215,12 +215,6 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void)
CG::CGDrawStringToWnd(cKernelWnd, kSysDrv, 20, 10 + (FONT_SIZE_X * Kernel::rt_string_len("newoskrnl.dll: Missing catalog: ")), RGB(0, 0, 0));
}
- hal_switch_to_user_code();
-
- while (Yes)
- {
- Kernel::ProcessHelper::StartScheduling();
- }
-
+ Kernel::ProcessHelper::StartScheduling();
Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
}
diff --git a/dev/ZKA/Sources/DriveManager.cxx b/dev/ZKA/Sources/DriveManager.cxx
index 575fe499..95fbed68 100644
--- a/dev/ZKA/Sources/DriveManager.cxx
+++ b/dev/ZKA/Sources/DriveManager.cxx
@@ -139,7 +139,7 @@ namespace Kernel
trait.fVerify = ke_drv_check_disk;
trait.fDriveKind = io_drive_kind;
- kcout << "newoskrnl: Construct drive with success.\r";
+ kcout << "newoskrnl.dll: Construct drive with success.\r";
return trait;
}
diff --git a/dev/ZKA/Sources/FS/NewFS.cxx b/dev/ZKA/Sources/FS/NewFS.cxx
index 56707738..edec6a6e 100644
--- a/dev/ZKA/Sources/FS/NewFS.cxx
+++ b/dev/ZKA/Sources/FS/NewFS.cxx
@@ -68,7 +68,7 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork
: catalog->ResourceFork;
- kcout << "newoskrnl: fork lba: " << hex_number(lba) << endl;
+ kcout << "newoskrnl.dll: fork lba: " << hex_number(lba) << endl;
if (lba <= kNewFSCatalogStartAddress)
return nullptr;
@@ -97,22 +97,22 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
if (curFork.NextSibling > kBadAddress)
{
- kcout << "newoskrnl: bad fork: " << hex_number(curFork.NextSibling) << endl;
+ kcout << "newoskrnl.dll: bad fork: " << hex_number(curFork.NextSibling) << endl;
break;
}
- kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl;
+ kcout << "newoskrnl.dll: next fork: " << hex_number(curFork.NextSibling) << endl;
if (curFork.Flags == kNewFSFlagCreated)
{
- kcout << "newoskrnl: fork already exists.\r";
+ kcout << "newoskrnl.dll: fork already exists.\r";
/// sanity check.
if (StringBuilder::Equals(curFork.ForkName, theFork.ForkName) &&
StringBuilder::Equals(curFork.CatalogName, catalog->Name))
return nullptr;
- kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl;
+ kcout << "newoskrnl.dll: next fork: " << hex_number(curFork.NextSibling) << endl;
lbaOfPreviousFork = lba;
lba = curFork.NextSibling;
@@ -154,10 +154,10 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
drv.fOutput(&drv.fPacket);
/// log what we have now.
- kcout << "newoskrnl: Wrote fork data at: " << hex_number(theFork.DataOffset)
+ kcout << "newoskrnl.dll: Wrote fork data at: " << hex_number(theFork.DataOffset)
<< endl;
- kcout << "newoskrnl: Wrote fork at: " << hex_number(lba) << endl;
+ kcout << "newoskrnl.dll: Wrote fork at: " << hex_number(lba) << endl;
return &theFork;
}
@@ -242,11 +242,11 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
_Input const Int32& flags,
_Input const Int32& kind)
{
- kcout << "newoskrnl: CreateCatalog(...)\r";
+ kcout << "newoskrnl.dll: CreateCatalog(...)\r";
Lba out_lba = 0UL;
- kcout << "newoskrnl: Checking for extension...\r";
+ kcout << "newoskrnl.dll: Checking for extension...\r";
/// a directory should have a slash in the end.
if (kind == kNewFSCatalogKindDir &&
@@ -262,7 +262,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
if (catalog_copy)
{
- kcout << "newoskrnl: Catalog already exists: " << name << ".\r";
+ kcout << "newoskrnl.dll: Catalog already exists: " << name << ".\r";
ErrLocal() = kErrorFileExists;
return catalog_copy;
@@ -277,7 +277,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
if (*parentName == 0)
{
- kcout << "newoskrnl: Parent name is NUL.\r";
+ kcout << "newoskrnl.dll: Parent name is NUL.\r";
ErrLocal() = kErrorFileNotFound;
return nullptr;
}
@@ -309,7 +309,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
if (catalog && catalog->Kind == kNewFSCatalogKindFile)
{
- kcout << "newoskrnl: Parent name is file.\r";
+ kcout << "newoskrnl.dll: Parent name is file.\r";
delete catalog;
return nullptr;
}
@@ -434,9 +434,9 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
drive.fOutput(&drive.fPacket);
- kcout << "newoskrnl: Create new catalog, status: "
+ kcout << "newoskrnl.dll: Create new catalog, status: "
<< hex_number(catalogChild->Flags) << endl;
- kcout << "newoskrnl: Create new catalog, name: " << catalogChild->Name
+ kcout << "newoskrnl.dll: Create new catalog, name: " << catalogChild->Name
<< endl;
delete catalog;
@@ -600,14 +600,14 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endL
drive->fOutput(&drive->fPacket);
- kcout << "newoskrnl: drive kind: " << drive->fDriveKind() << endl;
+ kcout << "newoskrnl.dll: drive kind: " << drive->fDriveKind() << endl;
- kcout << "newoskrnl: partition name: " << partBlock->PartitionName << endl;
- kcout << "newoskrnl: start: " << hex_number(partBlock->StartCatalog) << endl;
- kcout << "newoskrnl: number of catalogs: " << hex_number(partBlock->CatalogCount) << endl;
- kcout << "newoskrnl: free catalog: " << hex_number(partBlock->FreeCatalog) << endl;
- kcout << "newoskrnl: free sectors: " << hex_number(partBlock->FreeSectors) << endl;
- kcout << "newoskrnl: sector size: " << hex_number(partBlock->SectorSize) << endl;
+ kcout << "newoskrnl.dll: partition name: " << partBlock->PartitionName << endl;
+ kcout << "newoskrnl.dll: start: " << hex_number(partBlock->StartCatalog) << endl;
+ kcout << "newoskrnl.dll: number of catalogs: " << hex_number(partBlock->CatalogCount) << endl;
+ kcout << "newoskrnl.dll: free catalog: " << hex_number(partBlock->FreeCatalog) << endl;
+ kcout << "newoskrnl.dll: free sectors: " << hex_number(partBlock->FreeSectors) << endl;
+ kcout << "newoskrnl.dll: sector size: " << hex_number(partBlock->SectorSize) << endl;
// write the root catalog.
this->CreateCatalog(kNewFSRoot, 0, kNewFSCatalogKindDir);
@@ -615,7 +615,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endL
return true;
}
- kcout << "newoskrnl: partition block already exists.\r";
+ kcout << "newoskrnl.dll: partition block already exists.\r";
start += partBlock->DiskSize;
@@ -660,7 +660,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
{
ErrLocal() = kErrorDiskIsCorrupted;
- kcout << "newoskrnl: Invalid fork offset.\r";
+ kcout << "newoskrnl.dll: Invalid fork offset.\r";
return false;
}
@@ -689,7 +689,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
drive.fPacket.fPacketSize = sizeOfData;
drive.fPacket.fLba = startFork + sizeof(NFS_FORK_STRUCT);
- kcout << "newoskrnl: data offset: " << hex_number(forkDataIn->DataOffset) << endl;
+ kcout << "newoskrnl.dll: data offset: " << hex_number(forkDataIn->DataOffset) << endl;
drive.fOutput(&drive.fPacket);
@@ -699,7 +699,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
drive.fOutput(&drive.fPacket);
- kcout << "newoskrnl: wrote fork at offset: " << hex_number(forkDataIn->DataOffset) << endl;
+ kcout << "newoskrnl.dll: wrote fork at offset: " << hex_number(forkDataIn->DataOffset) << endl;
delete catalog;
@@ -722,7 +722,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
_Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogName,
Lba& out_lba)
{
- kcout << "newoskrnl: start finding catalog...\r";
+ kcout << "newoskrnl.dll: start finding catalog...\r";
NFS_ROOT_PARTITION_BLOCK fs_buf{0};
auto drive = sMountpointInterface.A();
@@ -790,7 +790,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogN
}
}
- kcout << "newoskrnl: fetching catalog...\r";
+ kcout << "newoskrnl.dll: fetching catalog...\r";
NewFSSearchThroughCatalogList:
while (drive.fPacket.fPacketGood)
@@ -814,8 +814,8 @@ NewFSSearchThroughCatalogList:
NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT();
rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT));
- kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl;
- kcout << "newoskrnl: found catalog at: " << catalog->Name << endl;
+ kcout << "newoskrnl.dll: found catalog at: " << hex_number(startCatalogList) << endl;
+ kcout << "newoskrnl.dll: found catalog at: " << catalog->Name << endl;
out_lba = startCatalogList;
return catalogPtr;
@@ -945,7 +945,7 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
Lba dataForkLba = (!isRsrcFork) ? catalog->DataFork : catalog->ResourceFork;
Size dataForkSize = (!isRsrcFork) ? catalog->DataForkSize : catalog->ResourceForkSize;
- kcout << "newoskrnl: catalog " << catalog->Name
+ kcout << "newoskrnl.dll: catalog " << catalog->Name
<< ", fork: " << hex_number(dataForkLba) << endl;
NFS_FORK_STRUCT* fs_buf = new NFS_FORK_STRUCT();
@@ -966,8 +966,8 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
fs_fork_data = fs_buf;
- kcout << "newoskrnl: ForkName: " << fs_fork_data->ForkName << endl;
- kcout << "newoskrnl: CatalogName: " << fs_fork_data->CatalogName << endl;
+ kcout << "newoskrnl.dll: ForkName: " << fs_fork_data->ForkName << endl;
+ kcout << "newoskrnl.dll: CatalogName: " << fs_fork_data->CatalogName << endl;
if (StringBuilder::Equals(forkName, fs_fork_data->ForkName) &&
StringBuilder::Equals(catalog->Name, fs_fork_data->CatalogName))
@@ -1029,18 +1029,18 @@ namespace Kernel::Detail
/***********************************************************************************/
Boolean fs_init_newfs(Void) noexcept
{
- kcout << "newoskrnl: Creating drives...\r";
+ kcout << "newoskrnl.dll: Creating drives...\r";
sMountpointInterface.A() = io_construct_main_drive();
sMountpointInterface.B() = io_construct_drive();
sMountpointInterface.C() = io_construct_drive();
sMountpointInterface.D() = io_construct_drive();
- kcout << "newoskrnl: Testing main drive...\r";
+ kcout << "newoskrnl.dll: Testing main drive...\r";
sMountpointInterface.A().fVerify(&sMountpointInterface.A().fPacket);
- kcout << "newoskrnl: Testing main drive [ OK ]...\r";
+ kcout << "newoskrnl.dll: Testing main drive [ OK ]...\r";
return true;
}
diff --git a/dev/ZKA/Sources/IndexableProperty.cxx b/dev/ZKA/Sources/IndexableProperty.cxx
index f65e6f3f..e63a7a63 100644
--- a/dev/ZKA/Sources/IndexableProperty.cxx
+++ b/dev/ZKA/Sources/IndexableProperty.cxx
@@ -52,7 +52,7 @@ namespace Kernel
indexer.AddFlag(kIndexerClaimed);
rt_copy_memory((VoidPtr)indexer.Leak().Path, (VoidPtr)filename, filenameLen);
- kcout << "newoskrnl: filesystem: index new file: " << filename << endl;
+ kcout << "newoskrnl.dll: filesystem: index new file: " << filename << endl;
}
}
} // namespace Indexer
diff --git a/dev/ZKA/Sources/KernelCheck.cxx b/dev/ZKA/Sources/KernelCheck.cxx
index db157601..4ef8a933 100644
--- a/dev/ZKA/Sources/KernelCheck.cxx
+++ b/dev/ZKA/Sources/KernelCheck.cxx
@@ -79,7 +79,7 @@ namespace Kernel
break;
}
case RUNTIME_CHECK_BOOTSTRAP: {
- CGDrawString("0x0000000A End of boot code, but nothing to continue.", start_y, x, panicTxt);
+ CGDrawString("0x0000000A End of boot code...", start_y, x, panicTxt);
RecoveryFactory::Recover();
break;
}
@@ -125,7 +125,7 @@ namespace Kernel
HardwareTimer timer(cMaxSeconds);
timer.Wait();
- kcout << "newoskrnl: Shutting down computer...\r";
+ kcout << "newoskrnl.dll: Shutting down computer...\r";
PowerFactoryInterface power(nullptr);
power.Shutdown();
diff --git a/dev/ZKA/Sources/MP.cxx b/dev/ZKA/Sources/MP.cxx
index 5df86fd6..b0716e77 100644
--- a/dev/ZKA/Sources/MP.cxx
+++ b/dev/ZKA/Sources/MP.cxx
@@ -102,6 +102,7 @@ namespace Kernel
if (!ret)
{
+ mp_do_context_switch_pre();
return mp_do_context_switch(image, stack_ptr, fStack) != 0;
}
@@ -122,12 +123,12 @@ namespace Kernel
///! @brief Default constructor.
HardwareThreadScheduler::HardwareThreadScheduler()
{
- kcout << "newoskrnl: initializing HardwareThreadScheduler." << endl;
+ kcout << "newoskrnl.dll: initializing HardwareThreadScheduler." << endl;
cSMPCoreName.GetKey() += "Property\\MPClass";
cSMPCoreName.GetValue() = (PropertyId)this;
- kcout << "newoskrnl: initialized HardwareThreadScheduler." << endl;
+ kcout << "newoskrnl.dll: initialized HardwareThreadScheduler." << endl;
}
///! @brief Default destructor.
diff --git a/dev/ZKA/Sources/NewFS+FileManager.cxx b/dev/ZKA/Sources/NewFS+FileManager.cxx
index 6f50733f..d6d7a826 100644
--- a/dev/ZKA/Sources/NewFS+FileManager.cxx
+++ b/dev/ZKA/Sources/NewFS+FileManager.cxx
@@ -20,12 +20,12 @@ namespace Kernel
MUST_PASS(Detail::fs_init_newfs());
fImpl = new NewFSParser();
- kcout << "newoskrnl: We are done here... (NewFilesystemManager).\r";
+ kcout << "newoskrnl.dll: We are done here... (NewFilesystemManager).\r";
}
NewFilesystemManager::~NewFilesystemManager()
{
- kcout << "newoskrnl: Destroying it...\r";
+ kcout << "newoskrnl.dll: Destroying it...\r";
if (fImpl)
{
diff --git a/dev/ZKA/Sources/PEFCodeManager.cxx b/dev/ZKA/Sources/PEFCodeManager.cxx
index 8dbfd029..11743373 100644
--- a/dev/ZKA/Sources/PEFCodeManager.cxx
+++ b/dev/ZKA/Sources/PEFCodeManager.cxx
@@ -166,6 +166,8 @@ namespace Kernel
rt_copy_memory((VoidPtr)((Char*)blob + sizeof(PEFCommandHeader)), blobRet, container_header->Size);
+ HAL::mm_update_page(hal_read_cr3(), 0, blobRet, HAL::eFlagsPresent | HAL::eFlagsUser | (container_header->Kind != kPefCode ? HAL::eFlagsRw : 0));
+
mm_delete_ke_heap(blob);
return blobRet;
}
diff --git a/dev/ZKA/Sources/ThreadLocalStorage.cxx b/dev/ZKA/Sources/ThreadLocalStorage.cxx
index 4ee2494e..c8befa98 100644
--- a/dev/ZKA/Sources/ThreadLocalStorage.cxx
+++ b/dev/ZKA/Sources/ThreadLocalStorage.cxx
@@ -72,7 +72,7 @@ Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* the_tib)
Encoder encoder;
const char* tibAsBytes = encoder.AsBytes(the_tib);
- kcout << "newoskrnl: checking for a valid cookie inside the TIB...\r";
+ kcout << "newoskrnl.dll: checking for a valid cookie inside the TIB...\r";
return tibAsBytes[0] == kCookieMag0 && tibAsBytes[1] == kCookieMag1 &&
tibAsBytes[2] == kCookieMag2;
@@ -87,7 +87,7 @@ EXTERN_C Bool tls_check_syscall_impl(Kernel::VoidPtr tib_ptr) noexcept
{
if (!tib_ptr)
{
- kcout << "newoskrnl: failing because of an invalid TIB...\r";
+ kcout << "newoskrnl.dll: failing because of an invalid TIB...\r";
return false;
}
@@ -95,10 +95,10 @@ EXTERN_C Bool tls_check_syscall_impl(Kernel::VoidPtr tib_ptr) noexcept
if (!tls_check_tib(tib_struct))
{
- kcout << "newoskrnl: crashing because of an invalid TIB...\r";
+ kcout << "newoskrnl.dll: crashing because of an invalid TIB...\r";
return false;
}
- kcout << "newoskrnl: Verification succeeded! staying alive...\r";
+ kcout << "newoskrnl.dll: Verification succeeded! staying alive...\r";
return true;
}
diff --git a/dev/ZKA/Sources/User.cxx b/dev/ZKA/Sources/User.cxx
index b3b62d8b..cb907387 100644
--- a/dev/ZKA/Sources/User.cxx
+++ b/dev/ZKA/Sources/User.cxx
@@ -5,7 +5,7 @@
* Copyright ZKA Technologies., all rights reserved.
*
* File: User.cxx
- * Purpose: User concept class.
+ * Purpose: User class, used to provide authentication and security.
*
* ========================================================
*/
@@ -100,7 +100,7 @@ namespace Kernel
delete[] password;
password = nullptr;
- kcout << "newoskrnl: Saved password...\r";
+ kcout << "newoskrnl.dll: Saved password...\r";
return true;
}
diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx
index 2d018b33..60dbdd1b 100644
--- a/dev/ZKA/Sources/UserProcessScheduler.cxx
+++ b/dev/ZKA/Sources/UserProcessScheduler.cxx
@@ -260,7 +260,7 @@ namespace Kernel
if (!process.StackReserve)
{
process.StackReserve = (UInt8*)mm_new_ke_heap(kSchedMaxStackSz, Yes, Yes);
- kcout << "newoskrnl: Use fallback reserve.\r";
+ kcout << "newoskrnl.dll: Use fallback reserve.\r";
}
}
else
@@ -419,7 +419,7 @@ namespace Kernel
cProcessScheduler = new UserProcessScheduler();
MUST_PASS(cProcessScheduler);
- kcout << "newoskrnl: Team capacity: " << number(cProcessScheduler->CurrentTeam().AsArray().Capacity()) << endl;
+ kcout << "newoskrnl.dll: Team capacity: " << number(cProcessScheduler->CurrentTeam().AsArray().Capacity()) << endl;
}
SizeT ret = cProcessScheduler->Run();
@@ -437,7 +437,7 @@ namespace Kernel
if (!stack || !frame_ptr || !image_ptr || new_pid < 0)
return false;
- kcout << "newoskrnl: Finding hardware thread...\r";
+ kcout << "newoskrnl.dll: Finding hardware thread...\r";
for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Count(); ++index)
{
@@ -456,7 +456,7 @@ namespace Kernel
ProcessHelper::TheCurrentPID() = new_pid;
- kcout << "newoskrnl: Found hardware thread...\r";
+ kcout << "newoskrnl.dll: Found hardware thread...\r";
bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr);