diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-18 21:39:29 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-18 21:39:29 +0200 |
| commit | da70596895d8135e08f8caac6978117697b4c021 (patch) | |
| tree | 2516785b5434df8453687f05dc8dd877438901ab /dev/Kernel/HALKit/ARM64 | |
| parent | 005de79004c9d30e64bdee6e14e06f9d47d1f2ab (diff) | |
[REFACTOR]
Improved project structure.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/HALKit/ARM64')
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/.gitkeep | 0 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/APM/.gitkeep | 0 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalHart.cxx | 29 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalKernelMain.cxx | 181 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalPageAlloc.hxx | 108 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalPageInternal.S | 5 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalScheduler.cxx | 31 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/HalTimer.cxx | 16 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/MBCI/.keepme | 0 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/Processor.hxx | 56 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/ReadMe.md | 3 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/Storage/.gitkeep | 0 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/ARM64/Storage/HalFlash.cxx | 66 |
13 files changed, 0 insertions, 495 deletions
diff --git a/dev/Kernel/HALKit/ARM64/.gitkeep b/dev/Kernel/HALKit/ARM64/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/ARM64/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/ARM64/APM/.gitkeep b/dev/Kernel/HALKit/ARM64/APM/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/ARM64/APM/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/ARM64/HalHart.cxx b/dev/Kernel/HALKit/ARM64/HalHart.cxx deleted file mode 100644 index d2a91bf3..00000000 --- a/dev/Kernel/HALKit/ARM64/HalHart.cxx +++ /dev/null @@ -1,29 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> - -// bugs = 0 - -namespace Kernel -{ - /// @brief wakes up thread. - /// wakes up thread from hang. - void mp_wakeup_thread(HAL::StackFrame* stack) - { - rt_do_context_switch(stack); - } - - /// @brief makes the thread sleep on a loop. - /// hooks and hangs thread to prevent code from executing. - void mp_hang_thread(HAL::StackFrame* stack) - { - while (true) - { - /* nohing, code is spinning */ - } - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/ARM64/HalKernelMain.cxx b/dev/Kernel/HALKit/ARM64/HalKernelMain.cxx deleted file mode 100644 index ef955ba7..00000000 --- a/dev/Kernel/HALKit/ARM64/HalKernelMain.cxx +++ /dev/null @@ -1,181 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <Modules/CoreCG/FbRenderer.hxx> -#include <FirmwareKit/Handover.hxx> -#include <KernelKit/FileManager.hxx> -#include <KernelKit/Framebuffer.hxx> -#include <KernelKit/Heap.hxx> -#include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/ProcessHeap.hxx> -#include <NewKit/Json.hxx> -#include <Modules/CoreCG/Accessibility.hxx> -#include <KernelKit/CodeManager.hxx> -#include <Modules/ACPI/ACPIFactoryInterface.hxx> -#include <NetworkKit/IPC.hxx> - -#define KERNEL_INIT(X) \ - X; \ - Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); - -/// @brief This symbol is the kernel main symbol. -EXTERN_C void KeMain(); - -EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; - -struct PACKED HeapAllocInfo final -{ - Kernel::VoidPtr fThe; - Kernel::Size fTheSz; -}; - -struct PACKED ProcessBlockInfo final -{ - THREAD_INFORMATION_BLOCK* fTIB; - THREAD_INFORMATION_BLOCK* fPIB; -}; - -struct PACKED ProcessExitInfo final -{ - STATIC constexpr auto cReasonLen = 512; - - Kernel::Int64 fCode; - Kernel::Char fReason[cReasonLen]; -}; - -EXTERN_C void hal_init_platform( - Kernel::HEL::HandoverInformationHeader* HandoverHeader) -{ - /* Setup globals. */ - - kHandoverHeader = HandoverHeader; - - if (kHandoverHeader->f_Magic != kHandoverMagic && - kHandoverHeader->f_Version != kHandoverVersion) - { - return; - } - - kKernelVirtualSize = HandoverHeader->f_VirtualSize; - kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>( - reinterpret_cast<Kernel::UIntPtr>(HandoverHeader->f_VirtualStart) + cHeapStartOffset); - - kKernelPhysicalStart = HandoverHeader->f_PhysicalStart; - - // Register the basic SCI functions. - - constexpr auto cSerialAlertInterrupt = 0x10; - constexpr auto cTlsInterrupt = 0x11; - constexpr auto cTlsInstallInterrupt = 0x12; - constexpr auto cNewInterrupt = 0x13; - constexpr auto cDeleteInterrupt = 0x14; - constexpr auto cExitInterrupt = 0x15; - constexpr auto cLastExitInterrupt = 0x16; - constexpr auto cCatalogOpen = 0x17; - constexpr auto cForkRead = 0x18; - constexpr auto cForkWrite = 0x19; - constexpr auto cCatalogClose = 0x20; - constexpr auto cCatalogRemove = 0x21; - constexpr auto cCatalogCreate = 0x22; - constexpr auto cRebootInterrupt = 0x23; - constexpr auto cShutdownInterrupt = 0x24; - constexpr auto cLPCSendMsg = 0x25; - constexpr auto cLPCOpenMsg = 0x26; - constexpr auto cLPCCloseMsg = 0x27; - constexpr auto cLPCSanitizeMsg = 0x28; - - kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - const char* msg = (const char*)rdx; - Kernel::kcout << "Kernel: " << msg << "\r"; - }; - - kSyscalls[cTlsInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - if (tls_check_syscall_impl(rdx) == false) - { - Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); - } - }; - - kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::ipc_sanitize_packet(reinterpret_cast<Kernel::IPC_MESSAGE_STRUCT*>(rdx)); - }; - - kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - // get HAC struct. - HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); - - if (!rdxInf) - return; - - // assign the fThe field with the pointer. - rdxInf->fThe = Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().New(rdxInf->fTheSz); - }; - - kSyscalls[cDeleteInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - // get HAC struct. - HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); - - if (!rdxInf) - return; - - // delete ptr with sz in mind. - Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Delete(rdxInf->fThe, rdxInf->fTheSz); - }; - - kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessBlockInfo* rdxPb = reinterpret_cast<ProcessBlockInfo*>(rdx); - - if (!rdxPb) - return; - - // install the fTIB and fPIB. - rt_install_tib(rdxPb->fTIB, rdxPb->fPIB); - }; - - kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx); - - if (!rdxEi) - return; - - Kernel::kcout << "newoskrnl: " << rdxEi->fReason << "\r"; - Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Exit(rdxEi->fCode); - }; - - kSyscalls[cLastExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx); - - if (!rdxEi) - return; - - rdxEi->fCode = Kernel::sched_get_exit_code(); - }; - - kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr); - acpi.Reboot(); - }; - - kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr); - acpi.Shutdown(); - }; - - kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cTlsInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cDeleteInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cNewInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cExitInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cLastExitInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cShutdownInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true; - kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true; - - KERNEL_INIT(KeMain()); -} diff --git a/dev/Kernel/HALKit/ARM64/HalPageAlloc.hxx b/dev/Kernel/HALKit/ARM64/HalPageAlloc.hxx deleted file mode 100644 index ef3b6db1..00000000 --- a/dev/Kernel/HALKit/ARM64/HalPageAlloc.hxx +++ /dev/null @@ -1,108 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -/** --------------------------------------------------- - - * THIS FILE CONTAINS CODE FOR ARMV8 PAGING. - -------------------------------------------------------- */ - -#include <NewKit/Defines.hxx> - -#ifndef kPTEMax -#define kPTEMax (0x200) -#endif //! kPTEMax - -#ifndef kPTEAlign -#define kPTEAlign (0x1000) -#endif //! kPTEAlign - -#ifndef kPTESize -#define kPTESize (0x1000) -#endif // !kPTESize - -//! short format address range - -#define c16KBPage 0b000 -#define c8KBPage 0b001 -#define c4KBPage 0b010 -#define c2KBPage 0b011 -#define c1KBPage 0b100 -#define c512BPage 0b101 -#define c256BPage 0b110 -#define c128BPage 0b111 - -/// Long format address range - -#define cPageMAll \ - { \ - 0b000, 0b000 \ - } -#define cPageMToMax(M) \ - { \ - M, 0b000 \ - } -#define cPageMaxToM(M) \ - { \ - 0b000, M \ - } -#define cPageMToN(M, N) \ - { \ - M, N \ - } - -namespace Kernel::HAL -{ - struct PACKED LongDescLevel3 final - { - Boolean Present : 1; - Boolean Rw : 1; - UInt16 Lpat : 9; - UInt32 Address : 27; - UInt32 Sbzp : 12; - UInt32 UPat : 11; - }; - - namespace Detail - { - enum class ControlRegisterBits - { - ProtectedModeEnable = 0, - MonitorCoProcessor = 1, - Emulation = 2, - TaskSwitched = 3, - ExtensionType = 4, - NumericError = 5, - WriteProtect = 16, - AlignementMask = 18, - NotWriteThrough = 29, - CacheDisable = 30, - PageEnable = 31, - }; - - inline UInt8 control_register_cast(ControlRegisterBits reg) - { - return static_cast<UInt8>(reg); - } - } // namespace Detail - - struct PageDirectory64 final - { - LongDescLevel3 ALIGN(kPTEAlign) Pte[kPTEMax]; - }; - - VoidPtr hal_alloc_page(Boolean rw, Boolean user, SizeT size); -} // namespace Kernel::HAL - -namespace Kernel -{ - typedef HAL::LongDescLevel3 PTE; - typedef HAL::PageDirectory64 PDE; -} // namespace Kernel - -EXTERN_C void hal_flush_tlb(); diff --git a/dev/Kernel/HALKit/ARM64/HalPageInternal.S b/dev/Kernel/HALKit/ARM64/HalPageInternal.S deleted file mode 100644 index 8fcf40ff..00000000 --- a/dev/Kernel/HALKit/ARM64/HalPageInternal.S +++ /dev/null @@ -1,5 +0,0 @@ -.text - -hal_flush_tlb: - tlbi - ret diff --git a/dev/Kernel/HALKit/ARM64/HalScheduler.cxx b/dev/Kernel/HALKit/ARM64/HalScheduler.cxx deleted file mode 100644 index 51cbfe4b..00000000 --- a/dev/Kernel/HALKit/ARM64/HalScheduler.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/ProcessScheduler.hxx> - -using namespace Kernel; - -Void PROCESS_HEADER_BLOCK::SetEntrypoint(UIntPtr& imageStart) noexcept -{ - if (imageStart == 0) - this->Crash(); - - this->StackFrame->BP = imageStart; - this->StackFrame->SP = this->StackFrame->BP; -} - -namespace Kernel -{ - bool rt_check_stack(HAL::StackFramePtr stackPtr) - { - if (!stackPtr) - return false; - if (stackPtr->BP == 0 || stackPtr->SP == 0) - return false; - - return true; - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/ARM64/HalTimer.cxx b/dev/Kernel/HALKit/ARM64/HalTimer.cxx deleted file mode 100644 index ef907e4f..00000000 --- a/dev/Kernel/HALKit/ARM64/HalTimer.cxx +++ /dev/null @@ -1,16 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: HalTimer.cxx - Purpose: HAL timer - - Revision History: - - 07/07/24: Added file (amlel) - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> - -struct TimerInfoStruct; diff --git a/dev/Kernel/HALKit/ARM64/MBCI/.keepme b/dev/Kernel/HALKit/ARM64/MBCI/.keepme deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/ARM64/MBCI/.keepme +++ /dev/null diff --git a/dev/Kernel/HALKit/ARM64/Processor.hxx b/dev/Kernel/HALKit/ARM64/Processor.hxx deleted file mode 100644 index 16e9ec8c..00000000 --- a/dev/Kernel/HALKit/ARM64/Processor.hxx +++ /dev/null @@ -1,56 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Utils.hxx> -#include <FirmwareKit/Handover.hxx> - -#ifdef kCPUBackendName -#undef kCPUBackendName -#endif // ifdef kCPUBackendName - -#define kPTESize 512 /* 64-bit PT */ - -#define kCPUBackendName "ARMv8" - -#ifdef __ZETA_MACHINE__ -#define cHeapStartOffset (0x10000000) -#else -#error !!! please provide that macro. !!! -#endif - -namespace Kernel::HAL -{ - struct PACKED Register64 final - { - UShort Limit; - UIntPtr Base; - }; - - typedef UIntPtr Reg; - typedef Register64 Register; - - /// @note let's keep the same name as AMD64 HAL. - struct PACKED StackFrame final - { - Reg IntNum, Exception; - Reg A0, A2, BP, SP, A3, A4, A5, A6; - Reg R8, R9, R10, R11, R12, R13, R14, R15; - Reg Gs, Fs; - }; - - typedef StackFrame* StackFramePtr; -} // namespace Kernel::HAL - -inline Kernel::VoidPtr kKernelVirtualStart = (Kernel::VoidPtr)cHeapStartOffset; -inline Kernel::UIntPtr kKernelVirtualSize = 0UL; - -inline Kernel::VoidPtr kKernelPhysicalStart = nullptr; - -#include <HALKit/ARM64/HalPageAlloc.hxx> diff --git a/dev/Kernel/HALKit/ARM64/ReadMe.md b/dev/Kernel/HALKit/ARM64/ReadMe.md deleted file mode 100644 index c51229f2..00000000 --- a/dev/Kernel/HALKit/ARM64/ReadMe.md +++ /dev/null @@ -1,3 +0,0 @@ -# ARM64 Hardware Abstraction Layer - -- Supported Firmware: CoreBoot/EDK/OpenMobileBoot diff --git a/dev/Kernel/HALKit/ARM64/Storage/.gitkeep b/dev/Kernel/HALKit/ARM64/Storage/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/ARM64/Storage/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/ARM64/Storage/HalFlash.cxx b/dev/Kernel/HALKit/ARM64/Storage/HalFlash.cxx deleted file mode 100644 index cc7802cb..00000000 --- a/dev/Kernel/HALKit/ARM64/Storage/HalFlash.cxx +++ /dev/null @@ -1,66 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Defines.hxx> -#include <ArchKit/ArchKit.hxx> - -/// @file Flash.cxx -/// @brief Flash memory builtin. - -#ifdef __FLASH_MEM__ - -#define cMaxFlash (4U) - -namespace Kernel -{ - /// /:\\BRIDGE\\FLSH\\1 - constexpr auto cFlashBridgeMagic = "FLSH"; - constexpr auto cFlashBridgeRevision = 1; - - STATIC const Boolean kFlashEnabled = No; - STATIC SizeT kFlashSize[cMaxFlash] = {}; - STATIC SizeT kFlashSectorSz[cMaxFlash] = {}; - - /// @brief Enable flash memory builtin. - STATIC Void drv_enable_flash(Int32 slot); - - /// @brief Disable flash memory builtin. - STATIC Void drv_disable_flash(Int32 slot); - - /// @brief get sector count. - /// @return drive sector count. - SizeT drv_std_get_sector_count(Int32 slot) - { - if (slot > cMaxFlash) - return 0; - - return kFlashSectorSz[slot]; - } - - /// @brief get device size. - /// @return drive size - SizeT drv_std_get_drv_size(Int32 slot) - { - if (slot > cMaxFlash) - return 0; - - return kFlashSize[slot]; - } - - /// @brief Enable flash memory at slot. - STATIC Void drv_enable_flash(Int32 arg) - { - kcout << "newoskrnl: enabled hardware.\r"; - } - - /// @brief Disable flash memory at slot. - STATIC Void drv_disable_flash(Int32 arg) - { - kcout << "newoskrnl: disabled hardware.\r"; - } -} // namespace Kernel - -#endif // if __FLASH_MEM__ (Bridge) |
