NeKernel dev
Loading...
Searching...
No Matches
HardwareThreadScheduler.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#ifndef __INC_MP_MANAGER_H__
8#define __INC_MP_MANAGER_H__
9
10#include <ArchKit/ArchKit.h>
12#include <NeKit/Ref.h>
13
16
17#define kMaxAPInsideSched (4U)
18
19namespace Kernel {
20class HardwareThread;
22
24
27 kAPSystemReserved = 100, // System reserved thread, well user can't use it
28 kAPStandard, // user thread, cannot be used by Kernel
29 kAPRealTime, // fallback thread, cannot be used by user if not clear or
30 // used by Kernel.
31 kAPBoot, // The core we booted from, the mama.
33};
34
36typedef ThreadID ThreadID;
37
38/***********************************************************************************/
43/***********************************************************************************/
44
45class HardwareThread final {
46 public:
47 explicit HardwareThread();
49
50 public:
52
53 public:
54 operator bool();
55
56 public:
57 void Wake(const BOOL wakeup = false);
58 void Busy(const BOOL busy = false);
59
60 public:
62 BOOL IsWakeup();
63
64 public:
67 BOOL IsBusy();
68 ThreadID& ID();
69
70 private:
72 ThreadKind fKind{ThreadKind::kAPStandard};
77
78 private:
80 friend class UserProcessHelper;
81};
82
87
89 private:
90 friend class UserProcessHelper;
91
92 public:
96
97 public:
99
100 public:
102 bool operator!();
103 operator bool();
104
105 Bool IsUser() override { return Yes; }
106
107 Bool IsKernel() override { return No; }
108
109 Bool HasMP() override { return kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled; }
110
111 public:
115
116 public:
119 SizeT Capacity();
120
121 private:
124};
125
129
133} // namespace Kernel
134
135#endif // !__INC_MP_MANAGER_H__
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define STATIC
#define No
#define NO
#define Yes
#define BOOL
Kernel::HEL::BootInfoHeader * kHandoverHeader
Bootloader information header global variable.
Definition Handover.h:108
Definition Array.h:15
Definition HardwareThreadScheduler.h:45
void Wake(const BOOL wakeup=false)
Wakeup the processor.
Definition HardwareThreadScheduler.cc:84
HAL::StackFramePtr fStack
Definition HardwareThreadScheduler.h:71
Bool fWakeup
Definition HardwareThreadScheduler.h:74
ThreadKind fKind
Definition HardwareThreadScheduler.h:72
void Busy(const BOOL busy=false)
Definition HardwareThreadScheduler.cc:72
friend class HardwareThreadScheduler
Definition HardwareThreadScheduler.h:79
BOOL IsBusy()
is the thread busy?
Definition HardwareThreadScheduler.cc:59
BOOL Switch(HAL::StackFramePtr frame)
Switch to hardware thread.
Definition HardwareThreadScheduler.cc:94
UInt64 fPTime
Definition HardwareThreadScheduler.h:76
BOOL IsWakeup()
!
Definition HardwareThreadScheduler.cc:110
ThreadID & ID()
returns the id of the thread.
Definition HardwareThreadScheduler.cc:44
ThreadKind & Kind()
returns the kind of thread we have.
Definition HardwareThreadScheduler.cc:51
Bool fBusy
Definition HardwareThreadScheduler.h:75
ThreadID fID
Definition HardwareThreadScheduler.h:73
HAL::StackFramePtr StackFrame()
Get processor stack frame.
Definition HardwareThreadScheduler.cc:67
friend class UserProcessHelper
Definition HardwareThreadScheduler.h:80
Definition HardwareThreadScheduler.h:88
SizeT Capacity()
Returns the amount of threads present in the system.
Definition HardwareThreadScheduler.cc:181
HAL::StackFramePtr Leak()
Get Stack Frame of AP.
Definition HardwareThreadScheduler.cc:136
STATIC HardwareThreadScheduler & The()
Shared instance of the MP Mgr.
Definition HardwareThreadScheduler.cc:129
HardwareThreadScheduler()
Constructor and destructors.
ThreadID fCurrentThreadIdx
Definition HardwareThreadScheduler.h:123
Bool HasMP() override
Is this object offloading to another CPU?
Definition HardwareThreadScheduler.h:109
Bool IsUser() override
Is this object only accepting user tasks?
Definition HardwareThreadScheduler.h:105
friend class UserProcessHelper
Definition HardwareThreadScheduler.h:90
Bool IsKernel() override
Is this object only accepting kernel tasks?
Definition HardwareThreadScheduler.h:107
Ref< HardwareThread * > operator[](SizeT idx)
Definition HardwareThreadScheduler.cc:147
Array< HardwareThread, kMaxAPInsideSched > fThreadList
Definition HardwareThreadScheduler.h:122
bool operator!()
Definition HardwareThreadScheduler.cc:173
Reference wrapper class. /// =========================================================== ///.
Definition Ref.h:22
StackFrame * StackFramePtr
Definition Processor.h:34
UPS inline definitions.
Definition Device.h:12
void Void
Definition Config.h:87
Void mp_wakeup_thread(HAL::StackFrame *stack)
Wakes up thread. Wakes up thread from the hang state.
Definition HalSchedulerCorePrimitives.cc:33
__SIZE_TYPE__ SizeT
Definition Config.h:60
Void mp_hang_thread(HAL::StackFrame *stack)
makes the thread sleep on a loop. hooks and hangs thread to prevent code from executing.
Definition HalSchedulerCorePrimitives.cc:44
__UINT32_TYPE__ UInt32
Definition Config.h:44
ThreadKind
Definition HardwareThreadScheduler.h:25
@ kAPRealTime
Definition HardwareThreadScheduler.h:29
@ kAPCount
Definition HardwareThreadScheduler.h:32
@ kAPBoot
Definition HardwareThreadScheduler.h:31
@ kAPInvalid
Definition HardwareThreadScheduler.h:26
@ kAPStandard
Definition HardwareThreadScheduler.h:28
@ kAPSystemReserved
Definition HardwareThreadScheduler.h:27
__UINT64_TYPE__ UInt64
Definition Config.h:48
UInt32 ThreadID
Definition HardwareThreadScheduler.h:23
bool Bool
Definition Config.h:50