diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 23:31:58 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 23:31:58 +0200 |
| commit | 6551964ad66de7bc7ccb636c54351be2a260612b (patch) | |
| tree | 4b8adea356562f7e4365cd24b64f7cac1559da2e /dev/kernel | |
| parent | e2bd3c7b6fcd6147fcbf699be087a475608ffdf7 (diff) | |
feat(kernel/libSystem): Lots of improvements, see below.
what:
- Reworked NetworkDevice.
- Reworked RTL8139 driver.
- Don't assert fCleanup on NetworkDevice destructor.
- Add new Ref types in libSystem.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/FSKit/HeFS.h | 2 | ||||
| -rw-r--r-- | dev/kernel/FirmwareKit/Handover.h | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc | 26 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/UserMgr.h (renamed from dev/kernel/KernelKit/User.h) | 0 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/UserProcessScheduler.h | 2 | ||||
| -rw-r--r-- | dev/kernel/NetworkKit/NetworkDevice.h | 5 | ||||
| -rw-r--r-- | dev/kernel/NetworkKit/NetworkDevice.inl | 6 | ||||
| -rw-r--r-- | dev/kernel/kernel_rsrc.rsrc | 4 | ||||
| -rw-r--r-- | dev/kernel/src/FS/Ext2+FileSystemParser.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/FS/HeFS+FileSystemParser.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/FS/NeFS+FileSystemParser.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/Network/NetworkDevice.cc | 6 | ||||
| -rw-r--r-- | dev/kernel/src/UserMgr.cc (renamed from dev/kernel/src/User.cc) | 2 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 1 |
14 files changed, 42 insertions, 20 deletions
diff --git a/dev/kernel/FSKit/HeFS.h b/dev/kernel/FSKit/HeFS.h index 17a174e3..08452a2b 100644 --- a/dev/kernel/FSKit/HeFS.h +++ b/dev/kernel/FSKit/HeFS.h @@ -8,7 +8,7 @@ #include <CompilerKit/CompilerKit.h>
#include <KernelKit/DriveMgr.h>
-#include <KernelKit/User.h>
+#include <KernelKit/UserMgr.h>
#include <NeKit/Crc32.h>
#include <NeKit/Defines.h>
#include <NeKit/KString.h>
diff --git a/dev/kernel/FirmwareKit/Handover.h b/dev/kernel/FirmwareKit/Handover.h index 266953d3..d74194ed 100644 --- a/dev/kernel/FirmwareKit/Handover.h +++ b/dev/kernel/FirmwareKit/Handover.h @@ -61,7 +61,7 @@ struct BootInfoHeader final { VoidPtr f_KernelImage; SizeT f_KernelSz; - + VoidPtr f_LibSystemImage; SizeT f_LibSystemSz; diff --git a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc index 57f64712..38c12fee 100644 --- a/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc +++ b/dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc @@ -21,6 +21,10 @@ STATIC BOOL kTXEnabled = NO; STATIC UInt8* kRXUpperLayer = nullptr; STATIC UInt8* kRxBuffer = nullptr; +/***********************************************************************************/ +///@brief RTL8139 Init routine. +/***********************************************************************************/ + EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { if (kTXEnabled) return; @@ -42,7 +46,10 @@ EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { if (timeout > 0x1000) break; } - MUST_PASS(timeout <= 0x1000); + if (timeout <= 0x1000) { + ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "RTL8139: Reset failed"); + return; + } rt_out32(io_base + 0x30, (UInt32) (UIntPtr) kRxBuffer); @@ -50,12 +57,16 @@ EXTERN_C Void rtl_init_nic_rtl8139(UInt16 io_base) noexcept { rt_out32(io_base + 0x44, 0xf | (1 << 7)); - // Enable IRQ. rt_out16(io_base + 0x3C, 0x0005); kTXEnabled = YES; } +/***********************************************************************************/ +/// @brief RTL8139 I/O interrupt handler. +/// @note This function is called when the device interrupts to retrieve network data. +/***********************************************************************************/ + EXTERN_C void rtl_rtl8139_interrupt_handler() { if (kIOBase == 0xFFFF) return; @@ -78,4 +89,15 @@ EXTERN_C void rtl_rtl8139_interrupt_handler() { if (!(status & 0x04)) { err_global_get() = kErrorNoNetwork; } +} + +/***********************************************************************************/ +/// @brief RTL8139 get upper layer function +/// @return the upper layer. +/// @retval nullptr if no upper layer is set. +/// @retval pointer to the upper layer if set. +/***********************************************************************************/ + +EXTERN_C UInt8* rtl_rtl8139_get_upper_layer() { + return kRXUpperLayer; }
\ No newline at end of file diff --git a/dev/kernel/KernelKit/User.h b/dev/kernel/KernelKit/UserMgr.h index b7e7ac1d..b7e7ac1d 100644 --- a/dev/kernel/KernelKit/User.h +++ b/dev/kernel/KernelKit/UserMgr.h diff --git a/dev/kernel/KernelKit/UserProcessScheduler.h b/dev/kernel/KernelKit/UserProcessScheduler.h index 1815a558..14986ab6 100644 --- a/dev/kernel/KernelKit/UserProcessScheduler.h +++ b/dev/kernel/KernelKit/UserProcessScheduler.h @@ -14,7 +14,7 @@ #include <ArchKit/ArchKit.h> #include <KernelKit/CoreProcessScheduler.h> #include <KernelKit/LockDelegate.h> -#include <KernelKit/User.h> +#include <KernelKit/UserMgr.h> #include <NeKit/MutableArray.h> //////////////////////////////////////////////////// diff --git a/dev/kernel/NetworkKit/NetworkDevice.h b/dev/kernel/NetworkKit/NetworkDevice.h index 7ed67bab..48fed575 100644 --- a/dev/kernel/NetworkKit/NetworkDevice.h +++ b/dev/kernel/NetworkKit/NetworkDevice.h @@ -23,7 +23,7 @@ class NetworkDevice final : public IDeviceObject<NetworkDeviceCommand> { public: NetworkDevice(void (*out)(IDeviceObject<NetworkDeviceCommand>*, NetworkDeviceCommand), void (*in)(IDeviceObject<NetworkDeviceCommand>*, NetworkDeviceCommand), - void (*onCleanup)(void) = nullptr); + void (*cleanup)(void) = nullptr); ~NetworkDevice() override; @@ -36,10 +36,9 @@ class NetworkDevice final : public IDeviceObject<NetworkDeviceCommand> { Boolean Name(const Char* newStr); private: - static constexpr auto cNetworkNameLen = 512; + static constexpr auto kNetworkNameLen = 512; Void (*fCleanup)(void); - Char fNetworkName[cNetworkNameLen]; }; struct NetworkDeviceCommand final { diff --git a/dev/kernel/NetworkKit/NetworkDevice.inl b/dev/kernel/NetworkKit/NetworkDevice.inl index 812c0248..84ec9edc 100644 --- a/dev/kernel/NetworkKit/NetworkDevice.inl +++ b/dev/kernel/NetworkKit/NetworkDevice.inl @@ -8,6 +8,10 @@ Dtor and ctors. */ +#ifndef __INC_NETWORK_DEVICE_H__ +#include <NetworkKit/NetworkDevice.h> +#endif // __INC_NETWORK_DEVICE_H__ + namespace Kernel { inline NetworkDevice::NetworkDevice(void (*out)(IDeviceObject<NetworkDeviceCommand>*, NetworkDeviceCommand), @@ -21,8 +25,6 @@ inline NetworkDevice::NetworkDevice(void (*out)(IDeviceObject<NetworkDeviceComma } inline NetworkDevice::~NetworkDevice() { - MUST_PASS(fCleanup); - kout << "NetworkDevice cleanup.\r"; if (fCleanup) fCleanup(); diff --git a/dev/kernel/kernel_rsrc.rsrc b/dev/kernel/kernel_rsrc.rsrc index b7a11036..8d0093e4 100644 --- a/dev/kernel/kernel_rsrc.rsrc +++ b/dev/kernel/kernel_rsrc.rsrc @@ -11,8 +11,8 @@ BEGIN VALUE "CompanyName", "Amlal El Mahrouss" VALUE "FileDescription", "NeKernel" VALUE "FileVersion", KERNEL_VERSION - VALUE "InternalName", "neoskrnl" - VALUE "LegalCopyright", "(c) 2024-2025 Amlal El Mahrouss, all rights reserved" + VALUE "InternalName", "krnl" + VALUE "LegalCopyright", "(c) 2024-2025 Amlal El Mahrouss, all rights reserved." VALUE "OriginalFilename", "krnl.efi" VALUE "ProductName", "NeKernel" VALUE "ProductVersion", KERNEL_VERSION diff --git a/dev/kernel/src/FS/Ext2+FileSystemParser.cc b/dev/kernel/src/FS/Ext2+FileSystemParser.cc index a3acac73..80449ed9 100644 --- a/dev/kernel/src/FS/Ext2+FileSystemParser.cc +++ b/dev/kernel/src/FS/Ext2+FileSystemParser.cc @@ -10,7 +10,7 @@ #include <FirmwareKit/EPM.h> #include <KernelKit/KPC.h> #include <KernelKit/ProcessScheduler.h> -#include <KernelKit/User.h> +#include <KernelKit/UserMgr.h> #include <NeKit/Crc32.h> #include <NeKit/KString.h> #include <NeKit/KernelPanic.h> diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc index 155c9b9f..a18abaf8 100644 --- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc @@ -11,7 +11,7 @@ #include <FirmwareKit/GPT.h> #include <KernelKit/KPC.h> #include <KernelKit/ProcessScheduler.h> -#include <KernelKit/User.h> +#include <KernelKit/UserMgr.h> #include <NeKit/Crc32.h> #include <NeKit/KString.h> #include <NeKit/KernelPanic.h> diff --git a/dev/kernel/src/FS/NeFS+FileSystemParser.cc b/dev/kernel/src/FS/NeFS+FileSystemParser.cc index f1746a58..97b2ff36 100644 --- a/dev/kernel/src/FS/NeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/NeFS+FileSystemParser.cc @@ -12,7 +12,7 @@ #include <KernelKit/DriveMgr.h> #include <KernelKit/KPC.h> #include <KernelKit/ProcessScheduler.h> -#include <KernelKit/User.h> +#include <KernelKit/UserMgr.h> #include <NeKit/Crc32.h> #include <NeKit/KString.h> #include <NeKit/KernelPanic.h> diff --git a/dev/kernel/src/Network/NetworkDevice.cc b/dev/kernel/src/Network/NetworkDevice.cc index 51c43b48..02cb0e73 100644 --- a/dev/kernel/src/Network/NetworkDevice.cc +++ b/dev/kernel/src/Network/NetworkDevice.cc @@ -11,7 +11,7 @@ namespace Kernel { /// \brief Getter for fNetworkName. /// \return Network device name. const Char* NetworkDevice::Name() const { - return this->fNetworkName; + return "/devices/net{}"; } /// \brief Setter for fNetworkName. @@ -20,9 +20,9 @@ Boolean NetworkDevice::Name(const Char* name) { if (*name == 0) return NO; - if (rt_string_len(name) > cNetworkNameLen) return NO; + if (rt_string_len(name) > kNetworkNameLen) return NO; - rt_copy_memory((VoidPtr) name, (VoidPtr) this->fNetworkName, rt_string_len(name)); + rt_copy_memory((VoidPtr) name, (VoidPtr) this->Name(), rt_string_len(this->Name())); return YES; } diff --git a/dev/kernel/src/User.cc b/dev/kernel/src/UserMgr.cc index 1859be12..c41b445b 100644 --- a/dev/kernel/src/User.cc +++ b/dev/kernel/src/UserMgr.cc @@ -13,7 +13,7 @@ #include <KernelKit/FileMgr.h> #include <KernelKit/HeapMgr.h> #include <KernelKit/KPC.h> -#include <KernelKit/User.h> +#include <KernelKit/UserMgr.h> #include <NeKit/KernelPanic.h> #define kStdUserType (0xEE) diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 5996adca..77421f5f 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -21,7 +21,6 @@ #include <KernelKit/ProcessScheduler.h> #include <NeKit/KString.h> #include <SignalKit/Signals.h> -#include "NeKit/Macros.h" ///! BUGS: 0 |
