diff options
Diffstat (limited to 'dev/Kernel')
304 files changed, 0 insertions, 21198 deletions
diff --git a/dev/Kernel/ArchKit/ArchKit.hxx b/dev/Kernel/ArchKit/ArchKit.hxx deleted file mode 100644 index a3fd81a6..00000000 --- a/dev/Kernel/ArchKit/ArchKit.hxx +++ /dev/null @@ -1,105 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Function.hxx> - -#include <FirmwareKit/Handover.hxx> - -#ifdef __NEWOS_AMD64__ -#include <HALKit/AMD64/HalPageAlloc.hxx> -#include <HALKit/AMD64/Hypervisor.hxx> -#include <HALKit/AMD64/Processor.hxx> -#elif defined(__NEWOS_POWER64__) -#include <HALKit/POWER/Processor.hxx> -#elif defined(__NEWOS_ARM64__) -#include <HALKit/ARM64/Processor.hxx> -#else -#error !!! unknown architecture !!! -#endif - -namespace Kernel -{ - inline SSizeT rt_hash_seed(const char* seed, int mul) - { - SSizeT hash = 0; - - for (SSizeT idx = 0; seed[idx] != 0; ++idx) - { - hash += seed[idx]; - hash ^= mul; - } - - return hash; - } - - /// @brief write to mapped memory register - /// @param base the base address. - /// @param reg the register. - /// @param value the write to write on it. - inline Void ke_dma_write(UInt32 base, UInt32 reg, UInt32 value) noexcept - { - *(volatile UInt32*)((UInt64)base + reg) = value; - } - - /// @brief read from mapped memory register. - /// @param base base address - /// @param reg the register. - /// @return the value inside the register. - inline UInt32 ke_dma_read(UInt32 base, UInt32 reg) noexcept - { - return *(volatile UInt32*)((UInt64)base + reg); - } - - /// @brief Print a region of memory. - /// @param start - /// @param length - inline Void ke_print_raw_memory(const void* start, Size length) - { - const UInt8* ptr = (const UInt8*)start; - - for (Size i = 0; i < length; i++) - { - if (i % 16 == 0) - { - kcout << hex_number((UIntPtr)ptr + i); - } - else - { - kcout << hex_number(ptr[i]); - } - - kcout << " "; - } - - kcout << "\r"; - } -} // namespace Kernel - -#define kKernelMaxSystemCalls (256) - -typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr); - -struct HAL_SYSCALL_RECORD final -{ - Kernel::Int64 fHash; - Kernel::Bool fHooked; - rt_syscall_proc fProc; -}; - -inline Kernel::Array<HAL_SYSCALL_RECORD, - kKernelMaxSystemCalls> - kSyscalls; - -inline Kernel::Array<HAL_SYSCALL_RECORD, - kKernelMaxSystemCalls> - kKerncalls; - -EXTERN_C Kernel::HAL::StackFramePtr rt_get_current_context(); -EXTERN_C Kernel::Void rt_do_context_switch(Kernel::HAL::StackFramePtr stack_frame); diff --git a/dev/Kernel/ArchKit/compile_flags.txt b/dev/Kernel/ArchKit/compile_flags.txt deleted file mode 100644 index c15efc77..00000000 --- a/dev/Kernel/ArchKit/compile_flags.txt +++ /dev/null @@ -1,8 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --I$(HOME)/ --D__NEWOS_AMD64__ --D__ED__ diff --git a/dev/Kernel/CFKit/GUIDWizard.hxx b/dev/Kernel/CFKit/GUIDWizard.hxx deleted file mode 100644 index 034aceea..00000000 --- a/dev/Kernel/CFKit/GUIDWizard.hxx +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <CFKit/GUIDWrapper.hxx> -#include <NewKit/Array.hxx> -#include <NewKit/ArrayList.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Ref.hxx> -#include <NewKit/Stream.hxx> -#include <NewKit/String.hxx> - -namespace Kernel::XRN::Version1 -{ - Ref<GUIDSequence*> cf_make_sequence(const ArrayList<UInt32>& seq); - ErrorOr<Ref<Kernel::StringView>> cf_try_guid_to_string(Ref<GUIDSequence*>& guid); -} // namespace Kernel::XRN::Version1 diff --git a/dev/Kernel/CFKit/GUIDWrapper.hxx b/dev/Kernel/CFKit/GUIDWrapper.hxx deleted file mode 100644 index 8810f303..00000000 --- a/dev/Kernel/CFKit/GUIDWrapper.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> -#include <NewKit/Stream.hxx> - -/* GUID for C++ Components */ - -#define kXRNNil "@{........-....-M...-N...-............}" - -// eXtensible Resource Information -namespace Kernel::XRN -{ - union GUIDSequence { - alignas(8) UShort u8[16]; - alignas(8) UShort u16[8]; - alignas(8) UInt u32[4]; - alignas(8) ULong u64[2]; - - struct - { - alignas(8) UInt fMs1; - UShort fMs2; - UShort fMs3; - UChar fMs4[8]; - }; - }; - - class GUID final - { - public: - explicit GUID() = default; - ~GUID() = default; - - public: - GUID& operator=(const GUID&) = default; - GUID(const GUID&) = default; - - public: - GUIDSequence& operator->() noexcept - { - return fUUID; - } - GUIDSequence& Leak() noexcept - { - return fUUID; - } - - private: - GUIDSequence fUUID; - }; -} // namespace Kernel::XRN diff --git a/dev/Kernel/CFKit/LoaderUtils.hxx b/dev/Kernel/CFKit/LoaderUtils.hxx deleted file mode 100644 index 3edacc67..00000000 --- a/dev/Kernel/CFKit/LoaderUtils.hxx +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __CFKIT_LOADER_UTILS_HXX__ -#define __CFKIT_LOADER_UTILS_HXX__ - -#include <KernelKit/PE.hxx> -#include <KernelKit/MSDOS.hxx> - -namespace Kernel -{ - /// @brief Find the PE header inside the blob. - inline auto ldr_find_exec_header(DosHeaderPtr ptrDos) -> ExecHeaderPtr - { - if (!ptrDos) - return nullptr; - - if (ptrDos->eMagic[0] != kMagMz0) - return nullptr; - - if (ptrDos->eMagic[1] != kMagMz1) - return nullptr; - - return (ExecHeaderPtr)(VoidPtr)(&ptrDos->eLfanew + 1); - } - - /// @brief Find the PE optional header inside the blob. - inline auto ldr_find_opt_exec_header(DosHeaderPtr ptrDos) -> ExecOptionalHeaderPtr - { - if (!ptrDos) - return nullptr; - - auto exec = ldr_find_exec_header(ptrDos); - - if (!exec) - return nullptr; - - return (ExecOptionalHeaderPtr)(VoidPtr)(&exec->mCharacteristics + 1); - } - - /// @brief Find the PE header inside the blob. - /// @note overloaded function. - inline auto ldr_find_exec_header(const Char* ptrDos) -> ExecHeaderPtr - { - return ldr_find_exec_header((DosHeaderPtr)ptrDos); - } - - - /// @brief Find the PE header inside the blob. - /// @note overloaded function. - inline auto ldr_find_opt_exec_header(const Char* ptrDos) -> ExecOptionalHeaderPtr - { - return ldr_find_opt_exec_header((DosHeaderPtr)ptrDos); - } -} // namespace Kernel - -#endif // ifndef __CFKIT_LOADER_UTILS_HXX__ diff --git a/dev/Kernel/CFKit/Property.hxx b/dev/Kernel/CFKit/Property.hxx deleted file mode 100644 index 602c061f..00000000 --- a/dev/Kernel/CFKit/Property.hxx +++ /dev/null @@ -1,47 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __INC_PROPS_HPP__ -#define __INC_PROPS_HPP__ - -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Function.hxx> -#include <NewKit/String.hxx> - -#define cMaxPropLen 4096 - -namespace Kernel -{ - /// @brief handle to anything (number, ptr, string...) - using PropertyId = UIntPtr; - - /// @brief Kernel property class. - /// @example \Properties\SmpCores or \Properties\KernelVersion - class Property - { - public: - Property() = default; - virtual ~Property(); - - public: - Property& operator=(const Property&) = default; - Property(const Property&) = default; - - bool StringEquals(StringView& name); - PropertyId& GetValue(); - StringView& GetKey(); - - private: - StringView fName{cMaxPropLen}; - PropertyId fAction{No}; - }; - - template <SizeT N> - using PropertyArray = Array<Property, N>; -} // namespace Kernel - -#endif // !__INC_PROPS_HPP__ diff --git a/dev/Kernel/CFKit/URL.hxx b/dev/Kernel/CFKit/URL.hxx deleted file mode 100644 index 02cced28..00000000 --- a/dev/Kernel/CFKit/URL.hxx +++ /dev/null @@ -1,33 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_URL_HPP_ -#define _INC_URL_HPP_ - -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> - -namespace Kernel -{ - class URL final - { - public: - explicit URL(StringView& strUrl); - ~URL(); - - public: - Ref<ErrorOr<StringView>> Location() noexcept; - Ref<ErrorOr<StringView>> Protocol() noexcept; - - private: - Ref<StringView> fUrlView; - }; - - ErrorOr<StringView> url_extract_location(const Char* url); - ErrorOr<StringView> url_extract_protocol(const Char* url); -} // namespace Kernel - -#endif /* ifndef _INC_URL_HPP_ */ diff --git a/dev/Kernel/CFKit/compile_flags.txt b/dev/Kernel/CFKit/compile_flags.txt deleted file mode 100644 index a37ae6bf..00000000 --- a/dev/Kernel/CFKit/compile_flags.txt +++ /dev/null @@ -1,5 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ diff --git a/dev/Kernel/CompilerKit/CompilerKit.hxx b/dev/Kernel/CompilerKit/CompilerKit.hxx deleted file mode 100644 index f2ec4db2..00000000 --- a/dev/Kernel/CompilerKit/CompilerKit.hxx +++ /dev/null @@ -1,13 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_CL_HPP -#define _INC_CL_HPP - -#include <CompilerKit/Detail.hxx> -#include <CompilerKit/Version.hxx> - -#endif /* ifndef _INC_CL_HPP */ diff --git a/dev/Kernel/CompilerKit/Detail.hxx b/dev/Kernel/CompilerKit/Detail.hxx deleted file mode 100644 index 4cc25dae..00000000 --- a/dev/Kernel/CompilerKit/Detail.hxx +++ /dev/null @@ -1,27 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#ifdef __NEWOSKRNL__ -#include <NewKit/Defines.hxx> -#endif // ifdef __NEWOSKRNL__ - -#define NEWOS_COPY_DELETE(KLASS) \ - KLASS& operator=(const KLASS&) = delete; \ - KLASS(const KLASS&) = delete; - -#define NEWOS_COPY_DEFAULT(KLASS) \ - KLASS& operator=(const KLASS&) = default; \ - KLASS(const KLASS&) = default; - -#define NEWOS_MOVE_DELETE(KLASS) \ - KLASS& operator=(KLASS&&) = delete; \ - KLASS(KLASS&&) = delete; - -#define NEWOS_MOVE_DEFAULT(KLASS) \ - KLASS& operator=(KLASS&&) = default; \ - KLASS(KLASS&&) = default; diff --git a/dev/Kernel/CompilerKit/Version.hxx b/dev/Kernel/CompilerKit/Version.hxx deleted file mode 100644 index c0d42603..00000000 --- a/dev/Kernel/CompilerKit/Version.hxx +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#define BOOTLOADER_VERSION L"v1.14.2" -#define KERNEL_VERSION "v1.14.2" diff --git a/dev/Kernel/Docs/Explicit Partition Map.pdf b/dev/Kernel/Docs/Explicit Partition Map.pdf Binary files differdeleted file mode 100644 index 1e2f5318..00000000 --- a/dev/Kernel/Docs/Explicit Partition Map.pdf +++ /dev/null diff --git a/dev/Kernel/Docs/SPECIFICATION.md b/dev/Kernel/Docs/SPECIFICATION.md deleted file mode 100644 index e58d63ee..00000000 --- a/dev/Kernel/Docs/SPECIFICATION.md +++ /dev/null @@ -1,62 +0,0 @@ -=================================== - -# 0: General Information - -=================================== - -- ABI and Format: PEF/PE32+. -- Kernel architecture: Portable hybrid kernel. -- Language: C++/(Assembly (AMD64, X64000, X86S, ARM64, POWER, RISCV)) - -=================================== - -# 1: The NewKernel - -=================================== - -- Drive/Device Abstraction. -- SMP, Preemptive Multi Threading. -- Separation of Files/Devices. -- Networking. -- Hardware Abstraction Layer. -- Native Filesystem support (NewFS, FAT32 and ffs2). -- Program Loaders. -- Thread Local Storage. -- Semaphore, Locks, Timers. -- Canary mechanisms. -- Dynamic Sys. -- Cross Platform. -- Permission Selectors. - -=================================== - -# 2: The Filesystem - -=================================== - -- Catalog object with associated forks. -- Large storage support. -- Long file names. -- UNIX path style. - -================================== - -# 3: Common naming conventions: - -================================== - -- Kernel -> ke_init_x -- RunTime -> rt_copy_mem -- Hal -> hal_foo_bar - -=================================== - -# 4: The newosldr - -=================================== - -- Capable of booting from a network drive. -- Loads a PE file which is the kernel. -- Sanity checks, based on the number of sections. -- Handover compliant. -- Does check for a valid partition (useful in the case of recovering) diff --git a/dev/Kernel/Docs/TODO-LIST.md b/dev/Kernel/Docs/TODO-LIST.md deleted file mode 100644 index 62cc886c..00000000 --- a/dev/Kernel/Docs/TODO-LIST.md +++ /dev/null @@ -1,25 +0,0 @@ -# TODO list - -- We need preemptive multi-threading. [ X ] -- We then need sync primitives. [ X ] -- We also need a system library for the OS. [ X ] -- We need a bootloader for AMD64 [ X ] - - Implement Boot Services [ X ] - - Design Handover [ X ] - - Load kernel into memory [ X ] - - Fix bug in kernel loader, which causes a 06 #UD. [ X ] - - Load Kernel [ X ] - - Add IDT [ X ] - - AHCI driver [ WiP ] -- Context switch x87/SSE/AVX registers [ X ] -- Framebuffer [ X ] -- ATA support [ X ] -- Make installer [ X ] - -Status: - -newosldr: Need to boot from EPM partition. [ X ] -<br> -NewKernel: New Filesystem is done. [ X ] - -**Refer to Jira!** diff --git a/dev/Kernel/FSKit/Defines.hxx b/dev/Kernel/FSKit/Defines.hxx deleted file mode 100644 index de33dd3a..00000000 --- a/dev/Kernel/FSKit/Defines.hxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -#define FSKIT_VERSION "1.00" diff --git a/dev/Kernel/FSKit/FAT32.hxx b/dev/Kernel/FSKit/FAT32.hxx deleted file mode 100644 index 04fa0c6d..00000000 --- a/dev/Kernel/FSKit/FAT32.hxx +++ /dev/null @@ -1,12 +0,0 @@ -/* -------------------------------------------
-
- Copyright ZKA Technologies.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <NewKit/Defines.hxx>
-
-/// @file FAT32.hxx
-/// @brief FAT32 support.
\ No newline at end of file diff --git a/dev/Kernel/FSKit/IndexableProperty.hxx b/dev/Kernel/FSKit/IndexableProperty.hxx deleted file mode 100644 index 89d90ddc..00000000 --- a/dev/Kernel/FSKit/IndexableProperty.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <CFKit/Property.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <KernelKit/DriveManager.hxx> - -#define kIndexerNodeNameLength 255 -#define kIndexerClaimed 0xCF - -namespace Kernel -{ - namespace Indexer - { - struct IndexProperty final - { - public: - Char Drive[kDriveNameLen]; - Char Path[kIndexerNodeNameLength]; - }; - - class IndexableProperty final : public Property - { - public: - explicit IndexableProperty() - : Property() - { - Kernel::StringView strProp(cMaxPropLen); - strProp += "\\Properties\\Indexable"; - - this->GetKey() = strProp; - } - - ~IndexableProperty() override = default; - - NEWOS_COPY_DEFAULT(IndexableProperty); - - public: - IndexProperty& Leak() noexcept; - - public: - void AddFlag(Int16 flag); - void RemoveFlag(Int16 flag); - Int16 HasFlag(Int16 flag); - - private: - IndexProperty fIndex; - UInt32 fFlags; - }; - - /// @brief Index a file into the indexer instance. - /// @param filename path - /// @param filenameLen used bytes in path. - /// @param indexer the filesystem indexer. - /// @return none. - Void fs_index_file(const Char* filename, SizeT filenameLen, IndexableProperty& indexer); - } // namespace Indexer -} // namespace Kernel diff --git a/dev/Kernel/FSKit/NewFS.hxx b/dev/Kernel/FSKit/NewFS.hxx deleted file mode 100644 index 54b11e38..00000000 --- a/dev/Kernel/FSKit/NewFS.hxx +++ /dev/null @@ -1,323 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: NewFS.hxx - Purpose: - - Revision History: - - ?/?/?: Added file (amlel) - 12/02/24: Add UUID macro for EPM and GPT partition schemes. - 3/16/24: Add mandatory sector size, kNewFSSectorSz is set to 2048 by -default. - -------------------------------------------- */ - -#pragma once - -#include <CompilerKit/CompilerKit.hxx> -#include <HintKit/CompilerHint.hxx> -#include <KernelKit/DriveManager.hxx> -#include <NewKit/Defines.hxx> - -/** - @brief New File System specification. - @author Amlal EL Mahrouss -*/ - -#define kNewFSInvalidFork (-1) -#define kNewFSInvalidCatalog (-1) -#define kNewFSNodeNameLen (256) - -#define kNewFSSectorSz (512) - -#define kNewFSIdentLen (8) -#define kNewFSIdent " NewFS" -#define kNewFSPadLen (400) - -#define kNewFSMetaFilePrefix '$' - -#define kNewFSVersionInteger (0x0127) -#define kNewFSVerionString "1.27" - -/// @brief Standard fork types. -#define kNewFSDataFork "main_data" -#define kNewFSResourceFork "main_rsrc" - -#define kNewFSCatalogKindFile (1) -#define kNewFSCatalogKindDir (2) -#define kNewFSCatalogKindAlias (3) - -#define kNewFSForkSize (8192) - -//! shared between network or -//! other filesystems. Export forks as .zip when copying. -#define kNewFSCatalogKindShared (4) - -#define kNewFSCatalogKindResource (5) -#define kNewFSCatalogKindExecutable (6) - -#define kNewFSCatalogKindPage (8) - -#define kNewFSPartitionTypeStandard (7) -#define kNewFSPartitionTypePage (8) -#define kNewFSPartitionTypeBoot (9) - -#define kNewFSCatalogKindDevice (9) -#define kNewFSCatalogKindLock (10) - -#define kNewFSCatalogKindRLE (11) - -#define kNewFSCatalogKindMetaFile (12) - -#define kNewFSSeparator '\\' -#define kNewFSSeparatorAlt '/' - -#define kNewFSUpDir ".." -#define kNewFSRoot "\\" -#define kNewFSRootAlt "/" - -#define kNewFSLF '\r' -#define kNewFSEOF (-1) - -#define kNewFSBitWidth (sizeof(Kernel::Char)) -#define kNewFSLbaType (Kernel::Lba) - -/// Start After the PM headers, pad 1024 bytes. -#define kNewFSStartLba (1024) -#define kNewFSCatalogStartAddress ((2048) + sizeof(NFS_ROOT_PARTITION_BLOCK) + sizeof(NFS_CATALOG_STRUCT)) - -#define kResourceTypeDialog (10) -#define kResourceTypeString (11) -#define kResourceTypeMenu (12) - -#define kConfigLen (64) -#define kPartLen (32) - -#define kNewFSFlagDeleted (70) -#define kNewFSFlagUnallocated (0) -#define kNewFSFlagCreated (71) - -#define kNewFSMimeNameLen (200) - -#define kNewFSForkNameLen (200U) - -struct NFS_CATALOG_STRUCT; -struct NFS_FORK_STRUCT; -struct NFS_ROOT_PARTITION_BLOCK; - -enum -{ - kNewFSHardDrive = 0xC0, // Hard Drive - kNewFSSolidStateDrive = 0xC1, // Solid State Drive - kNewFSOpticalDrive = 0x0C, // Blu-Ray/DVD - kNewFSMassStorageDevice = 0xCC, // USB - kNewFSScsi = 0xC4, // SCSI Hard Drive - kNewFSFlashDrive = 0xC6, - kNewFSUnknown = 0xFF, // Unknown device. - kNewFSDriveCount = 7, -}; - -/// @brief Catalog type. -struct PACKED NFS_CATALOG_STRUCT final -{ - Kernel::Char Name[kNewFSNodeNameLen]; - Kernel::Char Mime[kNewFSMimeNameLen]; - - /// Catalog status flag. - Kernel::UInt16 Flags; - /// Custom catalog flags. - Kernel::UInt16 FileFlags; - /// Catalog kind. - Kernel::Int32 Kind; - - /// Size of the data fork. - Kernel::Lba DataForkSize; - - /// Size of all resource forks. - Kernel::Lba ResourceForkSize; - - Kernel::Lba DataFork; - Kernel::Lba ResourceFork; - - Kernel::Lba NextSibling; - Kernel::Lba PrevSibling; -}; - -/// @brief Fork type, contains a data page. -/// @note The way we store is way different than how other filesystems do, specific chunk of code are -/// written into either the data fork or resource fork, the resource fork is reserved for file metadata. -/// whereas the data fork is reserved for file data. -struct PACKED NFS_FORK_STRUCT final -{ - Kernel::Char ForkName[kNewFSForkNameLen]; - Kernel::Char CatalogName[kNewFSNodeNameLen]; - - Kernel::Int32 Flags; - Kernel::Int32 Kind; - - Kernel::Int64 ResourceId; - Kernel::Int32 ResourceKind; - Kernel::Int32 ResourceFlags; - - Kernel::Lba DataOffset; // 8 Where to look for this data? - Kernel::SizeT DataSize; /// Data size according using sector count. - - Kernel::Lba NextSibling; - Kernel::Lba PreviousSibling; -}; - -/// @brief Partition block type -struct PACKED NFS_ROOT_PARTITION_BLOCK final -{ - Kernel::Char Ident[kNewFSIdentLen]; - Kernel::Char PartitionName[kPartLen]; - - Kernel::Int32 Flags; - Kernel::Int32 Kind; - - Kernel::Lba StartCatalog; - Kernel::SizeT CatalogCount; - - Kernel::SizeT DiskSize; - - Kernel::SizeT FreeCatalog; - Kernel::SizeT FreeSectors; - - Kernel::SizeT SectorCount; - Kernel::SizeT SectorSize; - - Kernel::UInt64 Version; - - Kernel::Lba EpmBlock; - - Kernel::Char Pad[kNewFSPadLen-sizeof(Kernel::Lba)]; -}; - -namespace Kernel -{ - enum - { - kNewFSSubDriveA, - kNewFSSubDriveB, - kNewFSSubDriveC, - kNewFSSubDriveD, - kNewFSSubDriveInvalid, - kNewFSSubDriveCount, - }; - - /// \brief Resource fork kind. - enum - { - kNewFSRsrcForkKind = 0, - kNewFSDataForkKind = 1 - }; - - /// - /// \name NewFSParser - /// \brief NewFS parser class. (catalog creation, remove removal, root, - /// forks...) Designed like the DOM, detects the filesystem automatically. - /// - class NewFSParser final - { - public: - explicit NewFSParser() = default; - ~NewFSParser() = default; - - public: - NEWOS_COPY_DEFAULT(NewFSParser); - - public: - /// @brief Creates a new fork inside the New filesystem partition. - /// @param catalog it's catalog - /// @param theFork the fork itself. - /// @return the fork - _Output NFS_FORK_STRUCT* CreateFork(_Input NFS_CATALOG_STRUCT* catalog, - _Input NFS_FORK_STRUCT& theFork); - - /// @brief Find fork inside New filesystem. - /// @param catalog the catalog. - /// @param name the fork name. - /// @return the fork. - _Output NFS_FORK_STRUCT* FindFork(_Input NFS_CATALOG_STRUCT* catalog, - _Input const Char* name, - Boolean dataOrRsrc); - - _Output Void RemoveFork(_Input NFS_FORK_STRUCT* fork); - - _Output Void CloseFork(_Input NFS_FORK_STRUCT* fork); - - _Output NFS_CATALOG_STRUCT* FindCatalog(_Input const char* catalogName, Lba& outLba); - - _Output NFS_CATALOG_STRUCT* GetCatalog(_Input const char* name); - - _Output NFS_CATALOG_STRUCT* CreateCatalog(_Input const char* name, - _Input const Int32& flags, - _Input const Int32& kind); - - _Output NFS_CATALOG_STRUCT* CreateCatalog(_Input const char* name); - - Bool WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, - voidPtr data, - SizeT sizeOfData, - _Input const char* forkName); - - VoidPtr ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, - SizeT dataSz, - _Input const char* forkName); - - bool Seek(_Input _Output NFS_CATALOG_STRUCT* catalog, SizeT off); - - SizeT Tell(_Input _Output NFS_CATALOG_STRUCT* catalog); - - bool RemoveCatalog(_Input const Char* catalog); - - bool CloseCatalog(_InOut NFS_CATALOG_STRUCT* catalog); - - /// @brief Make a EPM+NewFS drive out of the disk. - /// @param drive The drive to write on. - /// @return If it was sucessful, see ErrLocal(). - bool Format(_Input _Output DriveTrait* drive, _Input const Lba endLba, _Input const Int32 flags, const Char* part_name); - - public: - Int32 fDriveIndex{kNewFSSubDriveA}; - }; - - /// - /// \name NewFilesystemHelper - /// \brief Filesystem helper and utils. - /// - - class NewFilesystemHelper final - { - public: - STATIC const char* Root(); - STATIC const char* UpDir(); - STATIC const char Separator(); - STATIC const char MetaFile(); - }; - - namespace Detail - { - Boolean fs_init_newfs(Void) noexcept; - } // namespace Detail -} // namespace Kernel - -/// @brief Write to newfs disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Kernel::Int32 fs_newfs_write(Kernel::MountpointInterface* Mnt, - Kernel::DriveTrait& DrvTrait, - Kernel::Int32 DrvIndex); - -/// @brief Read from newfs disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Kernel::Int32 fs_newfs_read(Kernel::MountpointInterface* Mnt, - Kernel::DriveTrait& DrvTrait, - Kernel::Int32 DrvIndex); diff --git a/dev/Kernel/FirmwareKit/.gitkeep b/dev/Kernel/FirmwareKit/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/FirmwareKit/.gitkeep +++ /dev/null diff --git a/dev/Kernel/FirmwareKit/CoreBoot/.gitkeep b/dev/Kernel/FirmwareKit/CoreBoot/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/FirmwareKit/CoreBoot/.gitkeep +++ /dev/null diff --git a/dev/Kernel/FirmwareKit/EFI.hxx b/dev/Kernel/FirmwareKit/EFI.hxx deleted file mode 100644 index a6c4616f..00000000 --- a/dev/Kernel/FirmwareKit/EFI.hxx +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <FirmwareKit/EFI/EFI.hxx> - -/// @note this header is used to reference the EFI/EFI.hxx
\ No newline at end of file diff --git a/dev/Kernel/FirmwareKit/EFI/API.hxx b/dev/Kernel/FirmwareKit/EFI/API.hxx deleted file mode 100644 index d666bbf2..00000000 --- a/dev/Kernel/FirmwareKit/EFI/API.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __EFI_API__ -#define __EFI_API__ - -#include <FirmwareKit/EFI/EFI.hxx> -#include <FirmwareKit/Handover.hxx> -#include <KernelKit/MSDOS.hxx> -#include <KernelKit/PE.hxx> - -#define kNewOSSubsystem 17 - -#ifdef __NEWOSLDR__ -// forward decl. -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__ - -inline EfiSystemTable* ST = nullptr; -inline EfiBootServices* BS = nullptr; - -EXTERN_C void rt_cli(); -EXTERN_C void rt_hlt(); - -namespace EFI -{ - /// @brief Halt and clear interrupts. - /// @return - inline Void Stop() noexcept - { - while (1) - { - rt_hlt(); - rt_cli(); - } - } - - /** -@brief Exit EFI API to let the OS load correctly. -Bascially frees everything we have in the EFI side. -*/ - inline void ExitBootServices(UInt64 MapKey, EfiHandlePtr ImageHandle) noexcept - { - if (!ST) - return; - - ST->BootServices->ExitBootServices(ImageHandle, MapKey); - } - - enum - { - kPartEPM, - kPartGPT, - kPartMBR, - kPartCnt, - }; - - inline UInt32 Platform() noexcept - { - return kPeMachineAMD64; - } - - /*** - * @brief Throw an error, stop execution as well. - * @param ErrorCode error code to be print. - * @param Reason reason to be print. - */ - inline void ThrowError(const EfiCharType* ErrorCode, - const EfiCharType* Reason) noexcept - { - ST->ConOut->OutputString(ST->ConOut, L"\r*** STOP ***\r"); - - ST->ConOut->OutputString(ST->ConOut, L"*** Error: "); - ST->ConOut->OutputString(ST->ConOut, ErrorCode); - - ST->ConOut->OutputString(ST->ConOut, L", Reason: "); - ST->ConOut->OutputString(ST->ConOut, Reason); - - ST->ConOut->OutputString(ST->ConOut, L" ***\r"); - - EFI::Stop(); - } -} // namespace EFI - -inline void InitEFI(EfiSystemTable* SystemTable) noexcept -{ - if (!SystemTable) - return; - - ST = SystemTable; - BS = ST->BootServices; - - ST->ConOut->ClearScreen(SystemTable->ConOut); - ST->ConOut->SetAttribute(SystemTable->ConOut, kEFIYellow); - - ST->BootServices->SetWatchdogTimer(0, 0, 0, nullptr); - ST->ConOut->EnableCursor(ST->ConOut, false); -} - -#ifdef __NEWOSLDR__ - -#include <BootKit/Platform.hxx> - -#endif // ifdef __NEWOSLDR__ - -#endif /* ifndef __EFI_API__ */ diff --git a/dev/Kernel/FirmwareKit/EFI/EFI.hxx b/dev/Kernel/FirmwareKit/EFI/EFI.hxx deleted file mode 100644 index 2237ce36..00000000 --- a/dev/Kernel/FirmwareKit/EFI/EFI.hxx +++ /dev/null @@ -1,784 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __EFI__ -#define __EFI__ - -/** -@brief Kernel Implementation of EFI. -@note This API is in WiP, so it's not 'pretty', just deal with it. We'll be -improving that later. -@author Amlal El Mahrouss -*/ - -#include <NewKit/Defines.hxx> - -using namespace Kernel; - -/* we always use stdcall in EFI, the pascal way of calling functions. */ - -#ifndef EPI_API -#define EFI_API __attribute__((ms_abi)) -#endif // ifndef EPI_API - -// Forward decls - -struct EfiTableHeader; -struct EfiLoadFileProtocol; -struct EfiSimpleTextOutputProtocol; -struct EfiDevicePathProtocol; -struct EfiBootServices; -struct EfiMemoryDescriptor; -struct EfiSystemTable; -struct EfiGUID; -struct EfiFileDevicePathProtocol; -struct EfiHandle; -struct EfiGraphicsOutputProtocol; -struct EfiBitmask; -struct EfiFileProtocol; - -typedef UInt64 EfiStatusType; - -/// @brief Core Handle Kind -/// This is like NT's Win32 HANDLE type. -typedef struct EfiHandle -{ -}* EfiHandlePtr; - -/* UEFI uses wide characters by default. */ -typedef WideChar EfiCharType; - -typedef UInt64 EfiPhysicalAddress; -typedef UIntPtr EfiVirtualAddress; - -/// What's BootBolicy? -/// If TRUE, indicates that the request originates from the boot manager, and -/// that the boot manager is attempting to load FilePath as a boot selection. If -/// FALSE, then FilePath must match an exact file to be loaded. - -typedef UInt64(EFI_API* EfiTextString)(struct EfiSimpleTextOutputProtocol* This, - const WideChar* OutputString); - -typedef UInt64(EFI_API* EfiTextAttrib)(struct EfiSimpleTextOutputProtocol* This, - const WideChar Attribute); - -typedef UInt64(EFI_API* EfiTextClear)(struct EfiSimpleTextOutputProtocol* This); - -typedef UInt64(EFI_API* EfiLoadFile)(EfiLoadFileProtocol* This, - EfiFileDevicePathProtocol* FilePath, - Boolean BootPolicy, - UInt32* BufferSize, - VoidPtr Buffer); - -typedef UInt64(EFI_API* EfiCopyMem)(VoidPtr DstBuf, VoidPtr SrcBuf, SizeT Length); -typedef UInt64(EFI_API* EfiSetMem)(VoidPtr DstBuf, Char Byte, SizeT Length); - -typedef UInt64(EFI_API* EfiHandleProtocol)(EfiHandlePtr Handle, EfiGUID* Guid, VoidPtr* Device); - -typedef UInt64(EFI_API* EfiLocateDevicePath)(EfiGUID* Protocol, - EfiDevicePathProtocol** DevicePath, - EfiHandlePtr Device); - -typedef UInt64(EFI_API* EfiStartImage)(EfiHandlePtr Handle, VoidPtr ArgsSize, VoidPtr ArgsPtr); - -typedef UInt64(EFI_API* EfiLoadImage)(Boolean BootPolicy, - EfiHandlePtr ParentHandle, - EfiFileDevicePathProtocol* DeviceFile, - VoidPtr buffer, - SizeT size, - EfiHandlePtr* ppHandle); - -/// EFI pool helpers, taken from iPXE. - -typedef enum EfiMemoryType -{ - /// - /// Not used. - /// - EfiReservedMemoryType, - /// - /// The code portions of a loaded application. - /// (Note that UEFI OS loaders are UEFI applications.) - /// - EfiLoaderCode, - /// - /// The data portions of a loaded application and the default data allocation - /// type used by an application to allocate pool memory. - /// - EfiLoaderData, - /// - /// The code portions of a loaded Boot Services Driver. - /// - EfiBootServicesCode, - /// - /// The data portions of a loaded Boot Serves Driver, and the default data - /// allocation type used by a Boot Services Driver to allocate pool memory. - /// - EfiBootServicesData, - /// - /// The code portions of a loaded Runtime Services Driver. - /// - EfiRuntimeServicesCode, - /// - /// The data portions of a loaded Runtime Services Driver and the default - /// data allocation type used by a Runtime Services Driver to allocate pool - /// memory. - /// - EfiRuntimeServicesData, - /// - /// Free (unallocated) memory. - /// - EfiConventionalMemory, - /// - /// Memory in which errors have been detected. - /// - EfiUnusableMemory, - /// - /// Memory that holds the ACPI tables. - /// - EfiACPIReclaimMemory, - /// - /// Address space reserved for use by the firmware. - /// - EfiACPIMemoryNVS, - /// - /// Used by system firmware to request that a memory-mapped IO region - /// be mapped by the OS to a virtual address so it can be accessed by EFI - /// runtime services. - /// - EfiMemoryMappedIO, - /// - /// System memory-mapped IO region that is used to translate memory - /// cycles to IO cycles by the processor. - /// - EfiMemoryMappedIOPortSpace, - /// - /// Address space reserved by the firmware for code that is part of the - /// processor. - /// - EfiPalCode, - /// - /// A memory region that operates as EfiConventionalMemory, - /// however it happens to also support byte-addressable non-volatility. - /// - EfiPersistentMemory, - /// - /// A memory region that describes system memory that has not been accepted - /// by a corresponding call to the underlying isolation architecture. - /// - EfiUnacceptedMemoryType, - /// - /// The last type of memory. - /// Not a real type. - /// - EfiMaxMemoryType, -} EfiMemoryType; - -typedef enum EfiAllocateType -{ - /// Anything that satisfy the request. - AllocateAnyPages, - AllocateMaxAddress, - /// - /// Allocate pages at a specified address. - /// - AllocateAddress, - /// - /// Maximum enumeration value that may be used for bounds checking. - /// - MaxAllocateType -} EfiAllocateType; - -typedef struct EfiMemoryDescriptor -{ - /// - /// Kind of the memory region. - /// Kind EFI_MEMORY_TYPE is defined in the - /// AllocatePages() function description. - /// - UInt32 Kind; - /// - /// Physical address of the first byte in the memory region. PhysicalStart - /// must be aligned on a 4 KiB boundary, and must not be above - /// 0xfffffffffffff000. Kind EFI_PHYSICAL_ADDRESS is defined in the - /// AllocatePages() function description - /// - EfiPhysicalAddress PhysicalStart; - /// - /// Virtual address of the first byte in the memory region. - /// VirtualStart must be aligned on a 4 KiB boundary, - /// and must not be above 0xfffffffffffff000. - /// - EfiVirtualAddress VirtualStart; - /// - /// NumberOfPagesNumber of 4 KiB pages in the memory region. - /// NumberOfPages must not be 0, and must not be any value - /// that would represent a memory page with a start address, - /// either physical or virtual, above 0xfffffffffffff000. - /// - UInt64 NumberOfPages; - /// - /// Attributes of the memory region that describe the bit mask of capabilities - /// for that memory region, and not necessarily the current settings for that - /// memory region. - /// - UInt64 Attribute; -} EfiMemoryDescriptor; - -typedef UInt64(EFI_API* EfiAllocatePool)(EfiMemoryType PoolType, UInt32 Size, VoidPtr* Buffer); - -typedef UInt64(EFI_API* EfiFreePool)(VoidPtr Buffer); - -typedef UInt64(EFI_API* EfiCalculateCrc32)(VoidPtr Data, UInt32 DataSize, UInt32* CrcOut); - -/** -@brief Present in every header, used to identify a UEFI structure. -*/ -typedef struct EfiTableHeader -{ - UInt64 Signature; - UInt32 Revision; - UInt32 HeaderSize; - UInt32 Crc32; - UInt32 Reserved; -} EfiTableHeader; - -#define EFI_ACPI_TABLE_PROTOCOL_GUID \ - { \ - 0xffe06bdd, 0x6107, 0x46a6, \ - { \ - 0x7b, 0xb2, 0x5a, 0x9c, 0x7e, 0xc5, 0x27, 0x5c \ - } \ - } - -#define EFI_LOAD_FILE_PROTOCOL_GUID \ - { \ - 0x56EC3091, 0x954C, 0x11d2, \ - { \ - 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b \ - } \ - } - -#define EFI_LOAD_FILE2_PROTOCOL_GUID \ - { \ - 0x4006c0c1, 0xfcb3, 0x403e, \ - { \ - 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d \ - } \ - } - -#define EFI_LOADED_IMAGE_PROTOCOL_GUID \ - { \ - 0x5B1B31A1, 0x9562, 0x11d2, \ - { \ - 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B \ - } \ - } - -#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ - { \ - 0x9042a9de, 0x23dc, 0x4a38, \ - { \ - 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a \ - } \ - } - -#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000 - -#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ - { \ - 0x0964e5b22, 0x6459, 0x11d2, \ - { \ - 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b \ - } \ - } - -#define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \ - { \ - 0xbc62157e, 0x3e33, 0x4fec, \ - { \ - 0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf \ - } \ - } - -#define EFI_DEVICE_PATH_PROTOCOL_GUID \ - { \ - 0x9576e91, 0x6d3f, 0x11d2, \ - { \ - 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \ - } \ - } - -#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ - { \ - 0x0964e5b22, 0x6459, 0x11d2, \ - { \ - 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b \ - } \ - } - -typedef UInt64(EfiImageUnload)(EfiHandlePtr ImageHandle); - -enum -{ - kPixelRedGreenBlueReserved8BitPerColor, - kPixelBlueGreenRedReserved8BitPerColor, - kPixelBitMask, - kPixelBltOnly, - kPixelFormatMax -}; - -typedef struct EfiBitmask -{ - UInt32 RedMask; - UInt32 GreenMask; - UInt32 BlueMask; - UInt32 ReservedMask; -} EfiBitmask; - -typedef struct -{ - UInt8 Blue; - UInt8 Green; - UInt8 Red; - UInt8 Reserved; -} EfiGraphicsOutputBltPixel; - -typedef enum EfiGraphicsOutputProtocolBltOperation -{ - EfiBltVideoFill, - EfiBltVideoToBltBuffer, - EfiBltBufferToVideo, - EfiBltVideoToVideo, - EfiGraphicsOutputBltOperationMax -} EfiGraphicsOutputProtocolBltOperation; - -typedef struct EfiGraphicsOutputProtocolModeInformation -{ - UInt32 Version; - UInt32 HorizontalResolution; - UInt32 VerticalResolution; - UInt32 PixelFormat; - EfiBitmask PixelInformation; - UInt32 PixelsPerScanLine; -} EfiGraphicsOutputProtocolModeInformation; - -typedef UInt64(EFI_API* EfiGraphicsOutputProtocolQueryMode)( - EfiGraphicsOutputProtocol* This, UInt32 ModeNumber, UInt32* SizeOfInfo, EfiGraphicsOutputProtocolModeInformation** Info); - -typedef UInt64(EFI_API* EfiGraphicsOutputProtocolSetMode)( - EfiGraphicsOutputProtocol* This, UInt32 ModeNumber); - -typedef UInt64(EFI_API* EfiGraphicsOutputProtocolBlt)( - EfiGraphicsOutputProtocol* This, EfiGraphicsOutputBltPixel* BltBuffer, EfiGraphicsOutputProtocolBltOperation BltOperation, UInt32 SourceX, UInt32 SourceY, UInt32 DestinationX, UInt32 DestinationY, UInt32 Width, UInt32 Height, UInt32 Delta); - -typedef struct -{ - UInt32 MaxMode; - UInt32 Mode; - EfiGraphicsOutputProtocolModeInformation* Info; - UInt32 SizeOfInfo; - UIntPtr FrameBufferBase; - UInt32 FrameBufferSize; -} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; - -typedef struct EfiGraphicsOutputProtocol -{ - EfiGraphicsOutputProtocolQueryMode QueryMode; - EfiGraphicsOutputProtocolSetMode SetMode; - EfiGraphicsOutputProtocolBlt Blt; - EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE* Mode; -} EfiGraphicsOutputProtocol; - -typedef struct EfiLoadImageProtocol -{ - UInt32 Revision; - EfiHandlePtr ParentHandle; - EfiSystemTable* SystemTable; - - // Source location of the image - EfiHandlePtr DeviceHandle; - EfiDevicePathProtocol* FilePath; - Void* Reserved; - - // Image’s load options - UInt32 LoadOptionsSize; - Void* LoadOptions; - - // Location where image was loaded - Void* ImageBase; - UInt64 ImageSize; - EfiMemoryType ImageCodeType; - EfiMemoryType ImageDataType; - EfiImageUnload Unload; -} EfiLoadImageProtocol; - -typedef struct EfiLoadFileProtocol -{ - EfiLoadFile LoadFile; -} EfiLoadFileProtocol; - -typedef struct EfiDevicePathProtocol -{ - UInt8 Kind; - UInt8 SubType; - UInt8 Length[2]; -} EfiDevicePathProtocol; - -typedef struct EfiFileDevicePathProtocol -{ - EfiDevicePathProtocol Proto; - - /// - /// File Path of this struct - /// - WideChar Path[kPathLen]; -} EfiFileDevicePathProtocol; - -typedef UInt64(EFI_API* EfiExitBootServices)(VoidPtr ImageHandle, - UInt32 MapKey); - -typedef UInt64(EFI_API* EfiAllocatePages)(EfiAllocateType AllocType, - EfiMemoryType MemType, - UInt32 Count, - EfiPhysicalAddress* Memory); - -typedef UInt64(EFI_API* EfiFreePages)(EfiPhysicalAddress* Memory, UInt32 Pages); - -typedef UInt64(EFI_API* EfiGetMemoryMap)(UInt32* MapSize, - EfiMemoryDescriptor* DescPtr, - UInt32* MapKey, - UInt32* DescSize, - UInt32* DescVersion); - -/** - * @brief GUID type, something you can also find in CFKit. - */ -typedef struct EfiGUID final -{ - UInt32 Data1; - UInt16 Data2; - UInt16 Data3; - UInt8 Data4[8]; -} EfiGUID; - -/*** - * Protocol stuff... - */ - -/** some helpers */ -#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 -#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 -#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 -#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 -#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 -#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 - -typedef UInt64(EFI_API* EfiLocateProtocol)(EfiGUID* Protocol, - VoidPtr Registration, - VoidPtr* Interface); - -typedef UInt64(EFI_API* EfiOpenProtocol)(EfiHandlePtr Handle, EfiGUID* Guid, VoidPtr* Interface, EfiHandlePtr AgentHandle, EfiHandlePtr ControllerHandle, UInt32 Attributes); - -typedef UInt64(EFI_API* EfiEnableCursor)(EfiSimpleTextOutputProtocol* This, Boolean Visible); - -/** -@name EfiBootServices -@brief UEFI Boot Services record, it contains functions necessary to a -firmware level application. -*/ -typedef struct EfiBootServices -{ - EfiTableHeader SystemTable; - VoidPtr RaiseTPL; - VoidPtr RestoreTPL; - EfiAllocatePages AllocatePages; - EfiFreePages FreePages; - EfiGetMemoryMap GetMemoryMap; - EfiAllocatePool AllocatePool; - EfiFreePool FreePool; - VoidPtr CreateEvent; - VoidPtr SetTimer; - VoidPtr WaitForEvent; - VoidPtr SignalEvent; - VoidPtr CloseEvent; - VoidPtr CheckEvent; - VoidPtr InstallProtocolInterface; - VoidPtr ReinstallProtocolInterface; - VoidPtr UninstallProtocolInterface; - EfiHandleProtocol HandleProtocol; - VoidPtr Reserved; - VoidPtr RegisterProtocolNotify; - VoidPtr LocateHandle; - EfiLocateDevicePath LocateDevicePath; - VoidPtr InstallConfigurationTable; - EfiLoadImage LoadImage; - EfiStartImage StartImage; - VoidPtr Exit; - VoidPtr UnloadImage; - EfiExitBootServices ExitBootServices; - VoidPtr GetNextMonotonicCount; - VoidPtr Stall; - EfiStatusType(EFI_API* SetWatchdogTimer)(UInt32 Timeout, UInt64 WatchdogCode, UInt32 DataSize, EfiCharType* Data); - VoidPtr ConnectController; - VoidPtr DisconnectController; - EfiOpenProtocol OpenProtocol; - VoidPtr CloseProtocol; - VoidPtr OpenProtocolInformation; - VoidPtr ProtocolsPerHandle; - VoidPtr LocateHandleBuffer; - EfiLocateProtocol LocateProtocol; - VoidPtr InstallMultipleProtocolInterfaces; - VoidPtr UninstallMultipleProtocolInterfaces; - EfiCalculateCrc32 CalculateCrc32; - EfiCopyMem CopyMem; - EfiSetMem SetMem; - VoidPtr CreateEventEx; -} EfiBootServices; - -#define kEntireDevPath 0xFF -#define kThisInstancePath 0x01 - -/** -@brief PrintF like protocol. -*/ -typedef struct EfiSimpleTextOutputProtocol -{ - VoidPtr Reset; - EfiTextString OutputString; - VoidPtr TestString; - VoidPtr QueryMode; - VoidPtr SetMode; - EfiTextAttrib SetAttribute; - EfiTextClear ClearScreen; - VoidPtr SetCursorPosition; - EfiEnableCursor EnableCursor; - VoidPtr Mode; -} EfiSimpleTextOutputProtocol; - -typedef UInt64(EFI_API* EfiOpenVolume)(struct EfiSimpleFilesystemProtocol*, - struct EfiFileProtocol**); - -struct EfiSimpleFilesystemProtocol -{ - UInt64 Revision; - EfiOpenVolume OpenVolume; -}; - -/** -@brief The Structure that they give you when booting. -*/ -typedef struct EfiSystemTable -{ - EfiTableHeader SystemHeader; - WideChar* FirmwareVendor; - UInt32 FirmwareRevision; - EfiHandlePtr ConsoleInHandle; - VoidPtr ConIn; - EfiHandlePtr ConsoleOutHandle; - EfiSimpleTextOutputProtocol* ConOut; - EfiHandlePtr StandardErrorHandle; - VoidPtr StdErr; - VoidPtr RuntimeServices; - EfiBootServices* BootServices; - UInt64 NumberOfTableEntries; - struct - { - EfiGUID VendorGUID; - VoidPtr VendorTable; - }* ConfigurationTable; -} EfiSystemTable; - -#define kEfiOk 0 -#define kEfiFail -1 -#define kBufferTooSmall 5 - -#define EFI_EXTERN_C extern "C" - -typedef struct EfiIPV4 -{ - UInt8 Addr[4]; -} EfiIPV4; - -/// -/// 16-byte buffer. An IPv6 internet protocol address. -/// -typedef struct EfiIPV6 -{ - UInt8 Addr[16]; -} EfiIPV6; - -#define kEFIYellow (0x01 | 0x02 | 0x04 | 0x08) - -#ifdef __x86_64 -#define __EFI_x86_64__ 1 -#endif // __x86_64 - -enum -{ - kEFIHwDevicePath = 0x01, - kEFIAcpiDevicePath = 0x02, - kEFIMessaingDevicePath = 0x03, - kEFIMediaDevicePath = 0x04, - kEFIBiosBootPath = 0x05, - kEFIEndOfPath = 0x06, - kEFICount = 6, -}; - -#define END_DEVICE_PATH_TYPE 0x7f -#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF -#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 - -#define kEfiOffsetOf(T, F) __builtin_offsetof(T, F) - -/// File I/O macros - -#define kEFIFileRead 0x0000000000000001 -#define kEFIFileWrite 0x0000000000000002 -#define kEFIFileCreate 0x0000000000000000 - -#define kEFIReadOnly 0x01 -#define kEFIHidden 0x02 -#define kEFISystem 0x04 -#define kEFIReserved 0x08 -#define kEFIDirectory 0x10 -#define kEFIArchive 0x20 - -typedef struct EfiIOToken -{ - // - // If Event is NULL, then blocking I/O is performed. - // If Event is not NULL and non-blocking I/O is supported, then non-blocking - // I/O is performed, and Event will be signaled when the read request is - // completed. The caller must be prepared to handle the case where the - // callback associated with Event occurs before the original asynchronous I/O - // request call returns. - // - UInt64 Event; - - // - // Defines whether or not the signaled event encountered an error. - // - UInt64 Status; - - // - // For OpenEx(): Not Used, ignored. - // For ReadEx(): On input, the size of the Buffer. On output, the amount of - // data returned in Buffer. - // In both cases, the size is measured in bytes. - // For WriteEx(): On input, the size of the Buffer. On output, the amount of - // data actually written. - // In both cases, the size is measured in bytes. - // For FlushEx(): Not used, ignored. - // - UInt32 BufferSize; - - // - // For OpenEx(): Not Used, ignored. - // For ReadEx(): The buffer into which the data is read. - // For WriteEx(): The buffer of data to write. - // For FlushEx(): Not Used, ignored. - // - Void* Buffer; -} EfiIOToken; - -typedef struct EfiFileProtocol -{ - UInt64 Revision; - - EfiStatusType(EFI_API* Open)(struct EfiFileProtocol* This, - struct EfiFileProtocol** Out, - EfiCharType* CharType, - UInt64 OpenMode, - UInt64 Attrib); - - EfiStatusType(EFI_API* Close)(struct EfiFileProtocol* This); - - EfiStatusType(EFI_API* Delete)(struct EfiFileProtocol* This); - - EfiStatusType(EFI_API* Read)(struct EfiFileProtocol* This, UInt64* BufSize, VoidPtr BufOut); - - EfiStatusType(EFI_API* Write)(struct EfiFileProtocol* This, UInt64* BufSize, VoidPtr BufOut); - - EfiStatusType(EFI_API* GetPosition)(EfiFileProtocol* This, UInt64* Position); - - EfiStatusType(EFI_API* SetPosition)(EfiFileProtocol* This, UInt64* Position); - - EfiStatusType(EFI_API* GetInfo)(struct EfiFileProtocol*, struct EfiGUID*, UInt32*, void*); - - EfiStatusType(EFI_API* SetInfo)(struct EfiFileProtocol*, struct EfiGUID*, UInt32*, void*); - - EfiStatusType(EFI_API* Flush)(EfiFileProtocol*); - - EfiStatusType(EFI_API* OpenEx)(EfiFileProtocol* This, - EfiFileProtocol** OutHandle, - EfiCharType* Path, - UInt64 Mode, - UInt64 Attrib, - struct EfiIOToken* Token); - - EfiStatusType(EFI_API* ReadEx)(EfiFileProtocol* This, - struct EfiIOToken* Token); - - EfiStatusType(EFI_API* WriteEx)(EfiFileProtocol* This, - struct EfiIOToken* Token); - - EfiStatusType(EFI_API* FlushEx)(EfiFileProtocol* This, - struct EfiIOToken* Token); -} EfiFileProtocol, *EfiFileProtocolPtr; - -typedef UInt64 EfiCursorType; - -typedef struct EfiTime -{ - UInt16 Year; - UInt8 Month; - UInt8 Day; - UInt8 Hour; - UInt8 Minute; - UInt8 Second; - UInt8 Pad1; - UInt32 Nanosecond; - Int16 TimeZone; - UInt8 Daylight; - UInt8 Pad2; -} EfiTime; - -#define EFI_FILE_INFO_GUID \ - { \ - 0x09576e92, 0x6d3f, 0x11d2, \ - { \ - 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b \ - } \ - } - -struct EfiFileInfo final -{ - /// @brief Structure size. - UInt64 Size; - /// @brief File size. - UInt64 FileSize; - /// @brief Physical size on disk. - UInt64 PhysicalSize; - /// @brief Create time. - EfiTime CreateTime; - /// @brief Last access time. - EfiTime LastAccessTime; - /// @brief Edit time. - EfiTime EditTime; - /// @brief Attributes. - UInt64 Attribute; - /// @brief VLA file name. - WideChar FileName[1]; -}; - -#define EFI_FILE_PROTOCOL_REVISION 0x00010000 -#define EFI_FILE_PROTOCOL_REVISION2 0x00020000 -#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 - -#define EFI_EXTRA_DESCRIPTOR_SIZE 8 - -#endif // ifndef __EFI__ diff --git a/dev/Kernel/FirmwareKit/EPM.hxx b/dev/Kernel/FirmwareKit/EPM.hxx deleted file mode 100644 index 905e7f24..00000000 --- a/dev/Kernel/FirmwareKit/EPM.hxx +++ /dev/null @@ -1,122 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/** - @brief The Explicit Partition Map scheme. -*/ - -#ifndef __FIRMWARE_EPM_HXX__ -#define __FIRMWARE_EPM_HXX__ - -#include <NewKit/Defines.hxx> - -#define kEPMNameLength (32) -#define kEPMFilesystemLength (16) -#define kEPMMagicLength (5) - -/* @brief AMD64 magic for EPM */ -#define kEPMMagic86 "EPMAM" - -/* @brief RISC-V magic for EPM */ -#define kEPMMagicRISCV "EPMRV" - -/* @brief ARM magic for EPM */ -#define kEPMMagicARM "EPMAR" - -/* @brief 64x0 magic for EPM */ -#define kEPMMagic64k "EPM64" - -/* @brief 32x0 magic for EPM */ - -#define kEPMMagic32k "EPM32" - -/* @brief POWER magic for EPM */ - -#define kEPMMagicPPC "EPMPC" - -/* @brief UEFI magic for EPM */ - -#define kEPMMagicUEFI "EPMUE" - -/* @brief CoreBoot magic for EPM */ - -#define kEPMMagicCoreBoot "EPMCB" - -/* @brief Invalid magic for EPM */ - -#define kEPMMagicError "EPM??" - -#ifdef __NEWOS_AMD64__ -#define kEPMMagic kEPMMagic86 -#else -#ifdef __NEWOS_ARM64__ -#define kEPMMagic kEPMMagicARM -#else -#define kEPMMagic kEPMMagicError -#endif -#endif - -///! @brief partition must start at this address. -///! Anything below is reserved for Data backup by the Main OS. -#define kEPMStartPartitionBlk (sizeof(_BOOT_BLOCK_STRUCT)) - -///! @brief Current EPM revision. -#define kEPMRevision (0xAD) - -///! @brief Current EPM revision. -#define kEPMRevisionUEFI (0xAF) - -/// !@brief EPM base address. -#define kEpmBase (0U) - -struct _BLOCK_GUID_STRUCT; -struct _BOOT_BLOCK_STRUCT; - -/* The first 0 > 128 addresses of a disk contains these headers. */ - -/// @brief EPM GUID structure. -typedef struct _BLOCK_GUID_STRUCT -{ - Kernel::UInt32 Data1; - Kernel::UInt16 Data2; - Kernel::UInt16 Data3; - Kernel::UInt8 Data4[8]; -} BLOCK_GUID_STRUCT; - -/** - * @brief The EPM boot block. - * @note NumBlock and LbaStart are ignored on some platforms. - */ -struct PACKED _BOOT_BLOCK_STRUCT -{ - Kernel::Char Magic[kEPMMagicLength]; - Kernel::Char Name[kEPMNameLength]; - BLOCK_GUID_STRUCT Uuid; - Kernel::Int32 Version; - Kernel::Int64 NumBlocks; - Kernel::Int64 SectorSz; - Kernel::Int64 LbaStart; // base offset - Kernel::Int64 LbaEnd; // addition of lba_start to get the end of partition. - Kernel::Int16 Kind; - Kernel::Int32 FsVersion; - Kernel::Char Fs[kEPMFilesystemLength]; /* NewFS, ffs2... */ - Kernel::Char Reserved[401]; // to fill a full sector. -}; - -///! @brief Version kind enum. -///! @brief Use in boot block version field. - -enum -{ - kEPMMpUx = 0xcf, // Bridge or other embedded OS - kEPMLinux = 0x8f, - kEPMBSD = 0x9f, - kEPMNewOS = 0x1f, // This kernel. -}; - -typedef struct _BOOT_BLOCK_STRUCT BOOT_BLOCK_STRUCT; - -#endif // ifndef __FIRMWARE_EPM_HXX__ diff --git a/dev/Kernel/FirmwareKit/Handover.hxx b/dev/Kernel/FirmwareKit/Handover.hxx deleted file mode 100644 index a93ace39..00000000 --- a/dev/Kernel/FirmwareKit/Handover.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/** - * @file Handover.hxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief The handover boot protocol. - * @version 0.3 - * @date 2024-02-23 - * - * @copyright Copyright (c) 2024, ZKA Technologies - * - */ - -#pragma once - -#include <NewKit/Defines.hxx> - -/* useful macros */ - -#define kHandoverMagic 0xBADCC -#define kHandoverVersion 0x113 - -#define kHandoverMaxCmdLine 8 - -#define kHandoverStructSz sizeof(HEL::HandoverHeader) - -namespace Kernel::HEL -{ - /** - @brief the kind of executable we're loading. -*/ - enum - { - kTypeKernel = 100, - kTypeKernelDriver = 101, - kTypeRsrc = 102, - kTypeCount = 3, - }; - - /** - @brief The executable architecture. -*/ - - enum - { - kArchAmd64 = 122, - kArchCount = 2, - }; - - struct HandoverInformationHeader - { - UInt64 f_Magic; - UInt64 f_Version; - - voidPtr f_VirtualStart; - SizeT f_VirtualSize; - voidPtr f_PhysicalStart; - - WideChar f_FirmwareVendorName[32]; - SizeT f_FirmwareVendorLen; - - struct - { - VoidPtr f_SmBios; - VoidPtr f_VendorPtr; - } f_HardwareTables; - - struct - { - UIntPtr f_The; - SizeT f_Size; - UInt32 f_Width; - UInt32 f_Height; - UInt32 f_PixelFormat; - UInt32 f_PixelPerLine; - } f_GOP; - - UInt64 f_FirmwareSpecific[8]; - Char f_CommandLine[255][kHandoverMaxCmdLine]; - }; - - enum - { - kHandoverSpecificKind, - kHandoverSpecificAttrib, - kHandoverSpecificMemoryEfi, - }; - - /// @brief Bootloader main type. - typedef void (*BootMainKind)(HandoverInformationHeader* handoverInfo); - - /// @brief Alias of bootloader main type. - typedef void (*HandoverProc)(HandoverInformationHeader* handoverInfo); -} // namespace Kernel::HEL - -/// @brief Bootloader global header. -inline Kernel::HEL::HandoverInformationHeader* kHandoverHeader = nullptr; diff --git a/dev/Kernel/HALKit/.gitkeep b/dev/Kernel/HALKit/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/64x0/.hgkeep b/dev/Kernel/HALKit/64x0/.hgkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/64x0/.hgkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/64x0/APM/.hgkeep b/dev/Kernel/HALKit/64x0/APM/.hgkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/64x0/APM/.hgkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/64x0/HalVirtualMemory.cxx b/dev/Kernel/HALKit/64x0/HalVirtualMemory.cxx deleted file mode 100644 index 1b0c9153..00000000 --- a/dev/Kernel/HALKit/64x0/HalVirtualMemory.cxx +++ /dev/null @@ -1,17 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> - -using namespace Kernel; - -/// @brief Flush system TLB, looks like the POWER version, as it acts the same, no specific instruction for that. -/// @note The 88K MMU should be present as well. -EXTERN_C void hal_flush_tlb() -{ - asm volatile("invltlb"); -} diff --git a/dev/Kernel/HALKit/64x0/MBCI/.gitkeep b/dev/Kernel/HALKit/64x0/MBCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/64x0/MBCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/64x0/ReadMe.md b/dev/Kernel/HALKit/64x0/ReadMe.md deleted file mode 100644 index 2e72d5bf..00000000 --- a/dev/Kernel/HALKit/64x0/ReadMe.md +++ /dev/null @@ -1,4 +0,0 @@ -64x0 Hardware Abstraction Layer - -- Supported CPU: ZKA Technologies 64x0 -- Supported Firmware: CoreBoot
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AMD64/CPUID.hxx b/dev/Kernel/HALKit/AMD64/CPUID.hxx deleted file mode 100644 index f5ae5bb5..00000000 --- a/dev/Kernel/HALKit/AMD64/CPUID.hxx +++ /dev/null @@ -1,81 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: CPUID.hxx - Purpose: CPUID flags. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -enum -{ - eCPU_FEATURE_ECX_SSE3 = 1 << 0, - eCPU_FEATURE_ECX_PCLMUL = 1 << 1, - eCPU_FEATURE_ECX_DTES64 = 1 << 2, - eCPU_FEATURE_ECX_MONITOR = 1 << 3, - eCPU_FEATURE_ECX_DS_CPL = 1 << 4, - eCPU_FEATURE_ECX_VMX = 1 << 5, - eCPU_FEATURE_ECX_SMX = 1 << 6, - eCPU_FEATURE_ECX_EST = 1 << 7, - eCPU_FEATURE_ECX_TM2 = 1 << 8, - eCPU_FEATURE_ECX_SSSE3 = 1 << 9, - eCPU_FEATURE_ECX_CID = 1 << 10, - eCPU_FEATURE_ECX_SDBG = 1 << 11, - eCPU_FEATURE_ECX_FMA = 1 << 12, - eCPU_FEATURE_ECX_CX16 = 1 << 13, - eCPU_FEATURE_ECX_XTPR = 1 << 14, - eCPU_FEATURE_ECX_PDCM = 1 << 15, - eCPU_FEATURE_ECX_PCID = 1 << 17, - eCPU_FEATURE_ECX_DCA = 1 << 18, - eCPU_FEATURE_ECX_SSE4_1 = 1 << 19, - eCPU_FEATURE_ECX_SSE4_2 = 1 << 20, - eCPU_FEATURE_ECX_X2APIC = 1 << 21, - eCPU_FEATURE_ECX_MOVBE = 1 << 22, - eCPU_FEATURE_ECX_POP3C = 1 << 23, - eCPU_FEATURE_ECX_TSC = 1 << 24, - eCPU_FEATURE_ECX_AES = 1 << 25, - eCPU_FEATURE_ECX_XSAVE = 1 << 26, - eCPU_FEATURE_ECX_OSXSAVE = 1 << 27, - eCPU_FEATURE_ECX_AVX = 1 << 28, - eCPU_FEATURE_ECX_F16C = 1 << 29, - eCPU_FEATURE_ECX_RDRAND = 1 << 30, - eCPU_FEATURE_ECX_HYPERVISOR = 1 << 31, - eCPU_FEATURE_EDX_FPU = 1 << 0, - eCPU_FEATURE_EDX_VME = 1 << 1, - eCPU_FEATURE_EDX_DE = 1 << 2, - eCPU_FEATURE_EDX_PSE = 1 << 3, - eCPU_FEATURE_EDX_TSC = 1 << 4, - eCPU_FEATURE_EDX_MSR = 1 << 5, - eCPU_FEATURE_EDX_PAE = 1 << 6, - eCPU_FEATURE_EDX_MCE = 1 << 7, - eCPU_FEATURE_EDX_CX8 = 1 << 8, - eCPU_FEATURE_EDX_APIC = 1 << 9, - eCPU_FEATURE_EDX_SEP = 1 << 11, - eCPU_FEATURE_EDX_MTRR = 1 << 12, - eCPU_FEATURE_EDX_PGE = 1 << 13, - eCPU_FEATURE_EDX_MCA = 1 << 14, - eCPU_FEATURE_EDX_CMOV = 1 << 15, - eCPU_FEATURE_EDX_PAT = 1 << 16, - eCPU_FEATURE_EDX_PSE36 = 1 << 17, - eCPU_FEATURE_EDX_PSN = 1 << 18, - eCPU_FEATURE_EDX_CLFLUSH = 1 << 19, - eCPU_FEATURE_EDX_DS = 1 << 21, - eCPU_FEATURE_EDX_ACPI = 1 << 22, - eCPU_FEATURE_EDX_MMX = 1 << 23, - eCPU_FEATURE_EDX_FXSR = 1 << 24, - eCPU_FEATURE_EDX_SSE = 1 << 25, - eCPU_FEATURE_EDX_SSE2 = 1 << 26, - eCPU_FEATURE_EDX_SS = 1 << 27, - eCPU_FEATURE_EDX_HTT = 1 << 28, - eCPU_FEATURE_EDX_TM = 1 << 29, - eCPU_FEATURE_EDX_IA64 = 1 << 30, - eCPU_FEATURE_EDX_PBE = 1 << 31 -}; - -typedef long long int hal_cpu_feature_type;
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx deleted file mode 100644 index 4a9af53b..00000000 --- a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx +++ /dev/null @@ -1,142 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <Modules/ACPI/ACPIFactoryInterface.hxx> -#include <HALKit/AMD64/Processor.hxx> -#include <NewKit/String.hxx> -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/Heap.hxx> - -namespace Kernel -{ - /// Custom to the virtual machine, you'll need to parse the MADT instead. - - void rt_shutdown_acpi_qemu_20(void) - { - HAL::Out16(0xb004, 0x2000); - } - - void rt_shutdown_acpi_qemu_30_plus(void) - { - HAL::Out16(0x604, 0x2000); - } - - void rt_shutdown_acpi_virtualbox(void) - { - HAL::Out16(0x4004, 0x3400); - } - - /// You have to parse the MADT! - - ACPIFactoryInterface::ACPIFactoryInterface(VoidPtr rsdPtr) - : fRsdp(rsdPtr), fEntries(0) - { -#ifdef __DEBUG__ - kcout << "newoskrnl: ACPI: init interface.\r"; -#else - -#endif - } - - Void ACPIFactoryInterface::Shutdown() - { -#ifdef __DEBUG__ - rt_shutdown_acpi_qemu_30_plus(); -#else - -#endif - } - - /// @brief Reboot (shutdowns on qemu.) - /// @return - Void ACPIFactoryInterface::Reboot() - { -#ifdef __DEBUG__ - rt_shutdown_acpi_qemu_30_plus(); -#else - -#endif - } - - /// @brief Finds a descriptor table inside ACPI XSDT. - ErrorOr<voidPtr> ACPIFactoryInterface::Find(const char* signature) - { - MUST_PASS(fRsdp); - - if (!signature) - return ErrorOr<voidPtr>{-1}; - - if (*signature == 0) - return ErrorOr<voidPtr>{-1}; - - RSDP* rsdPtr = reinterpret_cast<RSDP*>(this->fRsdp); - - if (rsdPtr->Revision <= 1) - return ErrorOr<voidPtr>{-1}; - - RSDT* xsdt = reinterpret_cast<RSDT*>(rsdPtr->RsdtAddress); - - Int64 num = (xsdt->Length - sizeof(SDT)) / sizeof(UInt32); - - /*** - crucial to avoid - overflows. - */ - if (num < 1) - { - /// stop here, we should have entries... - ke_stop(RUNTIME_CHECK_ACPI); - return ErrorOr<voidPtr>{-1}; - } - - this->fEntries = num; - - kcout << "ACPI: Number of entries: " << number(this->fEntries) << endl; - kcout << "ACPI: Revision: " << number(xsdt->Revision) << endl; - kcout << "ACPI: Signature: " << xsdt->Signature << endl; - kcout << "ACPI: Address of XSDT: " << hex_number((UIntPtr)xsdt) << endl; - - const short cAcpiSignatureLength = 4; - - for (Size index = 0; index < this->fEntries; ++index) - { - SDT* sdt = reinterpret_cast<SDT*>(xsdt->AddressArr[index]); - - kcout << "ACPI: Checksum: " << number(sdt->Checksum) << endl; - kcout << "ACPI: Revision: " << number(sdt->Revision) << endl; - - for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index) - { - if (sdt->Signature[signature_index] != signature[signature_index]) - break; - - if (signature_index == (cAcpiSignatureLength - 1)) - return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index])); - } - } - - return ErrorOr<voidPtr>{-1}; - } - - /*** - @brief check SDT header - @param checksum the header to checksum - @param len the length of it. -*/ - bool ACPIFactoryInterface::Checksum(const char* checksum, SSizeT len) - { - if (len == 0) - return -1; - - char chr = 0; - - for (int index = 0; index < len; ++index) - { - chr += checksum[index]; - } - - return chr == 0; - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalAPIC.cxx b/dev/Kernel/HALKit/AMD64/HalAPIC.cxx deleted file mode 100644 index caa2ce0b..00000000 --- a/dev/Kernel/HALKit/AMD64/HalAPIC.cxx +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <Modules/ACPI/ACPIFactoryInterface.hxx> -#include <HALKit/AMD64/Processor.hxx> - -namespace Kernel::HAL -{ - /// @brief Read from APIC controller. - /// @param reg register. - UInt32 APICController::Read(UInt32 reg) noexcept - { - MUST_PASS(this->fApic); - - UInt32 volatile* ioapic = (UInt32 volatile*)this->fApic; - ioapic[0] = (reg & 0xff); - - return ioapic[4]; - } - - /// @brief Write to APIC controller. - /// @param reg register. - /// @param value value. - Void APICController::Write(UInt32 reg, UInt32 value) noexcept - { - MUST_PASS(this->fApic); - - UInt32 volatile* ioapic = (UInt32 volatile*)this->fApic; - - ioapic[0] = (reg & 0xFF); - ioapic[4] = value; - } -} // namespace Kernel::HAL diff --git a/dev/Kernel/HALKit/AMD64/HalBoot.asm b/dev/Kernel/HALKit/AMD64/HalBoot.asm deleted file mode 100644 index 8cc3c08f..00000000 --- a/dev/Kernel/HALKit/AMD64/HalBoot.asm +++ /dev/null @@ -1,22 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * Kernel -;; * Copyright ZKA Technologies., all rights reserved. -;; * -;; * ======================================================== -;; */ - -[bits 64] - -;; Global symbol of this unit -[extern hal_init_platform] - -%define kTypeKernel 100 -%define kArchAmd64 122 -%define kHandoverMagic 0xBADCC - -section .ldr - -HandoverMagic: dq kHandoverMagic -HandoverType: dw kTypeKernel diff --git a/dev/Kernel/HALKit/AMD64/HalControlRegister.s b/dev/Kernel/HALKit/AMD64/HalControlRegister.s deleted file mode 100644 index 879d35c1..00000000 --- a/dev/Kernel/HALKit/AMD64/HalControlRegister.s +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -.globl hal_write_cr3 -.globl hal_write_cr0 -.globl hal_read_cr2 -.globl hal_read_cr3 -.globl hal_read_cr0 -.globl hal_flush_tlb - -.text - -hal_flush_tlb: - call hal_read_cr3 - mov %rcx, %rax - call hal_write_cr3 - ret - -hal_read_cr3: - movq %cr3, %rax - ret - -hal_read_cr0: - movq %rax, %cr0 - ret - -hal_read_cr2: - movq %rax, %cr2 - ret - -hal_write_cr3: - movq %cr3, %rdi - ret - -hal_write_cr0: - movq %cr0, %rdi - ret diff --git a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx deleted file mode 100644 index 88b5db36..00000000 --- a/dev/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx +++ /dev/null @@ -1,76 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <NewKit/String.hxx> - -/// @brief Handle GPF fault. -/// @param rsp -EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) -{ - Kernel::ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); -} - -/// @brief Handle page fault. -/// @param rsp -EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) -{ - Kernel::ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); -} - -/// @brief Handle math fault. -/// @param rsp -EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) -{ - Kernel::ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); -} - -/// @brief Handle any generic fault. -/// @param rsp -EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) -{ - Kernel::ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); -} - -/// @brief Handle #UD fault. -/// @param rsp -EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) -{ - Kernel::ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); -} - -/// @brief Enter syscall from assembly. -/// @param stack the stack pushed from assembly routine. -/// @return nothing. -EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx) -{ - if (rcx <= (kSyscalls.Count() - 1)) - { - Kernel::kcout << "newoskrnl: syscall: enter.\r"; - - if (kSyscalls[rcx].Leak().Leak()->fHooked) - (kSyscalls[rcx].Leak().Leak()->fProc)((Kernel::VoidPtr)rdx); - - Kernel::kcout << "newoskrnl: syscall: exit.\r"; - } -} - -/// @brief Enter kernel call from assembly (DDK only). -/// @param stack the stack pushed from assembly routine. -/// @return nothing. -EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx, Kernel::UIntPtr r8, Kernel::UIntPtr r9) -{ - if (rcx <= (kSyscalls.Count() - 1)) - { - Kernel::kcout << "newoskrnl: kerncall: enter.\r"; - - if (kKerncalls[rcx].Leak().Leak()->fHooked) - (kKerncalls[rcx].Leak().Leak()->fProc)((Kernel::VoidPtr)rdx); - - Kernel::kcout << "newoskrnl: kerncall: exit.\r"; - } -} diff --git a/dev/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx b/dev/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx deleted file mode 100644 index 6018d20f..00000000 --- a/dev/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx +++ /dev/null @@ -1,198 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <Modules/ACPI/ACPIFactoryInterface.hxx> -#include <HALKit/AMD64/Processor.hxx> -#include <NewKit/KernelCheck.hxx> -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/Semaphore.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/Timer.hxx> - -// Needed for SMP. // - -#include <KernelKit/MP.hxx> - -#define kApicSignature "APIC" - -#define kAPIC_ICR_Low 0x300 -#define kAPIC_ICR_High 0x310 -#define kAPIC_SIPI_Vector 0x00500 -#define kAPIC_EIPI_Vector 0x00400 - -#define kAPIC_BASE_MSR 0x1B -#define kAPIC_BASE_MSR_BSP 0x100 -#define kAPIC_BASE_MSR_ENABLE 0x800 - -/// @note: _hal_switch_context is internal - -/////////////////////////////////////////////////////////////////////////////////////// - -//! NOTE: fGSI stands 'Field Global System Interrupt' - -/////////////////////////////////////////////////////////////////////////////////////// - -namespace Kernel::HAL -{ - struct MADT_TABLE; - - EXTERN_C Void _hal_spin_core(Void); - - STATIC Void hal_switch_context(HAL::StackFramePtr stack_frame); - - constexpr Int32 kThreadAPIC = 0; - constexpr Int32 kThreadLAPIC = 1; - constexpr Int32 kThreadIOAPIC = 2; - constexpr Int32 kThreadAPIC64 = 3; - constexpr Int32 kThreadBoot = 4; - - STATIC MADT_TABLE* kSMPBlock = nullptr; - Bool kSMPAware = false; - - STATIC Int32 cSMPInterrupt = 34; - - STATIC VoidPtr kRawMADT = nullptr; - - /* - * - * this is used to store info about the current running thread - * we use this struct to determine if we can use it, or mark it as used or on - * sleep. - * - */ - - struct ProcessorInfoAMD64 final - { - Int32 ThreadType; - UIntPtr JumpAddress; - - struct - { - UInt32 Code; - UInt32 Data; - UInt32 BSS; - } Selector; - }; - - /// @brief Multiple APIC Descriptor Table. - struct MADT_TABLE final : public SDT - { - UInt32 Address; // Madt address - UInt32 Flags; // Madt flags - - struct { - UInt8 Type; - UInt8 Len; - } Records[]; // Records List - }; - - /////////////////////////////////////////////////////////////////////////////////////// - - /// @brief Send start IPI for CPU. - /// @param apicId - /// @param vector - /// @param targetAddress - /// @return - Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress) - { - Kernel::ke_dma_write(targetAddress, kAPIC_ICR_High, (apicId << 24)); - Kernel::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_SIPI_Vector | vector); - } - - /// @brief Send end IPI for CPU. - /// @param apicId - /// @param vector - /// @param targetAddress - /// @return - Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress) - { - Kernel::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24); - Kernel::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_EIPI_Vector | vector); - } - - /// @internal - EXTERN_C Void hal_ap_startup(Void) - { - ke_stop(RUNTIME_CHECK_BOOTSTRAP); - } - - /// @internal - EXTERN_C Void _hal_switch_context(HAL::StackFramePtr stack_frame) - { - hal_switch_context(stack_frame); - } - - constexpr auto cMaxPCBBlocks = cMaxHWThreads; - - struct PROCESS_CONTROL_BLOCK final - { - PROCESS_HEADER_BLOCK* f_Header; - HAL::StackFramePtr f_StackFrame; - } fBlocks[cMaxPCBBlocks] = {0}; - - EXTERN_C HAL::StackFramePtr _hal_leak_current_context(Void) - { - return fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_StackFrame; - } - - STATIC Void hal_switch_context(HAL::StackFramePtr stack_frame) - { - STATIC Semaphore sem; - - constexpr auto cSeconds = 1U; - - HardwareTimer timer(Seconds(cSeconds)); - sem.LockOrWait(&ProcessScheduler::The().Leak().TheCurrent().Leak(), &timer); - - fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_Header = &ProcessScheduler::The().Leak().TheCurrent().Leak(); - fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_StackFrame = stack_frame; - - sem.Unlock(); - } - - STATIC auto cAPICAddress = 0x0FEC00000; - - STATIC Void cpu_set_apic_base(UIntPtr apic) - { - UInt32 edx = 0; - UInt32 eax = (apic & 0xfffff0000) | kAPIC_BASE_MSR_ENABLE; - - edx = (apic >> 32) & 0x0f; - - hal_set_msr(kAPIC_BASE_MSR, eax, edx); - } - - STATIC UIntPtr cpu_get_apic_base(Void) - { - UInt32 eax, edx; - - hal_get_msr(kAPIC_BASE_MSR, &eax, &edx); - - return (eax & 0xfffff000) | ((UIntPtr)(edx & 0x0f) << 32); - } - - EXTERN_C Void hal_ap_trampoline(Void); - - /// @brief Fetch and enable cores inside main CPU. - /// @param rsdPtr RSD PTR structure. - Void hal_system_get_cores(voidPtr rsdPtr) - { - auto acpi = ACPIFactoryInterface(rsdPtr); - kRawMADT = acpi.Find(kApicSignature).Leak().Leak(); - - kSMPBlock = reinterpret_cast<MADT_TABLE*>(kRawMADT); - - if (!kSMPBlock) - kSMPAware = false; - - if (kSMPBlock) - { - kSMPAware = true; - } - } -} // namespace Kernel::HAL - -/////////////////////////////////////////////////////////////////////////////////////// diff --git a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/dev/Kernel/HALKit/AMD64/HalDebugOutput.cxx deleted file mode 100644 index d4e2b435..00000000 --- a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cxx +++ /dev/null @@ -1,145 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/Framebuffer.hxx> -#include <NewKit/Utils.hxx> -#include <NewKit/New.hxx> - -namespace Kernel -{ - enum CommStatus - { - kStateInvalid, - kStateReady = 0xCF, - kStateTransmit = 0xFC, - kStateCnt = 3 - }; - - namespace Detail - { - constexpr short PORT = 0x3F8; - - static int kState = kStateInvalid; - - /// @brief Init COM1. - /// @return - bool hal_serial_init() noexcept - { -#ifdef __DEBUG__ - if (kState == kStateReady || kState == kStateTransmit) - return true; - - HAL::Out8(PORT + 1, 0x00); // Disable all interrupts - HAL::Out8(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - HAL::Out8(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud - HAL::Out8(PORT + 1, 0x00); // (hi byte) - HAL::Out8(PORT + 3, 0x03); // 8 bits, no parity, one stop bit - HAL::Out8(PORT + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold - HAL::Out8(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - HAL::Out8(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip - HAL::Out8(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check if - // serial returns same byte) - - // Check if serial is faulty (i.e: not same byte as sent) - if (HAL::In8(PORT) != 0xAE) - { - ke_stop(RUNTIME_CHECK_HANDSHAKE); - } - - kState = kStateReady; - - // If serial is not faulty set it in normal operation mode - // (not-loopback with IRQs enabled and OUT#1 and OUT#2 bits enabled) - HAL::Out8(Detail::PORT + 4, 0x0F); -#endif // __DEBUG__ - - return true; - } - } // namespace Detail - - EXTERN_C void ke_io_write(const char* bytes) - { -#ifdef __DEBUG__ - Detail::hal_serial_init(); - - if (!bytes || Detail::kState != kStateReady) - return; - if (*bytes == 0) - return; - - Detail::kState = kStateTransmit; - - SizeT index = 0; - SizeT len = 0; - - index = 0; - len = rt_string_len(bytes, 255); - - while (index < len) - { - if (bytes[index] == '\r') - HAL::Out8(Detail::PORT, '\r'); - - HAL::Out8(Detail::PORT, bytes[index] == '\r' ? '\n' : bytes[index]); - ++index; - } - - Detail::kState = kStateReady; -#endif // __DEBUG__ - } - - EXTERN_C void ke_io_read(const char* bytes) - { -#ifdef __DEBUG__ - Detail::hal_serial_init(); - - if (!bytes || Detail::kState != kStateReady) - return; - - Detail::kState = kStateTransmit; - - SizeT index = 0; - - ///! TODO: Look on how to wait for the UART to complete. - while (true) - { - auto in = HAL::In8(Detail::PORT); - - ///! If enter pressed then break. - if (in == 0xD) - { - break; - } - - if (in < '0' || in < 'A' || in < 'a') - { - if (in != '@' || in != '!' || in != '?' || in != '.' || in != '/' || - in != ':') - { - continue; - } - } - - ((char*)bytes)[index] = in; - - ++index; - } - - ((char*)bytes)[index] = 0; - - Detail::kState = kStateReady; -#endif // __DEBUG__ - } - - TerminalDevice TerminalDevice::The() noexcept - { - TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read); - return out; - } - -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalDebugPort.cxx b/dev/Kernel/HALKit/AMD64/HalDebugPort.cxx deleted file mode 100644 index 1ea52b8d..00000000 --- a/dev/Kernel/HALKit/AMD64/HalDebugPort.cxx +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -//! @file DebuggerPort.cxx -//! @brief UART debug via packets. - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/DebugOutput.hxx> - -// after that we have start of additional data. - -namespace Kernel -{ - void rt_debug_listen(DebuggerPortHeader* theHook) noexcept - { - if (theHook == nullptr) - return; - - for (UInt32 i = 0U; i < kDebugMaxPorts; ++i) - { - HAL::Out16(theHook->fPort[i], kDebugMag0); - HAL::rt_wait_400ns(); - - HAL::Out16(theHook->fPort[i], kDebugMag1); - HAL::rt_wait_400ns(); - - HAL::Out16(theHook->fPort[i], kDebugMag2); - HAL::rt_wait_400ns(); - - HAL::Out16(theHook->fPort[i], kDebugMag3); - HAL::rt_wait_400ns(); - - if (HAL::In16(theHook->fPort[i] != kDebugUnboundPort)) - theHook->fBoundCnt++; - } - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx b/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx deleted file mode 100644 index 0339dd7f..00000000 --- a/dev/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx +++ /dev/null @@ -1,91 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> - -namespace Kernel::HAL -{ - namespace Detail - { - STATIC RegisterGDT kRegGdt; - STATIC HAL::Register64 kRegIdt; - - STATIC ::Kernel::Detail::AMD64::InterruptDescriptorAMD64 - kInterruptVectorTable[kKernelIdtSize]; - - STATIC Void RemapPIC(Void) noexcept - { - // Remap PIC. - HAL::Out8(0x20, 0x10 | 0x01); - HAL::Out8(0xA0, 0x10 | 0x01); - - HAL::Out8(0x21, 32); - HAL::Out8(0xA1, 40); - - HAL::Out8(0x21, 4); - HAL::Out8(0xA1, 2); - - HAL::Out8(0x21, 0x01); - HAL::Out8(0xA1, 0x01); - - HAL::Out8(0x21, 0x00); - HAL::Out8(0xA1, 0x00); - } - } // namespace Detail - - /// @brief Loads the provided Global Descriptor Table. - /// @param gdt - /// @return - Void GDTLoader::Load(RegisterGDT& gdt) - { - MUST_PASS(gdt.Base != 0); - - Detail::kRegGdt.Base = gdt.Base; - Detail::kRegGdt.Limit = gdt.Limit; - - hal_load_gdt(Detail::kRegGdt); - } - - Void IDTLoader::Load(Register64& idt) - { - volatile ::Kernel::UIntPtr** baseIdt = (volatile ::Kernel::UIntPtr**)idt.Base; - - MUST_PASS(baseIdt); - - Detail::RemapPIC(); - - for (UInt16 i = 0; i < kKernelIdtSize; ++i) - { - MUST_PASS(baseIdt[i]); - - Detail::kInterruptVectorTable[i].Selector = kGdtCodeSelector; - Detail::kInterruptVectorTable[i].Ist = 0x0; - Detail::kInterruptVectorTable[i].TypeAttributes = kInterruptGate; - Detail::kInterruptVectorTable[i].OffsetLow = ((UIntPtr)baseIdt[i] & __INT16_MAX__); - Detail::kInterruptVectorTable[i].OffsetMid = (((UIntPtr)baseIdt[i] >> 16) & __INT16_MAX__); - Detail::kInterruptVectorTable[i].OffsetHigh = - (((UIntPtr)baseIdt[i] >> 32) & __INT32_MAX__); - - Detail::kInterruptVectorTable[i].Zero = 0x0; - } - - Detail::kRegIdt.Base = reinterpret_cast<UIntPtr>(Detail::kInterruptVectorTable); - Detail::kRegIdt.Limit = sizeof(::Kernel::Detail::AMD64::InterruptDescriptorAMD64) * - (kKernelIdtSize - 1); - - hal_load_idt(Detail::kRegIdt); - } - - void GDTLoader::Load(Ref<RegisterGDT>& gdt) - { - GDTLoader::Load(gdt.Leak()); - } - - void IDTLoader::Load(Ref<Register64>& idt) - { - IDTLoader::Load(idt.Leak()); - } -} // namespace Kernel::HAL diff --git a/dev/Kernel/HALKit/AMD64/HalHart.cxx b/dev/Kernel/HALKit/AMD64/HalHart.cxx deleted file mode 100644 index bc0a485e..00000000 --- a/dev/Kernel/HALKit/AMD64/HalHart.cxx +++ /dev/null @@ -1,33 +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) - { - HAL::rt_cli(); - - rt_do_context_switch(stack); - - HAL::rt_sti(); - } - - /// @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/AMD64/HalInterruptAPI.asm b/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm deleted file mode 100644 index 093da0db..00000000 --- a/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm +++ /dev/null @@ -1,242 +0,0 @@ -;; /* -;; * --------------------------------------------------- -;; * -;; * Copyright ZKA Technologies., all rights reserved. -;; * -;; * File: HalInterruptAPI.asm -;; * Purpose: Interrupt routing, redirect raw interrupts into their handlers. -;; * -;; * --------------------------------------------------- -;; */ - -[bits 64] - -%define kInterruptId 0x21 - -%macro IntExp 1 -global __NEW_INT_%1 -__NEW_INT_%1: - cld - - iretq -%endmacro - -%macro IntNormal 1 -global __NEW_INT_%1 -__NEW_INT_%1: - cld - - iretq -%endmacro - -; This file handles the core interrupt table -; Last edited 31/01/24 - -global ke_handle_irq -global kInterruptVectorTable - -extern _hal_handle_mouse -extern idt_handle_gpf -extern idt_handle_pf -extern ke_io_write -extern idt_handle_ud - -section .text - -IntNormal 0 -IntNormal 1 - -IntNormal 2 - -IntNormal 3 -IntNormal 4 -IntNormal 5 - -;; Invalid opcode interrupt -__NEW_INT_6: - cli - - push rax - - mov rcx, rsp - call idt_handle_ud - - pop rax - - sti - iretq - -IntNormal 7 -IntExp 8 -IntNormal 9 -IntExp 10 -IntExp 11 - -IntExp 12 - -__NEW_INT_13: - cli - - push rax - - mov rcx, rsp - call idt_handle_gpf - - pop rax - - sti - iretq - -__NEW_INT_14: - cli - - push rax - - mov rcx, rsp - call idt_handle_pf - - pop rax - - sti - iretq - -IntNormal 15 -IntNormal 16 -IntExp 17 -IntNormal 18 -IntNormal 19 -IntNormal 20 -IntNormal 21 -IntNormal 22 -IntNormal 23 -IntNormal 24 -IntNormal 25 -IntNormal 26 -IntNormal 27 -IntNormal 28 -IntNormal 29 -IntExp 30 - -IntNormal 31 - -IntNormal 32 -IntNormal 34 - -IntNormal 33 -IntNormal 35 -IntNormal 36 -IntNormal 37 -IntNormal 38 -IntNormal 39 -IntNormal 40 -IntNormal 41 -IntNormal 42 -IntNormal 43 - -__NEW_INT_44: - cli - - ;; TODO: CoreEvents dispatch routine. - - push rax - call _hal_handle_mouse - pop rax - - sti - iretq - -IntNormal 45 -IntNormal 46 -IntNormal 47 -IntNormal 48 -IntNormal 49 - -[extern hal_system_call_enter] -[extern hal_kernel_call_enter] - -__NEW_INT_50: - cli - - push rcx - push rdx - push rax - - call hal_system_call_enter - - pop rax - pop rdx - pop rcx - - sti - iretq - -__NEW_INT_51: - cli - - push rcx - push rdx - push r8 - push r9 - push rax - - call hal_kernel_call_enter - - pop rax - pop r9 - pop r8 - pop rdx - pop rcx - - sti - iretq - -IntNormal 52 -IntNormal 53 -IntNormal 54 -IntNormal 55 -IntNormal 56 -IntNormal 57 -IntNormal 58 -IntNormal 59 -IntNormal 60 - -%assign i 61 -%rep 195 - IntNormal i -%assign i i+1 -%endrep - -section .text - -[global hal_load_gdt] - -hal_load_gdt: - lgdt [rcx] - push 0x08 - lea rax, [rel rt_reload_segments] - push rax - retfq -rt_reload_segments: - mov ax, 0x10 - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax - ret - -global hal_load_idt - -hal_load_idt: - lidt [rcx] - sti - ret - -section .data - -kInterruptVectorTable: - %assign i 0 - %rep 256 - dq __NEW_INT_%+i - %assign i i+1 - %endrep diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMain.cxx b/dev/Kernel/HALKit/AMD64/HalKernelMain.cxx deleted file mode 100644 index 49ddfa6c..00000000 --- a/dev/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ /dev/null @@ -1,251 +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> -#include <CFKit/Property.hxx> -#include <Modules/CoreCG/TextRenderer.hxx> - -Kernel::Property cKernelVersion; -Kernel::Property cAutoFormatDisk; - -EXTERN Kernel::Boolean kAllocationInProgress; - -EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; - -struct HEAP_ALLOC_INFO final -{ - Kernel::VoidPtr fThe; - Kernel::Size fTheSz; -}; - -struct PROCESS_BLOCK_INFO final -{ - THREAD_INFORMATION_BLOCK* fTIB; - THREAD_INFORMATION_BLOCK* fGIB; -}; - -struct PROCESS_EXIT_INFO final -{ - STATIC constexpr auto cReasonLen = 512; - - Kernel::Int64 fCode; - Kernel::Char fReason[cReasonLen]; -}; - -namespace Kernel::HAL -{ - /// @brief Gets the system cores using the MADT. - /// @param rsdPtr The 'RSD PTR' data structure. - EXTERN void hal_system_get_cores(Kernel::voidPtr rsdPtr); -} // namespace Kernel::HAL - -/* GDT. */ -STATIC Kernel::HAL::Detail::NewOSGDT cGdt = { - {0, 0, 0, 0x00, 0x00, 0}, // null entry - {0, 0, 0, 0x9a, 0xaf, 0}, // kernel code - {0, 0, 0, 0x92, 0xaf, 0}, // kernel data - {0, 0, 0, 0x00, 0x00, 0}, // null entry - {0, 0, 0, 0x9a, 0xaf, 0}, // user code - {0, 0, 0, 0x92, 0xaf, 0}, // user data -}; - -Kernel::Void hal_real_init(Kernel::Void) noexcept; - -static Kernel::User* cRoot; - -EXTERN_C void hal_init_platform( - Kernel::HEL::HandoverInformationHeader* HandoverHeader) -{ - /* Setup globals. */ - - kHandoverHeader = HandoverHeader; - - if (kHandoverHeader->f_Magic != kHandoverMagic && - kHandoverHeader->f_Version != kHandoverVersion) - { - return; - } - - hal_real_init(); -} - -Kernel::Void hal_real_init(Kernel::Void) noexcept -{ - // reset kAllocationInProgress field to zero. - kAllocationInProgress = false; - - // get page size. - kKernelVirtualSize = kHandoverHeader->f_VirtualSize; - - // get virtual address start (for the heap) - kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>( - reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart)); - - // get physical address start. - kKernelPhysicalStart = reinterpret_cast<Kernel::VoidPtr>( - reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_PhysicalStart)); - - // Load memory descriptors. - Kernel::HAL::RegisterGDT gdtBase; - - gdtBase.Base = reinterpret_cast<Kernel::UIntPtr>(&cGdt); - gdtBase.Limit = sizeof(Kernel::HAL::Detail::NewOSGDT) - 1; - - CONST Kernel::HAL::GDTLoader cGDT; - cGDT.Load(gdtBase); - - // Load IDT now. - - Kernel::HAL::Register64 idtBase; - idtBase.Base = (Kernel::UIntPtr)kInterruptVectorTable; - idtBase.Limit = 0; - - CONST Kernel::HAL::IDTLoader cIDT; - cIDT.Load(idtBase); - - // Register the basic system calls. - - 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; - - kSyscalls[cTlsInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - if (tls_check_syscall_impl(rdx) == false) - { - Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); - } - }; - - kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - // get HAC struct. - HEAP_ALLOC_INFO* rdxInf = reinterpret_cast<HEAP_ALLOC_INFO*>(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. - HEAP_ALLOC_INFO* rdxInf = reinterpret_cast<HEAP_ALLOC_INFO*>(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 { - PROCESS_BLOCK_INFO* rdxPb = reinterpret_cast<PROCESS_BLOCK_INFO*>(rdx); - - if (!rdxPb) - return; - - // install the fTIB and fGIB. - rt_install_tib(rdxPb->fTIB, rdxPb->fGIB); - }; - - kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - PROCESS_EXIT_INFO* rdxEi = reinterpret_cast<PROCESS_EXIT_INFO*>(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 { - PROCESS_EXIT_INFO* rdxEi = reinterpret_cast<PROCESS_EXIT_INFO*>(rdx); - - if (!rdxEi) - return; - - rdxEi->fCode = Kernel::sched_get_exit_code(); - }; - - kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::PowerFactoryInterface pow(kHandoverHeader->f_HardwareTables.f_VendorPtr); - pow.Reboot(); - }; - - kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::PowerFactoryInterface pow(kHandoverHeader->f_HardwareTables.f_VendorPtr); - pow.Shutdown(); - }; - - 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; - - Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); - - Kernel::kcout << "newoskrnl: Creating filesystem and such.\r"; - - auto fs = new Kernel::NewFilesystemManager(); - - MUST_PASS(fs); - MUST_PASS(fs->GetParser()); - - Kernel::NewFilesystemManager::Mount(fs); - - delete fs->GetParser()->CreateCatalog("\\Users\\", 0, kNewFSCatalogKindDir); - - Kernel::kcout << "newoskrnl: Created filesystem and now creating " << kSuperUser << "..." << Kernel::endl; - - cRoot = new Kernel::User(Kernel::RingKind::kRingSuperUser, kSuperUser); - -#ifdef __DEBUG__ - const auto cPassword = "6aa162f3-20f6-4143-92f9-5dd37066aedc"; -#else - const auto cPassword = "password"; -#endif - - Kernel::UserManager::The()->fRootUser = cRoot; - - Kernel::kcout << "newoskrnl: Root is " << kSuperUser << "." << Kernel::endl; - - cRoot->TrySave(cPassword); - - Kernel::UserManager::The()->TryLogIn(cRoot, cPassword); - - Kernel::ke_stop(RUNTIME_CHECK_FAILED); -} diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMouse.cxx b/dev/Kernel/HALKit/AMD64/HalKernelMouse.cxx deleted file mode 100644 index bff5e5ee..00000000 --- a/dev/Kernel/HALKit/AMD64/HalKernelMouse.cxx +++ /dev/null @@ -1,190 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <Modules/PS2/PS2MouseInterface.hxx> -#include <Modules/CoreCG/FbRenderer.hxx> -#include <Modules/CoreCG/Rsrc/Cursor.rsrc> -#include <KernelKit/Framebuffer.hxx> -#include <NewKit/Defines.hxx> - -/// @note forward decl. -EXTERN_C Kernel::Boolean _hal_draw_mouse(); -EXTERN_C Kernel::Void _hal_init_mouse(); - -STATIC Kernel::Int32 kPrevX = 10; -STATIC Kernel::Int32 kPrevY = 10; -STATIC Kernel::Int32 kX = 10; -STATIC Kernel::Int32 kY = 10; -STATIC Kernel::Int32 kMouseCycle = 0; -STATIC Kernel::PS2MouseInterface kMousePS2; -STATIC Kernel::Char kMousePacket[4] = {}; -STATIC Kernel::Boolean kMousePacketReady = false; - -STATIC CGInit(); - -#define kPS2Leftbutton 0b00000001 -#define kPS2Middlebutton 0b00000010 -#define kPS2Rightbutton 0b00000100 -#define kPS2XSign 0b00010000 -#define kPS2YSign 0b00100000 -#define kPS2XOverflow 0b01000000 -#define kPS2YOverflow 0b10000000 - -using namespace Kernel; - -Void hal_handle_mouse() -{ - Kernel::UInt8 data = HAL::In8(0x60); - - switch (kMouseCycle) - { - case 0: - if (kMousePacketReady) - break; - if ((data & 0b00001000) == 0) - break; - kMousePacket[0] = data; - kMouseCycle++; - break; - case 1: - if (kMousePacketReady) - break; - kMousePacket[1] = data; - kMouseCycle++; - break; - case 2: - if (kMousePacketReady) - break; - kMousePacket[2] = data; - kMousePacketReady = true; - kMouseCycle = 0; - break; - } - - // Notify PIC controller that we're done with it's interrupt. - - Kernel::HAL::Out8(0x20, 0x20); - Kernel::HAL::Out8(0xA0, 0x20); -} - -/// @brief Interrupt handler for the mouse. -EXTERN_C Void _hal_handle_mouse() -{ - hal_handle_mouse(); -} - -EXTERN_C Boolean _hal_left_button_pressed() -{ - return kMousePacket[0] & kPS2Leftbutton; -} -EXTERN_C Boolean _hal_right_button_pressed() -{ - return kMousePacket[0] & kPS2Rightbutton; -} -EXTERN_C Boolean _hal_middle_button_pressed() -{ - return kMousePacket[0] & kPS2Middlebutton; -} - -/// @brief Draws the kernel's mouse. -EXTERN_C Boolean _hal_draw_mouse() -{ - if (!kMousePacketReady) - return false; - - bool xNegative, yNegative, xOverflow, yOverflow; - - if (kMousePacket[0] & kPS2XSign) - { - xNegative = true; - } - else - xNegative = false; - - if (kMousePacket[0] & kPS2YSign) - { - yNegative = true; - } - else - yNegative = false; - - if (kMousePacket[0] & kPS2XOverflow) - { - xOverflow = true; - } - else - xOverflow = false; - - if (kMousePacket[0] & kPS2YOverflow) - { - yOverflow = true; - } - else - yOverflow = false; - - if (!xNegative) - { - kX += kMousePacket[1]; - if (xOverflow) - { - kX += 255; - } - } - else - { - kMousePacket[1] = 256 - kMousePacket[1]; - kX -= kMousePacket[1]; - if (xOverflow) - { - kX -= 255; - } - } - - if (!yNegative) - { - kY -= kMousePacket[2]; - if (yOverflow) - { - kY -= 255; - } - } - else - { - kMousePacket[2] = 256 - kMousePacket[2]; - kY += kMousePacket[2]; - if (yOverflow) - { - kY += 255; - } - } - - if (kX < 0) - kX = 0; - if (kX > kHandoverHeader->f_GOP.f_Width - 8) - kX = kHandoverHeader->f_GOP.f_Width - 8; - - if (kY < 0) - kY = 0; - if (kY > kHandoverHeader->f_GOP.f_Height - 16) - kY = kHandoverHeader->f_GOP.f_Height - 16; - - /// Draw mouse here. - - kPrevX = kX; - kPrevY = kY; - - kMousePacketReady = false; - return true; -} - -/// @brief Init kernel mouse. -EXTERN_C Void _hal_init_mouse() -{ - kMousePS2.Init(); - - HAL::Out8(0x21, 0b11111001); - HAL::Out8(0xA1, 0b11101111); -} diff --git a/dev/Kernel/HALKit/AMD64/HalPageAlloc.cxx b/dev/Kernel/HALKit/AMD64/HalPageAlloc.cxx deleted file mode 100644 index 0e39a0f1..00000000 --- a/dev/Kernel/HALKit/AMD64/HalPageAlloc.cxx +++ /dev/null @@ -1,120 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> - -#define cVMHMagic (0xDEEFD00D) - -#ifdef __NEWOS_AMD64__ -#include <HALKit/AMD64/HalPageAlloc.hxx> -#elif defined(__NEWOS_ARM64__) -#include <HALKit/ARM64/HalPageAlloc.hxx> -#endif - -#include <NewKit/Defines.hxx> -#include <NewKit/KernelCheck.hxx> - -Kernel::Boolean kAllocationInProgress = false; - -namespace Kernel -{ - - namespace HAL - { - namespace Detail - { - struct VIRTUAL_MEMORY_HEADER - { - UInt32 Magic; - Boolean Present : 1; - Boolean ReadWrite : 1; - Boolean User : 1; - SizeT Size; - }; - - struct VirtualMemoryHeaderTraits final - { - /// @brief Get next header. - /// @param current - /// @return - VIRTUAL_MEMORY_HEADER* Next(VIRTUAL_MEMORY_HEADER* current) - { - if (current->Magic != cVMHMagic) - current->Size = 8196; - - return current + sizeof(VIRTUAL_MEMORY_HEADER) + current->Size; - } - - /// @brief Get previous header. - /// @param current - /// @return - VIRTUAL_MEMORY_HEADER* Prev(VIRTUAL_MEMORY_HEADER* current) - { - if (current->Magic != cVMHMagic) - current->Size = 8196; - - return current - sizeof(VIRTUAL_MEMORY_HEADER) - current->Size; - } - }; - } // namespace Detail - - /// @brief Allocates a new page of memory. - /// @param sz the size of it. - /// @param rw read/write flag. - /// @param user user flag. - /// @return the page table of it. - STATIC auto hal_try_alloc_new_page(Boolean rw, Boolean user, SizeT size) -> VoidPtr - { - if (kAllocationInProgress) - return nullptr; - - kAllocationInProgress = true; - - //! fetch from the start. - Detail::VIRTUAL_MEMORY_HEADER* vmh_header = reinterpret_cast<Detail::VIRTUAL_MEMORY_HEADER*>(kKernelVMTStart); - Detail::VirtualMemoryHeaderTraits traits; - - while (vmh_header->Present && - vmh_header->Magic == cVMHMagic) - { - vmh_header = traits.Next(vmh_header); - } - - vmh_header->Magic = cVMHMagic; - vmh_header->Present = true; - vmh_header->ReadWrite = rw; - vmh_header->User = user; - vmh_header->Size = size; - - kAllocationInProgress = false; - - return reinterpret_cast<VoidPtr>(vmh_header + sizeof(Detail::VIRTUAL_MEMORY_HEADER)); - } - - /// @brief Allocate a new page to be used by the OS. - /// @param rw read/write bit. - /// @param user user bit. - /// @return - auto hal_alloc_page(Boolean rw, Boolean user, SizeT size) -> VoidPtr - { - kcout << "Waiting now..."; - - // Wait for a ongoing allocation to complete. - while (kAllocationInProgress) - { - (void)0; - } - - kcout << ", done waiting, allocating...\r"; - - if (size == 0) - ++size; - - // allocate new page. - return hal_try_alloc_new_page(rw, user, size); - } - } // namespace HAL -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalPageAlloc.hxx b/dev/Kernel/HALKit/AMD64/HalPageAlloc.hxx deleted file mode 100644 index 30cb7911..00000000 --- a/dev/Kernel/HALKit/AMD64/HalPageAlloc.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -/** --------------------------------------------------- - - * THIS FILE CONTAINS CODE FOR X86_64 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 - -#ifndef kAlign -#define kAlign __BIGGEST_ALIGNMENT__ -#endif // !kAlign - -EXTERN_C void hal_flush_tlb(); -EXTERN_C void hal_write_cr3(Kernel::UIntPtr pde); -EXTERN_C void hal_write_cr0(Kernel::UIntPtr bit); - -EXTERN_C Kernel::UIntPtr hal_read_cr0(); // @brief CPU control register. -EXTERN_C Kernel::UIntPtr hal_read_cr2(); // @brief Fault address. -EXTERN_C Kernel::UIntPtr hal_read_cr3(); // @brief Page table. - -namespace Kernel::HAL -{ - struct PACKED PageTable64 final - { - bool Present : 1; - bool Rw : 1; - bool User : 1; - bool Wt : 1; - bool Cache : 1; - bool Accessed : 1; - Kernel::Int32 Reserved : 6; - Kernel::UInt64 PhysicalAddress : 36; - Kernel::Int32 Reserved1 : 15; - bool ExecDisable : 1; - }; - - 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 - { - PageTable64 ALIGN(kPTEAlign) Pte[kPTEMax]; - }; - - VoidPtr hal_alloc_page(Boolean rw, Boolean user, SizeT size); -} // namespace Kernel::HAL - -namespace Kernel -{ - typedef HAL::PageTable64 PTE; - typedef HAL::PageDirectory64 PDE; -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/HalProcessor.cxx b/dev/Kernel/HALKit/AMD64/HalProcessor.cxx deleted file mode 100644 index 367e9314..00000000 --- a/dev/Kernel/HALKit/AMD64/HalProcessor.cxx +++ /dev/null @@ -1,97 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/AMD64/Processor.hxx> - -/** - * @file Processor.cpp - * @brief This file is about processor specific functions (in/out/cli/std...) - */ - -namespace Kernel::HAL -{ - 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/Kernel/HALKit/AMD64/HalRoutines.s b/dev/Kernel/HALKit/AMD64/HalRoutines.s deleted file mode 100644 index d794882d..00000000 --- a/dev/Kernel/HALKit/AMD64/HalRoutines.s +++ /dev/null @@ -1,9 +0,0 @@ -.globl rt_wait_400ns - -.section .text -rt_wait_400ns: - jmp .loop - .loop: - jmp .loop2 - .loop2: - ret diff --git a/dev/Kernel/HALKit/AMD64/HalSMPCoreManager.asm b/dev/Kernel/HALKit/AMD64/HalSMPCoreManager.asm deleted file mode 100644 index 3c53d49d..00000000 --- a/dev/Kernel/HALKit/AMD64/HalSMPCoreManager.asm +++ /dev/null @@ -1,81 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * Kernel -;; * Copyright ZKA Technologies., all rights reserved. -;; * -;; * ======================================================== -;; */ - -[bits 64] - -[global rt_get_current_context] -[global rt_do_context_switch] -[global _hal_spin_core] -[extern _hal_switch_context] -[extern _hal_leak_current_context] - -section .text - -;; writes to rdx the stackframe inside rcx. -;; rcx: Stack Pointer -;; rdx: SMP core address. -rt_do_context_switch: - push rax - call _hal_switch_context - pop rax - - ;; Now grab newly allocated process's stack frame. - - push rax - call _hal_leak_current_context - mov rax, r9 - pop rax - - ;; Take care of context switching within AP. - - mov r9, rax - - mov rbp, [r9 + (8 * 5)] - mov rsp, [r9 + (8 * 6)] - - mov gs, [r9 + (8 * 19)] - mov fs, [r9 + (8 * 20)] - - mov rcx, [r9 + (8 * 3)] - mov rdx, [r9 + (8 * 4)] - mov rbx, [r9 + (8 * 7)] - mov rax, [r9 + (8 * 8)] - movq xmm0, [r9 + (8 * 9)] - movq xmm1, [r9 + (8 * 10)] - - mov r8, [r9 + (8 * 11)] - mov r10, [r9 + (8 * 13)] - mov r11, [r9 + (8 * 14)] - mov r12, [r9 + (8 * 15)] - mov r13, [r9 + (8 * 16)] - mov r14, [r9 + (8 * 17)] - mov r15, [r9 + (8 * 18)] - - fldcw word [r9 + (8 * 21)] - - mov r9, [r9 + (8 * 12)] - - retfq - -;; gets the current stack frame. -rt_get_current_context: - push rax - - call _hal_leak_current_context - - mov rax, r9 - pop rax - - mov r9, rax - - retfq - -_hal_spin_core: - jmp $ - ret diff --git a/dev/Kernel/HALKit/AMD64/HalScheduler.cxx b/dev/Kernel/HALKit/AMD64/HalScheduler.cxx deleted file mode 100644 index d3094c4b..00000000 --- a/dev/Kernel/HALKit/AMD64/HalScheduler.cxx +++ /dev/null @@ -1,30 +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/AMD64/HalTimer.cxx b/dev/Kernel/HALKit/AMD64/HalTimer.cxx deleted file mode 100644 index ff65a4a1..00000000 --- a/dev/Kernel/HALKit/AMD64/HalTimer.cxx +++ /dev/null @@ -1,14 +0,0 @@ -/* -------------------------------------------
-
- Copyright ZKA Technologies.
-
- File: HalTimer.cxx
- Purpose: HAL timer
-
- Revision History:
-
- 07/07/24: Added file (amlel)
-
-------------------------------------------- */
-
-#include <ArchKit/ArchKit.hxx>
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AMD64/HalUtils.asm b/dev/Kernel/HALKit/AMD64/HalUtils.asm deleted file mode 100644 index 5b4da821..00000000 --- a/dev/Kernel/HALKit/AMD64/HalUtils.asm +++ /dev/null @@ -1,33 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * Kernel -;; * Copyright ZKA Technologies., all rights reserved. -;; * -;; * ======================================================== -;; */ - -[bits 64] - -[global rt_install_tib] - -section .text - -;; changed: rs, fs -;; expected: rcx, rdx - -rt_install_tib: - mov rcx, gs ;; TIB -> Thread Information Block - mov rdx, fs ;; PIB -> Process Information Block - ret - -;; //////////////////////////////////////////////////// ;; - -[extern cBspDone] -[extern kApicMadtAddressesCount] -[extern hal_ap_startup] -[global hal_ap_trampoline] - -hal_ap_trampoline: -hal_ap_trampoline_1: - jmp hal_ap_startup diff --git a/dev/Kernel/HALKit/AMD64/Hypervisor.hxx b/dev/Kernel/HALKit/AMD64/Hypervisor.hxx deleted file mode 100644 index 7871288f..00000000 --- a/dev/Kernel/HALKit/AMD64/Hypervisor.hxx +++ /dev/null @@ -1,25 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - MAKE_STRING_ENUM(HYPERVISOR) - ENUM_STRING(Qemu, "TCGTCGTCGTCG"); - ENUM_STRING(KVM, " KVMKVMKVM "); - ENUM_STRING(VMWare, "VMwareVMware"); - ENUM_STRING(VirtualBox, "VBoxVBoxVBox"); - ENUM_STRING(Xen, "XenVMMXenVMM"); - ENUM_STRING(Microsoft, "Microsoft Hv"); - ENUM_STRING(Parallels, " prl hyperv "); - ENUM_STRING(ParallelsAlt, " lrpepyh vr "); - ENUM_STRING(Bhyve, "bhyve bhyve "); - ENUM_STRING(Qnx, " QNXQVMBSQG "); - END_STRING_ENUM() -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/MBCI/.gitkeep b/dev/Kernel/HALKit/AMD64/MBCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/AMD64/MBCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/AMD64/PCI/Database.cxx b/dev/Kernel/HALKit/AMD64/PCI/Database.cxx deleted file mode 100644 index 971d43f9..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/Database.cxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/Database.hxx> - -namespace Kernel -{ -} diff --git a/dev/Kernel/HALKit/AMD64/PCI/Device.cxx b/dev/Kernel/HALKit/AMD64/PCI/Device.cxx deleted file mode 100644 index 214a640a..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/Device.cxx +++ /dev/null @@ -1,130 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/PCI/Device.hxx> - -Kernel::UInt NewOSPCIReadRaw(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShort dev, Kernel::UShort fun) -{ - Kernel::UInt target = 0x80000000 | ((Kernel::UInt)bus << 16) | - ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) | - (bar & 0xFC); - - Kernel::HAL::Out32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigAddress, - target); - - return Kernel::HAL::In32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigData); -} - -void NewOSPCISetCfgTarget(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShort dev, Kernel::UShort fun) -{ - Kernel::UInt target = 0x80000000 | ((Kernel::UInt)bus << 16) | - ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) | - (bar & ~3); - - Kernel::HAL::Out32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigAddress, - target); -} - -namespace Kernel::PCI -{ - Device::Device(UShort bus, UShort device, UShort func, UShort bar) - : fBus(bus), fDevice(device), fFunction(func), fBar(bar) - { - } - - Device::~Device() - { - } - - UInt Device::Read(UInt bar, Size sz) - { - NewOSPCISetCfgTarget(bar, fBus, fDevice, fFunction); - - if (sz == 4) - return HAL::In32((UShort)PciConfigKind::ConfigData + (fBar & 3)); - if (sz == 2) - return HAL::In16((UShort)PciConfigKind::ConfigData + (fBar & 3)); - if (sz == 1) - return HAL::In8((UShort)PciConfigKind::ConfigData + (fBar & 3)); - - return 0xFFFF; - } - - void Device::Write(UInt bar, UIntPtr data, Size sz) - { - NewOSPCISetCfgTarget(bar, fBus, fDevice, fFunction); - - if (sz == 4) - HAL::Out32((UShort)PciConfigKind::ConfigData + (fBar & 3), (UInt)data); - if (sz == 2) - HAL::Out16((UShort)PciConfigKind::ConfigData + (fBar & 3), (UShort)data); - if (sz == 1) - HAL::Out8((UShort)PciConfigKind::ConfigData + (fBar & 3), (UChar)data); - } - - UShort Device::DeviceId() - { - return (UShort)(NewOSPCIReadRaw(0x0 >> 16, fBus, fDevice, fFunction)); - } - - UShort Device::VendorId() - { - return (UShort)(NewOSPCIReadRaw(0x0, fBus, fDevice, fFunction) >> 16); - } - - UShort Device::InterfaceId() - { - return (UShort)(NewOSPCIReadRaw(0x0, fBus, fDevice, fFunction) >> 16); - } - - UChar Device::Class() - { - return (UChar)(NewOSPCIReadRaw(0x08, fBus, fDevice, fFunction) >> 24); - } - - UChar Device::Subclass() - { - return (UChar)(NewOSPCIReadRaw(0x08, fBus, fDevice, fFunction) >> 16); - } - - UChar Device::ProgIf() - { - return (UChar)(NewOSPCIReadRaw(0x08, fBus, fDevice, fFunction) >> 8); - } - - UChar Device::HeaderType() - { - return (UChar)(NewOSPCIReadRaw(0xC, fBus, fDevice, fFunction) >> 16); - } - - void Device::EnableMmio() - { - bool enable = Read(0x04, sizeof(UChar)) | (1 << 1); - Write(0x04, enable, sizeof(UShort)); - } - - void Device::BecomeBusMaster() - { - bool enable = Read(0x04, sizeof(UShort)) | (1 << 2); - Write(0x04, enable, sizeof(UShort)); - } - - UShort Device::Vendor() - { - UShort vendor = VendorId(); - - if (vendor != (UShort)PciConfigKind::Invalid) - fDevice = (UShort)Read(0x0, sizeof(UShort)); - - return fDevice; - } - - Device::operator bool() - { - return VendorId() != (UShort)PciConfigKind::Invalid; - } -} // namespace Kernel::PCI diff --git a/dev/Kernel/HALKit/AMD64/PCI/Dma.cxx b/dev/Kernel/HALKit/AMD64/PCI/Dma.cxx deleted file mode 100644 index bf1730d8..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/Dma.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/Dma.hxx> - -namespace Kernel -{ - DMAWrapper::operator bool() - { - return fAddress; - } - - bool DMAWrapper::operator!() - { - return !fAddress; - } - - Boolean DMAWrapper::Check(UIntPtr offset) const - { - if (!fAddress) - return false; - if (offset == 0) - return true; - - kcout << "[DMAWrapper::IsIn] Checking offset..\n"; - return reinterpret_cast<UIntPtr>(fAddress) >= offset; - } - - bool DMAWrapper::Write(const UIntPtr& bit, const UIntPtr& offset) - { - if (!fAddress) - return false; - - kcout << "[DMAWrapper::Write] Writing at address..\n"; - - auto addr = - (volatile UIntPtr*)(reinterpret_cast<UIntPtr>(fAddress) + offset); - *addr = bit; - - return true; - } - - UIntPtr DMAWrapper::Read(const UIntPtr& offset) - { - kcout << "[DMAWrapper::Read] checking fAddress..\n"; - if (!fAddress) - return 0; - - kcout << "[DMAWrapper::Read] Reading fAddress..\n"; - return *(volatile UIntPtr*)(reinterpret_cast<UIntPtr>(fAddress) + offset); - ; - } - - UIntPtr DMAWrapper::operator[](const UIntPtr& offset) - { - return this->Read(offset); - } - - OwnPtr<IOBuf<Char*>> DMAFactory::Construct(OwnPtr<DMAWrapper>& dma) - { - if (!dma) - return {}; - - OwnPtr<IOBuf<Char*>> dmaOwnPtr = - make_ptr<IOBuf<Char*>, char*>(reinterpret_cast<char*>(dma->fAddress)); - - if (!dmaOwnPtr) - return {}; - - kcout << "Returning the new OwnPtr<IOBuf<Char*>>!\r"; - return dmaOwnPtr; - } - - DMAWrapper& DMAWrapper::operator=(voidPtr Ptr) - { - fAddress = Ptr; - return *this; - } -} // namespace Kernel diff --git a/dev/Kernel/HALKit/AMD64/PCI/Express.cxx b/dev/Kernel/HALKit/AMD64/PCI/Express.cxx deleted file mode 100644 index 6a926827..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/Express.cxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/Express.hxx> - -namespace Kernel -{ -} diff --git a/dev/Kernel/HALKit/AMD64/PCI/IO.cxx b/dev/Kernel/HALKit/AMD64/PCI/IO.cxx deleted file mode 100644 index ea91c7b7..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/IO.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/IO.hxx> diff --git a/dev/Kernel/HALKit/AMD64/PCI/Iterator.cxx b/dev/Kernel/HALKit/AMD64/PCI/Iterator.cxx deleted file mode 100644 index 47b16462..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/Iterator.cxx +++ /dev/null @@ -1,44 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/Iterator.hxx> - -#define PCI_ITERATOR_FIND_AND_UNWRAP(DEV, SZ) \ - if (DEV.Leak().Leak()) \ - return *DEV.Leak().Leak(); - -namespace Kernel::PCI -{ - Iterator::Iterator(const Types::PciDeviceKind& type) - { - // probe devices. - for (int bus = 0; bus < NEWOS_BUS_COUNT; ++bus) - { - for (int device = 0; device < NEWOS_DEVICE_COUNT; ++device) - { - for (int function = 0; function < NEWOS_FUNCTION_COUNT; ++function) - { - Device dev(bus, device, function, 0); - - if (dev.Class() == (UChar)type) - { - *fDevices[bus].Leak().Leak() = dev; - } - } - } - } - } - - Iterator::~Iterator() - { - } - - Ref<PCI::Device> Iterator::operator[](const Size& sz) - { - PCI_ITERATOR_FIND_AND_UNWRAP(fDevices[sz], sz); - return {}; - } -} // namespace Kernel::PCI diff --git a/dev/Kernel/HALKit/AMD64/PCI/PCI.cxx b/dev/Kernel/HALKit/AMD64/PCI/PCI.cxx deleted file mode 100644 index 59e3b06e..00000000 --- a/dev/Kernel/HALKit/AMD64/PCI/PCI.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/PCI/PCI.hxx> diff --git a/dev/Kernel/HALKit/AMD64/Processor.hxx b/dev/Kernel/HALKit/AMD64/Processor.hxx deleted file mode 100644 index d80a2834..00000000 --- a/dev/Kernel/HALKit/AMD64/Processor.hxx +++ /dev/null @@ -1,348 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Prcoessor.hxx - Purpose: AMD64 processor abstraction. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Utils.hxx> -#include <FirmwareKit/Handover.hxx> -#include <HALKit/AMD64/HalPageAlloc.hxx> - -EXTERN_C -{ -#include <cpuid.h> -} - -#ifdef kCPUBackendName -#undef kCPUBackendName -#endif // ifdef kCPUBackendName - -#define kCPUBackendName "AMD64" - -#define kSyscallRoute 0x32 - -#define IsActiveLow(FLG) (FLG & 2) -#define IsLevelTriggered(FLG) (FLG & 8) - -#define kInterruptGate (0x8E) -#define kTrapGate (0xEF) -#define kTaskGate (0b10001100) -#define kGdtCodeSelector (0x08) -#define kGdtUserCodeSelector (0x10) -#define cHeapStartOffset (0x80000000) - -namespace Kernel -{ - namespace Detail::AMD64 - { - struct PACKED InterruptDescriptorAMD64 final - { - UInt16 OffsetLow; // offset bits 0..15 - UInt16 Selector; // a code segment selector in GDT or LDT - UInt8 - Ist; // bits 0..2 holds Interrupt Stack Table offset, rest of bits zero. - UInt8 TypeAttributes; // gate type, dpl, and p fields - UInt16 OffsetMid; // offset bits 16..31 - UInt32 OffsetHigh; // offset bits 32..63 - UInt32 Zero; // reserved - }; - } // namespace Detail::AMD64 -} // namespace Kernel - -namespace Kernel::HAL -{ - /// @brief Virtual memory flags. - enum - { - eFlagsUser, - eFlagsRw, - eFlagsExecDisable - }; - - /// @brief Map address to PDE. - /// @param pde a valid page directory. - /// @param phys_addr a valid phyiscal address. - /// @param virt_addr a valid virtual address. - /// @param flags the flags to put on the page. - inline Int32 ke_map_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags) - { - UInt16 pml4_index = (virt_addr >> 39) & 0x1FF; - - if (pde && !pde->Pte[pml4_index].Present) - { - pde->Pte[pml4_index].Present = true; - - pde->Pte[pml4_index].PhysicalAddress = phys_addr; - pde->Pte[pml4_index].Rw = flags & eFlagsRw; - pde->Pte[pml4_index].User = flags & eFlagsUser; - pde->Pte[pml4_index].ExecDisable = flags & eFlagsExecDisable; - - kcout << "PTE is present now.\r"; - - return 0; - } - else - { - kcout << "PM is already present.\r"; - - kcout << "PhysicalAddress: " << hex_number(pde->Pte[pml4_index].PhysicalAddress); - kcout << "\r"; - - kcout << "User: " << (pde->Pte[pml4_index].User ? "true" : "false") << "\r"; - kcout << "RW: " << (pde->Pte[pml4_index].Rw ? "true" : "false") << "\r"; - - return 0; - } - - return 1; - } - - /// @brief Map address to PDE. - /// @param pde - /// @param phys_addr - /// @param virt_addr - /// @param flags - inline Void ke_unmap_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags) - { - UInt16 pml4_index = (virt_addr >> 39) & 0x1FF; - - if (pde->Pte[pml4_index].Present) - { - pde->Pte[pml4_index].Present = false; - pde->Pte[pml4_index].PhysicalAddress = 0; - pde->Pte[pml4_index].Rw = 0; - pde->Pte[pml4_index].User = 0; - pde->Pte[pml4_index].ExecDisable = 0; - } - } - - EXTERN_C UChar In8(UInt16 port); - EXTERN_C UShort In16(UInt16 port); - EXTERN_C UInt In32(UInt16 port); - - EXTERN_C void Out16(UShort port, UShort byte); - EXTERN_C void Out8(UShort port, UChar byte); - EXTERN_C void Out32(UShort port, UInt byte); - - EXTERN_C void rt_wait_400ns(); - EXTERN_C void rt_halt(); - EXTERN_C void rt_cli(); - EXTERN_C void rt_sti(); - EXTERN_C void rt_cld(); - EXTERN_C void rt_std(); - - struct PACKED Register64 final - { - UShort Limit; - UIntPtr Base; - }; - - struct PACKED RegisterGDT final - { - UShort Limit; - UIntPtr Base; - }; - - using RawRegister = UInt64; - - using InterruptId = UShort; /* For each element in the IVT */ - using InterruptTrapKind = UIntPtr(UIntPtr sp); - - typedef UIntPtr Reg; - - /// @brief Stack frame (as retrieved from assembly.) - 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; - Reg ControlWord; - }; - - typedef StackFrame* StackFramePtr; - - class InterruptDescriptor final - { - public: - UShort Offset; - UShort Selector; - UChar Ist; - UChar Atrributes; - - UShort SecondOffset; - UInt ThirdOffset; - UInt Zero; - - operator bool() - { - return Offset != 0xFFFF; - } - }; - - using InterruptDescriptorArray = Array<InterruptDescriptor, 256>; - - class SegmentDescriptor final - { - public: - UInt16 Base; - UInt8 BaseMiddle; - UInt8 BaseHigh; - - UShort Limit; - UChar Gran; - UChar AccessByte; - }; - - /*** - * @brief Segment Boolean operations - */ - class SegmentDescriptorComparator final - { - public: - Bool IsValid(SegmentDescriptor& seg) - { - return seg.Base > seg.Limit; - } - - Bool Equals(SegmentDescriptor& seg, SegmentDescriptor& segRight) - { - return seg.Base == segRight.Base && seg.Limit == segRight.Limit; - } - }; - - using SegmentArray = Array<SegmentDescriptor, 6>; - - class GDTLoader final - { - public: - static Void Load(RegisterGDT& gdt); - static Void Load(Ref<RegisterGDT>& gdt); - }; - - class IDTLoader final - { - public: - static Void Load(Register64& idt); - static Void Load(Ref<Register64>& idt); - }; - - Void hal_system_get_cores(VoidPtr rsdPtr); - Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress); - Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress); - - /// @brief Do a cpuid to check if MSR exists on CPU. - /// @retval true it does exists. - /// @retval false it doesn't. - inline Bool hal_has_msr() noexcept - { - static UInt32 eax, unused, edx; // eax, edx - - __get_cpuid(1, &eax, &unused, &unused, &edx); - - // edx returns the flag for MSR (which is 1 shifted to 5.) - return edx & (1 << 5); - } - - /// @brief Get Model-specific register. - /// @param msr MSR - /// @param lo low byte - /// @param hi high byte - inline Void hal_get_msr(UInt32 msr, UInt32* lo, UInt32* hi) noexcept - { - if (!lo || !hi) - return; - - asm volatile("rdmsr" - : "=a"(*lo), "=d"(*hi) - : "c"(msr)); - } - - /// @brief Set Model-specific register. - /// @param msr MSR - /// @param lo low byte - /// @param hi high byte - inline Void hal_set_msr(UInt32 msr, UInt32 lo, UInt32 hi) noexcept - { - asm volatile("wrmsr" - : - : "a"(lo), "d"(hi), "c"(msr)); - } - - /// @brief Processor specific namespace. - namespace Detail - { - /** - @brief Global descriptor table entry, either null, code or data. - */ - - struct PACKED NewOSGDTRecord final - { - UInt16 Limit0; - UInt16 Base0; - UInt8 Base1; - UInt8 AccessByte; - UInt8 Limit1_Flags; - UInt8 Base2; - }; - - struct PACKED ALIGN(0x1000) NewOSGDT final - { - NewOSGDTRecord Null; - NewOSGDTRecord KernCode; - NewOSGDTRecord KernData; - NewOSGDTRecord UserNull; - NewOSGDTRecord UserCode; - NewOSGDTRecord UserData; - }; - } // namespace Detail - - class APICController - { - public: - explicit APICController(VoidPtr base) - : fApic(base) - { - } - - ~APICController() = default; - - NEWOS_COPY_DEFAULT(APICController); - - public: - UInt32 Read(UInt32 reg) noexcept; - Void Write(UInt32 reg, UInt32 value) noexcept; - - private: - VoidPtr fApic{nullptr}; - }; -} // namespace Kernel::HAL - -EXTERN_C Kernel::Void idt_handle_generic(Kernel::UIntPtr rsp); -EXTERN_C Kernel::Void idt_handle_gpf(Kernel::UIntPtr rsp); -EXTERN_C Kernel::Void idt_handle_math(Kernel::UIntPtr rsp); -EXTERN_C Kernel::Void idt_handle_pf(Kernel::UIntPtr rsp); - -EXTERN_C Kernel::Void hal_load_idt(Kernel::HAL::Register64 ptr); -EXTERN_C Kernel::Void hal_load_gdt(Kernel::HAL::RegisterGDT ptr); - -/// @brief Maximum size of the IDT. -#define kKernelIdtSize 0x100 -#define kKernelInterruptId 0x32 - -inline Kernel::VoidPtr kKernelVMTStart = (Kernel::VoidPtr)cHeapStartOffset; -inline Kernel::VoidPtr kKernelVirtualStart = nullptr; -inline Kernel::UIntPtr kKernelVirtualSize = 0UL; - -inline Kernel::VoidPtr kKernelPhysicalStart = nullptr; diff --git a/dev/Kernel/HALKit/AMD64/ReadMe.md b/dev/Kernel/HALKit/AMD64/ReadMe.md deleted file mode 100644 index 0be48c77..00000000 --- a/dev/Kernel/HALKit/AMD64/ReadMe.md +++ /dev/null @@ -1,4 +0,0 @@ -AMD64 Hardware Abstraction Layer - -- Supported CPU: AMD64 CPU -- Supported Firmware: EDK 2
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cxx b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cxx deleted file mode 100644 index 0974c240..00000000 --- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cxx +++ /dev/null @@ -1,67 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/** - * @file AHCI.cxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief AHCI driver. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) ZKA Technologies - * - */ - -#include <Modules/AHCI/AHCI.hxx> -#include <KernelKit/PCI/Iterator.hxx> - -#ifdef __AHCI__ -enum -{ - kSATAProgIfAHCI = 0x01, - kSATASubClass = 0x06 -}; - -static Kernel::PCI::Device kAhciDevice; - -/// @brief Initializes an AHCI disk. -/// @param PortsImplemented the amount of port that have been detected. -/// @return -Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented) -{ - using namespace Kernel; - - PCI::Iterator iterator(Types::PciDeviceKind::MassStorageController); - for (SizeT devIndex = 0; devIndex < NEWOS_BUS_COUNT; ++devIndex) - { - if (iterator[devIndex].Leak().Subclass() == kSATASubClass && - iterator[devIndex].Leak().ProgIf() == kSATAProgIfAHCI) - { - iterator[devIndex].Leak().EnableMmio(); /// enable the memory i/o for this ahci device. - kAhciDevice = iterator[devIndex].Leak(); /// and then leak the reference. - - kcout << "newoskrnl: [PCI] Found AHCI controller.\r"; - - return true; - } - } - - return false; -} - -Kernel::Boolean drv_std_detected(Kernel::Void) -{ - return kAhciDevice.DeviceId() != 0xFFFF; -} - -Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size) -{ -} - -Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size) -{ -} -#endif // __AHCI__ diff --git a/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx b/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx deleted file mode 100644 index 49d10a7e..00000000 --- a/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx +++ /dev/null @@ -1,38 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/** - * @file ATA-DMA.cxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief ATA driver (DMA mode). - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) ZKA Technologies - * - */ - -#include <StorageKit/PRDT.hxx> - -#include <Modules/ATA/ATA.hxx> -#include <ArchKit/ArchKit.hxx> - -using namespace Kernel; - -EXTERN_C Int32 kPRDTTransferStatus; -STATIC PRDT kPRDT; - -#ifdef __ATA_DMA__ - -#ifdef __ATA_PIO__ -#error !!! You cant have both PIO and DMA enabled! !!! -#endif /* ifdef __ATA_PIO__ */ - -#ifdef __AHCI__ -#error !!! You cant have both ATA and AHCI enabled! !!! -#endif /* ifdef __AHCI__ */ - -#endif /* ifdef __ATA_DMA__ */ diff --git a/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx b/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx deleted file mode 100644 index c1cdd013..00000000 --- a/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx +++ /dev/null @@ -1,199 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/** - * @file ATA-PIO.cxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief ATA driver (PIO mode). - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) ZKA Technologies - * - */ - -#include <Modules/ATA/ATA.hxx> -#include <ArchKit/ArchKit.hxx> - -#ifdef __ATA_PIO__ - -using namespace Kernel; -using namespace Kernel::HAL; - -/// bugs: 0 - -#define kATADataLen 256 - -static Boolean kATADetected = false; -static Int32 kATADeviceType = kATADeviceCount; -static Char kATAData[kATADataLen] = {0}; - -Boolean drv_std_wait_io(UInt16 IO) -{ - for (int i = 0; i < 4; i++) - In8(IO + ATA_REG_STATUS); - -ATAWaitForIO_Retry: - auto statRdy = In8(IO + ATA_REG_STATUS); - - if ((statRdy & ATA_SR_BSY)) - goto ATAWaitForIO_Retry; - -ATAWaitForIO_Retry2: - statRdy = In8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) - return false; - - if (!(statRdy & ATA_SR_DRDY)) - goto ATAWaitForIO_Retry2; - - return true; -} - -Void drv_std_select(UInt16 Bus) -{ - if (Bus == ATA_PRIMARY_IO) - Out8(Bus + ATA_REG_HDDEVSEL, ATA_PRIMARY_SEL); - else - Out8(Bus + ATA_REG_HDDEVSEL, ATA_SECONDARY_SEL); -} - -Boolean drv_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster) -{ - UInt16 IO = Bus; - - drv_std_select(IO); - - Kernel::kcout << "newoskrnl: Initializing drive...\r"; - -ATAInit_Retry: - // Bus init, NEIN bit. - Out8(IO + ATA_REG_NEIN, 1); - - // identify until it's good - - auto statRdy = In8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) - { - Kernel::kcout << "newoskrnl: Failing drive...\r"; - - return false; - } - - if ((statRdy & ATA_SR_BSY)) - { - kcout << "Retrying..."; - goto ATAInit_Retry; - } - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_IDENTIFY); - - /// fetch serial info - /// model, speed, number of sectors... - - drv_std_wait_io(IO); - - for (SizeT indexData = 0ul; indexData < kATADataLen; ++indexData) - { - kATAData[indexData] = In16(IO + ATA_REG_DATA); - } - - OutBus = (Bus == ATA_PRIMARY_IO) ? ATA_PRIMARY_IO : ATA_SECONDARY_IO; - - OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE; - - Kernel::kcout << "newoskrnl: Create ATA module.\r"; - - return true; -} - -Void drv_std_read(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, SizeT SectorSz, SizeT Size) -{ - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - Lba /= SectorSz; - - drv_std_wait_io(IO); - drv_std_select(IO); - - Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - /// Compute sector count. - Out8(IO + ATA_REG_SEC_COUNT0, SectorSz / (SectorSz / 2)); - - Out8(IO + ATA_REG_LBA0, (Lba)); - Out8(IO + ATA_REG_LBA1, (Lba) >> 8); - Out8(IO + ATA_REG_LBA2, (Lba) >> 16); - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO); - - drv_std_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) - { - drv_std_wait_io(IO); - Buf[IndexOff] = In16(IO + ATA_REG_DATA); - drv_std_wait_io(IO); - } - - drv_std_wait_io(IO); -} - -Void drv_std_write(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, SizeT SectorSz, SizeT Size) -{ - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - Lba /= SectorSz; - - drv_std_wait_io(IO); - drv_std_select(IO); - - /// Compute sector count. - Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - Out8(IO + ATA_REG_SEC_COUNT0, SectorSz / (SectorSz / 2)); - - Out8(IO + ATA_REG_LBA0, (Lba)); - Out8(IO + ATA_REG_LBA1, (Lba) >> 8); - Out8(IO + ATA_REG_LBA2, (Lba) >> 16); - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO); - - drv_std_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) - { - drv_std_wait_io(IO); - Out16(IO + ATA_REG_DATA, Buf[IndexOff]); - drv_std_wait_io(IO); - } - - drv_std_wait_io(IO); -} - -/// @brief is ATA detected? -Boolean drv_std_detected(Void) -{ - return kATADetected; -} - -/*** - @brief Getter, gets the number of sectors inside the drive. -*/ -Kernel::SizeT drv_std_get_sector_count() -{ - return (kATAData[61] << 16) | kATAData[60]; -} - -/// @brief Get the drive size. -Kernel::SizeT drv_std_get_drv_size() -{ - return drv_std_get_sector_count() * kATASectorSize; -} - -#endif /* ifdef __ATA_PIO__ */ 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) diff --git a/dev/Kernel/HALKit/AXP/CR.s b/dev/Kernel/HALKit/AXP/CR.s deleted file mode 100644 index 4d68257d..00000000 --- a/dev/Kernel/HALKit/AXP/CR.s +++ /dev/null @@ -1,11 +0,0 @@ -.globl read_lr1 -.globl read_lr0 - -.section .text - read_lr0: - movq %r30, %cr3 - ret - - hal_read_cr0: - movq %r30, %cr0 - ret
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AXP/CoreInterruptHandlerDEC.cpp b/dev/Kernel/HALKit/AXP/CoreInterruptHandlerDEC.cpp deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/AXP/CoreInterruptHandlerDEC.cpp +++ /dev/null diff --git a/dev/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp b/dev/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp deleted file mode 100644 index 9d20a0f3..00000000 --- a/dev/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <HALKit/AXP/Processor.hxx> - -/// @brief Internal call for syscall, to work with C++. -/// @param stack -/// @return nothing. -EXTERN_C void rt_syscall_handle(Kernel::HAL::StackFrame* stack) -{ - if (stack->Rcx <= (kSyscalls.Count() - 1)) - { - Kernel::kcout << "newoskrnl: syscall: enter.\r"; - - if (kSyscalls[stack->Rcx].Leak().Leak().fHooked) - (kSyscalls[stack->Rcx].Leak().Leak().fProc)(stack); - - Kernel::kcout << "newoskrnl: syscall: exit.\r"; - } -} diff --git a/dev/Kernel/HALKit/AXP/HAL.s b/dev/Kernel/HALKit/AXP/HAL.s deleted file mode 100644 index 0178527f..00000000 --- a/dev/Kernel/HALKit/AXP/HAL.s +++ /dev/null @@ -1,13 +0,0 @@ -.globl rt_wait_400ns - -.section .text -rt_wait_400ns: - jmp .L -.L: - jmp .L2 - wtint ;; wait for interrupt -.L2: - - ret - - diff --git a/dev/Kernel/HALKit/AXP/Processor.hpp b/dev/Kernel/HALKit/AXP/Processor.hpp deleted file mode 100644 index 25a434a0..00000000 --- a/dev/Kernel/HALKit/AXP/Processor.hpp +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AXP/README b/dev/Kernel/HALKit/AXP/README deleted file mode 100644 index 91e7b134..00000000 --- a/dev/Kernel/HALKit/AXP/README +++ /dev/null @@ -1 +0,0 @@ -This is for DEC Alpha. diff --git a/dev/Kernel/HALKit/AXP/README.TXT b/dev/Kernel/HALKit/AXP/README.TXT deleted file mode 100644 index d4ef257d..00000000 --- a/dev/Kernel/HALKit/AXP/README.TXT +++ /dev/null @@ -1 +0,0 @@ -An toy HAL to test the kernel portability. diff --git a/dev/Kernel/HALKit/AXP/SYSCALL.s b/dev/Kernel/HALKit/AXP/SYSCALL.s deleted file mode 100644 index 19cab808..00000000 --- a/dev/Kernel/HALKit/AXP/SYSCALL.s +++ /dev/null @@ -1,10 +0,0 @@ -.section .text -system_handle_user_call: - .cfi_startproc - - push %r0 - jmp %r1 - mov %r30, %r2 - - .cfi_endproc - retsys
\ No newline at end of file diff --git a/dev/Kernel/HALKit/AXP/VM.s b/dev/Kernel/HALKit/AXP/VM.s deleted file mode 100644 index 7024086b..00000000 --- a/dev/Kernel/HALKit/AXP/VM.s +++ /dev/null @@ -1,5 +0,0 @@ -.global hal_flush_tlb - -.section .text -hal_flush_tlb: - swppal
\ No newline at end of file diff --git a/dev/Kernel/HALKit/POWER/.gitkeep b/dev/Kernel/HALKit/POWER/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/POWER/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/POWER/APM/.gitkeep b/dev/Kernel/HALKit/POWER/APM/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/POWER/APM/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s b/dev/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s deleted file mode 100644 index fc47ba49..00000000 --- a/dev/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s +++ /dev/null @@ -1,28 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -.align 4 -.type name, @function -.text -.globl rt_do_context_switch - -/* r3 (3) = assigner stack, r4 (4) = assignee stack */ -rt_do_context_switch: - lwz 0(%4), 0(%3) - lwz 4(%4), 4(%3) - lwz 8(%4), 8(%3) - lwz 12(%4), 12(%3) - lwz 14(%4), 14(%3) - lwz 18(%4), 18(%3) - lwz 22(%4), 22(%3) - lwz 24(%4), 24(%3) - lwz 28(%4), 28(%3) - lwz 32(%4), 32(%3) - lwz 34(%4), 34(%3) - lwz 38(%4), 38(%3) - - /* we are done here, the assignee should start executing code now. */ - blr diff --git a/dev/Kernel/HALKit/POWER/HalHardware.cxx b/dev/Kernel/HALKit/POWER/HalHardware.cxx deleted file mode 100644 index 9fb841c8..00000000 --- a/dev/Kernel/HALKit/POWER/HalHardware.cxx +++ /dev/null @@ -1,19 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> - -namespace Kernel -{ - namespace HAL - { - UIntPtr hal_alloc_page(bool rw, bool user) - { - return 0; - } - } // namespace HAL -} // namespace Kernel diff --git a/dev/Kernel/HALKit/POWER/HalHart.cxx b/dev/Kernel/HALKit/POWER/HalHart.cxx deleted file mode 100644 index 8327b8e0..00000000 --- a/dev/Kernel/HALKit/POWER/HalHart.cxx +++ /dev/null @@ -1,25 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <HALKit/POWER/Hart.hxx> - -using namespace Kernel; - -/// @brief wakes up thread. -/// wakes up thread from hang. -void mp_wakeup_thread(HAL::StackFramePtr stack) -{ - NEWOS_UNUSED(stack); -} - -/// @brief makes thread sleep. -/// hooks and hangs thread to prevent code from executing. -void mp_hang_thread(HAL::StackFramePtr stack) -{ - NEWOS_UNUSED(stack); -} diff --git a/dev/Kernel/HALKit/POWER/HalSerialPort.cxx b/dev/Kernel/HALKit/POWER/HalSerialPort.cxx deleted file mode 100644 index c8d49c0c..00000000 --- a/dev/Kernel/HALKit/POWER/HalSerialPort.cxx +++ /dev/null @@ -1,27 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> - -using namespace Kernel; - -/// @brief Writes to COM1. -/// @param bytes -void ke_io_write(const Char* bytes) -{ - if (!bytes) - return; - - SizeT index = 0; - SizeT len = rt_string_len(bytes, 255); - - while (index < len) - { - // TODO - ++index; - } -} diff --git a/dev/Kernel/HALKit/POWER/HalStartSequence.s b/dev/Kernel/HALKit/POWER/HalStartSequence.s deleted file mode 100644 index 68110f8d..00000000 --- a/dev/Kernel/HALKit/POWER/HalStartSequence.s +++ /dev/null @@ -1,14 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -.globl __ImageStart -.extern hal_init_platform -.align 4 -.text - -__ImageStart: - bl hal_init_platform - blr diff --git a/dev/Kernel/HALKit/POWER/HalThread.cxx b/dev/Kernel/HALKit/POWER/HalThread.cxx deleted file mode 100644 index 3e2f1703..00000000 --- a/dev/Kernel/HALKit/POWER/HalThread.cxx +++ /dev/null @@ -1,8 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> diff --git a/dev/Kernel/HALKit/POWER/HalVirtualMemory.cxx b/dev/Kernel/HALKit/POWER/HalVirtualMemory.cxx deleted file mode 100644 index 589c2cda..00000000 --- a/dev/Kernel/HALKit/POWER/HalVirtualMemory.cxx +++ /dev/null @@ -1,51 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/ppc-cpu.h> -#include <HALKit/POWER/ppc-mmu.h> - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> - -/// @note refer to the SoC documentation. - -using namespace Kernel; - -Void hal_write_tlb(UInt32 mas0, UInt32 mas1, UInt32 mas2, UInt32 mas3, UInt32 mas7) -{ - mtspr(MAS0, mas0); - mtspr(MAS1, mas1); - mtspr(MAS2, mas2); - mtspr(MAS3, mas3); - mtspr(MAS7, mas7); - - hal_flush_tlb(); -} - -Bool hal_set_tlb(UInt8 tlb, UInt32 epn, UInt64 rpn, UInt8 perms, UInt8 wimge, UInt8 ts, UInt8 esel, UInt8 tsize, UInt8 iprot) -{ - if ((mfspr(SPRN_MMUCFG) & MMUCFG_MAVN) == MMUCFG_MAVN_V1 && (tsize & 1)) - { - // this mmu-version does not allow odd tsize values - return false; - } - - UInt32 mas0 = FSL_BOOKE_MAS0(tlb, esel, 0); - UInt32 mas1 = FSL_BOOKE_MAS1(1, iprot, 0, ts, tsize); - UInt32 mas2 = FSL_BOOKE_MAS2(epn, wimge); - UInt32 mas3 = FSL_BOOKE_MAS3(rpn, 0, perms); - UInt32 mas7 = FSL_BOOKE_MAS7(rpn); - - hal_write_tlb(mas0, mas1, mas2, mas3, mas7); - - return true; -} - -/// @brief Flush TLB -EXTERN_C void hal_flush_tlb() -{ - asm volatile("isync;tlbwe;msync;isync"); -} diff --git a/dev/Kernel/HALKit/POWER/Hart.hxx b/dev/Kernel/HALKit/POWER/Hart.hxx deleted file mode 100644 index 02020320..00000000 --- a/dev/Kernel/HALKit/POWER/Hart.hxx +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Hart.hxx - Purpose: POWER hardware threads. - - Revision History: - - 14/04/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -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 fPageFlags; - 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/Kernel/HALKit/POWER/MBCI/.gitkeep b/dev/Kernel/HALKit/POWER/MBCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/POWER/MBCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx b/dev/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx deleted file mode 100644 index 3e2f1703..00000000 --- a/dev/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx +++ /dev/null @@ -1,8 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <HALKit/POWER/Processor.hxx> -#include <KernelKit/DebugOutput.hxx> diff --git a/dev/Kernel/HALKit/POWER/Processor.hxx b/dev/Kernel/HALKit/POWER/Processor.hxx deleted file mode 100644 index 4b03af4b..00000000 --- a/dev/Kernel/HALKit/POWER/Processor.hxx +++ /dev/null @@ -1,56 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - Purpose: POWER processor header. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/Utils.hxx> - -#define NoOp() asm volatile("mr 0, 0") -#define kHalPPCAlignment __attribute__((aligned(4))) - -namespace Kernel::HAL -{ - typedef UIntPtr Reg; - - /// @brief Stack frame (as retrieved from assembly.) - 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; - - inline void rt_halt() - { - while (true) - { - NoOp(); // no oop. - } - } - - inline void rt_cli() - { - NoOp(); // no oop - } -} // namespace Kernel::HAL - -EXTERN_C Kernel::Void int_handle_math(Kernel::UIntPtr sp); -EXTERN_C Kernel::Void int_handle_pf(Kernel::UIntPtr sp); - -/// @brief Set TLB. -Kernel::Bool hal_set_tlb(Kernel::UInt8 tlb, Kernel::UInt32 epn, Kernel::UInt64 rpn, Kernel::UInt8 perms, Kernel::UInt8 wimge, Kernel::UInt8 ts, Kernel::UInt8 esel, Kernel::UInt8 tsize, Kernel::UInt8 iprot); - -/// @brief Write TLB. -Kernel::Void hal_write_tlb(Kernel::UInt32 mas0, Kernel::UInt32 mas1, Kernel::UInt32 mas2, Kernel::UInt32 mas3, Kernel::UInt32 mas7); - -/// @brief Flush TLB. -EXTERN_C Kernel::Void hal_flush_tlb(); diff --git a/dev/Kernel/HALKit/POWER/ReadMe.md b/dev/Kernel/HALKit/POWER/ReadMe.md deleted file mode 100644 index a9751581..00000000 --- a/dev/Kernel/HALKit/POWER/ReadMe.md +++ /dev/null @@ -1,4 +0,0 @@ -POWER Hardware Abstraction Layer - -- Supported CPU: POWER -- Supported Firmware: CoreBoot
\ No newline at end of file diff --git a/dev/Kernel/HALKit/POWER/ppc-cpu.h b/dev/Kernel/HALKit/POWER/ppc-cpu.h deleted file mode 100644 index 46979e5f..00000000 --- a/dev/Kernel/HALKit/POWER/ppc-cpu.h +++ /dev/null @@ -1,1424 +0,0 @@ -#ifndef __ASM_PPC_PROCESSOR_H -#define __ASM_PPC_PROCESSOR_H - -/// ! @note The Zeta cpu is based on the e500 with 64-bit extensions, much like the 970. - -/* - * Default implementation of macro that returns current - * instruction pointer ("program counter"). - */ -#define current_text_addr() ({ __label__ _l; _l: &&_l; }) - -#define AAA_HACK_DISABLE -#ifdef AAA_HACK_DISABLE -/* warning this is just to make the compiler shut up.. It does not - match the definition in ptrace.h. So dont use this code. */ -struct pt_regs -{ - unsigned long nip; -}; - -#else -#include <asm/ptrace.h> -#include <asm/types.h> -#endif - -/* Machine State Register (MSR) Fields */ - -#ifdef CONFIG_PPC64BRIDGE -#define MSR_SF (1 << 63) -#define MSR_ISF (1 << 61) -#endif /* CONFIG_PPC64BRIDGE */ -#define MSR_UCLE (1 << 26) /* User-mode cache lock enable (e500) */ -#define MSR_VEC (1 << 25) /* Enable AltiVec(74xx) */ -#define MSR_SPE (1 << 25) /* Enable SPE(e500) */ -#define MSR_POW (1 << 18) /* Enable Power Management */ -#define MSR_WE (1 << 18) /* Wait State Enable */ -#define MSR_TGPR (1 << 17) /* TLB Update registers in use */ -#define MSR_CE (1 << 17) /* Critical Interrupt Enable */ -#define MSR_ILE (1 << 16) /* Interrupt Little Endian */ -#define MSR_EE (1 << 15) /* External Interrupt Enable */ -#define MSR_PR (1 << 14) /* Problem State / Privilege Level */ -#define MSR_FP (1 << 13) /* Floating Point enable */ -#define MSR_ME (1 << 12) /* Machine Check Enable */ -#define MSR_FE0 (1 << 11) /* Floating Exception mode 0 */ -#define MSR_SE (1 << 10) /* Single Step */ -#define MSR_DWE (1 << 10) /* Debug Wait Enable (4xx) */ -#define MSR_UBLE (1 << 10) /* BTB lock enable (e500) */ -#define MSR_BE (1 << 9) /* Branch Trace */ -#define MSR_DE (1 << 9) /* Debug Exception Enable */ -#define MSR_FE1 (1 << 8) /* Floating Exception mode 1 */ -#define MSR_IP (1 << 6) /* Exception prefix 0x000/0xFFF */ -#define MSR_IR (1 << 5) /* Instruction Relocate */ -#define MSR_IS (1 << 5) /* Book E Instruction space */ -#define MSR_DR (1 << 4) /* Data Relocate */ -#define MSR_DS (1 << 4) /* Book E Data space */ -#define MSR_PE (1 << 3) /* Protection Enable */ -#define MSR_PX (1 << 2) /* Protection Exclusive Mode */ -#define MSR_PMM (1 << 2) /* Performance monitor mark bit (e500) */ -#define MSR_RI (1 << 1) /* Recoverable Exception */ -#define MSR_LE (1 << 0) /* Little Endian */ - -#ifdef CONFIG_APUS_FAST_EXCEPT -#define MSR_ MSR_ME | MSR_IP | MSR_RI -#else -#define MSR_ MSR_ME | MSR_RI -#endif -#ifndef CONFIG_E500 -#define MSR_KERNEL MSR_ | MSR_IR | MSR_DR -#else -#define MSR_KERNEL MSR_ME -#endif - -/* Floating Point Status and Control Register (FPSCR) Fields */ - -#define FPSCR_FX 0x80000000 /* FPU exception summary */ -#define FPSCR_FEX 0x40000000 /* FPU enabled exception summary */ -#define FPSCR_VX 0x20000000 /* Invalid operation summary */ -#define FPSCR_OX 0x10000000 /* Overflow exception summary */ -#define FPSCR_UX 0x08000000 /* Underflow exception summary */ -#define FPSCR_ZX 0x04000000 /* Zero-devide exception summary */ -#define FPSCR_XX 0x02000000 /* Inexact exception summary */ -#define FPSCR_VXSNAN 0x01000000 /* Invalid op for SNaN */ -#define FPSCR_VXISI 0x00800000 /* Invalid op for Inv - Inv */ -#define FPSCR_VXIDI 0x00400000 /* Invalid op for Inv / Inv */ -#define FPSCR_VXZDZ 0x00200000 /* Invalid op for Zero / Zero */ -#define FPSCR_VXIMZ 0x00100000 /* Invalid op for Inv * Zero */ -#define FPSCR_VXVC 0x00080000 /* Invalid op for Compare */ -#define FPSCR_FR 0x00040000 /* Fraction rounded */ -#define FPSCR_FI 0x00020000 /* Fraction inexact */ -#define FPSCR_FPRF 0x0001f000 /* FPU Result Flags */ -#define FPSCR_FPCC 0x0000f000 /* FPU Condition Codes */ -#define FPSCR_VXSOFT 0x00000400 /* Invalid op for software request */ -#define FPSCR_VXSQRT 0x00000200 /* Invalid op for square root */ -#define FPSCR_VXCVI 0x00000100 /* Invalid op for integer convert */ -#define FPSCR_VE 0x00000080 /* Invalid op exception enable */ -#define FPSCR_OE 0x00000040 /* IEEE overflow exception enable */ -#define FPSCR_UE 0x00000020 /* IEEE underflow exception enable */ -#define FPSCR_ZE 0x00000010 /* IEEE zero divide exception enable */ -#define FPSCR_XE 0x00000008 /* FP inexact exception enable */ -#define FPSCR_NI 0x00000004 /* FPU non IEEE-Mode */ -#define FPSCR_RN 0x00000003 /* FPU rounding control */ - -/* Special Purpose Registers (SPRNs)*/ - -/* PPC440 Architecture is BOOK-E */ -#ifdef CONFIG_440 -#define CONFIG_BOOKE -#endif - -#define SPRN_CCR0 0x3B3 /* Core Configuration Register 0 */ -#ifdef CONFIG_BOOKE -#define SPRN_CCR1 0x378 /* Core Configuration Register for 440 only */ -#endif -#define SPRN_CDBCR 0x3D7 /* Cache Debug Control Register */ -#define SPRN_CTR 0x009 /* Count Register */ -#define SPRN_DABR 0x3F5 /* Data Address Breakpoint Register */ -#ifndef CONFIG_BOOKE -#define SPRN_DAC1 0x3F6 /* Data Address Compare 1 */ -#define SPRN_DAC2 0x3F7 /* Data Address Compare 2 */ -#else -#define SPRN_DAC1 0x13C /* Book E Data Address Compare 1 */ -#define SPRN_DAC2 0x13D /* Book E Data Address Compare 2 */ -#endif /* CONFIG_BOOKE */ -#define SPRN_DAR 0x013 /* Data Address Register */ -#define SPRN_DBAT0L 0x219 /* Data BAT 0 Lower Register */ -#define SPRN_DBAT0U 0x218 /* Data BAT 0 Upper Register */ -#define SPRN_DBAT1L 0x21B /* Data BAT 1 Lower Register */ -#define SPRN_DBAT1U 0x21A /* Data BAT 1 Upper Register */ -#define SPRN_DBAT2L 0x21D /* Data BAT 2 Lower Register */ -#define SPRN_DBAT2U 0x21C /* Data BAT 2 Upper Register */ -#define SPRN_DBAT3L 0x21F /* Data BAT 3 Lower Register */ -#define SPRN_DBAT3U 0x21E /* Data BAT 3 Upper Register */ -#define SPRN_DBAT4L 0x239 /* Data BAT 4 Lower Register */ -#define SPRN_DBAT4U 0x238 /* Data BAT 4 Upper Register */ -#define SPRN_DBAT5L 0x23B /* Data BAT 5 Lower Register */ -#define SPRN_DBAT5U 0x23A /* Data BAT 5 Upper Register */ -#define SPRN_DBAT6L 0x23D /* Data BAT 6 Lower Register */ -#define SPRN_DBAT6U 0x23C /* Data BAT 6 Upper Register */ -#define SPRN_DBAT7L 0x23F /* Data BAT 7 Lower Register */ -#define SPRN_DBAT7U 0x23E /* Data BAT 7 Lower Register */ -#define SPRN_DBCR 0x3F2 /* Debug Control Regsiter */ -#define DBCR_EDM 0x80000000 -#define DBCR_IDM 0x40000000 -#define DBCR_RST(x) (((x) & 0x3) << 28) -#define DBCR_RST_NONE 0 -#define DBCR_RST_CORE 1 -#define DBCR_RST_CHIP 2 -#define DBCR_RST_SYSTEM 3 -#define DBCR_IC 0x08000000 /* Instruction Completion Debug Evnt */ -#define DBCR_BT 0x04000000 /* Branch Taken Debug Event */ -#define DBCR_EDE 0x02000000 /* Exception Debug Event */ -#define DBCR_TDE 0x01000000 /* TRAP Debug Event */ -#define DBCR_FER 0x00F80000 /* First Events Remaining Mask */ -#define DBCR_FT 0x00040000 /* Freeze Timers on Debug Event */ -#define DBCR_IA1 0x00020000 /* Instr. Addr. Compare 1 Enable */ -#define DBCR_IA2 0x00010000 /* Instr. Addr. Compare 2 Enable */ -#define DBCR_D1R 0x00008000 /* Data Addr. Compare 1 Read Enable */ -#define DBCR_D1W 0x00004000 /* Data Addr. Compare 1 Write Enable */ -#define DBCR_D1S(x) (((x) & 0x3) << 12) /* Data Adrr. Compare 1 Size */ -#define DAC_BYTE 0 -#define DAC_HALF 1 -#define DAC_WORD 2 -#define DAC_QUAD 3 -#define DBCR_D2R 0x00000800 /* Data Addr. Compare 2 Read Enable */ -#define DBCR_D2W 0x00000400 /* Data Addr. Compare 2 Write Enable */ -#define DBCR_D2S(x) (((x) & 0x3) << 8) /* Data Addr. Compare 2 Size */ -#define DBCR_SBT 0x00000040 /* Second Branch Taken Debug Event */ -#define DBCR_SED 0x00000020 /* Second Exception Debug Event */ -#define DBCR_STD 0x00000010 /* Second Trap Debug Event */ -#define DBCR_SIA 0x00000008 /* Second IAC Enable */ -#define DBCR_SDA 0x00000004 /* Second DAC Enable */ -#define DBCR_JOI 0x00000002 /* JTAG Serial Outbound Int. Enable */ -#define DBCR_JII 0x00000001 /* JTAG Serial Inbound Int. Enable */ -#ifndef CONFIG_BOOKE -#define SPRN_DBCR0 0x3F2 /* Debug Control Register 0 */ -#else -#define SPRN_DBCR0 0x134 /* Book E Debug Control Register 0 */ -#endif /* CONFIG_BOOKE */ -#ifndef CONFIG_BOOKE -#define SPRN_DBCR1 0x3BD /* Debug Control Register 1 */ -#define SPRN_DBSR 0x3F0 /* Debug Status Register */ -#else -#define SPRN_DBCR1 0x135 /* Book E Debug Control Register 1 */ -#ifdef CONFIG_BOOKE -#define SPRN_DBDR 0x3f3 /* Debug Data Register */ -#endif -#define SPRN_DBSR 0x130 /* Book E Debug Status Register */ -#define DBSR_IC 0x08000000 /* Book E Instruction Completion */ -#define DBSR_TIE 0x01000000 /* Book E Trap Instruction Event */ -#endif /* CONFIG_BOOKE */ -#define SPRN_DCCR 0x3FA /* Data Cache Cacheability Register */ -#define DCCR_NOCACHE 0 /* Noncacheable */ -#define DCCR_CACHE 1 /* Cacheable */ -#ifndef CONFIG_BOOKE -#define SPRN_DCDBTRL 0x39c /* Data Cache Debug Tag Register Low */ -#define SPRN_DCDBTRH 0x39d /* Data Cache Debug Tag Register High */ -#endif -#define SPRN_DCMP 0x3D1 /* Data TLB Compare Register */ -#define SPRN_DCWR 0x3BA /* Data Cache Write-thru Register */ -#define DCWR_COPY 0 /* Copy-back */ -#define DCWR_WRITE 1 /* Write-through */ -#ifndef CONFIG_BOOKE -#define SPRN_DEAR 0x3D5 /* Data Error Address Register */ -#else -#define SPRN_DEAR 0x03D /* Book E Data Error Address Register */ -#endif /* CONFIG_BOOKE */ -#define SPRN_DEC 0x016 /* Decrement Register */ -#define SPRN_DMISS 0x3D0 /* Data TLB Miss Register */ -#ifdef CONFIG_BOOKE -#define SPRN_DNV0 0x390 /* Data Cache Normal Victim 0 */ -#define SPRN_DNV1 0x391 /* Data Cache Normal Victim 1 */ -#define SPRN_DNV2 0x392 /* Data Cache Normal Victim 2 */ -#define SPRN_DNV3 0x393 /* Data Cache Normal Victim 3 */ -#endif -#define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ -#ifdef CONFIG_BOOKE -#define SPRN_DTV0 0x394 /* Data Cache Transient Victim 0 */ -#define SPRN_DTV1 0x395 /* Data Cache Transient Victim 1 */ -#define SPRN_DTV2 0x396 /* Data Cache Transient Victim 2 */ -#define SPRN_DTV3 0x397 /* Data Cache Transient Victim 3 */ -#define SPRN_DVLIM 0x398 /* Data Cache Victim Limit */ -#endif -#define SPRN_EAR 0x11A /* External Address Register */ -#ifndef CONFIG_BOOKE -#define SPRN_ESR 0x3D4 /* Exception Syndrome Register */ -#else -#define SPRN_ESR 0x03E /* Book E Exception Syndrome Register */ -#endif /* CONFIG_BOOKE */ -#define ESR_IMCP 0x80000000 /* Instr. Machine Check - Protection */ -#define ESR_IMCN 0x40000000 /* Instr. Machine Check - Non-config */ -#define ESR_IMCB 0x20000000 /* Instr. Machine Check - Bus error */ -#define ESR_IMCT 0x10000000 /* Instr. Machine Check - Timeout */ -#define ESR_PIL 0x08000000 /* Program Exception - Illegal */ -#define ESR_PPR 0x04000000 /* Program Exception - Priveleged */ -#define ESR_PTR 0x02000000 /* Program Exception - Trap */ -#define ESR_DST 0x00800000 /* Storage Exception - Data miss */ -#define ESR_DIZ 0x00400000 /* Storage Exception - Zone fault */ -#define SPRN_EVPR 0x3D6 /* Exception Vector Prefix Register */ -#define SPRN_HASH1 0x3D2 /* Primary Hash Address Register */ -#define SPRN_HASH2 0x3D3 /* Secondary Hash Address Resgister */ -#define SPRN_HID0 0x3F0 /* Hardware Implementation Register 0 */ - -#define HID0_ICE_SHIFT 15 -#define HID0_DCE_SHIFT 14 -#define HID0_DLOCK_SHIFT 12 - -#define HID0_EMCP (1 << 31) /* Enable Machine Check pin */ -#define HID0_EBA (1 << 29) /* Enable Bus Address Parity */ -#define HID0_EBD (1 << 28) /* Enable Bus Data Parity */ -#define HID0_SBCLK (1 << 27) -#define HID0_EICE (1 << 26) -#define HID0_ECLK (1 << 25) -#define HID0_PAR (1 << 24) -#define HID0_DOZE (1 << 23) -#define HID0_NAP (1 << 22) -#define HID0_SLEEP (1 << 21) -#define HID0_DPM (1 << 20) -#define HID0_ICE (1 << HID0_ICE_SHIFT) /* Instruction Cache Enable */ -#define HID0_DCE (1 << HID0_DCE_SHIFT) /* Data Cache Enable */ -#define HID0_TBEN (1 << 14) /* Time Base Enable */ -#define HID0_ILOCK (1 << 13) /* Instruction Cache Lock */ -#define HID0_DLOCK (1 << HID0_DLOCK_SHIFT) /* Data Cache Lock */ -#define HID0_ICFI (1 << 11) /* Instr. Cache Flash Invalidate */ -#define HID0_DCFI (1 << 10) /* Data Cache Flash Invalidate */ -#define HID0_DCI HID0_DCFI -#define HID0_SPD (1 << 9) /* Speculative disable */ -#define HID0_ENMAS7 (1 << 7) /* Enable MAS7 Update for 36-bit phys */ -#define HID0_SGE (1 << 7) /* Store Gathering Enable */ -#define HID0_SIED HID_SGE /* Serial Instr. Execution [Disable] */ -#define HID0_DCFA (1 << 6) /* Data Cache Flush Assist */ -#define HID0_BTIC (1 << 5) /* Branch Target Instruction Cache Enable */ -#define HID0_ABE (1 << 3) /* Address Broadcast Enable */ -#define HID0_BHTE (1 << 2) /* Branch History Table Enable */ -#define HID0_BTCD (1 << 1) /* Branch target cache disable */ -#define SPRN_HID1 0x3F1 /* Hardware Implementation Register 1 */ -#define HID1_RFXE (1 << 17) /* Read Fault Exception Enable */ -#define HID1_ASTME (1 << 13) /* Address bus streaming mode */ -#define HID1_ABE (1 << 12) /* Address broadcast enable */ -#define HID1_MBDD (1 << 6) /* optimized sync instruction */ -#define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ -#ifndef CONFIG_BOOKE -#define SPRN_IAC1 0x3F4 /* Instruction Address Compare 1 */ -#define SPRN_IAC2 0x3F5 /* Instruction Address Compare 2 */ -#else -#define SPRN_IAC1 0x138 /* Book E Instruction Address Compare 1 */ -#define SPRN_IAC2 0x139 /* Book E Instruction Address Compare 2 */ -#endif /* CONFIG_BOOKE */ -#define SPRN_IBAT0L 0x211 /* Instruction BAT 0 Lower Register */ -#define SPRN_IBAT0U 0x210 /* Instruction BAT 0 Upper Register */ -#define SPRN_IBAT1L 0x213 /* Instruction BAT 1 Lower Register */ -#define SPRN_IBAT1U 0x212 /* Instruction BAT 1 Upper Register */ -#define SPRN_IBAT2L 0x215 /* Instruction BAT 2 Lower Register */ -#define SPRN_IBAT2U 0x214 /* Instruction BAT 2 Upper Register */ -#define SPRN_IBAT3L 0x217 /* Instruction BAT 3 Lower Register */ -#define SPRN_IBAT3U 0x216 /* Instruction BAT 3 Upper Register */ -#define SPRN_IBAT4L 0x231 /* Instruction BAT 4 Lower Register */ -#define SPRN_IBAT4U 0x230 /* Instruction BAT 4 Upper Register */ -#define SPRN_IBAT5L 0x233 /* Instruction BAT 5 Lower Register */ -#define SPRN_IBAT5U 0x232 /* Instruction BAT 5 Upper Register */ -#define SPRN_IBAT6L 0x235 /* Instruction BAT 6 Lower Register */ -#define SPRN_IBAT6U 0x234 /* Instruction BAT 6 Upper Register */ -#define SPRN_IBAT7L 0x237 /* Instruction BAT 7 Lower Register */ -#define SPRN_IBAT7U 0x236 /* Instruction BAT 7 Upper Register */ -#define SPRN_ICCR 0x3FB /* Instruction Cache Cacheability Register */ -#define ICCR_NOCACHE 0 /* Noncacheable */ -#define ICCR_CACHE 1 /* Cacheable */ -#define SPRN_ICDBDR 0x3D3 /* Instruction Cache Debug Data Register */ -#ifdef CONFIG_BOOKE -#define SPRN_ICDBTRL 0x39e /* instruction cache debug tag register low */ -#define SPRN_ICDBTRH 0x39f /* instruction cache debug tag register high */ -#endif -#define SPRN_ICMP 0x3D5 /* Instruction TLB Compare Register */ -#define SPRN_ICTC 0x3FB /* Instruction Cache Throttling Control Reg */ -#define SPRN_IMISS 0x3D4 /* Instruction TLB Miss Register */ -#define SPRN_IMMR 0x27E /* Internal Memory Map Register */ -#ifdef CONFIG_BOOKE -#define SPRN_INV0 0x370 /* Instruction Cache Normal Victim 0 */ -#define SPRN_INV1 0x371 /* Instruction Cache Normal Victim 1 */ -#define SPRN_INV2 0x372 /* Instruction Cache Normal Victim 2 */ -#define SPRN_INV3 0x373 /* Instruction Cache Normal Victim 3 */ -#define SPRN_ITV0 0x374 /* Instruction Cache Transient Victim 0 */ -#define SPRN_ITV1 0x375 /* Instruction Cache Transient Victim 1 */ -#define SPRN_ITV2 0x376 /* Instruction Cache Transient Victim 2 */ -#define SPRN_ITV3 0x377 /* Instruction Cache Transient Victim 3 */ -#define SPRN_IVLIM 0x399 /* Instruction Cache Victim Limit */ -#endif -#define SPRN_LDSTCR 0x3F8 /* Load/Store Control Register */ -#define SPRN_L2CR 0x3F9 /* Level 2 Cache Control Regsiter */ -#define SPRN_LR 0x008 /* Link Register */ -#define SPRN_MBAR 0x137 /* System memory base address */ -#define SPRN_MMCR0 0x3B8 /* Monitor Mode Control Register 0 */ -#define SPRN_MMCR1 0x3BC /* Monitor Mode Control Register 1 */ -#ifdef CONFIG_BOOKE -#define SPRN_MMUCR 0x3b2 /* MMU Control Register */ -#endif -#define SPRN_PBL1 0x3FC /* Protection Bound Lower 1 */ -#define SPRN_PBL2 0x3FE /* Protection Bound Lower 2 */ -#define SPRN_PBU1 0x3FD /* Protection Bound Upper 1 */ -#define SPRN_PBU2 0x3FF /* Protection Bound Upper 2 */ -#ifndef CONFIG_BOOKE -#define SPRN_PID 0x3B1 /* Process ID */ -#define SPRN_PIR 0x3FF /* Processor Identification Register */ -#else -#define SPRN_PID 0x030 /* Book E Process ID */ -#define SPRN_PIR 0x11E /* Book E Processor Identification Register */ -#endif /* CONFIG_BOOKE */ -#define SPRN_PIT 0x3DB /* Programmable Interval Timer */ -#define SPRN_PMC1 0x3B9 /* Performance Counter Register 1 */ -#define SPRN_PMC2 0x3BA /* Performance Counter Register 2 */ -#define SPRN_PMC3 0x3BD /* Performance Counter Register 3 */ -#define SPRN_PMC4 0x3BE /* Performance Counter Register 4 */ -#define SPRN_PVR 0x11F /* Processor Version Register */ -#define SPRN_RPA 0x3D6 /* Required Physical Address Register */ -#ifdef CONFIG_BOOKE -#define SPRN_RSTCFG 0x39b /* Reset Configuration */ -#endif -#define SPRN_SDA 0x3BF /* Sampled Data Address Register */ -#define SPRN_SDR1 0x019 /* MMU Hash Base Register */ -#define SPRN_SGR 0x3B9 /* Storage Guarded Register */ -#define SGR_NORMAL 0 -#define SGR_GUARDED 1 -#define SPRN_SIA 0x3BB /* Sampled Instruction Address Register */ -#define SPRN_SPRG0 0x110 /* Special Purpose Register General 0 */ -#define SPRN_SPRG1 0x111 /* Special Purpose Register General 1 */ -#define SPRN_SPRG2 0x112 /* Special Purpose Register General 2 */ -#define SPRN_SPRG3 0x113 /* Special Purpose Register General 3 */ -#define SPRN_SPRG4 0x114 /* Special Purpose Register General 4 */ -#define SPRN_SPRG5 0x115 /* Special Purpose Register General 5 */ -#define SPRN_SPRG6 0x116 /* Special Purpose Register General 6 */ -#define SPRN_SPRG7 0x117 /* Special Purpose Register General 7 */ -#define SPRN_SRR0 0x01A /* Save/Restore Register 0 */ -#define SPRN_SRR1 0x01B /* Save/Restore Register 1 */ -#define SPRN_SRR2 0x3DE /* Save/Restore Register 2 */ -#define SPRN_SRR3 0x3DF /* Save/Restore Register 3 */ - -#ifdef CONFIG_BOOKE -#define SPRN_SVR 0x3FF /* System Version Register */ -#else -#define SPRN_SVR 0x11E /* System Version Register */ -#endif -#define SPRN_TBHI 0x3DC /* Time Base High */ -#define SPRN_TBHU 0x3CC /* Time Base High User-mode */ -#define SPRN_TBLO 0x3DD /* Time Base Low */ -#define SPRN_TBLU 0x3CD /* Time Base Low User-mode */ -#define SPRN_TBRL 0x10C /* Time Base Read Lower Register */ -#define SPRN_TBRU 0x10D /* Time Base Read Upper Register */ -#define SPRN_TBWL 0x11C /* Time Base Write Lower Register */ -#define SPRN_TBWU 0x11D /* Time Base Write Upper Register */ -#ifndef CONFIG_BOOKE -#define SPRN_TCR 0x3DA /* Timer Control Register */ -#else -#define SPRN_TCR 0x154 /* Book E Timer Control Register */ -#endif /* CONFIG_BOOKE */ -#ifdef CONFIG_E500MC -#define TCR_WP(x) (((64 - x) & 0x3) << 30) | \ - (((64 - x) & 0x3c) << 15) /* WDT Period 2^x clocks*/ -#else -#define TCR_WP(x) (((x) & 0x3) << 30) /* WDT Period */ -#define WP_2_17 0 /* 2^17 clocks */ -#define WP_2_21 1 /* 2^21 clocks */ -#define WP_2_25 2 /* 2^25 clocks */ -#define WP_2_29 3 /* 2^29 clocks */ -#endif /* CONFIG_E500 */ -#define TCR_WRC(x) (((x) & 0x3) << 28) /* WDT Reset Control */ -#define WRC_NONE 0 /* No reset will occur */ -#define WRC_CORE 1 /* Core reset will occur */ -#define WRC_CHIP 2 /* Chip reset will occur */ -#define WRC_SYSTEM 3 /* System reset will occur */ -#define TCR_WIE 0x08000000 /* WDT Interrupt Enable */ -#define TCR_PIE 0x04000000 /* PIT Interrupt Enable */ -#define TCR_FP(x) (((x) & 0x3) << 24) /* FIT Period */ -#define FP_2_9 0 /* 2^9 clocks */ -#define FP_2_13 1 /* 2^13 clocks */ -#define FP_2_17 2 /* 2^17 clocks */ -#define FP_2_21 3 /* 2^21 clocks */ -#define TCR_FIE 0x00800000 /* FIT Interrupt Enable */ -#define TCR_ARE 0x00400000 /* Auto Reload Enable */ -#define SPRN_THRM1 0x3FC /* Thermal Management Register 1 */ -#define THRM1_TIN (1 << 0) -#define THRM1_TIV (1 << 1) -#define THRM1_THRES (0x7f << 2) -#define THRM1_TID (1 << 29) -#define THRM1_TIE (1 << 30) -#define THRM1_V (1 << 31) -#define SPRN_THRM2 0x3FD /* Thermal Management Register 2 */ -#define SPRN_THRM3 0x3FE /* Thermal Management Register 3 */ -#define THRM3_E (1 << 31) -#define SPRN_TLBMISS 0x3D4 /* 980 7450 TLB Miss Register */ -#ifndef CONFIG_BOOKE -#define SPRN_TSR 0x3D8 /* Timer Status Register */ -#else -#define SPRN_TSR 0x150 /* Book E Timer Status Register */ -#endif /* CONFIG_BOOKE */ -#define TSR_ENW 0x80000000 /* Enable Next Watchdog */ -#define TSR_WIS 0x40000000 /* WDT Interrupt Status */ -#define TSR_WRS(x) (((x) & 0x3) << 28) /* WDT Reset Status */ -#define WRS_NONE 0 /* No WDT reset occurred */ -#define WRS_CORE 1 /* WDT forced core reset */ -#define WRS_CHIP 2 /* WDT forced chip reset */ -#define WRS_SYSTEM 3 /* WDT forced system reset */ -#define TSR_PIS 0x08000000 /* PIT Interrupt Status */ -#define TSR_FIS 0x04000000 /* FIT Interrupt Status */ -#define SPRN_UMMCR0 0x3A8 /* User Monitor Mode Control Register 0 */ -#define SPRN_UMMCR1 0x3AC /* User Monitor Mode Control Register 0 */ -#define SPRN_UPMC1 0x3A9 /* User Performance Counter Register 1 */ -#define SPRN_UPMC2 0x3AA /* User Performance Counter Register 2 */ -#define SPRN_UPMC3 0x3AD /* User Performance Counter Register 3 */ -#define SPRN_UPMC4 0x3AE /* User Performance Counter Register 4 */ -#define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */ -#define SPRN_XER 0x001 /* Fixed Point Exception Register */ -#define SPRN_ZPR 0x3B0 /* Zone Protection Register */ - -/* Book E definitions */ -#define SPRN_DECAR 0x036 /* Decrementer Auto Reload Register */ -#define SPRN_CSRR0 0x03A /* Critical SRR0 */ -#define SPRN_CSRR1 0x03B /* Critical SRR0 */ -#define SPRN_IVPR 0x03F /* Interrupt Vector Prefix Register */ -#define SPRN_USPRG0 0x100 /* User Special Purpose Register General 0 */ -#define SPRN_SPRG4R 0x104 /* Special Purpose Register General 4 Read */ -#define SPRN_SPRG5R 0x105 /* Special Purpose Register General 5 Read */ -#define SPRN_SPRG6R 0x106 /* Special Purpose Register General 6 Read */ -#define SPRN_SPRG7R 0x107 /* Special Purpose Register General 7 Read */ -#define SPRN_SPRG4W 0x114 /* Special Purpose Register General 4 Write */ -#define SPRN_SPRG5W 0x115 /* Special Purpose Register General 5 Write */ -#define SPRN_SPRG6W 0x116 /* Special Purpose Register General 6 Write */ -#define SPRN_SPRG7W 0x117 /* Special Purpose Register General 7 Write */ -#define SPRN_DBCR2 0x136 /* Debug Control Register 2 */ -#define SPRN_IAC3 0x13A /* Instruction Address Compare 3 */ -#define SPRN_IAC4 0x13B /* Instruction Address Compare 4 */ -#define SPRN_DVC1 0x13E /* Data Value Compare Register 1 */ -#define SPRN_DVC2 0x13F /* Data Value Compare Register 2 */ -#define SPRN_IVOR0 0x190 /* Interrupt Vector Offset Register 0 */ -#define SPRN_IVOR1 0x191 /* Interrupt Vector Offset Register 1 */ -#define SPRN_IVOR2 0x192 /* Interrupt Vector Offset Register 2 */ -#define SPRN_IVOR3 0x193 /* Interrupt Vector Offset Register 3 */ -#define SPRN_IVOR4 0x194 /* Interrupt Vector Offset Register 4 */ -#define SPRN_IVOR5 0x195 /* Interrupt Vector Offset Register 5 */ -#define SPRN_IVOR6 0x196 /* Interrupt Vector Offset Register 6 */ -#define SPRN_IVOR7 0x197 /* Interrupt Vector Offset Register 7 */ -#define SPRN_IVOR8 0x198 /* Interrupt Vector Offset Register 8 */ -#define SPRN_IVOR9 0x199 /* Interrupt Vector Offset Register 9 */ -#define SPRN_IVOR10 0x19a /* Interrupt Vector Offset Register 10 */ -#define SPRN_IVOR11 0x19b /* Interrupt Vector Offset Register 11 */ -#define SPRN_IVOR12 0x19c /* Interrupt Vector Offset Register 12 */ -#define SPRN_IVOR13 0x19d /* Interrupt Vector Offset Register 13 */ -#define SPRN_IVOR14 0x19e /* Interrupt Vector Offset Register 14 */ -#define SPRN_IVOR15 0x19f /* Interrupt Vector Offset Register 15 */ -#define SPRN_IVOR38 0x1b0 /* Interrupt Vector Offset Register 38 */ -#define SPRN_IVOR39 0x1b1 /* Interrupt Vector Offset Register 39 */ -#define SPRN_IVOR40 0x1b2 /* Interrupt Vector Offset Register 40 */ -#define SPRN_IVOR41 0x1b3 /* Interrupt Vector Offset Register 41 */ -#define SPRN_GIVOR2 0x1b8 /* Guest Interrupt Vector Offset Register 2 */ -#define SPRN_GIVOR3 0x1b9 /* Guest Interrupt Vector Offset Register 3 */ -#define SPRN_GIVOR4 0x1ba /* Guest Interrupt Vector Offset Register 4 */ -#define SPRN_GIVOR8 0x1bb /* Guest Interrupt Vector Offset Register 8 */ -#define SPRN_GIVOR13 0x1bc /* Guest Interrupt Vector Offset Register 13 */ -#define SPRN_GIVOR14 0x1bd /* Guest Interrupt Vector Offset Register 14 */ - -/* e500 definitions */ -#define SPRN_L1CFG0 0x203 /* L1 Cache Configuration Register 0 */ -#define SPRN_L1CFG1 0x204 /* L1 Cache Configuration Register 1 */ -#define SPRN_L2CFG0 0x207 /* L2 Cache Configuration Register 0 */ -#define SPRN_L1CSR0 0x3f2 /* L1 Data Cache Control and Status Register 0 */ -#define L1CSR0_CPE 0x00010000 /* Data Cache Parity Enable */ -#define L1CSR0_CUL 0x00000400 /* (D-)Cache Unable to Lock */ -#define L1CSR0_DCLFR 0x00000100 /* D-Cache Lock Flash Reset */ -#define L1CSR0_DCFI 0x00000002 /* Data Cache Flash Invalidate */ -#define L1CSR0_DCE 0x00000001 /* Data Cache Enable */ -#define SPRN_L1CSR1 0x3f3 /* L1 Instruction Cache Control and Status Register 1 */ -#define L1CSR1_CPE 0x00010000 /* Instruction Cache Parity Enable */ -#define L1CSR1_ICUL 0x00000400 /* I-Cache Unable to Lock */ -#define L1CSR1_ICLFR 0x00000100 /* I-Cache Lock Flash Reset */ -#define L1CSR1_ICFI 0x00000002 /* Instruction Cache Flash Invalidate */ -#define L1CSR1_ICE 0x00000001 /* Instruction Cache Enable */ -#define SPRN_L1CSR2 0x25e /* L1 Data Cache Control and Status Register 2 */ -#define L1CSR2_DCWS 0x40000000 /* Data Cache Write Shadow */ -#define SPRN_L2CSR0 0x3f9 /* L2 Data Cache Control and Status Register 0 */ -#define L2CSR0_L2E 0x80000000 /* L2 Cache Enable */ -#define L2CSR0_L2PE 0x40000000 /* L2 Cache Parity/ECC Enable */ -#define L2CSR0_L2WP 0x1c000000 /* L2 I/D Way Partioning */ -#define L2CSR0_L2CM 0x03000000 /* L2 Cache Coherency Mode */ -#define L2CSR0_L2FI 0x00200000 /* L2 Cache Flash Invalidate */ -#define L2CSR0_L2IO 0x00100000 /* L2 Cache Instruction Only */ -#define L2CSR0_L2DO 0x00010000 /* L2 Cache Data Only */ -#define L2CSR0_L2REP 0x00003000 /* L2 Line Replacement Algo */ - -/* e6500 */ -#define L2CSR0_L2REP_SPLRUAGE 0x00000000 /* L2REP Streaming PLRU with Aging */ -#define L2CSR0_L2REP_FIFO 0x00001000 /* L2REP FIFO */ -#define L2CSR0_L2REP_SPLRU 0x00002000 /* L2REP Streaming PLRU */ -#define L2CSR0_L2REP_PLRU 0x00003000 /* L2REP PLRU */ - -#define L2CSR0_L2REP_MODE L2CSR0_L2REP_SPLRUAGE - -#define L2CSR0_L2FL 0x00000800 /* L2 Cache Flush */ -#define L2CSR0_L2LFC 0x00000400 /* L2 Cache Lock Flash Clear */ -#define L2CSR0_L2LOA 0x00000080 /* L2 Cache Lock Overflow Allocate */ -#define L2CSR0_L2LO 0x00000020 /* L2 Cache Lock Overflow */ -#define SPRN_L2CSR1 0x3fa /* L2 Data Cache Control and Status Register 1 */ - -#define SPRN_TLB0CFG 0x2B0 /* TLB 0 Config Register */ -#define SPRN_TLB1CFG 0x2B1 /* TLB 1 Config Register */ -#define TLBnCFG_NENTRY_MASK 0x00000fff -#define SPRN_TLB0PS 0x158 /* TLB 0 Page Size Register */ -#define SPRN_TLB1PS 0x159 /* TLB 1 Page Size Register */ -#define SPRN_MMUCSR0 0x3f4 /* MMU control and status register 0 */ -#define SPRN_MMUCFG 0x3F7 /* MMU Configuration Register */ -#define MMUCFG_MAVN 0x00000003 /* MMU Architecture Version Number */ -#define MMUCFG_MAVN_V1 0x00000000 /* v1.0 */ -#define MMUCFG_MAVN_V2 0x00000001 /* v2.0 */ -#define SPRN_MAS0 0x270 /* MMU Assist Register 0 */ -#define SPRN_MAS1 0x271 /* MMU Assist Register 1 */ -#define SPRN_MAS2 0x272 /* MMU Assist Register 2 */ -#define SPRN_MAS3 0x273 /* MMU Assist Register 3 */ -#define SPRN_MAS4 0x274 /* MMU Assist Register 4 */ -#define SPRN_MAS5 0x275 /* MMU Assist Register 5 */ -#define SPRN_MAS6 0x276 /* MMU Assist Register 6 */ -#define SPRN_MAS7 0x3B0 /* MMU Assist Register 7 */ -#define SPRN_MAS8 0x155 /* MMU Assist Register 8 */ - -#define SPRN_IVOR32 0x210 /* Interrupt Vector Offset Register 32 */ -#define SPRN_IVOR33 0x211 /* Interrupt Vector Offset Register 33 */ -#define SPRN_IVOR34 0x212 /* Interrupt Vector Offset Register 34 */ -#define SPRN_IVOR35 0x213 /* Interrupt Vector Offset Register 35 */ -#define SPRN_IVOR36 0x214 /* Interrupt Vector Offset Register 36 */ -#define SPRN_IVOR37 0x215 /* Interrupt Vector Offset Register 37 */ -#define SPRN_SPEFSCR 0x200 /* SPE & Embedded FP Status & Control */ - -#define SPRN_MCSRR0 0x23a /* Machine Check Save and Restore Register 0 */ -#define SPRN_MCSRR1 0x23b /* Machine Check Save and Restore Register 1 */ -#define SPRN_BUCSR 0x3f5 /* Branch Control and Status Register */ -#define BUCSR_STAC_EN 0x01000000 /* Segment target addr cache enable */ -#define BUCSR_LS_EN 0x00400000 /* Link stack enable */ -#define BUCSR_BBFI 0x00000200 /* Branch buffer flash invalidate */ -#define BUCSR_BPEN 0x00000001 /* Branch prediction enable */ -#define BUCSR_ENABLE (BUCSR_STAC_EN | BUCSR_LS_EN | BUCSR_BBFI | BUCSR_BPEN) -#define SPRN_BBEAR 0x201 /* Branch Buffer Entry Address Register */ -#define SPRN_BBTAR 0x202 /* Branch Buffer Target Address Register */ -#define SPRN_PID1 0x279 /* Process ID Register 1 */ -#define SPRN_PID2 0x27a /* Process ID Register 2 */ -#define SPRN_MCSR 0x23c /* Machine Check Syndrome register */ -#define SPRN_MCAR 0x23d /* Machine Check Address register */ -#define MCSR_MCS 0x80000000 /* Machine Check Summary */ -#define MCSR_IB 0x40000000 /* Instruction PLB Error */ -#if defined(CONFIG_440) -#define MCSR_DRB 0x20000000 /* Data Read PLB Error */ -#define MCSR_DWB 0x10000000 /* Data Write PLB Error */ -#else -#define MCSR_DB 0x20000000 /* Data PLB Error */ -#endif /* defined(CONFIG_440) */ -#define MCSR_TLBP 0x08000000 /* TLB Parity Error */ -#define MCSR_ICP 0x04000000 /* I-Cache Parity Error */ -#define MCSR_DCSP 0x02000000 /* D-Cache Search Parity Error */ -#define MCSR_DCFP 0x01000000 /* D-Cache Flush Parity Error */ -#define MCSR_IMPE 0x00800000 /* Imprecise Machine Check Exception */ -#define ESR_ST 0x00800000 /* Store Operation */ - -#if defined(CONFIG_MPC86xx) -#define SPRN_MSSCR0 0x3f6 -#define SPRN_MSSSR0 0x3f7 -#endif - -#define SPRN_HDBCR0 0x3d0 -#define SPRN_HDBCR1 0x3d1 -#define SPRN_HDBCR2 0x3d2 -#define SPRN_HDBCR3 0x3d3 -#define SPRN_HDBCR4 0x3d4 -#define SPRN_HDBCR5 0x3d5 -#define SPRN_HDBCR6 0x3d6 -#define SPRN_HDBCR7 0x277 -#define SPRN_HDBCR8 0x278 - -/* Short-hand versions for a number of the above SPRNs */ - -#define CTR SPRN_CTR /* Counter Register */ -#define DAR SPRN_DAR /* Data Address Register */ -#define DABR SPRN_DABR /* Data Address Breakpoint Register */ -#define DAC1 SPRN_DAC1 /* Data Address Register 1 */ -#define DAC2 SPRN_DAC2 /* Data Address Register 2 */ -#define DBAT0L SPRN_DBAT0L /* Data BAT 0 Lower Register */ -#define DBAT0U SPRN_DBAT0U /* Data BAT 0 Upper Register */ -#define DBAT1L SPRN_DBAT1L /* Data BAT 1 Lower Register */ -#define DBAT1U SPRN_DBAT1U /* Data BAT 1 Upper Register */ -#define DBAT2L SPRN_DBAT2L /* Data BAT 2 Lower Register */ -#define DBAT2U SPRN_DBAT2U /* Data BAT 2 Upper Register */ -#define DBAT3L SPRN_DBAT3L /* Data BAT 3 Lower Register */ -#define DBAT3U SPRN_DBAT3U /* Data BAT 3 Upper Register */ -#define DBAT4L SPRN_DBAT4L /* Data BAT 4 Lower Register */ -#define DBAT4U SPRN_DBAT4U /* Data BAT 4 Upper Register */ -#define DBAT5L SPRN_DBAT5L /* Data BAT 5 Lower Register */ -#define DBAT5U SPRN_DBAT5U /* Data BAT 5 Upper Register */ -#define DBAT6L SPRN_DBAT6L /* Data BAT 6 Lower Register */ -#define DBAT6U SPRN_DBAT6U /* Data BAT 6 Upper Register */ -#define DBAT7L SPRN_DBAT7L /* Data BAT 7 Lower Register */ -#define DBAT7U SPRN_DBAT7U /* Data BAT 7 Upper Register */ -#define DBCR0 SPRN_DBCR0 /* Debug Control Register 0 */ -#define DBCR1 SPRN_DBCR1 /* Debug Control Register 1 */ -#define DBSR SPRN_DBSR /* Debug Status Register */ -#define DCMP SPRN_DCMP /* Data TLB Compare Register */ -#define DEC SPRN_DEC /* Decrement Register */ -#define DMISS SPRN_DMISS /* Data TLB Miss Register */ -#define DSISR SPRN_DSISR /* Data Storage Interrupt Status Register */ -#define EAR SPRN_EAR /* External Address Register */ -#define ESR SPRN_ESR /* Exception Syndrome Register */ -#define HASH1 SPRN_HASH1 /* Primary Hash Address Register */ -#define HASH2 SPRN_HASH2 /* Secondary Hash Address Register */ -#define HID0 SPRN_HID0 /* Hardware Implementation Register 0 */ -#define HID1 SPRN_HID1 /* Hardware Implementation Register 1 */ -#define IABR SPRN_IABR /* Instruction Address Breakpoint Register */ -#define IAC1 SPRN_IAC1 /* Instruction Address Register 1 */ -#define IAC2 SPRN_IAC2 /* Instruction Address Register 2 */ -#define IBAT0L SPRN_IBAT0L /* Instruction BAT 0 Lower Register */ -#define IBAT0U SPRN_IBAT0U /* Instruction BAT 0 Upper Register */ -#define IBAT1L SPRN_IBAT1L /* Instruction BAT 1 Lower Register */ -#define IBAT1U SPRN_IBAT1U /* Instruction BAT 1 Upper Register */ -#define IBAT2L SPRN_IBAT2L /* Instruction BAT 2 Lower Register */ -#define IBAT2U SPRN_IBAT2U /* Instruction BAT 2 Upper Register */ -#define IBAT3L SPRN_IBAT3L /* Instruction BAT 3 Lower Register */ -#define IBAT3U SPRN_IBAT3U /* Instruction BAT 3 Upper Register */ -#define IBAT4L SPRN_IBAT4L /* Instruction BAT 4 Lower Register */ -#define IBAT4U SPRN_IBAT4U /* Instruction BAT 4 Upper Register */ -#define IBAT5L SPRN_IBAT5L /* Instruction BAT 5 Lower Register */ -#define IBAT5U SPRN_IBAT5U /* Instruction BAT 5 Upper Register */ -#define IBAT6L SPRN_IBAT6L /* Instruction BAT 6 Lower Register */ -#define IBAT6U SPRN_IBAT6U /* Instruction BAT 6 Upper Register */ -#define IBAT7L SPRN_IBAT7L /* Instruction BAT 7 Lower Register */ -#define IBAT7U SPRN_IBAT7U /* Instruction BAT 7 Lower Register */ -#define ICMP SPRN_ICMP /* Instruction TLB Compare Register */ -#define IMISS SPRN_IMISS /* Instruction TLB Miss Register */ -#define IMMR SPRN_IMMR /* PPC 860/821 Internal Memory Map Register */ -#define LDSTCR SPRN_LDSTCR /* Load/Store Control Register */ -#define L2CR SPRN_L2CR /* PPC 750 L2 control register */ -#define LR SPRN_LR -#define MBAR SPRN_MBAR /* System memory base address */ -#if defined(CONFIG_MPC86xx) -#define MSSCR0 SPRN_MSSCR0 -#endif -#if defined(CONFIG_E500) || defined(CONFIG_MPC86xx) -#define PIR SPRN_PIR -#endif -#define SVR SPRN_SVR /* System-On-Chip Version Register */ -#define PVR SPRN_PVR /* Processor Version */ -#define RPA SPRN_RPA /* Required Physical Address Register */ -#define SDR1 SPRN_SDR1 /* MMU hash base register */ -#define SPR0 SPRN_SPRG0 /* Supervisor Kernel Registers */ -#define SPR1 SPRN_SPRG1 -#define SPR2 SPRN_SPRG2 -#define SPR3 SPRN_SPRG3 -#define SPRG0 SPRN_SPRG0 -#define SPRG1 SPRN_SPRG1 -#define SPRG2 SPRN_SPRG2 -#define SPRG3 SPRN_SPRG3 -#define SPRG4 SPRN_SPRG4 -#define SPRG5 SPRN_SPRG5 -#define SPRG6 SPRN_SPRG6 -#define SPRG7 SPRN_SPRG7 -#define SRR0 SPRN_SRR0 /* Save and Restore Register 0 */ -#define SRR1 SPRN_SRR1 /* Save and Restore Register 1 */ -#define SRR2 SPRN_SRR2 /* Save and Restore Register 2 */ -#define SRR3 SPRN_SRR3 /* Save and Restore Register 3 */ -#define SVR SPRN_SVR /* System Version Register */ -#define TBRL SPRN_TBRL /* Time Base Read Lower Register */ -#define TBRU SPRN_TBRU /* Time Base Read Upper Register */ -#define TBWL SPRN_TBWL /* Time Base Write Lower Register */ -#define TBWU SPRN_TBWU /* Time Base Write Upper Register */ -#define TCR SPRN_TCR /* Timer Control Register */ -#define TSR SPRN_TSR /* Timer Status Register */ -#define ICTC 1019 -#define THRM1 SPRN_THRM1 /* Thermal Management Register 1 */ -#define THRM2 SPRN_THRM2 /* Thermal Management Register 2 */ -#define THRM3 SPRN_THRM3 /* Thermal Management Register 3 */ -#define XER SPRN_XER - -#define DECAR SPRN_DECAR -#define CSRR0 SPRN_CSRR0 -#define CSRR1 SPRN_CSRR1 -#define IVPR SPRN_IVPR -#define USPRG0 SPRN_USPRG -#define SPRG4R SPRN_SPRG4R -#define SPRG5R SPRN_SPRG5R -#define SPRG6R SPRN_SPRG6R -#define SPRG7R SPRN_SPRG7R -#define SPRG4W SPRN_SPRG4W -#define SPRG5W SPRN_SPRG5W -#define SPRG6W SPRN_SPRG6W -#define SPRG7W SPRN_SPRG7W -#define DEAR SPRN_DEAR -#define DBCR2 SPRN_DBCR2 -#define IAC3 SPRN_IAC3 -#define IAC4 SPRN_IAC4 -#define DVC1 SPRN_DVC1 -#define DVC2 SPRN_DVC2 -#define IVOR0 SPRN_IVOR0 -#define IVOR1 SPRN_IVOR1 -#define IVOR2 SPRN_IVOR2 -#define IVOR3 SPRN_IVOR3 -#define IVOR4 SPRN_IVOR4 -#define IVOR5 SPRN_IVOR5 -#define IVOR6 SPRN_IVOR6 -#define IVOR7 SPRN_IVOR7 -#define IVOR8 SPRN_IVOR8 -#define IVOR9 SPRN_IVOR9 -#define IVOR10 SPRN_IVOR10 -#define IVOR11 SPRN_IVOR11 -#define IVOR12 SPRN_IVOR12 -#define IVOR13 SPRN_IVOR13 -#define IVOR14 SPRN_IVOR14 -#define IVOR15 SPRN_IVOR15 -#define IVOR32 SPRN_IVOR32 -#define IVOR33 SPRN_IVOR33 -#define IVOR34 SPRN_IVOR34 -#define IVOR35 SPRN_IVOR35 -#define MCSRR0 SPRN_MCSRR0 -#define MCSRR1 SPRN_MCSRR1 -#define L1CSR0 SPRN_L1CSR0 -#define L1CSR1 SPRN_L1CSR1 -#define L1CSR2 SPRN_L1CSR2 -#define L1CFG0 SPRN_L1CFG0 -#define L1CFG1 SPRN_L1CFG1 -#define L2CFG0 SPRN_L2CFG0 -#define L2CSR0 SPRN_L2CSR0 -#define L2CSR1 SPRN_L2CSR1 -#define MCSR SPRN_MCSR -#define MMUCSR0 SPRN_MMUCSR0 -#define BUCSR SPRN_BUCSR -#define PID0 SPRN_PID -#define PID1 SPRN_PID1 -#define PID2 SPRN_PID2 -#define MAS0 SPRN_MAS0 -#define MAS1 SPRN_MAS1 -#define MAS2 SPRN_MAS2 -#define MAS3 SPRN_MAS3 -#define MAS4 SPRN_MAS4 -#define MAS5 SPRN_MAS5 -#define MAS6 SPRN_MAS6 -#define MAS7 SPRN_MAS7 -#define MAS8 SPRN_MAS8 - -#if defined(CONFIG_4xx) || defined(CONFIG_44x) || defined(CONFIG_MPC85xx) -#define DAR_DEAR DEAR -#else -#define DAR_DEAR DAR -#endif - -/* Device Control Registers */ - -#define DCRN_BEAR 0x090 /* Bus Error Address Register */ -#define DCRN_BESR 0x091 /* Bus Error Syndrome Register */ -#define BESR_DSES 0x80000000 /* Data-Side Error Status */ -#define BESR_DMES 0x40000000 /* DMA Error Status */ -#define BESR_RWS 0x20000000 /* Read/Write Status */ -#define BESR_ETMASK 0x1C000000 /* Error Type */ -#define ET_PROT 0 -#define ET_PARITY 1 -#define ET_NCFG 2 -#define ET_BUSERR 4 -#define ET_BUSTO 6 -#define DCRN_DMACC0 0x0C4 /* DMA Chained Count Register 0 */ -#define DCRN_DMACC1 0x0CC /* DMA Chained Count Register 1 */ -#define DCRN_DMACC2 0x0D4 /* DMA Chained Count Register 2 */ -#define DCRN_DMACC3 0x0DC /* DMA Chained Count Register 3 */ -#define DCRN_DMACR0 0x0C0 /* DMA Channel Control Register 0 */ -#define DCRN_DMACR1 0x0C8 /* DMA Channel Control Register 1 */ -#define DCRN_DMACR2 0x0D0 /* DMA Channel Control Register 2 */ -#define DCRN_DMACR3 0x0D8 /* DMA Channel Control Register 3 */ -#define DCRN_DMACT0 0x0C1 /* DMA Count Register 0 */ -#define DCRN_DMACT1 0x0C9 /* DMA Count Register 1 */ -#define DCRN_DMACT2 0x0D1 /* DMA Count Register 2 */ -#define DCRN_DMACT3 0x0D9 /* DMA Count Register 3 */ -#define DCRN_DMADA0 0x0C2 /* DMA Destination Address Register 0 */ -#define DCRN_DMADA1 0x0CA /* DMA Destination Address Register 1 */ -#define DCRN_DMADA2 0x0D2 /* DMA Destination Address Register 2 */ -#define DCRN_DMADA3 0x0DA /* DMA Destination Address Register 3 */ -#define DCRN_DMASA0 0x0C3 /* DMA Source Address Register 0 */ -#define DCRN_DMASA1 0x0CB /* DMA Source Address Register 1 */ -#define DCRN_DMASA2 0x0D3 /* DMA Source Address Register 2 */ -#define DCRN_DMASA3 0x0DB /* DMA Source Address Register 3 */ -#define DCRN_DMASR 0x0E0 /* DMA Status Register */ -#define DCRN_EXIER 0x042 /* External Interrupt Enable Register */ -#define EXIER_CIE 0x80000000 /* Critical Interrupt Enable */ -#define EXIER_SRIE 0x08000000 /* Serial Port Rx Int. Enable */ -#define EXIER_STIE 0x04000000 /* Serial Port Tx Int. Enable */ -#define EXIER_JRIE 0x02000000 /* JTAG Serial Port Rx Int. Enable */ -#define EXIER_JTIE 0x01000000 /* JTAG Serial Port Tx Int. Enable */ -#define EXIER_D0IE 0x00800000 /* DMA Channel 0 Interrupt Enable */ -#define EXIER_D1IE 0x00400000 /* DMA Channel 1 Interrupt Enable */ -#define EXIER_D2IE 0x00200000 /* DMA Channel 2 Interrupt Enable */ -#define EXIER_D3IE 0x00100000 /* DMA Channel 3 Interrupt Enable */ -#define EXIER_E0IE 0x00000010 /* External Interrupt 0 Enable */ -#define EXIER_E1IE 0x00000008 /* External Interrupt 1 Enable */ -#define EXIER_E2IE 0x00000004 /* External Interrupt 2 Enable */ -#define EXIER_E3IE 0x00000002 /* External Interrupt 3 Enable */ -#define EXIER_E4IE 0x00000001 /* External Interrupt 4 Enable */ -#define DCRN_EXISR 0x040 /* External Interrupt Status Register */ -#define DCRN_IOCR 0x0A0 /* Input/Output Configuration Register */ -#define IOCR_E0TE 0x80000000 -#define IOCR_E0LP 0x40000000 -#define IOCR_E1TE 0x20000000 -#define IOCR_E1LP 0x10000000 -#define IOCR_E2TE 0x08000000 -#define IOCR_E2LP 0x04000000 -#define IOCR_E3TE 0x02000000 -#define IOCR_E3LP 0x01000000 -#define IOCR_E4TE 0x00800000 -#define IOCR_E4LP 0x00400000 -#define IOCR_EDT 0x00080000 -#define IOCR_SOR 0x00040000 -#define IOCR_EDO 0x00008000 -#define IOCR_2XC 0x00004000 -#define IOCR_ATC 0x00002000 -#define IOCR_SPD 0x00001000 -#define IOCR_BEM 0x00000800 -#define IOCR_PTD 0x00000400 -#define IOCR_ARE 0x00000080 -#define IOCR_DRC 0x00000020 -#define IOCR_RDM(x) (((x) & 0x3) << 3) -#define IOCR_TCS 0x00000004 -#define IOCR_SCS 0x00000002 -#define IOCR_SPC 0x00000001 - -/* System-On-Chip Version Register */ - -/* System-On-Chip Version Register (SVR) field extraction */ - -#define SVR_VER(svr) (((svr) >> 16) & 0xFFFF) /* Version field */ -#define SVR_REV(svr) (((svr) >> 0) & 0xFF) /* Revision field */ - -#define SVR_CID(svr) (((svr) >> 28) & 0x0F) /* Company or manufacturer ID */ -#define SVR_SOCOP(svr) (((svr) >> 22) & 0x3F) /* SOC integration options */ -#define SVR_SID(svr) (((svr) >> 16) & 0x3F) /* SOC ID */ -#define SVR_PROC(svr) (((svr) >> 12) & 0x0F) /* Process revision field */ -#define SVR_MFG(svr) (((svr) >> 8) & 0x0F) /* Manufacturing revision */ -#define SVR_MJREV(svr) (((svr) >> 4) & 0x0F) /* Major SOC design revision indicator */ -#define SVR_MNREV(svr) (((svr) >> 0) & 0x0F) /* Minor SOC design revision indicator */ - -/* Processor Version Register */ - -/* Processor Version Register (PVR) field extraction */ - -#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */ -#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF) /* Revison field */ - -/* - * AMCC has further subdivided the standard ppc 16-bit version and - * revision subfields of the PVR for the ppc 403s into the following: - */ - -#define PVR_FAM(pvr) (((pvr) >> 20) & 0xFFF) /* Family field */ -#define PVR_MEM(pvr) (((pvr) >> 16) & 0xF) /* Member field */ -#define PVR_CORE(pvr) (((pvr) >> 12) & 0xF) /* Core field */ -#define PVR_CFG(pvr) (((pvr) >> 8) & 0xF) /* Configuration field */ -#define PVR_MAJ(pvr) (((pvr) >> 4) & 0xF) /* Major revision field */ -#define PVR_MIN(pvr) (((pvr) >> 0) & 0xF) /* Minor revision field */ - -/* e600 core PVR fields */ - -#define PVR_E600_VER(pvr) (((pvr) >> 15) & 0xFFFF) /* Version/type */ -#define PVR_E600_TECH(pvr) (((pvr) >> 12) & 0xF) /* Technology */ -#define PVR_E600_MAJ(pvr) (((pvr) >> 8) & 0xF) /* Major revision */ -#define PVR_E600_MIN(pvr) (((pvr) >> 0) & 0xFF) /* Minor revision */ - -/* Processor Version Numbers */ - -#define PVR_403GA 0x00200000 -#define PVR_403GB 0x00200100 -#define PVR_403GC 0x00200200 -#define PVR_403GCX 0x00201400 -#define PVR_405GP 0x40110000 -#define PVR_405GP_RB 0x40110040 -#define PVR_405GP_RC 0x40110082 -#define PVR_405GP_RD 0x401100C4 -#define PVR_405GP_RE 0x40110145 /* same as pc405cr rev c */ -#define PVR_405EP_RA 0x51210950 -#define PVR_405GPR_RB 0x50910951 -#define PVR_405EZ_RA 0x41511460 -#define PVR_405EXR2_RA 0x12911471 /* 405EXr rev A/B without Security */ -#define PVR_405EX1_RA 0x12911477 /* 405EX rev A/B with Security */ -#define PVR_405EXR1_RC 0x1291147B /* 405EXr rev C with Security */ -#define PVR_405EXR2_RC 0x12911479 /* 405EXr rev C without Security */ -#define PVR_405EX1_RC 0x1291147F /* 405EX rev C with Security */ -#define PVR_405EX2_RC 0x1291147D /* 405EX rev C without Security */ -#define PVR_405EXR1_RD 0x12911472 /* 405EXr rev D with Security */ -#define PVR_405EXR2_RD 0x12911470 /* 405EXr rev D without Security */ -#define PVR_405EX1_RD 0x12911475 /* 405EX rev D with Security */ -#define PVR_405EX2_RD 0x12911473 /* 405EX rev D without Security */ -#define PVR_440GP_RB 0x40120440 -#define PVR_440GP_RC 0x40120481 -#define PVR_440EP_RA 0x42221850 -#define PVR_440EP_RB 0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */ -#define PVR_440EP_RC 0x422218D4 /* 440EP rev C and 440GR rev B have same PVR */ -#define PVR_440GR_RA 0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */ -#define PVR_440GR_RB 0x422218D4 /* 440EP rev C and 440GR rev B have same PVR */ -#define PVR_440EPX1_RA 0x216218D0 /* 440EPX rev A with Security / Kasumi */ -#define PVR_440EPX2_RA 0x216218D4 /* 440EPX rev A without Security / Kasumi */ -#define PVR_440GRX1_RA 0x216218D0 /* 440GRX rev A with Security / Kasumi */ -#define PVR_440GRX2_RA 0x216218D4 /* 440GRX rev A without Security / Kasumi */ -#define PVR_440GX_RA 0x51B21850 -#define PVR_440GX_RB 0x51B21851 -#define PVR_440GX_RC 0x51B21892 -#define PVR_440GX_RF 0x51B21894 -#define PVR_405EP_RB 0x51210950 -#define PVR_440SP_6_RAB 0x53221850 /* 440SP rev A&B with RAID 6 support enabled */ -#define PVR_440SP_RAB 0x53321850 /* 440SP rev A&B without RAID 6 support */ -#define PVR_440SP_6_RC 0x53221891 /* 440SP rev C with RAID 6 support enabled */ -#define PVR_440SP_RC 0x53321891 /* 440SP rev C without RAID 6 support */ -#define PVR_440SPe_6_RA 0x53421890 /* 440SPe rev A with RAID 6 support enabled */ -#define PVR_440SPe_RA 0x53521890 /* 440SPe rev A without RAID 6 support */ -#define PVR_440SPe_6_RB 0x53421891 /* 440SPe rev B with RAID 6 support enabled */ -#define PVR_440SPe_RB 0x53521891 /* 440SPe rev B without RAID 6 support */ -#define PVR_460EX_SE_RA 0x130218A2 /* 460EX rev A with Security Engine */ -#define PVR_460EX_RA 0x130218A3 /* 460EX rev A without Security Engine */ -#define PVR_460EX_RB 0x130218A4 /* 460EX rev B with and without Sec Eng*/ -#define PVR_460GT_SE_RA 0x130218A0 /* 460GT rev A with Security Engine */ -#define PVR_460GT_RA 0x130218A1 /* 460GT rev A without Security Engine */ -#define PVR_460GT_RB 0x130218A5 /* 460GT rev B with and without Sec Eng*/ -#define PVR_460SX_RA 0x13541800 /* 460SX rev A */ -#define PVR_460SX_RA_V1 0x13541801 /* 460SX rev A Variant 1 Security disabled */ -#define PVR_460GX_RA 0x13541802 /* 460GX rev A */ -#define PVR_460GX_RA_V1 0x13541803 /* 460GX rev A Variant 1 Security disabled */ -#define PVR_APM821XX_RA 0x12C41C80 /* APM821XX rev A */ -#define PVR_601 0x00010000 -#define PVR_602 0x00050000 -#define PVR_603 0x00030000 -#define PVR_603e 0x00060000 -#define PVR_603ev 0x00070000 -#define PVR_603r 0x00071000 -#define PVR_604 0x00040000 -#define PVR_604e 0x00090000 -#define PVR_604r 0x000A0000 -#define PVR_620 0x00140000 -#define PVR_740 0x00080000 -#define PVR_750 PVR_740 -#define PVR_740P 0x10080000 -#define PVR_750P PVR_740P -#define PVR_7400 0x000C0000 -#define PVR_7410 0x800C0000 -#define PVR_7450 0x80000000 - -#define PVR_85xx 0x80200000 -#define PVR_85xx_REV1 (PVR_85xx | 0x0010) -#define PVR_85xx_REV2 (PVR_85xx | 0x0020) -#define PVR_VER_E500_V1 0x8020 -#define PVR_VER_E500_V2 0x8021 -#define PVR_VER_E500MC 0x8023 -#define PVR_VER_E5500 0x8024 -#define PVR_VER_E6500 0x8040 - -#define PVR_86xx 0x80040000 - -#define PVR_VIRTEX5 0x7ff21912 - -/* - * For the 8xx processors, all of them report the same PVR family for - * the ppc core. The various versions of these processors must be - * differentiated by the version number in the Communication Processor - * Module (CPM). - */ -#define PVR_821 0x00500000 -#define PVR_823 PVR_821 -#define PVR_850 PVR_821 -#define PVR_860 PVR_821 -#define PVR_7400 0x000C0000 -#define PVR_8240 0x00810100 - -/* - * PowerQUICC II family processors report different PVR values depending - * on silicon process (HiP3, HiP4, HiP7, etc.) - */ -#define PVR_8260 PVR_8240 -#define PVR_8260_HIP3 0x00810101 -#define PVR_8260_HIP4 0x80811014 -#define PVR_8260_HIP7 0x80822011 -#define PVR_8260_HIP7R1 0x80822013 -#define PVR_8260_HIP7RA 0x80822014 - -/* - * MPC 52xx - */ -#define PVR_5200 0x80822011 -#define PVR_5200B 0x80822014 - -/* - * 405EX/EXr CHIP_21 Errata - */ -#ifdef CONFIG_SYS_4xx_CHIP_21_405EX_SECURITY -#define CONFIG_SYS_4xx_CHIP_21_ERRATA -#define CONFIG_405EX_CHIP21_PVR_REV_C PVR_405EX1_RC -#define CONFIG_405EX_CHIP21_PVR_REV_D PVR_405EX1_RD -#define CONFIG_405EX_CHIP21_ECID3_REV_D 0x0 -#endif - -#ifdef CONFIG_SYS_4xx_CHIP_21_405EX_NO_SECURITY -#define CONFIG_SYS_4xx_CHIP_21_ERRATA -#define CONFIG_405EX_CHIP21_PVR_REV_C PVR_405EX2_RC -#define CONFIG_405EX_CHIP21_PVR_REV_D PVR_405EX2_RD -#define CONFIG_405EX_CHIP21_ECID3_REV_D 0x1 -#endif - -#ifdef CONFIG_SYS_4xx_CHIP_21_405EXr_SECURITY -#define CONFIG_SYS_4xx_CHIP_21_ERRATA -#define CONFIG_405EX_CHIP21_PVR_REV_C PVR_405EXR1_RC -#define CONFIG_405EX_CHIP21_PVR_REV_D PVR_405EXR1_RD -#define CONFIG_405EX_CHIP21_ECID3_REV_D 0x2 -#endif - -#ifdef CONFIG_SYS_4xx_CHIP_21_405EXr_NO_SECURITY -#define CONFIG_SYS_4xx_CHIP_21_ERRATA -#define CONFIG_405EX_CHIP21_PVR_REV_C PVR_405EXR2_RC -#define CONFIG_405EX_CHIP21_PVR_REV_D PVR_405EXR2_RD -#define CONFIG_405EX_CHIP21_ECID3_REV_D 0x3 -#endif - -/* - * System Version Register - */ - -/* System Version Register (SVR) field extraction */ - -#define SVR_SUBVER(svr) (((svr) >> 8) & 0xFF) /* Process/MFG sub-version */ - -#define SVR_FAM(svr) (((svr) >> 20) & 0xFFF) /* Family field */ -#define SVR_MEM(svr) (((svr) >> 16) & 0xF) /* Member field */ - -#ifdef CONFIG_MPC8536 -#define SVR_MAJ(svr) (((svr) >> 4) & 0x7) /* Major revision field*/ -#else -#define SVR_MAJ(svr) (((svr) >> 4) & 0xF) /* Major revision field*/ -#endif -#define SVR_MIN(svr) (((svr) >> 0) & 0xF) /* Minor revision field*/ - -/* Some parts define SVR[0:23] as the SOC version */ -#define SVR_SOC_VER(svr) (((svr) >> 8) & 0xFFF7FF) /* SOC w/o E bit*/ - -/* whether MPC8xxxE (i.e. has SEC) */ -#if defined(CONFIG_MPC85xx) -#define IS_E_PROCESSOR(svr) (svr & 0x80000) -#else -#if defined(CONFIG_MPC83xx) -#define IS_E_PROCESSOR(spridr) (!(spridr & 0x00010000)) -#endif -#endif - -#define IS_SVR_REV(svr, maj, min) \ - ((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min)) - -/* - * SVR_SOC_VER() Version Values - */ - -#define SVR_8533 0x803400 -#define SVR_8535 0x803701 -#define SVR_8536 0x803700 -#define SVR_8540 0x803000 -#define SVR_8541 0x807200 -#define SVR_8543 0x803200 -#define SVR_8544 0x803401 -#define SVR_8545 0x803102 -#define SVR_8547 0x803101 -#define SVR_8548 0x803100 -#define SVR_8555 0x807100 -#define SVR_8560 0x807000 -#define SVR_8567 0x807501 -#define SVR_8568 0x807500 -#define SVR_8569 0x808000 -#define SVR_8572 0x80E000 -#define SVR_P1010 0x80F100 -#define SVR_P1011 0x80E500 -#define SVR_P1012 0x80E501 -#define SVR_P1013 0x80E700 -#define SVR_P1014 0x80F101 -#define SVR_P1017 0x80F700 -#define SVR_P1020 0x80E400 -#define SVR_P1021 0x80E401 -#define SVR_P1022 0x80E600 -#define SVR_P1023 0x80F600 -#define SVR_P1024 0x80E402 -#define SVR_P1025 0x80E403 -#define SVR_P2010 0x80E300 -#define SVR_P2020 0x80E200 -#define SVR_P2040 0x821000 -#define SVR_P2041 0x821001 -#define SVR_P3041 0x821103 -#define SVR_P4040 0x820100 -#define SVR_P4080 0x820000 -#define SVR_P5010 0x822100 -#define SVR_P5020 0x822000 -#define SVR_P5021 0X820500 -#define SVR_P5040 0x820400 -#define SVR_T4240 0x824000 -#define SVR_T4120 0x824001 -#define SVR_T4160 0x824100 -#define SVR_T4080 0x824102 -#define SVR_C291 0x850000 -#define SVR_C292 0x850020 -#define SVR_C293 0x850030 -#define SVR_B4860 0X868000 -#define SVR_G4860 0x868001 -#define SVR_B4460 0x868003 -#define SVR_B4440 0x868100 -#define SVR_G4440 0x868101 -#define SVR_B4420 0x868102 -#define SVR_B4220 0x868103 -#define SVR_T1040 0x852000 -#define SVR_T1041 0x852001 -#define SVR_T1042 0x852002 -#define SVR_T1020 0x852100 -#define SVR_T1021 0x852101 -#define SVR_T1022 0x852102 -#define SVR_T1024 0x854000 -#define SVR_T1023 0x854100 -#define SVR_T1014 0x854400 -#define SVR_T1013 0x854500 -#define SVR_T2080 0x853000 -#define SVR_T2081 0x853100 - -#define SVR_8610 0x80A000 -#define SVR_8641 0x809000 -#define SVR_8641D 0x809001 - -#define SVR_9130 0x860001 -#define SVR_9131 0x860000 -#define SVR_9132 0x861000 -#define SVR_9232 0x861400 - -#define SVR_Unknown 0xFFFFFF - -#define _GLOBAL(n) \ - .globl n; \ - n: - -/* Macros for setting and retrieving special purpose registers */ - -#define stringify(s) tostring(s) -#define tostring(s) #s - -#define mfdcr(rn) ({unsigned int rval; \ - asm volatile("mfdcr %0," stringify(rn) \ - : "=r" (rval)); rval; }) -#define mtdcr(rn, v) asm volatile("mtdcr " stringify(rn) ",%0" \ - : \ - : "r"(v)) - -#define mfmsr() ({unsigned int rval; \ - asm volatile("mfmsr %0" : "=r" (rval)); rval; }) -#define mtmsr(v) asm volatile("mtmsr %0" \ - : \ - : "r"(v)) - -#define mfspr(rn) ({unsigned int rval; \ - asm volatile("mfspr %0," stringify(rn) \ - : "=r" (rval)); rval; }) -#define mtspr(rn, v) asm volatile("mtspr " stringify(rn) ",%0" \ - : \ - : "r"(v)) - -#define tlbie(v) asm volatile("tlbie %0 \n sync" \ - : \ - : "r"(v)) - -/* Segment Registers */ - -#define SR0 0 -#define SR1 1 -#define SR2 2 -#define SR3 3 -#define SR4 4 -#define SR5 5 -#define SR6 6 -#define SR7 7 -#define SR8 8 -#define SR9 9 -#define SR10 10 -#define SR11 11 -#define SR12 12 -#define SR13 13 -#define SR14 14 -#define SR15 15 - -#ifndef __ASSEMBLY__ - -#include <stdint.h> - -struct cpu_type -{ - char name[15]; - uint32_t soc_ver; - uint32_t num_cores; - uint32_t mask; /* which cpu(s) actually exist */ -#ifdef CONFIG_HETROGENOUS_CLUSTERS - uint32_t dsp_num_cores; - uint32_t dsp_mask; /* which DSP cpu(s) actually exist */ -#endif -}; - -struct cpu_type* identify_cpu(uint32_t ver); -int fixup_cpu(void); - -int fsl_qoriq_core_to_cluster(unsigned int core); -int fsl_qoriq_dsp_core_to_cluster(unsigned int core); - -#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) -#define CPU_TYPE_ENTRY(n, v, nc) \ - { \ - .name = #n, .soc_ver = SVR_##v, .num_cores = (nc), \ - .mask = (1 << (nc)) - 1 \ - } -#define CPU_TYPE_ENTRY_MASK(n, v, nc, m) \ - { \ - .name = #n, .soc_ver = SVR_##v, .num_cores = (nc), .mask = (m) \ - } -#else -#if defined(CONFIG_MPC83xx) -#define CPU_TYPE_ENTRY(x) \ - { \ - #x, SPR_##x \ - } -#endif -#endif - -#ifndef CONFIG_MACH_SPECIFIC -extern int _machine; -extern int have_of; -#endif /* CONFIG_MACH_SPECIFIC */ - -/* what kind of prep workstation we are */ -extern int _prep_type; -/* - * This is used to identify the board type from a given PReP board - * vendor. Board revision is also made available. - */ -extern unsigned char ucSystemType; -extern unsigned char ucBoardRev; -extern unsigned char ucBoardRevMaj, ucBoardRevMin; - -struct task_struct; -void start_thread(struct pt_regs* regs, unsigned long nip, unsigned long sp); -void release_thread(struct task_struct*); - -/* - * Create a new Kernel thread. - */ -extern long kernel_thread(int (*fn)(void*), void* arg, unsigned long flags); - -/* - * Bus types - */ -#define EISA_bus 0 -#define EISA_bus__is_a_macro /* for versions in ksyms.c */ -#define MCA_bus 0 -#define MCA_bus__is_a_macro /* for versions in ksyms.c */ - -/* Lazy FPU handling on uni-processor */ -extern struct task_struct* last_task_used_math; -extern struct task_struct* last_task_used_altivec; - -/* - * this is the minimum allowable io space due to the location - * of the io areas on prep (first one at 0x80000000) but - * as soon as I get around to remapping the io areas with the BATs - * to match the mac we can raise this. -- Cort - */ -#define TASK_SIZE (0x80000000UL) - -/* This decides where the Kernel will search for a free chunk of vm - * space during mmap's. - */ -#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3) - -typedef struct -{ - unsigned long seg; -} mm_segment_t; - -struct thread_struct -{ - unsigned long ksp; /* Kernel stack pointer */ - unsigned long wchan; /* Event task is sleeping on */ - struct pt_regs* regs; /* Pointer to saved register state */ - mm_segment_t fs; /* for get_fs() validation */ - void* pgdir; /* root of page-table tree */ - signed long last_syscall; - double fpr[32]; /* Complete floating point set */ - unsigned long fpscr_pad; /* fpr ... fpscr must be contiguous */ - unsigned long fpscr; /* Floating point status */ -#ifdef CONFIG_ALTIVEC - vector128 vr[32]; /* Complete AltiVec set */ - vector128 vscr; /* AltiVec status */ - unsigned long vrsave; -#endif /* CONFIG_ALTIVEC */ -}; - -#define INIT_SP (sizeof(init_stack) + (unsigned long)&init_stack) - -#define INIT_THREAD \ - { \ - INIT_SP, /* ksp */ \ - 0, /* wchan */ \ - (struct pt_regs*)INIT_SP - 1, /* regs */ \ - KERNEL_DS, /*fs*/ \ - swapper_pg_dir, /* pgdir */ \ - 0, /* last_syscall */ \ - {0}, 0, 0 \ - } - -/* - * Note: the vm_start and vm_end fields here should *not* - * be in Kernel space. (Could vm_end == vm_start perhaps?) - */ -#define INIT_MMAP \ - { \ - &init_mm, 0, 0x1000, NULL, \ - PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, \ - 1, NULL, NULL \ - } - -/* - * Return saved PC of a blocked thread. For now, this is the "user" PC - */ -static inline unsigned long thread_saved_pc(struct thread_struct* t) -{ - return (t->regs) ? t->regs->nip : 0; -} - -#define copy_segments(tsk, mm) \ - do \ - { \ - } while (0) -#define release_segments(mm) \ - do \ - { \ - } while (0) -#define forget_segments() \ - do \ - { \ - } while (0) - -unsigned long get_wchan(struct task_struct* p); - -#define KSTK_EIP(tsk) ((tsk)->thread.regs->nip) -#define KSTK_ESP(tsk) ((tsk)->thread.regs->gpr[1]) - -/* - * NOTE! The task struct and the stack go together - */ -#define THREAD_SIZE (2 * PAGE_SIZE) -#define alloc_task_struct() \ - ((struct task_struct*)__get_free_pages(GFP_KERNEL, 1)) -#define free_task_struct(p) free_pages((unsigned long)(p), 1) -#define get_task_struct(tsk) atomic_inc(&mem_map[MAP_NR(tsk)].count) - -/* in process.c - for early bootup debug -- Cort */ -int ll_printk(const char*, ...); -void ll_puts(const char*); - -#define init_task (init_task_union.task) -#define init_stack (init_task_union.stack) - -/* In misc.c */ -void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); - -#endif /* ndef ASSEMBLY*/ - -#ifdef CONFIG_MACH_SPECIFIC -#if defined(CONFIG_8xx) -#define _machine _MACH_8xx -#define have_of 0 -#elif defined(CONFIG_WALNUT) -#define _machine _MACH_walnut -#define have_of 0 -#elif defined(CONFIG_MPC8260) -#define _machine _MACH_8260 -#define have_of 0 -#else -#error "Machine not defined correctly" -#endif -#endif /* CONFIG_MACH_SPECIFIC */ - -#if defined(CONFIG_MPC85xx) || defined(CONFIG_440) -#define EPAPR_MAGIC (0x45504150) -#else -#define EPAPR_MAGIC (0x65504150) -#endif - -#endif /* __ASM_PPC_PROCESSOR_H */ diff --git a/dev/Kernel/HALKit/POWER/ppc-mmu.h b/dev/Kernel/HALKit/POWER/ppc-mmu.h deleted file mode 100644 index 8e4b3595..00000000 --- a/dev/Kernel/HALKit/POWER/ppc-mmu.h +++ /dev/null @@ -1,811 +0,0 @@ - -#ifndef _PPC_MMU_H_ -#define _PPC_MMU_H_ - -#ifndef __ASSEMBLY__ - -#include <stdint.h> - -/* Hardware Page Table Entry */ -typedef struct _PTE -{ -#ifdef CONFIG_PPC64BRIDGE - unsigned long long vsid : 52; - unsigned long api : 5; - unsigned long : 5; - unsigned long h : 1; - unsigned long v : 1; - unsigned long long rpn : 52; -#else /* CONFIG_PPC64BRIDGE */ - unsigned long v : 1; /* Entry is valid */ - unsigned long vsid : 24; /* Virtual segment identifier */ - unsigned long h : 1; /* Hash algorithm indicator */ - unsigned long api : 6; /* Abbreviated page index */ - unsigned long rpn : 20; /* Real (physical) page number */ -#endif /* CONFIG_PPC64BRIDGE */ - unsigned long : 3; /* Unused */ - unsigned long r : 1; /* Referenced */ - unsigned long c : 1; /* Changed */ - unsigned long w : 1; /* Write-thru cache mode */ - unsigned long i : 1; /* Cache inhibited */ - unsigned long m : 1; /* Memory coherence */ - unsigned long g : 1; /* Guarded */ - unsigned long : 1; /* Unused */ - unsigned long pp : 2; /* Page protection */ -} PTE; - -/* Values for PP (assumes Ks=0, Kp=1) */ -#define PP_RWXX 0 /* Supervisor read/write, User none */ -#define PP_RWRX 1 /* Supervisor read/write, User read */ -#define PP_RWRW 2 /* Supervisor read/write, User read/write */ -#define PP_RXRX 3 /* Supervisor read, User read */ - -/* Segment Register */ -typedef struct _SEGREG -{ - unsigned long t : 1; /* Normal or I/O type */ - unsigned long ks : 1; /* Supervisor 'key' (normally 0) */ - unsigned long kp : 1; /* User 'key' (normally 1) */ - unsigned long n : 1; /* No-execute */ - unsigned long : 4; /* Unused */ - unsigned long vsid : 24; /* Virtual Segment Identifier */ -} SEGREG; - -/* Block Address Translation (BAT) Registers */ -typedef struct _P601_BATU -{ /* Upper part of BAT for 601 processor */ - unsigned long bepi : 15; /* Effective page index (virtual address) */ - unsigned long : 8; /* unused */ - unsigned long w : 1; - unsigned long i : 1; /* Cache inhibit */ - unsigned long m : 1; /* Memory coherence */ - unsigned long ks : 1; /* Supervisor key (normally 0) */ - unsigned long kp : 1; /* User key (normally 1) */ - unsigned long pp : 2; /* Page access protections */ -} P601_BATU; - -typedef struct _BATU -{ /* Upper part of BAT (all except 601) */ -#ifdef CONFIG_PPC64BRIDGE - unsigned long long bepi : 47; -#else /* CONFIG_PPC64BRIDGE */ - unsigned long bepi : 15; /* Effective page index (virtual address) */ -#endif /* CONFIG_PPC64BRIDGE */ - unsigned long : 4; /* Unused */ - unsigned long bl : 11; /* Block size mask */ - unsigned long vs : 1; /* Supervisor valid */ - unsigned long vp : 1; /* User valid */ -} BATU; - -typedef struct _P601_BATL -{ /* Lower part of BAT for 601 processor */ - unsigned long brpn : 15; /* Real page index (physical address) */ - unsigned long : 10; /* Unused */ - unsigned long v : 1; /* Valid bit */ - unsigned long bl : 6; /* Block size mask */ -} P601_BATL; - -typedef struct _BATL -{ /* Lower part of BAT (all except 601) */ -#ifdef CONFIG_PPC64BRIDGE - unsigned long long brpn : 47; -#else /* CONFIG_PPC64BRIDGE */ - unsigned long brpn : 15; /* Real page index (physical address) */ -#endif /* CONFIG_PPC64BRIDGE */ - unsigned long : 10; /* Unused */ - unsigned long w : 1; /* Write-thru cache */ - unsigned long i : 1; /* Cache inhibit */ - unsigned long m : 1; /* Memory coherence */ - unsigned long g : 1; /* Guarded (MBZ in IBAT) */ - unsigned long : 1; /* Unused */ - unsigned long pp : 2; /* Page access protections */ -} BATL; - -typedef struct _BAT -{ - BATU batu; /* Upper register */ - BATL batl; /* Lower register */ -} BAT; - -typedef struct _P601_BAT -{ - P601_BATU batu; /* Upper register */ - P601_BATL batl; /* Lower register */ -} P601_BAT; - -/* - * Simulated two-level MMU. This structure is used by the Kernel - * to keep track of MMU mappings and is used to update/maintain - * the hardware HASH table which is really a cache of mappings. - * - * The simulated structures mimic the hardware available on other - * platforms, notably the 80x86 and 680x0. - */ - -typedef struct _pte -{ - unsigned long page_num : 20; - unsigned long flags : 12; /* Page flags (some unused bits) */ -} pte; - -#define PD_SHIFT (10 + 12) /* Page directory */ -#define PD_MASK 0x02FF -#define PT_SHIFT (12) /* Page Table */ -#define PT_MASK 0x02FF -#define PG_SHIFT (12) /* Page Entry */ - -/* MMU context */ - -typedef struct _MMU_context -{ - SEGREG segs[16]; /* Segment registers */ - pte** pmap; /* Two-level page-map structure */ -} MMU_context; - -extern void _tlbie(unsigned long va); /* invalidate a TLB entry */ -extern void _tlbia(void); /* invalidate all TLB entries */ - -#ifdef CONFIG_ADDR_MAP -extern void init_addr_map(void); -#endif - -typedef enum -{ - IBAT0 = 0, - IBAT1, - IBAT2, - IBAT3, - DBAT0, - DBAT1, - DBAT2, - DBAT3, -#ifdef CONFIG_HIGH_BATS - IBAT4, - IBAT5, - IBAT6, - IBAT7, - DBAT4, - DBAT5, - DBAT6, - DBAT7 -#endif -} ppc_bat_t; - -extern int read_bat(ppc_bat_t bat, unsigned long* upper, unsigned long* lower); -extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower); -extern void print_bats(void); - -#endif /* __ASSEMBLY__ */ - -#define BATU_VS 0x00000002 -#define BATU_VP 0x00000001 -#define BATU_INVALID 0x00000000 - -#define BATL_WRITETHROUGH 0x00000040 -#define BATL_CACHEINHIBIT 0x00000020 -#define BATL_MEMCOHERENCE 0x00000010 -#define BATL_GUARDEDSTORAGE 0x00000008 -#define BATL_NO_ACCESS 0x00000000 - -#define BATL_PP_MSK 0x00000003 -#define BATL_PP_00 0x00000000 /* No access */ -#define BATL_PP_01 0x00000001 /* Read-only */ -#define BATL_PP_10 0x00000002 /* Read-write */ -#define BATL_PP_11 0x00000003 - -#define BATL_PP_NO_ACCESS BATL_PP_00 -#define BATL_PP_RO BATL_PP_01 -#define BATL_PP_RW BATL_PP_10 - -/* BAT Block size values */ -#define BATU_BL_128K 0x00000000 -#define BATU_BL_256K 0x00000004 -#define BATU_BL_512K 0x0000000c -#define BATU_BL_1M 0x0000001c -#define BATU_BL_2M 0x0000003c -#define BATU_BL_4M 0x0000007c -#define BATU_BL_8M 0x000000fc -#define BATU_BL_16M 0x000001fc -#define BATU_BL_32M 0x000003fc -#define BATU_BL_64M 0x000007fc -#define BATU_BL_128M 0x00000ffc -#define BATU_BL_256M 0x00001ffc - -/* Block lengths for processors that support extended block length */ -#ifdef HID0_XBSEN -#define BATU_BL_512M 0x00003ffc -#define BATU_BL_1G 0x00007ffc -#define BATU_BL_2G 0x0000fffc -#define BATU_BL_4G 0x0001fffc -#define BATU_BL_MAX BATU_BL_4G -#else -#define BATU_BL_MAX BATU_BL_256M -#endif - -/* BAT Access Protection */ -#define BPP_XX 0x00 /* No access */ -#define BPP_RX 0x01 /* Read only */ -#define BPP_RW 0x02 /* Read/write */ - -/* Macros to get values from BATs, once data is in the BAT register format */ -#define BATU_VALID(x) (x & 0x3) -#define BATU_VADDR(x) (x & 0xfffe0000) -#define BATL_PADDR(x) ((phys_addr_t)((x & 0xfffe0000) | ((x & 0x0e00ULL) << 24) | ((x & 0x04ULL) << 30))) -#define BATU_SIZE(x) (1ULL << (fls((x & BATU_BL_MAX) >> 2) + 17)) - -/* bytes into BATU_BL */ -#define TO_BATU_BL(x) \ - (uint32_t)((((1ull << __ilog2_u64((uint64_t)x)) / (128 * 1024)) - 1) * 4) - -/* Used to set up SDR1 register */ -#define HASH_TABLE_SIZE_64K 0x00010000 -#define HASH_TABLE_SIZE_128K 0x00020000 -#define HASH_TABLE_SIZE_256K 0x00040000 -#define HASH_TABLE_SIZE_512K 0x00080000 -#define HASH_TABLE_SIZE_1M 0x00100000 -#define HASH_TABLE_SIZE_2M 0x00200000 -#define HASH_TABLE_SIZE_4M 0x00400000 -#define HASH_TABLE_MASK_64K 0x000 -#define HASH_TABLE_MASK_128K 0x001 -#define HASH_TABLE_MASK_256K 0x003 -#define HASH_TABLE_MASK_512K 0x007 -#define HASH_TABLE_MASK_1M 0x00F -#define HASH_TABLE_MASK_2M 0x01F -#define HASH_TABLE_MASK_4M 0x03F - -/* Control/status registers for the MPC8xx. - * A write operation to these registers causes serialized access. - * During software tablewalk, the registers used perform mask/shift-add - * operations when written/read. A TLB entry is created when the Mx_RPN - * is written, and the contents of several registers are used to - * create the entry. - */ -#define MI_CTR 784 /* Instruction TLB control register */ -#define MI_GPM 0x80000000 /* Set domain manager mode */ -#define MI_PPM 0x40000000 /* Set subpage protection */ -#define MI_CIDEF 0x20000000 /* Set cache inhibit when MMU dis */ -#define MI_RSV4I 0x08000000 /* Reserve 4 TLB entries */ -#define MI_PPCS 0x02000000 /* Use MI_RPN prob/priv state */ -#define MI_IDXMASK 0x00001f00 /* TLB index to be loaded */ -#define MI_RESETVAL 0x00000000 /* Value of register at reset */ - -/* These are the Ks and Kp from the ppc books. For proper operation, - * Ks = 0, Kp = 1. - */ -#define MI_AP 786 -#define MI_Ks 0x80000000 /* Should not be set */ -#define MI_Kp 0x40000000 /* Should always be set */ - -/* The effective page number register. When read, contains the information - * about the last instruction TLB miss. When MI_RPN is written, bits in - * this register are used to create the TLB entry. - */ -#define MI_EPN 787 -#define MI_EPNMASK 0xfffff000 /* Effective page number for entry */ -#define MI_EVALID 0x00000200 /* Entry is valid */ -#define MI_ASIDMASK 0x0000000f /* ASID match value */ - /* Reset value is undefined */ - -/* A "level 1" or "segment" or whatever you want to call it register. - * For the instruction TLB, it contains bits that get loaded into the - * TLB entry when the MI_RPN is written. - */ -#define MI_TWC 789 -#define MI_APG 0x000001e0 /* Access protection group (0) */ -#define MI_GUARDED 0x00000010 /* Guarded storage */ -#define MI_PSMASK 0x0000000c /* Mask of page size bits */ -#define MI_PS8MEG 0x0000000c /* 8M page size */ -#define MI_PS512K 0x00000004 /* 512K page size */ -#define MI_PS4K_16K 0x00000000 /* 4K or 16K page size */ -#define MI_SVALID 0x00000001 /* Segment entry is valid */ - /* Reset value is undefined */ - -/* Real page number. Defined by the pte. Writing this register - * causes a TLB entry to be created for the instruction TLB, using - * additional information from the MI_EPN, and MI_TWC registers. - */ -#define MI_RPN 790 - -/* Define an RPN value for mapping Kernel memory to large virtual - * pages for boot initialization. This has real page number of 0, - * large page size, shared page, cache enabled, and valid. - * Also mark all subpages valid and write access. - */ -#define MI_BOOTINIT 0x000001fd - -#define MD_CTR 792 /* Data TLB control register */ -#define MD_GPM 0x80000000 /* Set domain manager mode */ -#define MD_PPM 0x40000000 /* Set subpage protection */ -#define MD_CIDEF 0x20000000 /* Set cache inhibit when MMU dis */ -#define MD_WTDEF 0x10000000 /* Set writethrough when MMU dis */ -#define MD_RSV4I 0x08000000 /* Reserve 4 TLB entries */ -#define MD_TWAM 0x04000000 /* Use 4K page hardware assist */ -#define MD_PPCS 0x02000000 /* Use MI_RPN prob/priv state */ -#define MD_IDXMASK 0x00001f00 /* TLB index to be loaded */ -#define MD_RESETVAL 0x04000000 /* Value of register at reset */ - -#define M_CASID 793 /* Address space ID (context) to match */ -#define MC_ASIDMASK 0x0000000f /* Bits used for ASID value */ - -/* These are the Ks and Kp from the ppc books. For proper operation, - * Ks = 0, Kp = 1. - */ -#define MD_AP 794 -#define MD_Ks 0x80000000 /* Should not be set */ -#define MD_Kp 0x40000000 /* Should always be set */ - -/* The effective page number register. When read, contains the information - * about the last instruction TLB miss. When MD_RPN is written, bits in - * this register are used to create the TLB entry. - */ -#define MD_EPN 795 -#define MD_EPNMASK 0xfffff000 /* Effective page number for entry */ -#define MD_EVALID 0x00000200 /* Entry is valid */ -#define MD_ASIDMASK 0x0000000f /* ASID match value */ - /* Reset value is undefined */ - -/* The pointer to the base address of the first level page table. - * During a software tablewalk, reading this register provides the address - * of the entry associated with MD_EPN. - */ -#define M_TWB 796 -#define M_L1TB 0xfffff000 /* Level 1 table base address */ -#define M_L1INDX 0x00000ffc /* Level 1 index, when read */ - /* Reset value is undefined */ - -/* A "level 1" or "segment" or whatever you want to call it register. - * For the data TLB, it contains bits that get loaded into the TLB entry - * when the MD_RPN is written. It is also provides the hardware assist - * for finding the PTE address during software tablewalk. - */ -#define MD_TWC 797 -#define MD_L2TB 0xfffff000 /* Level 2 table base address */ -#define MD_L2INDX 0xfffffe00 /* Level 2 index (*pte), when read */ -#define MD_APG 0x000001e0 /* Access protection group (0) */ -#define MD_GUARDED 0x00000010 /* Guarded storage */ -#define MD_PSMASK 0x0000000c /* Mask of page size bits */ -#define MD_PS8MEG 0x0000000c /* 8M page size */ -#define MD_PS512K 0x00000004 /* 512K page size */ -#define MD_PS4K_16K 0x00000000 /* 4K or 16K page size */ -#define MD_WT 0x00000002 /* Use writethrough page attribute */ -#define MD_SVALID 0x00000001 /* Segment entry is valid */ - /* Reset value is undefined */ - -/* Real page number. Defined by the pte. Writing this register - * causes a TLB entry to be created for the data TLB, using - * additional information from the MD_EPN, and MD_TWC registers. - */ -#define MD_RPN 798 - -/* This is a temporary storage register that could be used to save - * a processor working register during a tablewalk. - */ -#define M_TW 799 - -/* - * At present, all ppc 400-class processors share a similar TLB - * architecture. The instruction and data sides share a unified, - * 64-entry, fully-associative TLB which is maintained totally under - * software control. In addition, the instruction side has a - * hardware-managed, 4-entry, fully- associative TLB which serves as a - * first level to the shared TLB. These two TLBs are known as the UTLB - * and ITLB, respectively. - */ - -#define PPC4XX_TLB_SIZE 64 - -/* - * TLB entries are defined by a "high" tag portion and a "low" data - * portion. On all architectures, the data portion is 32-bits. - * - * TLB entries are managed entirely under software control by reading, - * writing, and searchoing using the 4xx-specific tlbre, tlbwr, and tlbsx - * instructions. - */ - -/* - * FSL Book-E support - */ - -#define MAS0_TLBSEL_MSK 0x30000000 -#define MAS0_TLBSEL(x) (((x) << 28) & MAS0_TLBSEL_MSK) -#define MAS0_ESEL_MSK 0x0FFF0000 -#define MAS0_ESEL(x) (((x) << 16) & MAS0_ESEL_MSK) -#define MAS0_NV(x) ((x) & 0x00000FFF) - -#define MAS1_VALID 0x80000000 -#define MAS1_IPROT 0x40000000 -#define MAS1_TID(x) (((x) << 16) & 0x3FFF0000) -#define MAS1_TS 0x00001000 -#define MAS1_TSIZE(x) (((x) << 7) & 0x00000F80) -#define TSIZE_TO_BYTES(x) (1ULL << ((x) + 10)) - -#define MAS2_EPN 0xFFFFF000 -#define MAS2_X0 0x00000040 -#define MAS2_X1 0x00000020 -#define MAS2_W 0x00000010 -#define MAS2_I 0x00000008 -#define MAS2_M 0x00000004 -#define MAS2_G 0x00000002 -#define MAS2_E 0x00000001 - -#define MAS3_RPN 0xFFFFF000 -#define MAS3_U0 0x00000200 -#define MAS3_U1 0x00000100 -#define MAS3_U2 0x00000080 -#define MAS3_U3 0x00000040 -#define MAS3_UX 0x00000020 -#define MAS3_SX 0x00000010 -#define MAS3_UW 0x00000008 -#define MAS3_SW 0x00000004 -#define MAS3_UR 0x00000002 -#define MAS3_SR 0x00000001 - -#define MAS4_TLBSELD(x) MAS0_TLBSEL(x) -#define MAS4_TIDDSEL 0x000F0000 -#define MAS4_TSIZED(x) MAS1_TSIZE(x) -#define MAS4_X0D 0x00000040 -#define MAS4_X1D 0x00000020 -#define MAS4_WD 0x00000010 -#define MAS4_ID 0x00000008 -#define MAS4_MD 0x00000004 -#define MAS4_GD 0x00000002 -#define MAS4_ED 0x00000001 - -#define MAS6_SPID0 0x3FFF0000 -#define MAS6_SPID1 0x00007FFE -#define MAS6_SAS 0x00000001 -#define MAS6_SPID MAS6_SPID0 - -#define MAS7_RPN 0xFFFFFFFF - -#define FSL_BOOKE_MAS0(tlbsel, esel, nv) \ - (MAS0_TLBSEL(tlbsel) | MAS0_ESEL(esel) | MAS0_NV(nv)) -#define FSL_BOOKE_MAS1(v, iprot, tid, ts, tsize) \ - ((((v) << 31) & MAS1_VALID) | \ - (((iprot) << 30) & MAS1_IPROT) | \ - (MAS1_TID(tid)) | \ - (((ts) << 12) & MAS1_TS) | \ - (MAS1_TSIZE(tsize))) -#define FSL_BOOKE_MAS2(epn, wimge) \ - (((epn) & MAS3_RPN) | (wimge)) -#define FSL_BOOKE_MAS3(rpn, user, perms) \ - (((rpn) & MAS3_RPN) | (user) | (perms)) -#define FSL_BOOKE_MAS7(rpn) \ - (((uint64_t)(rpn)) >> 32) - -#define BOOKE_PAGESZ_1K 0 -#define BOOKE_PAGESZ_2K 1 -#define BOOKE_PAGESZ_4K 2 -#define BOOKE_PAGESZ_8K 3 -#define BOOKE_PAGESZ_16K 4 -#define BOOKE_PAGESZ_32K 5 -#define BOOKE_PAGESZ_64K 6 -#define BOOKE_PAGESZ_128K 7 -#define BOOKE_PAGESZ_256K 8 -#define BOOKE_PAGESZ_512K 9 -#define BOOKE_PAGESZ_1M 10 -#define BOOKE_PAGESZ_2M 11 -#define BOOKE_PAGESZ_4M 12 -#define BOOKE_PAGESZ_8M 13 -#define BOOKE_PAGESZ_16M 14 -#define BOOKE_PAGESZ_32M 15 -#define BOOKE_PAGESZ_64M 16 -#define BOOKE_PAGESZ_128M 17 -#define BOOKE_PAGESZ_256M 18 -#define BOOKE_PAGESZ_512M 19 -#define BOOKE_PAGESZ_1G 20 -#define BOOKE_PAGESZ_2G 21 -#define BOOKE_PAGESZ_4G 22 -#define BOOKE_PAGESZ_8G 23 -#define BOOKE_PAGESZ_16GB 24 -#define BOOKE_PAGESZ_32GB 25 -#define BOOKE_PAGESZ_64GB 26 -#define BOOKE_PAGESZ_128GB 27 -#define BOOKE_PAGESZ_256GB 28 -#define BOOKE_PAGESZ_512GB 29 -#define BOOKE_PAGESZ_1TB 30 -#define BOOKE_PAGESZ_2TB 31 - -#define TLBIVAX_ALL 4 -#define TLBIVAX_TLB0 0 -#define TLBIVAX_TLB1 8 - -#ifdef CONFIG_E500 -#ifndef __ASSEMBLY__ -extern void set_tlb(uint8_t tlb, uint32_t epn, uint64_t rpn, uint8_t perms, uint8_t wimge, uint8_t ts, uint8_t esel, uint8_t tsize, uint8_t iprot); -extern void disable_tlb(uint8_t esel); -extern void invalidate_tlb(uint8_t tlb); -extern void init_tlbs(void); -extern int find_tlb_idx(void* addr, uint8_t tlbsel); -extern void init_used_tlb_cams(void); -extern int find_free_tlbcam(void); -extern void print_tlbcam(void); - -extern unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg); -extern void clear_ddr_tlbs(unsigned int memsize_in_meg); - -enum tlb_map_type -{ - TLB_MAP_RAM, - TLB_MAP_IO, -}; - -extern uint64_t tlb_map_range(ulong_t v_addr, phys_addr_t p_addr, uint64_t size, enum tlb_map_type map_type); - -extern void write_tlb(uint32_t _mas0, uint32_t _mas1, uint32_t _mas2, uint32_t _mas3, uint32_t _mas7); - -#define SET_TLB_ENTRY(_tlb, _epn, _rpn, _perms, _wimge, _ts, _esel, _sz, _iprot) \ - { \ - .mas0 = FSL_BOOKE_MAS0(_tlb, _esel, 0), \ - .mas1 = FSL_BOOKE_MAS1(1, _iprot, 0, _ts, _sz), \ - .mas2 = FSL_BOOKE_MAS2(_epn, _wimge), \ - .mas3 = FSL_BOOKE_MAS3(_rpn, 0, _perms), \ - .mas7 = FSL_BOOKE_MAS7(_rpn), \ - } - -struct fsl_e_tlb_entry -{ - uint32_t mas0; - uint32_t mas1; - uint32_t mas2; - uint32_t mas3; - uint32_t mas7; -}; - -extern struct fsl_e_tlb_entry tlb_table[]; -extern int num_tlb_entries; -#endif -#endif - -#ifdef CONFIG_E300 -#define LAWAR_EN 0x80000000 -#define LAWAR_SIZE 0x0000003F - -#define LAWAR_TRGT_IF_PCI 0x00000000 -#define LAWAR_TRGT_IF_PCI1 0x00000000 -#define LAWAR_TRGT_IF_PCIX 0x00000000 -#define LAWAR_TRGT_IF_PCI2 0x00100000 -#define LAWAR_TRGT_IF_PCIE1 0x00200000 -#define LAWAR_TRGT_IF_PCIE2 0x00100000 -#define LAWAR_TRGT_IF_PCIE3 0x00300000 -#define LAWAR_TRGT_IF_LBC 0x00400000 -#define LAWAR_TRGT_IF_CCSR 0x00800000 -#define LAWAR_TRGT_IF_DDR_INTERLEAVED 0x00B00000 -#define LAWAR_TRGT_IF_RIO 0x00c00000 -#define LAWAR_TRGT_IF_DDR 0x00f00000 -#define LAWAR_TRGT_IF_DDR1 0x00f00000 -#define LAWAR_TRGT_IF_DDR2 0x01600000 - -#define LAWAR_SIZE_BASE 0xa -#define LAWAR_SIZE_4K (LAWAR_SIZE_BASE + 1) -#define LAWAR_SIZE_8K (LAWAR_SIZE_BASE + 2) -#define LAWAR_SIZE_16K (LAWAR_SIZE_BASE + 3) -#define LAWAR_SIZE_32K (LAWAR_SIZE_BASE + 4) -#define LAWAR_SIZE_64K (LAWAR_SIZE_BASE + 5) -#define LAWAR_SIZE_128K (LAWAR_SIZE_BASE + 6) -#define LAWAR_SIZE_256K (LAWAR_SIZE_BASE + 7) -#define LAWAR_SIZE_512K (LAWAR_SIZE_BASE + 8) -#define LAWAR_SIZE_1M (LAWAR_SIZE_BASE + 9) -#define LAWAR_SIZE_2M (LAWAR_SIZE_BASE + 10) -#define LAWAR_SIZE_4M (LAWAR_SIZE_BASE + 11) -#define LAWAR_SIZE_8M (LAWAR_SIZE_BASE + 12) -#define LAWAR_SIZE_16M (LAWAR_SIZE_BASE + 13) -#define LAWAR_SIZE_32M (LAWAR_SIZE_BASE + 14) -#define LAWAR_SIZE_64M (LAWAR_SIZE_BASE + 15) -#define LAWAR_SIZE_128M (LAWAR_SIZE_BASE + 16) -#define LAWAR_SIZE_256M (LAWAR_SIZE_BASE + 17) -#define LAWAR_SIZE_512M (LAWAR_SIZE_BASE + 18) -#define LAWAR_SIZE_1G (LAWAR_SIZE_BASE + 19) -#define LAWAR_SIZE_2G (LAWAR_SIZE_BASE + 20) -#define LAWAR_SIZE_4G (LAWAR_SIZE_BASE + 21) -#define LAWAR_SIZE_8G (LAWAR_SIZE_BASE + 22) -#define LAWAR_SIZE_16G (LAWAR_SIZE_BASE + 23) -#define LAWAR_SIZE_32G (LAWAR_SIZE_BASE + 24) -#endif - -#ifdef CONFIG_440 -/* General */ -#define TLB_VALID 0x00000200 - -/* Supported page sizes */ - -#define SZ_1K 0x00000000 -#define SZ_4K 0x00000010 -#define SZ_16K 0x00000020 -#define SZ_64K 0x00000030 -#define SZ_256K 0x00000040 -#define SZ_1M 0x00000050 -#define SZ_16M 0x00000070 -#define SZ_256M 0x00000090 - -/* Storage attributes */ -#define SA_W 0x00000800 /* Write-through */ -#define SA_I 0x00000400 /* Caching inhibited */ -#define SA_M 0x00000200 /* Memory coherence */ -#define SA_G 0x00000100 /* Guarded */ -#define SA_E 0x00000080 /* Endian */ -/* Some additional macros for combinations often used */ -#define SA_IG (SA_I | SA_G) - -/* Access control */ -#define AC_X 0x00000024 /* Execute */ -#define AC_W 0x00000012 /* Write */ -#define AC_R 0x00000009 /* Read */ -/* Some additional macros for combinations often used */ -#define AC_RW (AC_R | AC_W) -#define AC_RWX (AC_R | AC_W | AC_X) - -/* Some handy macros */ - -#define EPN(e) ((e) & 0xfffffc00) -#define TLB0(epn, sz) ((EPN((epn)) | (sz) | TLB_VALID)) -#define TLB1(rpn, erpn) (((rpn) & 0xfffffc00) | (erpn)) -#define TLB2(a) ((a) & 0x00000fbf) - -#define tlbtab_start \ - mflr r1; \ - bl 0f; - -#define tlbtab_end \ - .long 0, 0, 0; \ - 0 : mflr r0; \ - mtlr r1; \ - blr; - -#define tlbentry(epn, sz, rpn, erpn, attr) \ - .long TLB0(epn, sz), TLB1(rpn, erpn), TLB2(attr) - -/*----------------------------------------------------------------------------+ -| TLB specific defines. -+----------------------------------------------------------------------------*/ -#define TLB_256MB_ALIGN_MASK 0xFF0000000ULL -#define TLB_16MB_ALIGN_MASK 0xFFF000000ULL -#define TLB_1MB_ALIGN_MASK 0xFFFF00000ULL -#define TLB_256KB_ALIGN_MASK 0xFFFFC0000ULL -#define TLB_64KB_ALIGN_MASK 0xFFFFF0000ULL -#define TLB_16KB_ALIGN_MASK 0xFFFFFC000ULL -#define TLB_4KB_ALIGN_MASK 0xFFFFFF000ULL -#define TLB_1KB_ALIGN_MASK 0xFFFFFFC00ULL -#define TLB_256MB_SIZE 0x10000000 -#define TLB_16MB_SIZE 0x01000000 -#define TLB_1MB_SIZE 0x00100000 -#define TLB_256KB_SIZE 0x00040000 -#define TLB_64KB_SIZE 0x00010000 -#define TLB_16KB_SIZE 0x00004000 -#define TLB_4KB_SIZE 0x00001000 -#define TLB_1KB_SIZE 0x00000400 - -#define TLB_WORD0_EPN_MASK 0xFFFFFC00 -#define TLB_WORD0_EPN_ENCODE(n) (((unsigned long)(n)) & 0xFFFFFC00) -#define TLB_WORD0_EPN_DECODE(n) (((unsigned long)(n)) & 0xFFFFFC00) -#define TLB_WORD0_V_MASK 0x00000200 -#define TLB_WORD0_V_ENABLE 0x00000200 -#define TLB_WORD0_V_DISABLE 0x00000000 -#define TLB_WORD0_TS_MASK 0x00000100 -#define TLB_WORD0_TS_1 0x00000100 -#define TLB_WORD0_TS_0 0x00000000 -#define TLB_WORD0_SIZE_MASK 0x000000F0 -#define TLB_WORD0_SIZE_1KB 0x00000000 -#define TLB_WORD0_SIZE_4KB 0x00000010 -#define TLB_WORD0_SIZE_16KB 0x00000020 -#define TLB_WORD0_SIZE_64KB 0x00000030 -#define TLB_WORD0_SIZE_256KB 0x00000040 -#define TLB_WORD0_SIZE_1MB 0x00000050 -#define TLB_WORD0_SIZE_16MB 0x00000070 -#define TLB_WORD0_SIZE_256MB 0x00000090 -#define TLB_WORD0_TPAR_MASK 0x0000000F -#define TLB_WORD0_TPAR_ENCODE(n) ((((unsigned long)(n)) & 0x0F) << 0) -#define TLB_WORD0_TPAR_DECODE(n) ((((unsigned long)(n)) >> 0) & 0x0F) - -#define TLB_WORD1_RPN_MASK 0xFFFFFC00 -#define TLB_WORD1_RPN_ENCODE(n) (((unsigned long)(n)) & 0xFFFFFC00) -#define TLB_WORD1_RPN_DECODE(n) (((unsigned long)(n)) & 0xFFFFFC00) -#define TLB_WORD1_PAR1_MASK 0x00000300 -#define TLB_WORD1_PAR1_ENCODE(n) ((((unsigned long)(n)) & 0x03) << 8) -#define TLB_WORD1_PAR1_DECODE(n) ((((unsigned long)(n)) >> 8) & 0x03) -#define TLB_WORD1_PAR1_0 0x00000000 -#define TLB_WORD1_PAR1_1 0x00000100 -#define TLB_WORD1_PAR1_2 0x00000200 -#define TLB_WORD1_PAR1_3 0x00000300 -#define TLB_WORD1_ERPN_MASK 0x0000000F -#define TLB_WORD1_ERPN_ENCODE(n) ((((unsigned long)(n)) & 0x0F) << 0) -#define TLB_WORD1_ERPN_DECODE(n) ((((unsigned long)(n)) >> 0) & 0x0F) - -#define TLB_WORD2_PAR2_MASK 0xC0000000 -#define TLB_WORD2_PAR2_ENCODE(n) ((((unsigned long)(n)) & 0x03) << 30) -#define TLB_WORD2_PAR2_DECODE(n) ((((unsigned long)(n)) >> 30) & 0x03) -#define TLB_WORD2_PAR2_0 0x00000000 -#define TLB_WORD2_PAR2_1 0x40000000 -#define TLB_WORD2_PAR2_2 0x80000000 -#define TLB_WORD2_PAR2_3 0xC0000000 -#define TLB_WORD2_U0_MASK 0x00008000 -#define TLB_WORD2_U0_ENABLE 0x00008000 -#define TLB_WORD2_U0_DISABLE 0x00000000 -#define TLB_WORD2_U1_MASK 0x00004000 -#define TLB_WORD2_U1_ENABLE 0x00004000 -#define TLB_WORD2_U1_DISABLE 0x00000000 -#define TLB_WORD2_U2_MASK 0x00002000 -#define TLB_WORD2_U2_ENABLE 0x00002000 -#define TLB_WORD2_U2_DISABLE 0x00000000 -#define TLB_WORD2_U3_MASK 0x00001000 -#define TLB_WORD2_U3_ENABLE 0x00001000 -#define TLB_WORD2_U3_DISABLE 0x00000000 -#define TLB_WORD2_W_MASK 0x00000800 -#define TLB_WORD2_W_ENABLE 0x00000800 -#define TLB_WORD2_W_DISABLE 0x00000000 -#define TLB_WORD2_I_MASK 0x00000400 -#define TLB_WORD2_I_ENABLE 0x00000400 -#define TLB_WORD2_I_DISABLE 0x00000000 -#define TLB_WORD2_M_MASK 0x00000200 -#define TLB_WORD2_M_ENABLE 0x00000200 -#define TLB_WORD2_M_DISABLE 0x00000000 -#define TLB_WORD2_G_MASK 0x00000100 -#define TLB_WORD2_G_ENABLE 0x00000100 -#define TLB_WORD2_G_DISABLE 0x00000000 -#define TLB_WORD2_E_MASK 0x00000080 -#define TLB_WORD2_E_ENABLE 0x00000080 -#define TLB_WORD2_E_DISABLE 0x00000000 -#define TLB_WORD2_UX_MASK 0x00000020 -#define TLB_WORD2_UX_ENABLE 0x00000020 -#define TLB_WORD2_UX_DISABLE 0x00000000 -#define TLB_WORD2_UW_MASK 0x00000010 -#define TLB_WORD2_UW_ENABLE 0x00000010 -#define TLB_WORD2_UW_DISABLE 0x00000000 -#define TLB_WORD2_UR_MASK 0x00000008 -#define TLB_WORD2_UR_ENABLE 0x00000008 -#define TLB_WORD2_UR_DISABLE 0x00000000 -#define TLB_WORD2_SX_MASK 0x00000004 -#define TLB_WORD2_SX_ENABLE 0x00000004 -#define TLB_WORD2_SX_DISABLE 0x00000000 -#define TLB_WORD2_SW_MASK 0x00000002 -#define TLB_WORD2_SW_ENABLE 0x00000002 -#define TLB_WORD2_SW_DISABLE 0x00000000 -#define TLB_WORD2_SR_MASK 0x00000001 -#define TLB_WORD2_SR_ENABLE 0x00000001 -#define TLB_WORD2_SR_DISABLE 0x00000000 - -/*----------------------------------------------------------------------------+ -| Following instructions are not available in Book E mode of the GNU assembler. -+----------------------------------------------------------------------------*/ -#define DCCCI(ra, rb) .long 0x7c000000 | \ - (ra << 16) | (rb << 11) | (454 << 1) - -#define ICCCI(ra, rb) .long 0x7c000000 | \ - (ra << 16) | (rb << 11) | (966 << 1) - -#define DCREAD(rt, ra, rb) .long 0x7c000000 | (rt << 21) | (ra << 16) | (rb << 11) | (486 << 1) - -#define ICREAD(ra, rb) .long 0x7c000000 | \ - (ra << 16) | (rb << 11) | (998 << 1) - -#define TLBSX(rt, ra, rb) .long 0x7c000000 | (rt << 21) | (ra << 16) | (rb << 11) | (914 << 1) - -#define TLBWE(rs, ra, ws) .long 0x7c000000 | (rs << 21) | (ra << 16) | (ws << 11) | (978 << 1) - -#define TLBRE(rt, ra, ws) .long 0x7c000000 | (rt << 21) | (ra << 16) | (ws << 11) | (946 << 1) - -#define TLBSXDOT(rt, ra, rb) .long 0x7c000001 | (rt << 21) | (ra << 16) | (rb << 11) | (914 << 1) - -#define MSYNC .long 0x7c000000 | \ - (598 << 1) - -#define MBAR_INST .long 0x7c000000 | \ - (854 << 1) - -#ifndef __ASSEMBLY__ -/* Prototypes */ -void mttlb1(unsigned long index, unsigned long value); -void mttlb2(unsigned long index, unsigned long value); -void mttlb3(unsigned long index, unsigned long value); -unsigned long mftlb1(unsigned long index); -unsigned long mftlb2(unsigned long index); -unsigned long mftlb3(unsigned long index); - -void program_tlb(uint64_t phys_addr, uint32_t virt_addr, uint32_t size, uint32_t tlb_word2_i_value); -void remove_tlb(uint32_t vaddr, uint32_t size); -void change_tlb(uint32_t vaddr, uint32_t size, uint32_t tlb_word2_i_value); -#endif /* __ASSEMBLY__ */ - -#endif /* CONFIG_440 */ -#endif /* _PPC_MMU_H_ */ diff --git a/dev/Kernel/HALKit/RISCV/.keep b/dev/Kernel/HALKit/RISCV/.keep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/RISCV/.keep +++ /dev/null diff --git a/dev/Kernel/HALKit/RISCV/APM/.gitkeep b/dev/Kernel/HALKit/RISCV/APM/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/RISCV/APM/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/RISCV/Hart.hxx b/dev/Kernel/HALKit/RISCV/Hart.hxx deleted file mode 100644 index 0f5e021e..00000000 --- a/dev/Kernel/HALKit/RISCV/Hart.hxx +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Hart.hxx - Purpose: RISC-V hardware threads. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -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/Kernel/HALKit/RISCV/ReadMe.md b/dev/Kernel/HALKit/RISCV/ReadMe.md deleted file mode 100644 index b099aa31..00000000 --- a/dev/Kernel/HALKit/RISCV/ReadMe.md +++ /dev/null @@ -1,4 +0,0 @@ -RISCV64 Hardware Abstraction Layer - -- Supported CPU: RISCV64 -- Supported Firmware: CoreBoot
\ No newline at end of file diff --git a/dev/Kernel/HALKit/RISCV/Storage/.gitkeep b/dev/Kernel/HALKit/RISCV/Storage/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/RISCV/Storage/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/X86S/.gitkeep b/dev/Kernel/HALKit/X86S/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/X86S/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/X86S/ACPI/.gitkeep b/dev/Kernel/HALKit/X86S/ACPI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/X86S/ACPI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/X86S/Storage/.gitkeep b/dev/Kernel/HALKit/X86S/Storage/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/HALKit/X86S/Storage/.gitkeep +++ /dev/null diff --git a/dev/Kernel/HALKit/compile_flags.txt b/dev/Kernel/HALKit/compile_flags.txt deleted file mode 100644 index 26779833..00000000 --- a/dev/Kernel/HALKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__NEWOS_AMD64__ diff --git a/dev/Kernel/HintKit/CompilerHint.hxx b/dev/Kernel/HintKit/CompilerHint.hxx deleted file mode 100644 index f0316b50..00000000 --- a/dev/Kernel/HintKit/CompilerHint.hxx +++ /dev/null @@ -1,23 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __HINTKIT_COMPILER_HINT_HXX__ -#define __HINTKIT_COMPILER_HINT_HXX__ - -#pragma compiler(hint_manifest) - -#define _Input -#define _Output - -#define _Optional - -#define _StrictCheckInput -#define _StrictCheckOutput - -#define _InOut -#define _StrictInOut - -#endif // ifndef __HINTKIT_COMPILER_HINT_HXX__ diff --git a/dev/Kernel/KernelKit/CodeManager.hxx b/dev/Kernel/KernelKit/CodeManager.hxx deleted file mode 100644 index 08e97e60..00000000 --- a/dev/Kernel/KernelKit/CodeManager.hxx +++ /dev/null @@ -1,31 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: CodeManager.hpp - Purpose: Code Manager and Shared Objects. - - Revision History: - - 30/01/24: Added file (amlel) - 3/8/24: Add UPP struct. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/PECodeManager.hxx> -#include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/PEFSharedObject.hxx> - -namespace Kernel -{ - /// @brief Main process entrypoint. - typedef void (*MainKind)(void); - - /// @brief Executes a new process from a function. kernel code only. - /// @note This sets up a new stack, anything on the main function that calls the kernel will not be accessible. - /// @param main the start of the process. - /// @return if the process was started or not. - bool execute_from_image(MainKind main, const char* processName) noexcept; -} // namespace Kernel
\ No newline at end of file diff --git a/dev/Kernel/KernelKit/DebugOutput.hxx b/dev/Kernel/KernelKit/DebugOutput.hxx deleted file mode 100644 index 2205acfe..00000000 --- a/dev/Kernel/KernelKit/DebugOutput.hxx +++ /dev/null @@ -1,190 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DeviceManager.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/OwnPtr.hxx> -#include <NewKit/Stream.hxx> - -#define kDebugMaxPorts 16 - -#define kDebugUnboundPort 0x0FEED - -#define kDebugMag0 'N' -#define kDebugMag1 'D' -#define kDebugMag2 'B' -#define kDebugMag3 'G' - -#define kDebugSourceFile 0 -#define kDebugLine 33 -#define kDebugTeam 43 -#define kDebugEOP 49 - -namespace Kernel -{ - class TerminalDevice; - - inline TerminalDevice end_line(); - inline TerminalDevice number(const Long& x); - inline TerminalDevice hex_number(const Long& x); - - // @brief Emulates a VT100 terminal. - class TerminalDevice final : public DeviceInterface<const Char*> - { - public: - TerminalDevice(void (*print)(const Char*), void (*get)(const Char*)) - : DeviceInterface<const Char*>(print, get) - { - } - - virtual ~TerminalDevice() = default; - - /// @brief returns device name (terminal name) - /// @return string type (const char*) - virtual const char* Name() const override - { - return ("TerminalDevice"); - } - - NEWOS_COPY_DEFAULT(TerminalDevice); - - STATIC TerminalDevice The() noexcept; - }; - - inline TerminalDevice end_line() - { - TerminalDevice selfTerm = TerminalDevice::The(); - selfTerm << "\r"; - return selfTerm; - } - - inline TerminalDevice carriage_return() - { - TerminalDevice selfTerm = TerminalDevice::The(); - selfTerm << "\r"; - return selfTerm; - } - - inline TerminalDevice tabulate() - { - TerminalDevice selfTerm = TerminalDevice::The(); - selfTerm << "\t"; - return selfTerm; - } - - /// @brief emulate a terminal bell, like the VT100 does. - inline TerminalDevice bell() - { - TerminalDevice selfTerm = TerminalDevice::The(); - selfTerm << "\a"; - return selfTerm; - } - - namespace Detail - { - inline TerminalDevice _write_number(const Long& x, TerminalDevice& term) - { - UInt64 y = (x > 0 ? x : -x) / 10; - UInt64 h = (x > 0 ? x : -x) % 10; - - if (y) - _write_number(y, term); - - /* fail if the number is not base-10 */ - if (h > 10) - { - _write_number('?', term); - return term; - } - - if (y < 0) - y = -y; - - const char cNumbers[11] = "0123456789"; - - Char buf[2]; - buf[0] = cNumbers[h]; - buf[1] = 0; - - term << buf; - return term; - } - - inline TerminalDevice _write_number_hex(const Long& x, TerminalDevice& term) - { - UInt64 y = (x > 0 ? x : -x) / 16; - UInt64 h = (x > 0 ? x : -x) % 16; - - if (y) - _write_number_hex(y, term); - - /* fail if the hex number is not base-16 */ - if (h > 15) - { - _write_number_hex('?', term); - return term; - } - - if (y < 0) - y = -y; - - const char cNumbers[17] = "0123456789ABCDEF"; - - Char buf[2]; - buf[0] = cNumbers[h]; - buf[1] = 0; - - term << buf; - return term; - } - } // namespace Detail - - inline TerminalDevice hex_number(const Long& x) - { - TerminalDevice selfTerm = TerminalDevice::The(); - - selfTerm << "0x"; - Detail::_write_number_hex(x, selfTerm); - - return selfTerm; - } - - inline TerminalDevice number(const Long& x) - { - TerminalDevice selfTerm = TerminalDevice::The(); - - Detail::_write_number(x, selfTerm); - - return selfTerm; - } - - inline TerminalDevice get_console_in(Char* buf) - { - TerminalDevice selfTerm = TerminalDevice::The(); - - selfTerm >> buf; - - return selfTerm; - } - - typedef Char rt_debug_type[255]; - - class DebuggerPortHeader final - { - public: - Int16 fPort[kDebugMaxPorts]; - Int16 fBoundCnt; - }; -} // namespace Kernel - -#ifdef kcout -#undef kcout -#endif // ifdef kcout - -#define kcout TerminalDevice::The() -#define endl kcout << Kernel::end_line() diff --git a/dev/Kernel/KernelKit/Defines.hxx b/dev/Kernel/KernelKit/Defines.hxx deleted file mode 100644 index e76b1b2f..00000000 --- a/dev/Kernel/KernelKit/Defines.hxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -#define KERNELKIT_VERSION "1.02" diff --git a/dev/Kernel/KernelKit/DeviceManager.hxx b/dev/Kernel/KernelKit/DeviceManager.hxx deleted file mode 100644 index d9497da8..00000000 --- a/dev/Kernel/KernelKit/DeviceManager.hxx +++ /dev/null @@ -1,129 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/* ------------------------------------------- - - Revision History: - - 31/01/24: Add kDeviceCnt (amlel) - - ------------------------------------------- */ - -#pragma once - -/* Kernel device interface manager. */ -/* @file KernelKit/DeviceManager.hpp */ -/* @brief Device abstraction and I/O buffer. */ - -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Ref.hxx> - -// Last Rev -// Wed, Apr 3, 2024 9:09:41 AM - -namespace Kernel -{ - template <typename T> - class DeviceInterface; - - template <typename T> - class DeviceInterface - { - public: - explicit DeviceInterface(void (*Out)(T), void (*In)(T)) - : fOut(Out), fIn(In) - { - } - - virtual ~DeviceInterface() = default; - - public: - DeviceInterface& operator=(const DeviceInterface<T>&) = default; - DeviceInterface(const DeviceInterface<T>&) = default; - - public: - virtual DeviceInterface<T>& operator<<(T Data) - { - fOut(Data); - return *this; - } - - virtual DeviceInterface<T>& operator>>(T Data) - { - fIn(Data); - return *this; - } - - virtual const char* Name() const - { - return "DeviceInterface"; - } - - operator bool() - { - return fOut && fIn; - } - bool operator!() - { - return !fOut || !fIn; - } - - private: - void (*fOut)(T Data) = {nullptr}; - void (*fIn)(T Data) = {nullptr}; - }; - - /// - /// @brief Input Output Buffer - /// Used mainly to communicate between hardware. - /// - template <typename T> - class IOBuf final - { - public: - explicit IOBuf(T Dat) - : fData(Dat) - { - // at least pass something valid when instancating this struct. - MUST_PASS(Dat); - } - - IOBuf& operator=(const IOBuf<T>&) = default; - IOBuf(const IOBuf<T>&) = default; - - ~IOBuf() = default; - - public: - template <typename R> - R operator->() const - { - return fData; - } - - template <typename R> - R& operator[](Size index) const - { - return fData[index]; - } - - private: - T fData; - }; - - ///! @brief Device enum types. - enum - { - kDeviceTypeIDE, - kDeviceTypeEthernet, - kDeviceTypeWiFi, - kDeviceTypeRS232, - kDeviceTypeSCSI, - kDeviceTypeSHCI, - kDeviceTypeUSB, - kDeviceTypeMedia, - kDeviceTypeCount, - }; -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/DriveManager.hxx b/dev/Kernel/KernelKit/DriveManager.hxx deleted file mode 100644 index 6485f995..00000000 --- a/dev/Kernel/KernelKit/DriveManager.hxx +++ /dev/null @@ -1,149 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __INC_DRIVE_MANAGER_HXX__ -#define __INC_DRIVE_MANAGER_HXX__ - -#include <KernelKit/ProcessScheduler.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/DeviceManager.hxx> -#include <KernelKit/LPC.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> - -#define kDriveManagerCount (4U) - -#define kDriveInvalidID (-1) -#define kDriveNameLen (32) - -namespace Kernel -{ - enum - { - kInvalidDrive = -1, - kBlockDevice = 0xAD, - kMassStorage = 0xDA, - kFloppyDisc = 0xCD, - kOpticalDisc = 0xDC, // CD-ROM/DVD-ROM/Blu-Ray - /// combine with below. - kReadOnly = 0x10, // Read only drive - kEPMDrive = 0x11, // Explicit Partition Map. - kEPTDrive = 0x12, // ESP w/ EPM partition. - kMBRDrive = 0x13, // IBM PC classic partition scheme - kDriveCnt = 9, - }; - - typedef Int64 rt_drive_id_type; - - /// @brief Media drive trait type. - struct DriveTrait final - { - Char fName[kDriveNameLen]; // /System, /Boot, //./Devices/USB... - Int32 fKind; // fMassStorage, fFloppy, fOpticalDisc. - rt_drive_id_type fId; // Drive id. - Int32 fFlags; // fReadOnly, fXPMDrive, fXPTDrive - - /// @brief Packet drive (StorageKit compilant.) - struct DrivePacket final - { - VoidPtr fPacketContent; //! packet body. - Char fPacketMime[kDriveNameLen]; //! identify what we're sending. - SizeT fPacketSize; //! packet size - UInt32 fPacketCRC32; //! sanity crc, in case if good is set to false - Boolean fPacketGood; - Lba fLba; - } fPacket; - - Void (*fInput)(DrivePacket* packetPtr); - Void (*fOutput)(DrivePacket* packetPtr); - Void (*fVerify)(DrivePacket* packetPtr); - const Char* (*fDriveKind)(Void); - }; - - ///! drive as a device. - typedef DriveTrait* DriveTraitPtr; - - /** - * @brief Mounted drives interface. - * @note This class has all of it's drive set to nullptr, allocate them using - * GetAddressOf(index). - */ - class MountpointInterface final - { - public: - explicit MountpointInterface() = default; - ~MountpointInterface() = default; - - NEWOS_COPY_DEFAULT(MountpointInterface); - - public: - DriveTrait& A() - { - return mA; - } - DriveTrait& B() - { - return mB; - } - DriveTrait& C() - { - return mC; - } - DriveTrait& D() - { - return mD; - } - - DriveTraitPtr GetAddressOf(Int32 index) - { - ErrLocal() = kErrorSuccess; - - switch (index) - { - case 0: - return &mA; - case 1: - return &mB; - case 2: - return &mC; - case 3: - return &mD; - default: { - ErrLocal() = kErrorNoSuchDisk; - kcout << "newoskrnl: No such disk.\n"; - - break; - } - } - - return nullptr; - } - - private: - DriveTrait mA, mB, mC, mD; - }; - - /// @brief Unimplemented drive. - /// @param pckt - /// @return - Void io_drv_unimplemented(DriveTrait::DrivePacket* pckt); - - /// @brief Gets the drive kind (ATA, SCSI, AHCI...) - /// @param - /// @return the drive kind (ATA, Flash, NVM) - const Char* io_drive_kind(Void); - - /// @brief Makes a new drive. - /// @return the new drive as a trait. - DriveTrait io_construct_drive(void) noexcept; - - /// @brief Fetches the main drive. - /// @return the new drive as a trait. - DriveTrait io_construct_main_drive(void) noexcept; -} // namespace Kernel - -#endif /* ifndef __INC_DRIVE_MANAGER_HXX__ */ diff --git a/dev/Kernel/KernelKit/FileManager.hxx b/dev/Kernel/KernelKit/FileManager.hxx deleted file mode 100644 index 68fa1eb5..00000000 --- a/dev/Kernel/KernelKit/FileManager.hxx +++ /dev/null @@ -1,419 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/* ------------------------------------------- - - Revision History: - - 31/01/24: Update documentation (amlel) - 05/07/24: NewFS support, and fork support, updated constants and specs - as well. - - ------------------------------------------- */ - -#pragma once - -#ifdef __FSKIT_USE_NEWFS__ -#include <FSKit/NewFS.hxx> -#endif // __FSKIT_USE_NEWFS__ - -#include <CompilerKit/CompilerKit.hxx> -#include <HintKit/CompilerHint.hxx> -#include <KernelKit/LPC.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/Stream.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Ref.hxx> - -/// @brief Filesystem manager, abstraction over mounted filesystem. -/// Works like the VFS or IFS. - -#define cRestrictR "r" -#define cRestrictRB "rb" -#define cRestrictW "w" -#define cRestrictWB "rw" -#define cRestrictRWB "rwb" - -#define cRestrictMax 5 - -#define node_cast(PTR) reinterpret_cast<Kernel::NodePtr>(PTR) - -/** - @note Refer to first enum. -*/ -#define cFileOpsCount 4 -#define cFileMimeGeneric "n-application-kind/all" - -/** @brief invalid position. (n-pos) */ -#define kNPos (SizeT)(-1); - -namespace Kernel -{ - enum - { - cFileWriteAll = 100, - cFileReadAll = 101, - cFileReadChunk = 102, - cFileWriteChunk = 103, - cFileIOCnt = (cFileWriteChunk - cFileWriteAll) + 1, - }; - - /// @brief filesystem node generic type. - struct PACKED FMNode final - { - VoidPtr _Unused; - }; - - typedef FMNode* NodePtr; - - /** - @brief Filesystem Manager Interface class - @brief Used to provide common I/O for a specific filesystem. -*/ - class FilesystemManagerInterface - { - public: - explicit FilesystemManagerInterface() = default; - virtual ~FilesystemManagerInterface() = default; - - public: - NEWOS_COPY_DEFAULT(FilesystemManagerInterface); - - public: - /// @brief Mounts a new filesystem into an active state. - /// @param interface the filesystem interface - /// @return - static bool Mount(FilesystemManagerInterface* interface); - - /// @brief Unmounts the active filesystem - /// @return - static FilesystemManagerInterface* Unmount(); - - /// @brief Getter, gets the active filesystem. - /// @return - static FilesystemManagerInterface* GetMounted(); - - public: - virtual NodePtr Create(_Input const char* path) = 0; - virtual NodePtr CreateAlias(_Input const char* path) = 0; - virtual NodePtr CreateDirectory(_Input const char* path) = 0; - - public: - virtual bool Remove(_Input const char* path) = 0; - - public: - virtual NodePtr Open(_Input const char* path, _Input const char* r) = 0; - - public: - virtual Void Write(_Input NodePtr node, _Input VoidPtr data, _Input Int32 flags, _Input SizeT size) = 0; - - virtual _Output VoidPtr Read(_Input NodePtr node, - _Input Int32 flags, - _Input SizeT sz) = 0; - - virtual Void Write(_Input const Char* name, - _Input NodePtr node, - _Input VoidPtr data, - _Input Int32 flags, - _Input SizeT size) = 0; - - virtual _Output VoidPtr Read(_Input const Char* name, - _Input NodePtr node, - _Input Int32 flags, - _Input SizeT sz) = 0; - - public: - virtual bool Seek(_Input NodePtr node, _Input SizeT off) = 0; - - public: - virtual SizeT Tell(_Input NodePtr node) = 0; - virtual bool Rewind(_Input NodePtr node) = 0; - }; - -#ifdef __FSKIT_USE_NEWFS__ - /** - * @brief Based of FilesystemManagerInterface, takes care of managing NewFS - * disks. - */ - class NewFilesystemManager final : public FilesystemManagerInterface - { - public: - explicit NewFilesystemManager(); - ~NewFilesystemManager() override; - - public: - NEWOS_COPY_DEFAULT(NewFilesystemManager); - - public: - NodePtr Create(const Char* path) override; - NodePtr CreateAlias(const Char* path) override; - NodePtr CreateDirectory(const Char* path) override; - - public: - bool Remove(const Char* path) override; - NodePtr Open(const Char* path, const Char* r) override; - Void Write(NodePtr node, VoidPtr data, Int32 flags, SizeT sz) override; - VoidPtr Read(NodePtr node, Int32 flags, SizeT sz) override; - bool Seek(NodePtr node, SizeT off) override; - SizeT Tell(NodePtr node) override; - bool Rewind(NodePtr node) override; - - Void Write(_Input const Char* name, - _Input NodePtr node, - _Input VoidPtr data, - _Input Int32 flags, - _Input SizeT size) override; - - _Output VoidPtr Read(_Input const Char* name, - _Input NodePtr node, - _Input Int32 flags, - _Input SizeT sz) override; - - public: - void SetResourceFork(const char* forkName); - void SetDataFork(const char* forkName); - - /// @brief Get internal parser. - /// @return - NewFSParser* GetParser() noexcept; - - private: - NewFSParser* fImpl{nullptr}; - }; - -#endif // ifdef __FSKIT_USE_NEWFS__ - - /** - * Usable FileStream - * @tparam Encoding file encoding (char, wchar_t...) - * @tparam FSClass Filesystem contract who takes care of it. - */ - template <typename Encoding = char, - typename FSClass = FilesystemManagerInterface> - class FileStream final - { - public: - explicit FileStream(const Encoding* path, const Encoding* restrict_type); - ~FileStream(); - - public: - FileStream& operator=(const FileStream&); - FileStream(const FileStream&); - - public: - ErrorOr<Int64> WriteAll(const VoidPtr data) noexcept - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictWrite && - this->fFileRestrict != eRestrictWriteBinary) - return ErrorOr<Int64>(kErrorInvalidData); - - if (data == nullptr) - return ErrorOr<Int64>(kErrorInvalidData); - - auto man = FSClass::GetMounted(); - - if (man) - { - man->Write(fFile, data, cFileWriteAll); - return ErrorOr<Int64>(0); - } - - return ErrorOr<Int64>(kErrorInvalidData); - } - - VoidPtr ReadAll() noexcept - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictRead && - this->fFileRestrict != eRestrictReadBinary) - return nullptr; - - auto man = FSClass::GetMounted(); - - if (man) - { - VoidPtr ret = man->Read(fFile, cFileReadAll, 0); - return ret; - } - - return nullptr; - } - - ErrorOr<Int64> WriteAll(const char* fName, const VoidPtr data) noexcept - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictWrite && - this->fFileRestrict != eRestrictWriteBinary) - return ErrorOr<Int64>(kErrorInvalidData); - - if (data == nullptr) - return ErrorOr<Int64>(kErrorInvalidData); - - auto man = FSClass::GetMounted(); - - if (man) - { - man->Write(fName, fFile, data, cFileWriteAll); - return ErrorOr<Int64>(0); - } - - return ErrorOr<Int64>(kErrorInvalidData); - } - - VoidPtr Read(const char* fName) noexcept - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictRead && - this->fFileRestrict != eRestrictReadBinary) - return nullptr; - - auto man = FSClass::GetMounted(); - - if (man) - { - VoidPtr ret = man->Read(fName, fFile, cFileReadAll, 0); - return ret; - } - - return nullptr; - } - - VoidPtr Read(SizeT offset, SizeT sz) - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictRead && - this->fFileRestrict != eRestrictReadBinary) - return nullptr; - - auto man = FSClass::GetMounted(); - - if (man) - { - man->Seek(fFile, offset); - auto ret = man->Read(fFile, cFileReadChunk, sz); - - return ret; - } - - return nullptr; - } - - Void Write(SizeT offset, voidPtr data, SizeT sz) - { - if (this->fFileRestrict != eRestrictReadWrite && - this->fFileRestrict != eRestrictReadWriteBinary && - this->fFileRestrict != eRestrictWrite && - this->fFileRestrict != eRestrictWriteBinary) - return; - - auto man = FSClass::GetMounted(); - - if (man) - { - man->Seek(fFile, offset); - man->Write(fFile, data, sz, cFileReadChunk); - } - } - - public: - /// @brief Leak node pointer. - /// @return The node pointer. - NodePtr Leak() - { - return fFile; - } - - /// @brief Leak MIME. - /// @return The MIME. - Char* MIME() noexcept - { - return const_cast<char*>(fMime); - } - - enum - { - eRestrictRead, - eRestrictReadBinary, - eRestrictWrite, - eRestrictWriteBinary, - eRestrictReadWrite, - eRestrictReadWriteBinary, - }; - - private: - NodePtr fFile{nullptr}; - Int32 fFileRestrict{}; - const Char* fMime{cFileMimeGeneric}; - }; - - using FileStreamUTF8 = FileStream<Char>; - using FileStreamUTF16 = FileStream<WideChar>; - - typedef UInt64 CursorType; - - /// @brief constructor - template <typename Encoding, typename Class> - FileStream<Encoding, Class>::FileStream(const Encoding* path, - const Encoding* restrict_type) - : fFile(Class::GetMounted()->Open(path, restrict_type)) - { - static const auto cLength = 255; - - struct StringMap final - { - Char fRestrict[cLength]; - Int32 fMappedTo; - }; - - const SizeT cRestrictCount = cRestrictMax; - const StringMap cRestrictList[] = { - { - .fRestrict = cRestrictR, - .fMappedTo = eRestrictRead, - }, - { - .fRestrict = cRestrictRB, - .fMappedTo = eRestrictReadBinary, - }, - { - .fRestrict = cRestrictRWB, - .fMappedTo = eRestrictReadWriteBinary, - }, - { - .fRestrict = cRestrictW, - .fMappedTo = eRestrictWrite, - }, - { - .fRestrict = cRestrictWB, - .fMappedTo = eRestrictReadWrite, - }}; - - for (SizeT index = 0; index < cRestrictCount; ++index) - { - if (rt_string_cmp(restrict_type, cRestrictList[index].fRestrict, - rt_string_len(cRestrictList[index].fRestrict)) == 0) - { - fFileRestrict = cRestrictList[index].fMappedTo; - break; - } - } - - kcout << "newoskrnl: new file: " << path << ".\r"; - } - - /// @brief destructor - template <typename Encoding, typename Class> - FileStream<Encoding, Class>::~FileStream() - { - delete fFile; - } -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/Framebuffer.hxx b/dev/Kernel/KernelKit/Framebuffer.hxx deleted file mode 100644 index dac9b514..00000000 --- a/dev/Kernel/KernelKit/Framebuffer.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Framebuffer.hpp - Purpose: Framebuffer object. - -------------------------------------------- */ - -#ifndef __INC_FB_HPP__ -#define __INC_FB_HPP__ - -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - enum class FramebufferColorKind : UChar - { - RGB32, - RGB16, - RGB8, - INVALID, - }; - - class FramebufferContext final - { - public: - UIntPtr fBase; - UIntPtr fBpp; - UInt fWidth; - UInt fHeight; - }; - - class Framebuffer final - { - public: - explicit Framebuffer(Ref<FramebufferContext*>& addr); - ~Framebuffer() = default; - - Framebuffer& operator=(const Framebuffer&) = delete; - Framebuffer(const Framebuffer&) = default; - - volatile UIntPtr* operator[](const UIntPtr& pos); - - operator bool(); - - const FramebufferColorKind& Color( - const FramebufferColorKind& colour = FramebufferColorKind::INVALID); - - Ref<FramebufferContext*>& Leak(); - - /// @brief Draws a rectangle inside the fb. - /// @param width the width of it - /// @param height the height of it - /// @param x its x coord. - /// @param y its y coord. - /// @param color the color of it. - /// @return the framebuffer object. - Framebuffer& DrawRect(SizeT width, SizeT height, SizeT x, SizeT y, UInt32 color); - - /// @brief Puts a pixel on the screen. - /// @param x where in X - /// @param y where in Y - /// @param color the color of it. - /// @return the framebuffer object. - Framebuffer& PutPixel(SizeT x, SizeT y, UInt32 color); - - private: - Ref<FramebufferContext*> fFrameBufferAddr; - FramebufferColorKind fColour; - }; - - /***********************************************************************************/ - /// Some common colors. - /***********************************************************************************/ - - extern const UInt32 kRgbRed; - extern const UInt32 kRgbGreen; - extern const UInt32 kRgbBlue; - extern const UInt32 kRgbBlack; - extern const UInt32 kRgbWhite; -} // namespace Kernel - -#endif /* ifndef __INC_FB_HPP__ */ diff --git a/dev/Kernel/KernelKit/Heap.hxx b/dev/Kernel/KernelKit/Heap.hxx deleted file mode 100644 index 0046fc58..00000000 --- a/dev/Kernel/KernelKit/Heap.hxx +++ /dev/null @@ -1,51 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_KERNEL_HEAP_HXX_ -#define _INC_KERNEL_HEAP_HXX_ - -// last-rev 30/01/24 -// file: KernelHeap.hxx -// description: heap allocation for the kernel. - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - /// @brief Declare pointer as free. - /// @param allocatedPtr the pointer. - /// @return - Int32 mm_delete_ke_heap(voidPtr allocatedPtr); - - /// @brief Declare a new size for allocatedPtr. - /// @param allocatedPtr the pointer. - /// @return - voidPtr mm_realloc_ke_heap(voidPtr allocatedPtr, SizeT newSz); - - /// @brief Check if pointer is a valid kernel pointer. - /// @param allocatedPtr the pointer - /// @return if it exists. - Boolean mm_is_valid_heap(VoidPtr allocatedPtr); - - /// @brief allocate chunk of memory. - /// @param sz size of pointer - /// @param rw read write (true to enable it) - /// @param user is it accesible by user processes? - /// @return The newly allocated pointer. - voidPtr mm_new_ke_heap(const SizeT sz, const Bool rw, const Bool user); - - /// @brief Protect the heap with a CRC value. - /// @param allocatedPtr pointer. - /// @return if it valid: point has crc now., otherwise fail. - Boolean mm_protect_ke_heap(VoidPtr allocatedPtr); - - /// @brief Makes a kernel heap page. - /// @param allocatedPtr the page pointer. - /// @return - Int32 mm_make_ke_page(VoidPtr allocatedPtr); -} // namespace Kernel - -#endif // !_INC_KERNEL_HEAP_HXX_ diff --git a/dev/Kernel/KernelKit/LPC.hxx b/dev/Kernel/KernelKit/LPC.hxx deleted file mode 100644 index fec1d637..00000000 --- a/dev/Kernel/KernelKit/LPC.hxx +++ /dev/null @@ -1,56 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -/// @file LPC.hxx -/// @brief Local Process Codes. - -#define ErrLocalIsOk() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() == Kernel::kErrorSuccess) -#define ErrLocalFailed() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() != Kernel::kErrorSuccess) -#define ErrLocal() Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() - -namespace Kernel -{ - typedef Int32 HError; - - inline constexpr HError kErrorSuccess = 0; - inline constexpr HError kErrorExecutable = 33; - inline constexpr HError kErrorExecutableLib = 34; - inline constexpr HError kErrorFileNotFound = 35; - inline constexpr HError kErrorDirectoryNotFound = 36; - inline constexpr HError kErrorDiskReadOnly = 37; - inline constexpr HError kErrorDiskIsFull = 38; - inline constexpr HError kErrorProcessFault = 39; - inline constexpr HError kErrorSocketHangUp = 40; - inline constexpr HError kErrorThreadLocalStorage = 41; - inline constexpr HError kErrorMath = 42; - inline constexpr HError kErrorNoNetwork = 43; - inline constexpr HError kErrorHeapOutOfMemory = 44; - inline constexpr HError kErrorNoSuchDisk = 45; - inline constexpr HError kErrorFileExists = 46; - inline constexpr HError kErrorFormatFailed = 47; - inline constexpr HError kErrorNetworkTimeout = 48; - inline constexpr HError kErrorInternal = 49; - inline constexpr HError kErrorForkAlreadyExists = 50; - inline constexpr HError kErrorOutOfTeamSlot = 51; - inline constexpr HError kErrorHeapNotPresent = 52; - inline constexpr HError kErrorNoEntrypoint = 53; - inline constexpr HError kErrorDiskIsCorrupted = 54; - inline constexpr HError kErrorDisk = 55; - inline constexpr HError kErrorInvalidData = 56; - inline constexpr HError kErrorAsync = 57; - inline constexpr HError kErrorNonBlocking = 58; - inline constexpr HError kErrorIPC = 59; - inline constexpr HError kErrorSign = 60; - inline constexpr HError kErrorInvalidCreds = 61; - inline constexpr HError kErrorUnimplemented = 0; - - Void err_bug_check_raise(void) noexcept; - Boolean err_bug_check(void) noexcept; -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/LoaderInterface.hxx b/dev/Kernel/KernelKit/LoaderInterface.hxx deleted file mode 100644 index 7dcf41d4..00000000 --- a/dev/Kernel/KernelKit/LoaderInterface.hxx +++ /dev/null @@ -1,33 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <CompilerKit/CompilerKit.hxx> -#include <HintKit/CompilerHint.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/ErrorOr.hxx> - -namespace Kernel -{ - /// @brief This interface is used to make loader contracts (MSCOFF, PEF). - /// @author @Amlal-El-Mahrouss - class LoaderInterface - { - public: - explicit LoaderInterface() = default; - virtual ~LoaderInterface() = default; - - NEWOS_COPY_DEFAULT(LoaderInterface); - - public: - virtual _Output const char* AsString() = 0; - virtual _Output const char* MIME() = 0; - virtual _Output const char* Path() = 0; - virtual _Output ErrorOr<VoidPtr> FindStart() = 0; - virtual _Output VoidPtr FindSymbol(_Input const char* name, _Input Int32 kind) = 0; - }; -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/LockDelegate.hxx b/dev/Kernel/KernelKit/LockDelegate.hxx deleted file mode 100644 index d678e3d4..00000000 --- a/dev/Kernel/KernelKit/LockDelegate.hxx +++ /dev/null @@ -1,67 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Atom.hxx> -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - enum - { - kLockDone = 200, - kLockTimedOut, - }; - - /// @brief Lock condition pointer. - typedef Boolean* LockPtr; - - /// @brief Locking delegate class, hangs until limit. - /// @tparam N the amount of cycles to wait. - template <SizeT N> - class LockDelegate final - { - public: - LockDelegate() = delete; - - public: - explicit LockDelegate(LockPtr expr) - { - auto spin = 0U; - - while (spin != N) - { - if (*expr) - { - fLockStatus | kLockDone; - break; - } - } - - if (spin == N) - fLockStatus | kLockTimedOut; - } - - ~LockDelegate() = default; - - LockDelegate& operator=(const LockDelegate&) = delete; - LockDelegate(const LockDelegate&) = delete; - - bool Done() - { - return fLockStatus[kLockDone] == kLockDone; - } - - bool HasTimedOut() - { - return fLockStatus[kLockTimedOut] != kLockTimedOut; - } - - private: - Atom<UInt> fLockStatus; - }; -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/MP.hxx b/dev/Kernel/KernelKit/MP.hxx deleted file mode 100644 index bc94102e..00000000 --- a/dev/Kernel/KernelKit/MP.hxx +++ /dev/null @@ -1,130 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __INC_MP_MANAGER_HPP__ -#define __INC_MP_MANAGER_HPP__ - -#include <ArchKit/ArchKit.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Ref.hxx> - -/// @note Last Rev Sun 28 Jul CET 2024 -/// @note Last Rev Thu, Aug 1, 2024 9:07:38 AM - -#define cMaxHWThreads (8U) - -namespace Kernel -{ - class HardwareThread; - class HardwareThreadScheduler; - - using ThreadID = UInt32; - - 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 - // used by kernel. - kHartBoot, // The core we booted from, the mama. - kInvalidHart, - kHartCount, - }; - - typedef enum ThreadKind SmThreadKind; - typedef ThreadID SmThreadID; - - /// - /// \name HardwareThread - /// \brief Abstraction over the CPU's core, used to run processes or threads. - /// - - class HardwareThread final - { - public: - explicit HardwareThread(); - ~HardwareThread(); - - public: - NEWOS_COPY_DEFAULT(HardwareThread) - - public: - operator bool(); - - public: - void Wake(const bool wakeup = false) noexcept; - void Busy(const bool busy = false) noexcept; - - public: - bool Switch(HAL::StackFrame* stack); - bool IsWakeup() noexcept; - - public: - HAL::StackFrame* StackFrame() noexcept; - const ThreadKind& Kind() noexcept; - bool IsBusy() noexcept; - const ThreadID& ID() noexcept; - - private: - HAL::StackFrame* fStack{nullptr}; - ThreadKind fKind{ThreadKind::kInvalidHart}; - ThreadID fID{0}; - ProcessID fSourcePID{-1}; - bool fWakeup{false}; - bool fBusy{false}; - - private: - friend class HardwareThreadScheduler; - }; - - /// - /// \name HardwareThreadScheduler - /// \brief Class to manage the thread scheduling. - /// - - class HardwareThreadScheduler final - { - private: - explicit HardwareThreadScheduler(); - - public: - ~HardwareThreadScheduler(); - NEWOS_COPY_DEFAULT(HardwareThreadScheduler); - - public: - bool Switch(HAL::StackFramePtr the); - HAL::StackFramePtr Leak() noexcept; - - public: - Ref<HardwareThread*> operator[](const SizeT& idx); - bool operator!() noexcept; - operator bool() noexcept; - - public: - /// @brief Shared instance of the MP Manager. - /// @return the reference to the mp manager class. - static Ref<HardwareThreadScheduler> The(); - - public: - /// @brief Returns the amount of threads present in the system. - /// @returns SizeT the amount of cores present. - SizeT Count() noexcept; - - private: - Array<HardwareThread, cMaxHWThreads> fThreadList; - ThreadID fCurrentThread{0}; - }; - - /// @brief wakes up thread. - /// wakes up thread from hang. - Void mp_wakeup_thread(HAL::StackFramePtr stack); - - /// @brief makes thread sleep. - /// hooks and hangs thread to prevent code from executing. - Void mp_hang_thread(HAL::StackFramePtr stack); -} // namespace Kernel - -#endif // !__INC_MP_MANAGER_HPP__ diff --git a/dev/Kernel/KernelKit/MSDOS.hxx b/dev/Kernel/KernelKit/MSDOS.hxx deleted file mode 100644 index 6ce11cbd..00000000 --- a/dev/Kernel/KernelKit/MSDOS.hxx +++ /dev/null @@ -1,52 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: MSDOS.hpp - Purpose: MS-DOS header for Kernel. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#ifndef __MSDOS_EXEC__ -#define __MSDOS_EXEC__ - -#include <KernelKit/PE.hxx> -#include <NewKit/Defines.hxx> - -// Last Rev -// Sat Feb 24 CET 2024 - -#define kMagMz0 'M' -#define kMagMz1 'Z' - -typedef Kernel::UInt32 DosWord; -typedef Kernel::Long DosLong; - -typedef struct _DosHeader -{ - Kernel::UInt8 eMagic[2]; - DosWord eMagLen; - DosWord ePagesCount; - DosWord eCrlc; - DosWord eCParHdr; - DosWord eMinAlloc; - DosWord eMaxAlloc; - DosWord eStackSeg; - DosWord eStackPtr; - DosWord eChksum; - DosWord eIp; - DosWord eCs; - DosWord eLfarlc; - DosWord eOvno; - DosWord eRes[4]; - DosWord eOemid; - DosWord eOeminfo; - DosWord eRes2[10]; - DosLong eLfanew; -} DosHeader, *DosHeaderPtr; - -#endif /* ifndef __MSDOS_EXEC__ */ diff --git a/dev/Kernel/KernelKit/PCI/Database.hxx b/dev/Kernel/KernelKit/PCI/Database.hxx deleted file mode 100644 index c5f3c953..00000000 --- a/dev/Kernel/KernelKit/PCI/Database.hxx +++ /dev/null @@ -1,38 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <KernelKit/PCI/Device.hxx> -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - namespace Types - { - // https://wiki.osdev.org/PCI - enum class PciDeviceKind : UChar - { - MassStorageController = 0x1, - NetworkController = 0x2, - DisplayController = 0x3, - MultimediaController = 0x4, - MemoryController = 0x5, - Bridge = 0x6, - CommunicationController = 0x7, - GenericSystemPeripheral = 0x8, - InputDeviceController = 0x9, - DockingStation = 0xa, - Processor = 0xb, - SerialBusController = 0xc, - WirelessController = 0xd, - IntelligentController = 0xe, - SatelliteCommunicationsController = 0xf, - CoProcessor = 0x40, - Unassgined = 0xf, - Invalid = Unassgined, - }; - } // namespace Types -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/PCI/Device.hxx b/dev/Kernel/KernelKit/PCI/Device.hxx deleted file mode 100644 index a562219a..00000000 --- a/dev/Kernel/KernelKit/PCI/Device.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel::PCI -{ - enum class PciConfigKind : UShort - { - ConfigAddress = 0xCF8, - ConfigData = 0xCFC, - Invalid = 0xFFF - }; - - class Device final - { - public: - Device() = default; - - public: - explicit Device(UShort bus, UShort device, UShort function, UShort bar); - - Device& operator=(const Device&) = default; - - Device(const Device&) = default; - - ~Device(); - - public: - UInt Read(UInt bar, Size szData); - void Write(UInt bar, UIntPtr data, Size szData); - - public: - operator bool(); - - public: - template <typename T> - UInt Read(UInt bar) - { - static_assert(sizeof(T) <= 4, "64-bit PCI addressing is unsupported"); - return Read(bar, sizeof(T)); - } - - template <typename T> - void Write(UInt bar, UIntPtr data) - { - static_assert(sizeof(T) <= 4, "64-bit PCI addressing is unsupported"); - Write(bar, data, sizeof(T)); - } - - public: - UShort DeviceId(); - UShort VendorId(); - UShort InterfaceId(); - UChar Class(); - UChar Subclass(); - UChar ProgIf(); - UChar HeaderType(); - - public: - void EnableMmio(); - void BecomeBusMaster(); // for PCI-DMA, PC-DMA does not need that. - - UShort Vendor(); - - private: - UShort fBus; - UShort fDevice; - UShort fFunction; - UShort fBar; - }; -} // namespace Kernel::PCI - -EXTERN_C void NewOSPCISetCfgTarget(Kernel::UInt bar); -EXTERN_C Kernel::UInt NewOSPCIReadRaw(Kernel::UInt bar); diff --git a/dev/Kernel/KernelKit/PCI/Dma.hxx b/dev/Kernel/KernelKit/PCI/Dma.hxx deleted file mode 100644 index 70292c19..00000000 --- a/dev/Kernel/KernelKit/PCI/Dma.hxx +++ /dev/null @@ -1,81 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DeviceManager.hxx> -#include <KernelKit/PCI/Device.hxx> -#include <NewKit/Array.hxx> -#include <NewKit/OwnPtr.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - enum class DmaKind - { - PCI, // Bus mastering is required to be turned on. Basiaclly a request - // control system. 64-Bit access depends on the PAE bit and the device - // (if Double Address Cycle is available) - ISA, // Four DMA channels 0-3; 8 bit transfers and only a megabyte of RAM. - Invalid, - }; - - class DMAWrapper final - { - public: - explicit DMAWrapper() = delete; - - public: - explicit DMAWrapper(nullPtr) = delete; - explicit DMAWrapper(voidPtr Ptr, DmaKind Kind = DmaKind::PCI) - : fAddress(Ptr), fKind(Kind) - { - } - - public: - DMAWrapper& operator=(voidPtr Ptr); - - public: - DMAWrapper& operator=(const DMAWrapper&) = default; - DMAWrapper(const DMAWrapper&) = default; - - public: - ~DMAWrapper() = default; - - template <class T> - T* operator->(); - - template <class T> - T* Get(const UIntPtr off = 0); - - public: - operator bool(); - bool operator!(); - - public: - bool Write(const UIntPtr& bit, const UIntPtr& offset); - UIntPtr Read(const UIntPtr& offset); - Boolean Check(UIntPtr offset) const; - - public: - UIntPtr operator[](const UIntPtr& offset); - - private: - voidPtr fAddress{nullptr}; - DmaKind fKind{DmaKind::Invalid}; - - private: - friend class DMAFactory; - }; - - class DMAFactory final - { - public: - static OwnPtr<IOBuf<Char*>> Construct(OwnPtr<DMAWrapper>& dma); - }; -} // namespace Kernel - -#include <KernelKit/PCI/Dma.inl> diff --git a/dev/Kernel/KernelKit/PCI/Dma.inl b/dev/Kernel/KernelKit/PCI/Dma.inl deleted file mode 100644 index 1c164af8..00000000 --- a/dev/Kernel/KernelKit/PCI/Dma.inl +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -namespace Kernel -{ - template <class T> - T* DMAWrapper::operator->() - { - return fAddress; - } - - template <class T> - T* DMAWrapper::Get(const UIntPtr offset) - { - return reinterpret_cast<T*>((UIntPtr)fAddress + offset); - } -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/PCI/Express.hxx b/dev/Kernel/KernelKit/PCI/Express.hxx deleted file mode 100644 index 1d6a86d0..00000000 --- a/dev/Kernel/KernelKit/PCI/Express.hxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -#define PCI_EXPRESS_BUS_COUNT (4096) diff --git a/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl b/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl deleted file mode 100644 index b0252e63..00000000 --- a/dev/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl +++ /dev/null @@ -1,54 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: IO-Impl-AMD64.hpp - Purpose: I/O for AMD64. - - Revision History: - - 30/01/24: Add file. (amlel) - 02/02/24: Update I/O routines. (amlel) - -------------------------------------------- */ - -namespace Kernel -{ - template <SizeT Sz> - template <typename T> - T IOArray<Sz>::In(SizeT index) - { - switch (sizeof(T)) - { -#ifdef __NEWOS_AMD64__ - case 4: - return HAL::In32(fPorts[index].Leak()); - case 2: - return HAL::In16(fPorts[index].Leak()); - case 1: - return HAL::In8(fPorts[index].Leak()); -#endif - default: - return 0xFFFF; - } - } - - template <SizeT Sz> - template <typename T> - void IOArray<Sz>::Out(SizeT index, T value) - { - switch (sizeof(T)) - { -#ifdef __NEWOS_AMD64__ - case 4: - HAL::Out32(fPorts[index].Leak(), value); - case 2: - HAL::Out16(fPorts[index].Leak(), value); - case 1: - HAL::Out8(fPorts[index].Leak(), value); -#endif - default: - break; - } - } -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/PCI/IO.hxx b/dev/Kernel/KernelKit/PCI/IO.hxx deleted file mode 100644 index a86bcc52..00000000 --- a/dev/Kernel/KernelKit/PCI/IO.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <ArchKit/ArchKit.hxx> -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - template <SizeT Sz> - class IOArray final - { - public: - IOArray() = delete; - - IOArray(nullPtr) = delete; - - explicit IOArray(Array<UShort, Sz>& ports) - : fPorts(ports) - { - } - ~IOArray() - { - } - - IOArray& operator=(const IOArray&) = default; - - IOArray(const IOArray&) = default; - - operator bool() - { - return !fPorts.Empty(); - } - - public: - template <typename T> - T In(SizeT index); - - template <typename T> - void Out(SizeT index, T value); - - private: - Array<UShort, Sz> fPorts; - }; - - using IOArray16 = IOArray<16>; -} // namespace Kernel - -#ifdef __x86_64__ -#include <KernelKit/PCI/IO-Impl-AMD64.inl> -#else -#error Please provide platform specific code for the I/O -#endif // ifdef __x86_64__ diff --git a/dev/Kernel/KernelKit/PCI/Iterator.hxx b/dev/Kernel/KernelKit/PCI/Iterator.hxx deleted file mode 100644 index 5f2ca089..00000000 --- a/dev/Kernel/KernelKit/PCI/Iterator.hxx +++ /dev/null @@ -1,43 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __PCI_ITERATOR_HPP__ -#define __PCI_ITERATOR_HPP__ - -#include <KernelKit/PCI/Database.hxx> -#include <KernelKit/PCI/Device.hxx> -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -#define NEWOS_BUS_COUNT (256) -#define NEWOS_DEVICE_COUNT (33) -#define NEWOS_FUNCTION_COUNT (8) - -namespace Kernel::PCI -{ - class Iterator final - { - public: - Iterator() = delete; - - public: - explicit Iterator(const Types::PciDeviceKind& deviceType); - - Iterator& operator=(const Iterator&) = default; - Iterator(const Iterator&) = default; - - ~Iterator(); - - public: - Ref<PCI::Device> operator[](const Size& sz); - - private: - Array<PCI::Device, NEWOS_BUS_COUNT> fDevices; - }; -} // namespace Kernel::PCI - -#endif // __PCI_ITERATOR_HPP__ diff --git a/dev/Kernel/KernelKit/PCI/PCI.hxx b/dev/Kernel/KernelKit/PCI/PCI.hxx deleted file mode 100644 index 8654defa..00000000 --- a/dev/Kernel/KernelKit/PCI/PCI.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -#define cPCIConfigAddressPort (0xCF8) -#define cPCIConfigDataPort (0xCFC) - -#define cPCIDeviceCount (32) -#define cPCIFuncCount (8) -#define cPCIBusCount (255) - -namespace Kernel::PCI -{ - // model - struct DeviceHeader - { - UInt16 VendorId; - UInt16 DeviceId; - UInt8 Command; - UInt8 Status; - UInt8 RevisionId; - UInt8 ProgIf; - UInt8 SubClass; - UInt8 Class; - UInt8 CacheLineSz; - UInt8 LatencyTimer; - UInt8 HeaderType; - UInt8 Bist; - UInt8 Bus; - UInt8 Device; - UInt8 Function; - }; - - namespace Detail - { - class BAR - { - public: - UIntPtr BAR; - SizeT Size; - }; - } // namespace Detail - - class BAR - { - public: - Detail::BAR BAR1; - Detail::BAR BAR2; - Detail::BAR BAR3; - Detail::BAR BAR4; - Detail::BAR BAR5; - }; -} // namespace Kernel::PCI diff --git a/dev/Kernel/KernelKit/PE.hxx b/dev/Kernel/KernelKit/PE.hxx deleted file mode 100644 index 11cc564e..00000000 --- a/dev/Kernel/KernelKit/PE.hxx +++ /dev/null @@ -1,137 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: PE.hxx - Purpose: Portable Executable for Kernel. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#ifndef __KERNELKIT_INC_PE_HXX__ -#define __KERNELKIT_INC_PE_HXX__ - -#include <NewKit/Defines.hxx> - -#define kPeMagic 0x00004550 - -#define kMagPE32 0x010b -#define kMagPE64 0x020b - -#define kPeMachineAMD64 0x8664 -#define kPeMachineARM64 0xaa64 - -typedef struct ExecHeader final -{ - Kernel::UInt32 mSignature; - Kernel::UInt16 mMachine; - Kernel::UInt16 mNumberOfSections; - Kernel::UInt32 mTimeDateStamp; - Kernel::UInt32 mPointerToSymbolTable; - Kernel::UInt32 mNumberOfSymbols; - Kernel::UInt16 mSizeOfOptionalHeader; - Kernel::UInt16 mCharacteristics; -} ExecHeader, *ExecHeaderPtr; - -typedef struct ExecOptionalHeader final -{ - Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) - Kernel::UInt8 mMajorLinkerVersion; - Kernel::UInt8 mMinorLinkerVersion; - Kernel::UInt32 mSizeOfCode; - Kernel::UInt32 mSizeOfInitializedData; - Kernel::UInt32 mSizeOfUninitializedData; - Kernel::UInt32 mAddressOfEntryPoint; - Kernel::UInt32 mBaseOfCode; - Kernel::UInt32 mBaseOfData; - Kernel::UInt32 mImageBase; - Kernel::UInt32 mSectionAlignment; - Kernel::UInt32 mFileAlignment; - Kernel::UInt16 mMajorOperatingSystemVersion; - Kernel::UInt16 mMinorOperatingSystemVersion; - Kernel::UInt16 mMajorImageVersion; - Kernel::UInt16 mMinorImageVersion; - Kernel::UInt16 mMajorSubsystemVersion; - Kernel::UInt16 mMinorSubsystemVersion; - Kernel::UInt32 mWin32VersionValue; - Kernel::UInt32 mSizeOfImage; - Kernel::UInt32 mSizeOfHeaders; - Kernel::UInt32 mCheckSum; - Kernel::UInt16 mSubsystem; - Kernel::UInt16 mDllCharacteristics; - Kernel::UInt32 mSizeOfStackReserve; - Kernel::UInt32 mSizeOfStackCommit; - Kernel::UInt32 mSizeOfHeapReserve; - Kernel::UInt32 mSizeOfHeapCommit; - Kernel::UInt32 mLoaderFlags; - Kernel::UInt32 mNumberOfRvaAndSizes; -} ExecOptionalHeader, *ExecOptionalHeaderPtr; - -typedef struct ExecSectionHeader final -{ - Kernel::Char mName[8]; - Kernel::UInt32 mVirtualSize; - Kernel::UInt32 mVirtualAddress; - Kernel::UInt32 mSizeOfRawData; - Kernel::UInt32 mPointerToRawData; - Kernel::UInt32 mPointerToRelocations; - Kernel::UInt32 mPointerToLineNumbers; - Kernel::UInt16 mNumberOfRelocations; - Kernel::UInt16 mNumberOfLinenumbers; - Kernel::UInt32 mCharacteristics; -} ExecSectionHeader, *ExecSectionHeaderPtr; - -enum kExecDataDirParams -{ - kExecExport, - kExecImport, - kExecInvalid, - kExecCount, -}; - -typedef struct ExecExportDirectory -{ - Kernel::UInt32 mCharacteristics; - Kernel::UInt32 mTimeDateStamp; - Kernel::UInt16 mMajorVersion; - Kernel::UInt16 mMinorVersion; - Kernel::UInt32 mName; - Kernel::UInt32 mBase; - Kernel::UInt32 mNumberOfFunctions; - Kernel::UInt32 mNumberOfNames; - Kernel::UInt32 mAddressOfFunctions; // export table rva - Kernel::UInt32 mAddressOfNames; - Kernel::UInt32 mAddressOfNameOrdinal; // ordinal table rva -} ExecExportDirectory, *ExecExportDirectoryPtr; - -typedef struct ExecImportDirectory -{ - union { - Kernel::UInt32 mCharacteristics; - Kernel::UInt32 mOriginalFirstThunk; - }; - Kernel::UInt32 mTimeDateStamp; - Kernel::UInt32 mForwarderChain; - Kernel::UInt32 mNameRva; - Kernel::UInt32 mThunkTableRva; -} ExecImportDirectory, *ExecImportDirectoryPtr; - -typedef struct ExecDataDirectory { - Kernel::UInt32 VirtualAddress; - Kernel::UInt32 Size; -} ExecDataDirectory, *ExecDataDirectoryPtr; - -typedef struct ExecImageHeader { - ExecHeader mHeader; - ExecOptionalHeader mOptHdr; -} ExecImageHeader, *ExecImageHeaderPtr; - -enum -{ - eUserSection = 0x00000020, -}; - -#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */ diff --git a/dev/Kernel/KernelKit/PECodeManager.hxx b/dev/Kernel/KernelKit/PECodeManager.hxx deleted file mode 100644 index f42c7c21..00000000 --- a/dev/Kernel/KernelKit/PECodeManager.hxx +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: PECodeManager.hxx - Purpose: PE32+ Code Manager and Shared Objects. - - Revision History: - - 12/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -//////////////////////////////////////////////////// - -// LAST REV: Mon Feb 12 13:52:01 CET 2024 - -//////////////////////////////////////////////////// - -#include <KernelKit/PE.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/String.hxx> diff --git a/dev/Kernel/KernelKit/PEF.hxx b/dev/Kernel/KernelKit/PEF.hxx deleted file mode 100644 index d02cd4f9..00000000 --- a/dev/Kernel/KernelKit/PEF.hxx +++ /dev/null @@ -1,115 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: PEF.hxx - Purpose: Preferred Executable Format for Kernel. - - Revision History: - - ?/?/23: Added file (amlel) - -------------------------------------------- */ - -#ifndef __KERNELKIT_INC_PEF_HXX__ -#define __KERNELKIT_INC_PEF_HXX__ - -#include <CompilerKit/CompilerKit.hxx> -#include <KernelKit/LoaderInterface.hxx> -#include <NewKit/Defines.hxx> - -#define kPefMagic "Joy!" -#define kPefMagicFat "yoJ!" - -#define kPefMagicLen 5 - -#define kPefVersion 3 -#define kPefNameLen 255 - -namespace Kernel -{ - enum - { - kPefArchIntel86S, - kPefArchAMD64, - kPefArchRISCV, - kPefArch64x0, /* 64x0. ISA */ - kPefArch32x0, /* 32x0. ISA */ - kPefArchPowerPC, - kPefArchARM64, - kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1, - kPefArchInvalid = 0xFF, - }; - - enum - { - kPefSubArchAMD, - kPefSubArchIntel, - kPefSubArchGeneric, - kPefSubArchIBM, - }; - - enum - { - kPefKindExec = 1, /* .exe */ - kPefKindSharedObject = 2, /* .lib */ - kPefKindObject = 4, /* .obj */ - kPefKindDebug = 5, /* .dbg */ - kPefKindDriver = 6, - kPefKindCount, - }; - - typedef struct PEFContainer final - { - Char Magic[kPefMagicLen]; - UInt32 Linker; - UInt32 Version; - UInt32 Kind; - UInt32 Abi; - UInt32 Cpu; - UInt32 SubCpu; /* Cpu specific information */ - UIntPtr Start; - SizeT HdrSz; /* Size of header */ - SizeT Count; /* container header count */ - } PACKED PEFContainer; - - /* First PEFCommandHeader starts after PEFContainer */ - - typedef struct PEFCommandHeader final - { - Char Name[kPefNameLen]; /* container name */ - UInt32 Cpu; /* container cpu */ - UInt32 SubCpu; /* container sub-cpu */ - UInt32 Flags; /* container flags */ - UInt16 Kind; /* container kind */ - UIntPtr Offset; /* content offset */ - SizeT Size; /* content Size */ - } PACKED PEFCommandHeader; - - enum - { - kPefCode = 0xC, - kPefData = 0xD, - kPefZero = 0xE, - kPefLinkerID = 0x1, - }; -} // namespace Kernel - -/* not mandatory, only for non fork based filesystems */ -#define kPefExt ".exe" -#define kPefDylibExt ".dll" -#define kPefLibExt ".lib" -#define kPefObjectExt ".obj" -#define kPefDebugExt ".dbg" - -// Kernel System Binary Interface. -#define kPefAbi (0x5046) - -#define kPefBaseOrigin (0x40000000) - -#define kPefStart "__ImageStart" - -#define kPefForkKind kPefMagic -#define kPefForkKindFAT kPefMagicFat - -#endif /* ifndef __KERNELKIT_INC_PEF_HXX__ */ diff --git a/dev/Kernel/KernelKit/PEFCodeManager.hxx b/dev/Kernel/KernelKit/PEFCodeManager.hxx deleted file mode 100644 index 325ca9a3..00000000 --- a/dev/Kernel/KernelKit/PEFCodeManager.hxx +++ /dev/null @@ -1,62 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_CODE_MANAGER_PEF_HXX_ -#define _INC_CODE_MANAGER_PEF_HXX_ - -#include <KernelKit/PEF.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/String.hxx> -#include <KernelKit/FileManager.hxx> - -#define kPefApplicationMime "application/x-newos-exec" - -namespace Kernel -{ - /// - /// \name PEFLoader - /// \brief PEF loader class. - /// - class PEFLoader : public LoaderInterface - { - private: - explicit PEFLoader() = delete; - - public: - explicit PEFLoader(const VoidPtr blob); - explicit PEFLoader(const Char* path); - ~PEFLoader() override; - - public: - NEWOS_COPY_DEFAULT(PEFLoader); - - public: - const char* Path() override; - const char* AsString() override; - const char* MIME() override; - - public: - ErrorOr<VoidPtr> FindStart() override; - VoidPtr FindSymbol(const char* name, Int32 kind) override; - - public: - bool IsLoaded() noexcept; - - private: - OwnPtr<FileStream<Char>> fFile; - Ref<StringView> fPath; - VoidPtr fCachedBlob; - bool fFatBinary; - bool fBad; - }; - - namespace Utils - { - bool execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept; - } // namespace Utils -} // namespace Kernel - -#endif // ifndef _INC_CODE_MANAGER_PEF_HXX_ diff --git a/dev/Kernel/KernelKit/PEFSharedObject.hxx b/dev/Kernel/KernelKit/PEFSharedObject.hxx deleted file mode 100644 index 2ce87c1d..00000000 --- a/dev/Kernel/KernelKit/PEFSharedObject.hxx +++ /dev/null @@ -1,118 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * ======================================================== - */ - -#ifndef __KERNELKIT_SHARED_OBJECT_HXX__ -#define __KERNELKIT_SHARED_OBJECT_HXX__ - -#include <KernelKit/LoaderInterface.hxx> -#include <KernelKit/PEF.hxx> -#include <KernelKit/PEFCodeManager.hxx> -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - /// @brief Pure implementation, missing method/function handler. - extern "C" void __mh_purecall(void); - - /** - * @brief Shared Library class - * Load library from this class - */ - class PEFSharedObjectInterface final - { - public: - struct PEF_SHARED_OBJECT_TRAITS final - { - VoidPtr fImageObject{nullptr}; - VoidPtr fImageEntrypointOffset{nullptr}; - - Bool IsValid() { return fImageObject && fImageEntrypointOffset; } - }; - - public: - explicit PEFSharedObjectInterface() = default; - ~PEFSharedObjectInterface() = default; - - public: - NEWOS_COPY_DEFAULT(PEFSharedObjectInterface); - - private: - PEF_SHARED_OBJECT_TRAITS* fMounted{nullptr}; - - public: - PEF_SHARED_OBJECT_TRAITS** GetAddressOf() - { - return &fMounted; - } - - PEF_SHARED_OBJECT_TRAITS* Get() - { - return fMounted; - } - - public: - void Mount(PEF_SHARED_OBJECT_TRAITS* to_mount) - { - if (!to_mount || !to_mount->fImageObject) - return; - - fMounted = to_mount; - - if (fLoader && to_mount) - { - delete fLoader; - fLoader = nullptr; - } - - if (!fLoader) - { - fLoader = new PEFLoader(fMounted->fImageObject); - } - } - - void Unmount() - { - if (fMounted) - fMounted = nullptr; - }; - - template <typename SymbolType> - SymbolType Load(const char* symbol_name, SizeT len, Int32 kind) - { - if (symbol_name == nullptr || *symbol_name == 0) - return nullptr; - if (len > kPathLen || len < 1) - return nullptr; - - auto ret = - reinterpret_cast<SymbolType>(fLoader->FindSymbol(symbol_name, kind)); - - if (!ret) - { - if (kind == kPefCode) - return (VoidPtr)__mh_purecall; - - return nullptr; - } - - return ret; - } - - private: - PEFLoader* fLoader{nullptr}; - }; - - typedef PEFSharedObjectInterface* SharedObjectPtr; - - EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header); - EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectPtr lib, Bool* successful); -} // namespace Kernel - -#endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */ - diff --git a/dev/Kernel/KernelKit/ProcessHeap.hxx b/dev/Kernel/KernelKit/ProcessHeap.hxx deleted file mode 100644 index b6b6352c..00000000 --- a/dev/Kernel/KernelKit/ProcessHeap.hxx +++ /dev/null @@ -1,44 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/ArrayList.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/PageManager.hxx> -#include <NewKit/Ref.hxx> -#include <NewKit/Pmm.hxx> - -/// @version 5/11/23 -/// @file ProcessHeap.hxx -/// @brief Process heap allocator. - -#define kProcessHeapMag (0xFAF0FEF0) - -namespace Kernel -{ - typedef enum - { - /// @brief Shared heap. - kProcessHeapShared = 0x4, - /// @brief User and private heap. - kProcessHeapUser = 0x6, - /// @brief Read and Write heap. - kProcessHeapRw = 0x8, - } UserHeapFlags; - - /// @brief Allocate a process heap, no zero out is done here. - /// @param flags the heap's flags. - /// @param len_in_gib the heap in GB. - /// @return The process's heap. - VoidPtr sched_new_heap(Int32 flags, SizeT len_in_gib); - - /// @brief Frees the process heap. - /// @param pointer The process heap pointer. - /// @return status code of the freeing. - Int32 sched_free_heap(voidPtr pointer); -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/ProcessScheduler.hxx b/dev/Kernel/KernelKit/ProcessScheduler.hxx deleted file mode 100644 index 277334cc..00000000 --- a/dev/Kernel/KernelKit/ProcessScheduler.hxx +++ /dev/null @@ -1,302 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_PROCESS_SCHEDULER_HXX_ -#define _INC_PROCESS_SCHEDULER_HXX_ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/LockDelegate.hxx> -#include <KernelKit/User.hxx> -#include <KernelKit/ProcessHeap.hxx> -#include <NewKit/MutableArray.hxx> - -#define kSchedMinMicroTime (AffinityKind::kStandard) -#define kSchedInvalidPID (-1) - -#define kSchedProcessLimitPerTeam (16U) - -//////////////////////////////////////////////////// - -// LAST REV: Mon Feb 12 13:52:01 CET 2024 - -//////////////////////////////////////////////////// - -namespace Kernel -{ - //! @brief Forward declarations. - struct PROCESS_HEADER_BLOCK; - - class PEFSharedObjectInterface; - class ProcessTeam; - class ProcessScheduler; - class ProcessHelper; - - //! @brief Process identifier. - typedef Int64 ProcessID; - - //! @brief Process name length. - inline constexpr SizeT kProcessLen = 256U; - - - //! @brief Process status enum. - enum class ProcessStatus : Int32 - { - kStarting, - kRunning, - kKilled, - kFrozen, - kDead - }; - - //! @brief Affinity is the amount of nano-seconds this process is going - //! to run. - enum class AffinityKind : Int32 - { - kInvalid = 300, - kVeryHigh = 250, - kHigh = 200, - kStandard = 150, - kLowUsage = 100, - kVeryLowUsage = 50, - }; - - // operator overloading. - - inline bool operator<(AffinityKind lhs, AffinityKind rhs) - { - Int32 lhs_int = static_cast<Int>(lhs); - Int32 rhs_int = static_cast<Int>(rhs); - - return lhs_int < rhs_int; - } - - inline bool operator>(AffinityKind lhs, AffinityKind rhs) - { - Int32 lhs_int = static_cast<Int>(lhs); - Int32 rhs_int = static_cast<Int>(rhs); - - return lhs_int > rhs_int; - } - - inline bool operator<=(AffinityKind lhs, AffinityKind rhs) - { - Int32 lhs_int = static_cast<Int>(lhs); - Int32 rhs_int = static_cast<Int>(rhs); - - return lhs_int <= rhs_int; - } - - inline bool operator>=(AffinityKind lhs, AffinityKind rhs) - { - Int32 lhs_int = static_cast<Int>(lhs); - Int32 rhs_int = static_cast<Int>(rhs); - - return lhs_int >= rhs_int; - } - - // end of operator overloading. - - enum ProcessSubsystemEnum - { - eProcessSubsystemSecurity, - eProcessSubsystemNative, - eProcessSubsystemInvalid, - eProcessSubsystemCount, - }; - - using ProcessSubsystem = ProcessSubsystemEnum; - using ProcessTime = UInt64; - using PID = Int64; - - // for permission manager, tells where we run the code. - enum class ProcessLevelRing : Int32 - { - kRingStdUser = 1, - kRingSuperUser = 2, - kRingGuestUser = 5, - kRingCount = 5, - }; - - // Helper types. - using ImagePtr = VoidPtr; - using HeapPtrKind = VoidPtr; - - /// @name PROCESS_HEADER_BLOCK - /// @brief Process Header (PHB). Holds information about the running process. Thread execution the THREAD_INFORMATION_BLOCK. - struct PROCESS_HEADER_BLOCK final - { - public: - explicit PROCESS_HEADER_BLOCK(VoidPtr startImage = nullptr) - : Image(startImage) - { - } - - ~PROCESS_HEADER_BLOCK() = default; - - NEWOS_COPY_DEFAULT(PROCESS_HEADER_BLOCK) - - public: - void SetEntrypoint(UIntPtr& imageStart) noexcept; - const Int32& GetExitCode() noexcept; - - public: - Char Name[kProcessLen] = {"PROCESS"}; - ProcessSubsystem SubSystem{ProcessSubsystem::eProcessSubsystemInvalid}; - ProcessLevelRing Selector{ProcessLevelRing::kRingStdUser}; - HAL::StackFramePtr StackFrame{nullptr}; - AffinityKind Affinity{AffinityKind::kStandard}; - ProcessStatus Status{ProcessStatus::kDead}; - - // Memory, images pointers. - HeapPtrKind HeapCursor{nullptr}; - ImagePtr Image{nullptr}; - HeapPtrKind HeapPtr{nullptr}; - - // shared library handle, reserved for kSharedObjectKind types of executables only. - PEFSharedObjectInterface* DLLPtr{nullptr}; - - // Memory usage. - SizeT UsedMemory{0}; - SizeT FreeMemory{0}; - SizeT SizeMemory{gib_cast(4)}; - - enum - { - kAppKind = 1, - kSharedObjectKind = 2, - kKindCount, - }; - - ProcessTime PTime{0}; - PID ProcessId{kSchedInvalidPID}; - Int32 Kind{kAppKind}; - - public: - //! @brief boolean operator, check status. - operator bool() - { - return Status != ProcessStatus::kDead; - } - - ///! @brief Crashes the app, exits with code ~0. - Void Crash(); - - ///! @brief Exits the app. - Void Exit(const Int32& exit_code = 0); - - ///! @brief TLS allocate. - ///! @param sz size of new ptr. - VoidPtr New(const SizeT& sz); - - ///! @brief TLS free. - ///! @param ptr the pointer to free. - ///! @param sz the size of it. - Boolean Delete(VoidPtr ptr, const SizeT& sz); - - ///! @brief Wakes up threads. - Void Wake(const bool wakeup = false); - - // PROCESS_HEADER_BLOCK getters. - public: - ///! @brief Get the process's name - ///! @example 'C Runtime Library' - const Char* GetProcessName() noexcept; - - //! @brief return local error code of process. - //! @return Int32 local error code. - Int32& GetLocalCode() noexcept; - - const ProcessLevelRing& GetLevelRing() noexcept; - const ProcessStatus& GetStatus() noexcept; - const AffinityKind& GetAffinity() noexcept; - - private: - Int32 fLastExitCode{0}; - Int32 fLocalCode{0}; - - friend ProcessScheduler; - friend ProcessHelper; - }; - - /// \brief Processs Team (contains multiple processes inside it.) - /// Equivalent to a process batch - class ProcessTeam final - { - public: - explicit ProcessTeam() = default; - ~ProcessTeam() = default; - - NEWOS_COPY_DEFAULT(ProcessTeam); - - MutableArray<Ref<PROCESS_HEADER_BLOCK>>& AsArray(); - Ref<PROCESS_HEADER_BLOCK>& AsRef(); - UInt64& Id() noexcept; - - public: - MutableArray<Ref<PROCESS_HEADER_BLOCK>> mProcessList; - Ref<PROCESS_HEADER_BLOCK> mCurrentProcess; - UInt64 mTeamId{0}; - }; - - using ProcessHeaderRef = PROCESS_HEADER_BLOCK*; - - /// @brief PROCESS_HEADER_BLOCK manager class. - /// The main class which you call to schedule an app. - class ProcessScheduler final - { - explicit ProcessScheduler() = default; - - public: - ~ProcessScheduler() = default; - - NEWOS_COPY_DEFAULT(ProcessScheduler) - - operator bool(); - bool operator!(); - - public: - ProcessTeam& CurrentTeam(); - - public: - SizeT Add(Ref<PROCESS_HEADER_BLOCK>& processRef); - Bool Remove(SizeT processSlot); - - public: - Ref<PROCESS_HEADER_BLOCK>& TheCurrent(); - SizeT Run() noexcept; - - public: - STATIC Ref<ProcessScheduler>& The(); - - private: - ProcessTeam mTeam; - }; - - /* - * Just a helper class, which contains some utilities for the scheduler. - */ - - class ProcessHelper final - { - public: - STATIC bool Switch(HAL::StackFrame* newStack, const PID& newPid); - STATIC bool CanBeScheduled(Ref<PROCESS_HEADER_BLOCK>& process); - STATIC PID& TheCurrentPID(); - STATIC SizeT StartScheduling(); - }; - - const Int32& sched_get_exit_code(void) noexcept; -} // namespace Kernel - -#include <KernelKit/ThreadLocalStorage.hxx> - -//////////////////////////////////////////////////// - -// END - -//////////////////////////////////////////////////// - -#endif /* ifndef _INC_PROCESS_SCHEDULER_HXX_ */ diff --git a/dev/Kernel/KernelKit/RLE.hxx b/dev/Kernel/KernelKit/RLE.hxx deleted file mode 100644 index 31e37619..00000000 --- a/dev/Kernel/KernelKit/RLE.hxx +++ /dev/null @@ -1,15 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __KERNELKIT_RLE_HXX__ -#define __KERNELKIT_RLE_HXX__ - -#include <NewKit/Defines.hxx> - -EXTERN_C void rle_compress(void* data, long sz, void* out, long out_sz); -EXTERN_C void rle_decompress(void* data, long sz, void* out, long out_sz); - -#endif // !ifndef __KERNELKIT_RLE_HXX__ diff --git a/dev/Kernel/KernelKit/Semaphore.hxx b/dev/Kernel/KernelKit/Semaphore.hxx deleted file mode 100644 index 33dfe651..00000000 --- a/dev/Kernel/KernelKit/Semaphore.hxx +++ /dev/null @@ -1,43 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <KernelKit/Timer.hxx> -#include <CompilerKit/CompilerKit.hxx> - -namespace Kernel -{ - class PROCESS_HEADER_BLOCK; - - typedef PROCESS_HEADER_BLOCK* ProcessHeaderRef; - - /// @brief Access control class, which locks a task until one is done. - class Semaphore final - { - public: - explicit Semaphore() = default; - ~Semaphore() = default; - - public: - bool IsLocked() const; - bool Unlock() noexcept; - - public: - void WaitForProcess() noexcept; - - public: - bool Lock(PROCESS_HEADER_BLOCK* process); - bool LockOrWait(PROCESS_HEADER_BLOCK* process, HardwareTimerInterface* timer); - - public: - NEWOS_COPY_DEFAULT(Semaphore); - - private: - ProcessHeaderRef fLockingProcess{nullptr}; - }; -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/ThreadLocalStorage.hxx b/dev/Kernel/KernelKit/ThreadLocalStorage.hxx deleted file mode 100644 index afc4940f..00000000 --- a/dev/Kernel/KernelKit/ThreadLocalStorage.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _KERNELKIT_TLS_HPP -#define _KERNELKIT_TLS_HPP - -#include <NewKit/Defines.hxx> - -//! @brief TLS implementation in C++ - -#define kCookieMag0 'H' -#define kCookieMag1 'C' -#define kCookieMag2 'R' - -#define kTLSCookieLen (3U) - -struct THREAD_INFORMATION_BLOCK; - -/// @brief Thread Information Block. -/// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64) -struct PACKED THREAD_INFORMATION_BLOCK final -{ - Kernel::Char f_Cookie[kTLSCookieLen]; // Process cookie. - Kernel::UIntPtr f_Code; // Start address (Instruction Pointer) - Kernel::UIntPtr f_Data; // Allocated Heap for process. - Kernel::UIntPtr f_Stack; // Application Stack pointer. - Kernel::Int32 f_ID; // Thread execution ID. - Kernel::Int64 f_UsedHeapPercent; // used heap in percent. - Kernel::Int64 f_FreeHeapPercent; // heap free in percent. -}; - -///! @brief Cookie Sanity check. -Kernel::Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* the_tib); - -///! @brief new ptr syscall. -template <typename T> -T* tls_new_ptr(void); - -///! @brief delete ptr syscall. -template <typename T> -Kernel::Boolean tls_delete_ptr(T* ptr); - -template <typename T, typename... Args> -T* tls_new_class(Args&&... args); - -/// @brief TLS install TIB and PIB. (syscall) -EXTERN_C void rt_install_tib(THREAD_INFORMATION_BLOCK* TIB, THREAD_INFORMATION_BLOCK* PIB); - -/// @brief TLS check (syscall) -EXTERN_C Kernel::Bool tls_check_syscall_impl(Kernel::VoidPtr TIB) noexcept; - -#include <KernelKit/ThreadLocalStorage.inl> - -// last rev 7/7/24 - -#endif /* ifndef _KERNELKIT_TLS_HPP */ diff --git a/dev/Kernel/KernelKit/ThreadLocalStorage.inl b/dev/Kernel/KernelKit/ThreadLocalStorage.inl deleted file mode 100644 index a5bb1adb..00000000 --- a/dev/Kernel/KernelKit/ThreadLocalStorage.inl +++ /dev/null @@ -1,74 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -//! @brief Allocates a pointer from the process's tls. - -#ifndef _INC_PROCESS_SCHEDULER_HXX_ -#include <KernelKit/ProcessScheduler.hxx> -#endif - -template <typename T> -inline T* tls_new_ptr(void) -{ - using namespace Kernel; - - MUST_PASS(ProcessScheduler::The().Leak().TheCurrent()); - - auto ref_process = ProcessScheduler::The().Leak().TheCurrent(); - - T* pointer = (T*)ref_process.Leak().New(sizeof(T)); - return pointer; -} - -//! @brief TLS delete implementation. -template <typename T> -inline Kernel::Bool tls_delete_ptr(T* ptr) -{ - if (!ptr) - return false; - - using namespace Kernel; - - MUST_PASS(ProcessScheduler::The().Leak().TheCurrent()); - - auto ref_process = ProcessScheduler::The().Leak().TheCurrent(); - return ref_process.Leak().Delete(ptr, sizeof(T)); -} - -/// @brief Allocate a C++ class, and then call the constructor of it. -/// @tparam T -/// @tparam ...Args -/// @param ...args -/// @return -template <typename T, typename... Args> -T* tls_new_class(Args&&... args) -{ - T* ptr = tls_new_ptr<T>(); - - using namespace Kernel; - - if (ptr) - { - *ptr = T(forward(args)...); - return ptr; - } - - return nullptr; -} - -/// @brief Delete a C++ class (call constructor first.) -/// @tparam T -/// @param ptr -/// @return -template <typename T> -inline Kernel::Bool tls_delete_class(T* ptr) -{ - if (!ptr) - return false; - - ptr->~T(); - return tls_delete_ptr(ptr); -} diff --git a/dev/Kernel/KernelKit/Timer.hxx b/dev/Kernel/KernelKit/Timer.hxx deleted file mode 100644 index e6ef5d03..00000000 --- a/dev/Kernel/KernelKit/Timer.hxx +++ /dev/null @@ -1,64 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <ArchKit/ArchKit.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <KernelKit/LPC.hxx> - -namespace Kernel -{ - class HardwareTimer; - class HardwareTimerInterface; - - class HardwareTimerInterface - { - public: - /// @brief Default constructor - explicit HardwareTimerInterface() = default; - virtual ~HardwareTimerInterface() = default; - - public: - NEWOS_COPY_DEFAULT(HardwareTimerInterface); - - public: - virtual Int32 Wait() noexcept; - }; - - class HardwareTimer final : public HardwareTimerInterface - { - public: - explicit HardwareTimer(Int64 seconds); - ~HardwareTimer() override; - - public: - NEWOS_COPY_DEFAULT(HardwareTimer); - - public: - Int32 Wait() noexcept override; - - public: - IntPtr* fDigitalTimer{nullptr}; - Int64 fWaitFor{0}; - }; - - inline Int64 Seconds(Int64 time) - { - if (time < 0) - return 0; - - return 1000 / time; - } - - inline Int64 Milliseconds(Int64 time) - { - if (time < 0) - return 0; - - return 1000 / Seconds(time); - } -} // namespace Kernel diff --git a/dev/Kernel/KernelKit/User.hxx b/dev/Kernel/KernelKit/User.hxx deleted file mode 100644 index 56014c9b..00000000 --- a/dev/Kernel/KernelKit/User.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_PERMISSION_SEL_HXX_ -#define _INC_PERMISSION_SEL_HXX_ - -#include <CompilerKit/CompilerKit.hxx> -#include <KernelKit/LPC.hxx> -#include <NewKit/String.hxx> -#include <NewKit/Defines.hxx> - -// user mode users. -#define kSuperUser "\\Local\\Super" -#define kGuestUser "\\Local\\Guest" - -#define kUsersFile "\\Users\\$MANIFEST" - -#define kMaxUserNameLen (255) -#define kMaxUserTokenLen (4096) - -// hash 'password' -> base64+md5 encoded data -// use this data to then fetch specific data of the user.. - -namespace Kernel -{ - class UserManager; - class User; - - enum class RingKind - { - kRingStdUser = 1, - kRingSuperUser = 2, - kRingGuestUser = 5, - kRingCount = 5, - }; - - class User final - { - public: - explicit User() = delete; - - User(const Int32& sel, const Char* userName); - User(const RingKind& kind, const Char* userName); - - ~User(); - - public: - NEWOS_COPY_DEFAULT(User) - - public: - bool operator==(const User& lhs); - bool operator!=(const User& lhs); - - public: - /// @brief Get software ring - const RingKind& Ring() noexcept; - - /// @brief Get user name - StringView& Name() noexcept; - - /// @brief Is he a standard user? - Bool IsStdUser() noexcept; - - /// @brief Is she a super user? - Bool IsSuperUser() noexcept; - - Bool TrySave(const Char* password) noexcept; - - private: - RingKind fRing{RingKind::kRingStdUser}; - StringView fUserName; - VoidPtr fUserToken{nullptr}; - - friend UserManager; - }; - - class UserManager final - { - UserManager() = default; - ~UserManager() = default; - - User* fCurrentUser = nullptr; - User* fLastLoggedOffUser = nullptr; - - public: - User* fRootUser = nullptr; - - public: - NEWOS_COPY_DELETE(UserManager); - - STATIC UserManager* The() noexcept; - Bool TryLogIn(User* user, const Char* password) noexcept; - User* GetCurrent() noexcept; - Void TryLogOff() noexcept; - }; -} // namespace Kernel - -#endif /* ifndef _INC_PERMISSION_SEL_HXX_ */ diff --git a/dev/Kernel/KernelKit/XCOFF.hxx b/dev/Kernel/KernelKit/XCOFF.hxx deleted file mode 100644 index 82c6dd35..00000000 --- a/dev/Kernel/KernelKit/XCOFF.hxx +++ /dev/null @@ -1,51 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: XCOFF.hpp - Purpose: XCOFF for Kernel. - - Revision History: - - 04/07/24: Added file (amlel) - -------------------------------------------- */ - -#ifndef __INC_XCOFF_HXX__ -#define __INC_XCOFF_HXX__ - -#include <NewKit/Defines.hxx> - -#define cXCOFF64Magic (0x01F7) - -#define cXCOFFRelFlg (0x0001) -#define cXCOFFExecutable (0x0002) -#define cXCOFFLnno (0x0004) -#define cXCOFFLSyms (0x0008) - -struct XCoffFileHeader; -struct XCoffForkHeader; - -/// @brief XCoff file header, meant for POWER apps. -typedef struct XCoffFileHeader -{ - Kernel::UInt16 fMagic; - Kernel::UInt16 fTarget; - Kernel::UInt16 fNumSecs; - Kernel::UInt32 fTimeDat; - Kernel::UIntPtr fSymPtr; - Kernel::UInt32 fNumSyms; - Kernel::UInt16 fOptHdr; // ?: Number of bytes in optional header -} XCoffFileHeader32, XCoffFileHeader64; - -#define cForkNameLen (255) - -/// @brief This the executable manifest fork. -typedef struct XCoffForkHeader -{ - Kernel::Char fPropertiesXMLFork[cForkNameLen]; - Kernel::Char fDynamicLoaderFork[cForkNameLen]; - Kernel::Char fCodeSignFork[cForkNameLen]; -} XCoffForkHeader; - -#endif // ifndef __INC_XCOFF_HXX__ diff --git a/dev/Kernel/KernelKit/compile_flags.txt b/dev/Kernel/KernelKit/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/Kernel/KernelKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/Kernel/KernelRsrc.rsrc b/dev/Kernel/KernelRsrc.rsrc deleted file mode 100644 index 113b2176..00000000 --- a/dev/Kernel/KernelRsrc.rsrc +++ /dev/null @@ -1,25 +0,0 @@ -#include "CompilerKit/Version.hxx" - -1 VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904E4" - BEGIN - VALUE "CompanyName", "ZKA Technologies" - VALUE "FileDescription", "NewOS Kernel." - VALUE "FileVersion", KERNEL_VERSION - VALUE "InternalName", "newoskrnl" - VALUE "LegalCopyright", "(c) ZKA Technologies, all rights reserved." - VALUE "OriginalFilename", "newoskrnl.dll" - VALUE "ProductName", "newoskrnl" - VALUE "ProductVersion", KERNEL_VERSION - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1252 - END -END diff --git a/dev/Kernel/Linker/16x0.json b/dev/Kernel/Linker/16x0.json deleted file mode 100644 index 9c284b53..00000000 --- a/dev/Kernel/Linker/16x0.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "linker": "link.exe", - "executable_type": "kernel", - "output_name": "newoskrnl.dll", - "start_proc": "__ImageStart", - "arch": "16x0", - "format": "PEF" -} diff --git a/dev/Kernel/Linker/32x0.json b/dev/Kernel/Linker/32x0.json deleted file mode 100644 index 05a3db9b..00000000 --- a/dev/Kernel/Linker/32x0.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "linker": "link.exe", - "executable_type": "kernel", - "output_name": "newoskrnl.dll", - "start_proc": "__ImageStart", - "arch": "32x0", - "format": "PEF" -} diff --git a/dev/Kernel/Linker/64x0.json b/dev/Kernel/Linker/64x0.json deleted file mode 100644 index c1d0e388..00000000 --- a/dev/Kernel/Linker/64x0.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "linker": "link.exe", - "executable_type": "kernel", - "output_name": "newoskrnl.dll", - "start_proc": "__ImageStart", - "arch": "64x0", - "format": "PEF" -} diff --git a/dev/Kernel/Linker/arm64.json b/dev/Kernel/Linker/arm64.json deleted file mode 100644 index 99c190bf..00000000 --- a/dev/Kernel/Linker/arm64.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "linker": "link.exe", - "executable_type": "kernel", - "output_name": "newoskrnl.dll", - "start_proc": "__ImageStart", - "arch": "arm64", - "format": "PEF" -} diff --git a/dev/Kernel/Modules/.gitkeep b/dev/Kernel/Modules/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/ACPI/.gitkeep b/dev/Kernel/Modules/ACPI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/ACPI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/ACPI/ACPI.hxx b/dev/Kernel/Modules/ACPI/ACPI.hxx deleted file mode 100644 index 7ea34bd0..00000000 --- a/dev/Kernel/Modules/ACPI/ACPI.hxx +++ /dev/null @@ -1,88 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __ACPI__ -#define __ACPI__ - -/** - https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html -*/ - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - class PACKED SDT - { - public: - Char Signature[4]; - UInt32 Length; - UInt8 Revision; - Char Checksum; - Char OemId[6]; - Char OemTableId[8]; - UInt32 OemRev; - UInt32 CreatorID; - UInt32 CreatorRevision; - }; - - class PACKED RSDP : public SDT - { - public: - UInt32 RsdtAddress; - UIntPtr XsdtAddress; - UInt8 ExtendedChecksum; - UInt8 Reserved0[3]; - }; - - class PACKED ConfigHeader - { - public: - UInt64 BaseAddress; - UInt16 PciSegGroup; - UInt8 StartBus; - UInt8 EndBus; - UInt32 Reserved; - }; - - enum class AddressSpace : UInt8 - { - SystemMemory = 0, - SystemIO = 1, - Pci = 2, - Controller = 3, - SmBus = 4, - Count = 5, - Invalid = 0xFF, - }; - - class PACKED Address - { - public: - AddressSpace AddressSpaceId; - UInt8 RegisterBitWidth; - UInt8 RegisterBitOffset; - UInt8 Reserved; - UIntPtr Address; - }; - - class PACKED RSDT - { - public: - Char Signature[4]; - UInt32 Length; - UInt8 Revision; - Char Checksum; - Char OemId[6]; - Char OemTableId[8]; - UInt32 OemRev; - UInt32 CreatorID; - UInt32 CreatorRevision; - UInt32 AddressArr[]; - }; -} // namespace Kernel - -#endif // !__ACPI__ diff --git a/dev/Kernel/Modules/ACPI/ACPIFactoryInterface.hxx b/dev/Kernel/Modules/ACPI/ACPIFactoryInterface.hxx deleted file mode 100644 index 6405dc1b..00000000 --- a/dev/Kernel/Modules/ACPI/ACPIFactoryInterface.hxx +++ /dev/null @@ -1,60 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __MOD_ACPI_HXX__ -#define __MOD_ACPI_HXX__ - -#include <KernelKit/DebugOutput.hxx> -#include <Modules/ACPI/ACPI.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - class ACPIFactoryInterface; - - typedef ACPIFactoryInterface PowerFactoryInterface; - - class ACPIFactoryInterface final - { - public: - explicit ACPIFactoryInterface(voidPtr rsdPtr); - ~ACPIFactoryInterface() = default; - - ACPIFactoryInterface& operator=(const ACPIFactoryInterface&) = default; - ACPIFactoryInterface(const ACPIFactoryInterface&) = default; - - public: - void Shutdown(); // shutdown - void Reboot(); // soft-reboot - - public: - /// @brief Descriptor find factory. - /// @param signature The signature of the descriptor table (MADT, ACPI...) - /// @return the blob inside an ErrorOr object. - ErrorOr<voidPtr> Find(const char* signature); - - /// @brief Checksum factory. - /// @param checksum the data to checksum - /// @param len it's size - /// @return if it succeed - bool Checksum(const char* checksum, SSizeT len); // watch for collides! - - public: - ErrorOr<voidPtr> operator[](const char* signature) - { - return this->Find(signature); - } - - private: - VoidPtr fRsdp; // pointer to root descriptor. - SSizeT fEntries; // number of entries, -1 tells that no invalid entries were - // found. - }; -} // namespace Kernel - -#endif // !__MOD_ACPI_HXX__ diff --git a/dev/Kernel/Modules/ACPI/compile_flags.txt b/dev/Kernel/Modules/ACPI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/ACPI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/Modules/AHCI/.gitkeep b/dev/Kernel/Modules/AHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/AHCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/AHCI/AHCI.hxx b/dev/Kernel/Modules/AHCI/AHCI.hxx deleted file mode 100644 index 6e6e5dba..00000000 --- a/dev/Kernel/Modules/AHCI/AHCI.hxx +++ /dev/null @@ -1,368 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Defines.hxx - Purpose: AHCI header. - - Revision History: - - 03/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <Modules/ACPI/ACPI.hxx> - -// Forward declarations of structs. - -struct HbaPort; -struct FisData; -struct FisRegD2H; -struct FisRegH2D; - -/// @brief Frame information type. -enum -{ - kFISTypeRegH2D = 0x27, // Register FIS - host to device - kFISTypeRegD2H = 0x34, // Register FIS - device to host - kFISTypeDMAAct = 0x39, // DMA activate FIS - device to host - kFISTypeDMASetup = 0x41, // DMA setup FIS - bidirectional - kFISTypeData = 0x46, // Data FIS - bidirectional - kFISTypeBIST = 0x58, // BIST activate FIS - bidirectional - kFISTypePIOSetup = 0x5F, // PIO setup FIS - device to host - kFISTypeDevBits = 0xA1, // Set device bits FIS - device to host -}; - -enum -{ - kAHCICmdIdentify = 0xEC, - kAHCICmdReadDma = 0xC8, - kAHCICmdReadDmaEx = 0x25, - kAHCICmdWriteDma = 0xCA, - kAHCICmdWriteDmaEx = 0x35 -}; - -typedef struct FisRegH2D final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_REG_H2D - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 3; // Reserved - Kernel::UInt8 CmdOrCtrl : 1; // 1: Command, 0: Control - - Kernel::UInt8 Command; // Command register - Kernel::UInt8 Featurel; // Feature register, 7:0 - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 FeatureHigh; // Feature register, 15:8 - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Icc; // Isochronous command completion - Kernel::UInt8 Control; // Control register - - // DWORD 4 - Kernel::UInt8 Reserved1[4]; // Reserved -} FisRegH2D; - -typedef struct FisRegD2H final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_REG_D2H - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 2; // Reserved - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 Reserved1 : 1; // Reserved - - Kernel::UInt8 Status; // Status register - Kernel::UInt8 Rrror; // Error register - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 Rsv2; // Reserved - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Rsv3[2]; // Reserved - - // DWORD 4 - Kernel::UInt8 Rsv4[4]; // Reserved -} FisRegD2H; - -typedef struct FisData final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DATA - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 4; // Reserved - - Kernel::UInt8 Reserved1[2]; // Reserved - - // DWORD 1 ~ N - Kernel::UInt32 Data[1]; // Payload -} FisData; - -typedef struct FisPioSetup final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_PIO_SETUP - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 Reserved1 : 1; - - Kernel::UInt8 Status; // Status register - Kernel::UInt8 Error; // Error register - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 Rsv2; // Reserved - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Rsv3; // Reserved - Kernel::UInt8 EStatus; // New value of status register - - // DWORD 4 - Kernel::UInt16 TranferCount; // Transfer count - Kernel::UInt8 Rsv4[2]; // Reserved -} FisPioSetup; - -typedef struct FisDmaSetup final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 AutoEnable : 1; // Auto-activate. Specifies if DMA Activate FIS is needed - - Kernel::UInt8 Reserved1[2]; // Reserved - - // DWORD 1&2 - Kernel::UInt64 DmaBufferId; // DMA Buffer Identifier. Used to Identify DMA buffer in - // host memory. SATA Spec says host specific and not in - // Spec. Trying AHCI spec might work. - - // DWORD 3 - Kernel::UInt32 Rsvd; // More reserved - - // DWORD 4 - Kernel::UInt32 DmabufOffset; // Byte offset into buffer. First 2 bits must be 0 - - // DWORD 5 - Kernel::UInt32 TransferCount; // Number of bytes to transfer. Bit 0 must be 0 - - // DWORD 6 - Kernel::UInt32 Reserved3; // Reserved -} FisDmaSetup; - -typedef struct FisDevBits final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP (A1h) - - Kernel::UInt8 Reserved0 : 5; // Reserved - Kernel::UInt8 R0 : 1; - Kernel::UInt8 InterruptBit : 1; - Kernel::UInt8 N : 1; - - Kernel::UInt8 StatusLow : 3; - Kernel::UInt8 R1 : 1; - Kernel::UInt8 StatusHigh : 3; - - Kernel::UInt8 R2 : 1; - Kernel::UInt8 Error; - - // DWORD 1 - Kernel::UInt32 Act; -} FisDevBits; - -/// \brief Enable AHCI device bit in GHC register. -#ifndef kAhciGHC_AE -#define kAhciGHC_AE (31) -#endif //! ifndef kAhciGHC_AE - -typedef struct HbaPort final -{ - Kernel::UInt32 Clb; // 0x00, command list base address, 1K-byte aligned - Kernel::UInt32 Clbu; // 0x04, command list base address upper 32 bits - Kernel::UInt32 Fb; // 0x08, FIS base address, 256-byte aligned - Kernel::UInt32 Fbu; // 0x0C, FIS base address upper 32 bits - Kernel::UInt32 Is; // 0x10, interrupt status - Kernel::UInt32 Ie; // 0x14, interrupt enable - Kernel::UInt32 Cmd; // 0x18, command and status - Kernel::UInt32 Reserved0; // 0x1C, Reserved - Kernel::UInt32 Tfd; // 0x20, task file data - Kernel::UInt32 Sig; // 0x24, signature - Kernel::UInt32 Ssts; // 0x28, SATA status (SCR0:SStatus) - Kernel::UInt32 Sctl; // 0x2C, SATA control (SCR2:SControl) - Kernel::UInt32 Serr; // 0x30, SATA error (SCR1:SError) - Kernel::UInt32 Sact; // 0x34, SATA active (SCR3:SActive) - Kernel::UInt32 Ci; // 0x38, command issue - Kernel::UInt32 Sntf; // 0x20, SATA notification (SCR4:SNotification) - Kernel::UInt32 Fbs; // 0x40, FIS-based switch control - Kernel::UInt32 Reserved1[11]; // 0x44 ~ 0x6F, Reserved - Kernel::UInt32 Vendor[4]; // 0x70 ~ 0x7F, vendor specific -} HbaPort; - -typedef struct HbaMem final -{ - // 0x00 - 0x2B, Generic Host Control - Kernel::UInt32 Cap; // 0x00, Host capability - Kernel::UInt32 Ghc; // 0x04, Global host control - Kernel::UInt32 Is; // 0x08, Interrupt status - Kernel::UInt32 Pi; // 0x0C, Port implemented - Kernel::UInt32 Vs; // 0x10, Version - Kernel::UInt32 Ccc_ctl; // 0x14, Command completion coalescing control - Kernel::UInt32 Ccc_pts; // 0x18, Command completion coalescing ports - Kernel::UInt32 Em_loc; // 0x1C, Enclosure management location - Kernel::UInt32 Em_ctl; // 0x20, Enclosure management control - Kernel::UInt32 Cap2; // 0x24, Host capabilities extended - Kernel::UInt32 Bohc; // 0x28, BIOS/OS handoff control and status - - Kernel::UInt16 Resv0; - Kernel::UInt32 Resv2; - - HbaPort Ports[1]; // 1 ~ 32 -} HbaMem; - -typedef struct HbaCmdHeader final -{ - // DW0 - Kernel::UInt8 Cfl : 5; // Command FIS length in DWORDS, 2 ~ 16 - Kernel::UInt8 Atapi : 1; // ATAPI - Kernel::UInt8 Write : 1; // Write, 1: H2D, 0: D2H - Kernel::UInt8 Prefetchable : 1; // Prefetchable - - Kernel::UInt8 Reset : 1; // Reset - Kernel::UInt8 BIST : 1; // BIST - Kernel::UInt8 Clear : 1; // Clear busy upon R_OK - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 Pmp : 4; // Port multiplier port - - Kernel::UInt16 Prdtl; // Physical region descriptor table length in entries - volatile Kernel::UInt32 Prdbc; // Physical region descriptor byte count transferred - - Kernel::UInt32 Ctba; // Command table descriptor base address - Kernel::UInt32 Ctbau; // Command table descriptor base address upper 32 bits - - Kernel::UInt32 Reserved1[4]; // Reserved -} HbaCmdHeader; - -typedef struct HbaFis final -{ - // 0x00 - FisDmaSetup Dsfis; // DMA Setup FIS - Kernel::UInt8 Pad0[4]; - // 0x20 - FisPioSetup Psfis; // PIO Setup FIS - Kernel::UInt8 Pad1[12]; - // 0x40 - FisRegD2H Rfis; // Register – Device to Host FIS - Kernel::UInt8 Pad2[4]; - // 0x58 - FisDevBits Sdbfis; // Set Device Bit FIS - // 0x60 - Kernel::UInt8 Ufis[64]; - // 0xA0 - Kernel::UInt8 Rsv[0x100 - 0xA0]; -} HbaFis; - -typedef struct HbaPrdtEntry final -{ - Kernel::UInt32 Dba; // Data base address - Kernel::UInt32 Dbau; // Data base address upper 32 bits - Kernel::UInt32 Reserved0; // Reserved - // DW3 - Kernel::UInt32 Dbc : 22; // Byte count, 4M max - Kernel::UInt32 Reserved1 : 9; // Reserved - Kernel::UInt32 InterruptBit : 1; // Interrupt on completion -} HbaPrdtEntry; - -typedef struct HbaCmdTbl final -{ - Kernel::UInt8 Cfis[64]; // Command FIS - Kernel::UInt8 Acmd[16]; // ATAPI command, 12 or 16 bytes - Kernel::UInt8 Rsv[48]; // Reserved - struct HbaPrdtEntry prdtEntries[1]; // Physical region descriptor table entries, 0 ~ 65535 -} HbaCmdTbl; - -/* EOF */ - -#if defined(__AHCI__) - -/// @brief Initializes an AHCI disk. -/// @param PortsImplemented the amount of port that have been detected. -/// @return -Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented); - -Kernel::Boolean drv_std_detected(Kernel::Void); - -/// @brief Read from disk. -/// @param Lba -/// @param Buf -/// @param SectorSz -/// @param Size -/// @return -Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size); - -/// @brief Write to disk. -/// @param Lba -/// @param Buf -/// @param SectorSz -/// @param Size -/// @return -Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size); - -/// @brief get sector count. -Kernel::SizeT drv_std_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_std_get_drv_size(); - -/// @brief get sector count. -Kernel::SizeT drv_std_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_std_get_drv_size(); - -#endif // ifdef __NEWOSKRNL__ diff --git a/dev/Kernel/Modules/AHCI/compile_flags.txt b/dev/Kernel/Modules/AHCI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/AHCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/Modules/APM/.gitkeep b/dev/Kernel/Modules/APM/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/APM/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/ATA/ATA.hxx b/dev/Kernel/Modules/ATA/ATA.hxx deleted file mode 100644 index 81705712..00000000 --- a/dev/Kernel/Modules/ATA/ATA.hxx +++ /dev/null @@ -1,156 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Defines.hxx - Purpose: ATA header. - - Revision History: - - 03/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#ifndef __AHCI__ - -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Defines.hxx> - -///! Status register -#define ATA_SR_BSY 0x80 -#define ATA_SR_DRDY 0x40 -#define ATA_SR_DF 0x20 -#define ATA_SR_DSC 0x10 -#define ATA_SR_DRQ 0x08 -#define ATA_SR_CORR 0x04 -#define ATA_SR_IDX 0x02 -#define ATA_SR_ERR 0x01 - -///! Error register -#define ATA_ER_BBK 0x80 -#define ATA_ER_UNC 0x40 -#define ATA_ER_MC 0x20 -#define ATA_ER_IDNF 0x10 -#define ATA_ER_MCR 0x08 -#define ATA_ER_ABRT 0x04 -#define ATA_ER_TK0NF 0x02 -#define ATA_ER_AMNF 0x01 - -#define ATA_CMD_READ_PIO 0x20 -#define ATA_CMD_READ_PIO_EXT 0x24 -#define ATA_CMD_READ_DMA 0xC8 -#define ATA_CMD_READ_DMA_EXT 0x25 -#define ATA_CMD_WRITE_PIO 0x30 -#define ATA_CMD_WRITE_PIO_EXT 0x34 -#define ATA_CMD_WRITE_DMA 0xCA -#define ATA_CMD_WRITE_DMA_EXT 0x35 -#define ATA_CMD_CACHE_FLUSH 0xE7 -#define ATA_CMD_CACHE_FLUSH_EXT 0xEA -#define ATA_CMD_PACKET 0xA0 -#define ATA_CMD_IDENTIFY_PACKET 0xA1 -#define ATA_CMD_IDENTIFY 0xEC - -///! ident offsets, use with data that we got from ATA_CMD_IDENTIFY. -#define ATA_IDENT_DEVICE_TYPE 0 -#define ATA_IDENT_CYLINDERS 2 -#define ATA_IDENT_HEADS 6 -#define ATA_IDENT_SECTORS 12 -#define ATA_IDENT_SERIAL 20 -#define ATA_IDENT_MODEL 54 -#define ATA_IDENT_CAPABILITIES 98 -#define ATA_IDENT_FIELDVALID 106 -#define ATA_IDENT_MAX_LBA 120 -#define ATA_IDENT_COMMANDSETS 164 -#define ATA_IDENT_MAX_LBA_EXT 200 - -#define ATA_MASTER 0x00 -#define ATA_SLAVE 0x01 - -///! Register -#define ATA_REG_DATA 0x00 -#define ATA_REG_ERROR 0x01 -#define ATA_REG_FEATURES 0x01 -#define ATA_REG_SEC_COUNT0 0x02 -#define ATA_REG_LBA0 0x03 -#define ATA_REG_LBA1 0x04 -#define ATA_REG_LBA2 0x05 -#define ATA_REG_HDDEVSEL 0x06 -#define ATA_REG_COMMAND 0x07 -#define ATA_REG_STATUS 0x07 -#define ATA_REG_SEC_COUNT1 0x08 -#define ATA_REG_LBA3 0x09 -#define ATA_REG_LBA4 0x0A -#define ATA_REG_LBA5 0x0B -#define ATA_REG_CONTROL 0x0C -#define ATA_REG_ALT_STATUS 0x0C -#define ATA_REG_DEV_ADDRESS 0x0D - -#define ATA_REG_NEIN 0x01 - -#define ATA_PRIMARY_IO 0x1F0 -#define ATA_SECONDARY_IO 0x170 -#define ATA_PRIMARY_DCR_AS 0x3F6 -#define ATA_SECONDARY_DCR_AS 0x376 - -///! Irq -#define ATA_PRIMARY_IRQ 14 -#define ATA_SECONDARY_IRQ 15 - -///! Channels -#define ATA_PRIMARY 0x00 -#define ATA_SECONDARY 0x01 - -#define ATA_CYL_LOW 3 -#define ATA_CYL_MID 4 -#define ATA_CYL_HIGH 5 - -///! IO Direction -#define ATA_READ 0x00 -#define ATA_WRITE 0x013 - -#define ATA_PRIMARY_SEL 0xA0 -#define ATA_SECONDARY_SEL 0xB0 - -///! ATA address register. -#define ATA_ADDRESS1(x) (x + 3) -#define ATA_ADDRESS2(x) (x + 4) -#define ATA_ADDRESS3(x) (x + 5) - -///! ATA command register. -#define ATA_COMMAND(x) (x + 7) - -#define kATASectorSize (512U) - -enum -{ - kATADevicePATA, - kATADeviceSATA, - kATADevicePATA_PI, - kATADeviceSATA_PI, - kATADeviceCount, -}; - -#if defined(__ATA_PIO__) || defined(__ATA_DMA__) - -Kernel::Boolean drv_std_init(Kernel::UInt16 Bus, Kernel::UInt8 Drive, Kernel::UInt16& OutBus, Kernel::UInt8& OutMaster); - -Kernel::Boolean drv_std_detected(Kernel::Void); - -Kernel::Void drv_std_select(Kernel::UInt16 Bus); - -Kernel::Boolean drv_std_wait_io(Kernel::UInt16 IO); - -Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::UInt16 IO, Kernel::UInt8 Master, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size); - -Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::UInt16 IO, Kernel::UInt8 Master, Kernel::Char* Buf, Kernel::SizeT SectorSz, Kernel::SizeT Size); - -/// @brief get sector count. -Kernel::SizeT drv_std_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_std_get_drv_size(); - -#endif // ifdef __NEWOSKRNL__ -#endif // ifndef __ATA_PIO__ || __AHCI__ diff --git a/dev/Kernel/Modules/ATA/compile_flags.txt b/dev/Kernel/Modules/ATA/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/ATA/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/Modules/CoreCG/Accessibility.hxx b/dev/Kernel/Modules/CoreCG/Accessibility.hxx deleted file mode 100644 index 743b81ee..00000000 --- a/dev/Kernel/Modules/CoreCG/Accessibility.hxx +++ /dev/null @@ -1,49 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __CORECG_ACCESS_HXX__ -#define __CORECG_ACCESS_HXX__ - -#include <NewKit/NewKit.hxx> -#include <KernelKit/LPC.hxx> -#include <Modules/CoreCG/FbRenderer.hxx> -#include <Modules/CoreCG/Lerp.hxx> -#include <ArchKit/ArchKit.hxx> - -namespace Kernel -{ - inline Bool cKTSyncCall = false; - - inline float cDeviceWidthAlert = 150; - inline float cDeviceHeightAlert = 141; - - /// @brief common user interface class. - class UIAccessibilty final - { - explicit UIAccessibilty() = default; - - public: - NEWOS_COPY_DELETE(UIAccessibilty); - - static UIAccessibilty& The() - { - static UIAccessibilty the; - return the; - } - - Int64 Width() noexcept - { - return kHandoverHeader->f_GOP.f_Width; - } - - Int64 Height() noexcept - { - return kHandoverHeader->f_GOP.f_Height; - } - }; -} // namespace Kernel - -#endif // !__CORECG_ACCESS_HXX__ diff --git a/dev/Kernel/Modules/CoreCG/FbRenderer.hxx b/dev/Kernel/Modules/CoreCG/FbRenderer.hxx deleted file mode 100644 index 06c27949..00000000 --- a/dev/Kernel/Modules/CoreCG/FbRenderer.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -#define CGInit() Kernel::SizeT __GXCursor = 0 - -#define CGColor(R, G, B) RGB(R, G, B) - -#define cCGClearClr CGColor(0x0, 0x0, 0x0) - -#define CGFini() __GXCursor = 0 - -/// @brief Performs OR drawing on the framebuffer. -#define CGDrawBitMapInRegionA(ImgPtr, _Height, _Width, BaseX, BaseY) \ - __GXCursor = 0; \ - \ - for (Kernel::SizeT i = BaseX; i < (_Height + BaseX); ++i) \ - { \ - for (Kernel::SizeT u = BaseY; u < (_Width + BaseY); ++u) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) |= (ImgPtr)[__GXCursor]; \ - \ - ++__GXCursor; \ - } \ - } - -/// @brief Draws a resource. -#define CGDrawBitMapInRegion(ImgPtr, _Height, _Width, BaseX, BaseY) \ - __GXCursor = 0; \ - \ - for (Kernel::SizeT i = BaseX; i < (_Height + BaseX); ++i) \ - { \ - for (Kernel::SizeT u = BaseY; u < (_Width + BaseY); ++u) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) = (ImgPtr)[__GXCursor]; \ - \ - ++__GXCursor; \ - } \ - } - -/// @brief Cleans a resource. -#define CGClearRegion(_Height, _Width, BaseX, BaseY) \ - \ - for (Kernel::SizeT i = BaseX; i < _Height + BaseX; ++i) \ - { \ - for (Kernel::SizeT u = BaseY; u < _Width + BaseY; ++u) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) = cCGClearClr; \ - } \ - } - -/// @brief Draws inside a zone. -#define CGDrawInRegion(_Clr, _Height, _Width, BaseX, BaseY) \ - \ - for (Kernel::SizeT x_base = BaseX; x_base < (_Width + BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = BaseY; y_base < (_Height + BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) = _Clr; \ - } \ - } diff --git a/dev/Kernel/Modules/CoreCG/Lerp.hxx b/dev/Kernel/Modules/CoreCG/Lerp.hxx deleted file mode 100644 index 2b3addb1..00000000 --- a/dev/Kernel/Modules/CoreCG/Lerp.hxx +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -/// @file Lerp.hxx -/// @brief Linear interpolation implementation. - -typedef float GXReal; - -/// @brief Linear interpolation equation solver. -/// @param from where? -/// @param to to? -/// @param at which state we're at **to**. -inline GXReal GXLerp(GXReal to, GXReal from, GXReal stat) -{ - GXReal difference = to - from; - return from + (difference * stat); -} diff --git a/dev/Kernel/Modules/CoreCG/Rsrc/Cursor.rsrc b/dev/Kernel/Modules/CoreCG/Rsrc/Cursor.rsrc deleted file mode 100644 index 2283cb32..00000000 --- a/dev/Kernel/Modules/CoreCG/Rsrc/Cursor.rsrc +++ /dev/null @@ -1,64 +0,0 @@ -#define cCurHeight (57) -#define cCurWidth (53) - -#define cCurLength (3021) - -static const unsigned int Cursor[cCurLength] = { - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x474747, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x363636, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x585858, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x363636, 0x000000, 0x000000, 0x000000, 0x686868, 0xebebeb, 0xf9f9f9, 0x969696, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xdedede, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xdedede, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x474747, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xb3b3b3, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x222222, 0x222222, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x686868, 0x686868, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0xd0d0d0, 0xdedede, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x222222, 0x000000, 0x000000, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xd0d0d0, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0xb4b4b4, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0xb4b4b4, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xdedede, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0x363636, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x343434, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x343434, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x585858, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xebebeb, 0x585858, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0x878787, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x979797, 0x686868, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 -}; diff --git a/dev/Kernel/Modules/CoreCG/TextRenderer.hxx b/dev/Kernel/Modules/CoreCG/TextRenderer.hxx deleted file mode 100644 index eada9b9f..00000000 --- a/dev/Kernel/Modules/CoreCG/TextRenderer.hxx +++ /dev/null @@ -1,177 +0,0 @@ -#pragma once
-
-#include <NewKit/Defines.hxx>
-#include <Modules/CoreCG/FbRenderer.hxx>
-
-#define FONT_SIZE_X 8
-#define FONT_SIZE_Y 8
-#define FONT_NOF_CHARS 128
-
-inline const Kernel::UInt8 cFontBitmap[FONT_NOF_CHARS][FONT_SIZE_X] = {
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul)
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space)
- {0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!)
- {0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (")
- {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#)
- {0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($)
- {0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%)
- {0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&)
- {0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (')
- {0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (()
- {0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ())
- {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*)
- {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+)
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,)
- {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-)
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.)
- {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/)
- {0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0)
- {0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1)
- {0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2)
- {0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3)
- {0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4)
- {0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5)
- {0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6)
- {0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7)
- {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8)
- {0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9)
- {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:)
- {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;)
- {0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<)
- {0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=)
- {0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>)
- {0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?)
- {0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@)
- {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A)
- {0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B)
- {0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C)
- {0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D)
- {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E)
- {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F)
- {0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G)
- {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H)
- {0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I)
- {0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J)
- {0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K)
- {0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L)
- {0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M)
- {0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N)
- {0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O)
- {0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P)
- {0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q)
- {0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R)
- {0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S)
- {0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T)
- {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U)
- {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V)
- {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W)
- {0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X)
- {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y)
- {0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z)
- {0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([)
- {0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\)
- {0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (])
- {0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^)
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_)
- {0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`)
- {0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a)
- {0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b)
- {0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c)
- {0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d)
- {0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e)
- {0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f)
- {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g)
- {0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h)
- {0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i)
- {0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j)
- {0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k)
- {0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l)
- {0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m)
- {0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n)
- {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o)
- {0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p)
- {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q)
- {0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r)
- {0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s)
- {0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t)
- {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u)
- {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v)
- {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w)
- {0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x)
- {0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y)
- {0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z)
- {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({)
- {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|)
- {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (})
- {0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~)
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
-
-};
-
-inline Kernel::Void cg_render_text_font(const Kernel::UInt8* bitmap, Kernel::Int32& x_dst, Kernel::Int32& y_dst, Kernel::Int32& color)
-{
- Kernel::Int32 x, y;
- Kernel::Int32 set;
-
- x = 0;
- y = 0;
-
- for (; y < FONT_SIZE_Y; y++)
- {
- for (x = 0; x < FONT_SIZE_X; x++)
- {
- set = bitmap[x] & 1 << y;
-
- if (set)
- CGDrawInRegion(color, 1, 1, ((x_dst) + x), ((y_dst) + y));
- }
- }
-}
-
-inline Kernel::Void cg_write_text(const Kernel::Char* text, Kernel::Int32 x_dst, Kernel::Int32 y_dst, Kernel::Int32 color)
-{
- for (Kernel::SizeT i = 0; text[i] != 0; ++i)
- {
- if (text[i] == '\r' ||
- text[i] == '\n')
- {
- y_dst += FONT_SIZE_Y;
-
- continue;
- }
-
- cg_render_text_font(&cFontBitmap[text[i]][0], x_dst, y_dst, color);
- y_dst += FONT_SIZE_Y;
- }
-}
\ No newline at end of file diff --git a/dev/Kernel/Modules/Flash/Flash.hxx b/dev/Kernel/Modules/Flash/Flash.hxx deleted file mode 100644 index d8cfc28f..00000000 --- a/dev/Kernel/Modules/Flash/Flash.hxx +++ /dev/null @@ -1,19 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#ifdef __FLASH_MEM__ - -/// @brief get sector count. -/// @return drive sector count. -Kernel::SizeT drv_std_get_sector_count(); - -/// @brief get device size. -/// @return drive size -Kernel::SizeT drv_std_get_drv_size(); - -#endif // ifdef __FLASH_MEM__ diff --git a/dev/Kernel/Modules/GL/.keepme b/dev/Kernel/Modules/GL/.keepme deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/GL/.keepme +++ /dev/null diff --git a/dev/Kernel/Modules/GPRS/.keepme b/dev/Kernel/Modules/GPRS/.keepme deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/GPRS/.keepme +++ /dev/null diff --git a/dev/Kernel/Modules/HPET/.gitkeep b/dev/Kernel/Modules/HPET/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/HPET/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/HPET/Defines.hxx b/dev/Kernel/Modules/HPET/Defines.hxx deleted file mode 100644 index 7b6e4589..00000000 --- a/dev/Kernel/Modules/HPET/Defines.hxx +++ /dev/null @@ -1,42 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: HPET.hxx - Purpose: HPET builtin. - - Revision History: - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <Modules/ACPI/ACPI.hxx> - -namespace Kernel -{ - struct PACKED HPETAddressStructure final - { - Kernel::UInt8 AddressSpaceId; // 0 - system memory, 1 - system I/O - Kernel::UInt8 RegisterBitWidth; - Kernel::UInt8 RegisterBitOffset; - Kernel::UInt8 Reserved; - Kernel::UInt64 Address; - }; - - struct PACKED HPETHeader final : public SDT - { - Kernel::UInt8 HardwareRevId; - Kernel::UInt8 ComparatorCount : 5; - Kernel::UInt8 CounterSize : 1; - Kernel::UInt8 Reserved : 1; - Kernel::UInt8 LegacyReplacement : 1; - Kernel::UInt16 PciVendorId; - HPETAddressStructure Address; - Kernel::UInt8 HpetNumber; - Kernel::UInt16 MinimumTick; - Kernel::UInt8 PageProtection; - }; - -} // namespace Kernel diff --git a/dev/Kernel/Modules/IEEE802/.gitkeep b/dev/Kernel/Modules/IEEE802/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/IEEE802/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/IEEE802/compile_flags.txt b/dev/Kernel/Modules/IEEE802/compile_flags.txt deleted file mode 100644 index 1fbcad21..00000000 --- a/dev/Kernel/Modules/IEEE802/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../Kernel --std=c++20 diff --git a/dev/Kernel/Modules/LTE/.keepme b/dev/Kernel/Modules/LTE/.keepme deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/LTE/.keepme +++ /dev/null diff --git a/dev/Kernel/Modules/LTE/IO.hxx b/dev/Kernel/Modules/LTE/IO.hxx deleted file mode 100644 index 15546515..00000000 --- a/dev/Kernel/Modules/LTE/IO.hxx +++ /dev/null @@ -1,28 +0,0 @@ -/* -------------------------------------------
-
-Copyright ZKA Technologies..
-
-File: LTE\IO.hxx.
-Purpose: LTE I/O.
-
-------------------------------------------- */
-
-#ifndef _INC_NETWORK_LTE_IO_HXX_
-#define _INC_NETWORK_LTE_IO_HXX_
-
-#include <NewKit/Defines.hxx>
-#include <NewKit/String.hxx>
-
-/// @brief Long Term Evolution I/O routines.
-
-/// @brief Turn on SIM slot.
-Kernel::Boolean lte_turn_on_slot(Kernel::Int32 slot);
-
-/// @brief Turn off SIM slot.
-Kernel::Boolean lte_turn_off_slot(Kernel::Int32 slot);
-
-/// @brief Send AT command.
-Kernel::Boolean lte_send_at_command(Kernel::Char* buf,
- Kernel::Size bufSz);
-
-#endif // ifndef _INC_NETWORK_LTE_IO_HXX_
diff --git a/dev/Kernel/Modules/MBCI/Interface.hxx b/dev/Kernel/Modules/MBCI/Interface.hxx deleted file mode 100644 index b3d5debb..00000000 --- a/dev/Kernel/Modules/MBCI/Interface.hxx +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <Modules/MBCI/MBCI.hxx> diff --git a/dev/Kernel/Modules/MBCI/MBCI.hxx b/dev/Kernel/Modules/MBCI/MBCI.hxx deleted file mode 100644 index 6e15762e..00000000 --- a/dev/Kernel/Modules/MBCI/MBCI.hxx +++ /dev/null @@ -1,99 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _INC_MODULE_MBCI_HXX_ -#define _INC_MODULE_MBCI_HXX_ - -#include <NewKit/Defines.hxx> -#include <Modules/ACPI/ACPI.hxx> - -/** -- VCC (IN) (OUT for MCU) -- CLK (IN) (OUT for MCU) -- ACK (BI) (Contains an Acknowledge Packet Frame) -- D0- (IN) (Starts with the Host Interface Packet Frame) -- D1- (IN) (Starts with the Host Interface Packet Frame) -- D0+ (OUT) (Starts with the Host Interface Packet Frame) -- D1+ (OUT) (Starts with the Host Interface Packet Frame) -- GND (IN) (OUT for MCU) - */ - -#define cMBCIZeroSz (8) -#define cMBCIMagic "MBCI " - -namespace Kernel -{ - struct MBCIHostInterface; - struct MBCIHostInterfacePacketFrame; - - /// @brief MBCI Packet frame header - struct PACKED MBCIHostInterfacePacketFrame final - { - UInt32 Magic; - UInt32 HostId; - UInt32 Flags; - UInt32 VendorId; - UInt32 DeviceId; - UInt32 DeviceSpeed; - Bool Acknowledge; - Char Zero[cMBCIZeroSz]; - }; - - enum - { - eMBCISpeedDeviceInvalid, - eMBCILowSpeedDevice, - eMBCIHighSpeedDevice, - eMBCISpeedDeviceCount, - }; - - /// @brief MBCI Host Interface header. - struct PACKED MBCIHostInterface final - { - UInt32 Magic; - UInt32 HostId; - UInt16 VendorId; - UInt16 DeviceId; - UInt8 MemoryType; - UInt16 HostType; - UInt16 HostFlags; - UInt8 Error; - UInt8 Status; - UInt8 InterruptEnable; - UInt64 BaseAddressRegister; - UInt64 BaseAddressRegisterSize; - Char Zero[cMBCIZeroSz]; - }; - - /// @brief MBCI host flags. - enum MBCIHostFlags - { - eMBCIHostFlagsSupportsNothing, // Invalid MBCI device. - eMBCIHostFlagsSupportsAPM, // Advanced Power Management. - eMBCIHostFlagsSupportsDaisyChain, // Is daisy chained. - eMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts. - eMBCIHostFlagsSupportsDMA, // Has DMA. - eMBCIHostFlagsExtended = __UINT16_MAX__, // Extended flags table. - }; - - enum MBCIHostKind - { - eMBCIHostKindHardDisk, - eMBCIHostKindOpticalDisk, - eMBCIHostKindKeyboardLow, - eMBCIHostKindMouseLow, - eMBCIHostKindMouseHigh, - eMBCIHostKindKeyboardHigh, - eMBCIHostKindNetworkInterface, - eMBCIHostKindDaisyChain, - eMBCIHostKindStartExtended = __UINT16_MAX__, // Extended vendor table. - }; - - /// @brief An AuthKey is a context used to decrpy data from an MBCI packet. - typedef UInt64 MBCIAuthyKeyType; -} // namespace Kernel - -#endif // ifndef _INC_MODULE_MBCI_HXX_ diff --git a/dev/Kernel/Modules/MBCI/compile_flags.txt b/dev/Kernel/Modules/MBCI/compile_flags.txt deleted file mode 100644 index df83bf4c..00000000 --- a/dev/Kernel/Modules/MBCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../../ --I../../Kernel --std=c++20 diff --git a/dev/Kernel/Modules/NVME/.gitkeep b/dev/Kernel/Modules/NVME/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/NVME/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/NVME/Defines.hxx b/dev/Kernel/Modules/NVME/Defines.hxx deleted file mode 100644 index 6ab57ccb..00000000 --- a/dev/Kernel/Modules/NVME/Defines.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - Revision History: - - ??/??/24: Added file (amlel) - 23 Jul 24: Update filename to Defines.hxx and using ALIGN_NVME for NVME structs. (amlel) - -------------------------------------------- */ - -#ifndef __MODULE_NVME_HXX__ -#define __MODULE_NVME_HXX__ - -#include <NewKit/Defines.hxx> - -/// TODO: checklist in: https://wiki.osdev.org/NVMe - -#define ALIGN_NVME ATTRIBUTE(aligned(sizeof(Kernel::NVMEInt32))) - -namespace Kernel -{ - typedef UInt32 NVMEInt32; - - struct ALIGN_NVME NVMEBar0 final - { - NVMEInt32 fCap; - NVMEInt32 fVer; - NVMEInt32 fIntMaskSet; - NVMEInt32 fIntMaskClr; - NVMEInt32 fContrlConf; - NVMEInt32 fContrlStat; - NVMEInt32 fAdminQueueAttr; - NVMEInt32 fAdminSubmissionQueue; - NVMEInt32 fAdminCompletionQueue; - }; - - struct ALIGN_NVME NVMEQueue final - { - NVMEInt32 fOpcode; - NVMEInt32 fNSID; - NVMEInt32 fReserved[3]; - NVMEInt32 fMetadataPtr[5]; - NVMEInt32 fDataPtr[9]; - NVMEInt32 CommandSpecific[15]; - }; - - enum - { - eCreateCompletionQueueNVME = 0x05, - eCreateSubmissionQueueNVME = 0x01, - eIdentifyNVME = 0x06, - eReadNVME = 0x02, - eWriteNVME = 0x01, - }; - - template <Int32 Opcode> - inline Bool nvme_create_admin_command(NVMEQueue* entry, UInt32 nsid, - UInt32 prpTransfer[3], - UInt32 startingLba[2], UInt32 lowTransferBlocks) - { - if (entry == nullptr) - return false; - - entry->CommandSpecific[9] = startingLba[0]; - entry->CommandSpecific[10] = startingLba[1]; - - entry->CommandSpecific[11] = lowTransferBlocks; - - entry->CommandSpecific[5] = prpTransfer[0]; - entry->CommandSpecific[6] = prpTransfer[1]; - entry->CommandSpecific[7] = prpTransfer[2]; - - entry->CommandSpecific[0] = nsid; - - return true; - } - - template <Int32 Opcode> - inline Bool nvme_create_io_command(NVMEQueue* entry, UInt64 baseAddress, - UInt32 identLoAndQueueSizeHi, UInt32 flagsLoAndQueueComplIdHi, - UInt32 identify, Bool provideIdentify = false, Bool namespaceIdentify = false) - { - if (entry == nullptr) - return false; - - if (baseAddress == 0) - return false; - - entry->fOpcode = Opcode; - - entry->CommandSpecific[5] = (baseAddress & 0xFF); - entry->CommandSpecific[6] = static_cast<UInt32>(baseAddress); - - if (!provideIdentify) - { - entry->CommandSpecific[9] = identLoAndQueueSizeHi; - entry->CommandSpecific[10] = flagsLoAndQueueComplIdHi; - } - else - { - entry->CommandSpecific[9] = identify; - - if (namespaceIdentify) - { - entry->CommandSpecific[0] = 1; - } - } - - // use (1 << 0) as contigunous is better supported. - - return true; - } -} // namespace Kernel - -#endif // ifndef __MODULE_NVME_HXX__ diff --git a/dev/Kernel/Modules/NVME/compile_flags.txt b/dev/Kernel/Modules/NVME/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/NVME/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/Modules/OHCI/.gitkeep b/dev/Kernel/Modules/OHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/OHCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/PS2/PS2MouseInterface.hxx b/dev/Kernel/Modules/PS2/PS2MouseInterface.hxx deleted file mode 100644 index 0a0f4aa8..00000000 --- a/dev/Kernel/Modules/PS2/PS2MouseInterface.hxx +++ /dev/null @@ -1,112 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: PS2MouseInterface.hxx - Purpose: PS/2 mouse. - - Revision History: - - 03/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include <ArchKit/ArchKit.hxx> -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - /// @brief PS/2 Mouse driver interface - class PS2MouseInterface final - { - public: - explicit PS2MouseInterface() = default; - ~PS2MouseInterface() = default; - - NEWOS_COPY_DEFAULT(PS2MouseInterface); - - public: - /// @brief Enables PS2 mouse for kernel. - /// @return - Void Init() noexcept - { - HAL::rt_cli(); - - HAL::Out8(0x64, 0xA8); // enabling the auxiliary device - mouse - - this->Wait(); - HAL::Out8(0x64, 0x20); // tells the keyboard controller that we want to send a command to the mouse - this->WaitInput(); - - UInt8 status = HAL::In8(0x60); - status |= 0b10; - - this->Wait(); - HAL::Out8(0x64, 0x60); - this->Wait(); - HAL::Out8(0x60, status); // setting the correct bit is the "compaq" status byte - - this->Write(0xF6); - this->Read(); - - this->Write(0xF4); - this->Read(); - - HAL::rt_sti(); - } - - public: - Bool WaitInput() noexcept - { - UInt64 timeout = 100000; - - while (timeout) - { - if ((HAL::In8(0x64) & 0x1)) - { - return true; - } - - --timeout; - } // wait until we can read - - // return the ack bit. - return false; - } - - Bool Wait() noexcept - { - UInt64 timeout = 100000; - - while (timeout) - { - if ((HAL::In8(0x64) & 0b10) == 0) - { - return true; - } - - --timeout; - } // wait until we can read - - // return the ack bit. - return false; - } - - Void Write(UInt8 val) - { - HAL::Out8(0x64, 0xD4); - this->Wait(); - HAL::Out8(0x60, val); - this->Wait(); - } - - UInt8 Read() - { - this->WaitInput(); - return HAL::In8(0x60); - } - }; -} // namespace Kernel diff --git a/dev/Kernel/Modules/ReadMe.md b/dev/Kernel/Modules/ReadMe.md deleted file mode 100644 index dde14fe4..00000000 --- a/dev/Kernel/Modules/ReadMe.md +++ /dev/null @@ -1,12 +0,0 @@ -# Kernel modules - -Pluggable modules for builtin hardware support within the kernel. - -## Maintainers - -ACPI: Amlal EL Mahrouss. -AHCI: Amlal EL Mahrouss. -CoreCG: Amlal EL Mahrouss. -PS2: Amlal EL Mahrouss. -ATA: Amlal EL Mahrouss. -MBCI: Amlal El Mahrouss. diff --git a/dev/Kernel/Modules/SCSI/.gitkeep b/dev/Kernel/Modules/SCSI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/SCSI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/SCSI/SCSI.hxx b/dev/Kernel/Modules/SCSI/SCSI.hxx deleted file mode 100644 index 5283bc01..00000000 --- a/dev/Kernel/Modules/SCSI/SCSI.hxx +++ /dev/null @@ -1,14 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -/// @file SCSI.hxx -/// @brief Serial SCSI driver. - -typedef Kernel::UInt16 scsi_packet_type[12]; diff --git a/dev/Kernel/Modules/WiFi/.gitkeep b/dev/Kernel/Modules/WiFi/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/WiFi/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/WiFi/compile_flags.txt b/dev/Kernel/Modules/WiFi/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/WiFi/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/Modules/XHCI/.gitkeep b/dev/Kernel/Modules/XHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Modules/XHCI/.gitkeep +++ /dev/null diff --git a/dev/Kernel/Modules/XHCI/Defines.hxx b/dev/Kernel/Modules/XHCI/Defines.hxx deleted file mode 100644 index b882607c..00000000 --- a/dev/Kernel/Modules/XHCI/Defines.hxx +++ /dev/null @@ -1,70 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Defines.hxx - Purpose: XHCI (and backwards) header. - - Revision History: - - 01/02/24: Added file (amlel) - 03/02/24: Update filename to Defines.hxx (amlel) - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -using namespace Kernel; - -#define kUSBCommand (UInt16)0x0 -#define kUSBStatus (UInt16)0x2 -#define kUSBInterruptEnable (UInt16)0x4 -#define kUSBFrameNum (UInt16)0x6 -#define kUSBFrameListBaseAddress (UInt16)0x8 -#define kUSBFrameModifyStart (UInt16)0xC -#define kUSBPort1StatusCtrl (UInt16)0x10 -#define kUSBPort2StatusCtrl (UInt16)0x12 - -typedef struct USBCommandRegister final -{ - UInt8 mReserved[8]; // Reserved - UInt8 - mMaxPacket; // 0 = Max packet size 32 bits 1 = Max packet size 64 bits - UInt8 mConfigure; - UInt8 mSoftwareDebug; - UInt8 mGlobalResume; - UInt8 mGlobalSuspend; - UInt8 mHostCtrlReset; - UInt8 mRun; // 1 = Controller execute frame list entries -} USBCommandRegister; - -typedef struct USBStatusRegister final -{ - UInt8 mReserved[8]; // Reserved - UInt8 mHalted; // 1 = bit 0 in CMD is zero 0 = bit 0 in CMD is 1 - UInt8 mProcessError; - UInt8 mSystemError; - UInt8 mResumeDetected; - UInt8 mErrorInterrupt; - UInt8 mInterrupt; -} USBStatusRegister; - -typedef struct USBInterruptEnableRegister final -{ - UInt8 mReserved[4]; // Reserved - UInt8 mShortPacket; // 1=Enable interrupt 0=Disable interrupt - UInt8 mComplete; // 1=Enable interrupt 0=Disable interrupt - UInt8 mResume; // 1=Enable interrupt 0=Disable interrupt - UInt8 mTimeoutCRC; // 1=Enable interrupt 0=Disable interrupt -} USBInterruptEnableRegister; - -/* - Some terminology: - - Frame Number: Number of processed entry of the Frame List. - Frame List Base Address: - 32-bit physical adress of Frame List. Remember that first 12 bytes are - always 0. The Frame List must contain 1024 entries. -*/ diff --git a/dev/Kernel/Modules/XHCI/compile_flags.txt b/dev/Kernel/Modules/XHCI/compile_flags.txt deleted file mode 100644 index 1bc51142..00000000 --- a/dev/Kernel/Modules/XHCI/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I./ --I../ --I../../ --std=c++20 diff --git a/dev/Kernel/MoveAll.ARM64.sh b/dev/Kernel/MoveAll.ARM64.sh deleted file mode 100644 index 5198559f..00000000 --- a/dev/Kernel/MoveAll.ARM64.sh +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh - -for file in *.o; do - mv -- "$file" "${file%.o}.obj" -done - -mv *.obj Objects/ diff --git a/dev/Kernel/MoveAll.X64.sh b/dev/Kernel/MoveAll.X64.sh deleted file mode 100644 index 664ad472..00000000 --- a/dev/Kernel/MoveAll.X64.sh +++ /dev/null @@ -1,7 +0,0 @@ -#! /bin/sh - -for file in *.o; do - mv -- "$file" "${file%.o}.obj" -done - -mv *.obj HALKit/AMD64/*.obj Objects/
\ No newline at end of file diff --git a/dev/Kernel/NetworkKit/IP.hxx b/dev/Kernel/NetworkKit/IP.hxx deleted file mode 100644 index 6003021e..00000000 --- a/dev/Kernel/NetworkKit/IP.hxx +++ /dev/null @@ -1,83 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> -#include <NewKit/String.hxx> - -namespace Kernel -{ - class RawIPAddress6; - class RawIPAddress; - class IPFactory; - - class RawIPAddress final - { - private: - explicit RawIPAddress(char bytes[4]); - ~RawIPAddress() = default; - - RawIPAddress& operator=(const RawIPAddress&) = delete; - RawIPAddress(const RawIPAddress&) = default; - - public: - char* Address(); - - char& operator[](const Size& index); - - bool operator==(const RawIPAddress& ipv6); - bool operator!=(const RawIPAddress& ipv6); - - private: - char fAddr[4]; - - friend IPFactory; // it is the one creating these addresses, thus this - // is why the constructors are private. - }; - - /** - * @brief IPv6 address. - */ - class RawIPAddress6 final - { - private: - explicit RawIPAddress6(char Bytes[8]); - ~RawIPAddress6() = default; - - RawIPAddress6& operator=(const RawIPAddress6&) = delete; - RawIPAddress6(const RawIPAddress6&) = default; - - public: - char* Address() - { - return fAddr; - } - - char& operator[](const Size& index); - - bool operator==(const RawIPAddress6& ipv6); - bool operator!=(const RawIPAddress6& ipv6); - - private: - char fAddr[8]; - - friend IPFactory; - }; - - /** - * @brief IP Creation helpers - */ - class IPFactory final - { - public: - static ErrorOr<StringView> ToStringView(Ref<RawIPAddress6>& ipv6); - static ErrorOr<StringView> ToStringView(Ref<RawIPAddress>& ipv4); - static bool IpCheckVersion4(const char* ip); - }; -} // namespace Kernel diff --git a/dev/Kernel/NetworkKit/IPC.hxx b/dev/Kernel/NetworkKit/IPC.hxx deleted file mode 100644 index 2a5ae452..00000000 --- a/dev/Kernel/NetworkKit/IPC.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies.. - - File: IPC.hxx. - Purpose: IPC protocol. - -------------------------------------------- */ - -#ifndef _INC_IPC_ENDPOINT_HXX_ -#define _INC_IPC_ENDPOINT_HXX_ - -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> - -/// @file IPC.hxx -/// @brief IPC protocol. - -/// IA separator. -#define cRemoteSeparator "." - -/// Interchange address, consists of PID:TEAM. -#define cRemoteInvalid "00:00" - -#define cRemoteHeaderMagic (0x4950434) - -namespace Kernel -{ - /// @brief 128-bit IPC address. - struct PACKED IPC_ADDRESS_STRUCT final - { - UInt64 ProcessID; - UInt64 ProcessTeam; - - //////////////////////////////////// - // some operators. - //////////////////////////////////// - - bool operator==(const IPC_ADDRESS_STRUCT& addr) noexcept - { - return addr.ProcessID == this->ProcessID && addr.ProcessTeam == this->ProcessTeam; - } - - bool operator==(IPC_ADDRESS_STRUCT& addr) noexcept - { - return addr.ProcessID == this->ProcessID && addr.ProcessTeam == this->ProcessTeam; - } - }; - - typedef struct IPC_ADDRESS_STRUCT IPCEPAddressKind; - - enum - { - eIPCEPLittleEndian = 0, - eIPCEPBigEndian = 1 - }; - - constexpr auto cIPCEPMsgSize = 6094U; - - /// @brief IPC connection header, message cannot be greater than 6K. - typedef struct IPC_MESSAGE_STRUCT final - { - UInt32 IpcHeaderMagic; // cRemoteHeaderMagic - UInt8 IpcEndianess; // 0 : LE, 1 : BE - SizeT IpcPacketSize; - IPCEPAddressKind IpcFrom; - IPCEPAddressKind IpcTo; - UInt32 IpcCRC32; - UInt32 IpcMsg; - UInt32 IpcMsgSz; - UInt8 IpcData[cIPCEPMsgSize]; - } PACKED IPC_MESSAGE_STRUCT; - - /// @brief Sanitize packet function - /// @retval true packet is correct. - /// @retval false packet is incorrect and process has crashed. - Bool ipc_sanitize_packet(IPC_MESSAGE_STRUCT* pckt); -} // namespace Kernel - -#endif // _INC_IPC_ENDPOINT_HXX_ diff --git a/dev/Kernel/NetworkKit/LTE.hxx b/dev/Kernel/NetworkKit/LTE.hxx deleted file mode 100644 index 2c390163..00000000 --- a/dev/Kernel/NetworkKit/LTE.hxx +++ /dev/null @@ -1,16 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies.. - - File: LTE.hxx. - Purpose: LTE protocol classes. - -------------------------------------------- */ - -#ifndef _INC_NETWORK_LTE_HXX_ -#define _INC_NETWORK_LTE_HXX_ - -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> - -#endif // ifndef _INC_NETWORK_LTE_HXX_ diff --git a/dev/Kernel/NetworkKit/MAC.hxx b/dev/Kernel/NetworkKit/MAC.hxx deleted file mode 100644 index 8a7b141e..00000000 --- a/dev/Kernel/NetworkKit/MAC.hxx +++ /dev/null @@ -1,29 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> - -namespace Kernel -{ - class MacAddressGetter; - - /// \brief This retrieves the MAC address of the device. - /// \note Listens for the current NIC. - class MacAddressGetter final - { - public: - explicit MacAddressGetter() = default; - - public: - StringView& AsString(); - Array<WideChar, 12>& AsBytes(); - }; - -} // namespace Kernel diff --git a/dev/Kernel/NetworkKit/NetworkDevice.hxx b/dev/Kernel/NetworkKit/NetworkDevice.hxx deleted file mode 100644 index 79c74459..00000000 --- a/dev/Kernel/NetworkKit/NetworkDevice.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef __INC_NETWORK_DEVICE_HPP__ -#define __INC_NETWORK_DEVICE_HPP__ - -#include <KernelKit/DeviceManager.hxx> -#include <NetworkKit/IP.hxx> - -/// @note Can either work with: Ethernet, GPRS, WiFi - -namespace Kernel -{ - struct NetworkDeviceCommand; - class NetworkDevice; - - /** - * \brief Network device interface, establishes a connection to the NIC. - */ - class NetworkDevice final : public DeviceInterface<NetworkDeviceCommand> - { - public: - NetworkDevice(void (*out)(NetworkDeviceCommand), - void (*in)(NetworkDeviceCommand), - void (*onCleanup)(void) = nullptr); - - ~NetworkDevice() override; - - public: - NetworkDevice& operator=(const NetworkDevice&) = default; - NetworkDevice(const NetworkDevice&) = default; - - public: - const char* Name() const override; - Boolean Name(const char* strView); - - private: - static constexpr auto cNetworkNameLen = 512; - - Void (*fCleanup)(void); - Char fNetworkName[cNetworkNameLen]; - }; - - struct NetworkDeviceCommand final - { - UInt32 CommandName; - UInt32 CommandType; - UInt32 CommandFlags; - VoidPtr CommandBuffer; - SizeT CommandSizeBuffer; - }; - - /// @brief TCP device. - using TCPNetworkDevice = NetworkDevice; - - /// @brief UDP device. - using UDPNetworkDevice = NetworkDevice; - - /// @brief PPP device. - using PPPNetworkDevice = NetworkDevice; - - /// @brief IPC device. - using IPCEPNetworkDevice = NetworkDevice; - - /// @brief GRPS device. - using GPRSNetworkDevice = NetworkDevice; - - /// @brief GSM device. - using GSMNetworkDevice = NetworkDevice; - - /// @brief LTE device. - using LTENetworkDevice = NetworkDevice; -} // namespace Kernel - -#include <NetworkKit/NetworkDevice.inl> - -#endif // !__INC_NETWORK_DEVICE_HPP__ diff --git a/dev/Kernel/NetworkKit/NetworkDevice.inl b/dev/Kernel/NetworkKit/NetworkDevice.inl deleted file mode 100644 index 5579eba3..00000000 --- a/dev/Kernel/NetworkKit/NetworkDevice.inl +++ /dev/null @@ -1,32 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/*** - Dtor and ctors. -*/ - -namespace Kernel -{ - NetworkDevice::NetworkDevice(void (*out)(NetworkDeviceCommand), - void (*in)(NetworkDeviceCommand), - void (*on_cleanup)(void)) - : DeviceInterface<NetworkDeviceCommand>(out, in), fCleanup(on_cleanup) - { - kcout << "newoskrnl: NetworkDevice initialized.\r"; - - MUST_PASS(out && in && on_cleanup); - } - - NetworkDevice::~NetworkDevice() - { - MUST_PASS(fCleanup); - - kcout << "newoskrnl: NetworkDevice cleanup.\r"; - - if (fCleanup) - fCleanup(); - } -} // namespace Kernel diff --git a/dev/Kernel/NetworkKit/compile_flags.txt b/dev/Kernel/NetworkKit/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/Kernel/NetworkKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/Kernel/NewKit/Array.hxx b/dev/Kernel/NewKit/Array.hxx deleted file mode 100644 index 1a2f6e86..00000000 --- a/dev/Kernel/NewKit/Array.hxx +++ /dev/null @@ -1,61 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - template <typename T, Size N> - class Array final - { - public: - explicit Array() = default; - ~Array() = default; - - Array& operator=(const Array&) = default; - Array(const Array&) = default; - - ErrorOr<T*> operator[](Size At) - { - if (At > N) - return {}; - - return ErrorOr<T*>(&fArray[At]); - } - - Boolean Empty() const - { - for (auto Val : fArray) - { - if (Val) - return false; - } - - return true; - } - - SizeT Count() const - { - return N; - } - - const T* CData() - { - return fArray; - } - - operator bool() - { - return !Empty(); - } - - private: - T fArray[N]; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/ArrayList.hxx b/dev/Kernel/NewKit/ArrayList.hxx deleted file mode 100644 index 03b0a360..00000000 --- a/dev/Kernel/NewKit/ArrayList.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - template <typename T> - class ArrayList final - { - public: - explicit ArrayList(T* list) - : fList(reinterpret_cast<T>(list)) - { - } - - ~ArrayList() = default; - - ArrayList& operator=(const ArrayList&) = default; - ArrayList(const ArrayList&) = default; - - T* Data() - { - return fList; - } - - const T* CData() - { - return fList; - } - - T& operator[](int index) const - { - return fList[index]; - } - - operator bool() - { - return fList; - } - - private: - T* fList; - - friend class InitHelpers; - }; - - template <typename ValueType> - ArrayList<ValueType> make_list(ValueType val) - { - return ArrayList<ValueType>{val}; - } -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Atom.hxx b/dev/Kernel/NewKit/Atom.hxx deleted file mode 100644 index 616179e9..00000000 --- a/dev/Kernel/NewKit/Atom.hxx +++ /dev/null @@ -1,46 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - template <typename T> - class Atom final - { - public: - explicit Atom() = default; - ~Atom() = default; - - public: - Atom& operator=(const Atom&) = delete; - Atom(const Atom&) = delete; - - public: - T operator[](Size sz) - { - return (fArrayOfAtoms & sz); - } - void operator|(Size sz) - { - fArrayOfAtoms |= sz; - } - - friend Boolean operator==(Atom<T>& atomic, const T& idx) - { - return atomic[idx] == idx; - } - - friend Boolean operator!=(Atom<T>& atomic, const T& idx) - { - return atomic[idx] == idx; - } - - private: - T fArrayOfAtoms; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Crc32.hxx b/dev/Kernel/NewKit/Crc32.hxx deleted file mode 100644 index b050df24..00000000 --- a/dev/Kernel/NewKit/Crc32.hxx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * ======================================================== - * - * Kernel Date Added: 13/02/2023 - * Copyright ZKA Technologies., all rights reserved. - * - * ======================================================== - */ - -#ifndef __CRC32_H__ -#define __CRC32_H__ - -#include <NewKit/Defines.hxx> - -#define kCrcCnt (256) - -namespace Kernel -{ - UInt ke_calculate_crc32(const Char* crc, UInt len) noexcept; -} // namespace Kernel - -#endif // !__CRC32_H__ diff --git a/dev/Kernel/NewKit/CxxAbi.hxx b/dev/Kernel/NewKit/CxxAbi.hxx deleted file mode 100644 index f0b3cf51..00000000 --- a/dev/Kernel/NewKit/CxxAbi.hxx +++ /dev/null @@ -1,28 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <NewKit/Defines.hxx> - -#ifndef __NDK__ - -#define kDSOMaxObjects (128) - -struct atexit_func_entry_t -{ - void (*destructor_func)(void*); - void* obj_ptr; - void* dso_handle; -}; - -typedef unsigned uarch_t; - -namespace cxxabiv1 -{ - typedef void* __guard; -} - -#endif // __GNUC__ diff --git a/dev/Kernel/NewKit/Defines.hxx b/dev/Kernel/NewKit/Defines.hxx deleted file mode 100644 index e0ad3bf6..00000000 --- a/dev/Kernel/NewKit/Defines.hxx +++ /dev/null @@ -1,153 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Macros.hxx> - -#define NEWKIT_VERSION "1.01" - -#if !defined(_INC_NO_STDC_HEADERS) && defined(__GNUC__) -#include <CRTKit/__ndk_defines.hxx> -#endif - -#ifdef __has_feature -#if !__has_feature(cxx_nullptr) -#if !__has_nullptr -#error !!! You must at least have nullptr featured on your C++ compiler. !!! -#endif -#endif -#endif - -/// @brief The **newoskrnl** namespace where it's API resides. -namespace Kernel -{ - using voidPtr = void*; - using VoidPtr = void*; - using nullPtr = decltype(nullptr); - using NullPtr = decltype(nullptr); - - using Int = int; - using Int32 = int; - using UShort = unsigned short; - using UInt16 = unsigned short; - using Short = short; - using Int16 = short; - using UInt = unsigned int; - using UInt32 = unsigned int; - using Long = __INT64_TYPE__; - using Int64 = __INT64_TYPE__; - using ULong = __UINT64_TYPE__; - using UInt64 = __UINT64_TYPE__; - using Boolean = bool; - using Bool = bool; - using Char = char; - using UChar = unsigned char; - using UInt8 = unsigned char; - - using SSize = Int64; - using SSizeT = Int64; - using Size = __SIZE_TYPE__; - using SizeT = __SIZE_TYPE__; - using IntPtr = __INTPTR_TYPE__; - using UIntPtr = __UINTPTR_TYPE__; - using IntFast = __INT_FAST32_TYPE__; - using IntFast64 = __INT_FAST64_TYPE__; - using PtrDiff = __PTRDIFF_TYPE__; - - typedef UIntPtr* Ptr64; - typedef UInt32* Ptr32; - - using Utf8Char = char8_t; - using Utf16Char = char16_t; - using WideChar = wchar_t; - using Utf32Char = char32_t; - - typedef UInt64 PhysicalAddress; - typedef UInt64 VirtualAddress; - - using Void = void; - - using Lba = UInt64; - - enum class Endian : UChar - { - kEndianLittle, - kEndianBig, - kEndianMixed, - kCount - }; - - /// @brief Forward object. - /// @tparam Args the object type. - /// @param arg the object. - /// @return object's rvalue - template <typename Args> - inline Args&& forward(Args& arg) - { - return static_cast<Args&&>(arg); - } - - /// @brief Move object. - /// @tparam Args the object type. - /// @param arg the object. - /// @return object's rvalue - template <typename Args> - inline Args&& move(Args&& arg) - { - return static_cast<Args&&>(arg); - } - - /// @brief Encoder class - /// Used to cast A to B or B to A. - class Encoder final - { - public: - explicit Encoder() = default; - ~Encoder() = default; - - Encoder& operator=(const Encoder&) = default; - Encoder(const Encoder&) = default; - - public: - /// @brief Convert type to bytes. - /// @tparam T the type. - /// @param type (a1) the data. - /// @return a1 as Char* - template <typename T> - Char* AsBytes(T type) noexcept - { - return reinterpret_cast<Char*>(type); - } - - /// @brief Convert T class to Y class. - /// @tparam T the class type of type. - /// @tparam Y the result class. - /// @param type the class to cast. - /// @return the class as Y. - template <typename T, typename Y> - Y As(T type) noexcept - { - return type.template As<Y>(); - } - }; -} // namespace Kernel - -#define DEDUCE_ENDIAN(address, value) \ - (((reinterpret_cast<Kernel::Char*>(address)[0]) == (value)) \ - ? (Kernel::Endian::kEndianBig) \ - : (Kernel::Endian::kEndianLittle)) - -#define Yes true -#define No false - -#define VoidStar Kernel::VoidPtr - -#ifdef cInitObject -#undef cInitObject -#endif // ifdef cInitObject - -#define cInitObject(OBJ, TYPE, ...) TYPE OBJ = TYPE(__VA_ARGS__) diff --git a/dev/Kernel/NewKit/ErrorOr.hxx b/dev/Kernel/NewKit/ErrorOr.hxx deleted file mode 100644 index ae2763b2..00000000 --- a/dev/Kernel/NewKit/ErrorOr.hxx +++ /dev/null @@ -1,72 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * ======================================================== - */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - using ErrorT = UInt; - - template <typename T> - class ErrorOr final - { - public: - ErrorOr() = default; - ~ErrorOr() = default; - - public: - explicit ErrorOr(Int32 err) - : mId(err) - { - } - - explicit ErrorOr(nullPtr Null) - { - } - - explicit ErrorOr(T Class) - : mRef(Class, true) - { - } - - ErrorOr& operator=(const ErrorOr&) = default; - ErrorOr(const ErrorOr&) = default; - - ErrorOr& operator=(const Ref<T>& refErr) - { - mRef = refErr; - return *this; - } - - Ref<T>& Leak() - { - return mRef; - } - - Int32 Error() - { - return mId; - } - - operator bool() - { - return mRef; - } - - private: - Ref<T> mRef; - Int32 mId{0}; - }; - - using ErrorOrAny = ErrorOr<voidPtr>; - -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Function.hxx b/dev/Kernel/NewKit/Function.hxx deleted file mode 100644 index e54ff456..00000000 --- a/dev/Kernel/NewKit/Function.hxx +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _INC_FUNCTION_HPP__ -#define _INC_FUNCTION_HPP__ - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - template <typename T, typename... Args> - class Function final - { - public: - Function() = default; - - public: - explicit Function(T (*Fn)(Args... args)) - : fFn(Fn) - { - } - - ~Function() = default; - - Function& operator=(const Function&) = default; - Function(const Function&) = default; - - template <typename... XArgs> - T operator()(Args... args) - { - return fFn(args...); - } - - template <typename... XArgs> - T Call(Args... args) - { - return fFn(args...); - } - - operator bool() - { - return fFn; - } - - bool operator!() - { - return !fFn; - } - - private: - T(*fFn) - (Args... args); - }; -} // namespace Kernel - -#endif // !_INC_FUNCTION_HPP__ diff --git a/dev/Kernel/NewKit/Json.hxx b/dev/Kernel/NewKit/Json.hxx deleted file mode 100644 index 74566942..00000000 --- a/dev/Kernel/NewKit/Json.hxx +++ /dev/null @@ -1,134 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -// last-rev: 30/01/24 - -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Stream.hxx> -#include <NewKit/String.hxx> -#include <NewKit/Utils.hxx> - -#define cMaxJsonPath 4096 -#define cJSONLen 32 -#define cJSONNull "null" - -namespace Kernel -{ - /// @brief Json value class - class JsonType final - { - public: - explicit JsonType() - { - auto len = cJSONLen; - StringView key = StringView(len); - key += cJSONNull; - - this->AsKey() = key; - this->AsValue() = key; - } - - explicit JsonType(SizeT lhsLen, SizeT rhsLen) - : fKey(lhsLen), fValue(rhsLen) - { - } - - ~JsonType() = default; - - NEWOS_COPY_DEFAULT(JsonType); - - const Bool& IsUndefined() { return fUndefined; } - - private: - Bool fUndefined; // is this instance undefined? - StringView fKey; - StringView fValue; - - public: - /// @brief returns the key of the json - /// @return the key as string view. - StringView& AsKey() - { - return fKey; - } - - /// @brief returns the value of the json. - /// @return the key as string view. - StringView& AsValue() - { - return fValue; - } - - static JsonType kNull; - }; - - /// @brief Json stream reader helper. - struct JsonStreamReader final - { - STATIC JsonType In(const Char* full_array) - { - if (full_array[0] != '{') - return JsonType::kNull; - - SizeT len = rt_string_len(full_array); - Boolean probe_value = false; - - SizeT key_len = 0; - SizeT value_len = 0; - - JsonType type(cMaxJsonPath, cMaxJsonPath); - - for (SizeT i = 1; i < len; ++i) - { - if (full_array[i] == '\r' || - full_array[i] == '\n') - continue; - - if (probe_value) - { - if (full_array[i] == '}' || - full_array[i] == ',') - { - probe_value = false; - - ++value_len; - } - else - { - type.AsValue().Data()[value_len] = full_array[i]; - - ++value_len; - } - } - else - { - if (full_array[i] == ':') - { - probe_value = true; - type.AsKey().Data()[key_len] = 0; - ++key_len; - } - else - { - type.AsKey().Data()[key_len] = full_array[i]; - - ++key_len; - } - } - } - - type.AsValue().Data()[value_len] = 0; - - return type; - } - }; - - using JsonStream = Stream<JsonStreamReader, JsonType>; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/KernelCheck.hxx b/dev/Kernel/NewKit/KernelCheck.hxx deleted file mode 100644 index 78d7506f..00000000 --- a/dev/Kernel/NewKit/KernelCheck.hxx +++ /dev/null @@ -1,61 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - void ke_runtime_check(bool bExpression, const char* file, const char* line); -} - -#define MUST_PASS_COMPILER(EXPR, MSG) static_assert(EXPR, MSG) -#define __MUST_PASS(EXPR, FILE, LINE) \ - Kernel::ke_runtime_check(EXPR, FILE, STRINGIFY(LINE)) -#define MUST_PASS(EXPR) __MUST_PASS(EXPR, __FILE__, __LINE__) -#define assert(EXPR) MUST_PASS(EXPR, RUNTIME_CHECK_EXPRESSION) - -enum RUNTIME_CHECK -{ - RUNTIME_CHECK_FAILED = -1, - RUNTIME_CHECK_POINTER = 0, - RUNTIME_CHECK_EXPRESSION, - RUNTIME_CHECK_FILE, - RUNTIME_CHECK_IPC, - RUNTIME_CHECK_TLS, - RUNTIME_CHECK_HANDSHAKE, - RUNTIME_CHECK_ACPI, - RUNTIME_CHECK_INVALID_PRIVILEGE, - RUNTIME_CHECK_PROCESS, - RUNTIME_CHECK_BAD_BEHAVIOR, - RUNTIME_CHECK_BOOTSTRAP, - RUNTIME_CHECK_UNEXCPECTED, - RUNTIME_CHECK_COUNT, -}; - -namespace Kernel -{ - /// @brief Dumping factory class. - class RecoveryFactory final - { - public: - STATIC Void Recover() noexcept; - }; - - void ke_stop(const Int& id); -} // namespace Kernel - -#ifdef TRY -#undef TRY -#endif - -#define TRY(FN) \ - if (!FN()) \ - { \ - MUST_PASS(false); \ - } diff --git a/dev/Kernel/NewKit/Macros.hxx b/dev/Kernel/NewKit/Macros.hxx deleted file mode 100644 index a17d91fb..00000000 --- a/dev/Kernel/NewKit/Macros.hxx +++ /dev/null @@ -1,114 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#ifndef KIB -#define KIB(X) ((X) / 1024) -#endif - -#ifndef kib_cast -#define kib_cast(X) ((X) * 1024) -#endif - -#ifndef MIB -#define MIB(X) ((UInt64)KIB(X) / 1024) -#endif - -#ifndef mib_cast -#define mib_cast(X) ((UInt64)kib_cast(X) * 1024) -#endif - -#ifndef GIB -#define GIB(X) ((UInt64)MIB(X) / 1024) -#endif - -#ifndef gib_cast -#define gib_cast(X) ((UInt64)mib_cast(X) * 1024) -#endif - -#ifndef TIB -#define TIB(X) ((UInt64)GIB(X) / 1024) -#endif - -#ifndef tib_cast -#define tib_cast(X) ((UInt64)gib_cast(X) * 1024) -#endif - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(a) \ - (((sizeof(a) / sizeof(*(a))) / \ - (static_cast<Kernel::Size>(!(sizeof(a) % sizeof(*(a))))))) -#endif - -#ifndef ALIGN -#define ALIGN(X) __attribute__((aligned(X))) -#endif // #ifndef ALIGN - -#ifndef ATTRIBUTE -#define ATTRIBUTE(X) __attribute__((X)) -#endif // #ifndef ATTRIBUTE - -#ifndef __MAHROUSS_VER__ -#define __MAHROUSS_VER__ (2024) -#endif // !__MAHROUSS_VER__ - -#ifndef EXTERN_C -#define EXTERN_C extern "C" -#endif - -#ifndef MAKE_ENUM -#define MAKE_ENUM(NAME) \ - enum NAME \ - { -#endif - -#ifndef END_ENUM -#define END_ENUM() \ - } \ - ; -#endif - -#ifndef MAKE_STRING_ENUM -#define MAKE_STRING_ENUM(NAME) \ - namespace NAME \ - { -#endif - -#ifndef ENUM_STRING -#define ENUM_STRING(NAME, VAL) inline constexpr const char* e##NAME = VAL -#endif - -#ifndef END_STRING_ENUM -#define END_STRING_ENUM() } -#endif - -#ifndef ALLOCA -#define ALLOCA(Sz) __builtin_alloca(Sz) -#endif // #ifndef ALLOCA - -#ifndef CANT_REACH -#define CANT_REACH() __builtin_unreachable() -#endif - -#define kBadPtr 0xFBFBFBFBFBFBFBFB -#define kMaxAddr 0xFFFFFFFFFFFFFFFF -#define kPathLen 255 - -#define PACKED ATTRIBUTE(packed) -#define NO_EXEC ATTRIBUTE(noexec) - -#define EXTERN extern -#define STATIC static - -#define CONST const - -#define STRINGIFY(X) #X -#define NEWOS_UNUSED(X) ((Kernel::Void)X) - -#ifndef RGB -#define RGB(R, G, B) (Kernel::UInt32)(R | G << 0x8 | B << 0x10) -#endif // !RGB diff --git a/dev/Kernel/NewKit/MutableArray.hxx b/dev/Kernel/NewKit/MutableArray.hxx deleted file mode 100644 index 0015f9a9..00000000 --- a/dev/Kernel/NewKit/MutableArray.hxx +++ /dev/null @@ -1,239 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Array.hxx> -#include <NewKit/Defines.hxx> - -#define TRY_FIND_NODE(NAME, NODE) \ - auto* NAME = NODE; \ - while (NAME) \ - { \ - if (NAME->fIndex == Index) \ - return NAME->fVal; \ - NAME = NAME->fNext; \ - } - -#define TRY_FIND_NODE2(NAME, NODE) \ - auto* NAME = NODE; \ - while (NAME) \ - { \ - if (NAME->fIndex == Index) \ - return Ref<T>{NAME->fVal}; \ - NAME = NAME->fNext; \ - } - -#define TRY_REMOVE_NODE(NODE) \ - if (NODE && NODE->fIndex == Index) \ - { \ - NODE->fUsed = false; \ - NODE->fIndex = 0; \ - \ - return true; \ - } - -// FIXME: this is a shitty algorithm, which is consumer hungry. -// Remove and occurences of that, and remove that class. -namespace Kernel -{ - template <typename T> - class MutableArray; - - template <typename T, T _PlaceHolderValue> - class NullableMutableArray; - - template <typename T> - class MutableLinkedList - { - public: - T fVal; - SizeT fIndex{0}; - Boolean fUsed{false}; - - MutableLinkedList* fPrev{nullptr}; - MutableLinkedList* fNext{nullptr}; - }; - - template <typename T, T _PlaceHolderValue> - class NullableMutableArray - { - public: - // explicit this. - explicit NullableMutableArray() - : fFirstNode(new MutableLinkedList<T>()) - { - } - - /* - * We free all the nodes allocated by the array - * and store the next one inside "NextIt" - */ - - virtual ~NullableMutableArray() - { - auto* It = fFirstNode; - MutableLinkedList<T>* NextIt = nullptr; - - while (It) - { - NextIt = It->fNext; - delete It; - - It = NextIt; - } - } - - NullableMutableArray& operator=(const NullableMutableArray&) = default; - NullableMutableArray(const NullableMutableArray&) = default; - - operator bool() - { - return Count() > 1; - } - - public: - T operator[](const SizeT& Index) const - { - TRY_FIND_NODE(first, fFirstNode); - TRY_FIND_NODE(last, fLastNode); - - return _PlaceHolderValue; - } - - SizeT Count() const - { - return fNodeCount; - } - - public: - Boolean Remove(const SizeT& Index) - { - TRY_REMOVE_NODE(fFirstNode); - TRY_REMOVE_NODE(fLastNode); - - return false; - } - - Boolean Add(const T val) - { - auto* iterationNode = fFirstNode; - MUST_PASS(iterationNode); - - while (iterationNode) - { - if (!iterationNode->fUsed) - { - iterationNode->fVal = val; - iterationNode->fIndex = 0; - - iterationNode->fUsed = true; - - ++fNodeCount; - - return true; - } - - iterationNode = iterationNode->fNext; - } - - return false; - } - - private: - /* Avoid useless lookups */ - MutableLinkedList<T>* fLastNode{nullptr}; - MutableLinkedList<T>* fFirstNode{nullptr}; - - /* Number of nodes inside of this dynamic array. */ - Kernel::SizeT fNodeCount{0}; - - private: - // don't remove that - friend MutableArray<T>; - }; - - template <typename T> - class MutableArray : public NullableMutableArray<voidPtr, nullptr> - { - public: - // explicit this. - explicit MutableArray() = default; - virtual ~MutableArray() = default; - - NEWOS_COPY_DEFAULT(MutableArray) - - public: - Boolean Add(const T val) - { - auto* iterationNode = fFirstNode; - - if (!iterationNode) - { - fFirstNode = new MutableLinkedList<T>(); - iterationNode = fFirstNode; - } - - MUST_PASS(iterationNode); - - while (iterationNode) - { - if (!iterationNode->fUsed) - { - iterationNode->fVal = val; - iterationNode->fIndex = 0; - - iterationNode->fUsed = true; - - ++fNodeCount; - - return true; - } - - iterationNode = iterationNode->fNext; - } - - return false; - } - - public: - Ref<T> operator[](const SizeT& Index) const - { - TRY_FIND_NODE2(first, fFirstNode); - TRY_FIND_NODE2(last, fLastNode); - - return {}; - } - - SizeT Count() const - { - return fNodeCount; - } - - bool Contains(T& value) noexcept - { - MutableLinkedList<T>* first = fFirstNode; - - while (first) - { - if (first->fVal == value && first->fUsed) - return true; - - first = first->fNext; - } - - return false; - } - - private: - /* Avoid useless lookups */ - MutableLinkedList<T>* fLastNode{nullptr}; - MutableLinkedList<T>* fFirstNode{nullptr}; - - /* Number of nodes inside of this dynamic array. */ - Kernel::SizeT fNodeCount{0}; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/New.hxx b/dev/Kernel/NewKit/New.hxx deleted file mode 100644 index 8605b9c3..00000000 --- a/dev/Kernel/NewKit/New.hxx +++ /dev/null @@ -1,18 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ -#pragma once - -#include <KernelKit/Heap.hxx> - -typedef __SIZE_TYPE__ size_t; // gcc will complain about that - -void* operator new(size_t ptr); -void* operator new[](size_t ptr); - -void operator delete(void* ptr); -void operator delete(void* ptr, unsigned long); -void operator delete[](void* ptr); diff --git a/dev/Kernel/NewKit/NewKit.hxx b/dev/Kernel/NewKit/NewKit.hxx deleted file mode 100644 index e7766bde..00000000 --- a/dev/Kernel/NewKit/NewKit.hxx +++ /dev/null @@ -1,22 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hxx> -#include <NewKit/ArrayList.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Json.hxx> -#include <NewKit/KernelCheck.hxx> -#include <KernelKit/LockDelegate.hxx> -#include <NewKit/MutableArray.hxx> -#include <NewKit/New.hxx> -#include <NewKit/OwnPtr.hxx> -#include <NewKit/Ref.hxx> -#include <NewKit/Stream.hxx> -#include <KernelKit/ProcessHeap.hxx> -#include <NewKit/Utils.hxx> diff --git a/dev/Kernel/NewKit/OwnPtr.hxx b/dev/Kernel/NewKit/OwnPtr.hxx deleted file mode 100644 index 6e42b33f..00000000 --- a/dev/Kernel/NewKit/OwnPtr.hxx +++ /dev/null @@ -1,94 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/KernelCheck.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - template <typename T> - class OwnPtr; - - template <typename T> - class NonNullRefPtr; - - template <typename T> - class OwnPtr final - { - public: - OwnPtr() - { - } - ~OwnPtr() - { - this->Delete(); - } - - OwnPtr& operator=(const OwnPtr&) = default; - OwnPtr(const OwnPtr&) = default; - - public: - template <typename... Args> - bool New(Args&&... arg) - { - if (fCls) - { - return false; - } - - fCls = new T(arg...); - return fCls; - } - - void Delete() - { - if (fCls) - delete fCls; - - fCls = nullptr; - } - - T* operator->() const - { - return fCls; - }; - T* Raw() - { - return fCls; - } - - Ref<T> AsRef() - { - return Ref<T>(fCls); - } - - operator bool() - { - return fCls; - } - bool operator!() - { - return !fCls; - } - - private: - T* fCls; - }; - - template <typename T, typename... Args> - OwnPtr<T> make_ptr(Args... args) - { - OwnPtr<T> ret; - ret.template New<Args...>(forward(args)...); - MUST_PASS(ret); - - return ret; - } -} // namespace Kernel diff --git a/dev/Kernel/NewKit/PageAllocator.hxx b/dev/Kernel/NewKit/PageAllocator.hxx deleted file mode 100644 index b485e722..00000000 --- a/dev/Kernel/NewKit/PageAllocator.hxx +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/PageManager.hxx> - -namespace Kernel -{ - namespace Detail - { - VoidPtr create_page_wrapper(Boolean rw, Boolean user, SizeT pageSz); - void exec_disable(UIntPtr addr); - bool page_disable(UIntPtr addr); - } // namespace Detail -} // namespace Kernel diff --git a/dev/Kernel/NewKit/PageManager.hxx b/dev/Kernel/NewKit/PageManager.hxx deleted file mode 100644 index 745395ec..00000000 --- a/dev/Kernel/NewKit/PageManager.hxx +++ /dev/null @@ -1,81 +0,0 @@ -// a way to create and find our pages. -// I'm thinking about a separate way of getting a paged area. - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/PageAllocator.hxx> -#include <NewKit/Ref.hxx> - -#ifndef kBadAddress -#define kBadAddress (0) -#endif // #ifndef kBadAddress - -namespace Kernel -{ - class PageManager; - - class PTEWrapper final - { - public: - explicit PTEWrapper(Boolean Rw = false, Boolean User = false, Boolean ExecDisable = false, UIntPtr Address = 0); - - ~PTEWrapper(); - - PTEWrapper& operator=(const PTEWrapper&) = default; - PTEWrapper(const PTEWrapper&) = default; - - public: - const UIntPtr VirtualAddress(); - - void NoExecute(const bool enable = false); - const bool& NoExecute(); - - bool Reclaim(); - bool Shareable(); - bool Present(); - bool Access(); - - private: - Boolean fRw; - Boolean fUser; - Boolean fExecDisable; - UIntPtr fVirtAddr; - Boolean fCache; - Boolean fShareable; - Boolean fWt; - Boolean fPresent; - Boolean fAccessed; - - private: - friend class PageManager; - friend class Pmm; - }; - - struct PageManager final - { - public: - PageManager() = default; - ~PageManager() = default; - - PageManager& operator=(const PageManager&) = default; - PageManager(const PageManager&) = default; - - public: - PTEWrapper Request(Boolean Rw, Boolean User, Boolean ExecDisable, SizeT Sz); - bool Free(Ref<PTEWrapper*>& wrapper); - - private: - void FlushTLB(UIntPtr VirtAddr); - - private: - friend PTEWrapper; - friend class Pmm; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Pair.hxx b/dev/Kernel/NewKit/Pair.hxx deleted file mode 100644 index e7ca064a..00000000 --- a/dev/Kernel/NewKit/Pair.hxx +++ /dev/null @@ -1,14 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Pmm.hxx b/dev/Kernel/NewKit/Pmm.hxx deleted file mode 100644 index 111b3044..00000000 --- a/dev/Kernel/NewKit/Pmm.hxx +++ /dev/null @@ -1,44 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/PageManager.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - class Pmm; - class PTEWrapper; - - class Pmm final - { - public: - explicit Pmm(); - ~Pmm(); - - Pmm& operator=(const Pmm&) = delete; - Pmm(const Pmm&) = default; - - Ref<PTEWrapper> RequestPage(Boolean user = false, Boolean readWrite = false); - Boolean FreePage(Ref<PTEWrapper> refPage); - - Boolean ToggleRw(Ref<PTEWrapper> refPage, Boolean enable = true); - Boolean TogglePresent(Ref<PTEWrapper> refPage, Boolean enable = true); - Boolean ToggleUser(Ref<PTEWrapper> refPage, Boolean enable = true); - Boolean ToggleShare(Ref<PTEWrapper> refPage, Boolean enable = true); - - /// @brief Get the page manager of this. - Ref<PageManager>& Leak() - { - return fPageManager; - } - - private: - Ref<PageManager> fPageManager; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Ref.hxx b/dev/Kernel/NewKit/Ref.hxx deleted file mode 100644 index 14d66f0a..00000000 --- a/dev/Kernel/NewKit/Ref.hxx +++ /dev/null @@ -1,106 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifndef _NEWKIT_REF_HPP_ -#define _NEWKIT_REF_HPP_ - -#include <NewKit/Defines.hxx> -#include <NewKit/KernelCheck.hxx> - -namespace Kernel -{ - template <typename T> - class Ref final - { - public: - Ref() = default; - - ~Ref() - { - if (fStrong) - { - fClass = nullptr; - } - } - - public: - Ref(T cls, const bool& strong = false) - : fClass(&cls), fStrong(strong) - { - } - - Ref& operator=(T ref) - { - *fClass = ref; - return *this; - } - - public: - T operator->() const - { - return *fClass; - } - - T& Leak() noexcept - { - return *fClass; - } - - T& TryLeak() const noexcept - { - MUST_PASS(*fClass); - return *fClass; - } - - T operator*() - { - return *fClass; - } - - bool IsStrong() const - { - return fStrong; - } - - operator bool() noexcept - { - return fStrong; - } - - private: - T* fClass; - Bool fStrong{false}; - }; - - template <typename T> - class NonNullRef final - { - public: - NonNullRef() = delete; - NonNullRef(nullPtr) = delete; - - NonNullRef(T* ref) - : fRef(ref, true) - { - MUST_PASS(ref != nullptr); - } - - Ref<T>& operator->() - { - MUST_PASS(fRef); - return fRef; - } - - NonNullRef& operator=(const NonNullRef<T>& ref) = delete; - NonNullRef(const NonNullRef<T>& ref) = default; - - private: - Ref<T> fRef{nullptr}; - }; -} // namespace Kernel - -#endif // ifndef _NEWKIT_REF_HPP_ diff --git a/dev/Kernel/NewKit/Stream.hxx b/dev/Kernel/NewKit/Stream.hxx deleted file mode 100644 index e2f63b17..00000000 --- a/dev/Kernel/NewKit/Stream.hxx +++ /dev/null @@ -1,58 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - template <typename StreamTrait, typename Kind> - class Stream final - { - public: - explicit Stream(Ref<Stream> ref) - : fStream(ref) - { - } - - ~Stream() = default; - - Stream& operator=(const Stream&) = default; - Stream(const Stream&) = default; - - template <typename Data> - friend Stream<StreamTrait, Kind>& operator>>(Stream<StreamTrait, Kind>& Ks, Ref<Data>& Buf) - { - Ks.fKind = Ks.fStream->In(Buf); - return *Ks; - } - - template <typename Data> - friend Stream<StreamTrait, Kind>& operator<<(Stream<StreamTrait, Kind>& Ks, Ref<Data>& Buf) - { - Ks.fKind = Buf; - Ks.fStream->Out(Buf.Leak()); - return *Ks; - } - - Ref<StreamTrait>& AsStreamTrait() - { - return fStream; - } - - Ref<Kind>& AsType() - { - return fKind; - } - - private: - Ref<StreamTrait> fStream; - Ref<Kind> fKind; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/String.hxx b/dev/Kernel/NewKit/String.hxx deleted file mode 100644 index 2f3d2096..00000000 --- a/dev/Kernel/NewKit/String.hxx +++ /dev/null @@ -1,87 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/ErrorOr.hxx> -#include <NewKit/Utils.hxx> -#include <NewKit/KernelCheck.hxx> - -namespace Kernel -{ - class StringView final - { - public: - explicit StringView() - { - fSz = 4096; - - fData = new Char[fSz]; - MUST_PASS(fData); - - rt_set_memory(fData, 0, fSz); - } - - explicit StringView(Size Sz) - : fSz(Sz) - { - MUST_PASS(Sz > 1); - fData = new Char[Sz]; - MUST_PASS(fData); - - rt_set_memory(fData, 0, Sz); - } - - ~StringView() - { - if (fData) - delete[] fData; - } - - StringView& operator=(const StringView&) = default; - StringView(const StringView&) = default; - - Char* Data(); - const Char* CData() const; - Size Length() const; - - bool operator==(const Char* rhs) const; - bool operator!=(const Char* rhs) const; - - bool operator==(const StringView& rhs) const; - bool operator!=(const StringView& rhs) const; - - StringView& operator+=(const Char* rhs); - StringView& operator+=(const StringView& rhs); - - operator bool() - { - return fData; - } - - bool operator!() - { - return fData; - } - - private: - Char* fData{nullptr}; - Size fSz{0}; - Size fCur{0}; - - friend class StringBuilder; - }; - - struct StringBuilder final - { - static ErrorOr<StringView> Construct(const Char* data); - static const char* FromInt(const char* fmt, int n); - static const char* FromBool(const char* fmt, bool n); - static const char* Format(const char* fmt, const char* from); - static bool Equals(const char* lhs, const char* rhs); - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Utils.hxx b/dev/Kernel/NewKit/Utils.hxx deleted file mode 100644 index a7213b5a..00000000 --- a/dev/Kernel/NewKit/Utils.hxx +++ /dev/null @@ -1,29 +0,0 @@ - -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> - -namespace Kernel -{ - Int rt_copy_memory(const voidPtr src, voidPtr dst, Size len); - Int rt_move_memory(const voidPtr src, voidPtr dst, Size len); - voidPtr rt_set_memory(voidPtr dst, Char val, Size len); - void rt_zero_memory(voidPtr pointer, Size len); - Int rt_string_cmp(const Char* src, const Char* cmp, Size len); - const Char* alloc_string(const Char* text); - Size rt_string_len(const Char* str); - Size rt_string_len(const Char* str, SizeT _len); - Boolean rt_to_string(Char* buf, Int limit, Int base); - Boolean is_newln(Char chr); - Boolean is_space(Char chr); - Int rt_to_uppercase(Int c); - Int rt_to_lower(Int c); - voidPtr rt_string_in_string(const char* in, const char* needle); - char* rt_string_has_char(char* str, const char chr); -} // namespace Kernel diff --git a/dev/Kernel/NewKit/Variant.hxx b/dev/Kernel/NewKit/Variant.hxx deleted file mode 100644 index b60d2824..00000000 --- a/dev/Kernel/NewKit/Variant.hxx +++ /dev/null @@ -1,64 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Defines.hxx> -#include <NewKit/String.hxx> -#include <NewKit/Json.hxx> - -namespace Kernel -{ - class Variant final - { - public: - enum class VariantKind - { - kString, - kBlob, - kNull, - kJson, - }; - - public: - explicit Variant() = delete; - - public: - Variant& operator=(const Variant&) = default; - Variant(const Variant&) = default; - - ~Variant() = default; - - public: - explicit Variant(StringView* stringView) - : fPtr((voidPtr)stringView), fKind(VariantKind::kString) - { - } - - explicit Variant(JsonType* json) - : fPtr((voidPtr)json), fKind(VariantKind::kJson) - { - } - - explicit Variant(nullPtr) - : fPtr(nullptr), fKind(VariantKind::kNull) - { - } - - explicit Variant(voidPtr ptr) - : fPtr(ptr), fKind(VariantKind::kBlob) - { - } - - public: - const Char* ToString(); - VoidPtr Leak(); - - private: - voidPtr fPtr{nullptr}; - VariantKind fKind{VariantKind::kNull}; - }; -} // namespace Kernel diff --git a/dev/Kernel/NewKit/compile_flags.txt b/dev/Kernel/NewKit/compile_flags.txt deleted file mode 100644 index 14c5bc51..00000000 --- a/dev/Kernel/NewKit/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --I../../../ diff --git a/dev/Kernel/Objects/.hgkeep b/dev/Kernel/Objects/.hgkeep deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/Objects/.hgkeep +++ /dev/null diff --git a/dev/Kernel/ReadMe.md b/dev/Kernel/ReadMe.md deleted file mode 100644 index 76d6aab4..00000000 --- a/dev/Kernel/ReadMe.md +++ /dev/null @@ -1,3 +0,0 @@ -# ZKA Minimal Kernel DLL.
-
-A dll which takes the role of the microkernel image.
\ No newline at end of file diff --git a/dev/Kernel/Sources/Array.cxx b/dev/Kernel/Sources/Array.cxx deleted file mode 100644 index 202bee7e..00000000 --- a/dev/Kernel/Sources/Array.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Array.hxx> diff --git a/dev/Kernel/Sources/ArrayList.cxx b/dev/Kernel/Sources/ArrayList.cxx deleted file mode 100644 index 71589c9b..00000000 --- a/dev/Kernel/Sources/ArrayList.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/ArrayList.hxx> diff --git a/dev/Kernel/Sources/Atom.cxx b/dev/Kernel/Sources/Atom.cxx deleted file mode 100644 index e5a3f407..00000000 --- a/dev/Kernel/Sources/Atom.cxx +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Atom.hxx> - -// @file Atom.cpp -// @brief Atomic primitives diff --git a/dev/Kernel/Sources/CodeManager.cxx b/dev/Kernel/Sources/CodeManager.cxx deleted file mode 100644 index c0d1d308..00000000 --- a/dev/Kernel/Sources/CodeManager.cxx +++ /dev/null @@ -1,30 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Utils.hxx> -#include <KernelKit/CodeManager.hxx> -#include <KernelKit/ProcessScheduler.hxx> - -namespace Kernel -{ - /// @brief Executes a new process from a function. kernel code only. - /// @note This sets up a new stack, anything on the main function that calls the kernel will not be accessible. - /// @param main the start of the process. - /// @return if the process was started or not. - bool execute_from_image(MainKind main, const char* processName) noexcept - { - if (!main) - return false; - - PROCESS_HEADER_BLOCK proc((VoidPtr)main); - proc.Kind = PROCESS_HEADER_BLOCK::kAppKind; - rt_copy_memory((VoidPtr)processName, proc.Name, rt_string_len(proc.Name)); - - Ref<PROCESS_HEADER_BLOCK> refProc = proc; - - return ProcessScheduler::The().Leak().Add(refProc); - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Crc32.cxx b/dev/Kernel/Sources/Crc32.cxx deleted file mode 100644 index 42dc9b8e..00000000 --- a/dev/Kernel/Sources/Crc32.cxx +++ /dev/null @@ -1,74 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Crc32.hxx> - -// @file CRC32.cpp -// @brief Check sequence implementation. - -namespace Kernel -{ - /// @brief The CRC32 table. - UInt kCrcTbl[kCrcCnt] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; - - /// @brief Calculate CRC32 of p - /// @param p the data to compute. - /// @param len the length of the data. - /// @return the CRC32. - UInt ke_calculate_crc32(const Char* p, UInt len) noexcept - { - UInt crc = 0xffffffff; - - while (len-- != 0) - crc = kCrcTbl[((UInt8)crc ^ *(p++))] ^ (crc >> 8); - - // return (~crc); also works, does the same thing. - return (crc ^ 0xffffffff); - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/CxxAbi-AMD64.cxx b/dev/Kernel/Sources/CxxAbi-AMD64.cxx deleted file mode 100644 index 5514336e..00000000 --- a/dev/Kernel/Sources/CxxAbi-AMD64.cxx +++ /dev/null @@ -1,91 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifdef __NEWOS_AMD64__ - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/CxxAbi.hxx> -#include <KernelKit/LPC.hxx> - -atexit_func_entry_t __atexit_funcs[kDSOMaxObjects]; - -uarch_t __atexit_func_count; - -/// @brief Dynamic Shared Object Handle. -Kernel::UIntPtr __dso_handle; - -EXTERN_C void __cxa_pure_virtual() -{ - Kernel::kcout << "newoskrnl: C++ placeholder method.\n"; -} - -EXTERN_C void ___chkstk_ms(void) -{ - Kernel::err_bug_check_raise(); - Kernel::err_bug_check(); -} - -EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso) -{ - if (__atexit_func_count >= kDSOMaxObjects) - return -1; - - __atexit_funcs[__atexit_func_count].destructor_func = f; - __atexit_funcs[__atexit_func_count].obj_ptr = arg; - __atexit_funcs[__atexit_func_count].dso_handle = dso; - - __atexit_func_count++; - - return 0; -} - -EXTERN_C void __cxa_finalize(void* f) -{ - uarch_t i = __atexit_func_count; - if (!f) - { - while (i--) - { - if (__atexit_funcs[i].destructor_func) - { - (*__atexit_funcs[i].destructor_func)(__atexit_funcs[i].obj_ptr); - }; - } - - return; - } - - while (i--) - { - if (__atexit_funcs[i].destructor_func) - { - (*__atexit_funcs[i].destructor_func)(__atexit_funcs[i].obj_ptr); - __atexit_funcs[i].destructor_func = 0; - }; - } -} - -namespace cxxabiv1 -{ - EXTERN_C int __cxa_guard_acquire(__guard* g) - { - (void)g; - return 0; - } - - EXTERN_C int __cxa_guard_release(__guard* g) - { - *(char*)g = 1; - return 0; - } - - EXTERN_C void __cxa_guard_abort(__guard* g) - { - (void)g; - } -} // namespace cxxabiv1 - -#endif // ifdef __NEWOS_AMD64__ diff --git a/dev/Kernel/Sources/CxxAbi-ARM64.cxx b/dev/Kernel/Sources/CxxAbi-ARM64.cxx deleted file mode 100644 index b0cb7354..00000000 --- a/dev/Kernel/Sources/CxxAbi-ARM64.cxx +++ /dev/null @@ -1,74 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifdef __NEWOS_ARM64__ - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/CxxAbi.hxx> -#include <KernelKit/LPC.hxx> - -EXTERN_C -{ -#include <limits.h> -} - -int const cUninitialized = 0; -int const cBeingInitialized = -1; -int const cEpochStart = INT_MIN; - -EXTERN_C -{ - int _Init_global_epoch = cEpochStart; - __thread int _Init_thread_epoch = cEpochStart; -} - -Kernel::UInt32 const cNKTimeout = 100; // ms - -EXTERN_C void __cdecl _Init_thread_wait(Kernel::UInt32 const timeout) -{ - MUST_PASS(timeout != INT_MAX); -} - -EXTERN_C void __cdecl _Init_thread_header(int* const pOnce) noexcept -{ - if (*pOnce == cUninitialized) - { - *pOnce = cBeingInitialized; - } - else - { - while (*pOnce == cBeingInitialized) - { - _Init_thread_wait(cNKTimeout); - - if (*pOnce == cUninitialized) - { - *pOnce = cBeingInitialized; - return; - } - } - _Init_thread_epoch = _Init_global_epoch; - } -} - -EXTERN_C void __cdecl _Init_thread_abort(int* const pOnce) noexcept -{ - *pOnce = cUninitialized; -} - -EXTERN_C void __cdecl _Init_thread_footer(int* const pOnce) noexcept -{ - ++_Init_global_epoch; - *pOnce = _Init_global_epoch; - _Init_thread_epoch = _Init_global_epoch; -} - -EXTERN_C void _purecall() -{ - Kernel::kcout << "newoskrnl: C++ placeholder method.\n"; -} - -#endif // ifdef __NEWOS_ARM64__ diff --git a/dev/Kernel/Sources/Defines.cxx b/dev/Kernel/Sources/Defines.cxx deleted file mode 100644 index 2e8dde86..00000000 --- a/dev/Kernel/Sources/Defines.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Defines.hxx> diff --git a/dev/Kernel/Sources/DeviceManager.cxx b/dev/Kernel/Sources/DeviceManager.cxx deleted file mode 100644 index 229e0fb7..00000000 --- a/dev/Kernel/Sources/DeviceManager.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DeviceManager.hxx> diff --git a/dev/Kernel/Sources/DriveManager.cxx b/dev/Kernel/Sources/DriveManager.cxx deleted file mode 100644 index 90bf12f8..00000000 --- a/dev/Kernel/Sources/DriveManager.cxx +++ /dev/null @@ -1,151 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/DriveManager.hxx> -#include <Modules/ATA/ATA.hxx> -#include <Modules/AHCI/AHCI.hxx> -#include <NewKit/Utils.hxx> - -/// @file DriveManager.cxx -/// @brief Kernel drive manager. - -namespace Kernel -{ - static UInt16 kATAIO = 0U; - static UInt8 kATAMaster = 0U; - - /// @brief reads from an ATA drive. - /// @param pckt - /// @return - Void ke_drv_input(DriveTrait::DrivePacket* pckt) - { - if (!pckt) - { - return; - } - - pckt->fPacketGood = false; - -#ifdef __AHCI__ - drv_std_read(pckt->fLba, (Char*)pckt->fPacketContent, kAHCISectorSize, pckt->fPacketSize); -#elif defined(__ATA_PIO__) || defined(__ATA_DMA__) - drv_std_read(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent, kATASectorSize, pckt->fPacketSize); -#endif - - pckt->fPacketGood = true; - } - - /// @brief Writes to an ATA drive. - /// @param pckt - /// @return - Void ke_drv_output(DriveTrait::DrivePacket* pckt) - { - if (!pckt) - { - return; - } - - pckt->fPacketGood = false; - -#ifdef __AHCI__ - drv_std_write(pckt->fLba, (Char*)pckt->fPacketContent, kATASectorSize, pckt->fPacketSize); -#elif defined(__ATA_PIO__) || defined(__ATA_DMA__) - drv_std_write(pckt->fLba, kATAIO, kATAMaster, (Char*)pckt->fPacketContent, kATASectorSize, pckt->fPacketSize); -#endif - - pckt->fPacketGood = true; - } - - /// @brief Executes a disk check on the ATA drive. - /// @param pckt - /// @return - Void ke_drv_check_disk(DriveTrait::DrivePacket* pckt) - { - if (!pckt) - { - return; - } - - pckt->fPacketGood = false; - -#if defined(__ATA_PIO__) || defined(__ATA_DMA__) - kATAMaster = true; - kATAIO = ATA_PRIMARY_IO; - - MUST_PASS(drv_std_init(kATAIO, kATAMaster, kATAIO, kATAMaster)); -#endif // if defined(__ATA_PIO__) || defined (__ATA_DMA__) - - pckt->fPacketGood = true; - } - -/// @brief Gets the drive kind (ATA, SCSI, AHCI...) -/// @param -/// @return -#ifdef __ATA_PIO__ - const Char* io_drive_kind(Void) - { - return "ATA-PIO"; - } -#endif - -#ifdef __ATA_DMA__ - const Char* io_drive_kind(Void) - { - return "ATA-DMA"; - } -#endif - -#ifdef __AHCI__ - const Char* io_drive_kind(Void) - { - return "AHCI"; - } -#endif - - /// @brief Unimplemented drive. - /// @param pckt - /// @return - Void io_drv_unimplemented(DriveTrait::DrivePacket* pckt) - { - } - - /// @brief Makes a new drive. - /// @return the new drive. - DriveTrait io_construct_drive() noexcept - { - DriveTrait trait; - - rt_copy_memory((VoidPtr) "/Mount/Null", trait.fName, rt_string_len("/Mount/Null")); - trait.fKind = kInvalidDrive; - - trait.fInput = io_drv_unimplemented; - trait.fOutput = io_drv_unimplemented; - trait.fVerify = io_drv_unimplemented; - trait.fDriveKind = io_drive_kind; - - return trait; - } - - /// @brief Fetches the main drive. - /// @return the new drive. - DriveTrait io_construct_main_drive() noexcept - { - DriveTrait trait; - - rt_copy_memory((VoidPtr) "MainDisk", trait.fName, rt_string_len("MainDisk")); - trait.fKind = kMassStorage; - - trait.fInput = ke_drv_input; - trait.fOutput = ke_drv_output; - trait.fVerify = ke_drv_check_disk; - trait.fDriveKind = io_drive_kind; - - kcout << "newoskrnl: Construct drive with success.\r"; - - return trait; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/ErrorOr.cxx b/dev/Kernel/Sources/ErrorOr.cxx deleted file mode 100644 index 0205506d..00000000 --- a/dev/Kernel/Sources/ErrorOr.cxx +++ /dev/null @@ -1,12 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/ErrorOr.hxx> - -/***********************************************************************************/ -/// @file ErrorOr.cxx /// -/// @brief Error Or Value class. /// -/***********************************************************************************/ diff --git a/dev/Kernel/Sources/FS/NewFS.cxx b/dev/Kernel/Sources/FS/NewFS.cxx deleted file mode 100644 index 90f48eb2..00000000 --- a/dev/Kernel/Sources/FS/NewFS.cxx +++ /dev/null @@ -1,1054 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#ifdef __FSKIT_USE_NEWFS__ - -#include <Modules/AHCI/AHCI.hxx> -#include <Modules/ATA/ATA.hxx> -#include <Modules/Flash/Flash.hxx> -#include <FSKit/NewFS.hxx> -#include <KernelKit/LPC.hxx> -#include <NewKit/Crc32.hxx> -#include <NewKit/KernelCheck.hxx> -#include <NewKit/String.hxx> -#include <NewKit/Utils.hxx> -#include <FirmwareKit/EPM.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/User.hxx> - -using namespace Kernel; - -#ifdef __ED__ -/** - Define those external symbols, to make the editor shutup -*/ - -/// @brief get sector count. -Kernel::SizeT drv_std_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_std_get_drv_size(); - -#endif - -///! BUGS: 0 - -/***********************************************************************************/ -/// This file implements the New File System. -/// New File System implements a B-Tree based algortihm. -/// \\ -/// \\Path1\\ \\ath2\\ -/// \\readme.rtf \\ListContents.pef \\readme.lnk <-- symlink. -/// \\Path1\\readme.rtf -/***********************************************************************************/ - -STATIC MountpointInterface sMountpointInterface; - -/// @brief Creates a new fork inside the New filesystem partition. -/// @param catalog it's catalog -/// @param theFork the fork itself. -/// @return the fork -_Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* catalog, - _Input NFS_FORK_STRUCT& theFork) -{ - if (catalog && theFork.ForkName[0] != 0 && - theFork.DataSize == kNewFSForkSize) - { - Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork - : catalog->ResourceFork; - - kcout << "newoskrnl: fork lba: " << hex_number(lba) << endl; - - if (lba <= kNewFSCatalogStartAddress) - return nullptr; - - auto drv = sMountpointInterface.A(); - - /// special treatment. - rt_copy_memory((VoidPtr) "fs/newfs-packet", drv.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - NFS_FORK_STRUCT curFork{0}; - NFS_FORK_STRUCT prevFork{0}; - Lba lbaOfPreviousFork = lba; - - /// do not check for anything. Loop until we get what we want, that is a free fork zone. - while (true) - { - if (lba <= kNewFSCatalogStartAddress) - break; - - drv.fPacket.fLba = lba; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &curFork; - - drv.fInput(&drv.fPacket); - - kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl; - - if (curFork.Flags == kNewFSFlagCreated) - { - kcout << "newoskrnl: Fork already exists.\r"; - - /// sanity check. - if (StringBuilder::Equals(curFork.ForkName, theFork.ForkName) && - StringBuilder::Equals(curFork.CatalogName, catalog->Name)) - return nullptr; - - kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl; - - lbaOfPreviousFork = lba; - lba = curFork.NextSibling; - - prevFork = curFork; - } - else - { - /// This is a check that we have, in order to link the previous fork - /// entry. - if (lba >= kNewFSCatalogStartAddress) - { - drv.fPacket.fLba = lbaOfPreviousFork; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &prevFork; - - prevFork.NextSibling = lba; - - /// write to disk. - drv.fOutput(&drv.fPacket); - } - - break; - } - } - - constexpr auto cForkPadding = - 4; /// this value gives us space for the data offset. - - theFork.Flags = kNewFSFlagCreated; - theFork.DataOffset = lba - sizeof(NFS_FORK_STRUCT) * cForkPadding; - theFork.PreviousSibling = lbaOfPreviousFork; - theFork.NextSibling = theFork.DataOffset - theFork.DataSize; - - drv.fPacket.fLba = lba; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &theFork; - - drv.fOutput(&drv.fPacket); - - /// log what we have now. - kcout << "newoskrnl: Wrote fork data at: " << hex_number(theFork.DataOffset) - << endl; - - kcout << "newoskrnl: Wrote fork at: " << hex_number(lba) << endl; - - return &theFork; - } - - return nullptr; -} - -/// @brief Find fork inside New filesystem. -/// @param catalog the catalog. -/// @param name the fork name. -/// @return the fork. -_Output NFS_FORK_STRUCT* NewFSParser::FindFork(_Input NFS_CATALOG_STRUCT* catalog, - _Input const Char* name, - Boolean isDataFork) -{ - auto drv = sMountpointInterface.A(); - NFS_FORK_STRUCT* theFork = nullptr; - - Lba lba = isDataFork ? catalog->DataFork : catalog->ResourceFork; - - while (lba != 0) - { - drv.fPacket.fLba = lba; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = (VoidPtr)theFork; - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drv.fPacket.fPacketMime, 16); - - if (auto res = - fs_newfs_read(&sMountpointInterface, drv, this->fDriveIndex); - res) - { - switch (res) - { - case 1: - ErrLocal() = kErrorDiskReadOnly; - break; - case 2: - ErrLocal() = kErrorDiskIsFull; - break; - ErrLocal() = kErrorNoSuchDisk; - break; - - default: - break; - } - return nullptr; - } - - if (StringBuilder::Equals(theFork->ForkName, name)) - { - break; - } - - lba = theFork->NextSibling; - } - - return theFork; -} - -/// @brief Simpler factory to create a catalog (assumes you want to create a -/// file.) -/// @param name -/// @return catalog pointer. -_Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name) -{ - return this->CreateCatalog(name, 0, kNewFSCatalogKindFile); -} - -/// @brief Creates a new catalog into the disk. -/// @param name the catalog name. -/// @param flags the flags of the catalog. -/// @param kind the catalog kind. -/// @return catalog pointer. -_Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name, - _Input const Int32& flags, - _Input const Int32& kind) -{ - kcout << "newoskrnl: CreateCatalog(...)\r"; - - Lba outLba = 0UL; - - kcout << "newoskrnl: Checking for extension...\r"; - - /// a directory should have a slash in the end. - if (kind == kNewFSCatalogKindDir && - name[rt_string_len(name) - 1] != NewFilesystemHelper::Separator()) - return nullptr; - - /// a file shouldn't have a slash in the end. - if (kind != kNewFSCatalogKindDir && - name[rt_string_len(name) - 1] == NewFilesystemHelper::Separator()) - return nullptr; - - NFS_CATALOG_STRUCT* copyExists = this->FindCatalog(name, outLba); - - if (copyExists) - { - kcout << "newoskrnl: Copy already exists.\r"; - ErrLocal() = kErrorFileExists; - - return copyExists; - } - - Char parentName[kNewFSNodeNameLen] = {0}; - - for (SizeT indexName = 0UL; indexName < rt_string_len(name); ++indexName) - { - parentName[indexName] = name[indexName]; - } - - if (*parentName == 0) - { - kcout << "newoskrnl: Parent name is NUL.\r"; - ErrLocal() = kErrorFileNotFound; - return nullptr; - } - - /// Locate parent catalog, to then allocate right after it. - - for (SizeT indexFill = 0; indexFill < rt_string_len(name); ++indexFill) - { - parentName[indexFill] = name[indexFill]; - } - - SizeT indexReverseCopy = rt_string_len(parentName); - - // zero character it. - parentName[--indexReverseCopy] = 0; - - // mandatory / character, zero it. - parentName[--indexReverseCopy] = 0; - - while (parentName[indexReverseCopy] != NewFilesystemHelper::Separator()) - { - parentName[indexReverseCopy] = 0; - --indexReverseCopy; - } - - NFS_CATALOG_STRUCT* catalog = this->FindCatalog(parentName, outLba); - - if (catalog && catalog->Kind == kNewFSCatalogKindFile) - { - kcout << "newoskrnl: Parent name is file.\r"; - delete catalog; - return nullptr; - } - else if (!catalog) - { - outLba = kNewFSCatalogStartAddress; - } - - constexpr SizeT cDefaultForkSize = kNewFSForkSize; - - NFS_CATALOG_STRUCT* catalogChild = new NFS_CATALOG_STRUCT(); - - Int32 flagsList = flags; - - if (flagsList & kNewFSCatalogKindMetaFile) - { - if (UserManager::The()->GetCurrent() != UserManager::The()->fRootUser && - UserManager::The()->fRootUser) - { - delete catalogChild; - return nullptr; - } - } - - catalogChild->ResourceForkSize = cDefaultForkSize; - catalogChild->DataForkSize = cDefaultForkSize; - - catalogChild->NextSibling = outLba; - catalogChild->PrevSibling = outLba; - catalogChild->Kind = kind; - catalogChild->Flags = kNewFSFlagCreated | flagsList; - - rt_copy_memory((VoidPtr)name, (VoidPtr)catalogChild->Name, - rt_string_len(name)); - - UInt16 catalogBuf[kNewFSSectorSz] = {0}; - - auto drive = sMountpointInterface.A(); - - Lba startFree = outLba; - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - drive.fPacket.fPacketContent = catalogBuf; - drive.fPacket.fPacketSize = kNewFSSectorSz; - drive.fPacket.fLba = startFree; - - drive.fInput(&drive.fPacket); - - NFS_CATALOG_STRUCT* nextSibling = (NFS_CATALOG_STRUCT*)catalogBuf; - - startFree = nextSibling->NextSibling; - - catalogChild->PrevSibling = outLba; - - drive.fPacket.fLba = startFree; - drive.fInput(&drive.fPacket); - - while (drive.fPacket.fPacketGood) - { - nextSibling = reinterpret_cast<NFS_CATALOG_STRUCT*>(catalogBuf); - - if (startFree <= kNewFSStartLba) - { - delete catalogChild; - delete catalog; - - return nullptr; - } - - // ========================== // - // allocate catalog now... - // ========================== // - if (nextSibling->Flags != kNewFSFlagCreated) - { - Char sectorBufPartBlock[kNewFSSectorSz] = {0}; - - drive.fPacket.fPacketContent = sectorBufPartBlock; - drive.fPacket.fPacketSize = kNewFSSectorSz; - drive.fPacket.fLba = kNewFSStartLba; - - drive.fInput(&drive.fPacket); - - constexpr auto cNewFSCatalogPadding = 4; - - NFS_ROOT_PARTITION_BLOCK* partBlock = (NFS_ROOT_PARTITION_BLOCK*)sectorBufPartBlock; - - if (partBlock->FreeCatalog < 1) - { - delete catalogChild; - return nullptr; - } - - catalogChild->DataFork = partBlock->DiskSize - partBlock->StartCatalog; - - catalogChild->ResourceFork = catalogChild->DataFork; - - catalogChild->NextSibling = - startFree + (sizeof(NFS_CATALOG_STRUCT) * cNewFSCatalogPadding); - - drive.fPacket.fPacketContent = catalogChild; - drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); - drive.fPacket.fLba = startFree; - - drive.fOutput(&drive.fPacket); - - drive.fPacket.fPacketContent = catalogBuf; - drive.fPacket.fPacketSize = kNewFSSectorSz; - drive.fPacket.fLba = - startFree - (sizeof(NFS_CATALOG_STRUCT) * cNewFSCatalogPadding); - - drive.fInput(&drive.fPacket); - - nextSibling->NextSibling = startFree; - - drive.fOutput(&drive.fPacket); - - kcout << "newoskrnl: Create new catalog, status: " - << hex_number(catalogChild->Flags) << endl; - kcout << "newoskrnl: Create new catalog, status: " << catalogChild->Name - << endl; - - drive.fPacket.fPacketContent = sectorBufPartBlock; - drive.fPacket.fPacketSize = kNewFSSectorSz; - drive.fPacket.fLba = kNewFSStartLba; - - drive.fInput(&drive.fPacket); - - partBlock->SectorCount -= 1; - partBlock->CatalogCount += 1; - partBlock->FreeCatalog -= 1; - partBlock->FreeCatalog = catalogChild->NextSibling; - - drive.fOutput(&drive.fPacket); - - delete catalog; - return catalogChild; - } - - constexpr auto cNewFSCatalogPadding = 4; - - //// @note that's how we find the next catalog in the partition block. - startFree = startFree + (sizeof(NFS_CATALOG_STRUCT) * cNewFSCatalogPadding); - - drive.fPacket.fPacketContent = catalogBuf; - drive.fPacket.fPacketSize = kNewFSSectorSz; - drive.fPacket.fLba = startFree; - - drive.fInput(&drive.fPacket); - } - - delete catalog; - return nullptr; -} - -/// @brief Make a EPM+NewFS drive out of the disk. -/// @param drive The drive to write on. -/// @return If it was sucessful, see ErrLocal(). -bool NewFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endLba, _Input const Int32 flags, const Char* part_name) -{ - if (*part_name == 0 || - endLba == 0) - return false; - - // verify disk. - drive->fVerify(&drive->fPacket); - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive->fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - // if disk isn't good, then error out. - if (false == drive->fPacket.fPacketGood) - { - ErrLocal() = kErrorDiskIsCorrupted; - return false; - } - - Char sectorBuf[kNewFSSectorSz] = {0}; - - Lba start = kNewFSStartLba; - - drive->fPacket.fPacketContent = sectorBuf; - drive->fPacket.fPacketSize = kNewFSSectorSz; - drive->fPacket.fLba = start; - - drive->fInput(&drive->fPacket); - - if (flags & kNewFSPartitionTypeBoot) - { - // make it bootable when needed. - Char bufEpmHdr[kNewFSSectorSz] = {0}; - - BOOT_BLOCK_STRUCT* epmBoot = (BOOT_BLOCK_STRUCT*)bufEpmHdr; - - constexpr auto cFsName = "NewFS"; - constexpr auto cBlockName = "ZKA:"; - - rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(cFsName)), epmBoot->Fs, rt_string_len(cFsName)); - - epmBoot->FsVersion = kNewFSVersionInteger; - epmBoot->LbaStart = 0; - epmBoot->SectorSz = kNewFSSectorSz; - - rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(cBlockName)), epmBoot->Name, rt_string_len(cBlockName)); - rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kEPMMagic)), epmBoot->Magic, rt_string_len(kEPMMagic)); - - Lba outEpmLba = kEpmBase; - - Char buf[kNewFSSectorSz]; - - Lba prevStart = 0; - SizeT cnt = 0; - - while (drive->fPacket.fPacketGood) - { - drive->fPacket.fPacketContent = buf; - drive->fPacket.fPacketSize = kNewFSSectorSz; - drive->fPacket.fLba = outEpmLba; - - drive->fInput(&drive->fPacket); - - if (buf[0] == 0) - { - epmBoot->LbaStart = prevStart; - - if (epmBoot->LbaStart) - epmBoot->LbaStart = outEpmLba; - - epmBoot->LbaEnd = endLba; - epmBoot->NumBlocks = cnt; - - drive->fPacket.fPacketContent = bufEpmHdr; - drive->fPacket.fPacketSize = kNewFSSectorSz; - drive->fPacket.fLba = outEpmLba; - - drive->fOutput(&drive->fPacket); - - break; - } - else - { - prevStart = ((BOOT_BLOCK_STRUCT*)buf)->LbaStart + ((BOOT_BLOCK_STRUCT*)buf)->LbaEnd; - } - - outEpmLba += sizeof(BOOT_BLOCK_STRUCT); - ++cnt; - } - } - - // disk isnt faulty and data has been fetched. - while (drive->fPacket.fPacketGood) - { - NFS_ROOT_PARTITION_BLOCK* partBlock = (NFS_ROOT_PARTITION_BLOCK*)sectorBuf; - - // check for an empty partition here. - if (partBlock->PartitionName[0] == 0 && - rt_string_cmp(partBlock->Ident, kNewFSIdent, kNewFSIdentLen)) - { - // partition is free and valid. - - partBlock->Version = kNewFSVersionInteger; - - const auto cUntitledHD = part_name; - - rt_copy_memory((VoidPtr)kNewFSIdent, (VoidPtr)partBlock->Ident, - kNewFSIdentLen); - - rt_copy_memory((VoidPtr)cUntitledHD, (VoidPtr)partBlock->PartitionName, - rt_string_len(cUntitledHD)); - - SizeT catalogCount = 0UL; - - SizeT sectorCount = drv_std_get_sector_count(); - SizeT diskSize = drv_std_get_drv_size(); - - partBlock->Kind = kNewFSPartitionTypeStandard; - partBlock->StartCatalog = kNewFSCatalogStartAddress; - partBlock->Flags = kNewFSPartitionTypeStandard; - partBlock->CatalogCount = sectorCount / sizeof(NFS_CATALOG_STRUCT); - partBlock->SectorCount = sectorCount; - partBlock->DiskSize = diskSize; - partBlock->FreeCatalog = sectorCount / sizeof(NFS_CATALOG_STRUCT); - - drive->fPacket.fPacketContent = sectorBuf; - drive->fPacket.fPacketSize = kNewFSSectorSz; - drive->fPacket.fLba = kNewFSStartLba; - - drive->fOutput(&drive->fPacket); - - kcout << "newoskrnl: drive kind: " << drive->fDriveKind() << endl; - - kcout << "newoskrnl: partition name: " << partBlock->PartitionName << endl; - kcout << "newoskrnl: start: " << hex_number(partBlock->StartCatalog) << endl; - kcout << "newoskrnl: number of catalogs: " << hex_number(partBlock->CatalogCount) << endl; - kcout << "newoskrnl: free catalog: " << hex_number(partBlock->FreeCatalog) << endl; - kcout << "newoskrnl: free sectors: " << hex_number(partBlock->FreeSectors) << endl; - kcout << "newoskrnl: sector size: " << hex_number(partBlock->SectorSize) << endl; - - // write the root catalog. - this->CreateCatalog(kNewFSRoot, 0, kNewFSCatalogKindDir); - - return true; - } - - kcout << "newoskrnl: partition block already exists.\r"; - - start += partBlock->DiskSize; - - drive->fPacket.fPacketContent = sectorBuf; - drive->fPacket.fPacketSize = kNewFSSectorSz; - drive->fPacket.fLba = start; - - drive->fInput(&drive->fPacket); - } - - return false; -} - -/// @brief Writes the data fork into a specific catalog. -/// @param catalog the catalog itself -/// @param data the data. -/// @return if the catalog w rote the contents successfully. -bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, voidPtr data, SizeT sizeOfData, _Input const Char* forkName) -{ - NFS_FORK_STRUCT forkData{0}; - - auto drive = sMountpointInterface.A(); - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - auto startFork = catalog->DataFork; - - rt_copy_memory(catalog->Name, forkData.CatalogName, kNewFSNodeNameLen); - - NFS_FORK_STRUCT forkDataIn{0}; - - // sanity check of the fork position as the condition to run the loop. - while (startFork >= kNewFSCatalogStartAddress) - { - drive.fPacket.fPacketContent = &forkDataIn; - drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drive.fPacket.fLba = startFork; - - drive.fInput(&drive.fPacket); - - kcout << "newoskrnl: fork name: " << forkName << endl; - - // check the fork, if it's position is valid. - if (forkDataIn.DataOffset <= kNewFSCatalogStartAddress) - { - ErrLocal() = kErrorDiskIsCorrupted; - - kcout << "newoskrnl: Invalid fork offset.\r"; - - return false; - } - - if (forkData.Flags != kNewFSFlagUnallocated && - forkData.Flags != kNewFSFlagDeleted && - StringBuilder::Equals(forkData.ForkName, forkName) && - StringBuilder::Equals(forkData.CatalogName, catalog->Name)) - { - if (forkDataIn.DataSize < sizeOfData) - { - startFork = forkData.NextSibling; - continue; - } - - drive.fPacket.fPacketContent = data; - drive.fPacket.fPacketSize = sizeOfData; - drive.fPacket.fLba = forkData.DataOffset; - - kcout << "newoskrnl: data offset: " << hex_number(forkData.DataOffset) << endl; - - drive.fOutput(&drive.fPacket); - - return true; - } - else - { - // ===================================================== // - // Store size of blob now. - // ===================================================== // - forkData.DataSize = sizeOfData; - - if (sizeOfData < kNewFSForkSize) - forkData.DataSize = kNewFSForkSize; - - drive.fPacket.fPacketContent = data; - drive.fPacket.fPacketSize = sizeOfData; - drive.fPacket.fLba = forkData.DataOffset; - - kcout << "newoskrnl: data offset: " << hex_number(forkData.DataOffset) << endl; - - drive.fOutput(&drive.fPacket); - - forkData.Flags = kNewFSFlagCreated; - - drive.fPacket.fPacketContent = &forkData; - drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drive.fPacket.fLba = startFork; - - drive.fOutput(&drive.fPacket); - - kcout << "newoskrnl: wrote fork at offset: " << hex_number(forkData.DataOffset) << endl; - - delete catalog; - - return true; - } - - startFork = forkData.NextSibling; - } - - return false; -} - -/// @brief -/// @param catalogName the catalog name. -/// @return the newly found catalog. -_Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogName, - Lba& outLba) -{ - kcout << "newoskrnl: start finding catalog...\r"; - - Char* sectorBuf = new Char[sizeof(NFS_ROOT_PARTITION_BLOCK)]; - auto drive = sMountpointInterface.A(); - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - drive.fPacket.fPacketContent = sectorBuf; - drive.fPacket.fPacketSize = sizeof(NFS_ROOT_PARTITION_BLOCK); - drive.fPacket.fLba = kNewFSStartLba; - - drive.fInput(&drive.fPacket); - - NFS_ROOT_PARTITION_BLOCK* part = (NFS_ROOT_PARTITION_BLOCK*)sectorBuf; - - auto startCatalogList = part->StartCatalog; - const auto cCtartCatalogList = part->StartCatalog; - - auto localSearchFirst = false; - - drive.fPacket.fLba = startCatalogList; - drive.fPacket.fPacketContent = sectorBuf; - drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); - - drive.fInput(&drive.fPacket); - - if (!StringBuilder::Equals(catalogName, NewFilesystemHelper::Root())) - { - Char parentName[kNewFSNodeNameLen] = {0}; - - for (SizeT indexFill = 0; indexFill < rt_string_len(catalogName); ++indexFill) - { - parentName[indexFill] = catalogName[indexFill]; - } - - SizeT indexReverseCopy = rt_string_len(parentName); - - // zero character. - parentName[--indexReverseCopy] = 0; - - // mandatory '/' character. - parentName[--indexReverseCopy] = 0; - - while (parentName[indexReverseCopy] != NewFilesystemHelper::Separator()) - { - parentName[indexReverseCopy] = 0; - --indexReverseCopy; - } - - NFS_CATALOG_STRUCT* parentCatalog = this->FindCatalog(parentName, outLba); - - if (parentCatalog && - !StringBuilder::Equals(parentName, NewFilesystemHelper::Root())) - { - startCatalogList = outLba; - delete parentCatalog; - - localSearchFirst = true; - } - else if (parentCatalog) - { - delete parentCatalog; - } - } - - kcout << "newoskrnl: fetching catalog...\r"; - -_NewFSSearchThroughCatalogList: - while (drive.fPacket.fPacketGood) - { - NFS_CATALOG_STRUCT* catalog = (NFS_CATALOG_STRUCT*)sectorBuf; - - if (StringBuilder::Equals(catalogName, catalog->Name)) - { - /// ignore unallocated catalog, break - if (catalog->Flags != kNewFSFlagCreated) - { - goto NewFSContinueSearch; - } - - NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT(); - rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT)); - - kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl; - - outLba = startCatalogList; - delete[] sectorBuf; - return catalogPtr; - } - - NewFSContinueSearch: - startCatalogList = catalog->NextSibling; - - if (startCatalogList <= kNewFSStartLba) - break; - - drive.fPacket.fLba = startCatalogList; - drive.fPacket.fPacketContent = sectorBuf; - drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); - - drive.fInput(&drive.fPacket); - } - - if (localSearchFirst) - { - localSearchFirst = false; - startCatalogList = cCtartCatalogList; - - goto _NewFSSearchThroughCatalogList; - } - - outLba = 0UL; - delete[] sectorBuf; - - return nullptr; -} - -/// @brief Get catalog from filesystem. -/// @param name the catalog's name/ -/// @return -_Output NFS_CATALOG_STRUCT* NewFSParser::GetCatalog(_Input const Char* name) -{ - Lba unused = 0; - return this->FindCatalog(name, unused); -} - -/// @brief Closes a catalog, (frees it). -/// @param catalog the catalog to close. -/// @return -Boolean NewFSParser::CloseCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog) -{ - if (!catalog) - return false; - - delete catalog; - catalog = nullptr; - - return true; -} - -/// @brief Mark catalog as removed. -/// @param catalog The catalog structure. -/// @return if the catalog was removed or not. -Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName) -{ - if (!catalogName || - StringBuilder::Equals(catalogName, NewFilesystemHelper::Root())) - { - ErrLocal() = kErrorInternal; - return false; - } - - Lba outLba = 0; - auto catalog = this->FindCatalog(catalogName, outLba); - - if (outLba >= kNewFSCatalogStartAddress || - catalog->Flags == kNewFSFlagCreated) - { - catalog->Flags = kNewFSFlagDeleted; - - auto drive = sMountpointInterface.A(); - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - drive.fPacket.fLba = outLba; // the catalog position. - drive.fPacket.fPacketSize = - sizeof(NFS_CATALOG_STRUCT); // size of catalog. roughly the sector size. - drive.fPacket.fPacketContent = catalog; // the catalog itself. - - drive.fOutput(&drive.fPacket); // send packet. - - Char partitionBlockBuf[sizeof(NFS_ROOT_PARTITION_BLOCK)] = {0}; - - drive.fPacket.fLba = kNewFSStartLba; - drive.fPacket.fPacketContent = partitionBlockBuf; - drive.fPacket.fPacketSize = sizeof(NFS_ROOT_PARTITION_BLOCK); - - drive.fInput(&drive.fPacket); - - NFS_ROOT_PARTITION_BLOCK* partBlock = - reinterpret_cast<NFS_ROOT_PARTITION_BLOCK*>(partitionBlockBuf); - - ++partBlock->FreeCatalog; - --partBlock->CatalogCount; - - drive.fOutput(&drive.fPacket); - - return true; - } - - delete catalog; - return false; -} - -/// ***************************************************************** /// -/// Reading,Seek,Tell are unimplemented on catalogs, refer to forks I/O instead. -/// ***************************************************************** /// - -/***********************************************************************************/ -/// @brief Read the catalog data fork. -/// @param catalog -/// @param dataSz -/// @return -/***********************************************************************************/ - -VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, - _Input SizeT dataSz, - _Input const Char* forkName) -{ - if (!catalog) - { - ErrLocal() = kErrorFileNotFound; - return nullptr; - } - - Lba dataForkLba = catalog->DataFork; - Size dataForkSize = catalog->DataForkSize; - - kcout << "newoskrnl: catalog " << catalog->Name - << ", fork: " << hex_number(dataForkLba) << endl; - - Char* sectorBuf = new Char[sizeof(NFS_FORK_STRUCT)]; - auto drive = sMountpointInterface.A(); - - rt_copy_memory((VoidPtr) "fs/newfs-packet", drive.fPacket.fPacketMime, - rt_string_len("fs/newfs-packet")); - - NFS_FORK_STRUCT* forkData = nullptr; - - while (dataForkLba >= kNewFSCatalogStartAddress) - { - drive.fPacket.fLba = dataForkLba; - drive.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drive.fPacket.fPacketContent = sectorBuf; - - drive.fInput(&drive.fPacket); - - forkData = (NFS_FORK_STRUCT*)sectorBuf; - - kcout << "newoskrnl: name: " << forkData->ForkName << endl; - - if (forkData->DataOffset <= kNewFSCatalogStartAddress) - { - delete[] sectorBuf; - - kcout << "Fail-Data-Offset: " << hex_number(forkData->DataOffset) << endl; - - return nullptr; - } - - if (StringBuilder::Equals(forkName, forkData->ForkName) && - StringBuilder::Equals(catalog->Name, forkData->CatalogName)) - break; - - dataForkLba = forkData->NextSibling; - } - - if (dataForkLba <= kNewFSCatalogStartAddress) - { - delete[] sectorBuf; - return nullptr; - } - - Char* forkBuf = new Char[dataSz]; - - drive.fPacket.fLba = forkData->DataOffset; - drive.fPacket.fPacketSize = dataSz; - drive.fPacket.fPacketContent = forkBuf; - - drive.fInput(&drive.fPacket); - - delete[] sectorBuf; - return forkBuf; -} - -/***********************************************************************************/ -/// @brief Seek in the data fork. -/// @param catalog the catalog offset. -/// @param off where to seek. -/// @return if the seeking was successful. -/***********************************************************************************/ - -bool NewFSParser::Seek(_Input _Output NFS_CATALOG_STRUCT* catalog, SizeT off) -{ - if (!catalog) - { - ErrLocal() = kErrorFileNotFound; - return false; - } - - ErrLocal() = kErrorUnimplemented; - return false; -} - -/***********************************************************************************/ -/// @brief Tell where we are inside the data fork. -/// @param catalog -/// @return The position on the file. -/***********************************************************************************/ - -SizeT NewFSParser::Tell(_Input _Output NFS_CATALOG_STRUCT* catalog) -{ - if (!catalog) - { - ErrLocal() = kErrorFileNotFound; - return 0; - } - - ErrLocal() = kErrorUnimplemented; - return 0; -} - -namespace Kernel::Detail -{ - /***********************************************************************************/ - /// @brief Construct NewFS drives. - /***********************************************************************************/ - Boolean fs_init_newfs(Void) noexcept - { - kcout << "newoskrnl: Creating drives...\r"; - - sMountpointInterface.A() = io_construct_main_drive(); - sMountpointInterface.B() = io_construct_drive(); - sMountpointInterface.C() = io_construct_drive(); - sMountpointInterface.D() = io_construct_drive(); - - kcout << "newoskrnl: Testing main drive...\r"; - - sMountpointInterface.A().fVerify(&sMountpointInterface.A().fPacket); - - kcout << "newoskrnl: Testing main drive [ OK ]...\r"; - - return true; - } -} // namespace Kernel::Detail - -#endif // ifdef __FSKIT_USE_NEWFS__ diff --git a/dev/Kernel/Sources/FS/compile_flags.txt b/dev/Kernel/Sources/FS/compile_flags.txt deleted file mode 100644 index 39b236a9..00000000 --- a/dev/Kernel/Sources/FS/compile_flags.txt +++ /dev/null @@ -1,6 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I../ --D__ED__ diff --git a/dev/Kernel/Sources/FileManager.cxx b/dev/Kernel/Sources/FileManager.cxx deleted file mode 100644 index aa8fca2a..00000000 --- a/dev/Kernel/Sources/FileManager.cxx +++ /dev/null @@ -1,196 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/FileManager.hxx> -#include <NewKit/Utils.hxx> - -/// BUGS: 0 -//! @brief File manager for Kernel. - -namespace Kernel -{ - STATIC FilesystemManagerInterface* kMounted = nullptr; - - /// @brief FilesystemManager getter. - /// @return The mounted filesystem. - _Output FilesystemManagerInterface* FilesystemManagerInterface::GetMounted() - { - return kMounted; - } - - /// @brief Unmount filesystem. - /// @return The unmounted filesystem. - _Output FilesystemManagerInterface* FilesystemManagerInterface::Unmount() - { - if (kMounted) - { - auto mount = kMounted; - kMounted = nullptr; - - return mount; - } - - return nullptr; - } - - /// @brief Mount filesystem. - /// @param mount_ptr The filesystem to mount. - /// @return if it succeeded true, otherwise false. - bool FilesystemManagerInterface::Mount(_Input FilesystemManagerInterface* mount_ptr) - { - if (mount_ptr != nullptr) - { - kMounted = mount_ptr; - return true; - } - - return false; - } - -#ifdef __FSKIT_USE_NEWFS__ - /// @brief Opens a new file. - /// @param path - /// @param r - /// @return - _Output NodePtr NewFilesystemManager::Open(_Input const Char* path, _Input const Char* r) - { - if (!path || *path == 0) - return nullptr; - - if (!r || *r == 0) - return nullptr; - - auto catalog = fImpl->GetCatalog(path); - - if (catalog->Kind != kNewFSCatalogKindFile) - { - fImpl->CloseCatalog(catalog); - return nullptr; - } - - return node_cast(catalog); - } - - /// @brief Writes to a catalog's fork. - /// @param node the node ptr. - /// @param data the data. - /// @param flags the size. - /// @return - Void NewFilesystemManager::Write(_Input NodePtr node, _Input VoidPtr data, _Input Int32 flags, _Input SizeT size) - { - if (!node) - return; - if (!size) - return; - - constexpr auto cDataForkName = kNewFSDataFork; - this->Write(cDataForkName, node, data, flags, size); - } - - /// @brief Read from filesystem fork. - /// @param node the catalog node. - /// @param flags the flags with it. - /// @param sz the size to read. - /// @return - _Output VoidPtr NewFilesystemManager::Read(_Input NodePtr node, _Input Int32 flags, _Input SizeT size) - { - if (!node) - return nullptr; - if (!size) - return nullptr; - - constexpr auto cDataForkName = kNewFSDataFork; - return this->Read(cDataForkName, node, flags, size); - } - - Void NewFilesystemManager::Write(_Input const Char* name, - _Input NodePtr node, - _Input VoidPtr data, - _Input Int32 flags, - _Input SizeT size) - { - if (!size || - size > kNewFSForkSize) - return; - - if (!data) - return; - - NEWOS_UNUSED(flags); - - if ((reinterpret_cast<NFS_CATALOG_STRUCT*>(node))->Kind == kNewFSCatalogKindFile) - fImpl->WriteCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), data, size, - name); - } - - _Output VoidPtr NewFilesystemManager::Read(_Input const Char* name, - _Input NodePtr node, - _Input Int32 flags, - _Input SizeT sz) - { - if (sz > kNewFSForkSize) - return nullptr; - - if (!sz) - return nullptr; - - NEWOS_UNUSED(flags); - - if ((reinterpret_cast<NFS_CATALOG_STRUCT*>(node))->Kind == kNewFSCatalogKindFile) - return fImpl->ReadCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), sz, - name); - - return nullptr; - } - - /// @brief Seek from Catalog. - /// @param node - /// @param off - /// @retval true always returns false, this is unimplemented. - /// @retval false always returns this, it is unimplemented. - - _Output Bool NewFilesystemManager::Seek(NodePtr node, SizeT off) - { - if (!node || off == 0) - return false; - - return fImpl->Seek(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), off); - } - - /// @brief Tell where the catalog is. - /// @param node - /// @retval true always returns false, this is unimplemented. - /// @retval false always returns this, it is unimplemented. - - _Output SizeT NewFilesystemManager::Tell(NodePtr node) - { - if (!node) - return kNPos; - - return fImpl->Tell(reinterpret_cast<NFS_CATALOG_STRUCT*>(node)); - } - - /// @brief Rewinds the catalog. - /// @param node - /// @retval true always returns false, this is unimplemented. - /// @retval false always returns this, it is unimplemented. - - _Output Bool NewFilesystemManager::Rewind(NodePtr node) - { - if (!node) - return false; - - return this->Seek(node, 0); - } - - /// @brief Returns the filesystem parser. - /// @return the Filesystem parser class. - _Output NewFSParser* NewFilesystemManager::GetParser() noexcept - { - return fImpl; - } -#endif // __FSKIT_USE_NEWFS__ -} // namespace Kernel diff --git a/dev/Kernel/Sources/Framebuffer.cxx b/dev/Kernel/Sources/Framebuffer.cxx deleted file mode 100644 index 76fe7172..00000000 --- a/dev/Kernel/Sources/Framebuffer.cxx +++ /dev/null @@ -1,113 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Framebuffer.cxx - Purpose: Framebuffer object - - Revision History: - - 01/02/24: Added file (amlel) - 02/02/24: Add documentation (amlel) - 07/07/07: Moved Framebuffer methods into Kernel:: - -------------------------------------------- */ - -#include <KernelKit/Framebuffer.hxx> -#include <HintKit/CompilerHint.hxx> - -/** - * @brief Framebuffer object implementation. - * - */ - -namespace Kernel -{ - Framebuffer::Framebuffer(_Input Ref<FramebufferContext*>& addr) - : fFrameBufferAddr(addr) - { - } - - /** - * @brief Get Pixel at **pos** - * - * @param pos position of pixel. - * @return volatile* - */ - _Output volatile UIntPtr* Framebuffer::operator[](_Input const UIntPtr& pos) - { - return (UIntPtr*)(fFrameBufferAddr->fBase * pos); - } - - /// @brief Boolean operator. - Framebuffer::operator bool() - { - return fFrameBufferAddr.Leak()->fBase != 0 && - fColour != FramebufferColorKind::INVALID && - fFrameBufferAddr.Leak()->fBase != kBadPtr; - } - - /// @brief Set color kind of framebuffer. - /// @param colour - /// @return - _Output const FramebufferColorKind& Framebuffer::Color( - const FramebufferColorKind& colour) - { - if (fColour != FramebufferColorKind::INVALID && - colour != FramebufferColorKind::INVALID) - { - fColour = colour; - } - - return fColour; - } - - /// @brief Leak framebuffer context. - /// @return The reference of the framebuffer context. - _Output Ref<FramebufferContext*>& Framebuffer::Leak() - { - return this->fFrameBufferAddr; - } - - /// @brief Draws a rectangle. - /// @param width - /// @param height - /// @param x - /// @param y - /// @param color - /// @return - _Output Framebuffer& Framebuffer::DrawRect(SizeT width, SizeT height, SizeT x, SizeT y, UInt32 color) - { - for (Kernel::SizeT i = x; i < width + x; ++i) - { - for (Kernel::SizeT u = y; u < height + y; ++u) - { - *(((volatile Kernel::UInt32*)(fFrameBufferAddr.Leak()->fBase + - 4 * fFrameBufferAddr.Leak()->fBpp * i + - 4 * u))) = color; - } - } - - return *this; - } - - /// @brief Put a pixel on the screen. - /// @param x - /// @param y - /// @param color - /// @return - _Output Framebuffer& Framebuffer::PutPixel(SizeT x, SizeT y, UInt32 color) - { - *(((volatile Kernel::UInt32*)(fFrameBufferAddr.Leak()->fBase + - 4 * fFrameBufferAddr.Leak()->fBpp * x + - 4 * y))) = color; - - return *this; - } - - const UInt32 kRgbRed = 0x000000FF; - const UInt32 kRgbGreen = 0x0000FF00; - const UInt32 kRgbBlue = 0x00FF0000; - const UInt32 kRgbBlack = 0x00000000; - const UInt32 kRgbWhite = 0xFFFFFFFF; -} // namespace Kernel diff --git a/dev/Kernel/Sources/GUIDWizard.cxx b/dev/Kernel/Sources/GUIDWizard.cxx deleted file mode 100644 index bdd274a4..00000000 --- a/dev/Kernel/Sources/GUIDWizard.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: GUIDWizard.cxx - Purpose: GUID helper code - - Revision History: - -------------------------------------------- */ - -#include <CFKit/GUIDWizard.hxx> -#include <NewKit/Ref.hxx> - -// begin of ascii 'readable' characters. (A, C, C, 1, 2) -#define kAsciiBegin 47 -// @brief Size of UUID. -#define kUUIDSize 37 - -namespace Kernel::XRN::Version1 -{ - auto cf_make_sequence(const ArrayList<UInt32>& uuidSeq) -> Ref<GUIDSequence*> - { - GUIDSequence* seq = new GUIDSequence(); - MUST_PASS(seq); - - Ref<GUIDSequence*> sequenceReference{seq, true}; - - sequenceReference->fMs1 = uuidSeq[0]; - sequenceReference->fMs2 = uuidSeq[1]; - sequenceReference->fMs3 = uuidSeq[2]; - sequenceReference->fMs4[0] = uuidSeq[3]; - sequenceReference->fMs4[1] = uuidSeq[4]; - sequenceReference->fMs4[2] = uuidSeq[5]; - sequenceReference->fMs4[3] = uuidSeq[6]; - sequenceReference->fMs4[4] = uuidSeq[7]; - sequenceReference->fMs4[5] = uuidSeq[8]; - sequenceReference->fMs4[6] = uuidSeq[9]; - sequenceReference->fMs4[7] = uuidSeq[10]; - - return sequenceReference; - } - - // @brief Tries to make a guid out of a string. - // This function is not complete for now - auto cf_try_guid_to_string(Ref<GUIDSequence*>& seq) -> ErrorOr<Ref<StringView>> - { - Char buf[kUUIDSize]; - - for (SizeT index = 0; index < 16; ++index) - { - buf[index] = seq->u8[index] + kAsciiBegin; - } - - for (SizeT index = 16; index < 24; ++index) - { - buf[index] = seq->u16[index] + kAsciiBegin; - } - - for (SizeT index = 24; index < 28; ++index) - { - buf[index] = seq->u32[index] + kAsciiBegin; - } - - auto view = StringBuilder::Construct(buf); - - if (view) - return ErrorOr<Ref<StringView>>{view.Leak()}; - - return ErrorOr<Ref<StringView>>{-1}; - } -} // namespace Kernel::XRN::Version1 diff --git a/dev/Kernel/Sources/GUIDWrapper.cxx b/dev/Kernel/Sources/GUIDWrapper.cxx deleted file mode 100644 index f87d792d..00000000 --- a/dev/Kernel/Sources/GUIDWrapper.cxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <CFKit/GUIDWrapper.hxx> - -namespace Kernel::XRN -{ -} diff --git a/dev/Kernel/Sources/HError.cxx b/dev/Kernel/Sources/HError.cxx deleted file mode 100644 index 5ccf8aea..00000000 --- a/dev/Kernel/Sources/HError.cxx +++ /dev/null @@ -1,34 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/LPC.hxx> -#include <NewKit/KernelCheck.hxx> - -namespace Kernel -{ - STATIC Bool cRaise = false; - - /// @brief Does a system wide bug check. - /// @param void no params. - /// @return if error-free: true, otherwise false. - Boolean err_bug_check(void) noexcept - { - if (cRaise) - { - ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); - } - - return true; - } - - /// @brief Tells if we should raise a bug check not. - /// @param void - /// @return void - Void err_bug_check_raise(Void) noexcept - { - cRaise = true; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Heap.cxx b/dev/Kernel/Sources/Heap.cxx deleted file mode 100644 index de0c8a5c..00000000 --- a/dev/Kernel/Sources/Heap.cxx +++ /dev/null @@ -1,246 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/LPC.hxx> -#include <KernelKit/Heap.hxx> -#include <NewKit/Crc32.hxx> -#include <NewKit/PageManager.hxx> - -//! @file KernelHeap.cxx -//! @brief Kernel heap allocator. - -#define kKernelHeapMagic (0xD4D7D5) -#define kKernelHeapHeaderPaddingSz (16U) - -namespace Kernel -{ - SizeT kHeapCount = 0UL; - PageManager kHeapPageManager; - Bool kOperationInProgress = No; - - namespace Detail - { - /// @brief Kernel heap information block. - /// Located before the address bytes. - /// | HIB | ADDRESS | - struct PACKED HEAP_INFORMATION_BLOCK final - { - ///! @brief 32-bit value which contains the magic number of the heap. - UInt32 fMagic; - ///! @brief Boolean value which tells if the heap is allocated. - Boolean fPresent; - ///! @brief 32-bit CRC checksum. - UInt32 fCRC32; - /// @brief 64-bit pointer size. - SizeT fTargetPtrSize; - /// @brief 64-bit target pointer. - UIntPtr fTargetPtr; - /// @brief Is this a page pointer? - Boolean fPagePtr; - /// @brief Padding bytes for header. - UInt8 fPadding[kKernelHeapHeaderPaddingSz]; - }; - - typedef HEAP_INFORMATION_BLOCK* HEAP_INFORMATION_BLOCK_PTR; - - Void mm_alloc_init_timeout(Void) noexcept - { - kOperationInProgress = Yes; - } - - Void mm_alloc_fini_timeout(Void) noexcept - { - kOperationInProgress = No; - } - } // namespace Detail - - /// @brief Declare a new size for allocatedPtr. - /// @param allocatedPtr the pointer. - /// @return - voidPtr mm_realloc_ke_heap(voidPtr allocatedPtr, SizeT newSz) - { - if (!allocatedPtr || newSz < 1) - return nullptr; - - Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - (UIntPtr)allocatedPtr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - - heapInfoBlk->fTargetPtrSize = newSz; - - if (heapInfoBlk->fCRC32 > 0) - { - MUST_PASS(mm_protect_ke_heap(allocatedPtr)); - } - - return allocatedPtr; - } - - /// @brief allocate chunk of memory. - /// @param sz size of pointer - /// @param rw read write (true to enable it) - /// @param user is it accesible by user processes? - /// @return The newly allocated pointer. - VoidPtr mm_new_ke_heap(const SizeT sz, const bool rw, const bool user) - { - Detail::mm_alloc_init_timeout(); - - auto szFix = sz; - - if (szFix == 0) - ++szFix; - - kcout << "newoskrnl: allocating VMH page...\r"; - - auto wrapper = kHeapPageManager.Request(rw, user, false, szFix); - - Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - wrapper.VirtualAddress()); - - heap_info_ptr->fTargetPtrSize = szFix; - heap_info_ptr->fMagic = kKernelHeapMagic; - heap_info_ptr->fCRC32 = 0; // dont fill it for now. - heap_info_ptr->fTargetPtr = wrapper.VirtualAddress(); - heap_info_ptr->fPagePtr = 0; - - ++kHeapCount; - - Detail::mm_alloc_fini_timeout(); - - return reinterpret_cast<VoidPtr>(wrapper.VirtualAddress() + - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - } - - /// @brief Makes a page heap. - /// @param heap_ptr - /// @return - Int32 mm_make_ke_page(VoidPtr heap_ptr) - { - if (kHeapCount < 1) - return -kErrorInternal; - if (((IntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)) <= 0) - return -kErrorInternal; - if (((IntPtr)heap_ptr - kBadPtr) < 0) - return -kErrorInternal; - - Detail::mm_alloc_init_timeout(); - - Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - - heapInfoBlk->fPagePtr = 1; - - Detail::mm_alloc_fini_timeout(); - - return 0; - } - - /// @brief Declare pointer as free. - /// @param heap_ptr the pointer. - /// @return - Int32 mm_delete_ke_heap(VoidPtr heap_ptr) - { - if (kHeapCount < 1) - return -kErrorInternal; - if (((IntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)) <= 0) - return -kErrorInternal; - if (((IntPtr)heap_ptr - kBadPtr) < 0) - return -kErrorInternal; - - Detail::mm_alloc_init_timeout(); - - Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - - if (heapInfoBlk && heapInfoBlk->fMagic == kKernelHeapMagic) - { - if (!heapInfoBlk->fPresent) - { - Detail::mm_alloc_fini_timeout(); - return -kErrorHeapNotPresent; - } - - if (heapInfoBlk->fCRC32 != 0) - { - if (heapInfoBlk->fCRC32 != - ke_calculate_crc32((Char*)heapInfoBlk->fTargetPtr, - heapInfoBlk->fTargetPtrSize)) - { - ke_stop(RUNTIME_CHECK_POINTER); - } - } - - heapInfoBlk->fTargetPtrSize = 0UL; - heapInfoBlk->fPresent = false; - heapInfoBlk->fTargetPtr = 0; - heapInfoBlk->fCRC32 = 0; - heapInfoBlk->fMagic = 0; - - PTEWrapper pageWrapper(false, false, false, reinterpret_cast<UIntPtr>(heapInfoBlk)); - Ref<PTEWrapper*> pteAddress{&pageWrapper}; - - kHeapPageManager.Free(pteAddress); - - --kHeapCount; - - Detail::mm_alloc_fini_timeout(); - - return 0; - } - - return -kErrorInternal; - } - - /// @brief Check if pointer is a valid kernel pointer. - /// @param heap_ptr the pointer - /// @return if it exists. - Boolean mm_is_valid_heap(VoidPtr heap_ptr) - { - if (kHeapCount < 1) - return false; - - if (heap_ptr) - { - Detail::HEAP_INFORMATION_BLOCK_PTR virtualAddress = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - - if (virtualAddress->fPresent && virtualAddress->fMagic == kKernelHeapMagic) - { - return true; - } - } - - return false; - } - - /// @brief Protect the heap with a CRC value. - /// @param heap_ptr HIB pointer. - /// @return if it valid: point has crc now., otherwise fail. - Boolean mm_protect_ke_heap(VoidPtr heap_ptr) - { - if (heap_ptr) - { - Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = - reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( - (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - - if (heapInfoBlk->fPresent && kKernelHeapMagic == heapInfoBlk->fMagic) - { - heapInfoBlk->fCRC32 = - ke_calculate_crc32((Char*)heapInfoBlk->fTargetPtr, heapInfoBlk->fTargetPtrSize); - - return true; - } - } - - return false; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/IndexableProperty.cxx b/dev/Kernel/Sources/IndexableProperty.cxx deleted file mode 100644 index f65e6f3f..00000000 --- a/dev/Kernel/Sources/IndexableProperty.cxx +++ /dev/null @@ -1,59 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -//! @brief Filesystem Indexer. - -#include <CompilerKit/CompilerKit.hxx> -#include <FSKit/IndexableProperty.hxx> -#include <NewKit/MutableArray.hxx> -#include <NewKit/Utils.hxx> - -/// @brief File Indexer. -/// BUGS: 0 - -#define kMaxLenIndexer 256 - -namespace Kernel -{ - namespace Indexer - { - IndexProperty& IndexableProperty::Leak() noexcept - { - return fIndex; - } - - Void IndexableProperty::AddFlag(Int16 flag) - { - fFlags |= flag; - } - - Void IndexableProperty::RemoveFlag(Int16 flag) - { - fFlags &= flag; - } - - Int16 IndexableProperty::HasFlag(Int16 flag) - { - return fFlags & flag; - } - - /// @brief Index a file into the indexer instance. - /// @param filename path - /// @param filenameLen used bytes in path. - /// @param indexer the filesystem indexer. - /// @return none. - Void fs_index_file(const Char* filename, SizeT filenameLen, IndexableProperty& indexer) - { - if (!indexer.HasFlag(kIndexerClaimed)) - { - indexer.AddFlag(kIndexerClaimed); - rt_copy_memory((VoidPtr)indexer.Leak().Path, (VoidPtr)filename, filenameLen); - - kcout << "newoskrnl: filesystem: index new file: " << filename << endl; - } - } - } // namespace Indexer -} // namespace Kernel diff --git a/dev/Kernel/Sources/Json.cxx b/dev/Kernel/Sources/Json.cxx deleted file mode 100644 index df0d0ef8..00000000 --- a/dev/Kernel/Sources/Json.cxx +++ /dev/null @@ -1,12 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Json.hxx> - -using namespace Kernel; - -/// @brief Undefined object, is null in length. -cInitObject(Kernel::JsonType::kNull, Kernel::JsonType); diff --git a/dev/Kernel/Sources/KernelCheck.cxx b/dev/Kernel/Sources/KernelCheck.cxx deleted file mode 100644 index 27519369..00000000 --- a/dev/Kernel/Sources/KernelCheck.cxx +++ /dev/null @@ -1,136 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/KernelCheck.hxx> -#include <NewKit/String.hxx> -#include <FirmwareKit/Handover.hxx> -#include <Modules/ACPI/ACPIFactoryInterface.hxx> - -#include <Modules/CoreCG/Accessibility.hxx> -#include <Modules/CoreCG/FbRenderer.hxx> -#include <Modules/CoreCG/TextRenderer.hxx> - -#define SetMem(dst, byte, sz) Kernel::rt_set_memory((Kernel::VoidPtr)dst, byte, sz) -#define CopyMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz) -#define MoveMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz) - -#define cWebsiteMacro "https://zka.nl/help" - -#include <BootKit/Vendor/Qr.hxx> - -/* Each error code is attributed with an ID, which will prompt a string onto the - * screen. Wait for debugger... */ - -namespace Kernel -{ - void ke_stop(const Kernel::Int& id) - { - CGInit(); - - auto panicBack = RGB(0xff, 0x3a, 0x3a); - auto panicTxt = RGB(0xff, 0xff, 0xff); - - CGDrawInRegion(panicBack, UIAccessibilty::The().Height(), UIAccessibilty::The().Width(), 0, 0); - - auto start_y = 10; - auto x = 10; - - cg_write_text("newoskrnl.dll stopped working properly so we had to stop.", start_y, x, panicTxt); - - CGFini(); - - // Show the QR code now. - - constexpr auto cVer = 4; - const auto cECC = qr::Ecc::H; - const auto cInput = cWebsiteMacro; - const auto cInputLen = rt_string_len(cWebsiteMacro); - - qr::Qr<cVer> encoder; - qr::QrDelegate encoderDelegate; - - encoder.encode(cInput, cInputLen, cECC, 0); // Manual mask 0 - - const auto cWhereStartX = (kHandoverHeader->f_GOP.f_Width - encoder.side_size()) - 20; - const auto cWhereStartY = (kHandoverHeader->f_GOP.f_Height - encoder.side_size()) / 2; - - // tell delegate to draw encoded QR now. - encoderDelegate.draw<cVer>(encoder, cWhereStartX, - cWhereStartY); - - start_y += 10; - - // show text according to error id. - - switch (id) - { - case RUNTIME_CHECK_PROCESS: { - cg_write_text("0x00000008 Process scheduler error (Catasrophic failure).", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_ACPI: { - cg_write_text("0x00000006 ACPI error.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_POINTER: { - cg_write_text("0x00000000 Kernel heap error.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_BAD_BEHAVIOR: { - cg_write_text("0x00000009 Undefined Behavior error.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_BOOTSTRAP: { - cg_write_text("0x0000000A End of code.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_HANDSHAKE: { - cg_write_text("0x00000005 Handshake error.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_IPC: { - cg_write_text("0x00000003 Kernel IPC error.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_INVALID_PRIVILEGE: { - cg_write_text("0x00000007 Kernel privilege violation.", start_y, x, panicTxt); - break; - case RUNTIME_CHECK_UNEXCPECTED: { - cg_write_text("0x0000000B Catasrophic failure.", start_y, x, panicTxt); - break; - } - case RUNTIME_CHECK_FAILED: { - cg_write_text("0x10000001 Assertion failed.", start_y, x, panicTxt); - break; - } - default: { - cg_write_text("0xFFFFFFFF Unknown error.", start_y, x, panicTxt); - break; - } - } - }; - - RecoveryFactory::Recover(); - } - - Void RecoveryFactory::Recover() noexcept - { - while (Yes) - { - asm volatile("cli; hlt"); - } - } - - void ke_runtime_check(bool expr, const char* file, const char* line) - { - if (!expr) - { - ke_stop(RUNTIME_CHECK_FAILED); // Runtime Check failed - } - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/LockDelegate.cxx b/dev/Kernel/Sources/LockDelegate.cxx deleted file mode 100644 index f23c46d3..00000000 --- a/dev/Kernel/Sources/LockDelegate.cxx +++ /dev/null @@ -1,12 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/LockDelegate.hxx> - -namespace Kernel -{ - /// Leave it empty for now. -} // namespace Kernel
\ No newline at end of file diff --git a/dev/Kernel/Sources/MP.cxx b/dev/Kernel/Sources/MP.cxx deleted file mode 100644 index bf35f51e..00000000 --- a/dev/Kernel/Sources/MP.cxx +++ /dev/null @@ -1,256 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/MP.hxx> -#include <CFKit/Property.hxx> - -///! BUGS: 0 - -///! @file MP.cxx -///! @brief This file handles multi processing in the kernel. -///! @brief Multi processing is needed for multi-tasking operations. - -namespace Kernel -{ - STATIC Property cSMPCoreName; - - ///! 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? - Bool HardwareThread::IsBusy() noexcept - { - return fBusy; - } - - /// @brief Get processor stack frame. - - HAL::StackFramePtr HardwareThread::StackFrame() noexcept - { - MUST_PASS(fStack); - return fStack; - } - - Void HardwareThread::Busy(const Bool busy) noexcept - { - fBusy = busy; - } - - HardwareThread::operator bool() - { - return fStack; - } - - /// @brief Wakeup the processor. - - Void HardwareThread::Wake(const bool wakeup) noexcept - { - fWakeup = wakeup; - - if (!fWakeup) - mp_hang_thread(fStack); - else - mp_wakeup_thread(fStack); - } - - EXTERN Bool rt_check_stack(HAL::StackFramePtr stackPtr); - - /// @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(HAL::StackFramePtr stack) - { - if (!rt_check_stack(stack)) - { - /// provide 'nullptr' to free the stack frame. - if (stack == nullptr) - { - delete fStack; - fStack = nullptr; - - return true; - } - - return false; - } - - if (fStack) - { - delete fStack; - fStack = nullptr; - } - - fStack = stack; - - rt_do_context_switch(fStack); - - return true; - } - - ///! @brief Tells if processor is waked up. - bool HardwareThread::IsWakeup() noexcept - { - return fWakeup; - } - - //! @brief Constructor and destructor - - ///! @brief Default constructor. - HardwareThreadScheduler::HardwareThreadScheduler() - { - StringView strCoreName(512); - strCoreName += "\\Class\\Smp\\MPClass"; - - cSMPCoreName.GetKey() = strCoreName; - cSMPCoreName.GetValue() = (UIntPtr)this; - - kcout << "newoskrnl: initializing " << strCoreName.CData() << endl; - } - - ///! @brief Default destructor. - HardwareThreadScheduler::~HardwareThreadScheduler() = default; - - /// @brief Shared singleton function - Ref<HardwareThreadScheduler> HardwareThreadScheduler::The() - { - static HardwareThreadScheduler manager; - return {manager}; - } - - /// @brief Get Stack Frame of Core - HAL::StackFramePtr HardwareThreadScheduler::Leak() noexcept - { - if (fThreadList[fCurrentThread].Leak() && - ProcessHelper::TheCurrentPID() == - fThreadList[fCurrentThread].Leak().Leak()->fSourcePID) - return fThreadList[fCurrentThread].Leak().Leak()->fStack; - - return nullptr; - } - - /// @brief Finds and switch to a free core. - bool HardwareThreadScheduler::Switch(HAL::StackFramePtr stack) - { - if (stack == nullptr) - return false; - - for (SizeT idx = 0; idx < cMaxHWThreads; ++idx) - { - // stack != nullptr -> if core is used, then continue. - if (!fThreadList[idx].Leak() || - !fThreadList[idx].Leak().Leak()->IsWakeup() || - fThreadList[idx].Leak().Leak()->IsBusy()) - continue; - - // to avoid any null deref. - if (!fThreadList[idx].Leak().Leak()->fStack) - continue; - if (fThreadList[idx].Leak().Leak()->fStack->SP == 0) - continue; - if (fThreadList[idx].Leak().Leak()->fStack->BP == 0) - continue; - - fThreadList[idx].Leak().Leak()->Busy(true); - - fThreadList[idx].Leak().Leak()->fID = idx; - - /// I figured out this: - /// Allocate stack - /// Set APIC base to stack - /// Do stuff and relocate stack based on this code. - /// - Amlel - rt_copy_memory(stack, fThreadList[idx].Leak().Leak()->fStack, - sizeof(HAL::StackFrame)); - - fThreadList[idx].Leak().Leak()->Switch(fThreadList[idx].Leak().Leak()->fStack); - - fThreadList[idx].Leak().Leak()->fSourcePID = ProcessHelper::TheCurrentPID(); - - fThreadList[idx].Leak().Leak()->Busy(false); - - return true; - } - - return false; - } - - /** - * Index Hardware thread - * @param idx the index - * @return the reference to the hardware thread. - */ - Ref<HardwareThread*> HardwareThreadScheduler::operator[](const SizeT& idx) - { - if (idx == 0) - { - if (fThreadList[idx].Leak().Leak()->Kind() != kHartSystemReserved) - { - fThreadList[idx].Leak().Leak()->fKind = kHartBoot; - } - } - else if (idx >= cMaxHWThreads) - { - static HardwareThread* fakeThread = new HardwareThread(); - - if (!fakeThread) - { - fakeThread = new HardwareThread(); - } - - fakeThread->fKind = kInvalidHart; - - return {fakeThread}; - } - - return fThreadList[idx].Leak(); - } - - /** - * 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. - SizeT HardwareThreadScheduler::Count() noexcept - { - return fThreadList.Count(); - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/MutableArray.cxx b/dev/Kernel/Sources/MutableArray.cxx deleted file mode 100644 index 766cb304..00000000 --- a/dev/Kernel/Sources/MutableArray.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/MutableArray.hxx> diff --git a/dev/Kernel/Sources/Network/IP.cxx b/dev/Kernel/Sources/Network/IP.cxx deleted file mode 100644 index 3e5462a1..00000000 --- a/dev/Kernel/Sources/Network/IP.cxx +++ /dev/null @@ -1,126 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NetworkKit/IP.hxx> -#include <NewKit/Utils.hxx> - -namespace Kernel -{ - char* RawIPAddress::Address() - { - return fAddr; - } - - RawIPAddress::RawIPAddress(char bytes[4]) - { - rt_copy_memory(bytes, fAddr, 4); - } - - bool RawIPAddress::operator==(const RawIPAddress& ipv4) - { - for (Size index = 0; index < 4; ++index) - { - if (ipv4.fAddr[index] != fAddr[index]) - return false; - } - - return true; - } - - bool RawIPAddress::operator!=(const RawIPAddress& ipv4) - { - for (Size index = 0; index < 4; ++index) - { - if (ipv4.fAddr[index] == fAddr[index]) - return false; - } - - return true; - } - - char& RawIPAddress::operator[](const Size& index) - { - kcout << "[RawIPAddress::operator[]] Fetching Index...\r"; - - static char IP_PLACEHOLDER = '0'; - if (index > 4) - return IP_PLACEHOLDER; - - return fAddr[index]; - } - - RawIPAddress6::RawIPAddress6(char bytes[8]) - { - rt_copy_memory(bytes, fAddr, 8); - } - - char& RawIPAddress6::operator[](const Size& index) - { - kcout << "[RawIPAddress6::operator[]] Fetching Index...\r"; - - static char IP_PLACEHOLDER = '0'; - if (index > 8) - return IP_PLACEHOLDER; - - return fAddr[index]; - } - - bool RawIPAddress6::operator==(const RawIPAddress6& ipv6) - { - for (SizeT index = 0; index < 8; ++index) - { - if (ipv6.fAddr[index] != fAddr[index]) - return false; - } - - return true; - } - - bool RawIPAddress6::operator!=(const RawIPAddress6& ipv6) - { - for (SizeT index = 0; index < 8; ++index) - { - if (ipv6.fAddr[index] == fAddr[index]) - return false; - } - - return true; - } - - ErrorOr<StringView> IPFactory::ToStringView(Ref<RawIPAddress6>& ipv6) - { - auto str = StringBuilder::Construct(ipv6.Leak().Address()); - return str; - } - - ErrorOr<StringView> IPFactory::ToStringView(Ref<RawIPAddress>& ipv4) - { - auto str = StringBuilder::Construct(ipv4.Leak().Address()); - return str; - } - - bool IPFactory::IpCheckVersion4(const char* ip) - { - int cnter = 0; - - for (Size base = 0; base < rt_string_len(ip); ++base) - { - if (ip[base] == '.') - { - cnter = 0; - } - else - { - if (cnter == 3) - return false; - - ++cnter; - } - } - - return true; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Network/IPC.cxx b/dev/Kernel/Sources/Network/IPC.cxx deleted file mode 100644 index f703e650..00000000 --- a/dev/Kernel/Sources/Network/IPC.cxx +++ /dev/null @@ -1,68 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NetworkKit/IPC.hxx> -#include <KernelKit/LPC.hxx> -#include <KernelKit/ProcessScheduler.hxx> - -using namespace Kernel; - -/// @internal -/// @brief The internal sanitize function. -Bool ipc_int_sanitize_packet(IPC_MESSAGE_STRUCT* pckt) -{ - auto endian = DEDUCE_ENDIAN(pckt, ((char*)pckt)[0]); - - switch (endian) - { - case Endian::kEndianBig: { - if (pckt->IpcEndianess == eIPCEPLittleEndian) - goto ipc_check_failed; - - break; - } - case Endian::kEndianLittle: { - if (pckt->IpcEndianess == eIPCEPBigEndian) - goto ipc_check_failed; - - break; - } - case Endian::kEndianMixed: - break; - default: - goto ipc_check_failed; - } - - if (pckt->IpcFrom == pckt->IpcTo || - pckt->IpcPacketSize > cIPCEPMsgSize) - { - goto ipc_check_failed; - } - - return pckt->IpcPacketSize > 1 && pckt->IpcHeaderMagic == cRemoteHeaderMagic; - -ipc_check_failed: - ErrLocal() = kErrorIPC; - return false; -} - -namespace Kernel -{ - /// @brief Sanitize packet function - /// @retval true packet is correct. - /// @retval false packet is incorrect and process has crashed. - Bool ipc_sanitize_packet(IPC_MESSAGE_STRUCT* pckt) - { - if (!pckt || - !ipc_int_sanitize_packet(pckt)) - { - ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); - return false; - } - - return true; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Network/NetworkDevice.cxx b/dev/Kernel/Sources/Network/NetworkDevice.cxx deleted file mode 100644 index 1bcd9e24..00000000 --- a/dev/Kernel/Sources/Network/NetworkDevice.cxx +++ /dev/null @@ -1,35 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NetworkKit/NetworkDevice.hxx> -#include <NewKit/Utils.hxx> - -namespace Kernel -{ - /// \brief Getter for fNetworkName. - const char* NetworkDevice::Name() const - { - return this->fNetworkName; - } - - /// \brief Setter for fNetworkName. - Boolean NetworkDevice::Name(const char* strView) - { - if (strView == nullptr) - return false; - - if (*strView == 0) - return false; - - if (rt_string_len(strView) > cNetworkNameLen) - return false; - - rt_copy_memory((VoidPtr)strView, - (VoidPtr)this->fNetworkName, rt_string_len(strView)); - - return true; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/New+Delete.cxx b/dev/Kernel/Sources/New+Delete.cxx deleted file mode 100644 index 12ea38a7..00000000 --- a/dev/Kernel/Sources/New+Delete.cxx +++ /dev/null @@ -1,50 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/Heap.hxx> -#include <NewKit/New.hxx> - -void* operator new[](size_t sz) -{ - if (sz == 0) - ++sz; - - return Kernel::mm_new_ke_heap(sz, true, false); -} - -void* operator new(size_t sz) -{ - if (sz == 0) - ++sz; - - return Kernel::mm_new_ke_heap(sz, true, false); -} - -void operator delete[](void* ptr) -{ - if (ptr == nullptr) - return; - - Kernel::mm_delete_ke_heap(ptr); -} - -void operator delete(void* ptr) -{ - if (ptr == nullptr) - return; - - Kernel::mm_delete_ke_heap(ptr); -} - -void operator delete(void* ptr, size_t sz) -{ - if (ptr == nullptr) - return; - - NEWOS_UNUSED(sz); - - Kernel::mm_delete_ke_heap(ptr); -} diff --git a/dev/Kernel/Sources/NewFS+FileManager.cxx b/dev/Kernel/Sources/NewFS+FileManager.cxx deleted file mode 100644 index f94831cd..00000000 --- a/dev/Kernel/Sources/NewFS+FileManager.cxx +++ /dev/null @@ -1,100 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/FileManager.hxx> -#include <KernelKit/Heap.hxx> - -#ifdef __FSKIT_USE_NEWFS__ - -/// @brief NewFS File manager. -/// BUGS: 0 - -namespace Kernel -{ - /// @brief C++ constructor - NewFilesystemManager::NewFilesystemManager() - { - MUST_PASS(Detail::fs_init_newfs()); - fImpl = new NewFSParser(); - - kcout << "newoskrnl: We are done here... (NewFilesystemManager).\r"; - } - - NewFilesystemManager::~NewFilesystemManager() - { - kcout << "newoskrnl: Destroying it...\r"; - - if (fImpl) - { - delete fImpl; - } - } - - /// @brief Removes a node from the filesystem. - /// @param fileName The filename - /// @return If it was deleted or not. - bool NewFilesystemManager::Remove(const char* fileName) - { - if (fileName == nullptr || *fileName == 0) - return false; - - return fImpl->RemoveCatalog(fileName); - } - - /// @brief Creates a node with the specified. - /// @param path The filename path. - /// @return The Node pointer. - NodePtr NewFilesystemManager::Create(const char* path) - { - return node_cast(fImpl->CreateCatalog(path, 0, kNewFSCatalogKindFile)); - } - - /// @brief Creates a node with is a directory. - /// @param path The filename path. - /// @return The Node pointer. - NodePtr NewFilesystemManager::CreateDirectory(const char* path) - { - return node_cast(fImpl->CreateCatalog(path, 0, kNewFSCatalogKindDir)); - } - - /// @brief Creates a node with is a alias. - /// @param path The filename path. - /// @return The Node pointer. - NodePtr NewFilesystemManager::CreateAlias(const char* path) - { - return node_cast(fImpl->CreateCatalog(path, 0, kNewFSCatalogKindAlias)); - } - - /// @brief Gets the root directory. - /// @return - const char* NewFilesystemHelper::Root() - { - return kNewFSRoot; - } - - /// @brief Gets the up-dir directory. - /// @return - const char* NewFilesystemHelper::UpDir() - { - return kNewFSUpDir; - } - - /// @brief Gets the separator character. - /// @return - const char NewFilesystemHelper::Separator() - { - return kNewFSSeparator; - } - - /// @brief Gets the metafile character. - /// @return - const char NewFilesystemHelper::MetaFile() - { - return kNewFSMetaFilePrefix; - } -} // namespace Kernel - -#endif // ifdef __FSKIT_USE_NEWFS__ diff --git a/dev/Kernel/Sources/NewFS+IO.cxx b/dev/Kernel/Sources/NewFS+IO.cxx deleted file mode 100644 index ddcecde4..00000000 --- a/dev/Kernel/Sources/NewFS+IO.cxx +++ /dev/null @@ -1,101 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DriveManager.hxx> -#include <KernelKit/FileManager.hxx> - -/************************************************************* - * - * File: NewFS+IO.cxx - * Purpose: Filesystem to mountpoint interface. - * Date: 3/26/24 - * - * Copyright ZKA Technologies., all rights reserved. - * - *************************************************************/ - -#ifdef __FSKIT_USE_NEWFS__ - -#include <FirmwareKit/EPM.hxx> - -/// Useful macros. - -#define NEWFS_WRITE(DRV, TRAITS, MP) (MP->DRV()).fOutput(&TRAITS) -#define NEWFS_READ(DRV, TRAITS, MP) (MP->DRV()).fInput(&TRAITS) - -using namespace Kernel; - -/// @brief Read from newfs disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Int32 fs_newfs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) -{ - if (!Mnt) - return -1; - - DrvTrait.fPacket.fPacketGood = false; - - switch (DrvIndex) - { - case kNewFSSubDriveA: { - NEWFS_READ(A, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveB: { - NEWFS_READ(B, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveC: { - NEWFS_READ(C, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveD: { - NEWFS_READ(D, DrvTrait.fPacket, Mnt); - break; - } - } - - return DrvTrait.fPacket.fPacketGood; -} - -/// @brief Write to newfs disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Int32 fs_newfs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) -{ - if (!Mnt) - return -1; - - DrvTrait.fPacket.fPacketGood = false; - - switch (DrvIndex) - { - case kNewFSSubDriveA: { - NEWFS_WRITE(A, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveB: { - NEWFS_WRITE(B, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveC: { - NEWFS_WRITE(C, DrvTrait.fPacket, Mnt); - break; - } - case kNewFSSubDriveD: { - NEWFS_WRITE(D, DrvTrait.fPacket, Mnt); - break; - } - } - - return DrvTrait.fPacket.fPacketGood; -} - -#endif // ifdef __FSKIT_USE_NEWFS__ diff --git a/dev/Kernel/Sources/NewFS+Journal.cxx b/dev/Kernel/Sources/NewFS+Journal.cxx deleted file mode 100644 index 6504b2bc..00000000 --- a/dev/Kernel/Sources/NewFS+Journal.cxx +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/FileManager.hxx> - -#ifdef __FSKIT_USE_NEWFS__ - -///! BUGS: 0 -///! @file NewFS+Journal.cxx -///! @brief Journaling for NewFS. - -namespace Kernel::Journal -{ -} // namespace Kernel::Journal - -using namespace Kernel; - -#endif // ifdef __FSKIT_USE_NEWFS__ diff --git a/dev/Kernel/Sources/OwnPtr.cxx b/dev/Kernel/Sources/OwnPtr.cxx deleted file mode 100644 index 8b0442a7..00000000 --- a/dev/Kernel/Sources/OwnPtr.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/OwnPtr.hxx> diff --git a/dev/Kernel/Sources/PEFCodeManager.cxx b/dev/Kernel/Sources/PEFCodeManager.cxx deleted file mode 100644 index d557cc2f..00000000 --- a/dev/Kernel/Sources/PEFCodeManager.cxx +++ /dev/null @@ -1,241 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/Heap.hxx> -#include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/KernelCheck.hxx> -#include <NewKit/OwnPtr.hxx> -#include <NewKit/String.hxx> - -namespace Kernel -{ - namespace Detail - { - /// @brief Get the PEF platform signature according to the compiled backebnd - UInt32 rt_get_pef_platform(void) noexcept - { -#ifdef __NEWOS_32X0__ - return kPefArch32x0; -#elif defined(__NEWOS_64X0__) - return kPefArch64x0; -#elif defined(__NEWOS_AMD64__) - return kPefArchAMD64; -#elif defined(__NEWOS_PPC64__) - return kPefArchPowerPC; -#elif defined(__NEWOS_ARM64__) - return kPefArchARM64; -#else - return kPefArchInvalid; -#endif // __32x0__ || __64x0__ || __x86_64__ - } - } // namespace Detail - - /// @brief PEF loader constructor w/ blob. - /// @param blob - PEFLoader::PEFLoader(const VoidPtr blob) - : fCachedBlob(blob) - { - MUST_PASS(fCachedBlob); - fBad = false; - } - - /// @brief PEF loader constructor. - /// @param path the filesystem path. - PEFLoader::PEFLoader(const Char* path) - : fCachedBlob(nullptr), fBad(false), fFatBinary(false) - { - fFile.New(const_cast<Char*>(path), cRestrictRB); - - if (StringBuilder::Equals(fFile->MIME(), this->MIME())) - { - fPath = StringBuilder::Construct(path).Leak(); - - auto cPefHeader = "PEFContainer"; - - fCachedBlob = fFile->Read(cPefHeader); - - PEFContainer* container = reinterpret_cast<PEFContainer*>(fCachedBlob); - - if (container->Cpu == Detail::rt_get_pef_platform() && - container->Magic[0] == kPefMagic[0] && - container->Magic[1] == kPefMagic[1] && - container->Magic[2] == kPefMagic[2] && - container->Magic[3] == kPefMagic[3] && - container->Magic[4] == kPefMagic[4] && container->Abi == kPefAbi) - { - return; - } - else if (container->Magic[4] == kPefMagic[0] && - container->Magic[3] == kPefMagic[1] && - container->Magic[2] == kPefMagic[2] && - container->Magic[1] == kPefMagic[3] && - container->Magic[0] == kPefMagic[0] && container->Abi == kPefAbi) - { - /// This is a fat binary. - this->fFatBinary = true; - return; - } - - kcout << "CodeManager: Warning: Executable format error!\n"; - fBad = true; - - mm_delete_ke_heap(fCachedBlob); - - fCachedBlob = nullptr; - } - } - - /// @brief PEF destructor. - PEFLoader::~PEFLoader() - { - if (fCachedBlob) - mm_delete_ke_heap(fCachedBlob); - - fFile.Delete(); - } - - VoidPtr PEFLoader::FindSymbol(const char* name, Int32 kind) - { - if (!fCachedBlob || fBad) - return nullptr; - - PEFContainer* container = reinterpret_cast<PEFContainer*>(fCachedBlob); - - StringView cPefHeaderStr = StringBuilder::Construct("PEFContainerHeader:").Leak().Leak(); - cPefHeaderStr += name; - - auto blob = fFile->Read(cPefHeaderStr.CData()); - - PEFCommandHeader* container_header = reinterpret_cast<PEFCommandHeader*>(blob); - - constexpr auto cMangleCharacter = '$'; - const char* cContainerKinds[] = {".code64", ".data64", ".zero64", nullptr}; - - ErrorOr<StringView> errOrSym; - - switch (kind) - { - case kPefCode: { - errOrSym = StringBuilder::Construct(cContainerKinds[0]); // code symbol. - break; - } - case kPefData: { - errOrSym = StringBuilder::Construct(cContainerKinds[1]); // data symbol. - break; - } - case kPefZero: { - errOrSym = StringBuilder::Construct(cContainerKinds[2]); // block starting symbol. - break; - } - default: - return nullptr; - } - - char* unconstSymbol = const_cast<char*>(name); - - for (SizeT i = 0UL; i < rt_string_len(unconstSymbol, kPefNameLen); ++i) - { - if (unconstSymbol[i] == ' ') - { - unconstSymbol[i] = cMangleCharacter; - } - } - - errOrSym.Leak().Leak() += name; - - for (SizeT index = 0; index < container->Count; ++index) - { - if (StringBuilder::Equals(container_header->Name, - errOrSym.Leak().Leak().CData())) - { - if (container_header->Kind == kind) - { - if (container_header->Cpu != Detail::rt_get_pef_platform()) - { - if (!this->fFatBinary) - { - mm_delete_ke_heap(blob); - return nullptr; - } - } - - Char* blobRet = new Char[container_header->Size]; - - rt_copy_memory((VoidPtr)((Char*)blob + sizeof(PEFCommandHeader)), blobRet, container_header->Size); - - mm_delete_ke_heap(blob); - return blobRet; - } - } - } - - mm_delete_ke_heap(blob); - return nullptr; - } - - /// @brief Finds the executable entrypoint. - /// @return - ErrorOr<VoidPtr> PEFLoader::FindStart() - { - if (auto sym = this->FindSymbol(kPefStart, kPefCode); sym) - return ErrorOr<VoidPtr>(sym); - - return ErrorOr<VoidPtr>(kErrorExecutable); - } - - /// @brief Tells if the executable is loaded or not. - /// @return - bool PEFLoader::IsLoaded() noexcept - { - return !fBad && fCachedBlob; - } - - namespace Utils - { - bool execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept - { - auto errOrStart = exec.FindStart(); - - if (errOrStart.Error() != 0) - return false; - - PROCESS_HEADER_BLOCK proc(errOrStart.Leak().Leak()); - Ref<PROCESS_HEADER_BLOCK> refProc = proc; - - proc.Kind = procKind; - - return ProcessScheduler::The().Leak().Add(refProc); - } - } // namespace Utils - - const char* PEFLoader::Path() - { - return fPath.Leak().CData(); - } - - const char* PEFLoader::AsString() - { -#ifdef __32x0__ - return "32x0 PEF format."; -#elif defined(__64x0__) - return "64x0 PEF format."; -#elif defined(__x86_64__) - return "x86_64 PEF format."; -#elif defined(__powerpc64__) - return "POWER PEF format."; -#else - return "Unknown PEF format."; -#endif // __32x0__ || __64x0__ || __x86_64__ || __powerpc64__ - } - - const char* PEFLoader::MIME() - { - return kPefApplicationMime; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/PEFSharedObject.cxx b/dev/Kernel/Sources/PEFSharedObject.cxx deleted file mode 100644 index 22890e22..00000000 --- a/dev/Kernel/Sources/PEFSharedObject.cxx +++ /dev/null @@ -1,110 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * ======================================================== - */ - -#include <KernelKit/DebugOutput.hxx> -#include <KernelKit/PEF.hxx> -#include <KernelKit/PEFSharedObject.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/ThreadLocalStorage.hxx> -#include <NewKit/Defines.hxx> - -/* ------------------------------------------- - - Revision History: - - 01/02/24: Rework shared sharedObj ABI, except a rtl_init_shared_object and - rtl_fini_shared_object (amlel) 15/02/24: Breaking changes, changed the name of the - routines. (amlel) - - 07/28/24: Replace rt_library_free with rtl_fini_shared_object - - ------------------------------------------- */ - -using namespace Kernel; - -/***********************************************************************************/ -/// @file PEFSharedObjectRT.cxx -/// @brief PEF's shared object runtime. -/***********************************************************************************/ - -/***********************************************************************************/ -/** @brief Library initializer. */ -/***********************************************************************************/ - -EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header) -{ - SharedObjectPtr sharedObj = tls_new_class<PEFSharedObjectInterface>(); - - if (!sharedObj) - { - header->Crash(); - - return nullptr; - } - - sharedObj->Mount(tls_new_class<PEFSharedObjectInterface::PEF_SHARED_OBJECT_TRAITS>()); - - if (!sharedObj->Get()) - { - header->Crash(); - - return nullptr; - } - - sharedObj->Get()->fImageObject = - header->Image; - - if (!sharedObj->Get()->fImageObject) - { - header->Crash(); - - return nullptr; - } - - sharedObj->Get()->fImageEntrypointOffset = - sharedObj->Load<VoidPtr>(kPefStart, rt_string_len(kPefStart, 0), kPefCode); - - return sharedObj; -} - -/***********************************************************************************/ -/** @brief Frees the sharedObj. */ -/** @note Please check if the lib got freed! */ -/** @param lib The sharedObj to free. */ -/** @param successful Reports if successful or not. */ -/***********************************************************************************/ - -EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectPtr lib, Bool* successful) -{ - MUST_PASS(successful); - - // sanity check (will also trigger a bug check if this fails) - if (lib == nullptr) - { - *successful = false; - header->Crash(); - } - - delete lib->Get(); - delete lib; - - lib = nullptr; - - *successful = true; -} - -/***********************************************************************************/ -/// @brief Unimplemented function (crashes by default) -/// @param -/***********************************************************************************/ - -EXTERN_C void __mh_purecall(void) -{ - kcout << "newoskrnl: unimplemented symbol!\r"; -} diff --git a/dev/Kernel/Sources/PRDT.cxx b/dev/Kernel/Sources/PRDT.cxx deleted file mode 100644 index f9bbd685..00000000 --- a/dev/Kernel/Sources/PRDT.cxx +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/String.hxx> -#include <StorageKit/PRDT.hxx> - -namespace Kernel -{ - /// @brief constructs a new PRD. - /// @param prd PRD reference. - /// @note This doesnt construct a valid, please fill it by yourself. - void construct_prdt(Ref<PRDT>& prd) - { - prd.Leak().fPhysAddress = 0x0; - prd.Leak().fSectorCount = 0x0; - prd.Leak().fEndBit = 0x0; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/PageAllocator.cxx b/dev/Kernel/Sources/PageAllocator.cxx deleted file mode 100644 index 4f64b05f..00000000 --- a/dev/Kernel/Sources/PageAllocator.cxx +++ /dev/null @@ -1,55 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <ArchKit/ArchKit.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/PageAllocator.hxx> - -/// @brief Internal namespace, used internally by kernel. -namespace Kernel::Detail -{ - VoidPtr create_page_wrapper(Boolean rw, Boolean user, SizeT pageSz) - { - auto addr = HAL::hal_alloc_page(rw, user, pageSz); - - if (addr == kBadAddress) - { - kcout << "[create_page_wrapper] kBadAddress returned\n"; - ke_stop(RUNTIME_CHECK_POINTER); - } - - return addr; - } - - void exec_disable(UIntPtr VirtualAddr) - { -#ifdef __NEWOS_SUPPORT_NX__ - PTE* VirtualAddrTable = reinterpret_cast<PTE*>(VirtualAddr); - - MUST_PASS(!VirtualAddrTable->ExecDisable == false); - VirtualAddrTable->ExecDisable = true; - - hal_flush_tlb(); -#endif // ifdef __NEWOS_SUPPORT_NX__ - } - - bool page_disable(UIntPtr VirtualAddr) - { - if (VirtualAddr) - { - auto VirtualAddrTable = (PTE*)(VirtualAddr); - - MUST_PASS(!VirtualAddrTable->Present == true); - VirtualAddrTable->Present = false; - - hal_flush_tlb(); - - return true; - } - - return false; - } -} // namespace Kernel::Detail diff --git a/dev/Kernel/Sources/PageManager.cxx b/dev/Kernel/Sources/PageManager.cxx deleted file mode 100644 index 7e0ef67b..00000000 --- a/dev/Kernel/Sources/PageManager.cxx +++ /dev/null @@ -1,126 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/PageManager.hxx> - -#ifdef __NEWOS_AMD64__ -#include <HALKit/AMD64/HalPageAlloc.hxx> -#elif defined(__NEWOS_ARM64__) -#include <HALKit/ARM64/HalPageAlloc.hxx> -#endif // ifdef __NEWOS_AMD64__ || defined(__NEWOS_ARM64__) - -//! null deref will throw (Page Zero detected, aborting app!) -#define kProtectedRegionEnd (512) - -namespace Kernel -{ - PTEWrapper::PTEWrapper(Boolean Rw, Boolean User, Boolean ExecDisable, UIntPtr VirtAddr) - : fRw(Rw), - fUser(User), - fExecDisable(ExecDisable), - fVirtAddr(VirtAddr), - fCache(false), - fShareable(false), - fWt(false), - fPresent(true), - fAccessed(false) - { - } - - PTEWrapper::~PTEWrapper() = default; - - /// @brief Flush virtual address. - /// @param VirtAddr - Void PageManager::FlushTLB(UIntPtr VirtAddr) - { - if (VirtAddr == kBadAddress) - return; - - hal_flush_tlb(); - } - - /// @brief Reclaim freed page. - /// @return - Bool PTEWrapper::Reclaim() - { - if (!this->fPresent) - { - this->fPresent = true; - return true; - } - - return false; - } - - /// @brief Request a PTE. - /// @param Rw r/w? - /// @param User user mode? - /// @param ExecDisable disable execution on page? - /// @return - PTEWrapper PageManager::Request(Boolean Rw, Boolean User, Boolean ExecDisable, SizeT Sz) - { - kcout << "newoskrnl: Allocating VMH page from PageManager...\r"; - - // Store PTE wrapper right after PTE. - VoidPtr ptr = Kernel::HAL::hal_alloc_page(Rw, User, Sz); - - if (ptr == kBadAddress) - { - kcout << "[create_page_wrapper] kBadAddress returned\n"; - ke_stop(RUNTIME_CHECK_POINTER); - } - - return PTEWrapper{Rw, User, ExecDisable, reinterpret_cast<UIntPtr>(ptr)}; - } - - /// @brief Disable PTE. - /// @param wrapper the wrapper. - /// @return - bool PageManager::Free(Ref<PTEWrapper*>& wrapper) - { - if (wrapper) - { - if (!Detail::page_disable(wrapper->VirtualAddress())) - return false; - return true; - } - - return false; - } - - /// @brief Virtual PTE address. - /// @return The virtual address of the page. - const UIntPtr PTEWrapper::VirtualAddress() - { - return (fVirtAddr); - } - - bool PTEWrapper::Shareable() - { - return fShareable; - } - - bool PTEWrapper::Present() - { - return fPresent; - } - - bool PTEWrapper::Access() - { - return fAccessed; - } - - void PTEWrapper::NoExecute(const bool enable) - { - this->fExecDisable = enable; - } - - const bool& PTEWrapper::NoExecute() - { - return this->fExecDisable; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Pmm.cxx b/dev/Kernel/Sources/Pmm.cxx deleted file mode 100644 index 4a511c30..00000000 --- a/dev/Kernel/Sources/Pmm.cxx +++ /dev/null @@ -1,96 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/Pmm.hxx> - -#if defined(__NEWOS_ARM64__) -#include <HALKit/ARM64/Processor.hxx> -#endif // defined(__NEWOS_ARM64__) - -#if defined(__NEWOS_AMD64__) -#include <HALKit/AMD64/Processor.hxx> -#endif // defined(__NEWOS_AMD64__) - -namespace Kernel -{ - /// @brief Pmm constructor. - Pmm::Pmm() - : fPageManager() - { - kcout << "[PMM] Allocate PageMemoryManager"; - } - - Pmm::~Pmm() = default; - - /* If this returns Null pointer, enter emergency mode */ - /// @param user is this a user page? - /// @param readWrite is it r/w? - Ref<PTEWrapper> Pmm::RequestPage(Boolean user, Boolean readWrite) - { - PTEWrapper pt = fPageManager.Leak().Request(user, readWrite, false, kPTESize); - - if (pt.fPresent) - { - kcout << "[PMM]: Allocation was successful.\r"; - return Ref<PTEWrapper>(pt); - } - - kcout << "[PMM]: Allocation failed.\r"; - - return {}; - } - - Boolean Pmm::FreePage(Ref<PTEWrapper> PageRef) - { - if (!PageRef) - return false; - - PageRef.Leak().fPresent = false; - - return true; - } - - Boolean Pmm::TogglePresent(Ref<PTEWrapper> PageRef, Boolean Enable) - { - if (!PageRef) - return false; - - PageRef.Leak().fPresent = Enable; - - return true; - } - - Boolean Pmm::ToggleUser(Ref<PTEWrapper> PageRef, Boolean Enable) - { - if (!PageRef) - return false; - - PageRef.Leak().fRw = Enable; - - return true; - } - - Boolean Pmm::ToggleRw(Ref<PTEWrapper> PageRef, Boolean Enable) - { - if (!PageRef) - return false; - - PageRef.Leak().fRw = Enable; - - return true; - } - - Boolean Pmm::ToggleShare(Ref<PTEWrapper> PageRef, Boolean Enable) - { - if (!PageRef) - return false; - - PageRef.Leak().fShareable = Enable; - - return true; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/ProcessHeap.cxx b/dev/Kernel/Sources/ProcessHeap.cxx deleted file mode 100644 index d501f31d..00000000 --- a/dev/Kernel/Sources/ProcessHeap.cxx +++ /dev/null @@ -1,277 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/ProcessHeap.hxx> -#include <NewKit/PageManager.hxx> - -#define cHeapHeaderPaddingSz (16U) - -/// @file ProcessHeap.cxx -/// @brief User Heap Manager, Process heap allocator. -/// @note if you want to look at the kernel allocator, please look for -/// KernelHeap.cxx -/// BUGS: 0 - -namespace Kernel -{ - /** - * @brief Process Heap Header - * @note Allocated per process, it denotes the user's heap. - */ - struct PROCESS_HEAP_HEADER final - { - UInt32 fPageMagic; - Int32 fPageFlags; - Boolean fPageFree; - UIntPtr fPageVirtStart; - SizeT fPageVirtSize; - UInt8 fPagePad[cHeapHeaderPaddingSz]; - }; - - /// @brief PROCESS_HEAP_HEADER as pointer type. - typedef PROCESS_HEAP_HEADER* PROCESS_HEAP_HEADER_PTR; - - /** - * @brief Process heap class, takes care of allocating the process pools. - * @note This rely on Virtual Memory! Consider adding good vmem support when - * @note porting to a new arch. - */ - class ProcessHeapHelper final - { - ProcessHeapHelper() = delete; - - public: - ~ProcessHeapHelper() = default; - - public: - STATIC SizeT& Count() noexcept - { - return s_NumPools; - } - - STATIC Ref<Pmm>& Leak() noexcept - { - return s_Pmm; - } - - STATIC Boolean& IsEnabled() noexcept - { - return s_PoolsAreEnabled; - } - - STATIC MutableArray<Ref<PTEWrapper>>& The() noexcept - { - return s_Pool; - } - - private: - STATIC Size s_NumPools; - STATIC Ref<Pmm> s_Pmm; - - private: - STATIC Boolean s_PoolsAreEnabled; - STATIC MutableArray<Ref<PTEWrapper>> s_Pool; - }; - - //! declare fields - - SizeT ProcessHeapHelper::s_NumPools = 0UL; - Ref<Pmm> ProcessHeapHelper::s_Pmm; - Boolean ProcessHeapHelper::s_PoolsAreEnabled = true; - MutableArray<Ref<PTEWrapper>> ProcessHeapHelper::s_Pool; - - STATIC VoidPtr sched_find_unused_heap(Int32 flags, SizeT len); - STATIC Void sched_free_heap_internal(VoidPtr vaddr); - STATIC VoidPtr sched_make_heap_internal(VoidPtr vaddr, Int32 flags, SizeT len); - STATIC Boolean sched_check_and_free_heap(const SizeT& index, VoidPtr ptr); - - /// @brief Find an unused heap header to allocate on. - /// @param flags the flags to use. - /// @return VoidPtr the heap pointer. - STATIC VoidPtr sched_find_unused_heap(Int32 flags, SizeT len) - { - SizeT index = 0UL; - - while (true) - { - /* ************************************ */ - /* allocate if it doesnt exist. */ - /* ************************************ */ - if (!ProcessHeapHelper::The()[index]) - { - ProcessHeapHelper::The().Add(Kernel::Ref<Kernel::PTEWrapper>()); - } - - if (ProcessHeapHelper::The()[index] && - !ProcessHeapHelper::The()[index].Leak().Leak().Present()) - { - ProcessHeapHelper::Leak().Leak().TogglePresent( - ProcessHeapHelper::The()[index].Leak().Leak(), true); - - ProcessHeapHelper::Leak().Leak().ToggleUser( - ProcessHeapHelper::The()[index].Leak().Leak(), true); - - kcout << "[sched_find_unused_heap] Done, trying to make a pool now...\r"; - - return sched_make_heap_internal( - (VoidPtr)ProcessHeapHelper::The()[index].Leak().Leak().VirtualAddress(), - flags, len); - } - - ++index; - } - - return nullptr; - } - - /// @brief Makes a new heap for the process to use. - /// @param virtual_address the virtual address of the process. - /// @param flags the flags. - /// @return - STATIC VoidPtr sched_make_heap_internal(VoidPtr virtual_address, Int32 flags, SizeT len_in_gb) - { - if (virtual_address) - { - PROCESS_HEAP_HEADER* process_heap_hdr = reinterpret_cast<PROCESS_HEAP_HEADER*>(virtual_address); - - if (!process_heap_hdr->fPageFree) - { - kcout - << "[sched_make_heap_internal] process_heap_hdr->fPageFree, HeapPtr already exists\n"; - return nullptr; - } - - process_heap_hdr->fPageFlags = flags; - process_heap_hdr->fPageMagic = kProcessHeapMag; - process_heap_hdr->fPageFree = false; - process_heap_hdr->fPageVirtStart = (UIntPtr)virtual_address + sizeof(PROCESS_HEAP_HEADER); - process_heap_hdr->fPageVirtSize = len_in_gb; - - kcout << "[sched_make_heap_internal] New allocation has been done, returning new chunk.\n"; - - return reinterpret_cast<VoidPtr>( - (reinterpret_cast<UIntPtr>(virtual_address) + sizeof(PROCESS_HEAP_HEADER))); - } - - kcout << "[sched_make_heap_internal] Address is invalid"; - return nullptr; - } - - /// @brief Internally makrs the heap as free. - /// This is done by setting the fPageFree bit to true - /// @param virtual_address - /// @return - STATIC Void sched_free_heap_internal(VoidPtr virtual_address) - { - PROCESS_HEAP_HEADER* process_heap_hdr = reinterpret_cast<PROCESS_HEAP_HEADER*>( - reinterpret_cast<UIntPtr>(virtual_address) - sizeof(PROCESS_HEAP_HEADER)); - - if (process_heap_hdr->fPageMagic == kProcessHeapMag) - { - if (!process_heap_hdr->fPageFree) - { - ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); - return; - } - - process_heap_hdr->fPageFree = true; - process_heap_hdr->fPageFlags = 0; - - kcout << "[sched_free_heap_internal] Successfully marked header as free!\r"; - } - } - - /** - * @brief Check for the ptr and frees it. - * - * @param index Where to look at. - * @param ptr The ptr to check. - * @return Boolean true if successful. - */ - STATIC Boolean sched_check_and_free_heap(const SizeT& index, VoidPtr ptr) - { - if (ProcessHeapHelper::The()[index]) - { - // ErrorOr<>::operator Boolean - /// if (address matches) - /// -> Free heap. - if (ProcessHeapHelper::The()[index].Leak().Leak().VirtualAddress() == - (UIntPtr)ptr) - { - ProcessHeapHelper::Leak().Leak().FreePage( - ProcessHeapHelper::The()[index].Leak().Leak()); - - --ProcessHeapHelper::Count(); - - sched_free_heap_internal(ptr); - ptr = nullptr; - - return true; - } - } - - return false; - } - - /// @brief Creates a new pool pointer. - /// @param flags the flags attached to it. - /// @return a pool pointer with selected permissions. - VoidPtr sched_new_heap(Int32 flags, SizeT page_size) - { - if (!ProcessHeapHelper::IsEnabled()) - return nullptr; - - if (VoidPtr ret = sched_find_unused_heap(flags, page_size)) - return ret; - - // this wasn't set to true - auto ref_page = ProcessHeapHelper::Leak().Leak().RequestPage( - ((flags & kProcessHeapUser)), (flags & kProcessHeapRw)); - - if (ref_page) - { - ///! reserve page. - ProcessHeapHelper::The()[ProcessHeapHelper::Count()].Leak() = ref_page; - auto& ref = ProcessHeapHelper::Count(); - - ++ref; // increment the number of addresses we have now. - - // finally make the pool address. - return sched_make_heap_internal( - reinterpret_cast<VoidPtr>(ref_page.Leak().VirtualAddress()), flags, page_size); - } - - return nullptr; - } - - /// @brief free a pool pointer. - /// @param ptr The pool pointer to free. - /// @return status code - Int32 sched_free_heap(VoidPtr ptr) - { - if (!ProcessHeapHelper::IsEnabled()) - return -1; - - if (ptr) - { - SizeT base = ProcessHeapHelper::Count(); - - if (sched_check_and_free_heap(base, ptr)) - return 0; - - for (SizeT index = 0; index < ProcessHeapHelper::The().Count(); ++index) - { - if (sched_check_and_free_heap(index, ptr)) - return 0; - - --base; - } - } - - return -1; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/ProcessScheduler.cxx b/dev/Kernel/Sources/ProcessScheduler.cxx deleted file mode 100644 index 8ca94b60..00000000 --- a/dev/Kernel/Sources/ProcessScheduler.cxx +++ /dev/null @@ -1,464 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/***********************************************************************************/ -/// @file ProcessScheduler.cxx -/// @brief MicroKernel process scheduler. -/***********************************************************************************/ - -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/PEFSharedObject.hxx> -#include <KernelKit/MP.hxx> -#include <KernelKit/Heap.hxx> -#include <NewKit/String.hxx> -#include <KernelKit/LPC.hxx> - -///! BUGS: 0 - -/***********************************************************************************/ -/* This file handles the process scheduling. */ -/***********************************************************************************/ - -namespace Kernel -{ - /***********************************************************************************/ - /// @brief Exit Code global - /***********************************************************************************/ - - STATIC Int32 cLastExitCode = 0U; - - /// @brief Gets the last exit code. - /// @note Not thread-safe. - /// @return Int32 the last exit code. - const Int32& sched_get_exit_code(void) noexcept - { - return cLastExitCode; - } - - /***********************************************************************************/ - /// @brief crash current process. - /***********************************************************************************/ - - void PROCESS_HEADER_BLOCK::Crash() - { - kcout << (*this->Name == 0 ? "Kernel" : this->Name) << ": crashed. (id = "; - kcout << number(kErrorProcessFault); - kcout << ")\r"; - - if (Kernel::ProcessScheduler::The().Leak().CurrentTeam().AsArray().Count() < 1) - { - kcout << "*** BAD PROCESS ***\rTerminating as we are the only process...\r"; - ke_stop(RUNTIME_CHECK_PROCESS); - } - - this->Exit(kErrorProcessFault); - } - - /// @brief Gets the local last exit code. - /// @note Not thread-safe. - /// @return Int32 the last exit code. - const Int32& PROCESS_HEADER_BLOCK::GetExitCode() noexcept - { - return this->fLastExitCode; - } - - Int32& PROCESS_HEADER_BLOCK::GetLocalCode() noexcept - { - return fLocalCode; - } - - void PROCESS_HEADER_BLOCK::Wake(const bool should_wakeup) - { - this->Status = - should_wakeup ? ProcessStatus::kRunning : ProcessStatus::kFrozen; - } - - /***********************************************************************************/ - - VoidPtr PROCESS_HEADER_BLOCK::New(const SizeT& sz) - { - if (this->HeapCursor) - { - if (this->FreeMemory < 1) - { - ErrLocal() = kErrorHeapOutOfMemory; - - /* We're going out of memory! crash... */ - this->Crash(); - - return nullptr; - } - - this->HeapCursor = reinterpret_cast<VoidPtr>((UIntPtr)this->HeapCursor + (sizeof(sz))); - VoidPtr ptr = this->HeapCursor; - - ++this->UsedMemory; - --this->FreeMemory; - - return ptr; - } - - return nullptr; - } - - /***********************************************************************************/ - - /* @brief checks if runtime pointer is in region. */ - bool rt_is_in_pool(VoidPtr pool_ptr, VoidPtr pool, const SizeT& pool_ptr_cur_sz, const SizeT& pool_ptr_used_sz) - { - if (pool == nullptr || - pool_ptr == nullptr) - return false; - - UIntPtr* uint_pool_ptr = (UIntPtr*)pool_ptr; - UIntPtr* uint_pool = (UIntPtr*)pool; - - return (UIntPtr)&uint_pool > (UIntPtr)&uint_pool_ptr && - pool_ptr_cur_sz > pool_ptr_used_sz; - } - - /* @brief free pointer from usage. */ - Boolean PROCESS_HEADER_BLOCK::Delete(VoidPtr ptr, const SizeT& sz) - { - if (sz < 1 || this->HeapCursor == this->HeapPtr) - return false; - - // also check for the amount of allocations we've done so far. - if (this->UsedMemory < 1) - return false; - - if (rt_is_in_pool(ptr, this->HeapCursor, this->UsedMemory, this->FreeMemory)) - { - this->HeapCursor = (VoidPtr)((UIntPtr)this->HeapCursor - (sizeof(sz))); - rt_zero_memory(ptr, sz); - - ++this->FreeMemory; - --this->UsedMemory; - - return true; - } - - return false; - } - - /// @brief process name getter. - const Char* PROCESS_HEADER_BLOCK::GetProcessName() noexcept - { - return this->Name; - } - - /// @brief process selector getter. - const ProcessLevelRing& PROCESS_HEADER_BLOCK::GetLevelRing() noexcept - { - return this->Selector; - } - - /// @brief process status getter. - const ProcessStatus& PROCESS_HEADER_BLOCK::GetStatus() noexcept - { - return this->Status; - } - - /***********************************************************************************/ - - /** - @brief Affinity is the time slot allowed for the process. - */ - const AffinityKind& PROCESS_HEADER_BLOCK::GetAffinity() noexcept - { - return this->Affinity; - } - - /** - @brief Standard exit proc. - */ - void PROCESS_HEADER_BLOCK::Exit(const Int32& exit_code) - { - if (this->ProcessId != - ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId) - ke_stop(RUNTIME_CHECK_PROCESS); - - fLastExitCode = exit_code; - cLastExitCode = exit_code; - - //! Delete image if not done already. - if (this->Image) - mm_delete_ke_heap(this->Image); - - if (this->StackFrame) - mm_delete_ke_heap((VoidPtr)this->StackFrame); - - this->Image = nullptr; - this->StackFrame = nullptr; - - if (this->Kind == kSharedObjectKind) - { - bool success = false; - rtl_fini_shared_object(this, this->DLLPtr, &success); - - if (success) - { - this->DLLPtr = nullptr; - } - } - - ProcessScheduler::The().Leak().Remove(this->ProcessId); - } - - /// @brief Add process to list. - /// @param process - /// @return - SizeT ProcessScheduler::Add(Ref<PROCESS_HEADER_BLOCK>& process) - { - if (!process.Leak().Image) - { - if (process.Leak().Kind != PROCESS_HEADER_BLOCK::kSharedObjectKind) - { - return -kErrorNoEntrypoint; - } - } - - if (mTeam.AsArray().Count() > kSchedProcessLimitPerTeam) - return -kErrorOutOfTeamSlot; - - kcout << "ProcessScheduler:: adding process to team...\r"; - - // Create heap according to type of process. - if (process.Leak().Kind == PROCESS_HEADER_BLOCK::kAppKind) - { - process.Leak().HeapPtr = sched_new_heap(kProcessHeapUser | kProcessHeapRw, process.Leak().SizeMemory); - } - else if (process.Leak().Kind == PROCESS_HEADER_BLOCK::kSharedObjectKind) - { - process.Leak().DLLPtr = rtl_init_shared_object(&process.Leak()); - process.Leak().HeapPtr = sched_new_heap(kProcessHeapUser | kProcessHeapRw | kProcessHeapShared, process.Leak().SizeMemory); - } - else - { - // Something went wrong, do not continue, process may be incorrect. - process.Leak().Crash(); - return -kErrorProcessFault; - } - - process.Leak().StackFrame = reinterpret_cast<HAL::StackFrame*>( - mm_new_ke_heap(sizeof(HAL::StackFrame), Yes, Yes)); - - MUST_PASS(process.Leak().StackFrame); - - if (process.Leak().Image) - { - process.Leak().StackFrame->BP = reinterpret_cast<HAL::Reg>(process.Leak().Image); - } - else - { - if (process.Leak().Kind != PROCESS_HEADER_BLOCK::kSharedObjectKind) - { - process.Leak().Crash(); - return -kErrorProcessFault; - } - } - - if (!process.Leak().StackFrame->SP) - process.Leak().StackFrame->SP = reinterpret_cast<HAL::Reg>(mm_new_ke_heap(sizeof(UInt8) * 8196, Yes, Yes)); - - process.Leak().Status = ProcessStatus::kStarting; - - process.Leak().ProcessId = (mTeam.AsArray().Count() - 1); - process.Leak().HeapCursor = process.Leak().HeapPtr; - - MUST_PASS(mTeam.AsArray().Add(process)); - - return (mTeam.AsArray().Count() - 1); - } - - /// @brief Remove process from list. - /// @param processSlot process slot inside team. - /// @retval true process was removed. - /// @retval false process doesn't exist in team. - Bool ProcessScheduler::Remove(SizeT processSlot) - { - // check if process is within range. - if (processSlot > mTeam.AsArray().Count()) - return false; - - // also check if the process isn't a dummy one. - if (mTeam.AsArray()[processSlot].Leak().Leak().Image == nullptr) - return false; - - kcout << "ProcessScheduler: removing process\r"; - - return mTeam.AsArray().Remove(processSlot); - } - - /// @brief Run scheduler. - /// @return - SizeT ProcessScheduler::Run() noexcept - { - SizeT process_index = 0; //! we store this guy to tell the scheduler how many - //! things we have scheduled. - - for (; process_index < mTeam.AsArray().Count(); ++process_index) - { - auto process = mTeam.AsArray()[process_index]; - - //! check if process needs to be scheduled. - if (ProcessHelper::CanBeScheduled(process.Leak())) - { - auto unwrapped_process = *process.Leak(); - - // set the current process. - mTeam.AsRef() = unwrapped_process; - - // tell helper to find a core to schedule on. - ProcessHelper::Switch(unwrapped_process.StackFrame, - unwrapped_process.ProcessId); - - unwrapped_process.PTime = static_cast<Int32>(unwrapped_process.Affinity); - - kcout << unwrapped_process.Name << ": has been switched to process core.\r"; - } - else - { - // otherwise increment the P-time. - --mTeam.AsRef().Leak().PTime; - } - } - - return process_index; - } - - /// @brief Gets the current scheduled team. - /// @return - ProcessTeam& ProcessScheduler::CurrentTeam() - { - return mTeam; - } - - /// @internal - STATIC Ref<ProcessScheduler> cSchedulerRef; - - /// @brief Shared instance of the process scheduler. - /// @return - Ref<ProcessScheduler>& ProcessScheduler::The() - { - return cSchedulerRef; - } - - /// @brief Gets current running process. - /// @return - Ref<PROCESS_HEADER_BLOCK>& ProcessScheduler::TheCurrent() - { - return mTeam.AsRef(); - } - - /// @brief Current proccess id getter. - /// @return Process ID integer. - PID& ProcessHelper::TheCurrentPID() - { - kcout << "ProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; - return ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId; - } - - /// @brief Check if process can be schedulded. - /// @param process the process reference. - /// @retval true can be schedulded. - /// @retval false cannot be schedulded. - bool ProcessHelper::CanBeScheduled(Ref<PROCESS_HEADER_BLOCK>& process) - { - if (process.Leak().Status == ProcessStatus::kFrozen || - process.Leak().Status == ProcessStatus::kDead) - return false; - - if (process.Leak().Kind == PROCESS_HEADER_BLOCK::kSharedObjectKind) - { - if (auto start = process.Leak().DLLPtr->Load<VoidPtr>(kPefStart, rt_string_len(kPefStart), kPefCode); - start) - { - process.Leak().Image = start; - process.Leak().StackFrame->BP = reinterpret_cast<HAL::Reg>(start); - } - } - - if (process.Leak().GetStatus() == ProcessStatus::kStarting) - { - if (process.Leak().PTime <= 0) - { - process.Leak().Status = ProcessStatus::kRunning; - process.Leak().Affinity = AffinityKind::kStandard; - - return true; - } - - ++process.Leak().PTime; - } - - return process.Leak().PTime > 0; - } - - /** - * @brief Spin scheduler class. - */ - - SizeT ProcessHelper::StartScheduling() - { - auto& process_ref = ProcessScheduler::The().Leak(); - SizeT ret = process_ref.Run(); - - return ret; - } - - /** - * \brief Does a context switch in a CPU. - * \param the_stack the stackframe of the running app. - * \param new_pid the process's PID. - */ - - bool ProcessHelper::Switch(HAL::StackFrame* the_stack, const PID& new_pid) - { - if (!the_stack || new_pid < 0) - return false; - - for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Leak().Count(); ++index) - { - if (HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() == kInvalidHart) - continue; - - if (HardwareThreadScheduler::The().Leak()[index].Leak()->StackFrame() == the_stack) - { - HardwareThreadScheduler::The().Leak()[index].Leak()->Busy(false); - continue; - } - - if (HardwareThreadScheduler::The().Leak()[index].Leak()->IsBusy()) - continue; - - if (HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() != - ThreadKind::kHartBoot && - HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() != - ThreadKind::kHartSystemReserved) - { - HardwareThreadScheduler::The().Leak()[index].Leak()->Busy(true); - ProcessHelper::TheCurrentPID() = new_pid; - - return HardwareThreadScheduler::The().Leak()[index].Leak()->Switch(the_stack); - } - } - - return false; - } - - /// @brief this checks if any process is on the team. - ProcessScheduler::operator bool() - { - return mTeam.AsArray().Count() > 0; - } - - /// @brief this checks if no process is on the team. - bool ProcessScheduler::operator!() - { - return mTeam.AsArray().Count() == 0; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/ProcessTeam.cxx b/dev/Kernel/Sources/ProcessTeam.cxx deleted file mode 100644 index 81307d97..00000000 --- a/dev/Kernel/Sources/ProcessTeam.cxx +++ /dev/null @@ -1,38 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -/***********************************************************************************/ -/// @file ProcessTeam.cxx -/// @brief Process teams implementation. -/***********************************************************************************/ - -#include <KernelKit/ProcessScheduler.hxx> - -namespace Kernel -{ - /// @brief Process list array getter. - /// @return The list of process to schedule. - MutableArray<Ref<PROCESS_HEADER_BLOCK>>& ProcessTeam::AsArray() - { - return mProcessList; - } - - /// @brief Get team ID. - /// @return The team's ID. - UInt64& ProcessTeam::Id() noexcept - { - return mTeamId; - } - - /// @brief Current process getter. - /// @return The current process header. - Ref<PROCESS_HEADER_BLOCK>& ProcessTeam::AsRef() - { - return mCurrentProcess; - } -} // namespace Kernel - -// last rev 05-03-24 diff --git a/dev/Kernel/Sources/Property.cxx b/dev/Kernel/Sources/Property.cxx deleted file mode 100644 index 04b4367e..00000000 --- a/dev/Kernel/Sources/Property.cxx +++ /dev/null @@ -1,27 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <CFKit/Property.hxx> - -namespace Kernel -{ - Property::~Property() = default; - - bool Property::StringEquals(StringView& name) - { - return this->fName && this->fName == name; - } - - StringView& Property::GetKey() - { - return this->fName; - } - - PropertyId& Property::GetValue() - { - return fAction; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Ref.cxx b/dev/Kernel/Sources/Ref.cxx deleted file mode 100644 index cf383271..00000000 --- a/dev/Kernel/Sources/Ref.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Ref.hxx> diff --git a/dev/Kernel/Sources/Semaphore.cxx b/dev/Kernel/Sources/Semaphore.cxx deleted file mode 100644 index c159240e..00000000 --- a/dev/Kernel/Sources/Semaphore.cxx +++ /dev/null @@ -1,62 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/Semaphore.hxx> - -namespace Kernel -{ - bool Semaphore::Unlock() noexcept - { - if (fLockingProcess) - fLockingProcess = nullptr; - - return fLockingProcess == nullptr; - } - - bool Semaphore::Lock(PROCESS_HEADER_BLOCK* process) - { - if (!process || fLockingProcess) - return false; - - fLockingProcess = process; - - return true; - } - - bool Semaphore::IsLocked() const - { - return fLockingProcess; - } - - bool Semaphore::LockOrWait(PROCESS_HEADER_BLOCK* process, HardwareTimerInterface* timer) - { - if (process == nullptr) - return false; - - if (timer == nullptr) - return false; - - this->Lock(process); - - timer->Wait(); - - return this->Lock(process); - } - - /// @brief Wait with process, either wait for process being invalid, or not being run. - Void Semaphore::WaitForProcess() noexcept - { - while (fLockingProcess) - { - if (fLockingProcess->GetStatus() != ProcessStatus::kRunning) - { - this->Unlock(); - break; - } - } - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Storage/AHCIDeviceInterface.cxx b/dev/Kernel/Sources/Storage/AHCIDeviceInterface.cxx deleted file mode 100644 index dde33193..00000000 --- a/dev/Kernel/Sources/Storage/AHCIDeviceInterface.cxx +++ /dev/null @@ -1,35 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <StorageKit/AHCI.hxx> - -using namespace Kernel; - -/// @brief Class constructor -/// @param Out Disk output -/// @param In Disk input -/// @param Cleanup Disk cleanup. -AHCIDeviceInterface::AHCIDeviceInterface(void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)) - : DeviceInterface(Out, In), fCleanup(Cleanup) -{ -} - -/// @brief Class desctructor -AHCIDeviceInterface::~AHCIDeviceInterface() -{ - MUST_PASS(fCleanup); - if (fCleanup) - fCleanup(); -} - -/// @brief Returns the name of the device interface. -/// @return it's name as a string. -const char* AHCIDeviceInterface::Name() const -{ - return "AHCIDeviceInterface"; -} diff --git a/dev/Kernel/Sources/Storage/ATADeviceInterface.cxx b/dev/Kernel/Sources/Storage/ATADeviceInterface.cxx deleted file mode 100644 index 1611e790..00000000 --- a/dev/Kernel/Sources/Storage/ATADeviceInterface.cxx +++ /dev/null @@ -1,88 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <StorageKit/ATA.hxx> - -using namespace Kernel; - -/// @brief Class constructor -/// @param Out Disk output -/// @param In Disk input -/// @param Cleanup Disk cleanup. -ATADeviceInterface::ATADeviceInterface( - void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)) - : DeviceInterface(Out, In), fCleanup(Cleanup) -{ -} - -/// @brief Class desctructor -ATADeviceInterface::~ATADeviceInterface() -{ - MUST_PASS(fCleanup); - if (fCleanup) - fCleanup(); -} - -/// @brief Returns the name of the device interface. -/// @return it's name as a string. -const char* ATADeviceInterface::Name() const -{ - return "ATADeviceInterface"; -} - -/// @brief Output operator. -/// @param Data -/// @return -ATADeviceInterface& ATADeviceInterface::operator<<(MountpointInterface* Data) -{ - if (!Data) - return *this; - - for (SizeT driveCount = 0; driveCount < kDriveManagerCount; ++driveCount) - { - auto interface = Data->GetAddressOf(driveCount); - if ((interface) && rt_string_cmp((interface)->fDriveKind(), "ATA-", 5) == 0) - { - continue; - } - else if ((interface) && - rt_string_cmp((interface)->fDriveKind(), "ATA-", 5) != 0) - { - return *this; - } - } - - return (ATADeviceInterface&)DeviceInterface<MountpointInterface*>::operator<<( - Data); -} - -/// @brief Input operator. -/// @param Data -/// @return -ATADeviceInterface& ATADeviceInterface::operator>>(MountpointInterface* Data) -{ - if (!Data) - return *this; - - for (SizeT driveCount = 0; driveCount < kDriveManagerCount; ++driveCount) - { - auto interface = Data->GetAddressOf(driveCount); - if ((interface) && rt_string_cmp((interface)->fDriveKind(), "ATA-", 5) == 0) - { - continue; - } - else if ((interface) && - rt_string_cmp((interface)->fDriveKind(), "ATA-", 5) != 0) - { - return *this; - } - } - - return (ATADeviceInterface&)DeviceInterface<MountpointInterface*>::operator>>( - Data); -} diff --git a/dev/Kernel/Sources/Storage/NVMEDeviceInterface.cxx b/dev/Kernel/Sources/Storage/NVMEDeviceInterface.cxx deleted file mode 100644 index 7d07bf4b..00000000 --- a/dev/Kernel/Sources/Storage/NVMEDeviceInterface.cxx +++ /dev/null @@ -1,28 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <StorageKit/NVME.hxx> - -namespace Kernel -{ - NVMEDeviceInterface::NVMEDeviceInterface(void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)) - : DeviceInterface(Out, In), fCleanup(Cleanup) - { - } - - NVMEDeviceInterface::~NVMEDeviceInterface() - { - if (fCleanup) - fCleanup(); - } - - const char* NVMEDeviceInterface::Name() const - { - return ("NVMEDeviceInterface"); - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Storage/SCSIDeviceInterface.cxx b/dev/Kernel/Sources/Storage/SCSIDeviceInterface.cxx deleted file mode 100644 index da75a181..00000000 --- a/dev/Kernel/Sources/Storage/SCSIDeviceInterface.cxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <StorageKit/SCSI.hxx> - -///! @brief ATAPI SCSI packet. -const scsi_packet_type kCDRomPacketTemplate = {0x43, 0, 1, 0, 0, 0, - 0, 12, 0x40, 0, 0}; diff --git a/dev/Kernel/Sources/Stream.cxx b/dev/Kernel/Sources/Stream.cxx deleted file mode 100644 index 3a809a8d..00000000 --- a/dev/Kernel/Sources/Stream.cxx +++ /dev/null @@ -1,12 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Stream.cxx - Purpose: Stream object - - Revision History: - -------------------------------------------- */ - -#include <NewKit/Stream.hxx> diff --git a/dev/Kernel/Sources/String.cxx b/dev/Kernel/Sources/String.cxx deleted file mode 100644 index 8ea7d65f..00000000 --- a/dev/Kernel/Sources/String.cxx +++ /dev/null @@ -1,246 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/String.hxx> -#include <NewKit/Utils.hxx> -#include <KernelKit/DebugOutput.hxx> - -namespace Kernel -{ - Char* StringView::Data() - { - return fData; - } - - const Char* StringView::CData() const - { - return fData; - } - - Size StringView::Length() const - { - return fSz; - } - - bool StringView::operator==(const StringView& rhs) const - { - if (rhs.Length() != this->Length()) - return false; - - for (Size index = 0; index < this->Length(); ++index) - { - if (rhs.fData[index] != fData[index]) - return false; - } - - return true; - } - - bool StringView::operator==(const Char* rhs) const - { - if (rt_string_len(rhs) != this->Length()) - return false; - - for (Size index = 0; index < rt_string_len(rhs); ++index) - { - if (rhs[index] != fData[index]) - return false; - } - - return true; - } - - bool StringView::operator!=(const StringView& rhs) const - { - if (rhs.Length() != this->Length()) - return false; - - for (Size index = 0; index < rhs.Length(); ++index) - { - if (rhs.fData[index] == fData[index]) - return false; - } - - return true; - } - - bool StringView::operator!=(const Char* rhs) const - { - if (rt_string_len(rhs) != this->Length()) - return false; - - for (Size index = 0; index < rt_string_len(rhs); ++index) - { - if (rhs[index] == fData[index]) - return false; - } - - return true; - } - - ErrorOr<StringView> StringBuilder::Construct(const Char* data) - { - if (!data || *data == 0) - return {}; - - StringView view(rt_string_len(data)); - - view += data; - - return ErrorOr<StringView>(view); - } - - const char* StringBuilder::FromInt(const char* fmt, int i) - { - if (!fmt) - return ("-1"); - - char* ret = (char*)ALLOCA(sizeof(char) * 8 + rt_string_len(fmt)); - - if (!ret) - return ("-1"); - - Char result[8]; - - if (!rt_to_string(result, sizeof(int), i)) - { - return ("-1"); - } - - const auto fmt_len = rt_string_len(fmt); - const auto res_len = rt_string_len(result); - - for (Size idx = 0; idx < fmt_len; ++idx) - { - if (fmt[idx] == '%') - { - SizeT result_cnt = idx; - - for (auto y_idx = idx; y_idx < res_len; ++y_idx) - { - ret[result_cnt] = result[y_idx]; - ++result_cnt; - } - - break; - } - - ret[idx] = fmt[idx]; - } - - return ret; /* Copy that ret into a buffer, 'ALLOCA' allocates to the stack */ - } - - const char* StringBuilder::FromBool(const char* fmt, bool i) - { - if (!fmt) - return ("?"); - - const char* boolean_expr = i ? "true" : "false"; - char* ret = (char*)ALLOCA((sizeof(char) * i) ? 4 : 5 + rt_string_len(fmt)); - - if (!ret) - return ("?"); - - const auto fmt_len = rt_string_len(fmt); - const auto res_len = rt_string_len(boolean_expr); - - for (Size idx = 0; idx < fmt_len; ++idx) - { - if (fmt[idx] == '%') - { - SizeT result_cnt = idx; - - for (auto y_idx = idx; y_idx < res_len; ++y_idx) - { - ret[result_cnt] = boolean_expr[y_idx]; - ++result_cnt; - } - - break; - } - - ret[idx] = fmt[idx]; - } - - return ret; - } - - bool StringBuilder::Equals(const char* lhs, const char* rhs) - { - if (rt_string_len(rhs) != rt_string_len(lhs)) - return false; - - for (Size index = 0; index < rt_string_len(rhs); ++index) - { - if (rhs[index] != lhs[index]) - return false; - } - - return true; - } - - const char* StringBuilder::Format(const char* fmt, const char* fmt2) - { - if (!fmt || !fmt2) - return ("?"); - - char* ret = - (char*)ALLOCA(sizeof(char) * rt_string_len(fmt2) + rt_string_len(fmt2)); - - if (!ret) - return ("?"); - - for (Size idx = 0; idx < rt_string_len(fmt); ++idx) - { - if (fmt[idx] == '%') - { - Size result_cnt = idx; - for (Size y_idx = 0; y_idx < rt_string_len(fmt2); ++y_idx) - { - ret[result_cnt] = fmt2[y_idx]; - ++result_cnt; - } - - break; - } - - ret[idx] = fmt[idx]; - } - - return ret; - } - - STATIC void rt_string_append(Char* lhs, const Char* rhs, Int32 cur) - { - SizeT sz_rhs = rt_string_len(rhs); - SizeT rhs_i = 0; - - for (; rhs_i < sz_rhs; ++rhs_i) - { - lhs[rhs_i + cur] = rhs[rhs_i]; - } - } - - StringView& StringView::operator+=(const Char* rhs) - { - rt_string_append(this->fData, rhs, this->fCur); - this->fCur += rt_string_len(rhs); - - return *this; - } - - StringView& StringView::operator+=(const StringView& rhs) - { - if (rt_string_len(rhs.fData) > this->Length()) - return *this; - - rt_string_append(this->fData, const_cast<Char*>(rhs.fData), this->fCur); - this->fCur += rt_string_len(const_cast<Char*>(rhs.fData)); - - return *this; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/ThreadLocalStorage.cxx b/dev/Kernel/Sources/ThreadLocalStorage.cxx deleted file mode 100644 index f258fa11..00000000 --- a/dev/Kernel/Sources/ThreadLocalStorage.cxx +++ /dev/null @@ -1,76 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * ======================================================== - */ - -#include <NewKit/String.hxx> -#include <CFKit/Property.hxx> -#include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/ThreadLocalStorage.hxx> - -///! BUGS: 0 - -/***********************************************************************************/ -/// @file ThreadLocalStorage.cxx -/// @brief TLS inside the kernel. -/***********************************************************************************/ - -using namespace Kernel; - -Kernel::Property cTLSEnforceCheck; - -/** - * @brief Checks for cookie inside the TIB. - * @param tib the TIB to check. - * @return if the cookie is enabled. - */ - -Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* the_tib) -{ - if (!the_tib) - return false; - - Encoder encoder; - const char* tibAsBytes = encoder.AsBytes(the_tib); - - kcout << "newoskrnl: checking for a valid cookie inside the TIB...\r"; - - return tibAsBytes[0] == kCookieMag0 && tibAsBytes[1] == kCookieMag1 && - tibAsBytes[2] == kCookieMag2; -} - -/** - * @brief System call implementation of the TLS check. - * @param stackPtr The call frame. - * @return - */ -EXTERN_C Bool tls_check_syscall_impl(Kernel::VoidPtr tib_ptr) noexcept -{ - if (!tib_ptr) - { - if (cTLSEnforceCheck.GetValue() == No) - { - return true; - } - else - { - kcout << "newoskrnl: failing because of an invalid TIB...\r"; - return false; - } - } - - THREAD_INFORMATION_BLOCK* tib_struct = (THREAD_INFORMATION_BLOCK*)tib_ptr; - - if (!tls_check_tib(tib_struct)) - { - kcout << "newoskrnl: crashing because of an invalid TIB...\r"; - return false; - } - - kcout << "newoskrnl: Verification succeeded! staying alive...\r"; - return true; -} diff --git a/dev/Kernel/Sources/ThreadScheduler.cxx b/dev/Kernel/Sources/ThreadScheduler.cxx deleted file mode 100644 index fb822a68..00000000 --- a/dev/Kernel/Sources/ThreadScheduler.cxx +++ /dev/null @@ -1,8 +0,0 @@ -/* -------------------------------------------
-
- Copyright ZKA Technologies.
-
-------------------------------------------- */
-
-#include <KernelKit/ProcessScheduler.hxx>
-#include <KernelKit/MP.hxx>
\ No newline at end of file diff --git a/dev/Kernel/Sources/Timer.cxx b/dev/Kernel/Sources/Timer.cxx deleted file mode 100644 index 041c4b67..00000000 --- a/dev/Kernel/Sources/Timer.cxx +++ /dev/null @@ -1,44 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <KernelKit/Timer.hxx> - -///! BUGS: 0 -///! @file Timer.cxx - -using namespace Kernel; - -/// @brief Unimplemented as it is an interface. -Int32 HardwareTimerInterface::Wait() noexcept -{ - return kErrorUnimplemented; -} - -/// @brief HardwareTimer class, meant to be generic. - -HardwareTimer::HardwareTimer(Int64 seconds) - : fWaitFor(seconds) -{ - MUST_PASS(fWaitFor > 0); -} - -HardwareTimer::~HardwareTimer() -{ - fWaitFor = 0; -} - -Int32 HardwareTimer::Wait() noexcept -{ - if (fWaitFor < 1) - return -1; - - while (*fDigitalTimer < (*fDigitalTimer + fWaitFor)) - { - ; - } - - return 0; -} diff --git a/dev/Kernel/Sources/URL.cxx b/dev/Kernel/Sources/URL.cxx deleted file mode 100644 index 189aba8e..00000000 --- a/dev/Kernel/Sources/URL.cxx +++ /dev/null @@ -1,98 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <CFKit/URL.hxx> -#include <KernelKit/DebugOutput.hxx> -#include <NewKit/Utils.hxx> - -/// BUGS: 0 - -namespace Kernel -{ - URL::URL(StringView& strUrl) - : fUrlView(strUrl, false) - { - } - - URL::~URL() = default; - - /// @brief internal and reserved protocols by kernel. - constexpr const Char* kURLProtocols[] = { - "file", // Filesystem protocol - "zup", // ZKA update protocol - "oscc", // Open System Configuration Connectivity. - "odbc", // ODBC connectivity. - "https", // HTTPS layer driver (HTTPS.sys). - }; - - constexpr const int kUrlOutSz = 1; //! such as: :// - constexpr const int kProtosCount = 5; - constexpr const int kRangeSz = 4096; - - ErrorOr<StringView> url_extract_location(const Char* url) - { - if (!url || *url == 0 || rt_string_len(url, kRangeSz) > kRangeSz) - return ErrorOr<StringView>{-1}; - - StringView view(rt_string_len(url)); - - SizeT i = 0; - bool scheme_found = false; - - for (; i < rt_string_len(url); ++i) - { - if (!scheme_found) - { - for (int y = 0; kProtosCount; ++y) - { - if (rt_string_in_string(view.CData(), kURLProtocols[y])) - { - i += rt_string_len(kURLProtocols[y]) + kUrlOutSz; - scheme_found = true; - - break; - } - } - } - - view.Data()[i] = url[i]; - } - - return ErrorOr<StringView>(view); - } - - ErrorOr<StringView> url_extract_protocol(const Char* url) - { - if (!url || *url == 0 || rt_string_len(url, kRangeSz) > kRangeSz) - return ErrorOr<StringView>{-1}; - - ErrorOr<StringView> view{-1}; - - return view; - } - - Ref<ErrorOr<StringView>> URL::Location() noexcept - { - const Char* src = fUrlView.Leak().CData(); - auto loc = url_extract_location(src); - - if (!loc) - return {}; - - return Ref<ErrorOr<StringView>>(loc); - } - - Ref<ErrorOr<StringView>> URL::Protocol() noexcept - { - const Char* src = fUrlView.Leak().CData(); - auto loc = url_extract_protocol(src); - - if (!loc) - return {}; - - return Ref<ErrorOr<StringView>>(loc); - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/User.cxx b/dev/Kernel/Sources/User.cxx deleted file mode 100644 index 4109864a..00000000 --- a/dev/Kernel/Sources/User.cxx +++ /dev/null @@ -1,240 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * File: User.cxx - * Purpose: User concept and management. - * - * ======================================================== - */ - -#include <KernelKit/User.hxx> -#include <NewKit/KernelCheck.hxx> -#include <KernelKit/FileManager.hxx> -#include <KernelKit/ProcessScheduler.hxx> - -#include <KernelKit/Heap.hxx> - -#define cStdUser (0xCF) -#define cSuperUser (0xEF) - -/// BUGS: 0 - -namespace Kernel -{ - namespace Detail - { - /// \brief Constructs a token by hashing the password. - /// \param password password to hash. - /// \return the hashed password - const Int32 cred_construct_token(Char* password, User* user) - { - if (!password || !user) - return -1; - - for (Size i_pass = 0; i_pass < rt_string_len(password); ++i_pass) - { - Char cur_chr = password[i_pass]; - password[i_pass] = cur_chr + (user->IsStdUser() ? cStdUser : cSuperUser); - } - - return 0; - } - } // namespace Detail - - User::User(const Int32& sel, const Char* userName) - : fRing((RingKind)sel) - { - MUST_PASS(sel >= 0); - this->fUserName += userName; - } - - User::User(const RingKind& ringKind, const Char* userName) - : fRing(ringKind) - { - this->fUserName += userName; - } - - User::~User() = default; - - Bool User::TrySave(const Char* password) noexcept - { - kcout << "Trying to save password...\r"; - - SizeT len = rt_string_len(password); - - Char* token = new Char[len]; - - MUST_PASS(token); - - rt_copy_memory((VoidPtr)password, token, rt_string_len(password)); - - Detail::cred_construct_token(token, this); - - if (NewFilesystemManager::GetMounted()) - { - auto node = NewFilesystemManager::GetMounted()->Create(kUsersFile); - - if (node) - { - NewFilesystemManager::GetMounted()->Write(this->fUserName.CData(), node, (VoidPtr)token, (this->IsStdUser() ? cStdUser : cSuperUser) | kNewFSCatalogKindMetaFile, len); - delete node; - } - - delete token; - return true; - } - - delete token; - return false; - } - - bool User::operator==(const User& lhs) - { - return lhs.fRing == this->fRing; - } - - bool User::operator!=(const User& lhs) - { - return lhs.fRing != this->fRing; - } - - StringView& User::Name() noexcept - { - return this->fUserName; - } - - const RingKind& User::Ring() noexcept - { - return this->fRing; - } - - Bool User::IsStdUser() noexcept - { - return this->Ring() == RingKind::kRingStdUser; - } - - Bool User::IsSuperUser() noexcept - { - return this->Ring() == RingKind::kRingSuperUser; - } - - UserManager* UserManager::The() noexcept - { - UserManager* view = nullptr; - - if (!view) - view = new UserManager(); - - return view; - } - - Bool UserManager::TryLogIn(User* user, const Char* password) noexcept - { - if (!password || - !user) - { - ErrLocal() = kErrorInvalidData; - - kcout << "newoskrnl: Incorrect data given.\r"; - - return false; - } - - kcout << "newoskrnl: Trying to log-in.\r"; - - FileStreamUTF8 file(kUsersFile, "rb"); - - // ------------------------------------------ // - // Retrieve token from a specific file fork. - // ------------------------------------------ // - - auto token = file.Read(user->fUserName.CData()); - - if (!token) - { - ErrLocal() = kErrorInvalidCreds; - - kcout << "newoskrnl: Incorrect credentials.\r"; - return false; - } - else - { - Char generated_token[255] = {0}; - - // ================================================== // - // Provide password on token variable. - // ================================================== // - - rt_copy_memory((VoidPtr)password, generated_token, rt_string_len(password)); - - // ================================================== // - // Construct token. - // ================================================== // - - Detail::cred_construct_token(generated_token, user); - - // ================================================== // - // Checks if it matches the current token we have. - // ================================================== // - - if (rt_string_cmp((Char*)token, generated_token, rt_string_len(password))) - { - kcout << "newoskrnl: Incorrect credentials.\r"; - - mm_delete_ke_heap(token); - return false; - } - - kcout << "newoskrnl: Credentials are correct, moving on.\r"; - } - - // ------------------------------------------ // - // This was successful, continue. - // ------------------------------------------ // - - user->fUserToken = token; - - if (fCurrentUser) - { - if (!fLastLoggedOffUser) - { - fLastLoggedOffUser = fCurrentUser; - } - else - { - this->TryLogOff(); - } - } - - fCurrentUser = user; - Kernel::kcout << "newoskrnl: Logged in as: " << fCurrentUser->Name().CData() << Kernel::endl; - - return true; - } - - User* UserManager::GetCurrent() noexcept - { - return fCurrentUser; - } - - Void UserManager::TryLogOff() noexcept - { - if (!fCurrentUser) - return; - - // an illegal operation just occured, we can't risk more. - if (fCurrentUser == fRootUser) - { - ke_stop(RUNTIME_CHECK_BOOTSTRAP); - } - - if (fLastLoggedOffUser) - delete fLastLoggedOffUser; - - fLastLoggedOffUser = nullptr; - fLastLoggedOffUser = fCurrentUser; - } -} // namespace Kernel diff --git a/dev/Kernel/Sources/Utils.cxx b/dev/Kernel/Sources/Utils.cxx deleted file mode 100644 index 5673c5fd..00000000 --- a/dev/Kernel/Sources/Utils.cxx +++ /dev/null @@ -1,257 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Utils.hxx> -#include <KernelKit/DebugOutput.hxx> - -namespace Kernel -{ - Int rt_string_cmp(const Char* src, const Char* cmp, Size size) - { - if (!cmp || - !src) - return 1; - - Int32 counter = 0; - - for (Size index = 0; index < size; ++index) - { - if (src[index] != cmp[index]) - ++counter; - } - - return counter; - } - - void rt_zero_memory(voidPtr pointer, Size len) - { - rt_set_memory(pointer, 0, len); - } - - Size rt_string_len(const Char* str, SizeT _len) - { - Size len{0}; - while (str[len] != '\0') - { - if (len > _len) - { - return 0; - } - - len++; - } - - return len; - } - - Size rt_string_len(const Char* ptr) - { - if (*ptr == 0) - return 0; - - SizeT cnt = 0; - - while (ptr[cnt] != (Char)0) - { - cnt++; - } - - return cnt; - } - - voidPtr rt_set_memory(voidPtr src, char value, Size len) - { - if (!src || len < 1) - return nullptr; - - char* start = reinterpret_cast<Char*>(src); - - while (len) - { - *start = value; - ++start; - --len; - } - - return (voidPtr)start; - } - - Int rt_move_memory(const voidPtr src, voidPtr dst, Size len) - { - if (len < 1) - return -2; - if (!src || !dst) - return -1; - - char* srcChr = reinterpret_cast<Char*>(src); - char* dstChar = reinterpret_cast<Char*>(dst); - Size index = 0; - - while (index < len) - { - dstChar[index] = srcChr[index]; - srcChr[index] = 0; - - ++index; - } - - return 0; - } - - Int rt_copy_memory(const voidPtr src, voidPtr dst, Size len) - { - if (len < 1) - return -2; - - char* srcChr = reinterpret_cast<char*>(src); - char* dstChar = reinterpret_cast<char*>(dst); - Size index = 0; - - while (index < len) - { - dstChar[index] = srcChr[index]; - ++index; - } - - return index; - } - - const Char* alloc_string(const Char* text) - { - if (!text) - return nullptr; - - const Char* string = new Char[rt_string_len(text)]; - if (!string) - return nullptr; - - voidPtr vText = reinterpret_cast<voidPtr>(const_cast<char*>(text)); - voidPtr vStr = reinterpret_cast<voidPtr>(const_cast<char*>(string)); - rt_copy_memory(vText, vStr, rt_string_len(text)); - - return string; - } - - Int rt_to_uppercase(Int character) - { - if (character >= 'a' && character <= 'z') - return character - 0x20; - - return character; - } - - Int rt_to_lower(Int character) - { - if (character >= 'A' && character <= 'Z') - return character + 0x20; - - return character; - } - - bool rt_to_string(Char* str, Int limit, Int base) - { - if (limit == 0) - return false; - - Int copy_limit = limit; - Int cnt = 0; - Int ret = base; - - while (limit != 1) - { - ret = ret % 10; - str[cnt] = ret; - - ++cnt; - --limit; - --ret; - } - - str[copy_limit] = '\0'; - return true; - } - - Boolean is_space(Char chr) - { - return chr == ' '; - } - - Boolean is_newln(Char chr) - { - return chr == '\n'; - } - - voidPtr rt_string_in_string(const char* in, const char* needle) - { - for (SizeT i = 0; i < rt_string_len(in); ++i) - { - if (rt_string_cmp(in + i, needle, rt_string_len(needle)) == 0) - return reinterpret_cast<voidPtr>(const_cast<char*>(in + i)); - } - - return nullptr; - } - - // @brief Checks for a string start at the character. - - char* rt_string_has_char(char* str, const char chr) - { - while (*str != chr) - { - ++str; - - if (*str == 0) - return nullptr; - } - - return str; - } -} // namespace Kernel - -#ifdef __FREESTANDING__ - -//////////////////////////////////////////////////////////////////////////////////////// -/// Exported C functions -//////////////////////////////////////////////////////////////////////////////////////// - -/// @brief memset in C++ -EXTERN_C void memset(void* dst, char src, Kernel::SizeT len) -{ - Kernel::rt_set_memory(dst, src, len); -} - -/// @brief memcpy in C++ -EXTERN_C void memcpy(void* dst, void* src, Kernel::SizeT len) -{ - Kernel::rt_copy_memory(src, dst, len); -} - -/// @brief memmove in C++ -EXTERN_C void* memmove(void* dst, void* src, Kernel::SizeT len) -{ - Kernel::rt_copy_memory(src, dst, len); - return dst; -} - -/// @brief strlen definition in C++. -EXTERN_C Kernel::SizeT strlen(const char* whatToCheck) -{ - return Kernel::rt_string_len(whatToCheck); -} - -/// @brief memcmp in C++ -EXTERN_C Kernel::SizeT memcmp(void* dst, void* src, Kernel::SizeT len) -{ - return Kernel::rt_string_cmp((char*)src, (char*)dst, len); -} - -/// @brief strcmp in C++ -EXTERN_C Kernel::SizeT strcmp(char* dst, char* src, Kernel::SizeT len) -{ - return Kernel::rt_string_cmp(src, dst, len); -} - -#endif // __FREESTANDING__
\ No newline at end of file diff --git a/dev/Kernel/Sources/Variant.cxx b/dev/Kernel/Sources/Variant.cxx deleted file mode 100644 index 97775900..00000000 --- a/dev/Kernel/Sources/Variant.cxx +++ /dev/null @@ -1,28 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include <NewKit/Variant.hxx> - -namespace Kernel -{ - const Char* Variant::ToString() - { - switch (fKind) - { - case VariantKind::kJson: - return ("Class:{Json}"); - case VariantKind::kString: - return ("Class:{String}"); - case VariantKind::kBlob: - return ("Class:{Blob}"); - default: - return ("Class:{Null}"); - } - } - - /// @brief Leak variant's instance. - VoidPtr Variant::Leak() { return fPtr; } -} // namespace Kernel diff --git a/dev/Kernel/Sources/compile_flags.txt b/dev/Kernel/Sources/compile_flags.txt deleted file mode 100644 index b02c5e3d..00000000 --- a/dev/Kernel/Sources/compile_flags.txt +++ /dev/null @@ -1,7 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I../ --I$(HOME)/ --D__FSKIT_USE_NEWFS__ --D__NEWOS_AMD64__ diff --git a/dev/Kernel/StorageKit/AHCI.hxx b/dev/Kernel/StorageKit/AHCI.hxx deleted file mode 100644 index 81d0c5bf..00000000 --- a/dev/Kernel/StorageKit/AHCI.hxx +++ /dev/null @@ -1,33 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DeviceManager.hxx> -#include <KernelKit/DriveManager.hxx> -#include <NewKit/OwnPtr.hxx> - -namespace Kernel -{ - class AHCIDeviceInterface : public DeviceInterface<MountpointInterface*> - { - public: - explicit AHCIDeviceInterface(void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)); - - virtual ~AHCIDeviceInterface(); - - public: - AHCIDeviceInterface& operator=(const AHCIDeviceInterface&) = default; - AHCIDeviceInterface(const AHCIDeviceInterface&) = default; - - const char* Name() const override; - - private: - void (*fCleanup)(void) = {nullptr}; - }; -} // namespace Kernel diff --git a/dev/Kernel/StorageKit/ATA.hxx b/dev/Kernel/StorageKit/ATA.hxx deleted file mode 100644 index 23437ca8..00000000 --- a/dev/Kernel/StorageKit/ATA.hxx +++ /dev/null @@ -1,39 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DeviceManager.hxx> -#include <KernelKit/DriveManager.hxx> -#include <NewKit/OwnPtr.hxx> -#include <NewKit/Utils.hxx> - -namespace Kernel -{ - /// @brief ATA device interface type. - class ATADeviceInterface : public DeviceInterface<MountpointInterface*> - { - public: - explicit ATADeviceInterface(void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)); - - virtual ~ATADeviceInterface(); - - public: - ATADeviceInterface& operator<<(MountpointInterface* Data) override; - ATADeviceInterface& operator>>(MountpointInterface* Data) override; - - public: - ATADeviceInterface& operator=(const ATADeviceInterface&) = default; - ATADeviceInterface(const ATADeviceInterface&) = default; - - const char* Name() const override; - - private: - void (*fCleanup)(void) = { nullptr }; - }; -} // namespace Kernel diff --git a/dev/Kernel/StorageKit/NVME.hxx b/dev/Kernel/StorageKit/NVME.hxx deleted file mode 100644 index 9d42ce9d..00000000 --- a/dev/Kernel/StorageKit/NVME.hxx +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/DeviceManager.hxx> -#include <KernelKit/DriveManager.hxx> -#include <NewKit/OwnPtr.hxx> - -namespace Kernel -{ - class NVMEDeviceInterface final : public DeviceInterface<MountpointInterface*> - { - public: - explicit NVMEDeviceInterface(void (*Out)(MountpointInterface* outpacket), - void (*In)(MountpointInterface* inpacket), - void (*Cleanup)(void)); - - ~NVMEDeviceInterface() override; - - public: - NVMEDeviceInterface& operator=(const NVMEDeviceInterface&) = default; - NVMEDeviceInterface(const NVMEDeviceInterface&) = default; - - const char* Name() const override; - - public: - OwnPtr<MountpointInterface*> operator()(UInt32 dmaLow, UInt32 dmaHigh, SizeT sz); - - private: - void (*fCleanup)(void) = {nullptr}; - }; -} // namespace Kernel diff --git a/dev/Kernel/StorageKit/PRDT.hxx b/dev/Kernel/StorageKit/PRDT.hxx deleted file mode 100644 index 6dec22c2..00000000 --- a/dev/Kernel/StorageKit/PRDT.hxx +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <KernelKit/PCI/Dma.hxx> -#include <KernelKit/PCI/Iterator.hxx> -#include <NewKit/Ref.hxx> - -#define kPrdtTransferSize (sizeof(Kernel::UShort)) - -namespace Kernel -{ - /// @brief Tranfer information about PRD. - enum kPRDTTransfer - { - kPRDTTransferInProgress, - kPRDTTransferIsDone, - kPRDTTransferCount, - }; - - /// @brief Physical Region Descriptor Table. - struct PRDT - { - UInt32 fPhysAddress; - UInt32 fSectorCount; - UInt8 fEndBit; - }; - - void construct_prdt(Ref<PRDT>& prd); - - EXTERN_C Int32 kPRDTTransferStatus; -} // namespace Kernel diff --git a/dev/Kernel/StorageKit/SCSI.hxx b/dev/Kernel/StorageKit/SCSI.hxx deleted file mode 100644 index 5a684052..00000000 --- a/dev/Kernel/StorageKit/SCSI.hxx +++ /dev/null @@ -1,11 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <Modules/SCSI/SCSI.hxx> - -extern const scsi_packet_type kCDRomPacketTemplate; diff --git a/dev/Kernel/StorageKit/Storage.hxx b/dev/Kernel/StorageKit/Storage.hxx deleted file mode 100644 index a9e0f8e4..00000000 --- a/dev/Kernel/StorageKit/Storage.hxx +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#define kDriveSectorSizeHDD (512) -#define kDriveSectorSizeSSD (4096) -#define kDriveSectorSizeOptical (2048) - -namespace Kernel -{ - template <typename T> - class DeviceInterface; - - class NVMEDeviceInterface; - class AHCIDeviceInterface; - class ATADeviceInterface; - class SCSIDeviceInterface; -} // namespace Kernel diff --git a/dev/Kernel/amd64-efi.make b/dev/Kernel/amd64-efi.make deleted file mode 100644 index 55517b2f..00000000 --- a/dev/Kernel/amd64-efi.make +++ /dev/null @@ -1,85 +0,0 @@ -################################################## -# (C) ZKA Technologies, all rights reserved. -# This is the newoskrnl's makefile. -################################################## - -CC = x86_64-w64-mingw32-g++ -LD = x86_64-w64-mingw32-ld -CCFLAGS = -fshort-wchar -c -shared -D__NEWOS_AMD64__ -mno-red-zone -fno-rtti -fno-exceptions \ - -std=c++20 -D__NEWOS_SUPPORT_NX__ -I../Vendor -D__FSKIT_USE_NEWFS__ \ - -D__NEWOSKRNL__ -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -I./ -I../ -I../Boot - -ASM = nasm - -DISKDRIVER = - -ifneq ($(ATA_PIO_SUPPORT), ) -DISKDRIVER = -D__ATA_PIO__ -endif - -ifneq ($(ATA_DMA_SUPPORT), ) -DISKDRIVER = -D__ATA_DMA__ -endif - -ifneq ($(AHCI_SUPPORT), ) -DISKDRIVER = -D__AHCI__ -endif - -ifneq ($(DEBUG_SUPPORT), ) -DEBUG = -D__DEBUG__ -endif - -COPY = cp - -# Add assembler, linker, and object files variables. -ASMFLAGS = -f win64 - -# Kernel subsystem is 17 and entrypoint is __ImageStart -LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x10000000 -LDOBJ = Objects/*.obj - -# This file is the kernel, responsible of task management and memory. -KERNEL = newoskrnl.dll - -.PHONY: error -error: - @echo "=== ERROR ===" - @echo "=> Use a specific target." - -MOVEALL=./MoveAll.X64.sh -WINDRES=x86_64-w64-mingw32-windres - -.PHONY: newos-amd64-epm -newos-amd64-epm: clean - $(WINDRES) KernelRsrc.rsrc -O coff -o KernelRsrc.obj - $(CC) $(CCFLAGS) $(DISKDRIVER) $(DEBUG) $(wildcard Sources/*.cxx) \ - $(wildcard Sources/FS/*.cxx) $(wildcard HALKit/AMD64/Storage/*.cxx) \ - $(wildcard HALKit/AMD64/PCI/*.cxx) $(wildcard Sources/Network/*.cxx) $(wildcard Sources/Storage/*.cxx) \ - $(wildcard HALKit/AMD64/*.cxx) $(wildcard HALKit/AMD64/*.cpp) \ - $(wildcard HALKit/AMD64/*.s) - $(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm - $(ASM) $(ASMFLAGS) HALKit/AMD64/HalSMPCoreManager.asm - $(ASM) $(ASMFLAGS) HALKit/AMD64/HalBoot.asm - $(ASM) $(ASMFLAGS) HALKit/AMD64/HalUtils.asm - $(MOVEALL) - -OBJCOPY=x86_64-w64-mingw32-objcopy - -.PHONY: link-amd64-epm -link-amd64-epm: - $(LD) $(LDFLAGS) $(LDOBJ) -o $(KERNEL) - -.PHONY: all -all: newos-amd64-epm link-amd64-epm - @echo "NewOSKrnl => OK." - -.PHONY: help -help: - @echo "=== HELP ===" - @echo "all: Build kernel and link it." - @echo "link-amd64-epm: Link kernel for EPM based disks." - @echo "newos-amd64-epm: Build kernel for EPM based disks." - -.PHONY: clean -clean: - rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL) diff --git a/dev/Kernel/arm64-efi.make b/dev/Kernel/arm64-efi.make deleted file mode 100644 index 410e7789..00000000 --- a/dev/Kernel/arm64-efi.make +++ /dev/null @@ -1,68 +0,0 @@ -################################################## -# (C) ZKA Technologies, all rights reserved. -# This is the microkernel makefile. -################################################## - -CC = clang++ -LD = lld-link -CCFLAGS = -fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NEWOS_ARM64__ -fno-rtti -fno-exceptions -I./ \ - -target aarch64-unknown-windows \ - -std=c++20 -D__FSKIT_USE_NEWFS__ -D__ZETA_MACHINE__ -D__NEWOSKRNL__ -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -I../ - -ASM = clang++ - -DISKDRIVER = -D__FLASH_MEM__ - -ifneq ($(SDCARD_SUPPORT), ) -DISKDRIVER = -D__SDCARD__ -endif - -ifneq ($(DEBUG_SUPPORT), ) -DEBUG = -D__DEBUG__ -endif - -COPY = cp - -LDFLAGS = -subsystem:efi_application -entry:hal_init_platform /nodefaultlib -LDOBJ = Objects/*.obj - -# This file is the kernel, responsible of task management and memory. -KERNEL = newoskrnl.dll - -.PHONY: error -error: - @echo "=== ERROR ===" - @echo "=> Use a specific target." - -MOVEALL=./MoveAll.ARM64.sh - -.PHONY: newos-arm64-epm -newos-arm64-epm: clean - $(CC) $(CCFLAGS) $(DISKDRIVER) $(DEBUG) $(wildcard Sources/*.cxx) \ - $(wildcard Sources/FS/*.cxx) $(wildcard HALKit/ARM64/Storage/*.cxx) \ - $(wildcard HALKit/ARM64/PCI/*.cxx) $(wildcard Sources/Network/*.cxx) $(wildcard Sources/Storage/*.cxx) \ - $(wildcard HALKit/ARM64/*.cxx) $(wildcard HALKit/ARM64/*.cpp) \ - $(wildcard HALKit/ARM64/*.s) - - $(MOVEALL) - -OBJCOPY=x86_64-w64-mingw32-objcopy - -.PHONY: link-arm64-epm -link-arm64-epm: - $(LD) $(LDFLAGS) $(LDOBJ) /out:$(KERNEL) - -.PHONY: all -all: newos-arm64-epm link-arm64-epm - @echo "NewOSKrnl => OK." - -.PHONY: help -help: - @echo "=== HELP ===" - @echo "all: Build kernel and link it." - @echo "link-arm64-epm: Link kernel for EPM based disks." - @echo "newos-arm64-epm: Build kernel for EPM based disks." - -.PHONY: clean -clean: - rm -f $(LDOBJ) $(wildcard *.o) $(KERNEL) diff --git a/dev/Kernel/compile_flags.txt b/dev/Kernel/compile_flags.txt deleted file mode 100644 index 4087caba..00000000 --- a/dev/Kernel/compile_flags.txt +++ /dev/null @@ -1,9 +0,0 @@ --nostdlib --ffreestanding --std=c++20 --I./ --I$(HOME)/ --D__NEWOS_AMD64__ --I../Vendor --D__x86_64__ --D__ED__ diff --git a/dev/Kernel/power64-cb.make b/dev/Kernel/power64-cb.make deleted file mode 100644 index f35df9ba..00000000 --- a/dev/Kernel/power64-cb.make +++ /dev/null @@ -1,4 +0,0 @@ -################################################## -# (C) ZKA Technologies, all rights reserved. -# This is the microkernel makefile. -################################################## diff --git a/dev/Kernel/riscv64-cb.make b/dev/Kernel/riscv64-cb.make deleted file mode 100644 index e69de29b..00000000 --- a/dev/Kernel/riscv64-cb.make +++ /dev/null |
