diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/kernel/FirmwareKit/NeBoot/BootNet.h | 13 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/POWER/HalApplicationProcessor.cc | 9 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/KernelTaskScheduler.h | 2 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/UserProcessScheduler.h | 6 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessTeam.cc | 1 | ||||
| -rw-r--r-- | dev/libMsg/MsgKit/Server.h | 2 |
8 files changed, 29 insertions, 9 deletions
diff --git a/dev/kernel/FirmwareKit/NeBoot/BootNet.h b/dev/kernel/FirmwareKit/NeBoot/BootNet.h index 3ed11363..ad8f07c5 100644 --- a/dev/kernel/FirmwareKit/NeBoot/BootNet.h +++ b/dev/kernel/FirmwareKit/NeBoot/BootNet.h @@ -13,20 +13,29 @@ #define kBootNetVersion (0x001) #define kBootNetNameLen (256U) +struct _BOOTNET_INTERNET_HEADER; + /// @brief Netboot Internet Header /// Consists of 4 magic characters, and a set of fields describing the current patch that's being /// sent (if m_preflight = 0) /// @note Can be used to patch ROMs too (if ImpliesProgram = 1) -typedef struct BOOTNET_INTERNET_HEADER { +typedef struct _BOOTNET_INTERNET_HEADER { Kernel::Char NB1; /// magic char 1 'O' Kernel::Char NB2; /// magic char 2 'N' Kernel::Char NB3; /// magic char 3 'E' Kernel::Char NB4; /// magic char 4 'T' + Kernel::UInt16 Version; + Kernel::Char Name[kBootNetNameLen]; /// example: Modjo + Kernel::Int32 Length; /// the patch length. Kernel::Char Target[kBootNetNameLen]; /// the target file. + Kernel::Boolean ImpliesProgram : 1; /// does it imply reprogramming? + Kernel::Boolean Preflight : 1; /// is it a preflight packet. Kernel::Char Data[1]; /// non preflight packet has a patch blob for a **PatchTarget** -} BOOTNET_INTERNET_HEADER; +} PACKED BOOTNET_INTERNET_HEADER; + +using BOOTNET_INTERNET_HEADER_PTR = BOOTNET_INTERNET_HEADER*; diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 64f146f3..df5386e4 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -4,6 +4,7 @@ ------------------------------------------- */ +/// Different than the MADT, might be confusing to some. #define APIC_MAG "APIC" #define APIC_ICR_LOW 0x300 @@ -145,6 +146,7 @@ Bool mp_is_smp(Void) noexcept { Void mp_init_cores(VoidPtr vendor_ptr) noexcept { if (!vendor_ptr) return; + if (!kHandoverHeader) return; if (!kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) { kSMPAware = NO; diff --git a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc index daa26e53..c2703af6 100644 --- a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc @@ -8,6 +8,8 @@ #include <HALKit/POWER/Processor.h> #include <KernelKit/DebugOutput.h> +/// @note This part of the HAL needs an owner. + namespace Kernel::Detail { STATIC void mp_hang_fn(void) { while (YES) @@ -21,6 +23,9 @@ namespace Kernel { void mp_wakeup_thread(HAL::StackFramePtr stack) { if (!stack) return; + MUST_PASS(stack->R15 > 0); + MUST_PASS(stack->IP > 0); + hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->IP)); } @@ -30,7 +35,9 @@ void mp_wakeup_thread(HAL::StackFramePtr stack) { void mp_hang_thread(HAL::StackFramePtr stack) { if (!stack) return; + MUST_PASS(stack->R15 > 0); + hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn)); } -} // namespace Kernel
\ No newline at end of file +} // namespace Kernel diff --git a/dev/kernel/KernelKit/KernelTaskScheduler.h b/dev/kernel/KernelKit/KernelTaskScheduler.h index 527eec5e..ce0ff30d 100644 --- a/dev/kernel/KernelKit/KernelTaskScheduler.h +++ b/dev/kernel/KernelKit/KernelTaskScheduler.h @@ -41,6 +41,6 @@ class KernelTaskHelper final { STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid); STATIC Bool CanBeScheduled(const KERNEL_TASK& process); STATIC ErrorOr<ProcessID> TheCurrentKID(); - STATIC SizeT StartScheduling(); + STATIC SizeT StartScheduling(); }; } // namespace Kernel
\ No newline at end of file diff --git a/dev/kernel/KernelKit/UserProcessScheduler.h b/dev/kernel/KernelKit/UserProcessScheduler.h index a7ef13a9..e5b81f76 100644 --- a/dev/kernel/KernelKit/UserProcessScheduler.h +++ b/dev/kernel/KernelKit/UserProcessScheduler.h @@ -79,8 +79,8 @@ class USER_PROCESS final { ProcessTime RTime{0}; //! @brief Process run time. ProcessTime UTime{0}; //! #brief Process used time. - ProcessID ProcessId{kSchedInvalidPID}; - Int32 Kind{kExecutableKind}; + ProcessID ProcessId{kSchedInvalidPID}; + Int32 Kind{kExecutableKind}; public: /***********************************************************************************/ @@ -229,7 +229,7 @@ class UserProcessHelper final { STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_pid); STATIC Bool CanBeScheduled(const USER_PROCESS& process); STATIC ErrorOr<ProcessID> TheCurrentPID(); - STATIC SizeT StartScheduling(); + STATIC SizeT StartScheduling(); }; } // namespace Kernel diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 19e509ed..8a3152f0 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -574,7 +574,8 @@ Ref<USER_PROCESS>& UserProcessScheduler::TheCurrentProcess() { /// @brief Current proccess id getter. /// @return USER_PROCESS ID integer. ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() { - if (!UserProcessScheduler::The().TheCurrentProcess()) return ErrorOr<ProcessID>{-kErrorProcessFault}; + if (!UserProcessScheduler::The().TheCurrentProcess()) + return ErrorOr<ProcessID>{-kErrorProcessFault}; kout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; return ErrorOr<ProcessID>{UserProcessScheduler::The().TheCurrentProcess().Leak().ProcessId}; diff --git a/dev/kernel/src/UserProcessTeam.cc b/dev/kernel/src/UserProcessTeam.cc index 73ba7285..23536242 100644 --- a/dev/kernel/src/UserProcessTeam.cc +++ b/dev/kernel/src/UserProcessTeam.cc @@ -18,6 +18,7 @@ UserProcessTeam::UserProcessTeam() { this->mProcessList[i] = USER_PROCESS(); this->mProcessList[i].PTime = 0; this->mProcessList[i].RTime = 0; + this->mProcessList[i].UTime = 0; this->mProcessList[i].Status = ProcessStatusKind::kKilled; this->mProcessList[i].ParentTeam = this; } diff --git a/dev/libMsg/MsgKit/Server.h b/dev/libMsg/MsgKit/Server.h index 4fa73ccc..022aa425 100644 --- a/dev/libMsg/MsgKit/Server.h +++ b/dev/libMsg/MsgKit/Server.h @@ -33,7 +33,7 @@ struct LIBMSG_EXPR final { }; /// @brief Function type for LibMSG lisp. -typedef Void (*libmsg_func_t)(LIBMSG_EXPR* self, VoidPtr arg, SizeT arg_size); +typedef Void (*libmsg_func_t)(struct LIBMSG_EXPR* self, VoidPtr arg, SizeT arg_size); IMPORT_C Void libmsg_init_library(libmsg_func_t* funcs, SizeT cnt); IMPORT_C UInt32 libmsg_close_library(Void); |
