summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--public/drivers/.keep0
-rw-r--r--public/drivers/xserver/.keep0
-rw-r--r--src/kernel/CompilerKit/Version.h8
-rw-r--r--src/kernel/GfxKit/FB.h2
-rw-r--r--src/kernel/HALKit/AMD64/HalKernelMain.cc2
-rw-r--r--src/kernel/HALKit/AMD64/Processor.h2
-rw-r--r--src/kernel/KernelKit/DeviceMgr.h12
-rw-r--r--src/kernel/KernelKit/FileMgr.h9
-rw-r--r--src/kernel/NetworkKit/IP.h22
-rw-r--r--src/kernel/SwapKit/DiskSwap.h31
-rw-r--r--src/kernel/src/CodeMgr.cc1
-rw-r--r--src/kernel/src/FS/OpenHeFS+FileMgr.cc2
-rw-r--r--src/kernel/src/KernelTaskScheduler.cc4
-rw-r--r--src/kernel/src/Network/IPAddress.cc39
-rw-r--r--src/kernel/src/Swap/DiskSwap.cc18
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);