Iros
 
Loading...
Searching...
No Matches
local_apic.cpp File Reference

Classes

class  iris::x86::amd64::LocalApicTimer
 
struct  iris::x86::amd64::ApBootInfo
 

Namespaces

namespace  iris
 
namespace  iris::x86
 
namespace  iris::x86::amd64
 

Functions

void iris::x86::amd64::init_local_apic (bool print_info)
 
 iris::x86::amd64::asm (".code16\n" ".set __iris_ap_phys_start, 0x8000\n" ".global __iris_ap_entry_start\n" "__iris_ap_entry_start:\n" "cli\n" "mov %cr4, %eax\n" "or $(1 << 5 | 1 << 7), %eax\n" "mov %eax, %cr4\n" "mov $0xC0000080, %ecx\n" "rdmsr\n" "or $(1 << 8 | 1 << 11), %eax\n" "wrmsr\n" "mov (__iris_ap_cr3 - __iris_ap_entry_start + __iris_ap_phys_start), %eax\n" "mov %eax, %cr3\n" "mov %cr0, %eax\n" "or $(1 << 31 | 1 << 0), %eax\n" "mov %eax, %cr0\n" "lgdtl (__iris_ap_gdtr - __iris_ap_entry_start + __iris_ap_phys_start)\n" "mov $6, %ebx\n" "ljmp $0x28, $(__iris_ap_entry64 - __iris_ap_entry_start + __iris_ap_phys_start)\n" ".code64\n" "__iris_ap_entry64:\n" "xor %rax, %rax\n" "mov %ax, %ds\n" "mov %ax, %es\n" "mov %ax, %fs\n" "mov %ax, %gs\n" "mov %ax, %ss\n" "mov (__iris_ap_stack_pointer - __iris_ap_entry_start + __iris_ap_phys_start), %rsp\n" "mov $(__iris_ap_boot_info - __iris_ap_entry_start + __iris_ap_phys_start), %rdi\n" "mov $iris_ap_entry, %rax\n" "call *%rax\n" "__iris_ap_loop:\n" "hlt\n" "jmp __iris_ap_loop\n" ".align 16\n" "__iris_ap_boot_info:\n" "__iris_ap_cr3:\n" ".skip 8\n" "__iris_ap_stack_pointer:\n" ".skip 8\n" "__iris_ap_processor:\n" ".skip 8\n" "__iris_ap_gdtr:\n" ".skip 16\n" "__iris_ap_gdt:\n" ".skip 88\n" "__iris_ap_entry_end:\n")
 
void iris::x86::amd64::__iris_ap_entry_start ()
 
void iris::x86::amd64::__iris_ap_boot_info ()
 
void iris::x86::amd64::__iris_ap_gdt ()
 
void iris::x86::amd64::__iris_ap_entry_end ()
 
void iris::x86::amd64::iris_ap_entry (ApBootInfo *info_in)
 
void iris::x86::amd64::init_alternative_processors ()