NeKernel dev
Loading...
Searching...
No Matches
HalApplicationProcessor.cc File Reference

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] = {{}}

Macro Definition Documentation

◆ APIC_BASE_MSR

#define APIC_BASE_MSR   0x1B

◆ APIC_BASE_MSR_BSP

#define APIC_BASE_MSR_BSP   0x100

◆ APIC_BASE_MSR_ENABLE

#define APIC_BASE_MSR_ENABLE   0x800

◆ APIC_EIPI_VEC

#define APIC_EIPI_VEC   0x00400

◆ APIC_ICR_HIGH

#define APIC_ICR_HIGH   0x310

◆ APIC_ICR_LOW

#define APIC_ICR_LOW   0x300

◆ APIC_MAG

#define APIC_MAG   "APIC"

Different than the MADT, might be confusing to some.

◆ APIC_SIPI_VEC

#define APIC_SIPI_VEC   0x00500

◆ LAPIC_REG_ENABLE

#define LAPIC_REG_ENABLE   0x80

◆ LAPIC_REG_SPURIOUS

#define LAPIC_REG_SPURIOUS   0xF0

◆ LAPIC_REG_TIMER_CURRCNT

#define LAPIC_REG_TIMER_CURRCNT   0x390

◆ LAPIC_REG_TIMER_DIV

#define LAPIC_REG_TIMER_DIV   0x3E0

◆ LAPIC_REG_TIMER_INITCNT

#define LAPIC_REG_TIMER_INITCNT   0x380

◆ LAPIC_REG_TIMER_LVT

#define LAPIC_REG_TIMER_LVT   0x320