From 67a14f5c12510e277911cbcf8ea5ce01f8b8fbb1 Mon Sep 17 00:00:00 2001 From: amlal Date: Thu, 13 Jun 2024 22:02:27 +0200 Subject: MHR-31: Detect all types of cores except the boot one. Signed-off-by: amlal --- Kernel/NetworkKit/IPCEP.hxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Kernel/NetworkKit') diff --git a/Kernel/NetworkKit/IPCEP.hxx b/Kernel/NetworkKit/IPCEP.hxx index a00fa98e..72efae73 100644 --- a/Kernel/NetworkKit/IPCEP.hxx +++ b/Kernel/NetworkKit/IPCEP.hxx @@ -50,8 +50,8 @@ namespace NewOS IPCEPAddressType IpcFrom; IPCEPAddressType IpcTo; UInt32 IpcCRC32; - UInt32 IpcMsg; - UInt32 IpcMsgSz; + UInt32 IpcMsg; + UInt32 IpcMsgSz; } PACKED IPCEPConnectionHeader; } // namespace NewOS -- cgit v1.2.3 From c4cbc986ac68dbfdc743efec58c72ebb74d3f3b0 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sun, 16 Jun 2024 18:05:36 +0200 Subject: MHR-31: Start work on drivers for ARM64. Signed-off-by: Amlal EL Mahrouss --- Drv/GSMDrv/CheckStck.c | 11 ++++++++ Drv/GSMDrv/DriverRsrc.rsrc | 25 +++++++++++++++++ Drv/GSMDrv/GSMDrv.c | 23 ++++++++++++++++ Drv/GSMDrv/x86_64.make | 51 +++++++++++++++++++++++++++++++++++ Drv/VideoDrv/CheckStck.c | 11 ++++++++ Drv/VideoDrv/DriverRsrc.rsrc | 25 +++++++++++++++++ Drv/VideoDrv/VideoDrv.c | 22 +++++++++++++++ Drv/VideoDrv/x86_64.make | 51 +++++++++++++++++++++++++++++++++++ Kernel/Builtins/GPRS/.keepme | 0 Kernel/Builtins/GSM/.keepme | 0 Kernel/Builtins/GSM/IO.hxx | 29 ++++++++++++++++++++ Kernel/KernelKit/ProcessScheduler.hxx | 6 ++--- Kernel/NetworkKit/GSM.hxx | 2 +- Kernel/NetworkKit/NetworkDevice.hpp | 8 ++++++ 14 files changed, 260 insertions(+), 4 deletions(-) create mode 100644 Drv/GSMDrv/CheckStck.c create mode 100644 Drv/GSMDrv/DriverRsrc.rsrc create mode 100644 Drv/GSMDrv/GSMDrv.c create mode 100644 Drv/GSMDrv/x86_64.make create mode 100644 Drv/VideoDrv/CheckStck.c create mode 100644 Drv/VideoDrv/DriverRsrc.rsrc create mode 100644 Drv/VideoDrv/VideoDrv.c create mode 100644 Drv/VideoDrv/x86_64.make create mode 100644 Kernel/Builtins/GPRS/.keepme create mode 100644 Kernel/Builtins/GSM/.keepme create mode 100644 Kernel/Builtins/GSM/IO.hxx (limited to 'Kernel/NetworkKit') diff --git a/Drv/GSMDrv/CheckStck.c b/Drv/GSMDrv/CheckStck.c new file mode 100644 index 00000000..3eb157ba --- /dev/null +++ b/Drv/GSMDrv/CheckStck.c @@ -0,0 +1,11 @@ +/* ------------------------------------------- + + Copyright Zeta Electronics Corporation + +------------------------------------------- */ + +///! @brief Use this to check your stack, if using MinGW/MSVC/CodeTools. +void ___chkstk_ms(void) +{ + (void)0; +} diff --git a/Drv/GSMDrv/DriverRsrc.rsrc b/Drv/GSMDrv/DriverRsrc.rsrc new file mode 100644 index 00000000..f8e9c05f --- /dev/null +++ b/Drv/GSMDrv/DriverRsrc.rsrc @@ -0,0 +1,25 @@ +1 ICON "../../Icons/driver-logo.ico" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "Zeta Electronics Corporation" + VALUE "FileDescription", "New OS driver." + VALUE "FileVersion", "1.00" + VALUE "InternalName", "SampleDriver" + VALUE "LegalCopyright", "Copyright Zeta Electronics Corporation, all rights reserved." + VALUE "OriginalFilename", "SampleDriver.exe" + VALUE "ProductName", "SampleDriver" + VALUE "ProductVersion", "1.00" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END diff --git a/Drv/GSMDrv/GSMDrv.c b/Drv/GSMDrv/GSMDrv.c new file mode 100644 index 00000000..791c0678 --- /dev/null +++ b/Drv/GSMDrv/GSMDrv.c @@ -0,0 +1,23 @@ +/* ------------------------------------------- + + Copyright Zeta Electronics Corporation + +------------------------------------------- */ + +#include +#include + +int __ImageStart(void) +{ + kernelPrintStr("GSMDrv: Starting up...\r"); + + /// @brief activate SIM 0..n + + return 0; +} + +int __ImageEnd(void) +{ + kernelPrintStr("GSMDrv: Shutting down...\r"); + return 0; +} diff --git a/Drv/GSMDrv/x86_64.make b/Drv/GSMDrv/x86_64.make new file mode 100644 index 00000000..a47c40ae --- /dev/null +++ b/Drv/GSMDrv/x86_64.make @@ -0,0 +1,51 @@ +################################################## +# (C) Zeta Electronics Corporation, all rights reserved. +# This is the sample driver makefile. +################################################## + +CC_GNU=x86_64-w64-mingw32-gcc +LD_GNU=x86_64-w64-mingw32-ld + +WINDRES=x86_64-w64-mingw32-windres + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +LD_FLAGS=-e __ImageStart --subsystem=17 + +OBJ=*.o + + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -std=c17 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./ + +.PHONY: invalid-recipe +invalid-recipe: + @echo "invalid-recipe: Use make all instead." + +.PHONY: all +all: compile-amd64 + $(LD_GNU) $(OBJ) $(LD_FLAGS) -o GSMDrv.exe + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o + $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DDK/*.c) $(wildcard ../../DDK/*.S) + +.PHONY: clean +clean: + $(REM) $(REM_FLAG) $(OBJ) GSMDrv.exe + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "clean: Clean driver." + @echo "compile-amd64: Build driver." diff --git a/Drv/VideoDrv/CheckStck.c b/Drv/VideoDrv/CheckStck.c new file mode 100644 index 00000000..3eb157ba --- /dev/null +++ b/Drv/VideoDrv/CheckStck.c @@ -0,0 +1,11 @@ +/* ------------------------------------------- + + Copyright Zeta Electronics Corporation + +------------------------------------------- */ + +///! @brief Use this to check your stack, if using MinGW/MSVC/CodeTools. +void ___chkstk_ms(void) +{ + (void)0; +} diff --git a/Drv/VideoDrv/DriverRsrc.rsrc b/Drv/VideoDrv/DriverRsrc.rsrc new file mode 100644 index 00000000..f8e9c05f --- /dev/null +++ b/Drv/VideoDrv/DriverRsrc.rsrc @@ -0,0 +1,25 @@ +1 ICON "../../Icons/driver-logo.ico" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "Zeta Electronics Corporation" + VALUE "FileDescription", "New OS driver." + VALUE "FileVersion", "1.00" + VALUE "InternalName", "SampleDriver" + VALUE "LegalCopyright", "Copyright Zeta Electronics Corporation, all rights reserved." + VALUE "OriginalFilename", "SampleDriver.exe" + VALUE "ProductName", "SampleDriver" + VALUE "ProductVersion", "1.00" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END diff --git a/Drv/VideoDrv/VideoDrv.c b/Drv/VideoDrv/VideoDrv.c new file mode 100644 index 00000000..3ba104d6 --- /dev/null +++ b/Drv/VideoDrv/VideoDrv.c @@ -0,0 +1,22 @@ +/* ------------------------------------------- + + Copyright Zeta Electronics Corporation + +------------------------------------------- */ + +#include +#include + +#include + +int __ImageStart(void) +{ + kernelPrintStr("VideoDrv: Starting up...\r"); + return 0; +} + +int __ImageEnd(void) +{ + kernelPrintStr("VideoDrv: Shutting down...\r"); + return 0; +} diff --git a/Drv/VideoDrv/x86_64.make b/Drv/VideoDrv/x86_64.make new file mode 100644 index 00000000..8ec42277 --- /dev/null +++ b/Drv/VideoDrv/x86_64.make @@ -0,0 +1,51 @@ +################################################## +# (C) Zeta Electronics Corporation, all rights reserved. +# This is the sample driver makefile. +################################################## + +CC_GNU=x86_64-w64-mingw32-gcc +LD_GNU=x86_64-w64-mingw32-ld + +WINDRES=x86_64-w64-mingw32-windres + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +LD_FLAGS=-e __ImageStart --subsystem=17 + +OBJ=*.o + + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -std=c17 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./ + +.PHONY: invalid-recipe +invalid-recipe: + @echo "invalid-recipe: Use make all instead." + +.PHONY: all +all: compile-amd64 + $(LD_GNU) $(OBJ) $(LD_FLAGS) -o VideoDrv.exe + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o + $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DDK/*.c) $(wildcard ../../DDK/*.S) + +.PHONY: clean +clean: + $(REM) $(REM_FLAG) $(OBJ) VideoDrv.exe + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "clean: Clean driver." + @echo "compile-amd64: Build driver." diff --git a/Kernel/Builtins/GPRS/.keepme b/Kernel/Builtins/GPRS/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/Kernel/Builtins/GSM/.keepme b/Kernel/Builtins/GSM/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/Kernel/Builtins/GSM/IO.hxx b/Kernel/Builtins/GSM/IO.hxx new file mode 100644 index 00000000..39de1a0f --- /dev/null +++ b/Kernel/Builtins/GSM/IO.hxx @@ -0,0 +1,29 @@ +/* ------------------------------------------- + +Copyright Zeta Electronics Corporation. + +File: GSM\IO.hxx. +Purpose: GSM I/O. + +------------------------------------------- */ + +#ifndef _INC_NETWORK_GSM_IO_HXX_ +#define _INC_NETWORK_GSM_IO_HXX_ + +#include +#include + +/// @brief GSM I/O routines. + +/// @brief Turn on SIM slot. +NewOS::Boolean gsm_turn_on_slot(NewOS::Int32 slot); + +/// @brief Turn off SIM slot. +NewOS::Boolean gsm_turn_off_slot(NewOS::Int32 slot); + +/// @brief Send AT command. +NewOS::Boolean gsm_send_at_command(NewOS::Char* buf, + NewOS::Size bufSz); + + +#endif // ifndef _INC_NETWORK_GSM_IO_HXX_ diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index f49292f1..7c8f99be 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef __PROCESS_SCHEDULER__ -#define __PROCESS_SCHEDULER__ +#ifndef _INC_PROCESS_SCHEDULER_HXX_ +#define _INC_PROCESS_SCHEDULER_HXX_ #include #include @@ -283,4 +283,4 @@ namespace NewOS //////////////////////////////////////////////////// -#endif /* ifndef __PROCESS_SCHEDULER__ */ +#endif /* ifndef _INC_PROCESS_SCHEDULER_HXX_ */ diff --git a/Kernel/NetworkKit/GSM.hxx b/Kernel/NetworkKit/GSM.hxx index 9a785344..f4b040b3 100644 --- a/Kernel/NetworkKit/GSM.hxx +++ b/Kernel/NetworkKit/GSM.hxx @@ -3,7 +3,7 @@ Copyright Zeta Electronics Corporation. File: GSM.hxx. - Purpose: GSM protocol. + Purpose: GSM protocol classes. ------------------------------------------- */ diff --git a/Kernel/NetworkKit/NetworkDevice.hpp b/Kernel/NetworkKit/NetworkDevice.hpp index 49b142d5..58b9a98b 100644 --- a/Kernel/NetworkKit/NetworkDevice.hpp +++ b/Kernel/NetworkKit/NetworkDevice.hpp @@ -10,6 +10,8 @@ #include #include +/// @note Can either work with: Ethernet, GPRS, WiFi + namespace NewOS { struct NetworkDeviceCommand; @@ -58,6 +60,12 @@ namespace NewOS /// @brief IPCEP device. using IPCEPNetworkDevice = NetworkDevice; + + /// @brief GRPS device. + using GPRSNetworkDevice = NetworkDevice; + + /// @brief GSM device. + using GSMNetworkDevice = NetworkDevice; } // namespace NewOS #include -- cgit v1.2.3 From e8f7e653364e4a2d48529c07b8325a8f147cf3e9 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Mon, 17 Jun 2024 15:31:00 +0200 Subject: MHR-31: Will add 'Profiles' for phone/laptop models. Signed-off-by: Amlal EL Mahrouss --- Kernel/NetworkKit/NetworkDevice.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Kernel/NetworkKit') diff --git a/Kernel/NetworkKit/NetworkDevice.hpp b/Kernel/NetworkKit/NetworkDevice.hpp index 58b9a98b..20c2a66a 100644 --- a/Kernel/NetworkKit/NetworkDevice.hpp +++ b/Kernel/NetworkKit/NetworkDevice.hpp @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef __NETWORK_DEVICE__ -#define __NETWORK_DEVICE__ +#ifndef __INC_NETWORK_DEVICE_HPP__ +#define __INC_NETWORK_DEVICE_HPP__ #include #include @@ -70,4 +70,4 @@ namespace NewOS #include -#endif // !__NETWORK_DEVICE__ +#endif // !__INC_NETWORK_DEVICE_HPP__ -- cgit v1.2.3 From 8051ad2bd4af1f226a9751288957ee6af7e787d7 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Mon, 17 Jun 2024 18:55:38 +0200 Subject: MHR-31: IMP: Add setter for Name. Signed-off-by: Amlal EL Mahrouss --- Drv/GSMDrv/GSMDrv.c | 6 ++++-- Drv/VideoDrv/VideoDrv.c | 4 ++-- Kernel/NetworkKit/NetworkDevice.hpp | 9 +++++++-- Kernel/Sources/Network/NetworkDevice.cxx | 20 +++++++++++++++++++- 4 files changed, 32 insertions(+), 7 deletions(-) (limited to 'Kernel/NetworkKit') diff --git a/Drv/GSMDrv/GSMDrv.c b/Drv/GSMDrv/GSMDrv.c index 791c0678..1b7cfed6 100644 --- a/Drv/GSMDrv/GSMDrv.c +++ b/Drv/GSMDrv/GSMDrv.c @@ -7,7 +7,8 @@ #include #include -int __ImageStart(void) +/// @brief GSM entrypoint. +int __at_enter(void) { kernelPrintStr("GSMDrv: Starting up...\r"); @@ -16,7 +17,8 @@ int __ImageStart(void) return 0; } -int __ImageEnd(void) +/// @brief GSM 'atexit' function. +int __at_exit(void) { kernelPrintStr("GSMDrv: Shutting down...\r"); return 0; diff --git a/Drv/VideoDrv/VideoDrv.c b/Drv/VideoDrv/VideoDrv.c index 3ba104d6..fc79d2a0 100644 --- a/Drv/VideoDrv/VideoDrv.c +++ b/Drv/VideoDrv/VideoDrv.c @@ -9,13 +9,13 @@ #include -int __ImageStart(void) +int __at_enter(void) { kernelPrintStr("VideoDrv: Starting up...\r"); return 0; } -int __ImageEnd(void) +int __at_exit(void) { kernelPrintStr("VideoDrv: Shutting down...\r"); return 0; diff --git a/Kernel/NetworkKit/NetworkDevice.hpp b/Kernel/NetworkKit/NetworkDevice.hpp index 20c2a66a..4ea98e4f 100644 --- a/Kernel/NetworkKit/NetworkDevice.hpp +++ b/Kernel/NetworkKit/NetworkDevice.hpp @@ -35,12 +35,17 @@ namespace NewOS public: const char* Name() const override; + Boolean Name(const char* strView); private: - void (*fCleanup)(void); + constexpr auto cNetworkNameLen = 512; + + Void (*fCleanup)(void); + Char fNetworkName[cNetworkNameLen]; + }; - struct PACKED NetworkDeviceCommand final + struct NetworkDeviceCommand final { UInt32 CommandName; UInt32 CommandType; diff --git a/Kernel/Sources/Network/NetworkDevice.cxx b/Kernel/Sources/Network/NetworkDevice.cxx index 511246c7..e1994baa 100644 --- a/Kernel/Sources/Network/NetworkDevice.cxx +++ b/Kernel/Sources/Network/NetworkDevice.cxx @@ -8,8 +8,26 @@ namespace NewOS { + /// \brief Getter for fNetworkName. const char* NetworkDevice::Name() const { - return "NetworkDevice"; + return this->fNetworkName; + } + + /// \brief Setter for fNetworkName. + Boolean NetworkDevice::Name(const char* strView) + { + if (strView == nullptr) + return false; + + if (*strView == 0) + return false; + + if (rt_string_len(strView) > cNetworkNameLen) + return false; + + rt_copy_memory(strView, this->fNetworkName, rt_string_len(strView)); + + return true; } } // namespace NewOS -- cgit v1.2.3 From 596268586bb4c8248a8ec106b8cdea12b9ab926a Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Tue, 18 Jun 2024 10:39:00 +0200 Subject: IMP: TLS syscall, serial write syscall. FIX: SMP manager writes to stack frame directly, check if we also want to free the stack. Signed-off-by: Amlal EL Mahrouss --- .../HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp | 20 +++++----- .../HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 2 +- Kernel/HALKit/AMD64/HalKernelMain.cxx | 14 +++++-- Kernel/KernelKit/ProcessScheduler.hxx | 4 +- Kernel/KernelKit/ThreadLocalStorage.hxx | 6 ++- Kernel/KernelKit/ThreadLocalStorage.inl | 8 ++-- Kernel/NetworkKit/NetworkDevice.hpp | 2 +- Kernel/Sources/KeMain.cxx | 10 ++--- Kernel/Sources/Network/NetworkDevice.cxx | 4 +- Kernel/Sources/PEFSharedObject.cxx | 10 ++--- Kernel/Sources/ProcessScheduler.cxx | 12 +++--- Kernel/Sources/SMPManager.cxx | 44 +++++++++------------- Kernel/Sources/ThreadLocalStorage.cxx | 8 ++-- Kernel/Sources/UserHeap.cxx | 2 +- 14 files changed, 74 insertions(+), 72 deletions(-) (limited to 'Kernel/NetworkKit') diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp index e9c0941c..657ab622 100644 --- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp +++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp @@ -14,9 +14,9 @@ EXTERN_C void idt_handle_gpf(NewOS::UIntPtr rsp) { NewOS::kcout << "newoskrnl: General Protection Fault, caused by " - << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName(); + << NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName(); - NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } /// @brief Handle page fault. @@ -25,9 +25,9 @@ EXTERN_C void idt_handle_pf(NewOS::UIntPtr rsp) { NewOS::kcout << "newoskrnl: Segmentation Fault, caused by " - << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName(); + << NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName(); - NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } /// @brief Handle math fault. @@ -36,9 +36,9 @@ EXTERN_C void idt_handle_math(NewOS::UIntPtr rsp) { NewOS::kcout << "newoskrnl: Math error, caused by " - << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName(); + << NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName(); - NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } /// @brief Handle any generic fault. @@ -47,9 +47,9 @@ EXTERN_C void idt_handle_generic(NewOS::UIntPtr rsp) { NewOS::kcout << "newoskrnl: Execution error, caused by " - << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName(); + << NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName(); - NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } /// @brief Handle #UD fault. @@ -58,9 +58,9 @@ EXTERN_C void idt_handle_ud(NewOS::UIntPtr rsp) { NewOS::kcout << "newoskrnl: Invalid interrupt, caused by " - << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName(); + << NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName(); - NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } /// @brief Enter syscall from assembly. diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp index 26773640..4e9d2ff6 100644 --- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp +++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp @@ -185,7 +185,7 @@ namespace NewOS::HAL { Semaphore sem; - sem.LockOrWait(&ProcessScheduler::The().Leak().GetCurrent().Leak(), Seconds(5)); + sem.LockOrWait(&ProcessScheduler::The().Leak().TheCurrent().Leak(), Seconds(5)); cFramePtr = stackFrame; diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index cafa6388..3fac40ca 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -76,14 +76,20 @@ EXTERN_C void hal_init_platform( /* install basic hooks. */ - constexpr auto cDummyInterrupt = 0x10; // 16 + constexpr auto cSerialWriteInterrupt = 0x10; // 16 + constexpr auto cTlsInterrupt = 0x11; // 17 - kSyscalls[cDummyInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr sf) -> void { - const char* msg = (const char*)sf; + kSyscalls[cSerialWriteInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx) -> void { + const char* msg = (const char*)rdx; NewOS::kcout << "newoskrnl: " << msg << "\r"; }; - kSyscalls[cDummyInterrupt].Leak().Leak()->fHooked = true; + kSyscalls[cTlsInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { + tls_check_syscall_impl(rdx); + }; + + kSyscalls[cSerialWriteInterrupt].Leak().Leak()->fHooked = true; + kSyscalls[cTlsInterrupt].Leak().Leak()->fHooked = true; NewOS::HAL::Detail::_ke_power_on_self_test(); diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index 7c8f99be..8c470bb4 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -249,7 +249,7 @@ namespace NewOS bool Remove(SizeT headerIndex); public: - Ref& GetCurrent(); + Ref& TheCurrent(); SizeT Run() noexcept; public: @@ -268,7 +268,7 @@ namespace NewOS public: static bool Switch(HAL::StackFrame* newStack, const PID& newPid); static bool CanBeScheduled(Ref& process); - static PID& GetCurrentPID(); + static PID& TheCurrentPID(); static SizeT StartScheduling(); }; diff --git a/Kernel/KernelKit/ThreadLocalStorage.hxx b/Kernel/KernelKit/ThreadLocalStorage.hxx index eaae7991..432cc9ac 100644 --- a/Kernel/KernelKit/ThreadLocalStorage.hxx +++ b/Kernel/KernelKit/ThreadLocalStorage.hxx @@ -37,14 +37,16 @@ struct PACKED ThreadInformationBlock final NewOS::Int32 ThreadID; // Thread execution ID. }; +typedef struct ThreadInformationBlock ProcessInformationBlock; + /// @brief TLS install TIB and PIB. -EXTERN_C void rt_install_tib(ThreadInformationBlock* TIB, NewOS::VoidPtr PIB); +EXTERN_C void rt_install_tib(ThreadInformationBlock* TIB, ThreadInformationBlock* PIB); ///! @brief Cookie Sanity check. NewOS::Boolean tls_check_tib(ThreadInformationBlock* Ptr); /// @brief TLS check system call -EXTERN_C NewOS::Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr StackPtr) noexcept; +EXTERN_C NewOS::Void tls_check_syscall_impl(NewOS::VoidPtr TIB) noexcept; #include diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl index 1df825a3..6dbff3a1 100644 --- a/Kernel/KernelKit/ThreadLocalStorage.inl +++ b/Kernel/KernelKit/ThreadLocalStorage.inl @@ -15,9 +15,9 @@ inline T* tls_new_ptr(void) { using namespace NewOS; - MUST_PASS(ProcessScheduler::The().Leak().GetCurrent()); + MUST_PASS(ProcessScheduler::The().Leak().TheCurrent()); - auto ref_process = ProcessScheduler::The().Leak().GetCurrent(); + auto ref_process = ProcessScheduler::The().Leak().TheCurrent(); T* pointer = (T*)ref_process.Leak().New(sizeof(T)); return pointer; @@ -32,9 +32,9 @@ inline bool tls_delete_ptr(T* ptr) using namespace NewOS; - MUST_PASS(ProcessScheduler::The().Leak().GetCurrent()); + MUST_PASS(ProcessScheduler::The().Leak().TheCurrent()); - auto ref_process = ProcessScheduler::The().Leak().GetCurrent(); + auto ref_process = ProcessScheduler::The().Leak().TheCurrent(); return ref_process.Leak().Delete(ptr, sizeof(T)); } diff --git a/Kernel/NetworkKit/NetworkDevice.hpp b/Kernel/NetworkKit/NetworkDevice.hpp index 4ea98e4f..9b251c2e 100644 --- a/Kernel/NetworkKit/NetworkDevice.hpp +++ b/Kernel/NetworkKit/NetworkDevice.hpp @@ -38,7 +38,7 @@ namespace NewOS Boolean Name(const char* strView); private: - constexpr auto cNetworkNameLen = 512; + static constexpr auto cNetworkNameLen = 512; Void (*fCleanup)(void); Char fNetworkName[cNetworkNameLen]; diff --git a/Kernel/Sources/KeMain.cxx b/Kernel/Sources/KeMain.cxx index 83702d77..fb127271 100644 --- a/Kernel/Sources/KeMain.cxx +++ b/Kernel/Sources/KeMain.cxx @@ -28,13 +28,13 @@ namespace NewOS::Detail { /// @brief Filesystem auto mounter, additional checks are also done by the /// class. - class FilesystemWizard final + class FilesystemInstaller final { NewOS::NewFilesystemManager* fNewFS{nullptr}; public: /// @brief wizard constructor. - explicit FilesystemWizard() + explicit FilesystemInstaller() { if (NewOS::FilesystemManagerInterface::GetMounted()) { @@ -166,9 +166,9 @@ namespace NewOS::Detail } } - ~FilesystemWizard() = default; + ~FilesystemInstaller() = default; - NEWOS_COPY_DEFAULT(FilesystemWizard); + NEWOS_COPY_DEFAULT(FilesystemInstaller); /// @brief Grab the disk's NewFS reference. /// @return NewFilesystemManager the filesystem interface @@ -211,7 +211,7 @@ namespace NewOS::Detail EXTERN_C NewOS::Void KeMain(NewOS::Void) { /// Now run kernel loop, until no process are running. - NewOS::Detail::FilesystemWizard wizard; // automatic filesystem creation. + NewOS::Detail::FilesystemInstaller installer; // automatic filesystem creation. NewOS::Detail::ke_launch_srv(); diff --git a/Kernel/Sources/Network/NetworkDevice.cxx b/Kernel/Sources/Network/NetworkDevice.cxx index e1994baa..027613ac 100644 --- a/Kernel/Sources/Network/NetworkDevice.cxx +++ b/Kernel/Sources/Network/NetworkDevice.cxx @@ -5,6 +5,7 @@ ------------------------------------------- */ #include +#include namespace NewOS { @@ -26,7 +27,8 @@ namespace NewOS if (rt_string_len(strView) > cNetworkNameLen) return false; - rt_copy_memory(strView, this->fNetworkName, rt_string_len(strView)); + rt_copy_memory((VoidPtr)strView, + (VoidPtr)this->fNetworkName, rt_string_len(strView)); return true; } diff --git a/Kernel/Sources/PEFSharedObject.cxx b/Kernel/Sources/PEFSharedObject.cxx index 5103e075..0d5949f1 100644 --- a/Kernel/Sources/PEFSharedObject.cxx +++ b/Kernel/Sources/PEFSharedObject.cxx @@ -41,7 +41,7 @@ EXTERN_C SharedObjectPtr rt_library_init(void) if (!library) { - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } @@ -50,17 +50,17 @@ EXTERN_C SharedObjectPtr rt_library_init(void) if (!library->Get()) { - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } library->Get()->fImageObject = - ProcessScheduler::The().Leak().GetCurrent().Leak().Image; + ProcessScheduler::The().Leak().TheCurrent().Leak().Image; if (!library->Get()->fImageObject) { - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } @@ -85,7 +85,7 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful) if (lib == nullptr) { *successful = false; - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } delete lib->Get(); diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index d232c72e..aae69386 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -161,7 +161,7 @@ namespace NewOS void ProcessHeader::Exit(Int32 exit_code) { if (this->ProcessId != - ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId) + ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId) ke_stop(RUNTIME_CHECK_PROCESS); kLastExitCode = exit_code; @@ -286,17 +286,17 @@ namespace NewOS /// @brief Gets current running process. /// @return - Ref& ProcessScheduler::GetCurrent() + Ref& ProcessScheduler::TheCurrent() { return mTeam.AsRef(); } /// @brief Current proccess id getter. /// @return Process ID integer. - PID& ProcessHelper::GetCurrentPID() + PID& ProcessHelper::TheCurrentPID() { - kcout << "ProcessHelper::GetCurrentPID: Leaking ProcessId...\r"; - return ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId; + kcout << "ProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; + return ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId; } /// @brief Check if process can be schedulded. @@ -368,7 +368,7 @@ namespace NewOS ThreadKind::kHartSystemReserved) { SMPManager::The().Leak()[index].Leak()->Busy(true); - ProcessHelper::GetCurrentPID() = new_pid; + ProcessHelper::TheCurrentPID() = new_pid; return SMPManager::The().Leak()[index].Leak()->Switch(the_stack); } diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx index 5002e880..149b1334 100644 --- a/Kernel/Sources/SMPManager.cxx +++ b/Kernel/Sources/SMPManager.cxx @@ -85,36 +85,26 @@ namespace NewOS bool HardwareThread::Switch(HAL::StackFramePtr stack) { if (!rt_check_stack(stack)) - return false; - - if (!fStack) - { - fStack = stack; - } - else { - /// Keep the arguments, switch the base pointer, stack pointer - /// fs and gs registers. - fStack->Rbp = stack->Rbp; - fStack->Rsp = stack->Rsp; - fStack->Fs = stack->Fs; - fStack->Gs = stack->Gs; - - // save global registers. - - fStack->R15 = stack->R15; - fStack->R14 = stack->R14; + /// provide 'nullptr' to free the stack frame. + if (stack == nullptr) + { + delete fStack; + fStack = nullptr; - fStack->R13 = stack->R13; - fStack->R12 = stack->R12; - fStack->R11 = stack->R11; + return true; + } - fStack->R10 = stack->R10; - fStack->R9 = stack->R9; - fStack->R8 = stack->R8; + return false; + } - fStack->Rcx = this->fID; + if (fStack) + { + delete fStack; + fStack = nullptr; } + + fStack = stack; rt_do_context_switch(fStack); @@ -146,7 +136,7 @@ namespace NewOS HAL::StackFramePtr SMPManager::Leak() noexcept { if (fThreadList[fCurrentThread].Leak() && - ProcessHelper::GetCurrentPID() == + ProcessHelper::TheCurrentPID() == fThreadList[fCurrentThread].Leak().Leak()->fPID) return fThreadList[fCurrentThread].Leak().Leak()->fStack; @@ -189,7 +179,7 @@ namespace NewOS fThreadList[idx].Leak().Leak()->Switch(fThreadList[idx].Leak().Leak()->fStack); - fThreadList[idx].Leak().Leak()->fPID = ProcessHelper::GetCurrentPID(); + fThreadList[idx].Leak().Leak()->fPID = ProcessHelper::TheCurrentPID(); fThreadList[idx].Leak().Leak()->Busy(false); diff --git a/Kernel/Sources/ThreadLocalStorage.cxx b/Kernel/Sources/ThreadLocalStorage.cxx index c292d078..4d6fec14 100644 --- a/Kernel/Sources/ThreadLocalStorage.cxx +++ b/Kernel/Sources/ThreadLocalStorage.cxx @@ -44,14 +44,16 @@ Boolean tls_check_tib(ThreadInformationBlock* tib) * @param stackPtr The call frame. * @return */ -EXTERN_C Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr stackPtr) noexcept +EXTERN_C Void tls_check_syscall_impl(NewOS::VoidPtr TIB) noexcept { - ThreadInformationBlock* tib = (ThreadInformationBlock*)stackPtr->Gs; + if (!TIB) return; + + ThreadInformationBlock* tib = (ThreadInformationBlock*)TIB; if (!tls_check_tib(tib)) { kcout << "newoskrnl: Verification failed, Crashing...\r"; - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); } kcout << "newoskrnl: Verification succeeded! Keeping on...\r"; diff --git a/Kernel/Sources/UserHeap.cxx b/Kernel/Sources/UserHeap.cxx index d1de13a6..f20e30f8 100644 --- a/Kernel/Sources/UserHeap.cxx +++ b/Kernel/Sources/UserHeap.cxx @@ -150,7 +150,7 @@ namespace NewOS { if (!poolHdr->fFree) { - ProcessScheduler::The().Leak().GetCurrent().Leak().Crash(); + ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return; } -- cgit v1.2.3 From b5ea4be45949b4592879ae35bd15cc3b35ac9ff5 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Tue, 18 Jun 2024 23:21:07 +0200 Subject: MHR-31: Fix code quality. Signed-off-by: Amlal EL Mahrouss --- Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx | 7 ++++++- Kernel/HALKit/AMD64/HalKernelMain.cxx | 6 +++--- Kernel/NetworkKit/IPCEP.hxx | 19 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) (limited to 'Kernel/NetworkKit') diff --git a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx index 057ba61b..a8d0d8d7 100644 --- a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx +++ b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx @@ -32,9 +32,14 @@ namespace NewOS /// You have to parse the MADT! - ACPIFactoryInterface::ACPIFactoryInterface(voidPtr rsdPtr) + ACPIFactoryInterface::ACPIFactoryInterface(VoidPtr rsdPtr) : fRsdp(rsdPtr), fEntries(0) { +#ifdef __DEBUG__ + kcout << "newoskrnl: ACPI: init interface.\r"; +#else + +#endif } Void ACPIFactoryInterface::Shutdown() diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 701439f1..8c4a05dc 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -106,7 +106,7 @@ EXTERN_C void hal_init_platform( kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { /// get HAC struct. - HeapAllocInfo* rdxInf = (HeapAllocInfo*)rdx; + HeapAllocInfo* rdxInf = reinterpret_cast(rdx); /// assign the fThe field with the pointer. rdxInf->fThe = NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().New(rdxInf->fTheSz); @@ -114,14 +114,14 @@ EXTERN_C void hal_init_platform( kSyscalls[cDeleteInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { /// get HAC struct. - HeapAllocInfo* rdxInf = (HeapAllocInfo*)rdx; + HeapAllocInfo* rdxInf = reinterpret_cast(rdx); /// delete ptr with sz in mind. NewOS::ProcessScheduler::The().Leak().TheCurrent().Leak().Delete(rdxInf->fThe, rdxInf->fTheSz); }; kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](NewOS::VoidPtr rdx)->void { - ProcessBlockInfo* rdxPb = (ProcessBlockInfo*)rdx; + ProcessBlockInfo* rdxPb = reinterpret_cast(rdx); /// install the process's fTIB and fPIB. rt_install_tib(rdxPb->fTIB, rdxPb->fPIB); diff --git a/Kernel/NetworkKit/IPCEP.hxx b/Kernel/NetworkKit/IPCEP.hxx index 72efae73..6c7578b3 100644 --- a/Kernel/NetworkKit/IPCEP.hxx +++ b/Kernel/NetworkKit/IPCEP.hxx @@ -27,7 +27,7 @@ namespace NewOS { /// @brief 96-bit number to represent the domain and namespace - struct PACKED IPCEPAddress + struct PACKED IPCEPAddress final { UInt32 RemoteAddress; UInt64 RemoteNamespace; @@ -41,17 +41,20 @@ namespace NewOS eIPCEPBigEndian = 1 }; - /// @brief IPCEP connection header + /// @brief IPCEP connection header, must be the same on + /// user side as well. + typedef struct IPCEPConnectionHeader { - UInt32 IpcHeader; // cRemoteHeaderMagic - UInt8 IpcEndianess; // 0 : LE, 1 : BE - SizeT IpcPacketSize; + UInt32 IpcHeader; // cRemoteHeaderMagic + UInt8 IpcEndianess; // 0 : LE, 1 : BE + SizeT IpcPacketSize; IPCEPAddressType IpcFrom; IPCEPAddressType IpcTo; - UInt32 IpcCRC32; - UInt32 IpcMsg; - UInt32 IpcMsgSz; + UInt32 IpcCRC32; + UInt32 IpcMsg; + UInt32 IpcMsgSz; + UInt8 IpcData[]; } PACKED IPCEPConnectionHeader; } // namespace NewOS -- cgit v1.2.3