diff options
| -rw-r--r-- | public/drivers/.keep | 0 | ||||
| -rw-r--r-- | public/drivers/xserver/.keep | 0 | ||||
| -rw-r--r-- | src/kernel/CompilerKit/Version.h | 8 | ||||
| -rw-r--r-- | src/kernel/GfxKit/FB.h | 2 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelMain.cc | 2 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/Processor.h | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/DeviceMgr.h | 12 | ||||
| -rw-r--r-- | src/kernel/KernelKit/FileMgr.h | 9 | ||||
| -rw-r--r-- | src/kernel/NetworkKit/IP.h | 22 | ||||
| -rw-r--r-- | src/kernel/SwapKit/DiskSwap.h | 31 | ||||
| -rw-r--r-- | src/kernel/src/CodeMgr.cc | 1 | ||||
| -rw-r--r-- | src/kernel/src/FS/OpenHeFS+FileMgr.cc | 2 | ||||
| -rw-r--r-- | src/kernel/src/KernelTaskScheduler.cc | 4 | ||||
| -rw-r--r-- | src/kernel/src/Network/IPAddress.cc | 39 | ||||
| -rw-r--r-- | src/kernel/src/Swap/DiskSwap.cc | 18 |
15 files changed, 75 insertions, 77 deletions
diff --git a/public/drivers/.keep b/public/drivers/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/public/drivers/.keep diff --git a/public/drivers/xserver/.keep b/public/drivers/xserver/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/public/drivers/xserver/.keep diff --git a/src/kernel/CompilerKit/Version.h b/src/kernel/CompilerKit/Version.h index 9482f41e..43adeae2 100644 --- a/src/kernel/CompilerKit/Version.h +++ b/src/kernel/CompilerKit/Version.h @@ -5,10 +5,10 @@ #ifndef COMPILERKIT_VERSION_H #define COMPILERKIT_VERSION_H -#define BOOTLOADER_VERSION "v0.1.1-bootz" -#define KERNEL_VERSION "v0.1.1-krnl" +#define BOOTLOADER_VERSION "v0.1.2-bootz" +#define KERNEL_VERSION "v0.1.2-krnl" -#define BOOTLOADER_VERSION_BCD (0x0101) -#define KERNEL_VERSION_BCD (0x0101) +#define BOOTLOADER_VERSION_BCD (0x0102) +#define KERNEL_VERSION_BCD (0x0102) #endif diff --git a/src/kernel/GfxKit/FB.h b/src/kernel/GfxKit/FB.h index fc00ba3f..79539995 100644 --- a/src/kernel/GfxKit/FB.h +++ b/src/kernel/GfxKit/FB.h @@ -8,6 +8,7 @@ #include <KernelKit/DeviceMgr.h> namespace Kernel { + class FBDeviceInterface; struct FBDevicePacket; @@ -48,6 +49,7 @@ class FBDeviceInterface NE_DEVICE<FBDevicePacket*> { FBDeviceInterface& operator<<(FBDevicePacket* dat) override; FBDeviceInterface& operator>>(FBDevicePacket* dat) override; }; + } // namespace Kernel #endif diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cc b/src/kernel/HALKit/AMD64/HalKernelMain.cc index e54c0d84..1277dee7 100644 --- a/src/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/src/kernel/HALKit/AMD64/HalKernelMain.cc @@ -145,7 +145,7 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) { // TODO: Prosan, Process sanitizer. rtl_create_user_process([]() -> void { while (YES); }, "ProSan"); - //TODO: Vet sanitizer. + // TODO: Vet sanitizer. rtl_create_user_process([]() -> void { while (YES); }, "VetSan"); HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); diff --git a/src/kernel/HALKit/AMD64/Processor.h b/src/kernel/HALKit/AMD64/Processor.h index 8bd7b226..37ccd4f1 100644 --- a/src/kernel/HALKit/AMD64/Processor.h +++ b/src/kernel/HALKit/AMD64/Processor.h @@ -270,7 +270,7 @@ EXTERN_C ATTRIBUTE(naked) Kernel::Void hal_load_idt(Kernel::HAL::Register64 ptr) EXTERN_C ATTRIBUTE(naked) Kernel::Void hal_load_gdt(Kernel::HAL::Register64 ptr); inline Kernel::VoidPtr kKernelBitMpStart = nullptr; -inline Kernel::SizeT kKernelBitMpSize = 0UL; +inline Kernel::SizeT kKernelBitMpSize = 0UL; #endif // __NE_AMD64__ */ diff --git a/src/kernel/KernelKit/DeviceMgr.h b/src/kernel/KernelKit/DeviceMgr.h index 12f24970..bea5908c 100644 --- a/src/kernel/KernelKit/DeviceMgr.h +++ b/src/kernel/KernelKit/DeviceMgr.h @@ -19,6 +19,7 @@ // Last Rev: Wed, May 27, 2025 6:22 PM namespace Kernel { + template <typename T> class IDevice; @@ -33,8 +34,7 @@ class IDevice { public: IDevice() = default; - explicit IDevice(void (*Out)(IDevice<T>*, T), void (*In)(IDevice<T>*, T)) : fOut(Out), fIn(In) {} - + IDevice(void (*Out)(IDevice<T>*, T), void (*In)(IDevice<T>*, T)) : fOut(Out), fIn(In) {} virtual ~IDevice() = default; public: @@ -43,8 +43,7 @@ class IDevice { using ConstType = const T&; using TypePtr = T*; - IDevice& operator=(const IDevice<T>&) = default; - IDevice(const IDevice<T>&) = default; + NE_COPY_DEFAULT(IDevice) public: virtual IDevice<T>& operator<<(T Data) { @@ -118,8 +117,11 @@ enum { kDeviceTypePCI, kDeviceTypeVGA, kDeviceTypeGPU, - kDeviceTypeCount, + kDeviceTypeRandom, + kDeviceTypeIPC, + kDeviceTypeCount = kDeviceTypeIPC - kDeviceTypeIDE + 1, }; + } // namespace Kernel #endif diff --git a/src/kernel/KernelKit/FileMgr.h b/src/kernel/KernelKit/FileMgr.h index 5e3f0a50..3b6cabe2 100644 --- a/src/kernel/KernelKit/FileMgr.h +++ b/src/kernel/KernelKit/FileMgr.h @@ -107,7 +107,7 @@ class IFilesystemMgr { _Input SizeT sz) = 0; public: - virtual bool Seek(_Input NodePtr node, _Input SizeT off) = 0; + virtual bool Seek(_Input NodePtr node, _Input UIntPtr off) = 0; public: virtual SizeT Tell(_Input NodePtr node) = 0; @@ -269,7 +269,7 @@ class FileStream final { FileStream(const FileStream&); public: - ErrorOr<Int64> Write(SizeT offset, const VoidPtr data, SizeT len) { + ErrorOr<Int64> Write(UIntPtr offset, const VoidPtr data, SizeT len) { if (this->fFileRestrict != kFileMgrRestrictReadWrite && this->fFileRestrict != kFileMgrRestrictReadWriteBinary && this->fFileRestrict != kFileMgrRestrictWrite && @@ -281,7 +281,8 @@ class FileStream final { auto man = FSClass::GetMounted(); if (man) { - man->Write(offset, fFile, data, len); + man->Seek(fFile, offset); + man->Write(fFile, data, 0, len); return ErrorOr<Int64>(kErrorSuccess); } @@ -324,7 +325,7 @@ class FileStream final { return nullptr; } - VoidPtr Read(SizeT offset, SizeT sz) { + VoidPtr Read(UIntPtr offset, SizeT sz) { if (this->fFileRestrict != kFileMgrRestrictReadWrite && this->fFileRestrict != kFileMgrRestrictReadWriteBinary && this->fFileRestrict != kFileMgrRestrictRead && diff --git a/src/kernel/NetworkKit/IP.h b/src/kernel/NetworkKit/IP.h index d195bbee..38afeb8e 100644 --- a/src/kernel/NetworkKit/IP.h +++ b/src/kernel/NetworkKit/IP.h @@ -18,12 +18,13 @@ class IPFactory; class RawIPAddress final { private: explicit RawIPAddress(UInt8 bytes[4]); + + public: ~RawIPAddress() = default; - RawIPAddress& operator=(const RawIPAddress&) = delete; + RawIPAddress& operator=(const RawIPAddress&) = default; RawIPAddress(const RawIPAddress&) = default; - public: UInt8* Address(); UInt8& operator[](const Size& index); @@ -32,7 +33,7 @@ class RawIPAddress final { BOOL operator!=(const RawIPAddress& ipv6); private: - UInt8 fAddr[4]; + UInt8 fAddr[4] = {}; friend IPFactory; // it is the one creating these addresses, thus this // is why the constructors are private. @@ -44,13 +45,14 @@ class RawIPAddress final { class RawIPAddress6 final { private: explicit RawIPAddress6(UInt8 Bytes[16]); + + public: ~RawIPAddress6() = default; - RawIPAddress6& operator=(const RawIPAddress6&) = delete; + RawIPAddress6& operator=(const RawIPAddress6&) = default; RawIPAddress6(const RawIPAddress6&) = default; - public: - UInt8* Address() { return fAddr; } + UInt8* Address(); UInt8& operator[](const Size& index); @@ -58,7 +60,7 @@ class RawIPAddress6 final { bool operator!=(const RawIPAddress6& ipv6); private: - UInt8 fAddr[16]; + UInt8 fAddr[16] = {}; friend IPFactory; }; @@ -68,9 +70,9 @@ class RawIPAddress6 final { */ class IPFactory final { public: - static ErrorOr<KString> ToKString(Ref<RawIPAddress6>& ipv6); - static ErrorOr<KString> ToKString(Ref<RawIPAddress>& ipv4); - static bool IpCheckVersion4(const Char* ip); + static ErrorOr<KBasicString<UInt8>> ToKString(Ref<RawIPAddress6>& ipv6); + static ErrorOr<KBasicString<UInt8>> ToKString(Ref<RawIPAddress>& ipv4); + static bool IpCheckVersion4(const Char* ip); }; } // namespace Kernel diff --git a/src/kernel/SwapKit/DiskSwap.h b/src/kernel/SwapKit/DiskSwap.h index 62fa558c..9804afa6 100644 --- a/src/kernel/SwapKit/DiskSwap.h +++ b/src/kernel/SwapKit/DiskSwap.h @@ -11,6 +11,7 @@ #define kSwapBlockMaxSize (mib_cast(16)) #define kSwapPageFilePath "/boot/pagefile.sys" +#define kSwapPageFilePathU8 u8"/boot/pagefile.sys" /// @file SwapDisk.h /// @brief Virtual memory swap disk. @@ -24,30 +25,25 @@ class IDiskSwap; /// disk. class IDiskSwap final { public: - explicit IDiskSwap() = default; - ~IDiskSwap() = default; + IDiskSwap() = default; + ~IDiskSwap() = default; - NE_COPY_DELETE(IDiskSwap) - NE_MOVE_DELETE(IDiskSwap) + NE_COPY_DEFAULT(IDiskSwap) public: /***********************************************************************************/ /// @brief Write memory chunk onto disk. - /// @param name The swap name to recognize this memory region. - /// @param name_len length of fork name. /// @param data the data packet. /// @return Whether the swap was written to disk, or not. /***********************************************************************************/ - BOOL Write(const Char* name, SizeT name_len, SwapDiskHdr* data); + BOOL Write(SwapDiskHdr* data); /***********************************************************************************/ /// @brief Read memory chunk from disk. - /// @param name The swap name to recognize this memory region. - /// @param name_len length of fork name. /// @param data the data packet length. /// @return Whether the swap was fetched to disk, or not. /***********************************************************************************/ - _Output SwapDiskHdr* Read(const Char* name, SizeT name_len, SizeT data_len); + _Output SwapDiskHdr* Read(const UIntPtr offset, SizeT data_len); }; /// @brief Swap disk header, containing information about the held virtual memory. @@ -59,13 +55,14 @@ class IDiskSwap final { /// @param fBlobSz Blob's size. /// @param fBlob Data blob. typedef struct SwapDiskHdr { - UInt32 fMagic; - SizeT fHeaderSz; - UInt64 fTeamID; - UInt64 fProcessID; - UInt64 fVirtualAddress; - SizeT fBlobSz; - UInt8 fBlob[1]; + UInt32 fMagic; + SizeT fHeaderSz; + UInt64 fTeamID; + UInt64 fProcessID; + UIntPtr fOffset; + UInt64 fVirtualAddress; + SizeT fBlobSz; + UInt8 fBlob[1]; } PACKED ALIGN(8) SwapDiskHdr; } // namespace Kernel diff --git a/src/kernel/src/CodeMgr.cc b/src/kernel/src/CodeMgr.cc index 21ca4c11..726fe574 100644 --- a/src/kernel/src/CodeMgr.cc +++ b/src/kernel/src/CodeMgr.cc @@ -31,4 +31,5 @@ ProcessID rtl_create_user_process(rtl_start_kind main, const Char* process_name) if (!process_name || *process_name == 0) return kSchedInvalidPID; return UserProcessScheduler::The().Spawn(process_name, reinterpret_cast<VoidPtr>(main), nullptr); } + } // namespace Kernel diff --git a/src/kernel/src/FS/OpenHeFS+FileMgr.cc b/src/kernel/src/FS/OpenHeFS+FileMgr.cc index 7008c491..69930d35 100644 --- a/src/kernel/src/FS/OpenHeFS+FileMgr.cc +++ b/src/kernel/src/FS/OpenHeFS+FileMgr.cc @@ -49,7 +49,7 @@ NodePtr HeFileSystemMgr::Create(_Input const Char* path) { return nullptr; } - //TODO: its own helper! + // TODO: its own helper! SizeT len = oe_string_len<Char>(path); #if defined(__clang__) diff --git a/src/kernel/src/KernelTaskScheduler.cc b/src/kernel/src/KernelTaskScheduler.cc index 282d4b5d..8a14630d 100644 --- a/src/kernel/src/KernelTaskScheduler.cc +++ b/src/kernel/src/KernelTaskScheduler.cc @@ -11,7 +11,6 @@ /***********************************************************************************/ namespace Kernel { -EXTERN_C Void hal_switch_kernel_task(HAL::StackFramePtr frame, KID kid); Bool KernelTaskHelper::Add(HAL::StackFramePtr frame_ptr, KID new_kid) { NE_UNUSED(frame_ptr); @@ -29,4 +28,5 @@ Bool KernelTaskHelper::Remove(const KID kid) { Bool KernelTaskHelper::CanBeScheduled(const KernelTask& task) { return task.Kid > 0 && task.Image.HasCode(); } -} // namespace Kernel
\ No newline at end of file + +} // namespace Kernel diff --git a/src/kernel/src/Network/IPAddress.cc b/src/kernel/src/Network/IPAddress.cc index 82d2ae69..3972c248 100644 --- a/src/kernel/src/Network/IPAddress.cc +++ b/src/kernel/src/Network/IPAddress.cc @@ -6,6 +6,7 @@ #include <NetworkKit/IP.h> namespace Kernel { + UInt8* RawIPAddress::Address() { return fAddr; } @@ -15,7 +16,7 @@ RawIPAddress::RawIPAddress(UInt8 bytes[4]) { } BOOL RawIPAddress::operator==(const RawIPAddress& ipv4) { - for (Size index = 0; index < 4; ++index) { + for (SizeT index{}; index < 4; ++index) { if (ipv4.fAddr[index] != fAddr[index]) return false; } @@ -23,7 +24,7 @@ BOOL RawIPAddress::operator==(const RawIPAddress& ipv4) { } BOOL RawIPAddress::operator!=(const RawIPAddress& ipv4) { - for (Size index = 0; index < 4; ++index) { + for (SizeT index{}; index < 4; ++index) { if (ipv4.fAddr[index] == fAddr[index]) return false; } @@ -33,8 +34,8 @@ BOOL RawIPAddress::operator!=(const RawIPAddress& ipv4) { UInt8& RawIPAddress::operator[](const Size& index) { kout << "[RawIPAddress::operator[]] Fetching Index...\r"; - static UInt8 IP_PLACEHOLDER = '0'; - if (index >= 4) return IP_PLACEHOLDER; + static UInt8 kIPPlaceholder = '0'; + if (index >= 4) return kIPPlaceholder; return fAddr[index]; } @@ -43,17 +44,21 @@ RawIPAddress6::RawIPAddress6(UInt8 bytes[16]) { rt_copy_memory(bytes, fAddr, 16); } +UInt8* RawIPAddress6::Address() { + return fAddr; +} + UInt8& RawIPAddress6::operator[](const Size& index) { kout << "[RawIPAddress6::operator[]] Fetching Index...\r"; - static UInt8 IP_PLACEHOLDER = '0'; - if (index >= 16) return IP_PLACEHOLDER; + static UInt8 kIPPlaceholder = '0'; + if (index >= 16) return kIPPlaceholder; return fAddr[index]; } bool RawIPAddress6::operator==(const RawIPAddress6& ipv6) { - for (SizeT index = 0; index < 16; ++index) { + for (SizeT index{}; index < 16; ++index) { if (ipv6.fAddr[index] != fAddr[index]) return false; } @@ -61,28 +66,25 @@ bool RawIPAddress6::operator==(const RawIPAddress6& ipv6) { } bool RawIPAddress6::operator!=(const RawIPAddress6& ipv6) { - for (SizeT index = 0; index < 16; ++index) { + for (SizeT index{}; index < 16; ++index) { if (ipv6.fAddr[index] == fAddr[index]) return false; } return true; } -/// @todo -ErrorOr<KString> IPFactory::ToKString(Ref<RawIPAddress6>& ipv6) { +ErrorOr<KBasicString<UInt8>> IPFactory::ToKString(Ref<RawIPAddress6>& ipv6) { NE_UNUSED(ipv6); - auto str = KStringBuilder::Construct(""); - return str; + auto kipv6 = KStringBuilder::Construct(ipv6.Leak().Address()); + return kipv6; } -/// @todo -ErrorOr<KString> IPFactory::ToKString(Ref<RawIPAddress>& ipv4) { +ErrorOr<KBasicString<UInt8>> IPFactory::ToKString(Ref<RawIPAddress>& ipv4) { NE_UNUSED(ipv4); - auto str = KStringBuilder::Construct(""); - return str; + auto kipv4 = KStringBuilder::Construct(ipv4.Leak().Address()); + return kipv4; } -/// @note Doesn't catch IPs such as 256.999.0.1, UNSAFE! bool IPFactory::IpCheckVersion4(const Char* ip) { if (!ip) return NO; @@ -98,7 +100,7 @@ bool IPFactory::IpCheckVersion4(const Char* ip) { } else { if (ip[base] > '5' || ip[base] < '0') return NO; if (!rt_is_alnum(ip[base])) return NO; - if (cnter == 3) return NO; + if (cnter > 3) return NO; ++cnter; } @@ -108,4 +110,5 @@ bool IPFactory::IpCheckVersion4(const Char* ip) { return YES; } + } // namespace Kernel diff --git a/src/kernel/src/Swap/DiskSwap.cc b/src/kernel/src/Swap/DiskSwap.cc index 24b05a30..bd428040 100644 --- a/src/kernel/src/Swap/DiskSwap.cc +++ b/src/kernel/src/Swap/DiskSwap.cc @@ -10,41 +10,31 @@ static constexpr UInt32 kSwapDiskHeaderMagic = 0x44535750; // 'DSWP' /***********************************************************************************/ /// @brief Write memory chunk onto disk. -/// @param fork_name The swap name to recognize this memory region. -/// @param fork_name_len length of fork name. /// @param data the data packet. /// @return Whether the swap was written to disk, or not. /***********************************************************************************/ -BOOL IDiskSwap::Write(const Char* fork_name, SizeT fork_name_len, SwapDiskHdr* data) { - if (!fork_name || !fork_name_len) return NO; - if (*fork_name == 0) return NO; - +BOOL IDiskSwap::Write(SwapDiskHdr* data) { if (!data || data->fMagic != kSwapDiskHeaderMagic) return NO; FileStream file(kSwapPageFilePath, kRestrictWRB); - ErrorOr<Int64> ret = file.Write(fork_name, data, sizeof(SwapDiskHdr) + data->fBlobSz); + ErrorOr<Int64> ret = file.Write(data->fOffset, data, sizeof(SwapDiskHdr) + data->fBlobSz); return ret.Value() < kErrorSuccess; } /***********************************************************************************/ /// @brief Read memory chunk from disk. -/// @param fork_name The swap name to recognize this memory region. -/// @param fork_name_len length of fork name. /// @param data the data packet length. /// @return Whether the swap was fetched to disk, or not. /***********************************************************************************/ -SwapDiskHdr* IDiskSwap::Read(const Char* fork_name, SizeT fork_name_len, SizeT data_len) { - if (!fork_name || !fork_name_len) return nullptr; - if (*fork_name == 0) return nullptr; - +SwapDiskHdr* IDiskSwap::Read(const UIntPtr offset, SizeT data_len) { if (data_len > kSwapBlockMaxSize) return nullptr; if (data_len == 0) return nullptr; FileStream file(kSwapPageFilePath, kRestrictRB); - VoidPtr blob = file.Read(fork_name, sizeof(SwapDiskHdr) + data_len); + VoidPtr blob = file.Read(offset, sizeof(SwapDiskHdr) + data_len); if (!blob || (static_cast<SwapDiskHdr*>(blob))->fMagic != kSwapDiskHeaderMagic) { if (blob) mm_free_ptr(blob); |
