summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-05-23 23:31:58 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-05-23 23:31:58 +0200
commit6551964ad66de7bc7ccb636c54351be2a260612b (patch)
tree4b8adea356562f7e4365cd24b64f7cac1559da2e
parente2bd3c7b6fcd6147fcbf699be087a475608ffdf7 (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>
-rw-r--r--dev/kernel/FSKit/HeFS.h2
-rw-r--r--dev/kernel/FirmwareKit/Handover.h2
-rw-r--r--dev/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc26
-rw-r--r--dev/kernel/KernelKit/UserMgr.h (renamed from dev/kernel/KernelKit/User.h)0
-rw-r--r--dev/kernel/KernelKit/UserProcessScheduler.h2
-rw-r--r--dev/kernel/NetworkKit/NetworkDevice.h5
-rw-r--r--dev/kernel/NetworkKit/NetworkDevice.inl6
-rw-r--r--dev/kernel/kernel_rsrc.rsrc4
-rw-r--r--dev/kernel/src/FS/Ext2+FileSystemParser.cc2
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc2
-rw-r--r--dev/kernel/src/FS/NeFS+FileSystemParser.cc2
-rw-r--r--dev/kernel/src/Network/NetworkDevice.cc6
-rw-r--r--dev/kernel/src/UserMgr.cc (renamed from dev/kernel/src/User.cc)2
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc1
-rw-r--r--dev/user/SystemCalls.h4
15 files changed, 46 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
diff --git a/dev/user/SystemCalls.h b/dev/user/SystemCalls.h
index c1b70513..d40dc127 100644
--- a/dev/user/SystemCalls.h
+++ b/dev/user/SystemCalls.h
@@ -23,6 +23,10 @@ typedef Ref FSRef;
typedef Ref DLLRef;
typedef Ref ThreadRef;
typedef Ref SocketRef;
+typedef Ref NetworkRef;
+typedef Ref MutexRef;
+typedef Ref EventRef;
+typedef Ref SemaphoreRef;
// ------------------------------------------------------------------------------------------ //
/// @brief Dynamic Loader API.