diff options
| author | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-11 08:52:00 +0200 |
|---|---|---|
| committer | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-11 08:52:00 +0200 |
| commit | f37c8cb8c86b73843b23d3690f1e251ec40a70b5 (patch) | |
| tree | a6737d9577a8cebdfc4c914bf334f14a6745ac5b /dev/ZKA | |
| parent | f2aee187a4e6f4cd0743d3f2a1de19fdcb1856c6 (diff) | |
IMP: Add FreeBitMap method in IBitMapAllocator.
IMP: Using a better memory strategy than a pre-allocated chunk of memory.
FIX: Moved compile_flags.txt only at root directory.
FIX: Refactor HandoverInformationHeader to HANDOVER_INFO_HEADER.
IMP: Handover version 1.16.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA')
23 files changed, 55 insertions, 143 deletions
diff --git a/dev/ZKA/ArchKit/compile_flags.txt b/dev/ZKA/ArchKit/compile_flags.txt deleted file mode 100644 index 0fa2cfc6..00000000 --- a/dev/ZKA/ArchKit/compile_flags.txt +++ /dev/null @@ -1,8 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --I$(HOME)/ --D__ZKA_AMD64__ --D__ED__ diff --git a/dev/ZKA/CFKit/compile_flags.txt b/dev/ZKA/CFKit/compile_flags.txt deleted file mode 100644 index a37ae6bf..00000000 --- a/dev/ZKA/CFKit/compile_flags.txt +++ /dev/null @@ -1,5 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ diff --git a/dev/ZKA/FirmwareKit/EFI/API.hxx b/dev/ZKA/FirmwareKit/EFI/API.hxx index c5c9de4c..6245e0e4 100644 --- a/dev/ZKA/FirmwareKit/EFI/API.hxx +++ b/dev/ZKA/FirmwareKit/EFI/API.hxx @@ -21,8 +21,6 @@ class BTextWriter; #define __BOOTKIT_NO_INCLUDE__ 1 #include <BootKit/BootKit.hxx> -#include <BootKit/Rsrc/NewBootFatal.rsrc> -#include <BootKit/Vendor/Qr.hxx> #include <Modules/CoreCG/FbRenderer.hxx> #endif // ifdef __NEWOSLDR__ diff --git a/dev/ZKA/FirmwareKit/Handover.hxx b/dev/ZKA/FirmwareKit/Handover.hxx index c398bd50..3332c463 100644 --- a/dev/ZKA/FirmwareKit/Handover.hxx +++ b/dev/ZKA/FirmwareKit/Handover.hxx @@ -8,7 +8,7 @@ * @file Handover.hxx * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) * @brief The handover boot protocol. - * @version 0.3 + * @version 1.15 * @date 2024-02-23 * * @copyright Copyright (c) 2024, ZKA Technologies @@ -19,20 +19,20 @@ #include <NewKit/Defines.hxx> -/* useful macros */ +/* Handover macros. */ #define kHandoverMagic 0xBADCC -#define kHandoverVersion 0x0115 +#define kHandoverVersion 0x0116 -/* per page. */ -#define kHandoverBitMapSz gib_cast(32) -#define kHandoverStructSz sizeof(HEL::HandoverInformationHeader) +/* Initial bitmap size. */ +#define kHandoverBitMapSz gib_cast(64) +#define kHandoverStructSz sizeof(HEL::HANDOVER_INFO_HEADER) namespace Kernel::HEL { /** - @brief the kind of executable we're loading. -*/ + @brief The executable type enum. + */ enum { kTypeKernel = 100, @@ -43,16 +43,18 @@ namespace Kernel::HEL }; /** - @brief The executable architecture. -*/ + @brief The executable architecture enum. + */ enum { - kArchAmd64 = 122, - kArchCount = 2, + kArchAMD64 = 122, + kArchARM64 = 123, + kArchRISCV = 124, + kArchCount = 3, }; - struct HandoverInformationHeader + struct HANDOVER_INFO_HEADER final { UInt64 f_Magic; UInt64 f_Version; @@ -105,11 +107,11 @@ namespace Kernel::HEL }; /// @brief Bootloader main type. - typedef void (*BootMainKind)(HandoverInformationHeader* handoverInfo); + typedef void (*BootMainKind)(HANDOVER_INFO_HEADER* handoverInfo); /// @brief Alias of bootloader main type. - typedef void (*HandoverProc)(HandoverInformationHeader* handoverInfo); + typedef void (*HandoverProc)(HANDOVER_INFO_HEADER* handoverInfo); } // namespace Kernel::HEL /// @brief Bootloader global header. -inline Kernel::HEL::HandoverInformationHeader* kHandoverHeader = nullptr; +inline Kernel::HEL::HANDOVER_INFO_HEADER* kHandoverHeader = nullptr; diff --git a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx index 71c8cb61..57565b5b 100644 --- a/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx +++ b/dev/ZKA/HALKit/AMD64/HalBMPMgr.cxx @@ -23,8 +23,35 @@ namespace Kernel { namespace Detail { - struct AllocatorTraits final + struct IBitMapAllocator final { + Bool FreeBitMap(VoidPtr page_ptr) + { + if (!page_ptr) return No; + + UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr); + + if (!ptr_bit_set[0] || + ptr_bit_set[0] != cBitMpMagic) + return No; + + 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; + kcout << "Size of pointer (MIB): " << number(MIB(ptr_bit_set[1])) << endl; + kcout << "Size of pointer (GIB): " << number(GIB(ptr_bit_set[1])) << endl; + kcout << "Size of pointer (TIB): " << number(TIB(ptr_bit_set[1])) << endl; + kcout << "Address Of Header: " << hex_number((UIntPtr)ptr_bit_set) << endl; + + ptr_bit_set[0] = cBitMpMagic; + ptr_bit_set[2] = No; + + mm_map_page(page_ptr, ~eFlagsPresent); + + return Yes; + } + /// @brief Iterate over availables pages for a free one. /// @return The new address which was found. VoidPtr FindBitMap(VoidPtr base_ptr, SizeT size, Bool rw, Bool user) noexcept @@ -35,8 +62,6 @@ 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 && @@ -97,9 +122,6 @@ 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)) - ke_stop(RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM); } return nullptr; @@ -113,8 +135,8 @@ namespace Kernel /// @return auto mm_alloc_bitmap(Boolean rw, Boolean user, SizeT size) -> VoidPtr { - VoidPtr ptr_new = nullptr; - Detail::AllocatorTraits traits; + VoidPtr ptr_new = nullptr; + Detail::IBitMapAllocator traits; ptr_new = traits.FindBitMap(kKernelVirtualStart, size, rw, user); @@ -124,29 +146,10 @@ namespace Kernel auto mm_free_bitmap(VoidPtr page_ptr) -> Bool { if (!page_ptr) - return false; - - UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr); - - if (!ptr_bit_set[0] || - ptr_bit_set[0] != cBitMpMagic) - return false; - - 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; - kcout << "Size of pointer (MIB): " << number(MIB(ptr_bit_set[1])) << endl; - kcout << "Size of pointer (GIB): " << number(GIB(ptr_bit_set[1])) << endl; - kcout << "Size of pointer (TIB): " << number(TIB(ptr_bit_set[1])) << endl; - kcout << "Address Of Header: " << hex_number((UIntPtr)ptr_bit_set) << endl; - - ptr_bit_set[0] = cBitMpMagic; - ptr_bit_set[2] = No; - - mm_map_page(page_ptr, ~eFlagsPresent); + return No; - return true; + Detail::IBitMapAllocator traits; + return traits.FreeBitMap(page_ptr); } } // namespace HAL } // namespace Kernel diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx index 4f9e8bac..9b9e0ac1 100644 --- a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx +++ b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx @@ -63,7 +63,7 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void); /// @brief Kernel init procedure. EXTERN_C void hal_init_platform( - Kernel::HEL::HandoverInformationHeader* HandoverHeader) + Kernel::HEL::HANDOVER_INFO_HEADER* HandoverHeader) { kHandoverHeader = HandoverHeader; diff --git a/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx b/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx index c617c45d..1bfaa879 100644 --- a/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx +++ b/dev/ZKA/HALKit/ARM64/HalKernelMain.cxx @@ -56,7 +56,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept; EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void); EXTERN_C void hal_init_platform( - Kernel::HEL::HandoverInformationHeader* HandoverHeader) + Kernel::HEL::HANDOVER_INFO_HEADER* HandoverHeader) { /* Setup globals. */ diff --git a/dev/ZKA/HALKit/compile_flags.txt b/dev/ZKA/HALKit/compile_flags.txt deleted file mode 100644 index d6e35511..00000000 --- a/dev/ZKA/HALKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ZKA_AMD64__ diff --git a/dev/ZKA/KernelKit/ThreadLocalStorage.hxx b/dev/ZKA/KernelKit/ThreadLocalStorage.hxx index ee272be3..a25d8926 100644 --- a/dev/ZKA/KernelKit/ThreadLocalStorage.hxx +++ b/dev/ZKA/KernelKit/ThreadLocalStorage.hxx @@ -32,11 +32,11 @@ Kernel::Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* the_tib); ///! @brief new ptr syscall. template <typename T> -T* tls_new_ptr(void); +T* tls_new_ptr(void) noexcept; ///! @brief delete ptr syscall. template <typename T> -Kernel::Boolean tls_delete_ptr(T* ptr); +Kernel::Boolean tls_delete_ptr(T* ptr) noexcept; template <typename T, typename... Args> T* tls_new_class(Args&&... args); diff --git a/dev/ZKA/KernelKit/compile_flags.txt b/dev/ZKA/KernelKit/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/ZKA/KernelKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/ZKA/Modules/ACPI/compile_flags.txt b/dev/ZKA/Modules/ACPI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/ACPI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/Modules/AHCI/compile_flags.txt b/dev/ZKA/Modules/AHCI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/AHCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/Modules/ATA/compile_flags.txt b/dev/ZKA/Modules/ATA/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/ATA/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/Modules/IEEE802/compile_flags.txt b/dev/ZKA/Modules/IEEE802/compile_flags.txt deleted file mode 100644 index 1fbcad21..00000000 --- a/dev/ZKA/Modules/IEEE802/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../Kernel --std=c++20 diff --git a/dev/ZKA/Modules/MBCI/compile_flags.txt b/dev/ZKA/Modules/MBCI/compile_flags.txt deleted file mode 100644 index df83bf4c..00000000 --- a/dev/ZKA/Modules/MBCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../../ --I../../Kernel --std=c++20 diff --git a/dev/ZKA/Modules/NVME/compile_flags.txt b/dev/ZKA/Modules/NVME/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/NVME/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/Modules/WiFi/compile_flags.txt b/dev/ZKA/Modules/WiFi/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/WiFi/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/Modules/XHCI/compile_flags.txt b/dev/ZKA/Modules/XHCI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/ZKA/Modules/XHCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/ZKA/NetworkKit/compile_flags.txt b/dev/ZKA/NetworkKit/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/ZKA/NetworkKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/ZKA/NewKit/compile_flags.txt b/dev/ZKA/NewKit/compile_flags.txt deleted file mode 100644 index 14c5bc51..00000000 --- a/dev/ZKA/NewKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --I../../../ diff --git a/dev/ZKA/Sources/FS/compile_flags.txt b/dev/ZKA/Sources/FS/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/ZKA/Sources/FS/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/ZKA/Sources/compile_flags.txt b/dev/ZKA/Sources/compile_flags.txt deleted file mode 100644 index a22ed881..00000000 --- a/dev/ZKA/Sources/compile_flags.txt +++ /dev/null @@ -1,7 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I../ --I$(HOME)/ --D__FSKIT_USE_NEFS__ --D__ZKA_AMD64__ diff --git a/dev/ZKA/compile_flags.txt b/dev/ZKA/compile_flags.txt deleted file mode 100644 index 290eeee3..00000000 --- a/dev/ZKA/compile_flags.txt +++ /dev/null @@ -1,9 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I$(HOME)/ --D__ZKA_AMD64__ --I../Vendor --D__x86_64__ --D__ED__ |
