diff --git a/sdk/xtdk/amd64/artypes.h b/sdk/xtdk/amd64/artypes.h index b9fdedd..61461a9 100644 --- a/sdk/xtdk/amd64/artypes.h +++ b/sdk/xtdk/amd64/artypes.h @@ -419,4 +419,11 @@ typedef struct _CPUID_SIGNATURE ULONG Unused2:4; } CPU_SIGNATURE, *PCPU_SIGNATURE; +/* Trampoline types */ +typedef enum _TRAMPOLINE_TYPE +{ + TrampolineApStartup, + TrampolineEnableXpa +} TRAMPOLINE_TYPE, *PTRAMPOLINE_TYPE; + #endif /* __XTDK_AMD64_ARTYPES_H */ diff --git a/sdk/xtdk/amd64/xtstruct.h b/sdk/xtdk/amd64/xtstruct.h index 82b950e..64aa6d4 100644 --- a/sdk/xtdk/amd64/xtstruct.h +++ b/sdk/xtdk/amd64/xtstruct.h @@ -30,6 +30,7 @@ typedef enum _PIC_I8259_ICW1_OPERATING_MODE PIC_I8259_ICW1_OPERATING_MODE, *PPIC typedef enum _PIC_I8259_ICW4_BUFFERED_MODE PIC_I8259_ICW4_BUFFERED_MODE, *PPIC_I8259_ICW4_BUFFERED_MODE; typedef enum _PIC_I8259_ICW4_EOI_MODE PIC_I8259_ICW4_EOI_MODE, *PPIC_I8259_ICW4_EOI_MODE; typedef enum _PIC_I8259_ICW4_SYSTEM_MODE PIC_I8259_ICW4_SYSTEM_MODE, *PPIC_I8259_ICW4_SYSTEM_MODE; +typedef enum _TRAMPOLINE_TYPE TRAMPOLINE_TYPE, *PTRAMPOLINE_TYPE; /* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; diff --git a/sdk/xtdk/i686/artypes.h b/sdk/xtdk/i686/artypes.h index 0c4da8b..f3b5b73 100644 --- a/sdk/xtdk/i686/artypes.h +++ b/sdk/xtdk/i686/artypes.h @@ -384,4 +384,10 @@ typedef struct _CPUID_SIGNATURE ULONG Unused2:4; } CPU_SIGNATURE, *PCPU_SIGNATURE; +/* Trampoline types */ +typedef enum _TRAMPOLINE_TYPE +{ + TrampolineApStartup +} TRAMPOLINE_TYPE, *PTRAMPOLINE_TYPE; + #endif /* __XTDK_I686_ARTYPES_H */ diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index a3162c8..2f034d9 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -30,6 +30,7 @@ typedef enum _PIC_I8259_ICW1_OPERATING_MODE PIC_I8259_ICW1_OPERATING_MODE, *PPIC typedef enum _PIC_I8259_ICW4_BUFFERED_MODE PIC_I8259_ICW4_BUFFERED_MODE, *PPIC_I8259_ICW4_BUFFERED_MODE; typedef enum _PIC_I8259_ICW4_EOI_MODE PIC_I8259_ICW4_EOI_MODE, *PPIC_I8259_ICW4_EOI_MODE; typedef enum _PIC_I8259_ICW4_SYSTEM_MODE PIC_I8259_ICW4_SYSTEM_MODE, *PPIC_I8259_ICW4_SYSTEM_MODE; +typedef enum _TRAMPOLINE_TYPE TRAMPOLINE_TYPE, *PTRAMPOLINE_TYPE; /* Architecture-specific structures forward references */ typedef struct _CONTEXT CONTEXT, *PCONTEXT; diff --git a/xtoskrnl/ar/amd64/boot.S b/xtoskrnl/ar/amd64/boot.S index 63b9322..a2f6dba 100644 --- a/xtoskrnl/ar/amd64/boot.S +++ b/xtoskrnl/ar/amd64/boot.S @@ -131,3 +131,17 @@ XpaTemporaryGdtDesc: .quad 0x0000000000000000, 0x00CF9A000000FFFF, 0x00AF9A00000 .global ArEnableExtendedPhysicalAddressingEnd ArEnableExtendedPhysicalAddressingEnd: + + +/** + * Starts an application processor (AP). This is just a stub. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +.global ArStartApplicationProcessor +ArStartApplicationProcessor: + +.global ArStartApplicationProcessorEnd +ArStartApplicationProcessorEnd: diff --git a/xtoskrnl/ar/amd64/procsup.cc b/xtoskrnl/ar/amd64/procsup.cc index 5bc5f37..4656ab5 100644 --- a/xtoskrnl/ar/amd64/procsup.cc +++ b/xtoskrnl/ar/amd64/procsup.cc @@ -23,6 +23,31 @@ AR::ProcSup::GetBootStack(VOID) return (PVOID)BootStack; } +XTAPI +VOID +AR::ProcSup::GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType, + OUT PVOID *TrampolineCode, + OUT PULONG_PTR TrampolineSize) +{ + switch(TrampolineType) + { + case TrampolineApStartup: + *TrampolineCode = (PVOID)ArStartApplicationProcessor; + *TrampolineSize = (ULONG_PTR)ArStartApplicationProcessorEnd - + (ULONG_PTR)ArStartApplicationProcessor; + break; + case TrampolineEnableXpa: + *TrampolineCode = (PVOID)ArEnableExtendedPhysicalAddressing; + *TrampolineSize = (ULONG_PTR)ArEnableExtendedPhysicalAddressingEnd - + (ULONG_PTR)ArEnableExtendedPhysicalAddressing; + break; + default: + *TrampolineCode = NULLPTR; + *TrampolineSize = 0; + break; + } +} + /** * Identifies processor type (vendor, model, stepping) as well as looks for available CPU features and stores them * in Processor Control Block (PRCB). diff --git a/xtoskrnl/ar/i686/boot.S b/xtoskrnl/ar/i686/boot.S index 9d74b00..db9ba68 100644 --- a/xtoskrnl/ar/i686/boot.S +++ b/xtoskrnl/ar/i686/boot.S @@ -12,3 +12,15 @@ .text +/** + * Starts an application processor (AP). This is just a stub. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +.global ArStartApplicationProcessor +ArStartApplicationProcessor: + +.global ArStartApplicationProcessorEnd +ArStartApplicationProcessorEnd: diff --git a/xtoskrnl/ar/i686/procsup.cc b/xtoskrnl/ar/i686/procsup.cc index c5bc3f1..5db6658 100644 --- a/xtoskrnl/ar/i686/procsup.cc +++ b/xtoskrnl/ar/i686/procsup.cc @@ -23,6 +23,26 @@ AR::ProcSup::GetBootStack(VOID) return (PVOID)BootStack; } +XTAPI +VOID +AR::ProcSup::GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType, + OUT PVOID *TrampolineCode, + OUT PULONG_PTR TrampolineSize) +{ + switch(TrampolineType) + { + case TrampolineApStartup: + *TrampolineCode = (PVOID)ArStartApplicationProcessor; + *TrampolineSize = (ULONG_PTR)ArStartApplicationProcessorEnd - + (ULONG_PTR)ArStartApplicationProcessor; + break; + default: + *TrampolineCode = NULLPTR; + *TrampolineSize = 0; + break; + } +} + /** * Identifies processor type (vendor, model, stepping) as well as looks for available CPU features and stores them * in Processor Control Block (PRCB). diff --git a/xtoskrnl/includes/ar.hh b/xtoskrnl/includes/ar.hh index be59534..437761f 100644 --- a/xtoskrnl/includes/ar.hh +++ b/xtoskrnl/includes/ar.hh @@ -11,6 +11,7 @@ #include +#include XTOS_ARCH_HEADER(ar, assembly.hh) #include XTOS_ARCH_HEADER(ar, cpufunc.hh) #include XTOS_ARCH_HEADER(ar, procsup.hh) #include XTOS_ARCH_HEADER(ar, traps.hh) diff --git a/xtoskrnl/includes/ar/amd64/assembly.hh b/xtoskrnl/includes/ar/amd64/assembly.hh new file mode 100644 index 0000000..ab44ebc --- /dev/null +++ b/xtoskrnl/includes/ar/amd64/assembly.hh @@ -0,0 +1,158 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/ar/amd64/assembly.hh + * DESCRIPTION: Architecture-specific assembler routines forward references + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_AR_ASSEMBLY_HH +#define __XTOSKRNL_AR_ASSEMBLY_HH + +#include + + +/* TrampolineEnableXpa end address to calculate trampoline size */ +XTCLINK PVOID ArEnableExtendedPhysicalAddressingEnd[]; + +/* TrampolineApStartup end address to calculate trampoline size */ +XTCLINK PVOID ArStartApplicationProcessorEnd[]; + + +/* Forward reference for assembler code */ +XTCLINK +XTCDECL +VOID +ArEnableExtendedPhysicalAddressing(IN ULONG_PTR PageMap); + +XTCLINK +XTCDECL +VOID +ArStartApplicationProcessor(VOID); + +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_ASSEMBLY_HH */ diff --git a/xtoskrnl/includes/ar/amd64/procsup.hh b/xtoskrnl/includes/ar/amd64/procsup.hh index 6283701..f9d8094 100644 --- a/xtoskrnl/includes/ar/amd64/procsup.hh +++ b/xtoskrnl/includes/ar/amd64/procsup.hh @@ -27,6 +27,9 @@ namespace AR public: STATIC XTAPI PVOID GetBootStack(VOID); + STATIC XTAPI VOID GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType, + OUT PVOID *TrampolineCode, + OUT PULONG_PTR TrampolineSize); STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures); private: diff --git a/xtoskrnl/includes/ar/amd64/traps.hh b/xtoskrnl/includes/ar/amd64/traps.hh index a332367..2d14e6a 100644 --- a/xtoskrnl/includes/ar/amd64/traps.hh +++ b/xtoskrnl/includes/ar/amd64/traps.hh @@ -52,129 +52,4 @@ namespace AR }; } -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 */ diff --git a/xtoskrnl/includes/ar/i686/assembly.hh b/xtoskrnl/includes/ar/i686/assembly.hh new file mode 100644 index 0000000..41aafbe --- /dev/null +++ b/xtoskrnl/includes/ar/i686/assembly.hh @@ -0,0 +1,151 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/ar/i686/assembly.hh + * DESCRIPTION: Architecture-specific assembler routines forward references + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_AR_ASSEMBLY_HH +#define __XTOSKRNL_AR_ASSEMBLY_HH + +#include + + +/* TrampolineApStartup end address to calculate trampoline size */ +XTCLINK PVOID ArStartApplicationProcessorEnd[]; + + +/* Forward reference for assembler code */ +XTCLINK +XTCDECL +VOID +ArStartApplicationProcessor(VOID); + +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 +ArTrap0x2A(VOID); + +XTCLINK +XTCDECL +VOID +ArTrap0x2B(VOID); + +XTCLINK +XTCDECL +VOID +ArTrap0x2C(VOID); + +XTCLINK +XTCDECL +VOID +ArTrap0x2D(VOID); + +XTCLINK +XTCDECL +VOID +ArTrap0x2E(VOID); + +XTCLINK +XTCDECL +VOID +ArTrap0xFF(VOID); + + +#endif /* __XTOSKRNL_AR_ASSEMBLY_HH */ diff --git a/xtoskrnl/includes/ar/i686/procsup.hh b/xtoskrnl/includes/ar/i686/procsup.hh index d6c13ba..dffc056 100644 --- a/xtoskrnl/includes/ar/i686/procsup.hh +++ b/xtoskrnl/includes/ar/i686/procsup.hh @@ -30,6 +30,9 @@ namespace AR public: STATIC XTAPI PVOID GetBootStack(VOID); + STATIC XTAPI VOID GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType, + OUT PVOID *TrampolineCode, + OUT PULONG_PTR TrampolineSize); STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures); private: diff --git a/xtoskrnl/includes/ar/i686/traps.hh b/xtoskrnl/includes/ar/i686/traps.hh index 4b90e88..a256257 100644 --- a/xtoskrnl/includes/ar/i686/traps.hh +++ b/xtoskrnl/includes/ar/i686/traps.hh @@ -49,129 +49,4 @@ namespace AR }; } -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 -ArTrap0x2A(VOID); - -XTCLINK -XTCDECL -VOID -ArTrap0x2B(VOID); - -XTCLINK -XTCDECL -VOID -ArTrap0x2C(VOID); - -XTCLINK -XTCDECL -VOID -ArTrap0x2D(VOID); - -XTCLINK -XTCDECL -VOID -ArTrap0x2E(VOID); - -XTCLINK -XTCDECL -VOID -ArTrap0xFF(VOID); - #endif /* __XTOSKRNL_AR_TRAPS_HH */