From 6274e822da7790961dc8f587cd83645f06e79245 Mon Sep 17 00:00:00 2001 From: Amlal Date: Mon, 9 Sep 2024 10:43:07 +0200 Subject: Bump repository. Signed-off-by: Amlal --- dev/FMT/SIGG.hxx | 39 ------- dev/ZBA/Sources/Thread.cxx | 5 +- dev/ZKA/HALKit/AMD64/HalProcessor.cxx | 168 ------------------------------ dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx | 170 +++++++++++++++++++++++++++++++ dev/ZKA/HALKit/AMD64/ReadMe.md | 4 +- 5 files changed, 173 insertions(+), 213 deletions(-) delete mode 100644 dev/FMT/SIGG.hxx delete mode 100644 dev/ZKA/HALKit/AMD64/HalProcessor.cxx create mode 100644 dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx (limited to 'dev') diff --git a/dev/FMT/SIGG.hxx b/dev/FMT/SIGG.hxx deleted file mode 100644 index a1e8400f..00000000 --- a/dev/FMT/SIGG.hxx +++ /dev/null @@ -1,39 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -/// @file SIGG.hxx -/// @brief SIGG is the extended PE32+ container for drivers, not to confused with .sign.exe, .sign.dll formats. - -#include -#include -#include - -#define kDriverSignedExt ".sigg" -#define kDriverExt ".sys" -#define kSignedDriverMagic "SIGG" - -/// @brief SIGG format, takes care of signed drivers. - -namespace Kernel -{ - namespace Detail - { - /// @brief Instablle Secure Driver record. - struct SIGNED_DRIVER_HEADER final - { - // doesn't change. - Char d_binary_magic[5]; - Int d_binary_version; - // can change. - Char d_binary_name[4096]; - UInt64 d_binary_checksum; - UInt64 d_binary_size; - Char d_binary_padding[512]; - }; - } // namespace Detail -} // namespace Kernel diff --git a/dev/ZBA/Sources/Thread.cxx b/dev/ZBA/Sources/Thread.cxx index ee9b73c1..8bcecc2c 100644 --- a/dev/ZBA/Sources/Thread.cxx +++ b/dev/ZBA/Sources/Thread.cxx @@ -15,9 +15,6 @@ #include #include -//! Get SIGG header from formats directory. -#include - EXTERN_C{ #include } @@ -138,7 +135,7 @@ namespace Boot } else { - writer.Write("NEWOSLDR: Invalid executable. (note: SIGG executables aren't loadable by default).\r"); + writer.Write("NEWOSLDR: Invalid executable.\r"); } } diff --git a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx deleted file mode 100644 index 24c123df..00000000 --- a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx +++ /dev/null @@ -1,168 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: HalProcessor.cxx - Purpose: Platform processor routines. - -------------------------------------------- */ - -#include - -/** - * @file HalProcessor.cxx - * @brief This file is about processor specific functions (in/out/cli/std...) - */ - -namespace Kernel::HAL -{ - /// @brief Set a PTE from pd_base. - /// @param virt_addr a valid virtual address. - /// @param phys_addr point to physical address. - /// @param flags the flags to put on the page. - /// @return Status code of page manip. - EXTERN_C Int32 mm_map_page(VoidPtr virt_addr, VoidPtr phys_addr, UInt32 flags) - { - rt_cli(); - - const auto cPAddrMask = 0x000ffffffffff000; - const auto cFlagsMask = 0xFFF; - - VoidPtr pml4_base = hal_read_cr3(); - - UIntPtr pd_idx = ((UIntPtr)virt_addr >> 22); - UIntPtr pte_idx = ((UIntPtr)virt_addr >> 12) & 0x03FF; - - // Now get pd_entry - volatile UInt64* pd_entry = (volatile UInt64*)(((UInt64)pml4_base) + (pd_idx * kPTEAlign)); - - UInt64 pt_base = *pd_entry & ~0xFFF; // Remove flags - - switch ((UIntPtr)phys_addr) - { - case kBadAddress: { - phys_addr = (VoidPtr)((pt_base & cPAddrMask) + ((UIntPtr)virt_addr & cFlagsMask)); - break; - } - default: { - break; - } - } - - // And then PTE - volatile UIntPtr* pt_entry = (volatile UIntPtr*)(pt_base + (pte_idx * kPTEAlign)); - - if (!(*pt_entry & eFlagsPresent)) - { - *pt_entry = ((UIntPtr)phys_addr) | (flags & 0xFFF) | eFlagsPresent; - - hal_invl_tlb((VoidPtr)virt_addr); - - kcout << "=================================================\r"; - kcout << "Post page allocation.\r"; - kcout << "=================================================\r"; - kcout << (*pt_entry & eFlagsPresent ? "Page Present." : "Page Not Present.") << endl; - kcout << (*pt_entry & eFlagsRw ? "Page RW." : "Page Not RW.") << endl; - kcout << (*pt_entry & eFlagsUser ? "Page User." : "Page Not User.") << endl; - - rt_sti(); - return 0; - } - - *pt_entry = ((UIntPtr)phys_addr) | (flags & 0xFFF) | eFlagsPresent; - - hal_invl_tlb((VoidPtr)virt_addr); - - kcout << "=================================================\r"; - kcout << "Post page change.\r"; - kcout << "=================================================\r"; - kcout << (*pt_entry & eFlagsPresent ? "Page Present." : "Page Not Present.") << endl; - kcout << (*pt_entry & eFlagsRw ? "Page RW." : "Page Not RW.") << endl; - kcout << (*pt_entry & eFlagsUser ? "Page User." : "Page Not User.") << endl; - - rt_sti(); - return 0; - } - - Void Out8(UInt16 port, UInt8 value) - { - asm volatile("outb %%al, %1" - : - : "a"(value), "Nd"(port) - : "memory"); - } - - Void Out16(UInt16 port, UInt16 value) - { - asm volatile("outw %%ax, %1" - : - : "a"(value), "Nd"(port) - : "memory"); - } - - Void Out32(UInt16 port, UInt32 value) - { - asm volatile("outl %%eax, %1" - : - : "a"(value), "Nd"(port) - : "memory"); - } - - UInt8 In8(UInt16 port) - { - UInt8 value = 0UL; - asm volatile("inb %1, %%al" - : "=a"(value) - : "Nd"(port) - : "memory"); - - return value; - } - - UInt16 In16(UInt16 port) - { - UInt16 value = 0UL; - asm volatile("inw %1, %%ax" - : "=a"(value) - : "Nd"(port) - : "memory"); - - return value; - } - - UInt32 In32(UInt16 port) - { - UInt32 value = 0UL; - asm volatile("inl %1, %%eax" - : "=a"(value) - : "Nd"(port) - : "memory"); - - return value; - } - - Void rt_halt() - { - asm volatile("hlt"); - } - - Void rt_cli() - { - asm volatile("cli"); - } - - Void rt_sti() - { - asm volatile("sti"); - } - - Void rt_cld() - { - asm volatile("cld"); - } - - Void rt_std() - { - asm volatile("std"); - } -} // namespace Kernel::HAL diff --git a/dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx b/dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx new file mode 100644 index 00000000..53b8b0b0 --- /dev/null +++ b/dev/ZKA/HALKit/AMD64/HalProcessorMgr.cxx @@ -0,0 +1,170 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + + File: HalProcessor.cxx + Purpose: Platform processor routines. + +------------------------------------------- */ + +#include + +/** + * @file HalProcessorMgr.cxx + * @brief CPU Processor managers. + */ + +namespace Kernel::HAL +{ + /// @brief Set a PTE from pd_base. + /// @param virt_addr a valid virtual address. + /// @param phys_addr point to physical address. + /// @param flags the flags to put on the page. + /// @return Status code of page manip. + EXTERN_C Int32 mm_map_page(VoidPtr virt_addr, VoidPtr phys_addr, UInt32 flags) + { + rt_cli(); + + const auto cPAddrMask = 0x000ffffffffff000; + const auto cFlagsMask = 0xFFF; + + VoidPtr pml4_base = hal_read_cr3(); + + UIntPtr pd_idx = ((UIntPtr)virt_addr >> 22); + UIntPtr pte_idx = ((UIntPtr)virt_addr >> 12) & 0x03FF; + + // Now get pd_entry + volatile UInt64* pd_entry = (volatile UInt64*)(((UInt64)pml4_base) + (pd_idx * kPTEAlign)); + + UInt64 pt_base = *pd_entry & ~0xFFF; // Remove flags + + switch ((UIntPtr)phys_addr) + { + case kBadAddress: { + phys_addr = (VoidPtr)((pt_base & cPAddrMask) + ((UIntPtr)virt_addr & cFlagsMask)); + break; + } + default: { + break; + } + } + + // And then PTE + volatile UIntPtr* pt_entry = (volatile UIntPtr*)(pt_base + (pte_idx * kPTEAlign)); + + if (!(*pt_entry & eFlagsPresent)) + { + *pt_entry = ((UIntPtr)phys_addr) | (flags & 0xFFF) | eFlagsPresent; + + hal_invl_tlb((VoidPtr)virt_addr); + + kcout << "=================================================\r"; + kcout << "Post page allocation.\r"; + kcout << "=================================================\r"; + + kcout << (*pt_entry & eFlagsPresent ? "Page Present." : "Page Not Present.") << endl; + kcout << (*pt_entry & eFlagsRw ? "Page RW." : "Page Not RW.") << endl; + kcout << (*pt_entry & eFlagsUser ? "Page User." : "Page Not User.") << endl; + + rt_sti(); + return 0; + } + + *pt_entry = ((UIntPtr)phys_addr) | (flags & 0xFFF) | eFlagsPresent; + + hal_invl_tlb((VoidPtr)virt_addr); + + kcout << "=================================================\r"; + kcout << "Post page change.\r"; + kcout << "=================================================\r"; + + kcout << (*pt_entry & eFlagsPresent ? "Page Present." : "Page Not Present.") << endl; + kcout << (*pt_entry & eFlagsRw ? "Page RW." : "Page Not RW.") << endl; + kcout << (*pt_entry & eFlagsUser ? "Page User." : "Page Not User.") << endl; + + rt_sti(); + return 0; + } + + Void Out8(UInt16 port, UInt8 value) + { + asm volatile("outb %%al, %1" + : + : "a"(value), "Nd"(port) + : "memory"); + } + + Void Out16(UInt16 port, UInt16 value) + { + asm volatile("outw %%ax, %1" + : + : "a"(value), "Nd"(port) + : "memory"); + } + + Void Out32(UInt16 port, UInt32 value) + { + asm volatile("outl %%eax, %1" + : + : "a"(value), "Nd"(port) + : "memory"); + } + + UInt8 In8(UInt16 port) + { + UInt8 value = 0UL; + asm volatile("inb %1, %%al" + : "=a"(value) + : "Nd"(port) + : "memory"); + + return value; + } + + UInt16 In16(UInt16 port) + { + UInt16 value = 0UL; + asm volatile("inw %1, %%ax" + : "=a"(value) + : "Nd"(port) + : "memory"); + + return value; + } + + UInt32 In32(UInt16 port) + { + UInt32 value = 0UL; + asm volatile("inl %1, %%eax" + : "=a"(value) + : "Nd"(port) + : "memory"); + + return value; + } + + Void rt_halt() + { + asm volatile("hlt"); + } + + Void rt_cli() + { + asm volatile("cli"); + } + + Void rt_sti() + { + asm volatile("sti"); + } + + Void rt_cld() + { + asm volatile("cld"); + } + + Void rt_std() + { + asm volatile("std"); + } +} // namespace Kernel::HAL diff --git a/dev/ZKA/HALKit/AMD64/ReadMe.md b/dev/ZKA/HALKit/AMD64/ReadMe.md index 0be48c77..bb936737 100644 --- a/dev/ZKA/HALKit/AMD64/ReadMe.md +++ b/dev/ZKA/HALKit/AMD64/ReadMe.md @@ -1,4 +1,4 @@ -AMD64 Hardware Abstraction Layer +# AMD64 Hardware Abstraction Layer - Supported CPU: AMD64 CPU -- Supported Firmware: EDK 2 \ No newline at end of file +- Supported Firmware: EDK 2 -- cgit v1.2.3