|
NeKernel dev
|
Hardware Abstraction Layer. More...
Namespaces | |
| namespace | Detail |
Classes | |
| struct | HAL_HARDWARE_THREAD |
| struct | SDT_OBJECT |
| Multiple APIC Descriptor Table. More... | |
| struct | LAPIC |
| Local 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) |
| EXTERN_C 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) |
| Is the current config SMP aware? | |
| Void | mp_init_cores (VoidPtr vendor_ptr) |
| 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 () |
| Void | hal_get_msr (UInt32 msr, UInt32 *lo, UInt32 *hi) |
| Void | hal_set_msr (UInt32 msr, UInt32 lo, UInt32 hi) |
| 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_is_bitmap (VoidPtr ptr) -> BOOL |
| 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] = {{}} |
| STATIC Detail::IBitMapProxy | kBitMapMgr |
| typedef UInt32 Kernel::HAL::PageTableIndex |
| typedef UIntPtr Kernel::HAL::Reg |
| typedef StackFrame* Kernel::HAL::StackFramePtr |
|
inline |
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 Detail::IBitMapProxy Kernel::HAL::kBitMapMgr |
| STATIC HAL_HARDWARE_THREAD Kernel::HAL::kHWThread[kSchedProcessLimitPerTeam] = {{}} |
| STATIC HAL_APIC_MADT* Kernel::HAL::kSMPBlock = nullptr |