summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-26 00:08:26 -0500
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-26 00:10:11 -0500
commit2187ed0f67e21c6425b8770ff52ca02269a21a9d (patch)
tree5e82555fd3c5bf1e0484e9c6149c192b19708023 /src
parent771459c68c26970784f3beea5398d3e21bb8286a (diff)
kernel: a long set of kernel patches.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src')
-rw-r--r--src/kernel/KernelKit/TraceSrv.h1
-rw-r--r--src/kernel/KernelKit/UserProcessScheduler.inl16
-rw-r--r--src/kernel/KernelKit/ZXD.h8
-rw-r--r--src/kernel/StorageKit/SCSI.h21
-rw-r--r--src/kernel/src/Storage/AHCIDeviceInterface.cc2
-rw-r--r--src/kernel/src/Storage/NVMEDeviceInterface.cc11
-rw-r--r--src/kernel/src/Storage/SCSIDeviceInterface.cc15
-rw-r--r--src/libDDK/DriverKit/c++/checksum.h10
-rw-r--r--src/libDDK/DriverKit/c++/ddk.h13
-rw-r--r--src/libDDK/DriverKit/c++/driver_base.h (renamed from src/libDDK/DriverKit/c++/contract.h)6
-rw-r--r--src/libDDK/DriverKit/dev.h3
11 files changed, 86 insertions, 20 deletions
diff --git a/src/kernel/KernelKit/TraceSrv.h b/src/kernel/KernelKit/TraceSrv.h
index df188ea2..4af5e2ae 100644
--- a/src/kernel/KernelKit/TraceSrv.h
+++ b/src/kernel/KernelKit/TraceSrv.h
@@ -17,6 +17,7 @@ namespace Detail {
inline constexpr auto kDebugVersion = 0x0100;
inline constexpr auto kDebugDelim = ';';
inline constexpr auto kDebugEnd = '\r';
+
typedef UInt64 dk_socket_type;
} // namespace Detail
} // namespace Kernel \ No newline at end of file
diff --git a/src/kernel/KernelKit/UserProcessScheduler.inl b/src/kernel/KernelKit/UserProcessScheduler.inl
index 3d3659d6..e8a57212 100644
--- a/src/kernel/KernelKit/UserProcessScheduler.inl
+++ b/src/kernel/KernelKit/UserProcessScheduler.inl
@@ -7,7 +7,7 @@
======================================== */
-/// @brief USER_PROCESS inline definitions.
+/// @brief UPS inline definitions.
/// @author Amlal El Mahrouss (amlal@nekernel.org)
/// @date Tue Apr 22 22:01:07 CEST 2025
@@ -25,7 +25,7 @@ BOOL USER_PROCESS::Delete(ErrorOr<T*> ptr) {
if (!ptr) return No;
if (!this->HeapTree) {
- kout << "USER_PROCESS's heap is empty.\r";
+ kout << "USER_PROCESS: Heap is empty.\r";
return No;
}
@@ -36,20 +36,16 @@ BOOL USER_PROCESS::Delete(ErrorOr<T*> ptr) {
this->UsedMemory -= entry->EntrySize;
#ifdef __NE_AMD64__
- auto pd = hal_read_cr3();
+ auto page_dir = hal_read_cr3();
hal_write_cr3(this->VMRegister);
-
auto ret = mm_free_ptr(entry->Entry);
-
- hal_write_cr3(pd);
-
- return ret == kErrorSuccess;
+ hal_write_cr3(page_dir);
#else
- Bool ret = mm_free_ptr(ptr.Leak().Leak());
+ auto ret = mm_free_ptr(ptr.Leak().Leak());
+#endif
return ret == kErrorSuccess;
-#endif
}
entry = entry->Next;
diff --git a/src/kernel/KernelKit/ZXD.h b/src/kernel/KernelKit/ZXD.h
index a4b07bfa..81df0ade 100644
--- a/src/kernel/KernelKit/ZXD.h
+++ b/src/kernel/KernelKit/ZXD.h
@@ -16,9 +16,11 @@ struct ZXD_EXEC_HEADER;
struct ZXD_STUB_HEADER;
enum ZXD_FLAGS {
- kZXDFlagsInvalid,
- kZXDFlagsDriver,
- kZXDFlagsCount,
+ kZXDFlagsInvalid = 0,
+ kZXDFlagsDriver = 120,
+ kZXDFlagsBoot,
+ kZXDFlagsKernel,
+ kZXDFlagsCount = kZXDFlagsKernel - kZXDFlagsDriver + 1,
};
/// @brief ZXD executable header
diff --git a/src/kernel/StorageKit/SCSI.h b/src/kernel/StorageKit/SCSI.h
index 4dad00ad..12eb52d3 100644
--- a/src/kernel/StorageKit/SCSI.h
+++ b/src/kernel/StorageKit/SCSI.h
@@ -7,5 +7,24 @@
#pragma once
#include <modules/SCSI/SCSI.h>
+#include <KernelKit/DriveMgr.h>
+#include <NeKit/OwnPtr.h>
-namespace Kernel {} // namespace Kernel \ No newline at end of file
+namespace Kernel {
+class SCSIDeviceInterface final NE_DEVICE<IMountpoint*> {
+ public:
+ explicit SCSIDeviceInterface(Void (*out)(DeviceInterface*, IMountpoint* out_packet),
+ Void (*in)(DeviceInterface*, IMountpoint* in_packet),
+ Void (*cleanup)(Void));
+
+ ~SCSIDeviceInterface() override;
+
+ public:
+ NE_COPY_DEFAULT(SCSIDeviceInterface)
+
+ const Char* Name() const override;
+
+ private:
+ Void (*fCleanup)(Void) = {nullptr};
+};
+} // namespace Kernel
diff --git a/src/kernel/src/Storage/AHCIDeviceInterface.cc b/src/kernel/src/Storage/AHCIDeviceInterface.cc
index 02b39fb5..4faad175 100644
--- a/src/kernel/src/Storage/AHCIDeviceInterface.cc
+++ b/src/kernel/src/Storage/AHCIDeviceInterface.cc
@@ -55,7 +55,7 @@ AHCIDeviceInterface& AHCIDeviceInterface::operator>>(IMountpoint* mnt) {
for (SizeT driveCount = 0; driveCount < kDriveMaxCount; ++driveCount) {
auto interface = mnt->GetAddressOf(driveCount);
- // really check if it's ATA.
+ // really check if it's AHCI.
if ((interface) &&
rt_string_cmp((interface)->fProtocol(), "AHCI", rt_string_len("AHCI")) == 0) {
continue;
diff --git a/src/kernel/src/Storage/NVMEDeviceInterface.cc b/src/kernel/src/Storage/NVMEDeviceInterface.cc
index f05d384e..12d9e363 100644
--- a/src/kernel/src/Storage/NVMEDeviceInterface.cc
+++ b/src/kernel/src/Storage/NVMEDeviceInterface.cc
@@ -17,6 +17,15 @@ NVMEDeviceInterface::~NVMEDeviceInterface() {
}
const Char* NVMEDeviceInterface::Name() const {
- return ("/devices/nvme{}");
+ return ("/devices/nvm{}");
+}
+
+OwnPtr<IMountpoint*> NVMEDeviceInterface::operator()(UInt32 dma_low, UInt32 dma_high,
+ SizeT dma_sz) {
+ NE_UNUSED(dma_low);
+ NE_UNUSED(dma_high);
+ NE_UNUSED(dma_sz);
+
+ return {};
}
} // namespace Kernel
diff --git a/src/kernel/src/Storage/SCSIDeviceInterface.cc b/src/kernel/src/Storage/SCSIDeviceInterface.cc
index 2e331ae9..921e660a 100644
--- a/src/kernel/src/Storage/SCSIDeviceInterface.cc
+++ b/src/kernel/src/Storage/SCSIDeviceInterface.cc
@@ -6,4 +6,17 @@
#include <StorageKit/SCSI.h>
-using namespace Kernel;
+namespace Kernel {
+SCSIDeviceInterface::SCSIDeviceInterface(void (*out)(DeviceInterface*, IMountpoint* outpacket),
+ void (*in)(DeviceInterface*, IMountpoint* inpacket),
+ void (*cleanup)(void))
+ : DeviceInterface(out, in), fCleanup(cleanup) {}
+
+SCSIDeviceInterface::~SCSIDeviceInterface() {
+ if (fCleanup) fCleanup();
+}
+
+const Char* SCSIDeviceInterface::Name() const {
+ return ("/devices/sda{}");
+}
+} // namespace Kernel
diff --git a/src/libDDK/DriverKit/c++/checksum.h b/src/libDDK/DriverKit/c++/checksum.h
new file mode 100644
index 00000000..0aa206be
--- /dev/null
+++ b/src/libDDK/DriverKit/c++/checksum.h
@@ -0,0 +1,10 @@
+/* ========================================
+
+ Copyright Amlal El Mahrouss 2025, licensed under the Apache 2.0 license.
+
+ FILE: checksum.h
+ PURPOSE: Object DDK checksums.
+
+ ======================================== */
+
+#pragma once \ No newline at end of file
diff --git a/src/libDDK/DriverKit/c++/ddk.h b/src/libDDK/DriverKit/c++/ddk.h
new file mode 100644
index 00000000..2c83f935
--- /dev/null
+++ b/src/libDDK/DriverKit/c++/ddk.h
@@ -0,0 +1,13 @@
+/* ========================================
+
+ Copyright Amlal El Mahrouss 2025, licensed under the Apache 2.0 license.
+
+ FILE: ddk.h
+ PURPOSE: Object DDK header.
+
+ ======================================== */
+
+#pragma once
+
+#include <DriverKit/c++/driver_base.h>
+#include <DriverKit/c++/checksum.h>
diff --git a/src/libDDK/DriverKit/c++/contract.h b/src/libDDK/DriverKit/c++/driver_base.h
index e341f1a0..89cc04d8 100644
--- a/src/libDDK/DriverKit/c++/contract.h
+++ b/src/libDDK/DriverKit/c++/driver_base.h
@@ -2,8 +2,8 @@
Copyright Amlal El Mahrouss 2025, licensed under the Apache 2.0 license.
- FILE: ddk.h
- PURPOSE: Driver Kernel Interface Model base header.
+ FILE: driver_base.h
+ PURPOSE: IDriverBase and friends.
======================================== */
@@ -41,8 +41,8 @@ concept IsValidDriver = requires(T a) {
{ a.IsActive() && a.Type() > 0 };
};
+/// @brief Consteval helper to detect whether a template is truly based on IDriverBase.
/// @note This helper is consteval only.
template<IsValidDriver T>
inline consteval void ce_ddk_is_valid(T) {}
-
} // namespace Kernel::DDK
diff --git a/src/libDDK/DriverKit/dev.h b/src/libDDK/DriverKit/dev.h
index a88a00dd..1dda544e 100644
--- a/src/libDDK/DriverKit/dev.h
+++ b/src/libDDK/DriverKit/dev.h
@@ -27,6 +27,9 @@ typedef struct _DDK_DEVICE DDK_FINAL {
size_t (*d_tell)(struct _DDK_DEVICE* dev);
} DDK_DEVICE, *DDK_DEVICE_PTR;
+#define kopen kopen_dev
+#define kclose kclose_dev
+
/// @brief Open a new device from path.
/// @param path the device's path.
DDK_EXTERN DDK_DEVICE_PTR kopen_dev(const char* path);