/** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory * FILE: sdk/xtdk/bmtypes.h * DESCRIPTION: XT Boot Manager structures definitions * DEVELOPERS: Rafal Kupiec */ #ifndef __XTDK_BMTYPES_H #define __XTDK_BMTYPES_H #include #include #include /* XTLDR directories */ #define XTBL_LOADER_DIRECTORY L"\\EFI\\BOOT\\XTLDR\\" #define XTBL_MODULES_DIRECTORY L"\\EFI\\BOOT\\XTLDR\\MODULES\\" #define XTBL_THEMES_DIRECTORY L"\\EFI\\BOOT\\XTLDR\\THEMES\\" /* EFI XT boot devices */ #define XTBL_BOOT_DEVICE_UNKNOWN 0x00 #define XTBL_BOOT_DEVICE_CDROM 0x01 #define XTBL_BOOT_DEVICE_FLOPPY 0x02 #define XTBL_BOOT_DEVICE_HARDDISK 0x03 #define XTBL_BOOT_DEVICE_RAMDISK 0x04 /* XTLDR Debug Port type definitions */ #define XTBL_DEBUGPORT_SCREEN 1 #define XTBL_DEBUGPORT_SERIAL 2 /* Loader protocol routine pointers */ 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_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle); typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)(); typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_PRINT)(IN PUINT16 Format, IN ...); typedef VOID (*PBL_CONSOLE_QUERY_MODE)(OUT PUINT_PTR ResX, OUT PUINT_PTR ResY); typedef VOID (*PBL_CONSOLE_READ_KEY_STROKE)(OUT PEFI_INPUT_KEY Key); typedef VOID (*PBL_CONSOLE_RESET_INPUT_BUFFER)(); typedef VOID (*PBL_CONSOLE_SET_ATTRIBUTES)(IN ULONGLONG Attributes); typedef VOID (*PBL_CONSOLE_SET_CURSOR_POSITION)(IN ULONGLONG PosX, IN ULONGLONG PosY); typedef VOID (*PBL_CONSOLE_WRITE)(IN PUSHORT String); typedef VOID (*PBL_DEBUG_PRINT)(IN PUINT16 Format, IN ...); typedef EFI_STATUS (*PBL_EXIT_BOOT_SERVICES)(IN UINT_PTR MapKey); typedef EFI_STATUS (*PBL_FREE_PAGES)(IN UINT64 Size, IN EFI_PHYSICAL_ADDRESS Memory); typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory); typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)(); typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle); typedef EFI_STATUS (*PBL_OPEN_XT_PROTOCOL)(OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid); typedef EFI_STATUS (*PBL_READ_FILE)(IN PEFI_FILE_HANDLE DirHandle, IN CONST PWCHAR FileName, OUT PVOID *FileData, OUT PSIZE_T FileSize); typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds); typedef EFI_STATUS (*PBL_WAIT_FOR_EFI_EVENT)(IN UINT_PTR NumberOfEvents, IN PEFI_EVENT Event, OUT PUINT_PTR Index); /* XTLDR Configuration data */ typedef struct _XTBL_CONFIG_ENTRY { LIST_ENTRY Flink; PWCHAR Name; PWCHAR Value; } XTBL_CONFIG_ENTRY, *PXTBL_CONFIG_ENTRY; /* XTLDR Configuration section */ typedef struct _XTBL_CONFIG_SECTION { LIST_ENTRY Flink; LIST_ENTRY Options; PWCHAR SectionName; } XTBL_CONFIG_SECTION, *PXTBL_CONFIG_SECTION; /* XTLDR Status data */ typedef struct _XTBL_STATUS { BOOLEAN BootServices; ULONG DebugPort; CPPORT SerialPort; } XTBL_STATUS, *PXTBL_STATUS; /* XTLDR Loader protocol */ typedef struct _XTBL_LOADER_PROTOCOL { struct { PBL_CONSOLE_CLEAR_SCREEN ClearScreen; PBL_CONSOLE_DISABLE_CURSOR DisableCursor; PBL_CONSOLE_ENABLE_CURSOR EnableCursor; PBL_CONSOLE_PRINT Print; PBL_CONSOLE_QUERY_MODE QueryMode; PBL_CONSOLE_READ_KEY_STROKE ReadKeyStroke; PBL_CONSOLE_RESET_INPUT_BUFFER ResetInputBuffer; PBL_CONSOLE_SET_ATTRIBUTES SetAttributes; PBL_CONSOLE_SET_CURSOR_POSITION SetCursorPosition; PBL_CONSOLE_WRITE Write; } Console; struct { PBL_DEBUG_PRINT Print; } Debug; struct { PBL_CLOSE_VOLUME CloseVolume; PBL_OPEN_VOLUME OpenVolume; PBL_READ_FILE ReadFile; } Disk; struct { PBL_ALLOCATE_PAGES AllocatePages; PBL_ALLOCATE_POOL AllocatePool; PBL_FREE_PAGES FreePages; PBL_FREE_POOL FreePool; } Memory; struct { PBL_OPEN_XT_PROTOCOL Open; } Protocol; struct { PBL_EXIT_BOOT_SERVICES ExitBootServices; PBL_GET_SECURE_BOOT_STATUS GetSecureBootStatus; PBL_SLEEP_EXECUTION SleepExecution; PBL_WAIT_FOR_EFI_EVENT WaitForEfiEvent; } Util; } XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL; #endif /* __XTDK_BMTYPES_H */