10#include "mos/platform/platform_defs.hpp"
21#if MOS_CONFIG(MOS_SMP)
22#define PER_CPU_DECLARE(type, name) struct name { type percpu_value[MOS_MAX_CPU_COUNT]; } name
23#define PER_CPU_VAR_INIT { .percpu_value = { 0 } }
24#define per_cpu(var) (&(var.percpu_value[platform_current_cpu_id()]))
26#define PER_CPU_DECLARE(type, name) struct name { type percpu_value[1]; } name
27#define PER_CPU_VAR_INIT { .percpu_value = { 0 } }
28#define per_cpu(var) (&(var.percpu_value[0]))
32#define current_cpu per_cpu(platform_info->cpu)
33#define current_thread (current_cpu->thread)
34#define current_process (current_thread->owner)
35#define current_mm (current_cpu->mm_context)
93typedef struct _platform_info
121#define MOS_KERNEL_PFN(vaddr) ((ALIGN_DOWN_TO_PAGE((vaddr) - (platform_info->k_basevaddr)) / MOS_PAGE_SIZE) + (platform_info->k_basepfn))
136#define platform_alias(name) __attribute__((alias("platform_default_" #name)))
183#if MOS_PLATFORM_PAGING_LEVELS >= 2
189#if MOS_CONFIG(PML2_HUGE_CAPABLE)
196#if MOS_PLATFORM_PAGING_LEVELS >= 3
202#if MOS_CONFIG(PML3_HUGE_CAPABLE)
209#if MOS_PLATFORM_PAGING_LEVELS >= 4
215#if MOS_CONFIG(PML4_HUGE_CAPABLE)
216bool platform_pml4e_is_huge(
const pml4e_t *pml4);
pml1_t platform_pml2e_get_pml1(const pml2e_t *pml2e)
bool platform_pml3e_get_present(const pml3e_t *pml3e)
void platform_pml4e_set_pml3(pml4e_t *pml4e, pml3_t pml3, pfn_t pml3_pfn)
pml3_t platform_pml4e_get_pml3(const pml4e_t *pml4e)
void platform_pml3e_set_flags(pml3e_t *pml3e, VMFlags flags)
VMFlags platform_pml3e_get_flags(const pml3e_t *pml3e)
void platform_pml2e_set_pml1(pml2e_t *pml2e, pml1_t pml1, pfn_t pml1_pfn)
void platform_pml4e_set_flags(pml4e_t *pml4e, VMFlags flags)
VMFlags platform_pml2e_get_flags(const pml2e_t *pml2e)
void platform_pml2e_set_flags(pml2e_t *pml2e, VMFlags flags)
void platform_pml3e_set_pml2(pml3e_t *pml3e, pml2_t pml2, pfn_t pml2_pfn)
bool platform_pml2e_get_present(const pml2e_t *pml2e)
VMFlags platform_pml4e_get_flags(const pml4e_t *pml4e)
bool platform_pml4e_get_present(const pml4e_t *pml4e)
pml2_t platform_pml3e_get_pml2(const pml3e_t *pml3e)
bool platform_pml3e_is_huge(const pml3e_t *pml3e)
pfn_t platform_pml2e_get_huge_pfn(const pml2e_t *pml2)
void platform_pml2e_set_huge(pml2e_t *pml2e, pfn_t pfn)
bool platform_pml2e_is_huge(const pml2e_t *pml2e)
void platform_pml3e_set_huge(pml3e_t *pml3e, pfn_t pfn)
pfn_t platform_pml3e_get_huge_pfn(const pml3e_t *pml3)
#define MOS_MAX_MEMREGIONS
#define MOS_MAX_CMDLINE_COUNT
MOSAPI void(1, 2) fatal_abort(const char *fmt
list_node_t list_head
A linked list head.
ipi_type_t
The type of IPI to send.
void(* thread_entry_t)(void *arg)
spinlock_t mm_lock
protects [pgd] and the [mmaps] list (the list itself, not the vmap_t objects)
Thread * idle_thread
idle thread for this CPU
platform_regs_t * interrupt_regs
the registers of whatever interrupted this CPU
platform_cpuinfo_t cpuinfo
#define MOS_ENUM_FLAGS(enum, flags)