diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-12-06 15:53:20 +0100 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-12-06 15:57:01 +0100 |
| commit | 46a885ad913aa24543efb154886919ad30182229 (patch) | |
| tree | 3f9d6887763d8e1ea66fc89ec9aadb22f4cb9abc | |
| parent | 8723d3401c15cad5797697aea4735b8972aabafb (diff) | |
META: Friday bump.
Signed-off-by: Amlal <amlalelmahrouss@icloud.com>
34 files changed, 431 insertions, 146 deletions
diff --git a/compile_flags.txt b/compile_flags.txt index 1be90d48..0b8c8568 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -1,7 +1,7 @@ -Idev/ZKAKit -Idev/ -Idev/ZBAKit/ --Itools +-Iprivate/tools -Idev/ZBAKit/BootKit -std=c++20 -D__ZKA_AMD64__ diff --git a/dev/ZKAKit/HintKit/CompilerHint.h b/dev/HintKit/CompilerHint.h index 00afc9fa..c3205307 100644 --- a/dev/ZKAKit/HintKit/CompilerHint.h +++ b/dev/HintKit/CompilerHint.h @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef __HINTKIT_COMPILER_HINT_H__ -#define __HINTKIT_COMPILER_HINT_H__ +#ifndef HINTKIT_HINT_H +#define HINTKIT_HINT_H #ifdef __TK__ #pragma compiler(hint_manifest) @@ -22,4 +22,4 @@ #define _InOut #define _StrictInOut -#endif // ifndef __HINTKIT_COMPILER_HINT_H__ +#endif // ifndef HINTKIT_HINT_H diff --git a/dev/SCIKit/CompilerHint.h b/dev/SCIKit/CompilerHint.h index 8afa1750..319e924c 100644 --- a/dev/SCIKit/CompilerHint.h +++ b/dev/SCIKit/CompilerHint.h @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef __SCI_HINT_H__ -#define __SCI_HINT_H__ +#ifndef SCI_HINT_H +#define SCI_HINT_H #ifdef __TK__ #pragma compiler(hint_manifest) @@ -22,4 +22,4 @@ #define _InOut #define _StrictInOut -#endif // ifndef __SCI_HINT_H__ +#endif // ifndef SCI_HINT_H diff --git a/dev/ZBAKit/src/BootString.cc b/dev/ZBAKit/src/BootString.cc index e60235f9..ce9a5898 100644 --- a/dev/ZBAKit/src/BootString.cc +++ b/dev/ZBAKit/src/BootString.cc @@ -2,7 +2,7 @@ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. - File: String.cc + File: BootString.cc Purpose: ZBA string library Revision History: diff --git a/dev/ZBAKit/src/BootTextWriter.cc b/dev/ZBAKit/src/BootTextWriter.cc index 13ed41cc..df33f5fe 100644 --- a/dev/ZBAKit/src/BootTextWriter.cc +++ b/dev/ZBAKit/src/BootTextWriter.cc @@ -2,7 +2,7 @@ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. - File: String.cc + File: BootTextWriter.cc Purpose: ZBA string library Revision History: diff --git a/dev/ZKAKit/CompressKit/GZip.h b/dev/ZKAKit/CompressKit/GZip.h index 834bd1af..f99742f6 100644 --- a/dev/ZKAKit/CompressKit/GZip.h +++ b/dev/ZKAKit/CompressKit/GZip.h @@ -11,8 +11,8 @@ namespace Kernel::GZip { - class IGZipObject; - class IGZipProxy; + class IGZIPObject; + class IGZIPProxy; } // namespace Kernel::GZip #endif // !COMPRESSKIT_GZIP_H diff --git a/dev/ZKAKit/CompressKit/RLE.h b/dev/ZKAKit/CompressKit/RLE.h index 33a29e8d..95eebabd 100644 --- a/dev/ZKAKit/CompressKit/RLE.h +++ b/dev/ZKAKit/CompressKit/RLE.h @@ -11,8 +11,8 @@ namespace Kernel { - class IRleObject; - class IRleProxy; + class IRLEObject; + class IRLEProxy; } // namespace Kernel #endif // !ifndef COMPRESSKIT_RLE_H diff --git a/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalAP.cc index 4ab8671f..3405ea32 100644 --- a/dev/ZKAKit/HALKit/AMD64/HalSchedulerCoreAMD64.cc +++ b/dev/ZKAKit/HALKit/AMD64/HalAP.cc @@ -19,12 +19,17 @@ namespace Kernel UserProcessScheduler::The().GetCurrentProcess().Leak().Crash(); } + /***********************************************************************************/ + /// @brief Validate user stack. + /// @param stack_ptr the frame pointer. + /***********************************************************************************/ + Bool hal_check_stack(HAL::StackFramePtr stack_ptr) { if (!stack_ptr) return No; - return Yes; + return stack_ptr->SP != 0 && stack_ptr->BP != 0; } /// @brief Wakes up thread. diff --git a/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc index b75f37ce..b5c35372 100644 --- a/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ b/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc @@ -7,7 +7,7 @@ #include <ArchKit/ArchKit.h> #include <KernelKit/UserProcessScheduler.h> #include <NewKit/KString.h> -#include <PosixKit/Signals.h> +#include <POSIXKit/Signals.h> /// @brief Handle GPF fault. /// @param rsp diff --git a/dev/ZKAKit/HALKit/ARM64/AP.h b/dev/ZKAKit/HALKit/ARM64/AP.h new file mode 100644 index 00000000..ac2e7d21 --- /dev/null +++ b/dev/ZKAKit/HALKit/ARM64/AP.h @@ -0,0 +1,36 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + + File: AP.h + Purpose: RISC-V hardware threads. + + Revision History: + + 30/01/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#include <NewKit/Defines.h> + +namespace Kernel +{ + typedef Int64 hal_ap_kind; + + typedef struct HAL_HARDWARE_THREAD + { + Kernel::UIntPtr fStartAddress; + Kernel::UInt8 fPrivleged : 1; + Kernel::UInt32 fPageMemoryFlags; + hal_ap_kind fIdentNumber; + } HAL_HARDWARE_THREAD; + + /// @brief Set PC to specific hart. + /// @param hart the hart + /// @param epc the pc. + /// @return + EXTERN_C Kernel::Void hal_set_pc_to_hart(HAL_HARDWARE_THREAD* hart, Kernel::VoidPtr epc); + +} // namespace Kernel
\ No newline at end of file diff --git a/dev/ZKAKit/HALKit/ARM64/HalAP.cc b/dev/ZKAKit/HALKit/ARM64/HalAP.cc new file mode 100644 index 00000000..dd4ecea4 --- /dev/null +++ b/dev/ZKAKit/HALKit/ARM64/HalAP.cc @@ -0,0 +1,40 @@ +/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/ARM64/Processor.h>
+#include <KernelKit/DebugOutput.h>
+#include <HALKit/ARM64/AP.h>
+
+using namespace Kernel;
+
+namespace Kernel::Details
+{
+ STATIC void mp_hang_fn(void)
+ {
+ while (YES)
+ ;
+ }
+} // namespace Kernel::Details
+
+/// @brief wakes up thread.
+/// wakes up thread from hang.
+void mp_wakeup_thread(HAL::StackFramePtr stack)
+{
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
+}
+
+/// @brief makes thread sleep.
+/// hooks and hangs thread to prevent code from executing.
+void mp_hang_thread(HAL::StackFramePtr stack)
+{
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Details::mp_hang_fn));
+}
diff --git a/dev/ZKAKit/HALKit/ARM64/HalSchedulerCore.cc b/dev/ZKAKit/HALKit/ARM64/HalSchedulerCore.cc new file mode 100644 index 00000000..a0088958 --- /dev/null +++ b/dev/ZKAKit/HALKit/ARM64/HalSchedulerCore.cc @@ -0,0 +1,34 @@ +/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/AMD64/Processor.h>
+#include <KernelKit/UserProcessScheduler.h>
+
+namespace Kernel
+{
+ /***********************************************************************************/
+ /// @brief Unimplemented function (crashes by default)
+ /// @param void
+ /***********************************************************************************/
+
+ EXTERN_C Void __zka_pure_call(void)
+ {
+ UserProcessScheduler::The().GetCurrentProcess().Leak().Crash();
+ }
+
+ /***********************************************************************************/
+ /// @brief Validate user stack.
+ /// @param stack_ptr the frame pointer.
+ /***********************************************************************************/
+
+ Bool hal_check_stack(HAL::StackFramePtr stack_ptr)
+ {
+ if (!stack_ptr)
+ return No;
+
+ return stack_ptr->SP != 0 && stack_ptr->BP != 0;
+ }
+} // namespace Kernel
\ No newline at end of file diff --git a/dev/ZKAKit/HALKit/POWER/AP.h b/dev/ZKAKit/HALKit/POWER/AP.h new file mode 100644 index 00000000..10cf97ba --- /dev/null +++ b/dev/ZKAKit/HALKit/POWER/AP.h @@ -0,0 +1,39 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + + File: AP.h + Purpose: POWER hardware threads. + + Revision History: + + 14/04/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#include <NewKit/Defines.h> + +namespace Kernel +{ + struct HAL_HARDWARE_THREAD; + + /// @brief hardware thread indentification type. + typedef Kernel::Int32 hal_ap_kind; + + /// @brief Hardware thread information structure. + typedef struct HAL_HARDWARE_THREAD + { + Kernel::UIntPtr fStartAddress; + Kernel::UInt8 fPrivleged : 1; + Kernel::UInt32 fPageMemoryFlags; + hal_ap_kind fIdentNumber; + } HAL_HARDWARE_THREAD; + + /// @brief Set PC to specific hart. + /// @param hart the hart + /// @param epc the pc. + /// @return + EXTERN_C Kernel::Void hal_set_pc_to_hart(HAL_HARDWARE_THREAD* hart, Kernel::VoidPtr epc); +} // namespace Kernel
\ No newline at end of file diff --git a/dev/ZKAKit/HALKit/POWER/HalHart.cc b/dev/ZKAKit/HALKit/POWER/HalAP.cc index ed42014a..df261d94 100644 --- a/dev/ZKAKit/HALKit/POWER/HalHart.cc +++ b/dev/ZKAKit/HALKit/POWER/HalAP.cc @@ -6,20 +6,35 @@ #include <HALKit/POWER/Processor.h> #include <KernelKit/DebugOutput.h> -#include <HALKit/POWER/Hart.h> +#include <HALKit/POWER/AP.h> using namespace Kernel; +namespace Kernel::Details +{ + STATIC void mp_hang_fn(void) + { + while (YES) + ; + } +} // namespace Kernel::Details + /// @brief wakes up thread. /// wakes up thread from hang. void mp_wakeup_thread(HAL::StackFramePtr stack) { - ZKA_UNUSED(stack); + if (!stack) + return; + + hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP)); } /// @brief makes thread sleep. /// hooks and hangs thread to prevent code from executing. void mp_hang_thread(HAL::StackFramePtr stack) { - ZKA_UNUSED(stack); + if (!stack) + return; + + hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Details::mp_hang_fn)); } diff --git a/dev/ZKAKit/HALKit/POWER/Hart.h b/dev/ZKAKit/HALKit/POWER/Hart.h deleted file mode 100644 index f3a14737..00000000 --- a/dev/ZKAKit/HALKit/POWER/Hart.h +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. - - File: Hart.h - Purpose: POWER hardware threads. - - Revision History: - - 14/04/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.h> - -struct HAL_HARDWARE_THREAD; - -/// @brief hardware thread indentification type. -typedef Kernel::Int32 PPCHartType; - -/// @brief Hardware thread information structure. -typedef struct HAL_HARDWARE_THREAD -{ - Kernel::UIntPtr fStartAddress; - Kernel::UInt8 fPrivleged : 1; - Kernel::UInt32 fPagkMMFlags; - PPCHartType fIdentNumber; -} HAL_HARDWARE_THREAD; - -/// @brief Set PC to specific hart. -/// @param hart the hart -/// @param epc the pc. -/// @return -EXTERN_C Kernel::Void hal_set_pc_to_hart(HAL_HARDWARE_THREAD* hart, Kernel::VoidPtr epc); diff --git a/dev/ZKAKit/HALKit/RISCV/AP.h b/dev/ZKAKit/HALKit/RISCV/AP.h new file mode 100644 index 00000000..ac2e7d21 --- /dev/null +++ b/dev/ZKAKit/HALKit/RISCV/AP.h @@ -0,0 +1,36 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + + File: AP.h + Purpose: RISC-V hardware threads. + + Revision History: + + 30/01/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#include <NewKit/Defines.h> + +namespace Kernel +{ + typedef Int64 hal_ap_kind; + + typedef struct HAL_HARDWARE_THREAD + { + Kernel::UIntPtr fStartAddress; + Kernel::UInt8 fPrivleged : 1; + Kernel::UInt32 fPageMemoryFlags; + hal_ap_kind fIdentNumber; + } HAL_HARDWARE_THREAD; + + /// @brief Set PC to specific hart. + /// @param hart the hart + /// @param epc the pc. + /// @return + EXTERN_C Kernel::Void hal_set_pc_to_hart(HAL_HARDWARE_THREAD* hart, Kernel::VoidPtr epc); + +} // namespace Kernel
\ No newline at end of file diff --git a/dev/ZKAKit/HALKit/RISCV/HalAP.cc b/dev/ZKAKit/HALKit/RISCV/HalAP.cc new file mode 100644 index 00000000..05cd2f8a --- /dev/null +++ b/dev/ZKAKit/HALKit/RISCV/HalAP.cc @@ -0,0 +1,40 @@ +/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/RISCV/Processor.h>
+#include <KernelKit/DebugOutput.h>
+#include <HALKit/RISCV/AP.h>
+
+using namespace Kernel;
+
+namespace Kernel::Details
+{
+ STATIC void mp_hang_fn(void)
+ {
+ while (YES)
+ ;
+ }
+} // namespace Kernel::Details
+
+/// @brief wakes up thread.
+/// wakes up thread from hang.
+void mp_wakeup_thread(HAL::StackFramePtr stack)
+{
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
+}
+
+/// @brief makes thread sleep.
+/// hooks and hangs thread to prevent code from executing.
+void mp_hang_thread(HAL::StackFramePtr stack)
+{
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Details::mp_hang_fn));
+}
diff --git a/dev/ZKAKit/HALKit/RISCV/Hart.h b/dev/ZKAKit/HALKit/RISCV/Hart.h deleted file mode 100644 index 6249cf7b..00000000 --- a/dev/ZKAKit/HALKit/RISCV/Hart.h +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. - - File: Hart.h - Purpose: RISC-V hardware threads. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.h> - -typedef Kernel::Int32 Rv64HartType; - -/// @brief Set PC to specific hart. -/// @param hart the hart -/// @param epc the pc. -/// @return -EXTERN_C Kernel::Void hal_set_pc_to_hart(Rv64HartType hart, Kernel::VoidPtr epc); diff --git a/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h b/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h index c020f4d4..44ea1042 100644 --- a/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h +++ b/dev/ZKAKit/KernelKit/HardwareThreadScheduler.h @@ -14,7 +14,7 @@ /// @note Last Rev Sun 28 Jul CET 2024 /// @note Last Rev Thu, Aug 1, 2024 9:07:38 AM -#define kMaxHartInsideSched (8U) +#define kMaxAPInsideSched (8U) namespace Kernel { @@ -25,13 +25,13 @@ namespace Kernel enum ThreadKind { - kHartSystemReserved, // System reserved thread, well user can't use it - kHartStandard, // user thread, cannot be used by Kernel - kHartFallback, // fallback thread, cannot be used by user if not clear or + kAPSystemReserved, // System reserved thread, well user can't use it + kAPStandard, // user thread, cannot be used by Kernel + kAPFallback, // fallback thread, cannot be used by user if not clear or // used by Kernel. - kHartBoot, // The core we booted from, the mama. - kInvalidHart, - kHartCount, + kAPBoot, // The core we booted from, the mama. + kInvalidAP, + kAPCount, }; typedef enum ThreadKind ThreadKind; @@ -72,7 +72,7 @@ namespace Kernel private: HAL::StackFramePtr fStack{nullptr}; - ThreadKind fKind{ThreadKind::kHartStandard}; + ThreadKind fKind{ThreadKind::kAPStandard}; ThreadID fID{0}; ProcessID fSourcePID{-1}; Bool fWakeup{false}; @@ -89,7 +89,7 @@ namespace Kernel /// \brief Class to manage the thread scheduling. /// - class HardwareThreadScheduler final : public ISchedulerObject + class HardwareThreadScheduler final : public ISchedulable { private: friend class UserProcessHelper; @@ -133,7 +133,7 @@ namespace Kernel SizeT Capacity() noexcept; private: - Array<HardwareThread, kMaxHartInsideSched> fThreadList; + Array<HardwareThread, kMaxAPInsideSched> fThreadList; ThreadID fCurrentThread{0}; }; diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h index 59e1a525..a974fa3a 100644 --- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h +++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h @@ -273,7 +273,7 @@ namespace Kernel /// @brief Process scheduler class. /// The main class which you call to schedule user processes. - class UserProcessScheduler final : public ISchedulerObject + class UserProcessScheduler final : public ISchedulable { friend class UserProcessHelper; diff --git a/dev/ZKAKit/NetworkKit/LTE.h b/dev/ZKAKit/NetworkKit/LTE.h index c6c01f64..7aa99ec6 100644 --- a/dev/ZKAKit/NetworkKit/LTE.h +++ b/dev/ZKAKit/NetworkKit/LTE.h @@ -11,6 +11,6 @@ #define _INC_NETWORK_LTE_H_ #include <NewKit/Defines.h> -#include <NewKit/String.h> +#include <NewKit/KString.h> #endif // ifndef _INC_NETWORK_LTE_H_ diff --git a/dev/ZKAKit/NewKit/Defines.h b/dev/ZKAKit/NewKit/Defines.h index 142e552e..9a11eed0 100644 --- a/dev/ZKAKit/NewKit/Defines.h +++ b/dev/ZKAKit/NewKit/Defines.h @@ -81,7 +81,7 @@ namespace Kernel kEndianBig, kEndianLittle, kEndianMixed, - kCount + kEndianCount }; /// @brief Forward object. @@ -106,14 +106,14 @@ namespace Kernel /// @brief Encoding interface, used as a proxy to convert T to Char* /// Used to cast A to B or B to A. - class IEncoderObject + class ICodec { public: - explicit IEncoderObject() = default; - virtual ~IEncoderObject() = default; + explicit ICodec() = default; + virtual ~ICodec() = default; - IEncoderObject& operator=(const IEncoderObject&) = default; - IEncoderObject(const IEncoderObject&) = default; + ICodec& operator=(const ICodec&) = default; + ICodec(const ICodec&) = default; public: /// @brief Convert type to bytes. @@ -126,6 +126,17 @@ namespace Kernel return nullptr; } + /// @brief Construct from type to class. + /// @tparam T the type to convert. + /// @param type (a1) the data. + /// @return a1 as Char* + template <typename OutputClass, typename FactoryClass> + OutputClass* Construct(Char* type) noexcept + { + FactoryClass class_fac; + return class_fac.template From<OutputClass>(type); + } + /// @brief Convert T class to Y class. /// @tparam T the class type of type. /// @tparam Y the result class. @@ -134,7 +145,7 @@ namespace Kernel template <typename T, typename Y> Y As(T type) noexcept { - if (type.IsSerializable()) + if (type.template IsSerializable()) { return reinterpret_cast<Char*>(type); } @@ -145,31 +156,31 @@ namespace Kernel /// \brief Scheduler interface, represents a scheduler object. /// @note This is used to schedule tasks, such as threads, drivers, user threads, etc. - class ISchedulerObject + class ISchedulable { public: - explicit ISchedulerObject() = default; - virtual ~ISchedulerObject() = default; + explicit ISchedulable() = default; + virtual ~ISchedulable() = default; - ISchedulerObject& operator=(const ISchedulerObject&) = default; - ISchedulerObject(const ISchedulerObject&) = default; + ISchedulable& operator=(const ISchedulable&) = default; + ISchedulable(const ISchedulable&) = default; /// @brief Is this object only accepting user tasks? virtual const Bool IsUser() { - return false; + return NO; } /// @brief Is this object only accepting kernel tasks? virtual const Bool IsKernel() { - return false; + return NO; } /// @brief Is this object offloading to another CPU? virtual const Bool HasMP() { - return false; + return NO; } }; } // namespace Kernel diff --git a/dev/ZKAKit/POSIXKit/signal.h b/dev/ZKAKit/POSIXKit/signal.h new file mode 100644 index 00000000..6698ff34 --- /dev/null +++ b/dev/ZKAKit/POSIXKit/signal.h @@ -0,0 +1,20 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + +------------------------------------------- */ + +#pragma once + +/** https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html */ + +#include <POSIXKit/unix_layer.h> + +typedef Kernel::UInt32 signal_t; + +#define SIGKILL 0 +#define SIGPAUS 1 +#define SIGEXEC 2 +#define SIGTRAP 3 +#define SIGABRT 4 +#define SIGCONT 5
\ No newline at end of file diff --git a/dev/ZKAKit/PosixKit/Signals.h b/dev/ZKAKit/POSIXKit/unix_layer.h index 57a27268..c278aa19 100644 --- a/dev/ZKAKit/PosixKit/Signals.h +++ b/dev/ZKAKit/POSIXKit/unix_layer.h @@ -1,16 +1,11 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.h> - -typedef Kernel::UInt32 signal_t; - -#define SIGKILL 0 -#define SIGPAUS 1 -#define SIGEXEC 2 -#define SIGTRAP 3
\ No newline at end of file +/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+#include <KernelKit/UserProcessScheduler.h>
+#include <KernelKit/PEFCodeMgr.h>
diff --git a/dev/ZKAKit/src/FS/HPFS.cc b/dev/ZKAKit/src/FS/HPFS.cc index e08ee5a7..58478dea 100644 --- a/dev/ZKAKit/src/FS/HPFS.cc +++ b/dev/ZKAKit/src/FS/HPFS.cc @@ -13,7 +13,7 @@ #include <KernelKit/LPC.h> #include <NewKit/Crc32.h> #include <NewKit/Stop.h> -#include <NewKit/String.h> +#include <NewKit/KString.h> #include <NewKit/Utils.h> #include <FirmwareKit/EPM.h> #include <KernelKit/UserProcessScheduler.h> diff --git a/dev/ZKAKit/src/HardwareThreadScheduler.cc b/dev/ZKAKit/src/HardwareThreadScheduler.cc index e06942d9..036fa898 100644 --- a/dev/ZKAKit/src/HardwareThreadScheduler.cc +++ b/dev/ZKAKit/src/HardwareThreadScheduler.cc @@ -9,39 +9,56 @@ #include <KernelKit/HardwareThreadScheduler.h> #include <CFKit/Property.h> -///! BUGS: 0 - -///! @file MP.cc +/***********************************************************************************/ +///! @file HardwareThreadScheduler.cc ///! @brief This file handles multi processing in the Kernel. ///! @brief Multi processing is needed for multi-tasking operations. +/***********************************************************************************/ namespace Kernel { - HardwareThreadScheduler kHardwareThreadScheduler; + /***********************************************************************************/ + /// @note Those symbols are needed in order to switch and validate the stack. + /***********************************************************************************/ + + EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr); + EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, ProcessID pid); + + STATIC HardwareThreadScheduler kHardwareThreadScheduler; ///! A HardwareThread class takes care of it's owned hardware thread. ///! It has a stack for it's core. + /***********************************************************************************/ ///! @brief C++ constructor. + /***********************************************************************************/ HardwareThread::HardwareThread() = default; + /***********************************************************************************/ ///! @brief C++ destructor. + /***********************************************************************************/ HardwareThread::~HardwareThread() = default; + /***********************************************************************************/ //! @brief returns the id of the thread. + /***********************************************************************************/ const ThreadID& HardwareThread::ID() noexcept { return fID; } + /***********************************************************************************/ //! @brief returns the kind of thread we have. + /***********************************************************************************/ const ThreadKind& HardwareThread::Kind() noexcept { return fKind; } + /***********************************************************************************/ //! @brief is the thread busy? //! @return whether the thread is busy or not. + /***********************************************************************************/ Bool HardwareThread::IsBusy() noexcept { STATIC Int64 busy_timer = 0U; @@ -57,7 +74,9 @@ namespace Kernel return fBusy; } + /***********************************************************************************/ /// @brief Get processor stack frame. + /***********************************************************************************/ HAL::StackFramePtr HardwareThread::StackFrame() noexcept { @@ -72,10 +91,12 @@ namespace Kernel HardwareThread::operator bool() { - return fStack; + return this->fStack && !this->fBusy; } + /***********************************************************************************/ /// @brief Wakeup the processor. + /***********************************************************************************/ Void HardwareThread::Wake(const bool wakeup) noexcept { @@ -87,15 +108,12 @@ namespace Kernel mp_wakeup_thread(fStack); } - /// @note Those symbols are needed in order to switch and validate the stack. - - EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr); - EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, ProcessID pid); - + /***********************************************************************************/ /// @brief Switch to hardware thread. /// @param stack the new hardware thread. /// @retval true stack was changed, code is running. /// @retval false stack is invalid, previous code is running. + /***********************************************************************************/ Bool HardwareThread::Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ProcessID& pid) { if (!frame || @@ -123,47 +141,59 @@ namespace Kernel return ret; } + /***********************************************************************************/ ///! @brief Tells if processor is waked up. + /***********************************************************************************/ bool HardwareThread::IsWakeup() noexcept { return fWakeup; } + /***********************************************************************************/ ///! @brief Constructor and destructors. - ///! @brief Default constructor. + /***********************************************************************************/ + HardwareThreadScheduler::HardwareThreadScheduler() = default; + /***********************************************************************************/ ///! @brief Default destructor. + /***********************************************************************************/ HardwareThreadScheduler::~HardwareThreadScheduler() = default; + /***********************************************************************************/ /// @brief Shared singleton function + /***********************************************************************************/ HardwareThreadScheduler& HardwareThreadScheduler::The() { return kHardwareThreadScheduler; } - /// @brief Get Stack Frame of Core + /***********************************************************************************/ + /// @brief Get Stack Frame of AP. + /***********************************************************************************/ HAL::StackFramePtr HardwareThreadScheduler::Leak() noexcept { return fThreadList[fCurrentThread].fStack; } + /***********************************************************************************/ /** * Get Hardware thread at index. * @param idx the index * @return the reference to the hardware thread. */ + /***********************************************************************************/ Ref<HardwareThread*> HardwareThreadScheduler::operator[](const SizeT& idx) { if (idx == 0) { - if (fThreadList[idx].Kind() != kHartSystemReserved) + if (fThreadList[idx].Kind() != kAPSystemReserved) { - fThreadList[idx].fKind = kHartBoot; + fThreadList[idx].fKind = kAPBoot; } } - else if (idx >= kMaxHartInsideSched) + else if (idx >= kMaxAPInsideSched) { static HardwareThread* fakeThread = nullptr; return {fakeThread}; @@ -172,28 +202,37 @@ namespace Kernel return &fThreadList[idx]; } + /***********************************************************************************/ /** * Check if thread pool isn't empty. * @return */ + /***********************************************************************************/ HardwareThreadScheduler::operator bool() noexcept { return !fThreadList.Empty(); } + /***********************************************************************************/ /** * Reverse operator bool * @return */ + /***********************************************************************************/ bool HardwareThreadScheduler::operator!() noexcept { return fThreadList.Empty(); } + /***********************************************************************************/ /// @brief Returns the amount of core present. - /// @return the number of cores. + /// @return the number of APs. + /***********************************************************************************/ SizeT HardwareThreadScheduler::Capacity() noexcept { + if (fThreadList.Empty()) + return 0UL; + return fThreadList.Capacity(); } } // namespace Kernel diff --git a/dev/ZKAKit/src/ThreadLocalStorage.cc b/dev/ZKAKit/src/ThreadLocalStorage.cc index c6089824..5fdf56aa 100644 --- a/dev/ZKAKit/src/ThreadLocalStorage.cc +++ b/dev/ZKAKit/src/ThreadLocalStorage.cc @@ -32,8 +32,8 @@ Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* tib_ptr) !tib_ptr->Record) return false; - IEncoderObject encoder; - const char* tib_as_bytes = encoder.AsBytes(tib_ptr); + ICodec encoder; + const Char* tib_as_bytes = encoder.AsBytes(tib_ptr); kcout << "Checking for a valid cookie inside the TIB...\r"; diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index 3c7e8879..4b24d98a 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -515,13 +515,16 @@ namespace Kernel for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Capacity(); ++index) { - if (HardwareThreadScheduler::The()[index].Leak()->Kind() == kInvalidHart) + if (!HardwareThreadScheduler::The()[index].Leak()) + continue; + + if (HardwareThreadScheduler::The()[index].Leak()->Kind() == kInvalidAP) continue; if (HardwareThreadScheduler::The()[index].Leak()->Kind() != - ThreadKind::kHartBoot && + ThreadKind::kAPBoot && HardwareThreadScheduler::The()[index].Leak()->Kind() != - ThreadKind::kHartSystemReserved) + ThreadKind::kAPSystemReserved) { PID prev_pid = UserProcessHelper::TheCurrentPID(); UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid; diff --git a/apps/Common.h b/private/tools/Common.h index 6a70c566..6a70c566 100644 --- a/apps/Common.h +++ b/private/tools/Common.h diff --git a/apps/Framework.h b/private/tools/Framework.h index 48db2599..48db2599 100644 --- a/apps/Framework.h +++ b/private/tools/Framework.h diff --git a/apps/make_application.sh b/private/tools/make_application.sh index 2878f5b6..2878f5b6 100755..100644 --- a/apps/make_application.sh +++ b/private/tools/make_application.sh diff --git a/apps/make_framework.json b/private/tools/make_framework.json index 6071ebaa..6071ebaa 100644 --- a/apps/make_framework.json +++ b/private/tools/make_framework.json diff --git a/apps/src/Framework.cc b/private/tools/src/Framework.cc index 29426d1e..29426d1e 100644 --- a/apps/src/Framework.cc +++ b/private/tools/src/Framework.cc diff --git a/resources/zka.svg b/resources/zka.svg index df29b1f5..54b57123 100644 --- a/resources/zka.svg +++ b/resources/zka.svg @@ -1,4 +1,36 @@ -<svg width="201" height="120" viewBox="0 0 201 120" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M46.7 28L8 72L46.7 72V75L4 75V72L42.7 28L4 28L4 25L46.7 25V28ZM91.3836 75H87.9836L71.9836 47.4L59.6836 62.1V75H56.6836L56.6836 -5.96046e-06H59.6836L59.6836 57.4L86.8836 25H90.7836L73.9836 44.9L91.3836 75ZM142.669 25H145.669L145.669 75H142.669L142.669 63.3C140.869 67.2 138.235 70.35 134.769 72.75C131.302 75.1167 127.135 76.3 122.269 76.3C118.635 76.3 115.235 75.6167 112.069 74.25C108.902 72.8833 106.102 71 103.669 68.6C101.269 66.1667 99.3854 63.3667 98.0188 60.2C96.6521 57.0333 95.9688 53.6333 95.9688 50C95.9688 46.3333 96.6521 42.9167 98.0188 39.75C99.3854 36.55 101.269 33.75 103.669 31.35C106.102 28.9167 108.902 27.0167 112.069 25.65C115.235 24.2833 118.635 23.6 122.269 23.6C127.135 23.6 131.302 24.8 134.769 27.2C138.235 29.5667 140.869 32.7 142.669 36.6V25ZM122.269 73.3C126.569 73.3 130.219 72.25 133.219 70.15C136.252 68.05 138.552 65.2333 140.119 61.7C141.685 58.1667 142.469 54.2667 142.469 50C142.469 45.6333 141.669 41.6833 140.069 38.15C138.469 34.6167 136.152 31.8167 133.119 29.75C130.119 27.65 126.502 26.6 122.269 26.6C117.969 26.6 114.052 27.65 110.519 29.75C106.985 31.85 104.169 34.6833 102.069 38.25C100.002 41.7833 98.9688 45.7 98.9688 50C98.9688 54.3667 100.035 58.3167 102.169 61.85C104.335 65.35 107.185 68.1333 110.719 70.2C114.252 72.2667 118.102 73.3 122.269 73.3Z" fill="white"/> -<path d="M9.34 109.6L1.6 118.4H9.34V119H0.8L0.8 118.4L8.54 109.6H0.8L0.8 109H9.34V109.6ZM15.7367 119.26C14.8167 119.26 13.9767 119.023 13.2167 118.55C12.4634 118.077 11.8601 117.443 11.4067 116.65C10.9601 115.85 10.7367 114.967 10.7367 114C10.7367 113.267 10.8667 112.583 11.1267 111.95C11.3867 111.31 11.7434 110.75 12.1967 110.27C12.6567 109.783 13.1901 109.403 13.7967 109.13C14.4034 108.857 15.0501 108.72 15.7367 108.72C16.4501 108.72 17.1067 108.853 17.7067 109.12C18.3067 109.387 18.8301 109.767 19.2767 110.26C19.7234 110.753 20.0701 111.343 20.3167 112.03C20.5701 112.71 20.7034 113.467 20.7167 114.3H11.3367C11.4034 115.133 11.6401 115.88 12.0467 116.54C12.4601 117.193 12.9867 117.71 13.6267 118.09C14.2667 118.47 14.9701 118.66 15.7367 118.66C16.5901 118.66 17.3567 118.433 18.0367 117.98C18.7167 117.527 19.2567 116.9 19.6567 116.1L20.2567 116.24C19.8567 117.127 19.2534 117.853 18.4467 118.42C17.6401 118.98 16.7367 119.26 15.7367 119.26ZM11.3367 113.7H20.1167C20.0901 112.92 19.8767 112.197 19.4767 111.53C19.0767 110.863 18.5501 110.33 17.8967 109.93C17.2434 109.523 16.5234 109.32 15.7367 109.32C14.9434 109.32 14.2234 109.517 13.5767 109.91C12.9367 110.303 12.4167 110.833 12.0167 111.5C11.6167 112.16 11.3901 112.893 11.3367 113.7ZM27.1161 109.6H24.3761L24.3561 119H23.7561L23.7761 109.6H21.7161V109H23.7761L23.7561 105.86H24.3561L24.3761 109H27.1161V109.6ZM37.3228 109H37.9228V119H37.3228V116.66C36.9628 117.44 36.4361 118.07 35.7428 118.55C35.0495 119.023 34.2161 119.26 33.2428 119.26C32.5161 119.26 31.8361 119.123 31.2028 118.85C30.5695 118.577 30.0095 118.2 29.5228 117.72C29.0428 117.233 28.6661 116.673 28.3928 116.04C28.1195 115.407 27.9828 114.727 27.9828 114C27.9828 113.267 28.1195 112.583 28.3928 111.95C28.6661 111.31 29.0428 110.75 29.5228 110.27C30.0095 109.783 30.5695 109.403 31.2028 109.13C31.8361 108.857 32.5161 108.72 33.2428 108.72C34.2161 108.72 35.0495 108.96 35.7428 109.44C36.4361 109.913 36.9628 110.54 37.3228 111.32V109ZM33.2428 118.66C34.1028 118.66 34.8328 118.45 35.4328 118.03C36.0395 117.61 36.4995 117.047 36.8128 116.34C37.1261 115.633 37.2828 114.853 37.2828 114C37.2828 113.127 37.1228 112.337 36.8028 111.63C36.4828 110.923 36.0195 110.363 35.4128 109.95C34.8128 109.53 34.0895 109.32 33.2428 109.32C32.3828 109.32 31.5995 109.53 30.8928 109.95C30.1861 110.37 29.6228 110.937 29.2028 111.65C28.7895 112.357 28.5828 113.14 28.5828 114C28.5828 114.873 28.7961 115.663 29.2228 116.37C29.6561 117.07 30.2261 117.627 30.9328 118.04C31.6395 118.453 32.4095 118.66 33.2428 118.66ZM51.6752 119H50.9952L47.7952 113.48L45.3352 116.42V119H44.7352V104H45.3352V115.48L50.7752 109H51.5552L48.1952 112.98L51.6752 119ZM57.5922 119.26C56.6722 119.26 55.8322 119.023 55.0722 118.55C54.3189 118.077 53.7155 117.443 53.2622 116.65C52.8155 115.85 52.5922 114.967 52.5922 114C52.5922 113.267 52.7222 112.583 52.9822 111.95C53.2422 111.31 53.5989 110.75 54.0522 110.27C54.5122 109.783 55.0455 109.403 55.6522 109.13C56.2589 108.857 56.9055 108.72 57.5922 108.72C58.3055 108.72 58.9622 108.853 59.5622 109.12C60.1622 109.387 60.6855 109.767 61.1322 110.26C61.5789 110.753 61.9255 111.343 62.1722 112.03C62.4255 112.71 62.5589 113.467 62.5722 114.3H53.1922C53.2589 115.133 53.4955 115.88 53.9022 116.54C54.3155 117.193 54.8422 117.71 55.4822 118.09C56.1222 118.47 56.8255 118.66 57.5922 118.66C58.4455 118.66 59.2122 118.433 59.8922 117.98C60.5722 117.527 61.1122 116.9 61.5122 116.1L62.1122 116.24C61.7122 117.127 61.1089 117.853 60.3022 118.42C59.4955 118.98 58.5922 119.26 57.5922 119.26ZM53.1922 113.7H61.9722C61.9455 112.92 61.7322 112.197 61.3322 111.53C60.9322 110.863 60.4055 110.33 59.7522 109.93C59.0989 109.523 58.3789 109.32 57.5922 109.32C56.7989 109.32 56.0789 109.517 55.4322 109.91C54.7922 110.303 54.2722 110.833 53.8722 111.5C53.4722 112.16 53.2455 112.893 53.1922 113.7ZM64.3641 119V109H64.9641V110.75C65.3307 110.137 65.8307 109.647 66.4641 109.28C67.0974 108.907 67.7941 108.72 68.5541 108.72C68.9474 108.72 69.3241 108.77 69.6841 108.87L69.4241 109.43C69.1307 109.357 68.8407 109.32 68.5541 109.32C67.8941 109.32 67.2907 109.483 66.7441 109.81C66.2041 110.13 65.7707 110.56 65.4441 111.1C65.1241 111.64 64.9641 112.243 64.9641 112.91V119H64.3641ZM79.4628 112.91V119H78.8628V112.91C78.8628 112.243 78.6995 111.64 78.3728 111.1C78.0528 110.56 77.6195 110.13 77.0728 109.81C76.5328 109.483 75.9328 109.32 75.2728 109.32C74.6128 109.32 74.0095 109.483 73.4628 109.81C72.9228 110.13 72.4895 110.56 72.1628 111.1C71.8428 111.64 71.6828 112.243 71.6828 112.91V119H71.0828V109H71.6828V110.75C72.0495 110.137 72.5495 109.647 73.1828 109.28C73.8161 108.907 74.5128 108.72 75.2728 108.72C76.0461 108.72 76.7495 108.91 77.3828 109.29C78.0161 109.663 78.5195 110.167 78.8928 110.8C79.2728 111.433 79.4628 112.137 79.4628 112.91ZM85.6586 119.26C84.7386 119.26 83.8986 119.023 83.1386 118.55C82.3853 118.077 81.7819 117.443 81.3286 116.65C80.8819 115.85 80.6586 114.967 80.6586 114C80.6586 113.267 80.7886 112.583 81.0486 111.95C81.3086 111.31 81.6653 110.75 82.1186 110.27C82.5786 109.783 83.1119 109.403 83.7186 109.13C84.3253 108.857 84.9719 108.72 85.6586 108.72C86.3719 108.72 87.0286 108.853 87.6286 109.12C88.2286 109.387 88.7519 109.767 89.1986 110.26C89.6453 110.753 89.9919 111.343 90.2386 112.03C90.4919 112.71 90.6253 113.467 90.6386 114.3H81.2586C81.3253 115.133 81.5619 115.88 81.9686 116.54C82.3819 117.193 82.9086 117.71 83.5486 118.09C84.1886 118.47 84.8919 118.66 85.6586 118.66C86.5119 118.66 87.2786 118.433 87.9586 117.98C88.6386 117.527 89.1786 116.9 89.5786 116.1L90.1786 116.24C89.7786 117.127 89.1753 117.853 88.3686 118.42C87.5619 118.98 86.6586 119.26 85.6586 119.26ZM81.2586 113.7H90.0386C90.0119 112.92 89.7986 112.197 89.3986 111.53C88.9986 110.863 88.4719 110.33 87.8186 109.93C87.1653 109.523 86.4453 109.32 85.6586 109.32C84.8653 109.32 84.1453 109.517 83.4986 109.91C82.8586 110.303 82.3386 110.833 81.9386 111.5C81.5386 112.16 81.3119 112.893 81.2586 113.7ZM92.4305 119V104H93.0305V119H92.4305ZM108.983 109H109.583V119H108.983V116.66C108.623 117.44 108.096 118.07 107.403 118.55C106.71 119.023 105.876 119.26 104.903 119.26C104.176 119.26 103.496 119.123 102.863 118.85C102.23 118.577 101.67 118.2 101.183 117.72C100.703 117.233 100.326 116.673 100.053 116.04C99.7796 115.407 99.643 114.727 99.643 114C99.643 113.267 99.7796 112.583 100.053 111.95C100.326 111.31 100.703 110.75 101.183 110.27C101.67 109.783 102.23 109.403 102.863 109.13C103.496 108.857 104.176 108.72 104.903 108.72C105.876 108.72 106.71 108.96 107.403 109.44C108.096 109.913 108.623 110.54 108.983 111.32V109ZM104.903 118.66C105.763 118.66 106.493 118.45 107.093 118.03C107.7 117.61 108.16 117.047 108.473 116.34C108.786 115.633 108.943 114.853 108.943 114C108.943 113.127 108.783 112.337 108.463 111.63C108.143 110.923 107.68 110.363 107.073 109.95C106.473 109.53 105.75 109.32 104.903 109.32C104.043 109.32 103.26 109.53 102.553 109.95C101.846 110.37 101.283 110.937 100.863 111.65C100.45 112.357 100.243 113.14 100.243 114C100.243 114.873 100.456 115.663 100.883 116.37C101.316 117.07 101.886 117.627 102.593 118.04C103.3 118.453 104.07 118.66 104.903 118.66ZM111.591 119V109H112.191V110.75C112.557 110.137 113.057 109.647 113.691 109.28C114.324 108.907 115.021 108.72 115.781 108.72C116.174 108.72 116.551 108.77 116.911 108.87L116.651 109.43C116.357 109.357 116.067 109.32 115.781 109.32C115.121 109.32 114.517 109.483 113.971 109.81C113.431 110.13 112.997 110.56 112.671 111.1C112.351 111.64 112.191 112.243 112.191 112.91V119H111.591ZM125.583 116.88L126.103 117.16C125.657 117.8 125.083 118.31 124.383 118.69C123.69 119.07 122.937 119.26 122.123 119.26C121.203 119.26 120.363 119.023 119.603 118.55C118.85 118.077 118.247 117.443 117.793 116.65C117.347 115.85 117.123 114.967 117.123 114C117.123 113.267 117.253 112.583 117.513 111.95C117.773 111.31 118.13 110.75 118.583 110.27C119.043 109.783 119.577 109.403 120.183 109.13C120.79 108.857 121.437 108.72 122.123 108.72C122.937 108.72 123.69 108.91 124.383 109.29C125.083 109.67 125.657 110.18 126.103 110.82L125.583 111.1C125.157 110.527 124.633 110.087 124.013 109.78C123.393 109.473 122.763 109.32 122.123 109.32C121.297 109.32 120.55 109.533 119.883 109.96C119.223 110.387 118.697 110.957 118.303 111.67C117.917 112.377 117.723 113.153 117.723 114C117.723 114.86 117.92 115.643 118.313 116.35C118.713 117.05 119.247 117.61 119.913 118.03C120.58 118.45 121.317 118.66 122.123 118.66C122.823 118.66 123.477 118.493 124.083 118.16C124.697 117.827 125.197 117.4 125.583 116.88ZM136.279 112.91V119H135.679V112.91C135.679 112.243 135.516 111.64 135.189 111.1C134.869 110.56 134.436 110.13 133.889 109.81C133.349 109.483 132.749 109.32 132.089 109.32C131.429 109.32 130.826 109.483 130.279 109.81C129.739 110.13 129.306 110.56 128.979 111.1C128.659 111.64 128.499 112.243 128.499 112.91V119H127.899V104H128.499V110.75C128.866 110.137 129.366 109.647 129.999 109.28C130.633 108.907 131.329 108.72 132.089 108.72C132.863 108.72 133.566 108.91 134.199 109.29C134.833 109.663 135.336 110.167 135.709 110.8C136.089 111.433 136.279 112.137 136.279 112.91ZM138.27 109H138.87V119H138.27V109ZM138.58 106.9C138.454 106.9 138.344 106.86 138.25 106.78C138.164 106.693 138.12 106.587 138.12 106.46C138.12 106.327 138.164 106.22 138.25 106.14C138.344 106.06 138.454 106.02 138.58 106.02C138.7 106.02 138.804 106.06 138.89 106.14C138.977 106.22 139.02 106.323 139.02 106.45C139.02 106.583 138.977 106.693 138.89 106.78C138.804 106.86 138.7 106.9 138.58 106.9ZM146.198 109.6H143.458L143.438 119H142.838L142.858 109.6H140.798V109H142.858L142.838 105.86H143.438L143.458 109H146.198V109.6ZM152.065 119.26C151.145 119.26 150.305 119.023 149.545 118.55C148.792 118.077 148.188 117.443 147.735 116.65C147.288 115.85 147.065 114.967 147.065 114C147.065 113.267 147.195 112.583 147.455 111.95C147.715 111.31 148.072 110.75 148.525 110.27C148.985 109.783 149.518 109.403 150.125 109.13C150.732 108.857 151.378 108.72 152.065 108.72C152.778 108.72 153.435 108.853 154.035 109.12C154.635 109.387 155.158 109.767 155.605 110.26C156.052 110.753 156.398 111.343 156.645 112.03C156.898 112.71 157.032 113.467 157.045 114.3H147.665C147.732 115.133 147.968 115.88 148.375 116.54C148.788 117.193 149.315 117.71 149.955 118.09C150.595 118.47 151.298 118.66 152.065 118.66C152.918 118.66 153.685 118.433 154.365 117.98C155.045 117.527 155.585 116.9 155.985 116.1L156.585 116.24C156.185 117.127 155.582 117.853 154.775 118.42C153.968 118.98 153.065 119.26 152.065 119.26ZM147.665 113.7H156.445C156.418 112.92 156.205 112.197 155.805 111.53C155.405 110.863 154.878 110.33 154.225 109.93C153.572 109.523 152.852 109.32 152.065 109.32C151.272 109.32 150.552 109.517 149.905 109.91C149.265 110.303 148.745 110.833 148.345 111.5C147.945 112.16 147.718 112.893 147.665 113.7ZM166.501 116.88L167.021 117.16C166.575 117.8 166.001 118.31 165.301 118.69C164.608 119.07 163.855 119.26 163.041 119.26C162.121 119.26 161.281 119.023 160.521 118.55C159.768 118.077 159.165 117.443 158.711 116.65C158.265 115.85 158.041 114.967 158.041 114C158.041 113.267 158.171 112.583 158.431 111.95C158.691 111.31 159.048 110.75 159.501 110.27C159.961 109.783 160.495 109.403 161.101 109.13C161.708 108.857 162.355 108.72 163.041 108.72C163.855 108.72 164.608 108.91 165.301 109.29C166.001 109.67 166.575 110.18 167.021 110.82L166.501 111.1C166.075 110.527 165.551 110.087 164.931 109.78C164.311 109.473 163.681 109.32 163.041 109.32C162.215 109.32 161.468 109.533 160.801 109.96C160.141 110.387 159.615 110.957 159.221 111.67C158.835 112.377 158.641 113.153 158.641 114C158.641 114.86 158.838 115.643 159.231 116.35C159.631 117.05 160.165 117.61 160.831 118.03C161.498 118.45 162.235 118.66 163.041 118.66C163.741 118.66 164.395 118.493 165.001 118.16C165.615 117.827 166.115 117.4 166.501 116.88ZM173.737 109.6H170.997L170.977 119H170.377L170.397 109.6H168.337V109H170.397L170.377 105.86H170.977L170.997 109H173.737V109.6ZM175.116 115.07V109H175.716V115.07C175.716 115.73 175.876 116.333 176.196 116.88C176.523 117.42 176.956 117.853 177.496 118.18C178.043 118.5 178.646 118.66 179.306 118.66C179.966 118.66 180.566 118.5 181.106 118.18C181.653 117.853 182.086 117.42 182.406 116.88C182.733 116.333 182.896 115.73 182.896 115.07V109H183.496V119H182.896V117.23C182.53 117.837 182.03 118.327 181.396 118.7C180.763 119.073 180.066 119.26 179.306 119.26C178.533 119.26 177.83 119.073 177.196 118.7C176.563 118.32 176.056 117.813 175.676 117.18C175.303 116.547 175.116 115.843 175.116 115.07ZM185.497 119V109H186.097V110.75C186.464 110.137 186.964 109.647 187.597 109.28C188.23 108.907 188.927 108.72 189.687 108.72C190.08 108.72 190.457 108.77 190.817 108.87L190.557 109.43C190.264 109.357 189.974 109.32 189.687 109.32C189.027 109.32 188.424 109.483 187.877 109.81C187.337 110.13 186.904 110.56 186.577 111.1C186.257 111.64 186.097 112.243 186.097 112.91V119H185.497ZM196.03 119.26C195.11 119.26 194.27 119.023 193.51 118.55C192.756 118.077 192.153 117.443 191.7 116.65C191.253 115.85 191.03 114.967 191.03 114C191.03 113.267 191.16 112.583 191.42 111.95C191.68 111.31 192.036 110.75 192.49 110.27C192.95 109.783 193.483 109.403 194.09 109.13C194.696 108.857 195.343 108.72 196.03 108.72C196.743 108.72 197.4 108.853 198 109.12C198.6 109.387 199.123 109.767 199.57 110.26C200.016 110.753 200.363 111.343 200.61 112.03C200.863 112.71 200.996 113.467 201.01 114.3H191.63C191.696 115.133 191.933 115.88 192.34 116.54C192.753 117.193 193.28 117.71 193.92 118.09C194.56 118.47 195.263 118.66 196.03 118.66C196.883 118.66 197.65 118.433 198.33 117.98C199.01 117.527 199.55 116.9 199.95 116.1L200.55 116.24C200.15 117.127 199.546 117.853 198.74 118.42C197.933 118.98 197.03 119.26 196.03 119.26ZM191.63 113.7H200.41C200.383 112.92 200.17 112.197 199.77 111.53C199.37 110.863 198.843 110.33 198.19 109.93C197.536 109.523 196.816 109.32 196.03 109.32C195.236 109.32 194.516 109.517 193.87 109.91C193.23 110.303 192.71 110.833 192.31 111.5C191.91 112.16 191.683 112.893 191.63 113.7Z" fill="white"/> +<svg width="520" height="122" viewBox="0 0 520 122" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_di_0_1)"> +<rect x="4" width="305" height="114" fill="url(#paint0_linear_0_1)" shape-rendering="crispEdges"/> +<rect x="4" width="305" height="114" fill="url(#paint1_linear_0_1)" fill-opacity="0.59" shape-rendering="crispEdges"/> +<rect x="4.5" y="0.5" width="304" height="113" stroke="white" shape-rendering="crispEdges"/> +</g> +<path d="M41.1641 93C41.1641 90.4667 41.1641 87.9 41.1641 85.3C41.1641 82.7 41.1641 80.1333 41.1641 77.6C45.7641 71.4667 50.4307 65.2667 55.1641 59C59.8974 52.7333 64.5641 46.5333 69.1641 40.4C64.5641 40.4 59.8974 40.4 55.1641 40.4C50.4307 40.4 45.7641 40.4 41.1641 40.4C41.1641 37.8667 41.1641 35.3 41.1641 32.7C41.1641 30.1 41.1641 27.5333 41.1641 25C49.1641 25 57.2307 25 65.3641 25C73.5641 25 81.6641 25 89.6641 25C89.6641 27.5333 89.6641 30.1 89.6641 32.7C89.6641 35.3 89.6641 37.8667 89.6641 40.4C85.0641 46.5333 80.3974 52.7333 75.6641 59C70.9307 65.2667 66.2641 71.4667 61.6641 77.6C66.2641 77.6 70.9307 77.6 75.6641 77.6C80.3974 77.6 85.0641 77.6 89.6641 77.6C89.6641 80.1333 89.6641 82.7 89.6641 85.3C89.6641 87.9 89.6641 90.4667 89.6641 93C81.6641 93 73.5641 93 65.3641 93C57.2307 93 49.1641 93 41.1641 93ZM127.16 93C127.16 81.8 127.16 70.4667 127.16 59C127.16 47.5333 127.16 36.2 127.16 25C130.093 25 133.027 25 135.96 25C138.893 25 141.793 25 144.66 25C144.66 29.3333 144.66 33.7333 144.66 38.2C144.66 42.6 144.66 46.9667 144.66 51.3C148.06 46.9667 151.46 42.6 154.86 38.2C158.327 33.7333 161.76 29.3333 165.16 25C168.427 25 171.727 25 175.06 25C178.393 25 181.693 25 184.96 25C180.76 30.3333 176.493 35.7333 172.16 41.2C167.893 46.6 163.66 51.9667 159.46 57.3C163.86 63.1667 168.293 69.1 172.76 75.1C177.293 81.1 181.76 87.0667 186.16 93C182.693 93 179.193 93 175.66 93C172.193 93 168.727 93 165.26 93C161.86 88.2667 158.427 83.5333 154.96 78.8C151.493 74 148.06 69.2667 144.66 64.6C144.66 69.2667 144.66 74 144.66 78.8C144.66 83.5333 144.66 88.2667 144.66 93C141.793 93 138.893 93 135.96 93C133.027 93 130.093 93 127.16 93ZM211.113 93C214.58 81.8 218.047 70.4667 221.513 59C225.047 47.5333 228.547 36.2 232.013 25C235.947 25 239.913 25 243.913 25C247.98 25 251.98 25 255.913 25C259.38 36.2 262.847 47.5333 266.313 59C269.847 70.4667 273.347 81.8 276.813 93C273.947 93 271.013 93 268.013 93C265.08 93 262.147 93 259.213 93C258.547 90.8667 257.913 88.7333 257.313 86.6C256.713 84.4 256.08 82.2333 255.413 80.1C251.613 80.1 247.78 80.1 243.913 80.1C240.113 80.1 236.313 80.1 232.513 80.1C231.847 82.2333 231.213 84.4 230.613 86.6C230.013 88.7333 229.38 90.8667 228.713 93C225.847 93 222.913 93 219.913 93C216.98 93 214.047 93 211.113 93ZM236.913 65.2C239.247 65.2 241.58 65.2 243.913 65.2C246.313 65.2 248.68 65.2 251.013 65.2C249.88 61.2667 248.713 57.3 247.513 53.3C246.313 49.3 245.147 45.3333 244.013 41.4C242.88 45.3333 241.68 49.3 240.413 53.3C239.213 57.3 238.047 61.2667 236.913 65.2Z" fill="white"/> +<path d="M325.2 50V47.9L339.375 31.1H325.2V29H342.18V31.1L328.005 47.9H342.18V50H325.2ZM343.965 50V29H356.745V31.1H346.065V37.7H354.9V39.8H346.065V47.9H356.745V50H343.965ZM374.734 29V31.1H367.534V50H365.434V31.1H358.249V29H374.734ZM380.973 29H383.583L391.233 50H388.998L387.363 45.5H377.208L375.573 50H373.338L380.973 29ZM377.973 43.4H386.583L382.278 31.58L377.973 43.4ZM412.533 50H409.818L402.933 40.565L401.148 42.71V50H399.048V29H401.148V39.44L409.893 29H412.638L404.313 38.915L412.533 50ZM414.049 50V29H426.829V31.1H416.149V37.7H424.984V39.8H416.149V47.9H426.829V50H414.049ZM429.138 50V29H436.263C437.383 29 438.393 29.275 439.293 29.825C440.193 30.365 440.908 31.1 441.438 32.03C441.968 32.95 442.233 33.985 442.233 35.135C442.233 36.165 442.023 37.1 441.603 37.94C441.183 38.78 440.608 39.475 439.878 40.025C439.158 40.575 438.343 40.94 437.433 41.12L442.563 50H440.133L435.078 41.285H431.238V50H429.138ZM431.238 39.185H436.083C436.823 39.185 437.498 39.005 438.108 38.645C438.728 38.275 439.218 37.78 439.578 37.16C439.948 36.53 440.133 35.82 440.133 35.03C440.133 34.24 439.948 33.535 439.578 32.915C439.218 32.285 438.728 31.79 438.108 31.43C437.498 31.06 436.823 30.875 436.083 30.875H431.238V39.185ZM445.077 50V29H447.357L458.442 46.205V29H460.542V50H458.277L447.177 32.795V50H445.077ZM462.949 50V29H475.729V31.1H465.049V37.7H473.884V39.8H465.049V47.9H475.729V50H462.949ZM478.038 50V29H480.138V47.9H489.783V50H478.038ZM332.835 65H335.445L343.095 86H340.86L339.225 81.5H329.07L327.435 86H325.2L332.835 65ZM329.835 79.4H338.445L334.14 67.58L329.835 79.4ZM344.698 86V65H351.823C352.943 65 353.953 65.275 354.853 65.825C355.753 66.365 356.468 67.1 356.998 68.03C357.528 68.95 357.793 69.985 357.793 71.135C357.793 72.165 357.583 73.1 357.163 73.94C356.743 74.78 356.168 75.475 355.438 76.025C354.718 76.575 353.903 76.94 352.993 77.12L358.123 86H355.693L350.638 77.285H346.798V86H344.698ZM346.798 75.185H351.643C352.383 75.185 353.058 75.005 353.668 74.645C354.288 74.275 354.778 73.78 355.138 73.16C355.508 72.53 355.693 71.82 355.693 71.03C355.693 70.24 355.508 69.535 355.138 68.915C354.778 68.285 354.288 67.79 353.668 67.43C353.058 67.06 352.383 66.875 351.643 66.875H346.798V75.185ZM369.536 86.39C368.116 86.39 366.781 86.11 365.531 85.55C364.281 84.98 363.181 84.2 362.231 83.21C361.291 82.21 360.551 81.05 360.011 79.73C359.481 78.41 359.216 77 359.216 75.5C359.216 74 359.481 72.59 360.011 71.27C360.551 69.95 361.291 68.795 362.231 67.805C363.181 66.805 364.281 66.025 365.531 65.465C366.781 64.895 368.116 64.61 369.536 64.61C371.236 64.61 372.801 65.005 374.231 65.795C375.661 66.585 376.846 67.635 377.786 68.945L375.926 69.95C375.186 68.96 374.246 68.175 373.106 67.595C371.976 67.005 370.786 66.71 369.536 66.71C368.386 66.71 367.311 66.945 366.311 67.415C365.321 67.875 364.451 68.51 363.701 69.32C362.951 70.13 362.366 71.065 361.946 72.125C361.526 73.185 361.316 74.31 361.316 75.5C361.316 76.71 361.526 77.845 361.946 78.905C362.376 79.965 362.966 80.9 363.716 81.71C364.476 82.52 365.351 83.155 366.341 83.615C367.341 84.065 368.406 84.29 369.536 84.29C370.836 84.29 372.041 83.995 373.151 83.405C374.271 82.805 375.196 82.025 375.926 81.065L377.786 82.07C376.846 83.38 375.661 84.43 374.231 85.22C372.801 86 371.236 86.39 369.536 86.39ZM392.805 65H394.905V86H392.805V75.8H381.78V86H379.68V65H381.78V73.7H392.805V65ZM397.768 86V65H399.868V86H397.768ZM418.595 65V67.1H411.395V86H409.295V67.1H402.11V65H418.595ZM420.407 86V65H433.187V67.1H422.507V73.7H431.342V75.8H422.507V83.9H433.187V86H420.407ZM444.718 86.39C443.298 86.39 441.963 86.11 440.713 85.55C439.463 84.98 438.363 84.2 437.413 83.21C436.473 82.21 435.733 81.05 435.193 79.73C434.663 78.41 434.398 77 434.398 75.5C434.398 74 434.663 72.59 435.193 71.27C435.733 69.95 436.473 68.795 437.413 67.805C438.363 66.805 439.463 66.025 440.713 65.465C441.963 64.895 443.298 64.61 444.718 64.61C446.418 64.61 447.983 65.005 449.413 65.795C450.843 66.585 452.028 67.635 452.968 68.945L451.108 69.95C450.368 68.96 449.428 68.175 448.288 67.595C447.158 67.005 445.968 66.71 444.718 66.71C443.568 66.71 442.493 66.945 441.493 67.415C440.503 67.875 439.633 68.51 438.883 69.32C438.133 70.13 437.548 71.065 437.128 72.125C436.708 73.185 436.498 74.31 436.498 75.5C436.498 76.71 436.708 77.845 437.128 78.905C437.558 79.965 438.148 80.9 438.898 81.71C439.658 82.52 440.533 83.155 441.523 83.615C442.523 84.065 443.588 84.29 444.718 84.29C446.018 84.29 447.223 83.995 448.333 83.405C449.453 82.805 450.378 82.025 451.108 81.065L452.968 82.07C452.028 83.38 450.843 84.43 449.413 85.22C447.983 86 446.418 86.39 444.718 86.39ZM470.513 65V67.1H463.313V86H461.213V67.1H454.028V65H470.513ZM480.469 86.39C478.789 86.39 477.339 85.98 476.119 85.16C474.899 84.34 473.959 83.24 473.299 81.86C472.649 80.47 472.324 78.93 472.324 77.24V65H474.424V77.24C474.424 78.52 474.659 79.695 475.129 80.765C475.599 81.835 476.284 82.69 477.184 83.33C478.084 83.97 479.179 84.29 480.469 84.29C481.789 84.29 482.894 83.97 483.784 83.33C484.684 82.68 485.364 81.82 485.824 80.75C486.284 79.68 486.514 78.51 486.514 77.24V65H488.614V77.24C488.614 78.51 488.424 79.7 488.044 80.81C487.674 81.91 487.134 82.88 486.424 83.72C485.724 84.56 484.869 85.215 483.859 85.685C482.859 86.155 481.729 86.39 480.469 86.39ZM490.87 86V65H497.995C499.115 65 500.125 65.275 501.025 65.825C501.925 66.365 502.64 67.1 503.17 68.03C503.7 68.95 503.965 69.985 503.965 71.135C503.965 72.165 503.755 73.1 503.335 73.94C502.915 74.78 502.34 75.475 501.61 76.025C500.89 76.575 500.075 76.94 499.165 77.12L504.295 86H501.865L496.81 77.285H492.97V86H490.87ZM492.97 75.185H497.815C498.555 75.185 499.23 75.005 499.84 74.645C500.46 74.275 500.95 73.78 501.31 73.16C501.68 72.53 501.865 71.82 501.865 71.03C501.865 70.24 501.68 69.535 501.31 68.915C500.95 68.285 500.46 67.79 499.84 67.43C499.23 67.06 498.555 66.875 497.815 66.875H492.97V75.185ZM506.809 86V65H519.589V67.1H508.909V73.7H517.744V75.8H508.909V83.9H519.589V86H506.809Z" fill="white"/> +<defs> +<filter id="filter0_di_0_1" x="0" y="0" width="313" height="122" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dy="4"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="out"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> +<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_0_1"/> +<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_0_1" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dy="4"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> +<feBlend mode="normal" in2="shape" result="effect2_innerShadow_0_1"/> +</filter> +<linearGradient id="paint0_linear_0_1" x1="4" y1="114" x2="309" y2="114" gradientUnits="userSpaceOnUse"> +<stop stop-color="#001AFF" stop-opacity="0.3"/> +<stop offset="1" stop-color="#B20000"/> +</linearGradient> +<linearGradient id="paint1_linear_0_1" x1="4" y1="57" x2="309" y2="57" gradientUnits="userSpaceOnUse"> +<stop stop-color="#001AFF" stop-opacity="0.3"/> +<stop offset="0.496" stop-color="#AA00FF" stop-opacity="0.496"/> +<stop offset="1" stop-color="#EA0000"/> +</linearGradient> +</defs> </svg> |
