summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/HALKit
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-10 18:42:15 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-10 18:42:15 +0200
commit408f58b0ef54f49d894023d6753f8d27d0bfd46d (patch)
treee3a963519dc4e5f4d6966e5b0c597be622dca76e /dev/ZKA/HALKit
parent5aef44da0ce752e7ac6bd9c95489942b1a0319ae (diff)
[ IMP ] Repository bump.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA/HALKit')
-rw-r--r--dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx42
-rw-r--r--dev/ZKA/HALKit/AMD64/HalControlRegister.s14
-rw-r--r--dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx43
-rw-r--r--dev/ZKA/HALKit/AMD64/HalHALComm.cxx (renamed from dev/ZKA/HALKit/AMD64/HalProcessor.cxx)53
-rw-r--r--dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm36
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMain.cxx13
-rw-r--r--dev/ZKA/HALKit/AMD64/Paging.hxx (renamed from dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx)51
-rw-r--r--dev/ZKA/HALKit/AMD64/Processor.hxx28
-rw-r--r--dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx4
-rw-r--r--dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx6
-rw-r--r--dev/ZKA/HALKit/ARM64/Paging.hxx (renamed from dev/ZKA/HALKit/ARM64/HalPageAlloc.hxx)0
-rw-r--r--dev/ZKA/HALKit/ARM64/Processor.hxx2
-rw-r--r--dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx4
13 files changed, 169 insertions, 127 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
index 7cb891b6..71c8cb61 100644
--- a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx
@@ -9,9 +9,9 @@
#define cBitMpMagic ((Kernel::UIntPtr)0x10210)
#ifdef __ZKA_AMD64__
-#include <HALKit/AMD64/HalPageAlloc.hxx>
+#include <HALKit/AMD64/Paging.hxx>
#elif defined(__ZKA_ARM64__)
-#include <HALKit/ARM64/HalPageAlloc.hxx>
+#include <HALKit/ARM64/Paging.hxx>
#endif
#include <NewKit/Defines.hxx>
@@ -35,6 +35,8 @@ namespace Kernel
{
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base_ptr);
+ mm_map_page(ptr_bit_set, eFlagsPresent | eFlagsRw);
+
if (ptr_bit_set[0] == cBitMpMagic)
{
if (ptr_bit_set[1] != 0 &&
@@ -44,7 +46,7 @@ namespace Kernel
ptr_bit_set[1] = size;
ptr_bit_set[2] = Yes;
- kcout << "BMPMgr: Allocated pointer!\r";
+ kcout << "BMPMgr: Allocated Range!\r";
kcout << "Magic Number: " << hex_number(ptr_bit_set[0]) << endl;
kcout << "Size of pointer (B): " << number(ptr_bit_set[1]) << endl;
kcout << "Size of pointer (KIB): " << number(KIB(ptr_bit_set[1])) << endl;
@@ -54,13 +56,13 @@ namespace Kernel
kcout << "Address Of BMP: " << hex_number((UIntPtr)ptr_bit_set) << endl;
if (rw)
- mm_map_page(base_ptr, eFlagsRw);
-
- if (user && rw)
- mm_map_page(base_ptr, eFlagsUser | eFlagsRw);
-
- if (user)
- mm_map_page(base_ptr, eFlagsUser);
+ mm_map_page(base_ptr, eFlagsRw | eFlagsPresent);
+ else if (user && rw)
+ mm_map_page(base_ptr, eFlagsUser | eFlagsRw | eFlagsPresent);
+ else if (user)
+ mm_map_page(base_ptr, eFlagsUser | eFlagsPresent);
+ else
+ mm_map_page(base_ptr, eFlagsPresent);
return (VoidPtr)ptr_bit_set;
}
@@ -73,7 +75,7 @@ namespace Kernel
ptr_bit_set[1] = size;
ptr_bit_set[2] = Yes;
- kcout << "BMPMgr: Allocated pointer!\r";
+ kcout << "BMPMgr: Allocated Range!\r";
kcout << "Magic Number: " << hex_number(ptr_bit_set[0]) << endl;
kcout << "Size of pointer (B): " << number(ptr_bit_set[1]) << endl;
kcout << "Size of pointer (KIB): " << number(KIB(ptr_bit_set[1])) << endl;
@@ -84,9 +86,12 @@ namespace Kernel
if (rw)
mm_map_page(base_ptr, eFlagsRw | eFlagsPresent);
-
- if (user)
+ else if (user && rw)
+ mm_map_page(base_ptr, eFlagsUser | eFlagsRw | eFlagsPresent);
+ else if (user)
mm_map_page(base_ptr, eFlagsUser | eFlagsPresent);
+ else
+ mm_map_page(base_ptr, eFlagsPresent);
return (VoidPtr)ptr_bit_set;
}
@@ -94,7 +99,7 @@ namespace Kernel
base_ptr = reinterpret_cast<VoidPtr>(reinterpret_cast<UIntPtr>(base_ptr) + (ptr_bit_set[0] != cBitMpMagic ? size : ptr_bit_set[1]));
if (reinterpret_cast<UIntPtr>(base_ptr) >= (kHandoverHeader->f_BitMapSize + base))
- break;
+ ke_stop(RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM);
}
return nullptr;
@@ -113,11 +118,6 @@ namespace Kernel
ptr_new = traits.FindBitMap(kKernelVirtualStart, size, rw, user);
- if (!ptr_new)
- {
- ke_stop(RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM);
- }
-
return ((UIntPtr*)ptr_new);
}
@@ -132,7 +132,7 @@ namespace Kernel
ptr_bit_set[0] != cBitMpMagic)
return false;
- kcout << "BMPMgr: Freed pointer!\r";
+ kcout << "BMPMgr: Freed Range!\r";
kcout << "Magic Number: " << hex_number(ptr_bit_set[0]) << endl;
kcout << "Size of pointer (B): " << number(ptr_bit_set[1]) << endl;
kcout << "Size of pointer (KIB): " << number(KIB(ptr_bit_set[1])) << endl;
@@ -144,7 +144,7 @@ namespace Kernel
ptr_bit_set[0] = cBitMpMagic;
ptr_bit_set[2] = No;
- mm_map_page(page_ptr, ~eFlagsPresent | ~eFlagsUser);
+ mm_map_page(page_ptr, ~eFlagsPresent);
return true;
}
diff --git a/dev/ZKA/HALKit/AMD64/HalControlRegister.s b/dev/ZKA/HALKit/AMD64/HalControlRegister.s
index 6fde8878..80b584ce 100644
--- a/dev/ZKA/HALKit/AMD64/HalControlRegister.s
+++ b/dev/ZKA/HALKit/AMD64/HalControlRegister.s
@@ -16,30 +16,30 @@
hal_invl_tlb:
invlpg (%rcx)
- ret
+ retq
hal_flush_tlb:
call hal_read_cr3
mov %rax, %rcx
call hal_write_cr3
- ret
+ retq
hal_read_cr3:
movq %cr3, %rax
- ret
+ retq
hal_read_cr0:
movq %cr0, %rax
- ret
+ retq
hal_read_cr2:
movq %cr2, %rax
- ret
+ retq
hal_write_cr3:
movq %rcx, %cr3
- ret
+ retq
hal_write_cr0:
movq %rcx, %cr0
- ret
+ retq
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
index b49a688f..c6b8303d 100644
--- a/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
@@ -8,10 +8,20 @@
#include <KernelKit/UserProcessScheduler.hxx>
#include <NewKit/String.hxx>
+namespace Kernel
+{
+ EXTERN UserProcessScheduler* cProcessScheduler;
+}
+
/// @brief Handle GPF fault.
/// @param rsp
EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
Kernel::UserProcessHelper::StartScheduling();
@@ -22,6 +32,11 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
Kernel::UserProcessHelper::StartScheduling();
@@ -30,6 +45,11 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessHelper::StartScheduling();
}
@@ -37,6 +57,11 @@ EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
Kernel::UserProcessHelper::StartScheduling();
@@ -47,6 +72,11 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
Kernel::ke_stop(RUNTIME_CHECK_PROCESS);
}
@@ -55,6 +85,11 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp)
{
+ if (Kernel::cProcessScheduler == nullptr)
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
+
Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash();
Kernel::UserProcessHelper::StartScheduling();
@@ -68,12 +103,12 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr
{
if (rcx <= (kSyscalls.Count() - 1))
{
- kcout << "syscall: enter.\r";
+ kcout << "syscall: Enter Fn.\r";
if (kSyscalls[rcx].fHooked)
(kSyscalls[rcx].fProc)((Kernel::VoidPtr)rdx);
- kcout << "syscall: exit.\r";
+ kcout << "syscall: Exit Fn.\r";
}
}
@@ -84,11 +119,11 @@ EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr
{
if (rcx <= (kSyscalls.Count() - 1))
{
- kcout << "kerncall: enter.\r";
+ kcout << "kerncall: Enter Fn.\r";
if (kKerncalls[rcx].fHooked)
(kKerncalls[rcx].fProc)((Kernel::VoidPtr)rdx);
- kcout << "kerncall: exit.\r";
+ kcout << "kerncall: Exit Fn.\r";
}
}
diff --git a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx b/dev/ZKA/HALKit/AMD64/HalHALComm.cxx
index 0d20d0b7..d19441c8 100644
--- a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalHALComm.cxx
@@ -49,7 +49,7 @@ namespace Kernel::HAL
pg_set_used(i);
kcout << "Page has been allocated at index: " << number(i) << endl;
- return (VoidPtr)(i * cPageSz); // Return physical address of the page
+ return (VoidPtr)((UIntPtr)kKernelPageStart + (i * cPageSz)); // Return physical address of the page
}
}
@@ -90,58 +90,65 @@ namespace Kernel::HAL
const auto cIndexAlign = kPageAlign;
// Now get pml4_entry
- volatile UIntPtr* pml4_entry = (volatile UInt64*)((pml4_base[pml4_index + cIndexAlign]));
+ volatile UIntPtr* pml4_entry = (volatile UInt64*)((pml4_base[pml4_index]));
if (!(*pml4_entry & eFlagsPresent))
{
auto pml_addr = MM::pg_allocate();
- *pml4_entry = (UIntPtr)pml_addr | eFlagsPresent | eFlagsRw;
+ *pml4_entry = (UIntPtr)pml_addr | (eFlagsPresent | eFlagsRw) & 0xFFF;
}
- volatile UIntPtr* pdpt_entry = (volatile UIntPtr*)(pml4_entry[pdpt_index + cIndexAlign]);
+ volatile UIntPtr* pdpt_entry = (volatile UIntPtr*)(pml4_entry[pdpt_index]);
if (!(*pdpt_entry & eFlagsPresent))
{
auto pdpt_addr = MM::pg_allocate();
- *pdpt_entry = (UIntPtr)pdpt_addr | eFlagsPresent | eFlagsRw;
+ *pdpt_entry = (UIntPtr)pdpt_addr | (eFlagsPresent | eFlagsRw) & 0xFFF;
}
- volatile UIntPtr* pd_entry = (volatile UIntPtr*)(pdpt_entry[pd_index + cIndexAlign]);
+ volatile UIntPtr* pd_entry = (volatile UIntPtr*)(pdpt_entry[pd_index]);
if (!(*pd_entry & eFlagsPresent))
{
auto pd_addr = MM::pg_allocate();
- *pd_entry = (UIntPtr)pd_addr | eFlagsPresent | eFlagsRw;
+ *pd_entry = (UIntPtr)pd_addr | (eFlagsPresent | eFlagsRw) & 0xFFF;
}
- volatile UIntPtr* pt_entry = (volatile UIntPtr*)(pd_entry[pt_index + cIndexAlign]);
+ volatile UIntPtr* pt_entry = (volatile UIntPtr*)(pd_entry[pd_index]);
- if (!(pt_entry[offset] & eFlagsPresent))
+ if (!(pt_entry[pt_index] & eFlagsPresent))
{
- PTE* frame = (PTE*)pt_entry[offset];
+ PTE* page_frame = (PTE*)pt_entry[pt_index];
- MM::pg_delete((VoidPtr)frame->PhysicalAddress);
+ if (page_frame->PhysicalAddress == 0)
+ {
+ auto pt_addr = MM::pg_allocate();
+ pt_entry[pt_index] = (UIntPtr)pt_addr | eFlagsPresent | (flags & 0xFFF);
+ }
+ else
+ {
+ pt_entry[pt_index] = page_frame->PhysicalAddress | eFlagsPresent | (flags & 0xFFF);
+ }
- auto pt_addr = MM::pg_allocate();
- pt_entry[offset] = (UIntPtr)pt_addr | eFlagsPresent | flags;
+ kcout << (page_frame->Present ? "Page Present." : "Page Not Present.") << endl;
+ kcout << (page_frame->Wr ? "Page W/R." : "Page Not W/R.") << endl;
+ kcout << (page_frame->User ? "Page User." : "Page Not User.") << endl;
- kcout << (frame->Present ? "Page Present." : "Page Not Present.") << endl;
- kcout << (frame->Rw ? "Page RW." : "Page Not RW.") << endl;
- kcout << (frame->User ? "Page User." : "Page Not User.") << endl;
+ kcout << "Physical Address: " << hex_number(page_frame->PhysicalAddress) << endl;
- kcout << "Physical Address: " << number(frame->PhysicalAddress) << endl;
+ hal_flush_tlb();
}
else
{
- PTE* frame = (PTE*)pt_entry[offset];
+ PTE* page_frame = (PTE*)pt_entry[pt_index];
- pt_entry[offset] = (UIntPtr)(frame->PhysicalAddress / cPageSz) | flags;
+ pt_entry[pt_index] = page_frame->PhysicalAddress | (flags & 0xFFF);
- kcout << (frame->Present ? "Page Present." : "Page Not Present.") << endl;
- kcout << (frame->Rw ? "Page RW." : "Page Not RW.") << endl;
- kcout << (frame->User ? "Page User." : "Page Not User.") << endl;
+ kcout << (page_frame->Present ? "Page Present." : "Page Not Present.") << endl;
+ kcout << (page_frame->Wr ? "Page W/R." : "Page Not W/R.") << endl;
+ kcout << (page_frame->User ? "Page User." : "Page Not User.") << endl;
- kcout << "Physical Address: " << number(frame->PhysicalAddress) << endl;
+ kcout << "Physical Address: " << hex_number(page_frame->PhysicalAddress) << endl;
}
rt_sti();
diff --git a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
index e2dec1f9..cdbb2d1f 100644
--- a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
@@ -52,7 +52,7 @@ IntNormal 5
;; Invalid opcode interrupt
__ZKA_INT_6:
- cli
+ cld
push rax
@@ -61,14 +61,14 @@ __ZKA_INT_6:
pop rax
- sti
+ std
o64 iret
IntNormal 7
;; Invalid opcode interrupt
__ZKA_INT_8:
- cli
+ cld
push rax
@@ -77,7 +77,7 @@ __ZKA_INT_8:
pop rax
- sti
+ std
o64 iret
IntNormal 9
@@ -87,7 +87,7 @@ IntExp 11
IntExp 12
__ZKA_INT_13:
- cli
+ cld
push rax
@@ -96,11 +96,11 @@ __ZKA_INT_13:
pop rax
- sti
+ std
o64 iret
__ZKA_INT_14:
- cli
+ cld
push rax
@@ -109,7 +109,7 @@ __ZKA_INT_14:
pop rax
- sti
+ std
o64 iret
IntNormal 15
@@ -156,7 +156,7 @@ IntNormal 49
[extern hal_kernel_call_enter]
__ZKA_INT_50:
- cli
+ cld
push r8
push r9
@@ -171,11 +171,11 @@ __ZKA_INT_50:
pop r9
pop r8
- sti
+ std
o64 iret
__ZKA_INT_51:
- cli
+ cld
push rcx
push rdx
@@ -191,7 +191,7 @@ __ZKA_INT_51:
pop rdx
pop rcx
- sti
+ std
o64 iret
[extern hal_on_ap_startup]
@@ -209,9 +209,9 @@ SZ_32 equ 1 << 6
LONG_MODE equ 1 << 5
__ZKA_INT_52:
- cli
+ cld
jmp hal_on_ap_startup
- sti
+ std
ret
IntNormal 53
@@ -234,7 +234,7 @@ section .text
[global hal_load_gdt]
hal_load_gdt:
- cli
+ cld
lgdt [rcx]
@@ -254,7 +254,7 @@ hal_load_gdt:
extern hal_real_init
hal_reload_segments:
- sti
+ std
;; Write address of syscall handler.
mov rdx, [mp_system_call_handler]
@@ -308,9 +308,9 @@ mp_system_call_handler:
o64 sysret
hal_load_idt:
- cli
+ cld
lidt [rcx]
- sti
+ std
ret
section .data
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
index bc2a94ce..4f9e8bac 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
@@ -53,9 +53,6 @@ namespace Kernel::HAL
EXTERN void mp_get_cores(Kernel::voidPtr rsdPtr) noexcept;
} // namespace Kernel::HAL
-Kernel::Property cKernelVersion;
-Kernel::User cUserSuper{Kernel::RingKind::kRingSuperUser, kSuperUser};
-
EXTERN_C Kernel::UInt8* mp_user_switch_proc;
EXTERN_C Kernel::UInt8* mp_user_switch_proc_stack_end;
EXTERN_C Kernel::VoidPtr mp_user_switch_proc_real;
@@ -84,7 +81,7 @@ EXTERN_C void hal_init_platform(
reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_BitMapStart));
// get physical address start.
- kKernelBitMpStart = reinterpret_cast<Kernel::VoidPtr>(
+ kKernelPageStart = reinterpret_cast<Kernel::VoidPtr>(
reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_PageStart));
STATIC CONST auto cEntriesCount = 6;
@@ -123,18 +120,10 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept
if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled)
Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- kcout << "Creating filesystem and such.\r";
-
auto fs = Kernel::mm_new_class<Kernel::NeFileSystemMgr>();
- MUST_PASS(fs);
-
Kernel::NeFileSystemMgr::Mount(fs);
- const auto cPassword = "ZKA_KERNEL_AUTHORITY";
-
- cUserSuper.TrySave(cPassword);
-
ke_dll_entrypoint();
Kernel::ke_stop(RUNTIME_CHECK_FAILED);
diff --git a/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx b/dev/ZKA/HALKit/AMD64/Paging.hxx
index ecf739a3..23ac68e1 100644
--- a/dev/ZKA/HALKit/AMD64/HalPageAlloc.hxx
+++ b/dev/ZKA/HALKit/AMD64/Paging.hxx
@@ -23,7 +23,7 @@
#endif //! kPageAlign
#ifndef kPageSize
-#define kPageSize (0x200)
+#define kPageSize (0x100)
#endif // !kPageSize
#ifndef kAlign
@@ -41,23 +41,40 @@ EXTERN_C Kernel::VoidPtr hal_read_cr3(); // @brief Page table.
namespace Kernel::HAL
{
+
+ struct PACKED ZKA_PTE_GENERIC
+ {
+ Bool Present : 1;
+ Bool Wr : 1;
+ Bool User : 1;
+ Bool Wt : 1;
+ Int32 Dirty : 1;
+ Int32 MemoryType : 1;
+ Int32 Global : 1;
+ Int32 Resvered_0 : 3;
+ UInt64 PhysicalAddress : 36;
+ Int32 Reserved_1 : 10;
+ Bool ProtectionKey : 5;
+ Bool ExecDisable : 1;
+ };
+
+ /// @brief Final page entry (Not PML, PDPT)
struct PACKED ZKA_PTE final
{
- UInt8 Present : 1;
- UInt8 Rw : 1;
- UInt8 User : 1;
- UInt8 Wt : 1;
- UInt8 Cache : 1;
- UInt8 Accessed : 1;
- UInt8 Dirty : 1;
- UInt8 PageSize : 1;
- UInt8 Global : 1;
- UInt8 Available : 3;
- UInt32 PhysicalAddress : 20;
- UInt8 Reserved : 6;
- UInt8 ProtectionKey : 1;
- UInt8 ExecDisable : 1;
- UInt8 ReservedEx : 3;
+ Bool Present : 1;
+ Bool Wr : 1;
+ Bool User : 1;
+ Bool Wt : 1;
+ Bool Cache : 1;
+ Bool Accessed : 1;
+ Int32 Dirty : 1;
+ Int32 MemoryType : 1;
+ Int32 Global : 1;
+ Int32 Resvered_0 : 3;
+ UInt64 PhysicalAddress : 36;
+ Int32 Reserved_1 : 10;
+ Bool ProtectionKey : 5;
+ Bool ExecDisable : 1;
};
namespace Detail
@@ -85,7 +102,7 @@ namespace Kernel::HAL
struct ALIGN(0x08) ZKA_PDE final
{
- ZKA_PTE ALIGN(kPageAlign) Pte[kPageMax];
+ ZKA_PTE ALIGN(kPageAlign) fEntries[kPageMax];
};
auto mm_alloc_bitmap(Boolean rw, Boolean user, SizeT size) -> VoidPtr;
diff --git a/dev/ZKA/HALKit/AMD64/Processor.hxx b/dev/ZKA/HALKit/AMD64/Processor.hxx
index 7da1adea..42f4e287 100644
--- a/dev/ZKA/HALKit/AMD64/Processor.hxx
+++ b/dev/ZKA/HALKit/AMD64/Processor.hxx
@@ -17,7 +17,7 @@
#include <NewKit/Defines.hxx>
#include <NewKit/Utils.hxx>
#include <FirmwareKit/Handover.hxx>
-#include <HALKit/AMD64/HalPageAlloc.hxx>
+#include <HALKit/AMD64/Paging.hxx>
EXTERN_C
{
@@ -27,11 +27,6 @@ EXTERN_C
#define IsActiveLow(FLG) (FLG & 2)
#define IsLevelTriggered(FLG) (FLG & 8)
-#define cPageSz kPageSize // 4KB pages
-#define cTotalPgMem mib_cast(16) // 16MB total memory
-#define cTotalPages (cTotalPgMem / cPageSz) // Total number of pages
-#define cBmpPgSz (cTotalPages / 8) // 1 bit per page in the bitmap
-
#define kInterruptGate (0x8E)
#define kTrapGate (0xEF)
#define kTaskGate (0b10001100)
@@ -45,12 +40,11 @@ namespace Kernel
{
UInt16 OffsetLow; // offset bits 0..15
UInt16 Selector; // a code segment selector in GDT or LDT
- UInt8
- Ist; // bits 0..2 holds Interrupt Stack Table offset, rest of bits zero.
- UInt8 TypeAttributes; // gate type, dpl, and p fields
- UInt16 OffsetMid; // offset bits 16..31
- UInt32 OffsetHigh; // offset bits 32..63
- UInt32 Zero; // reserved
+ UInt8 Ist;
+ UInt8 TypeAttributes;
+ UInt16 OffsetMid;
+ UInt32 OffsetHigh;
+ UInt32 Zero; // reserved
};
} // namespace Detail::AMD64
} // namespace Kernel
@@ -60,9 +54,9 @@ namespace Kernel::HAL
/// @brief Virtual memory flags.
enum
{
- eFlagsPresent = 1,
- eFlagsRw = 2,
- eFlagsUser = 4,
+ eFlagsPresent = 0x1,
+ eFlagsRw = 0x2,
+ eFlagsUser = 0x4,
eFlagsCount = 3,
};
@@ -299,6 +293,6 @@ EXTERN_C Kernel::Void hal_load_gdt(Kernel::HAL::RegisterGDT ptr);
#define kKernelInterruptId 0x32
inline Kernel::VoidPtr kKernelVirtualStart = nullptr;
-inline Kernel::UIntPtr kKernelBitMpSize = 0UL;
+inline Kernel::UIntPtr kKernelBitMpSize = 0UL;
-inline Kernel::VoidPtr kKernelBitMpStart = nullptr;
+inline Kernel::VoidPtr kKernelPageStart = nullptr;
diff --git a/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx b/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
index 7eaa5bbb..9fcab945 100644
--- a/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
+++ b/dev/ZKA/HALKit/AMD64/Storage/AHCI.cxx
@@ -110,13 +110,13 @@ Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT
/***
@brief Getter, gets the number of sectors inside the drive.
*/
-Kernel::SizeT drv_std_get_sector_count()
+Kernel::SizeT drv_get_sector_count()
{
return 0;
}
/// @brief Get the drive size.
-Kernel::SizeT drv_std_get_drv_size()
+Kernel::SizeT drv_get_size()
{
return 0;
}
diff --git a/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx b/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
index bc1a1f22..aa72ad56 100644
--- a/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
+++ b/dev/ZKA/HALKit/AMD64/Storage/ATA-PIO.cxx
@@ -185,15 +185,15 @@ Boolean drv_std_detected(Void)
/***
@brief Getter, gets the number of sectors inside the drive.
*/
-Kernel::SizeT drv_std_get_sector_count()
+Kernel::SizeT drv_get_sector_count()
{
return (kATAData[61] << 16) | kATAData[60];
}
/// @brief Get the drive size.
-Kernel::SizeT drv_std_get_drv_size()
+Kernel::SizeT drv_get_size()
{
- return drv_std_get_sector_count() * kATASectorSize;
+ return drv_get_sector_count() * kATASectorSize;
}
#endif /* ifdef __ATA_PIO__ */
diff --git a/dev/ZKA/HALKit/ARM64/HalPageAlloc.hxx b/dev/ZKA/HALKit/ARM64/Paging.hxx
index 6cfeacf3..6cfeacf3 100644
--- a/dev/ZKA/HALKit/ARM64/HalPageAlloc.hxx
+++ b/dev/ZKA/HALKit/ARM64/Paging.hxx
diff --git a/dev/ZKA/HALKit/ARM64/Processor.hxx b/dev/ZKA/HALKit/ARM64/Processor.hxx
index dfba0293..4c46f294 100644
--- a/dev/ZKA/HALKit/ARM64/Processor.hxx
+++ b/dev/ZKA/HALKit/ARM64/Processor.hxx
@@ -47,4 +47,4 @@ inline Kernel::UIntPtr kKernelBitMpSize = 0UL;
inline Kernel::VoidPtr kKernelPhysicalStart = nullptr;
-#include <HALKit/ARM64/HalPageAlloc.hxx>
+#include <HALKit/ARM64/Paging.hxx>
diff --git a/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx b/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
index f1f6c718..a479da93 100644
--- a/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
+++ b/dev/ZKA/HALKit/ARM64/Storage/HalFlash.cxx
@@ -32,7 +32,7 @@ namespace Kernel
/// @brief get sector count.
/// @return drive sector count.
- SizeT drv_std_get_sector_count(Int32 slot)
+ SizeT drv_get_sector_count(Int32 slot)
{
if (slot > cMaxFlash)
return 0;
@@ -42,7 +42,7 @@ namespace Kernel
/// @brief get device size.
/// @return drive size
- SizeT drv_std_get_drv_size(Int32 slot)
+ SizeT drv_get_size(Int32 slot)
{
if (slot > cMaxFlash)
return 0;