From e37e5b97af598abb13deef1a767955628922e8a7 Mon Sep 17 00:00:00 2001 From: belliash Date: Sat, 12 Nov 2022 23:17:44 +0100 Subject: [PATCH] Initial version of the kernel initialization block, needed to start the kernel --- sdk/xtdk/xtfw.h | 54 ++++++++++++++++++++++++++++++++++++++++++ sdk/xtdk/xtstruct.h | 5 ++++ xtoskrnl/ke/krnlinit.c | 2 +- 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/sdk/xtdk/xtfw.h b/sdk/xtdk/xtfw.h index 0f2fa7c..532eedb 100644 --- a/sdk/xtdk/xtfw.h +++ b/sdk/xtdk/xtfw.h @@ -10,8 +10,12 @@ #define __XTDK_XTFW_H #include "xttypes.h" +#include "xtcommon.h" +/* Version number of the current kernel initialization block */ +#define INITIALIZATION_BLOCK_VERSION 1 + /* Memory allocation structures */ typedef enum _LOADER_MEMORY_TYPE { @@ -45,4 +49,54 @@ typedef enum _LOADER_MEMORY_TYPE LoaderMaximum } LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE; +/* Firmware types enumeration list */ +typedef enum _SYSTEM_FIRMWARE_TYPE { + SystemFirmwareInvalid, + SystemFirmwareUnknown, + SystemFirmwareEfi, + SystemFirmwarePcat +} SYSTEM_FIRMWARE_TYPE, *PSYSTEM_FIRMWARE_TYPE; + +/* PCAT Firmware information block */ +typedef struct _PCAT_FIRMWARE_INFORMATION +{ + ULONG PlaceHolder; +} PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION; + +/* UEFI Firmware information block */ +typedef struct _UEFI_FIRMWARE_INFORMATION +{ + ULONG EfiVersion; + ULONGLONG EfiImageHandle; + ULONGLONG EfiSystemTable; + PVOID EfiRuntimeServices; +} UEFI_FIRMWARE_INFORMATION, *PUEFI_FIRMWARE_INFORMATION; + +/* Firmware information block */ +typedef struct _FIRMWARE_INFORMATION_BLOCK +{ + SYSTEM_FIRMWARE_TYPE FirmwareType; + union + { + UEFI_FIRMWARE_INFORMATION EfiFirmware; + PCAT_FIRMWARE_INFORMATION PcatFirmware; + }; +} FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK; + +/* Boot Loader information block */ +typedef struct _LOADER_INFORMATION_BLOCK +{ + PVOID DbgPrint; +} LOADER_INFORMATION_BLOCK, *PLOADER_INFORMATION_BLOCK; + +/* Loader provided information needed by the kernel to initialize */ +typedef struct _KERNEL_INITIALIZATION_BLOCK +{ + ULONG Size; + ULONG Version; + ULONG_PTR KernelStack; + LOADER_INFORMATION_BLOCK LoaderInformation; + FIRMWARE_INFORMATION_BLOCK FirmwareInformation; +} KERNEL_INITIALIZATION_BLOCK, *PKERNEL_INITIALIZATION_BLOCK; + #endif /* __XTDK_XTFW_H */ diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index c230a57..3099456 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -142,10 +142,14 @@ typedef struct _EFI_USB_DEVICE_PATH EFI_USB_DEVICE_PATH, *PEFI_USB_DEVICE_PATH; typedef struct _EFI_USB_WWID_DEVICE_PATH EFI_USB_WWID_DEVICE_PATH, *PEFI_USB_WWID_DEVICE_PATH; typedef struct _EFI_VENDOR_DEVICE_PATH EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVICE_PATH; typedef struct _EFI_VLAN_DEVICE_PATH EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH; +typedef struct _FIRMWARE_INFORMATION_BLOCK FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK; typedef struct _GUID GUID, *PGUID; +typedef struct _KERNEL_INITIALIZATION_BLOCK KERNEL_INITIALIZATION_BLOCK, *PKERNEL_INITIALIZATION_BLOCK; typedef struct _LIST_ENTRY LIST_ENTRY, *PLIST_ENTRY; typedef struct _LIST_ENTRY32 LIST_ENTRY32, *PLIST_ENTRY32; typedef struct _LIST_ENTRY64 LIST_ENTRY64, *PLIST_ENTRY64; +typedef struct _LOADER_INFORMATION_BLOCK LOADER_INFORMATION_BLOCK, *PLOADER_INFORMATION_BLOCK; +typedef struct _PCAT_FIRMWARE_INFORMATION PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION; typedef struct _PECOFF_IMAGE_BASE_RELOCATION PECOFF_IMAGE_BASE_RELOCATION, *PPECOFF_IMAGE_BASE_RELOCATION; typedef struct _PECOFF_IMAGE_DATA PECOFF_IMAGE_DATA, *PPECOFF_IMAGE_DATA; typedef struct _PECOFF_IMAGE_DATA_DIRECTORY PECOFF_IMAGE_DATA_DIRECTORY, *PPECOFF_IMAGE_DATA_DIRECTORY; @@ -166,6 +170,7 @@ typedef struct _PECOFF_IMAGE_ROM_HEADER PECOFF_IMAGE_ROM_HEADER, *PPECOFF_IMAGE_ typedef struct _PECOFF_IMAGE_ROM_OPTIONAL_HEADER PECOFF_IMAGE_ROM_OPTIONAL_HEADER, *PPECOFF_IMAGE_ROM_OPTIONAL_HEADER; typedef struct _PECOFF_IMAGE_SECTION_HEADER PECOFF_IMAGE_SECTION_HEADER, *PPECOFF_IMAGE_SECTION_HEADER; typedef struct _PECOFF_IMAGE_VXD_HEADER PECOFF_IMAGE_VXD_HEADER, *PPECOFF_IMAGE_VXD_HEADER; +typedef struct _UEFI_FIRMWARE_INFORMATION UEFI_FIRMWARE_INFORMATION, *PUEFI_FIRMWARE_INFORMATION; /* Unions forward references */ typedef union _EFI_DEV_PATH EFI_DEV_PATH, *PEFI_DEV_PATH; diff --git a/xtoskrnl/ke/krnlinit.c b/xtoskrnl/ke/krnlinit.c index 77ca3cd..63a3571 100644 --- a/xtoskrnl/ke/krnlinit.c +++ b/xtoskrnl/ke/krnlinit.c @@ -18,7 +18,7 @@ */ XTAPI VOID -KeStartXtSystem() +KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK LoaderBlock) { /* Enter infinite kernel thread loop */ for(;;);