4#include <sys/kconfig.h>
5#include <sys/kassert.h>
9#include <sys/spinlock.h>
11#include <machine/amd64.h>
12#include <machine/ioapic.h>
13#include <machine/lapic.h>
14#include <machine/trap.h>
15#include <machine/pmap.h>
16#include <machine/mp.h>
18#include <sys/thread.h>
20#include <sys/bufcache.h>
24#include "../dev/console.h"
59 kprintf(
"Initializing GDT... ");
62 GDT[c][1] = 0x00AF9A000000FFFFULL;
63 GDT[c][2] = 0x00CF92000000FFFFULL;
69 tmp = offset & 0x00FFFFFF;
70 GDT[c][4] |= (tmp << 16);
71 tmp = offset & 0xFF000000;
72 GDT[c][4] |= (tmp << 56);
73 GDT[c][4] |= 0x89ULL << 40;
74 GDT[c][5] = offset >> 32;
76 GDT[c][6] = 0x00AFFA000000FFFFULL;
77 GDT[c][7] = 0x00CFF2000000FFFFULL;
98 kprintf(
"Initializing TSS... ");
130 kprintf(
"Initializing Syscall... ");
224 Panic(
"No boot disk!");
234 kprintf(
"Couldn't create idle thread!\n");
uint64_t SegmentDescriptor
static INLINE void ltr(uint16_t tss)
static INLINE void lgdt(PseudoDescriptor *gdt)
static INLINE void wrmsr(uint32_t addr, uint64_t val)
static INLINE void clts()
static INLINE void enable_interrupts()
static INLINE void breakpoint()
Disk * Disk_GetByID(uint64_t ctrlNo, uint64_t diskNo)
Thread * Thread_KThreadCreate(void(*f)(void *), void *arg)
void Sched_SetRunnable(Thread *thr)
void IOAPIC_Enable(int irq)
int kprintf(const char *fmt,...)
static void Machine_SyscallInit()
static void Machine_GDTInit()
static void Machine_IdleThread(void *test)
static void Machine_TSSInit()
TaskStateSegment64 TSS[MAX_CPUS]
void MachineBoot_AddMem()
static char df_stack[4096]
static PseudoDescriptor GDTDescriptor[MAX_CPUS]
static SegmentDescriptor GDT[MAX_CPUS][GDT_MAX]
void PAlloc_AddRegion(uintptr_t start, uintptr_t len)
void Spinlock_EarlyInit()
int VFS_MountRoot(Disk *root)
void Panic(const char *str)
void WaitChannel_EarlyInit()