/* * Copyright (c) 2023, kleines Filmröllchen * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include // This header instantiates all functions of ProcessorBase that are architecture-specific. namespace Kernel { template bool ProcessorBase::is_smp_enabled(); template void ProcessorBase::idle_begin() const; template void ProcessorBase::idle_end() const; template void ProcessorBase::smp_enable(); template void ProcessorBase::flush_tlb_local(VirtualAddress vaddr, size_t page_count); template void ProcessorBase::flush_entire_tlb_local(); template void ProcessorBase::flush_tlb(Memory::PageDirectory const*, VirtualAddress, size_t); template void ProcessorBase::early_initialize(u32 cpu); template void ProcessorBase::initialize(u32 cpu); template void ProcessorBase::halt(); template void ProcessorBase::exit_trap(TrapFrame& trap); template u32 ProcessorBase::clear_critical(); template bool ProcessorBase::are_interrupts_enabled(); template void ProcessorBase::wait_for_interrupt() const; template Processor& ProcessorBase::by_id(u32 id); template StringView ProcessorBase::platform_string(); template void ProcessorBase::set_thread_specific_data(VirtualAddress thread_specific_data); template void ProcessorBase::initialize_context_switching(Thread& initial_thread); template void ProcessorBase::switch_context(Thread*& from_thread, Thread*& to_thread); template void ProcessorBase::assume_context(Thread& thread, InterruptsState new_interrupts_state); template FlatPtr ProcessorBase::init_context(Thread& thread, bool leave_crit); template ErrorOr> ProcessorBase::capture_stack_trace(Thread& thread, size_t max_frames); template u32 ProcessorBase::smp_wake_n_idle_processors(u32 wake_count); }