NeKernel dev
|
Hardware Abstraction Layer. More...
Namespaces | |
namespace | Detail |
Classes | |
struct | HAL_HARDWARE_THREAD |
struct | LAPIC |
struct | SDT_OBJECT |
Multiple APIC Descriptor Table. More... | |
struct | StackFrame |
Stack frame (as retrieved from assembly.) More... |
Typedefs | |
typedef UInt32 | PageTableIndex |
typedef UIntPtr | Reg |
typedef StackFrame * | StackFramePtr |
Functions | |
auto | mm_is_bitmap (VoidPtr ptr) -> Bool |
Check whether this pointer is a bitmap object. | |
EXTERN_C Void | sched_jump_to_task (StackFramePtr stack_frame) |
Void | hal_send_ipi_msg (UInt32 target, UInt32 apic_id, UInt8 vector) |
Send end IPI for CPU. | |
EXTERN_C HAL::StackFramePtr | mp_get_current_task (ThreadID thrdid) |
Get current stack frame for a thread. | |
EXTERN_C BOOL | mp_register_task (HAL::StackFramePtr stack_frame, ThreadID thrdid) |
Register current stack frame for a thread. | |
Bool | mp_is_smp (Void) noexcept |
Is the current config SMP aware? | |
Void | mp_init_cores (VoidPtr vendor_ptr) noexcept |
Fetch and enable SMP scheduler. | |
STATIC Void | mmi_page_status (Detail::PTE *pte) |
Retrieve the page status of a PTE. | |
EXTERN_C UIntPtr | mm_get_page_addr (VoidPtr virt) |
Gets a physical address from a virtual address. | |
EXTERN_C Int32 | mm_memory_fence (VoidPtr virtual_address) |
clflush+mfence helper function. | |
EXTERN_C Int32 | mm_map_page (VoidPtr virtual_address, VoidPtr physical_address, UInt32 flags, UInt32 level) |
Maps or allocates a page from virtual_address. | |
Bool | hal_has_msr () noexcept |
Void | hal_get_msr (UInt32 msr, UInt32 *lo, UInt32 *hi) noexcept |
Void | hal_set_msr (UInt32 msr, UInt32 lo, UInt32 hi) noexcept |
Void | lrt_hal_out8 (UInt16 port, UInt8 value) |
Void | lrt_hal_out16 (UInt16 port, UInt16 value) |
Void | lrt_hal_out32 (UInt16 port, UInt32 value) |
UInt8 | lrt_hal_in8 (UInt16 port) |
UInt16 | lrt_hal_in16 (UInt16 port) |
UInt32 | lrt_hal_in32 (UInt16 port) |
Void | rt_halt () |
Void | rt_cli () |
Void | rt_sti () |
Void | rt_cld () |
Void | rt_std () |
auto | mm_alloc_bitmap (Boolean wr, Boolean user, SizeT size, Bool is_page, SizeT pad) -> VoidPtr |
Allocate a new page to be used by the OS. | |
auto | mm_free_bitmap (VoidPtr ptr) -> Bool |
Free Bitmap, and mark it as absent. |
Variables | |
STATIC HAL_APIC_MADT * | kSMPBlock = nullptr |
STATIC Bool | kSMPAware = false |
STATIC Int64 | kSMPCount = 0 |
EXTERN_C UIntPtr | kApicBaseAddress |
STATIC Int32 | kSMPInterrupt = 0 |
STATIC UInt64 | kAPICLocales [kMaxAPInsideSched] = {0} |
STATIC VoidPtr | kRawMADT = nullptr |
STATIC HAL_HARDWARE_THREAD | kHWThread [kSchedProcessLimitPerTeam] = {{}} |
typedef UInt32 Kernel::HAL::PageTableIndex |
typedef UIntPtr Kernel::HAL::Reg |
typedef StackFrame* Kernel::HAL::StackFramePtr |
|
inlinenoexcept |
Send end IPI for CPU.
apic_id | |
vector | |
target |
auto Kernel::HAL::mm_alloc_bitmap | ( | Boolean | wr, |
Boolean | user, | ||
SizeT | size, | ||
Bool | is_page, | ||
SizeT | pad ) -> VoidPtr |
Allocate a new page to be used by the OS.
wr | read/write bit. |
user | user bit. |
Free Bitmap, and mark it as absent.
ptr | the pointer to free. |
Gets a physical address from a virtual address.
virt | a valid virtual address. |
Check whether this pointer is a bitmap object.
ptr | argument to verify. |
whether | successful or not. |
EXTERN_C Int32 Kernel::HAL::mm_map_page | ( | VoidPtr | virtual_address, |
VoidPtr | physical_address, | ||
UInt32 | flags, | ||
UInt32 | level ) |
Maps or allocates a page from virtual_address.
virtual_address | a valid virtual address. |
phys_addr | point to physical address. |
flags | the flags to put on the page. |
clflush+mfence helper function.
STATIC Void Kernel::HAL::mmi_page_status | ( | Detail::PTE * | pte | ) |
Retrieve the page status of a PTE.
pte | Page Table Entry pointer. |
EXTERN_C HAL::StackFramePtr Kernel::HAL::mp_get_current_task | ( | ThreadID | thrdid | ) |
Get current stack frame for a thread.
thrdid | The thread ID. |
Fetch and enable SMP scheduler.
vendor_ptr | SMP containing structure. |
Is the current config SMP aware?
EXTERN_C BOOL Kernel::HAL::mp_register_task | ( | HAL::StackFramePtr | stack_frame, |
ThreadID | thrdid ) |
Register current stack frame for a thread.
stack_frame | The current stack frame. |
thrdid | The thread ID. |
Void Kernel::HAL::rt_cld | ( | ) |
|
inline |
|
inline |
Void Kernel::HAL::rt_std | ( | ) |
Void Kernel::HAL::rt_sti | ( | ) |
EXTERN_C Void Kernel::HAL::sched_jump_to_task | ( | StackFramePtr | stack_frame | ) |
STATIC UInt64 Kernel::HAL::kAPICLocales[kMaxAPInsideSched] = {0} |
STATIC HAL_HARDWARE_THREAD Kernel::HAL::kHWThread[kSchedProcessLimitPerTeam] = {{}} |
STATIC HAL_APIC_MADT* Kernel::HAL::kSMPBlock = nullptr |