diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-26 00:08:26 -0500 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-26 00:10:11 -0500 |
| commit | 2187ed0f67e21c6425b8770ff52ca02269a21a9d (patch) | |
| tree | 5e82555fd3c5bf1e0484e9c6149c192b19708023 /src | |
| parent | 771459c68c26970784f3beea5398d3e21bb8286a (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.h | 1 | ||||
| -rw-r--r-- | src/kernel/KernelKit/UserProcessScheduler.inl | 16 | ||||
| -rw-r--r-- | src/kernel/KernelKit/ZXD.h | 8 | ||||
| -rw-r--r-- | src/kernel/StorageKit/SCSI.h | 21 | ||||
| -rw-r--r-- | src/kernel/src/Storage/AHCIDeviceInterface.cc | 2 | ||||
| -rw-r--r-- | src/kernel/src/Storage/NVMEDeviceInterface.cc | 11 | ||||
| -rw-r--r-- | src/kernel/src/Storage/SCSIDeviceInterface.cc | 15 | ||||
| -rw-r--r-- | src/libDDK/DriverKit/c++/checksum.h | 10 | ||||
| -rw-r--r-- | src/libDDK/DriverKit/c++/ddk.h | 13 | ||||
| -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.h | 3 |
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); |
