Migrate AR subsystem to C++
This commit is contained in:
62
xtoskrnl/includes/ar/amd64/cpufunc.hh
Normal file
62
xtoskrnl/includes/ar/amd64/cpufunc.hh
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ar/amd64/cpufunc.hh
|
||||
* DESCRIPTION: Architecture-specific CPU control and utility functions for low-level system operations
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_AR_CPUFUNC_HH
|
||||
#define __XTOSKRNL_AR_CPUFUNC_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Architecture-specific Library */
|
||||
namespace AR
|
||||
{
|
||||
class CpuFunc
|
||||
{
|
||||
public:
|
||||
STATIC XTCDECL VOID ClearInterruptFlag(VOID);
|
||||
STATIC XTCDECL BOOLEAN CpuId(IN OUT PCPUID_REGISTERS Registers);
|
||||
STATIC XTCDECL VOID FlushTlb(VOID);
|
||||
STATIC XTCDECL ULONG GetCpuFlags(VOID);
|
||||
STATIC XTASSEMBLY XTCDECL ULONG_PTR GetStackPointer(VOID);
|
||||
STATIC XTCDECL VOID Halt(VOID);
|
||||
STATIC XTCDECL BOOLEAN InterruptsEnabled(VOID);
|
||||
STATIC XTCDECL VOID InvalidateTlbEntry(IN PVOID Address);
|
||||
STATIC XTCDECL VOID LoadGlobalDescriptorTable(IN PVOID Source);
|
||||
STATIC XTCDECL VOID LoadInterruptDescriptorTable(IN PVOID Source);
|
||||
STATIC XTCDECL VOID LoadLocalDescriptorTable(IN USHORT Source);
|
||||
STATIC XTCDECL VOID LoadMxcsrRegister(IN ULONG Source);
|
||||
STATIC XTCDECL VOID LoadSegment(IN USHORT Segment,
|
||||
IN ULONG Source);
|
||||
STATIC XTCDECL VOID LoadTaskRegister(USHORT Source);
|
||||
STATIC XTCDECL VOID MemoryBarrier(VOID);
|
||||
STATIC XTCDECL ULONG_PTR ReadControlRegister(IN USHORT ControlRegister);
|
||||
STATIC XTCDECL ULONG_PTR ReadDebugRegister(IN USHORT DebugRegister);
|
||||
STATIC XTCDECL ULONGLONG ReadGSQuadWord(ULONG Offset);
|
||||
STATIC XTCDECL ULONGLONG ReadModelSpecificRegister(IN ULONG Register);
|
||||
STATIC XTCDECL UINT ReadMxCsrRegister(VOID);
|
||||
STATIC XTCDECL ULONGLONG ReadTimeStampCounter(VOID);
|
||||
STATIC XTCDECL VOID ReadWriteBarrier(VOID);
|
||||
STATIC XTCDECL VOID SetInterruptFlag(VOID);
|
||||
STATIC XTCDECL VOID StoreGlobalDescriptorTable(OUT PVOID Destination);
|
||||
STATIC XTCDECL VOID StoreInterruptDescriptorTable(OUT PVOID Destination);
|
||||
STATIC XTCDECL VOID StoreLocalDescriptorTable(OUT PVOID Destination);
|
||||
STATIC XTCDECL VOID StoreSegment(IN USHORT Segment,
|
||||
OUT PVOID Destination);
|
||||
STATIC XTCDECL VOID StoreTaskRegister(OUT PVOID Destination);
|
||||
STATIC XTCDECL VOID WriteControlRegister(IN USHORT ControlRegister,
|
||||
IN UINT_PTR Value);
|
||||
STATIC XTCDECL VOID WriteDebugRegister(IN USHORT DebugRegister,
|
||||
IN UINT_PTR Value);
|
||||
STATIC XTCDECL VOID WriteEflagsRegister(IN UINT_PTR Value);
|
||||
STATIC XTCDECL VOID WriteModelSpecificRegister(IN ULONG Register,
|
||||
IN ULONGLONG Value);
|
||||
STATIC XTCDECL VOID YieldProcessor(VOID);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_AR_CPUFUNC_HH */
|
71
xtoskrnl/includes/ar/amd64/procsup.hh
Normal file
71
xtoskrnl/includes/ar/amd64/procsup.hh
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ar/amd64/procsup.hh
|
||||
* DESCRIPTION: Architecture-specific routines for AMD64 processor initialization and system structure setup
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_AR_PROCSUP_HH
|
||||
#define __XTOSKRNL_AR_PROCSUP_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Architecture-specific Library */
|
||||
namespace AR
|
||||
{
|
||||
class ProcSup
|
||||
{
|
||||
private:
|
||||
STATIC UCHAR BootStack[KERNEL_STACK_SIZE];
|
||||
STATIC UCHAR FaultStack[KERNEL_STACK_SIZE];
|
||||
STATIC KGDTENTRY InitialGdt[GDT_ENTRIES];
|
||||
STATIC KIDTENTRY InitialIdt[IDT_ENTRIES];
|
||||
STATIC KPROCESSOR_BLOCK InitialProcessorBlock;
|
||||
STATIC KTSS InitialTss;
|
||||
|
||||
public:
|
||||
STATIC XTAPI PVOID GetBootStack(VOID);
|
||||
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
|
||||
|
||||
private:
|
||||
STATIC XTAPI VOID IdentifyProcessor(VOID);
|
||||
STATIC XTAPI VOID InitializeGdt(IN PKPROCESSOR_BLOCK ProcessorBlock);
|
||||
STATIC XTAPI VOID InitializeIdt(IN PKPROCESSOR_BLOCK ProcessorBlock);
|
||||
STATIC XTAPI VOID InitializeProcessorBlock(OUT PKPROCESSOR_BLOCK ProcessorBlock,
|
||||
IN PKGDTENTRY Gdt,
|
||||
IN PKIDTENTRY Idt,
|
||||
IN PKTSS Tss,
|
||||
IN PVOID DpcStack);
|
||||
STATIC XTAPI VOID InitializeProcessorRegisters(VOID);
|
||||
STATIC XTAPI VOID InitializeProcessorStructures(IN PVOID ProcessorStructures,
|
||||
OUT PKGDTENTRY *Gdt,
|
||||
OUT PKTSS *Tss,
|
||||
OUT PKPROCESSOR_BLOCK *ProcessorBlock,
|
||||
OUT PVOID *KernelBootStack,
|
||||
OUT PVOID *KernelFaultStack);
|
||||
STATIC XTAPI VOID InitializeSegments(VOID);
|
||||
STATIC XTAPI VOID InitializeTss(IN PKPROCESSOR_BLOCK ProcessorBlock,
|
||||
IN PVOID KernelBootStack,
|
||||
IN PVOID KernelFaultStack);
|
||||
STATIC XTAPI VOID SetGdtEntry(IN PKGDTENTRY Gdt,
|
||||
IN USHORT Selector,
|
||||
IN ULONG_PTR Base,
|
||||
IN ULONG Limit,
|
||||
IN UCHAR Type,
|
||||
IN UCHAR Dpl,
|
||||
IN UCHAR SegmentMode);
|
||||
STATIC XTAPI VOID SetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||
IN USHORT Selector,
|
||||
IN ULONG_PTR Base);
|
||||
STATIC XTAPI VOID SetIdtGate(IN PKIDTENTRY Idt,
|
||||
IN USHORT Vector,
|
||||
IN PVOID Handler,
|
||||
IN USHORT Selector,
|
||||
IN USHORT Ist,
|
||||
IN USHORT Access);
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* __XTOSKRNL_AR_PROCSUP_HH */
|
180
xtoskrnl/includes/ar/amd64/traps.hh
Normal file
180
xtoskrnl/includes/ar/amd64/traps.hh
Normal file
@@ -0,0 +1,180 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtoskrnl/includes/ar/amd64/traps.hh
|
||||
* DESCRIPTION: Trap handling routines and the dispatcher for processor exceptions
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTOSKRNL_AR_TRAPS_HH
|
||||
#define __XTOSKRNL_AR_TRAPS_HH
|
||||
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Architecture-specific Library */
|
||||
namespace AR
|
||||
{
|
||||
class Traps
|
||||
{
|
||||
public:
|
||||
STATIC XTCDECL VOID DispatchTrap(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID InitializeSystemCallMsrs(VOID);
|
||||
|
||||
private:
|
||||
STATIC XTCDECL VOID HandleSystemCall32(VOID);
|
||||
STATIC XTCDECL VOID HandleSystemCall64(VOID);
|
||||
STATIC XTCDECL VOID HandleTrap00(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap01(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap02(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap03(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap04(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap05(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap06(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap07(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap08(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap09(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap0A(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap0B(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap0C(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap0D(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap0E(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap10(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap11(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap12(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap13(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap1F(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap2C(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap2D(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrap2F(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrapE1(IN PKTRAP_FRAME TrapFrame);
|
||||
STATIC XTCDECL VOID HandleTrapFF(IN PKTRAP_FRAME TrapFrame);
|
||||
};
|
||||
}
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x00(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x01(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x02(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x03(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x04(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x05(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x06(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x07(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x08(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x09(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x0A(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x0B(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x0C(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x0D(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x0E(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x10(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x11(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x12(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x13(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x1F(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x2C(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x2D(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0x2F(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0xE1(VOID);
|
||||
|
||||
XTCLINK
|
||||
XTCDECL
|
||||
VOID
|
||||
ArTrap0xFF(VOID);
|
||||
|
||||
#endif /* __XTOSKRNL_AR_TRAPS_HH */
|
Reference in New Issue
Block a user