|
NeKernel dev
|
#include <ArchKit/ArchKit.h>#include <HALKit/AMD64/Processor.h>#include <KernelKit/BinaryMutex.h>#include <KernelKit/HardwareThreadScheduler.h>#include <KernelKit/ProcessScheduler.h>#include <KernelKit/Timer.h>#include <NeKit/KernelPanic.h>#include <modules/ACPI/ACPIFactoryInterface.h>#include <modules/CoreGfx/TextGfx.h>Classes | |
| struct | Kernel::HAL::HAL_HARDWARE_THREAD |
| struct | Kernel::HAL::SDT_OBJECT |
| Multiple APIC Descriptor Table. More... | |
| struct | Kernel::HAL::LAPIC |
| Local APIC Descriptor Table. More... | |
Namespaces | |
| namespace | Kernel |
| UPS inline definitions. | |
| namespace | Kernel::HAL |
| Hardware Abstraction Layer. | |
Macros | |
| #define | APIC_MAG "APIC" |
| Different than the MADT, might be confusing to some. | |
| #define | APIC_ICR_LOW 0x300 |
| #define | APIC_ICR_HIGH 0x310 |
| #define | APIC_SIPI_VEC 0x00500 |
| #define | APIC_EIPI_VEC 0x00400 |
| #define | LAPIC_REG_TIMER_LVT 0x320 |
| #define | LAPIC_REG_TIMER_INITCNT 0x380 |
| #define | LAPIC_REG_TIMER_CURRCNT 0x390 |
| #define | LAPIC_REG_TIMER_DIV 0x3E0 |
| #define | LAPIC_REG_ENABLE 0x80 |
| #define | LAPIC_REG_SPURIOUS 0xF0 |
| #define | APIC_BASE_MSR 0x1B |
| #define | APIC_BASE_MSR_BSP 0x100 |
| #define | APIC_BASE_MSR_ENABLE 0x800 |
Functions | |
| EXTERN_C Void | Kernel::HAL::sched_jump_to_task (StackFramePtr stack_frame) |
| EXTERN_C Void | Kernel::HAL::hal_send_ipi_msg (UInt32 target, UInt32 apic_id, UInt8 vector) |
| Send end IPI for CPU. | |
| EXTERN_C HAL::StackFramePtr | Kernel::HAL::mp_get_current_task (ThreadID thrdid) |
| Get current stack frame for a thread. | |
| EXTERN_C BOOL | Kernel::HAL::mp_register_task (HAL::StackFramePtr stack_frame, ThreadID thrdid) |
| Register current stack frame for a thread. | |
| Bool | Kernel::HAL::mp_is_smp (Void) |
| Is the current config SMP aware? | |
| Void | Kernel::HAL::mp_init_cores (VoidPtr vendor_ptr) |
| Fetch and enable SMP scheduler. | |
Variables | |
| STATIC HAL_APIC_MADT * | Kernel::HAL::kSMPBlock = nullptr |
| STATIC Bool | Kernel::HAL::kSMPAware = false |
| STATIC Int64 | Kernel::HAL::kSMPCount = 0 |
| EXTERN_C UIntPtr | Kernel::HAL::kApicBaseAddress |
| STATIC Int32 | Kernel::HAL::kSMPInterrupt = 0 |
| STATIC UInt64 | Kernel::HAL::kAPICLocales [kMaxAPInsideSched] = {0} |
| STATIC VoidPtr | Kernel::HAL::kRawMADT = nullptr |
| STATIC HAL_HARDWARE_THREAD | Kernel::HAL::kHWThread [kSchedProcessLimitPerTeam] = {{}} |
| #define APIC_BASE_MSR 0x1B |
| #define APIC_BASE_MSR_BSP 0x100 |
| #define APIC_BASE_MSR_ENABLE 0x800 |
| #define APIC_EIPI_VEC 0x00400 |
| #define APIC_ICR_HIGH 0x310 |
| #define APIC_ICR_LOW 0x300 |
| #define APIC_MAG "APIC" |
Different than the MADT, might be confusing to some.
| #define APIC_SIPI_VEC 0x00500 |
| #define LAPIC_REG_ENABLE 0x80 |
| #define LAPIC_REG_SPURIOUS 0xF0 |
| #define LAPIC_REG_TIMER_CURRCNT 0x390 |
| #define LAPIC_REG_TIMER_DIV 0x3E0 |
| #define LAPIC_REG_TIMER_INITCNT 0x380 |
| #define LAPIC_REG_TIMER_LVT 0x320 |