Iros
 
Loading...
Searching...
No Matches
processor.h
Go to the documentation of this file.
1#pragma once
2
6#include "iris/hw/irq.h"
7
8namespace iris {
9class Processor;
10
11namespace arch {
13 public:
18 auto local_apic() -> x86::amd64::LocalApic& { return *m_local_apic; }
20
21 auto gdt() -> auto& { return m_gdt; }
22 auto tss() -> auto& { return m_tss; }
23
24 void set_fallback_kernel_stack(uptr stack) { m_fallback_kernel_stack = stack; }
25 auto fallback_kernel_stack() const -> uptr { return m_fallback_kernel_stack; }
26
30 void setup_fpu_support_for_processor(bool print_info = true);
31
35 void enable_cpu_features(bool print_info = true);
36
38 m_local_apic_callback = di::move(callback);
39 }
40 void local_apic_callback(IrqContext& context) { m_local_apic_callback(context); }
41
42 private:
45 iris::x86::amd64::TSS m_tss {};
46 uptr m_fallback_kernel_stack {};
47 di::Function<void(IrqContext&)> m_local_apic_callback;
48 };
49}
50
56 auto* result = static_cast<Processor*>(nullptr);
57 asm volatile("mov %%gs:0, %0" : "=r"(result));
58 return *result;
59}
60}
Definition function.h:365
Definition optional_forward_declaration.h:5
Definition processor.h:19
Definition processor.h:12
void local_apic_callback(IrqContext &context)
Definition processor.h:40
auto gdt() -> auto &
Definition processor.h:21
auto tss() -> auto &
Definition processor.h:22
void set_local_apic_callback(di::Function< void(IrqContext &)> callback)
Definition processor.h:37
void set_local_apic(x86::amd64::LocalApic local_apic)
Definition processor.h:19
void enable_cpu_features(bool print_info=true)
Enable CPU features for the current processor.
Definition processor.cpp:40
void set_fallback_kernel_stack(uptr stack)
Definition processor.h:24
auto local_apic() -> x86::amd64::LocalApic &
Get the local APIC.
Definition processor.h:18
auto fallback_kernel_stack() const -> uptr
Definition processor.h:25
void setup_fpu_support_for_processor(bool print_info=true)
Setup the processor to allow floating-point / SIMD operations.
Definition processor.cpp:9
Definition local_apic.h:150
uintptr_t uptr
Definition integers.h:36
Definition cxx_init.cpp:12
Definition cxx_init.cpp:12
auto current_processor_unsafe() -> Processor &
Get the current processor.
Definition processor.h:55
Definition span_fixed_size.h:37
Definition irq.h:7
Definition tss.h:10