PatchworkOS
Loading...
Searching...
No Matches
trampoline.h
Go to the documentation of this file.
1#pragma once
2
3#include <kernel/cpu/smp.h>
5
6#include <stdint.h>
7#include <sys/proc.h>
8
25#define TRAMPOLINE_BASE_ADDR 0x8000
26
33#define TRAMPOLINE_DATA_OFFSET 0x0F00
34
38#define TRAMPOLINE_PML4_OFFSET (TRAMPOLINE_DATA_OFFSET + 0x00)
39
43#define TRAMPOLINE_ENTRY_OFFSET (TRAMPOLINE_DATA_OFFSET + 0x08)
44
48#define TRAMPOLINE_CPU_ID_OFFSET (TRAMPOLINE_DATA_OFFSET + 0x10)
49
53#define TRAMPOLINE_CPU_OFFSET (TRAMPOLINE_DATA_OFFSET + 0x18)
54
58#define TRAMPOLINE_STACK_OFFSET (TRAMPOLINE_DATA_OFFSET + 0x20)
59
63#define TRAMPOLINE_ADDR(offset) ((void*)(TRAMPOLINE_BASE_ADDR + (offset)))
64
68extern void trampoline_start(void);
69
73extern void trampoline_end(void);
74
78#define TRAMPOLINE_SIZE ((uintptr_t)trampoline_end - (uintptr_t)trampoline_start)
79
86void trampoline_init(void);
87
91void trampoline_deinit(void);
92
100void trampoline_send_startup_ipi(cpu_t* cpu, cpuid_t cpuId, lapic_id_t lapicId);
101
109
120_NORETURN void trampoline_c_entry(cpu_t* self, cpuid_t cpuId);
121
void trampoline_send_startup_ipi(cpu_t *cpu, cpuid_t cpuId, lapic_id_t lapicId)
Sends the startup IPI to a CPU to start it up.
Definition trampoline.c:63
void trampoline_start(void)
The start of the trampoline code, defined in trampoline.s.
void trampoline_end(void)
The end of the trampoline code, defined in trampoline.s.
void trampoline_deinit(void)
Deinitializes the trampoline by restoring the original contents of the trampoline memory location.
Definition trampoline.c:51
uint64_t trampoline_wait_ready(clock_t timeout)
Waits for the currently starting CPU to signal that it is ready.
Definition trampoline.c:75
void trampoline_init(void)
Initializes the trampoline by copying the trampoline code to its designated memory location.
Definition trampoline.c:23
_NORETURN void trampoline_c_entry(cpu_t *self, cpuid_t cpuId)
After the trampoline is done with basic initialization, it calls this C entry point to continue CPU i...
Definition trampoline.c:99
uint16_t cpuid_t
Type used to identify a CPU.
Definition cpu_id.h:29
uint8_t lapic_id_t
Local APIC ID type.
Definition apic.h:24
__UINT64_TYPE__ clock_t
A nanosecond time.
Definition clock_t.h:13
#define _NORETURN
Definition config.h:28
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
CPU structure.
Definition cpu.h:42