27 lines
577 B
C
27 lines
577 B
C
// SPDX-License-Identifier: ISC
|
|
|
|
#pragma once
|
|
|
|
#include <zinnia/irq.h>
|
|
#include <zinnia/percpu.h>
|
|
#include <stddef.h>
|
|
#include <x86_64/apic.h>
|
|
#include <x86_64/gdt.h>
|
|
#include <x86_64/tss.h>
|
|
|
|
struct arch_percpu {
|
|
struct gdt gdt;
|
|
struct tss tss;
|
|
struct local_apic lapic;
|
|
struct irq_line* irq_lines[128];
|
|
size_t fpu_size;
|
|
void (*fpu_save)(void*);
|
|
void (*fpu_restore)(const void*);
|
|
bool can_smap;
|
|
};
|
|
|
|
extern struct arch_percpu arch_data;
|
|
|
|
// Initializes the calling CPU and makes `cpu` its per-CPU block.
|
|
void x86_64_cpu_setup(struct percpu* cpu);
|