Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
core.c File Reference
#include "core.h"
#include "autoconf.h"
#include "hal/acpi/acpi.h"
#include "hal/acpi/hpet.h"
#include "hal/apic/apic.h"
#include "hal/cpu/interrupt.h"
#include "hal/cpu/msr.h"
#include "hal/cpu/paging.h"
#include "hal/timer/timer.h"
#include "init/init.h"
#include "libk/serial.h"
#include "memory/phys_base_allocator.h"
#include "memory/vm_manager.h"
#include "procc/scheduler.h"
#include "sys/syscall.h"
#include <ioforge/ioforge.h>
#include <str.h>
#include <type.h>

Go to the source code of this file.

Macros

#define INIT_CORE_MAGIC   0x00EEDDAB
 
#define INIT_CORE_ENTRYPOINT   0x8000
 

Functions

void initGdt (init_context_t *_)
 
void initSIMD (init_context_t *_)
 
void initTimer (init_context_t *_)
 
void update_core_gs (uint8_t id)
 
each_core_dataget_current_core_data (void)
 
 __attribute__ ((used, visibility("default"), section(".export")))
 This function handles memory allocation for a new dentry using the slab allocator.
 
each_core_datavxGetCoreDataByCoreID (uint8_t core_id)
 
void vxInitializeAPICTimer ()
 
void init_simd ()
 
void setup_gdt (int core)
 
 __attribute__ ((no_stack_protector, noreturn))
 
static uint32_t get_bsp_apic_id (void)
 
static void sipi_sequential (uint32_t apic_id, uint64_t entrypoint_addr)
 
 INIT (Core)
 
uint8_t vxGetActiveCoreCount ()
 

Variables

char _binary_hal_cpu_core_ap_bin_start []
 
char _binary_hal_cpu_core_ap_bin_end []
 
char __cpu_trampoline_start []
 
char __cpu_trampoline_end []
 
uint8_t x2_apic_supported
 
each_core_data core_data [VOXIA_MAX_CORE] = {0}
 
uint8_t ap_stack_top [VOXIA_MAX_CORE][65536]
 
uintptr_t __stack_chk_guard
 
static volatile uint8_t active_core_count = 1
 
boolean_t multicore_start = 0
 

Macro Definition Documentation

◆ INIT_CORE_ENTRYPOINT

#define INIT_CORE_ENTRYPOINT   0x8000

Definition at line 21 of file core.c.

Referenced by INIT().

◆ INIT_CORE_MAGIC

#define INIT_CORE_MAGIC   0x00EEDDAB

Definition at line 20 of file core.c.

Referenced by INIT().

Function Documentation

◆ __attribute__() [1/2]

◆ __attribute__() [2/2]

__attribute__ ( (used, visibility("default"), section(".export")) )

This function handles memory allocation for a new dentry using the slab allocator.

It also links the dentry to its corresponding VNode (if provided).

Note
This function performs lazy initialization of the dentry slab cache if it does not exist yet.
Parameters
nameThe name of the file or directory.
vnodePointer to the associated VNode (inode data). Pass NULL if the VNode is not yet available.
Returns
dentry_ptr A pointer to the newly allocated and initialized dentry.

Definition at line 59 of file core.c.

References get_current_core_data(), and KERNEL_API.

◆ get_bsp_apic_id()

static uint32_t get_bsp_apic_id ( void )
static

Definition at line 107 of file core.c.

Referenced by INIT().

◆ get_current_core_data()

◆ INIT()

◆ init_simd()

void init_simd ( )
extern

Definition at line 11 of file simd.c.

References cpuid(), LOG2_INFO, LOG2_WARN, simd_has_avx, and simd_has_avx2.

Referenced by __attribute__().

◆ initGdt()

void initGdt ( init_context_t * _)
extern

◆ initSIMD()

void initSIMD ( init_context_t * _)
extern

◆ initTimer()

void initTimer ( init_context_t * _)
extern

References x2_apic_supported.

◆ setup_gdt()

void setup_gdt ( int core)
extern

References __stack_chk_guard, and core.

Referenced by __attribute__(), and INIT().

◆ sipi_sequential()

static void sipi_sequential ( uint32_t apic_id,
uint64_t entrypoint_addr )
static

Definition at line 115 of file core.c.

References APIC_ICR_HIGH, APIC_ICR_LOW, apic_read(), apic_write(), LOG_DEBUG, ms2ns, vector, vxHPETSleep(), vxWRSR(), and x2_apic_supported.

Referenced by INIT().

◆ update_core_gs()

void update_core_gs ( uint8_t id)

Definition at line 39 of file core.c.

References ap_stack_top, core_data, id, msrSetGSBase(), msrSetKernelGSBase(), and vxGetSchedulerCore().

Referenced by __attribute__(), apicInitialize(), and INIT().

◆ vxGetActiveCoreCount()

uint8_t vxGetActiveCoreCount ( )

Definition at line 265 of file core.c.

References active_core_count.

◆ vxGetCoreDataByCoreID()

each_core_data * vxGetCoreDataByCoreID ( uint8_t core_id)

Definition at line 62 of file core.c.

References core, core_data, and each_core_data.

Referenced by vxAddWorkqueueTask().

◆ vxInitializeAPICTimer()

void vxInitializeAPICTimer ( )
extern

Definition at line 148 of file apic_timer.c.

Referenced by __attribute__().

Variable Documentation

◆ __cpu_trampoline_end

char __cpu_trampoline_end[]
extern

◆ __cpu_trampoline_start

char __cpu_trampoline_start[]
extern

◆ __stack_chk_guard

uintptr_t __stack_chk_guard
extern

Definition at line 6 of file sanitizer.c.

Referenced by __attribute__(), and setup_gdt().

◆ _binary_hal_cpu_core_ap_bin_end

char _binary_hal_cpu_core_ap_bin_end[]
extern

Referenced by INIT().

◆ _binary_hal_cpu_core_ap_bin_start

char _binary_hal_cpu_core_ap_bin_start[]
extern

Referenced by INIT().

◆ active_core_count

volatile uint8_t active_core_count = 1
static

Definition at line 72 of file core.c.

Referenced by __attribute__(), INIT(), and vxGetActiveCoreCount().

◆ ap_stack_top

uint8_t ap_stack_top[VOXIA_MAX_CORE][65536]
extern

◆ core_data

each_core_data core_data[VOXIA_MAX_CORE] = {0}

Definition at line 35 of file core.c.

Referenced by update_core_gs(), and vxGetCoreDataByCoreID().

◆ multicore_start

boolean_t multicore_start = 0

Definition at line 105 of file core.c.

Referenced by __attribute__(), and INIT().

◆ x2_apic_supported

uint8_t x2_apic_supported
extern

Definition at line 16 of file apic.c.

Referenced by apic_read(), apic_write(), apicInitialize(), enable_x2apic(), initTimer(), and sipi_sequential().