forked from xt-sys/exectos
Rewrite core of the XTLDR boot loader
Reviewed-on: xt-sys/exectos#7 Reviewed-by: Piotr Likoski <likoski@noreply.codingworkshop.git> Co-authored-by: Rafal Kupiec <belliash@codingworkshop.eu.org> Co-committed-by: Rafal Kupiec <belliash@codingworkshop.eu.org>
This commit is contained in:
committed by
CodingWorkshop Signing Team
parent
44905bb71d
commit
4412d4fc98
@@ -1,22 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/bldefs.h
|
||||
* DESCRIPTION: Definitions for the XT boot loader
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_BLDEFS_H
|
||||
#define __XTLDR_BLDEFS_H
|
||||
|
||||
#include <xtkmapi.h>
|
||||
|
||||
|
||||
/* EFI XT boot devices */
|
||||
#define XT_BOOT_DEVICE_UNKNOWN 0x00
|
||||
#define XT_BOOT_DEVICE_CDROM 0x01
|
||||
#define XT_BOOT_DEVICE_FLOPPY 0x02
|
||||
#define XT_BOOT_DEVICE_HARDDISK 0x03
|
||||
#define XT_BOOT_DEVICE_RAMDISK 0x04
|
||||
|
||||
#endif /* __XTLDR_BLDEFS_H */
|
@@ -1,94 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/blmod.h
|
||||
* DESCRIPTION: Top level header for XTLDR modules support
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_BLMOD_H
|
||||
#define __XTLDR_BLMOD_H
|
||||
|
||||
#include <xtkmapi.h>
|
||||
#include <bldefs.h>
|
||||
#include <blproto.h>
|
||||
|
||||
|
||||
/* Structures forward declarations */
|
||||
typedef struct _XT_BOOT_PROTOCOL XT_BOOT_PROTOCOL, *PXT_BOOT_PROTOCOL;
|
||||
typedef struct _XT_BOOT_PROTOCOL_PARAMETERS XT_BOOT_PROTOCOL_PARAMETERS, *PXT_BOOT_PROTOCOL_PARAMETERS;
|
||||
typedef struct _XT_PECOFFF_IMAGE_PROTOCOL XT_PECOFF_IMAGE_PROTOCOL, *PXT_PECOFF_IMAGE_PROTOCOL;
|
||||
|
||||
/* Pointers to the routines provided by the modules */
|
||||
typedef EFI_STATUS (*PXT_BOOTPROTO_BOOT_SYSTEM)(IN PXT_BOOT_PROTOCOL_PARAMETERS Parameters);
|
||||
typedef VOID (*PXT_FRAMEBUFFER_GET_DISPLAY_DRIVER)(OUT PWCHAR *DriverName);
|
||||
typedef VOID (*PXT_FRAMEBUFFER_GET_DISPLAY_INFORMATION)(OUT PLOADER_GRAPHICS_INFORMATION_BLOCK InformationBlock);
|
||||
typedef EFI_STATUS (*PXT_FRAMEBUFFER_INITIALIZE)();
|
||||
typedef VOID (*PXT_FRAMEBUFFER_PRINT_DISPLAY_INFORMATION)();
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_ENTRY_POINT)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PVOID *EntryPoint);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_MACHINE_TYPE)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PUSHORT MachineType);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_SUBSYSTEM)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PUSHORT SubSystem);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_LOAD_IMAGE)(IN PEFI_FILE_HANDLE FileHandle, IN LOADER_MEMORY_TYPE MemoryType,
|
||||
IN PVOID VirtualAddress, OUT PPECOFF_IMAGE_CONTEXT *Image);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_RELOCATE_IMAGE)(IN PPECOFF_IMAGE_CONTEXT Image, IN EFI_VIRTUAL_ADDRESS Address);
|
||||
|
||||
|
||||
/* XT common boot protocols */
|
||||
typedef struct _XT_BOOT_PROTOCOL
|
||||
{
|
||||
PXT_BOOTPROTO_BOOT_SYSTEM BootSystem;
|
||||
} XT_BOOT_PROTOCOL, *PXT_BOOT_PROTOCOL;
|
||||
|
||||
/* XT common boot protocol parameters */
|
||||
typedef struct _XT_BOOT_PROTOCOL_PARAMETERS
|
||||
{
|
||||
PEFI_DEVICE_PATH_PROTOCOL DevicePath;
|
||||
PWCHAR ArcName;
|
||||
PWCHAR SystemPath;
|
||||
PWCHAR KernelFile;
|
||||
PWCHAR InitrdFile;
|
||||
PWCHAR HalFile;
|
||||
PWCHAR Arguments;
|
||||
} XT_BOOT_PROTOCOL_PARAMETERS, *PXT_BOOT_PROTOCOL_PARAMETERS;
|
||||
|
||||
/* XT framebuffer support protocol */
|
||||
typedef struct _XT_FRAMEBUFFER_PROTOCOL
|
||||
{
|
||||
PXT_FRAMEBUFFER_GET_DISPLAY_DRIVER GetDisplayDriver;
|
||||
PXT_FRAMEBUFFER_GET_DISPLAY_INFORMATION GetDisplayInformation;
|
||||
PXT_FRAMEBUFFER_INITIALIZE Initialize;
|
||||
PXT_FRAMEBUFFER_PRINT_DISPLAY_INFORMATION PrintDisplayInformation;
|
||||
} XT_FRAMEBUFFER_PROTOCOL, *PXT_FRAMEBUFFER_PROTOCOL;
|
||||
|
||||
/* XT framebuffer information structure definition */
|
||||
typedef struct _XT_FRAMEBUFFER_INFORMATION
|
||||
{
|
||||
BOOLEAN Initialized;
|
||||
EFI_GRAPHICS_PROTOCOL Protocol;
|
||||
union
|
||||
{
|
||||
PEFI_GRAPHICS_OUTPUT_PROTOCOL GOP;
|
||||
PEFI_UNIVERSAL_GRAPHICS_ADAPTER_PROTOCOL UGA;
|
||||
} Adapter;
|
||||
UINT HorizontalResolution;
|
||||
UINT VerticalResolution;
|
||||
UINT BitsPerPixel;
|
||||
UINT BytesPerPixel;
|
||||
UINT PixelsPerScanLine;
|
||||
UINT Pitch;
|
||||
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
|
||||
EFI_PHYSICAL_ADDRESS FrameBufferBase;
|
||||
ULONG_PTR FrameBufferSize;
|
||||
} XT_FRAMEBUFFER_INFORMATION, *PXT_FRAMEBUFFER_INFORMATION;
|
||||
|
||||
/* EFI XT PE/COFF Image Protocol */
|
||||
typedef struct _XT_PECOFFF_IMAGE_PROTOCOL
|
||||
{
|
||||
PXT_PECOFF_GET_ENTRY_POINT GetEntryPoint;
|
||||
PXT_PECOFF_GET_MACHINE_TYPE GetMachineType;
|
||||
PXT_PECOFF_GET_SUBSYSTEM GetSubSystem;
|
||||
PXT_PECOFF_LOAD_IMAGE Load;
|
||||
PXT_PECOFF_RELOCATE_IMAGE Relocate;
|
||||
} XT_PECOFF_IMAGE_PROTOCOL, *PXT_PECOFF_IMAGE_PROTOCOL;
|
||||
|
||||
#endif /* __XTLDR_BLMOD_H */
|
@@ -1,62 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/blproto.h
|
||||
* DESCRIPTION: XTLDR boot loader protocol support
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_BLPROTO_H
|
||||
#define __XTLDR_BLPROTO_H
|
||||
|
||||
#include <xtkmapi.h>
|
||||
#include <bldefs.h>
|
||||
|
||||
|
||||
/* Loader protocol routine pointers */
|
||||
typedef EFI_STATUS (*PBL_ADD_VIRTUAL_MEMORY_MAPPING)(IN PLIST_ENTRY MemoryMappings, IN PVOID VirtualAddress, IN PVOID PhysicalAddress, IN UINT NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType);
|
||||
typedef EFI_STATUS (*PBL_ALLOCATE_PAGES)(IN UINT64 Size, OUT PEFI_PHYSICAL_ADDRESS Memory);
|
||||
typedef EFI_STATUS (*PBL_ALLOCATE_POOL)(IN UINT_PTR Size, OUT PVOID *Memory);
|
||||
typedef EFI_STATUS (*PBL_ENABLE_PAGING)(IN PLIST_ENTRY MemoryMappings, IN PVOID VirtualAddress, IN PEFI_LOADED_IMAGE_PROTOCOL ImageProtocol, IN PVOID *PtePointer);
|
||||
typedef EFI_STATUS (*PBL_FREE_PAGES)(IN UINT64 Size, IN EFI_PHYSICAL_ADDRESS Memory);
|
||||
typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory);
|
||||
typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap);
|
||||
typedef EFI_STATUS (*PBL_GET_VIRTUAL_ADDRESS)(IN PLIST_ENTRY MemoryMappings, IN PVOID PhysicalAddress, OUT PVOID *VirtualAddress);
|
||||
typedef EFI_STATUS (*PBL_INIT_VIRTUAL_MEMORY)(IN OUT PLIST_ENTRY MemoryMappings, IN OUT PVOID *MemoryMapAddress);
|
||||
typedef EFI_STATUS (*PBL_MAP_VIRTUAL_MEMORY)(IN PLIST_ENTRY MemoryMappings, IN UINT_PTR VirtualAddress, IN UINT_PTR PhysicalAddress, IN UINT NumberOfPages, IN OUT PVOID *PtePointer);
|
||||
typedef VOID (*PBL_GET_STACK)(OUT PVOID *Stack);
|
||||
typedef VOID (*PBL_DBG_PRINT)(IN PUINT16 Format, IN ...);
|
||||
typedef VOID (*PBL_EFI_PRINT)(IN PUINT16 Format, IN ...);
|
||||
typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle);
|
||||
typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle);
|
||||
|
||||
/* EFI XT Boot Loader Protocol */
|
||||
typedef struct _XT_BOOT_LOADER_PROTOCOL
|
||||
{
|
||||
PBL_ADD_VIRTUAL_MEMORY_MAPPING AddVirtualMemoryMapping;
|
||||
PBL_ALLOCATE_PAGES AllocatePages;
|
||||
PBL_ALLOCATE_POOL AllocatePool;
|
||||
PBL_FREE_PAGES FreePages;
|
||||
PBL_FREE_POOL FreePool;
|
||||
PBL_ENABLE_PAGING EnablePaging;
|
||||
PBL_GET_MEMORY_MAP GetMemoryMap;
|
||||
PBL_GET_VIRTUAL_ADDRESS GetVirtualAddress;
|
||||
PBL_INIT_VIRTUAL_MEMORY InitializeVirtualMemory;
|
||||
PBL_MAP_VIRTUAL_MEMORY MapVirtualMemory;
|
||||
PBL_DBG_PRINT DbgPrint;
|
||||
PBL_EFI_PRINT EfiPrint;
|
||||
PBL_CLOSE_VOLUME CloseVolume;
|
||||
PBL_OPEN_VOLUME OpenVolume;
|
||||
} XT_BOOT_LOADER_PROTOCOL, *PXT_BOOT_LOADER_PROTOCOL;
|
||||
|
||||
/* Loader protocol related routines forward references */
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetXtLoaderProtocol(OUT PXT_BOOT_LOADER_PROTOCOL *LdrProtocol);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlLoadXtProtocol(OUT PVOID *ProtocolHandler,
|
||||
IN PEFI_GUID ProtocolGuid);
|
||||
|
||||
#endif /* __XTLDR_BLPROTO_H */
|
48
xtldr/includes/globals.h
Normal file
48
xtldr/includes/globals.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/globals.h
|
||||
* DESCRIPTION: XTLDR global variables
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_GLOBALS_H
|
||||
#define __XTLDR_GLOBALS_H
|
||||
|
||||
#include <xtblapi.h>
|
||||
|
||||
|
||||
/* XT Boot Loader registered boot protocol list */
|
||||
EXTERN LIST_ENTRY BlpBootProtocols;
|
||||
|
||||
/* XT Boot Loader configuration list */
|
||||
EXTERN LIST_ENTRY BlpConfig;
|
||||
|
||||
/* XT Boot Loader loaded configuration */
|
||||
EXTERN LIST_ENTRY BlpConfigSections;
|
||||
|
||||
/* XT Boot Loader hex table */
|
||||
EXTERN PUINT16 BlpHexTable;
|
||||
|
||||
/* XT Boot Loader protocol */
|
||||
EXTERN XTBL_LOADER_PROTOCOL BlpLdrProtocol;
|
||||
|
||||
/* XT Boot Loader loaded modules list */
|
||||
EXTERN LIST_ENTRY BlpLoadedModules;
|
||||
|
||||
/* XT Boot Loader menu list */
|
||||
EXTERN PLIST_ENTRY BlpMenuList;
|
||||
|
||||
/* XT Boot Loader status data */
|
||||
EXTERN XTBL_STATUS BlpStatus;
|
||||
|
||||
/* List of available block devices */
|
||||
EXTERN LIST_ENTRY EfiBlockDevices;
|
||||
|
||||
/* EFI Image Handle */
|
||||
EXTERN EFI_HANDLE EfiImageHandle;
|
||||
|
||||
/* EFI System Table */
|
||||
EXTERN PEFI_SYSTEM_TABLE EfiSystemTable;
|
||||
|
||||
#endif /* __XTLDR_GLOBALS_H */
|
@@ -1,264 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/xtbl.h
|
||||
* DESCRIPTION: Top level header for XTLDR
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_XTBL_H
|
||||
#define __XTLDR_XTBL_H
|
||||
|
||||
#include <xtkmapi.h>
|
||||
#include <xtver.h>
|
||||
#include <blmod.h>
|
||||
|
||||
|
||||
/* List of available block devices */
|
||||
EXTERN LIST_ENTRY EfiBlockDevices;
|
||||
|
||||
/* XT Boot Loader hex table */
|
||||
EXTERN PUINT16 EfiHexTable;
|
||||
|
||||
/* EFI Image Handle */
|
||||
EXTERN EFI_HANDLE EfiImageHandle;
|
||||
|
||||
/* XT Boot Loader protocol */
|
||||
EXTERN XT_BOOT_LOADER_PROTOCOL EfiLdrProtocol;
|
||||
|
||||
/* EFI System Table */
|
||||
EXTERN PEFI_SYSTEM_TABLE EfiSystemTable;
|
||||
|
||||
/* EFI Secure Boot status */
|
||||
EXTERN INT_PTR EfiSecureBoot;
|
||||
|
||||
/* New bootloader stack */
|
||||
EXTERN PVOID EfiLoaderStack;
|
||||
|
||||
/* Serial port configuration */
|
||||
EXTERN CPPORT EfiSerialPort;
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlActivateSerialControllerIO();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlAddVirtualMemoryMapping(IN PLIST_ENTRY MemoryMappings,
|
||||
IN PVOID VirtualAddress,
|
||||
IN PVOID PhysicalAddress,
|
||||
IN UINT NumberOfPages,
|
||||
IN LOADER_MEMORY_TYPE MemoryType);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlCloseVolume(IN PEFI_HANDLE VolumeHandle);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlComPortInitialize();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlComPortPutChar(IN USHORT Character);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlConsoleClearScreen();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlConsoleInitialize();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlConsolePutChar(IN USHORT Character);
|
||||
|
||||
XTCDECL
|
||||
LOADER_MEMORY_TYPE
|
||||
BlConvertEfiMemoryType(IN EFI_MEMORY_TYPE EfiMemoryType);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDbgPrint(IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
INT_PTR
|
||||
BlEfiGetSecureBootStatus();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEfiGetSystemConfigurationTable(IN PEFI_GUID TableGuid,
|
||||
OUT PVOID *Table);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEfiMemoryAllocatePages(IN UINT64 Size,
|
||||
OUT PEFI_PHYSICAL_ADDRESS Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEfiMemoryAllocatePool(IN UINT_PTR Size,
|
||||
OUT PVOID *Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEfiMemoryFreePages(IN UINT64 Size,
|
||||
IN EFI_PHYSICAL_ADDRESS Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEfiMemoryFreePool(IN PVOID Memory);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlEfiPrint(IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
||||
IN PVOID VirtualAddress,
|
||||
IN PEFI_LOADED_IMAGE_PROTOCOL ImageProtocol,
|
||||
IN PVOID *PtePointer);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEnumerateEfiBlockDevices();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlFindVolumeDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL FsHandle,
|
||||
IN CONST PWCHAR FileSystemPath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL* DevicePath);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetMemoryMap(OUT PEFI_MEMORY_MAP MemoryMap);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetVirtualAddress(IN PLIST_ENTRY MemoryMappings,
|
||||
IN PVOID PhysicalAddress,
|
||||
OUT PVOID *VirtualAddress);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetVolumeDevicePath(IN PUCHAR SystemPath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT PUCHAR *ArcName,
|
||||
OUT PUCHAR *Path);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlInitializeVirtualMemory(IN OUT PLIST_ENTRY MemoryMappings,
|
||||
IN OUT PVOID *MemoryMapAddress);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlLoadEfiModules();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlLoadXtSystem();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlMapVirtualMemory(IN PLIST_ENTRY MemoryMappings,
|
||||
IN UINT_PTR VirtualAddress,
|
||||
IN UINT_PTR PhysicalAddress,
|
||||
IN UINT NumberOfPages,
|
||||
IN OUT PVOID *PtePointer);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlOpenVolume(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
||||
OUT PEFI_HANDLE DiskHandle,
|
||||
OUT PEFI_FILE_HANDLE *FsHandle);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlRegisterXtLoaderProtocol();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlStartXtLoader(IN EFI_HANDLE ImageHandle,
|
||||
IN PEFI_SYSTEM_TABLE SystemTable);
|
||||
|
||||
XTCDECL
|
||||
INT
|
||||
BlStringCompareInsensitive(IN PUCHAR String1,
|
||||
IN PUCHAR String2);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlStringPrint(IN VOID PutChar(IN USHORT Character),
|
||||
IN PUINT16 Format,
|
||||
IN VA_LIST Arguments);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpDiscoverEfiBlockDevices(OUT PLIST_ENTRY BlockDevices);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpDissectVolumeArcPath(IN PUCHAR SystemPath,
|
||||
OUT PUCHAR *ArcName,
|
||||
OUT PUCHAR *Path,
|
||||
OUT PUSHORT DriveType,
|
||||
OUT PULONG DriveNumber,
|
||||
OUT PULONG PartNumber);
|
||||
|
||||
XTCDECL
|
||||
PEFI_DEVICE_PATH_PROTOCOL
|
||||
BlpDuplicateDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpFindLastEfiBlockDeviceNode(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL *LastNode);
|
||||
|
||||
XTCDECL
|
||||
BOOLEAN
|
||||
BlpFindParentEfiBlockDevice(IN PLIST_ENTRY BlockDevices,
|
||||
IN PEFI_BLOCK_DEVICE_DATA ChildNode,
|
||||
OUT PEFI_BLOCK_DEVICE_DATA ParentNode);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringFormat(IN VOID PutChar(IN USHORT Character),
|
||||
IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintSigned32(IN VOID PutChar(IN USHORT Character),
|
||||
IN INT32 Number,
|
||||
IN UINT32 Base);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintSigned64(IN VOID PutChar(IN USHORT Character),
|
||||
IN INT_PTR Number,
|
||||
IN UINT_PTR Base);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintUnsigned32(IN VOID PutChar(IN USHORT Character),
|
||||
IN UINT32 Number,
|
||||
IN UINT32 Base,
|
||||
IN UINT32 Padding);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintUnsigned64(IN VOID PutChar(IN USHORT Character),
|
||||
IN UINT_PTR Number,
|
||||
IN UINT_PTR Base,
|
||||
IN UINT_PTR Padding);
|
||||
|
||||
XTCDECL
|
||||
UINT64
|
||||
BlpStringReadPadding(IN PUINT16 *Format);
|
||||
|
||||
#endif /* __XTLDR_XTBL_H */
|
422
xtldr/includes/xtldr.h
Normal file
422
xtldr/includes/xtldr.h
Normal file
@@ -0,0 +1,422 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: xtldr/includes/xtldr.h
|
||||
* DESCRIPTION: Top level header for XTLDR
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#ifndef __XTLDR_XTLDR_H
|
||||
#define __XTLDR_XTLDR_H
|
||||
|
||||
#include <xtblapi.h>
|
||||
#include <xtver.h>
|
||||
|
||||
#include <globals.h>
|
||||
|
||||
|
||||
/* XTLDR routine callbacks */
|
||||
typedef VOID (BLPRINTCHAR)(IN USHORT Character);
|
||||
|
||||
/* XTLDR routines forward references */
|
||||
XTCDECL
|
||||
VOID
|
||||
BlClearConsoleLine(IN ULONGLONG LineNo);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlClearConsoleScreen();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlCloseVolume(IN PEFI_HANDLE VolumeHandle);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlConsolePrint(IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlConsoleWrite(IN PUSHORT String);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDebugPrint(IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDisableConsoleCursor();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDisplayBootMenu();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDisplayErrorDialog(IN PWCHAR Caption,
|
||||
IN PWCHAR Message);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDisplayInfoDialog(IN PWCHAR Caption,
|
||||
IN PWCHAR Message);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlDisplayInputDialog(IN PWCHAR Caption,
|
||||
IN PWCHAR Message,
|
||||
IN OUT PWCHAR *InputFieldText);
|
||||
|
||||
XTCDECL
|
||||
XTBL_DIALOG_HANDLE
|
||||
BlDisplayProgressDialog(IN PWCHAR Caption,
|
||||
IN PWCHAR Message,
|
||||
IN UCHAR Percentage);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlEnableConsoleCursor();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlEnumerateBlockDevices();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlExitBootServices(IN UINT_PTR MapKey);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlFindBootProtocol(IN PWCHAR SystemType,
|
||||
OUT PEFI_GUID BootProtocolGuid);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlFindVolumeDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL FsHandle,
|
||||
IN CONST PWCHAR FileSystemPath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL* DevicePath);
|
||||
|
||||
XTCDECL
|
||||
PWCHAR
|
||||
BlGetConfigValue(IN CONST PWCHAR ConfigName);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetMemoryMap(OUT PEFI_MEMORY_MAP MemoryMap);
|
||||
|
||||
XTCDECL
|
||||
PLIST_ENTRY
|
||||
BlGetModulesList();
|
||||
|
||||
XTCDECL
|
||||
INT_PTR
|
||||
BlGetSecureBootStatus();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlGetVolumeDevicePath(IN PWCHAR SystemPath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT PWCHAR *ArcName,
|
||||
OUT PWCHAR *Path);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlInitializeBootLoader();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlInitializeBootMenuList(OUT PXTBL_BOOTMENU_ITEM MenuEntries,
|
||||
OUT PULONG EntriesCount,
|
||||
OUT PULONG DefaultId);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlInitializeConsole();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlInvokeBootProtocol(IN PLIST_ENTRY OptionsList);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlLoadModule(IN PWCHAR ModuleName);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlLoadModules(IN PWCHAR ModulesList);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlMemoryAllocatePages(IN UINT64 Pages,
|
||||
OUT PEFI_PHYSICAL_ADDRESS Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlMemoryAllocatePool(IN UINT_PTR Size,
|
||||
OUT PVOID *Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlMemoryFreePages(IN UINT64 Pages,
|
||||
IN EFI_PHYSICAL_ADDRESS Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlMemoryFreePool(IN PVOID Memory);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlOpenVolume(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
||||
OUT PEFI_HANDLE DiskHandle,
|
||||
OUT PEFI_FILE_HANDLE *FsHandle);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlOpenProtocol(OUT PEFI_HANDLE Handle,
|
||||
OUT PVOID *ProtocolHandler,
|
||||
IN PEFI_GUID ProtocolGuid);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlQueryConsoleMode(OUT PUINT_PTR ResX,
|
||||
OUT PUINT_PTR ResY);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlReadFile(IN PEFI_FILE_HANDLE DirHandle,
|
||||
IN CONST PWCHAR FileName,
|
||||
OUT PVOID *FileData,
|
||||
OUT PSIZE_T FileSize);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlReadKeyStroke(OUT PEFI_INPUT_KEY Key);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlRegisterBootMenu(PVOID BootMenuRoutine);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlRegisterBootProtocol(IN PWCHAR SystemType,
|
||||
IN PEFI_GUID BootProtocolGuid);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlInstallProtocol(IN PVOID Interface,
|
||||
IN PEFI_GUID Guid);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlResetConsoleInputBuffer();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlSetConfigValue(IN CONST PWCHAR ConfigName,
|
||||
IN CONST PWCHAR ConfigValue);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlSetConsoleAttributes(IN ULONGLONG Attributes);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlSetConsoleMode(IN ULONGLONG Mode);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlSetCursorPosition(IN ULONGLONG PosX,
|
||||
IN ULONGLONG PosY);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlSleepExecution(IN ULONG_PTR Milliseconds);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlStartLoaderShell();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlStartXtLoader(IN EFI_HANDLE ImageHandle,
|
||||
IN PEFI_SYSTEM_TABLE SystemTable);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlUpdateProgressBar(IN PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR Message,
|
||||
IN UCHAR Percentage);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlWaitForEfiEvent(IN UINT_PTR NumberOfEvents,
|
||||
IN PEFI_EVENT Event,
|
||||
OUT PUINT_PTR Index);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpActivateSerialIOController();
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpConsolePrintChar(IN USHORT Character);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDebugPutChar(IN USHORT Character);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDetermineDialogBoxSize(IN OUT PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR Message);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpDiscoverEfiBlockDevices(OUT PLIST_ENTRY BlockDevices);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpDissectVolumeArcPath(IN PWCHAR SystemPath,
|
||||
OUT PWCHAR *ArcName,
|
||||
OUT PWCHAR *Path,
|
||||
OUT PUSHORT DriveType,
|
||||
OUT PULONG DriveNumber,
|
||||
OUT PULONG PartNumber);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawBootMenu(OUT PXTBL_DIALOG_HANDLE Handle);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawBootMenuEntry(IN PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR MenuEntry,
|
||||
IN UINT Position,
|
||||
IN BOOLEAN Highlighted);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawDialogBox(IN OUT PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR Caption,
|
||||
IN PWCHAR Message);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawDialogButton(IN PXTBL_DIALOG_HANDLE Handle);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawDialogInputField(IN PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR InputFieldText);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawDialogMessage(IN PXTBL_DIALOG_HANDLE Handle,
|
||||
IN PWCHAR Message);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpDrawDialogProgressBar(IN PXTBL_DIALOG_HANDLE Handle,
|
||||
IN UCHAR Percentage);
|
||||
|
||||
XTCDECL
|
||||
PEFI_DEVICE_PATH_PROTOCOL
|
||||
BlpDuplicateDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpFindLastBlockDeviceNode(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath,
|
||||
OUT PEFI_DEVICE_PATH_PROTOCOL *LastNode);
|
||||
|
||||
XTCDECL
|
||||
BOOLEAN
|
||||
BlpFindParentBlockDevice(IN PLIST_ENTRY BlockDevices,
|
||||
IN PEFI_BLOCK_DEVICE_DATA ChildNode,
|
||||
OUT PEFI_BLOCK_DEVICE_DATA ParentNode);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpInitializeDebugConsole();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpInitializeSerialPort(IN ULONG PortNumber,
|
||||
IN ULONG PortAddress,
|
||||
IN ULONG BaudRate);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpInstallXtLoaderProtocol();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpLoadConfiguration();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpParseCommandLine(VOID);
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpParseConfigFile(IN CONST PCHAR RawConfig,
|
||||
OUT PLIST_ENTRY Configuration);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpPrintShellPrompt();
|
||||
|
||||
XTCDECL
|
||||
EFI_STATUS
|
||||
BlpReadConfigFile(IN CONST PWCHAR ConfigDirectory,
|
||||
IN CONST PWCHAR ConfigFile,
|
||||
OUT PCHAR *ConfigData);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringFormat(IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN PUINT16 Format,
|
||||
IN ...);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrint(IN IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN PUINT16 Format,
|
||||
IN VA_LIST Arguments);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintSigned32(IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN INT Number,
|
||||
IN UINT Base);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintSigned64(IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN INT_PTR Number,
|
||||
IN UINT_PTR Base);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintUnsigned32(IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN UINT Number,
|
||||
IN UINT Base,
|
||||
IN UINT Padding);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpStringPrintUnsigned64(IN BLPRINTCHAR PrintCharRoutine,
|
||||
IN UINT_PTR Number,
|
||||
IN UINT_PTR Base,
|
||||
IN UINT_PTR Padding);
|
||||
|
||||
XTCDECL
|
||||
UINT64
|
||||
BlpStringReadPadding(IN PUINT16 *Format);
|
||||
|
||||
XTCDECL
|
||||
VOID
|
||||
BlpUpdateConfiguration(IN PLIST_ENTRY NewConfig);
|
||||
|
||||
#endif /* __XTLDR_XTLDR_H */
|
Reference in New Issue
Block a user