|
| 1 | +/** |
| 2 | + * PROJECT: ExectOS |
| 3 | + * COPYRIGHT: See COPYING.md in the top level directory |
| 4 | + * FILE: sdk/xtdk/bltypes.h |
| 5 | + * DESCRIPTION: XT Boot Manager structures definitions |
| 6 | + * DEVELOPERS: Rafal Kupiec <[email protected]> |
| 7 | + */ |
| 8 | + |
| 9 | +#ifndef __XTDK_BLTYPES_H |
| 10 | +#define __XTDK_BLTYPES_H |
| 11 | + |
| 12 | +#include <xttypes.h> |
| 13 | +#include <xtuefi.h> |
| 14 | +#include <hltypes.h> |
| 15 | + |
| 16 | + |
| 17 | +/* Architecture specific definitions */ |
| 18 | +#if defined(__i386__) || defined(__i686__) |
| 19 | + #define XTBL_ARCH_LOADER_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR32\\" |
| 20 | + #define XTBL_ARCH_MODULES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR32\\MODULES\\" |
| 21 | + #define XTBL_ARCH_THEMES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR32\\THEMES\\" |
| 22 | +#elif defined(__amd64__) || defined(__x86_64__) |
| 23 | + #define XTBL_ARCH_LOADER_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR64\\" |
| 24 | + #define XTBL_ARCH_MODULES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR64\\MODULES\\" |
| 25 | + #define XTBL_ARCH_THEMES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR64\\THEMES\\" |
| 26 | +#else |
| 27 | + #error Unknown architecture |
| 28 | +#endif |
| 29 | + |
| 30 | +/* XTLDR directories */ |
| 31 | +#define XTBL_LOADER_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR\\" |
| 32 | +#define XTBL_MODULES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR\\MODULES\\" |
| 33 | +#define XTBL_THEMES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR\\THEMES\\" |
| 34 | + |
| 35 | +/* XTLDR module segment macros */ |
| 36 | +#define XTBL_MODDEPS SEGMENT(".moddeps") CONST WCHAR XtBlpDeps[][8] |
| 37 | +#define XTBL_MODINFO SEGMENT(".modinfo") CONST WCHAR XtBlpInfo[] |
| 38 | + |
| 39 | +/* EFI XT boot devices */ |
| 40 | +#define XTBL_BOOT_DEVICE_UNKNOWN 0x00 |
| 41 | +#define XTBL_BOOT_DEVICE_CDROM 0x01 |
| 42 | +#define XTBL_BOOT_DEVICE_FLOPPY 0x02 |
| 43 | +#define XTBL_BOOT_DEVICE_HARDDISK 0x03 |
| 44 | +#define XTBL_BOOT_DEVICE_RAMDISK 0x04 |
| 45 | + |
| 46 | +/* XTLDR Debug Port type definitions */ |
| 47 | +#define XTBL_DEBUGPORT_SCREEN 1 |
| 48 | +#define XTBL_DEBUGPORT_SERIAL 2 |
| 49 | + |
| 50 | +/* TUI dialog box attributes */ |
| 51 | +#define XTBL_TUI_DIALOG_GENERIC_BOX 1 |
| 52 | +#define XTBL_TUI_DIALOG_ERROR_BOX 2 |
| 53 | +#define XTBL_TUI_DIALOG_ACTIVE_BUTTON 4 |
| 54 | +#define XTBL_TUI_DIALOG_INACTIVE_BUTTON 8 |
| 55 | +#define XTBL_TUI_DIALOG_ACTIVE_INPUT 16 |
| 56 | +#define XTBL_TUI_DIALOG_INACTIVE_INPUT 32 |
| 57 | +#define XTBL_TUI_DIALOG_PROGRESS_BAR 64 |
| 58 | + |
| 59 | +/* TUI dialog box maximum width */ |
| 60 | +#define XTBL_TUI_MAX_DIALOG_WIDTH 100 |
| 61 | + |
| 62 | +/* Boot Loader protocol routine pointers */ |
| 63 | +typedef EFI_STATUS (*PBL_ALLOCATE_PAGES)(IN UINT64 Size, OUT PEFI_PHYSICAL_ADDRESS Memory); |
| 64 | +typedef EFI_STATUS (*PBL_ALLOCATE_POOL)(IN UINT_PTR Size, OUT PVOID *Memory); |
| 65 | +typedef VOID (*PBL_BOOTMENU_INITIALIZE_OS_LIST)(OUT PXTBL_BOOTMENU_ITEM MenuEntries, OUT PULONG EntriesCount, OUT PULONG DefaultId); |
| 66 | +typedef EFI_STATUS (*PBL_BOOTPROTO_BOOT_SYSTEM)(IN PXTBL_BOOT_PARAMETERS Parameters); |
| 67 | +typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle); |
| 68 | +typedef VOID (*PBL_CLEAR_CONSOLE_LINE)(IN ULONGLONG LineNo); |
| 69 | +typedef EFI_STATUS (*PBL_CLOSE_XT_PROTOCOL)(IN PEFI_HANDLE Handle, IN PEFI_GUID ProtocolGuid); |
| 70 | +typedef PWCHAR (*PBL_CONFIG_GET_VALUE)(IN CONST PWCHAR ConfigName); |
| 71 | +typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)(); |
| 72 | +typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)(); |
| 73 | +typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)(); |
| 74 | +typedef VOID (*PBL_CONSOLE_PRINT)(IN PUINT16 Format, IN ...); |
| 75 | +typedef VOID (*PBL_CONSOLE_QUERY_MODE)(OUT PUINT_PTR ResX, OUT PUINT_PTR ResY); |
| 76 | +typedef VOID (*PBL_CONSOLE_READ_KEY_STROKE)(OUT PEFI_INPUT_KEY Key); |
| 77 | +typedef VOID (*PBL_CONSOLE_RESET_INPUT_BUFFER)(); |
| 78 | +typedef VOID (*PBL_CONSOLE_SET_ATTRIBUTES)(IN ULONGLONG Attributes); |
| 79 | +typedef VOID (*PBL_CONSOLE_SET_CURSOR_POSITION)(IN ULONGLONG PosX, IN ULONGLONG PosY); |
| 80 | +typedef VOID (*PBL_CONSOLE_WRITE)(IN PUSHORT String); |
| 81 | +typedef VOID (*PBL_DEBUG_PRINT)(IN PUINT16 Format, IN ...); |
| 82 | +typedef EFI_STATUS (*PBL_EXECIMAGE_GET_ENTRY_POINT)(IN PVOID ImagePointer, OUT PVOID *EntryPoint); |
| 83 | +typedef EFI_STATUS (*PBL_EXECIMAGE_GET_MACHINE_TYPE)(IN PVOID ImagePointer, OUT PUSHORT MachineType); |
| 84 | +typedef EFI_STATUS (*PBL_EXECIMAGE_GET_SUBSYSTEM)(IN PVOID ImagePointer, OUT PUSHORT SubSystem); |
| 85 | +typedef EFI_STATUS (*PBL_EXECIMAGE_LOAD_IMAGE)(IN PEFI_FILE_HANDLE FileHandle, IN LOADER_MEMORY_TYPE MemoryType, IN PVOID VirtualAddress, OUT PVOID *ImagePointer); |
| 86 | +typedef EFI_STATUS (*PBL_EXECIMAGE_RELOCATE_IMAGE)(IN PVOID ImagePointer, IN EFI_VIRTUAL_ADDRESS Address); |
| 87 | +typedef EFI_STATUS (*PBL_EXIT_BOOT_SERVICES)(IN UINT_PTR MapKey); |
| 88 | +typedef EFI_STATUS (*PBL_FIND_BOOT_PROTOCOL)(IN PWCHAR SystemType, OUT PEFI_GUID BootProtocolGuid); |
| 89 | +typedef EFI_STATUS (*PBL_FREE_PAGES)(IN UINT64 Size, IN EFI_PHYSICAL_ADDRESS Memory); |
| 90 | +typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory); |
| 91 | +typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap); |
| 92 | +typedef PLIST_ENTRY (*PBL_GET_MODULES_LIST)(); |
| 93 | +typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)(); |
| 94 | +typedef EFI_STATUS (*PBL_INSTALL_XT_PROTOCOL)(IN PVOID Interface, IN PEFI_GUID Guid); |
| 95 | +typedef EFI_STATUS (*PBL_INVOKE_BOOT_PROTOCOL)(IN PLIST_ENTRY OptionsList); |
| 96 | +typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle); |
| 97 | +typedef EFI_STATUS (*PBL_OPEN_XT_PROTOCOL)(OUT PEFI_HANDLE Handle, OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid); |
| 98 | +typedef EFI_STATUS (*PBL_READ_FILE)(IN PEFI_FILE_HANDLE DirHandle, IN CONST PWCHAR FileName, OUT PVOID *FileData, OUT PSIZE_T FileSize); |
| 99 | +typedef EFI_STATUS (*PBL_REGISTER_BOOT_PROTOCOL)(IN PWCHAR SystemType, IN PEFI_GUID BootProtocolGuid); |
| 100 | +typedef VOID (*PBL_REGISTER_XT_BOOT_MENU)(PVOID BootMenuRoutine); |
| 101 | +typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds); |
| 102 | +typedef VOID (*PBL_TUI_DISPLAY_ERROR_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message); |
| 103 | +typedef VOID (*PBL_TUI_DISPLAY_INFO_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message); |
| 104 | +typedef VOID (*PBL_TUI_DISPLAY_INPUT_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message, IN PWCHAR *InputFieldText); |
| 105 | +typedef XTBL_DIALOG_HANDLE (*PBL_TUI_DISPLAY_PROGRESS_DIALOG)(IN PWCHAR Caption, IN PWCHAR Message, IN UCHAR Percentage); |
| 106 | +typedef VOID (*PBL_TUI_UPDATE_PROGRESS_BAR)(IN PXTBL_DIALOG_HANDLE Handle, IN PWCHAR Message, IN UCHAR Percentage); |
| 107 | +typedef EFI_STATUS (*PBL_WAIT_FOR_EFI_EVENT)(IN UINT_PTR NumberOfEvents, IN PEFI_EVENT Event, OUT PUINT_PTR Index); |
| 108 | +typedef VOID (*PBL_XT_BOOT_MENU)(); |
| 109 | + |
| 110 | +/* Boot parameters structure */ |
| 111 | +typedef struct _XTBL_BOOT_PARAMETERS |
| 112 | +{ |
| 113 | + PEFI_DEVICE_PATH_PROTOCOL DevicePath; |
| 114 | + PWCHAR ArcName; |
| 115 | + PWCHAR SystemPath; |
| 116 | + PWCHAR SystemType; |
| 117 | + PWCHAR KernelFile; |
| 118 | + PWCHAR InitrdFile; |
| 119 | + PWCHAR HalFile; |
| 120 | + PWCHAR Parameters; |
| 121 | +} XTBL_BOOT_PARAMETERS, *PXTBL_BOOT_PARAMETERS; |
| 122 | + |
| 123 | +/* Boot menu list structure */ |
| 124 | +typedef struct _XTBL_BOOTMENU_ITEM |
| 125 | +{ |
| 126 | + PWCHAR EntryName; |
| 127 | + PLIST_ENTRY Options; |
| 128 | +} XTBL_BOOTMENU_ITEM, *PXTBL_BOOTMENU_ITEM; |
| 129 | + |
| 130 | +/* XTLDR Configuration data */ |
| 131 | +typedef struct _XTBL_CONFIG_ENTRY |
| 132 | +{ |
| 133 | + LIST_ENTRY Flink; |
| 134 | + PWCHAR Name; |
| 135 | + PWCHAR Value; |
| 136 | +} XTBL_CONFIG_ENTRY, *PXTBL_CONFIG_ENTRY; |
| 137 | + |
| 138 | +/* XTLDR Configuration section */ |
| 139 | +typedef struct _XTBL_CONFIG_SECTION |
| 140 | +{ |
| 141 | + LIST_ENTRY Flink; |
| 142 | + LIST_ENTRY Options; |
| 143 | + PWCHAR SectionName; |
| 144 | +} XTBL_CONFIG_SECTION, *PXTBL_CONFIG_SECTION; |
| 145 | + |
| 146 | +/* XTLDR Dialog handle data */ |
| 147 | +typedef struct _XTBL_DIALOG_HANDLE |
| 148 | +{ |
| 149 | + UCHAR Attributes; |
| 150 | + UCHAR DialogColor; |
| 151 | + UCHAR TextColor; |
| 152 | + UINT_PTR ResX; |
| 153 | + UINT_PTR ResY; |
| 154 | + UINT_PTR PosX; |
| 155 | + UINT_PTR PosY; |
| 156 | + UINT_PTR Width; |
| 157 | + UINT_PTR Height; |
| 158 | +} XTBL_DIALOG_HANDLE, *PXTBL_DIALOG_HANDLE; |
| 159 | + |
| 160 | +/* Registered boot protocol structure */ |
| 161 | +typedef struct _XTBL_KNOWN_BOOT_PROTOCOL |
| 162 | +{ |
| 163 | + LIST_ENTRY Flink; |
| 164 | + PWCHAR SystemType; |
| 165 | + EFI_GUID Guid; |
| 166 | +} XTBL_KNOWN_BOOT_PROTOCOL, *PXTBL_KNOWN_BOOT_PROTOCOL; |
| 167 | + |
| 168 | +/* XTLDR Module dependencies data */ |
| 169 | +typedef struct _XTBL_MODULE_DEPS |
| 170 | +{ |
| 171 | + LIST_ENTRY Flink; |
| 172 | + PWCHAR ModuleName; |
| 173 | +} XTBL_MODULE_DEPS, *PXTBL_MODULE_DEPS; |
| 174 | + |
| 175 | +/* XTLDR Module information data */ |
| 176 | +typedef struct _XTBL_MODULE_INFO |
| 177 | +{ |
| 178 | + LIST_ENTRY Flink; |
| 179 | + PWCHAR ModuleName; |
| 180 | + PWCHAR ModuleDescription; |
| 181 | + LIST_ENTRY Dependencies; |
| 182 | + PVOID ModuleBase; |
| 183 | + UINT64 ModuleSize; |
| 184 | + UINT32 Revision; |
| 185 | + PEFI_IMAGE_UNLOAD UnloadModule; |
| 186 | +} XTBL_MODULE_INFO, *PXTBL_MODULE_INFO; |
| 187 | + |
| 188 | +/* XTLDR Status data */ |
| 189 | +typedef struct _XTBL_STATUS |
| 190 | +{ |
| 191 | + PBL_XT_BOOT_MENU BootMenu; |
| 192 | + BOOLEAN BootServices; |
| 193 | + ULONG DebugPort; |
| 194 | + INT_PTR SecureBoot; |
| 195 | + CPPORT SerialPort; |
| 196 | +} XTBL_STATUS, *PXTBL_STATUS; |
| 197 | + |
| 198 | +/* XTLDR Boot protocol structure */ |
| 199 | +typedef struct _XTBL_BOOT_PROTOCOL |
| 200 | +{ |
| 201 | + PBL_BOOTPROTO_BOOT_SYSTEM BootSystem; |
| 202 | +} XTBL_BOOT_PROTOCOL, *PXTBL_BOOT_PROTOCOL; |
| 203 | + |
| 204 | +/* XTLDR Executable image protocol structure */ |
| 205 | +typedef struct _XTBL_EXECUTABLE_IMAGE_PROTOCOL |
| 206 | +{ |
| 207 | + PBL_EXECIMAGE_GET_ENTRY_POINT GetEntryPoint; |
| 208 | + PBL_EXECIMAGE_GET_MACHINE_TYPE GetMachineType; |
| 209 | + // PBL_EXECIMAGE_GET_SECTION GetSection; |
| 210 | + PBL_EXECIMAGE_GET_SUBSYSTEM GetSubSystem; |
| 211 | + // PBL_EXECIMAGE_GET_VERSION GetVersion; |
| 212 | + PBL_EXECIMAGE_LOAD_IMAGE LoadImage; |
| 213 | + // PBL_EXECIMAGE_PRINT_INFO PrintDebugInfo; |
| 214 | + PBL_EXECIMAGE_RELOCATE_IMAGE RelocateImage; |
| 215 | + // PBL_EXECUTABLE_VERIFY_IMAGE VerifyImage; |
| 216 | +} XTBL_EXECUTABLE_IMAGE_PROTOCOL, *PXTBL_EXECUTABLE_IMAGE_PROTOCOL; |
| 217 | + |
| 218 | +/* XTLDR Loader protocol */ |
| 219 | +typedef struct _XTBL_LOADER_PROTOCOL |
| 220 | +{ |
| 221 | + struct |
| 222 | + { |
| 223 | + PBL_FIND_BOOT_PROTOCOL FindProtocol; |
| 224 | + PBL_BOOTMENU_INITIALIZE_OS_LIST InitializeMenuList; |
| 225 | + PBL_INVOKE_BOOT_PROTOCOL InvokeProtocol; |
| 226 | + PBL_REGISTER_XT_BOOT_MENU RegisterMenu; |
| 227 | + PBL_REGISTER_BOOT_PROTOCOL RegisterProtocol; |
| 228 | + } Boot; |
| 229 | + struct |
| 230 | + { |
| 231 | + PBL_CONFIG_GET_VALUE GetValue; |
| 232 | + } Config; |
| 233 | + struct |
| 234 | + { |
| 235 | + PBL_CLEAR_CONSOLE_LINE ClearLine; |
| 236 | + PBL_CONSOLE_CLEAR_SCREEN ClearScreen; |
| 237 | + PBL_CONSOLE_DISABLE_CURSOR DisableCursor; |
| 238 | + PBL_CONSOLE_ENABLE_CURSOR EnableCursor; |
| 239 | + PBL_CONSOLE_PRINT Print; |
| 240 | + PBL_CONSOLE_QUERY_MODE QueryMode; |
| 241 | + PBL_CONSOLE_READ_KEY_STROKE ReadKeyStroke; |
| 242 | + PBL_CONSOLE_RESET_INPUT_BUFFER ResetInputBuffer; |
| 243 | + PBL_CONSOLE_SET_ATTRIBUTES SetAttributes; |
| 244 | + PBL_CONSOLE_SET_CURSOR_POSITION SetCursorPosition; |
| 245 | + PBL_CONSOLE_WRITE Write; |
| 246 | + } Console; |
| 247 | + struct |
| 248 | + { |
| 249 | + PBL_DEBUG_PRINT Print; |
| 250 | + } Debug; |
| 251 | + struct |
| 252 | + { |
| 253 | + PBL_CLOSE_VOLUME CloseVolume; |
| 254 | + PBL_OPEN_VOLUME OpenVolume; |
| 255 | + PBL_READ_FILE ReadFile; |
| 256 | + } Disk; |
| 257 | + struct |
| 258 | + { |
| 259 | + PBL_ALLOCATE_PAGES AllocatePages; |
| 260 | + PBL_ALLOCATE_POOL AllocatePool; |
| 261 | + PBL_FREE_PAGES FreePages; |
| 262 | + PBL_FREE_POOL FreePool; |
| 263 | + PBL_GET_MEMORY_MAP GetMemoryMap; |
| 264 | + } Memory; |
| 265 | + struct |
| 266 | + { |
| 267 | + PBL_CLOSE_XT_PROTOCOL Close; |
| 268 | + PBL_GET_MODULES_LIST GetModulesList; |
| 269 | + PBL_INSTALL_XT_PROTOCOL Install; |
| 270 | + PBL_OPEN_XT_PROTOCOL Open; |
| 271 | + } Protocol; |
| 272 | + struct |
| 273 | + { |
| 274 | + PBL_TUI_DISPLAY_ERROR_DIALOG DisplayErrorDialog; |
| 275 | + PBL_TUI_DISPLAY_INFO_DIALOG DisplayInfoDialog; |
| 276 | + PBL_TUI_DISPLAY_INPUT_DIALOG DisplayInputDialog; |
| 277 | + PBL_TUI_DISPLAY_PROGRESS_DIALOG DisplayProgressDialog; |
| 278 | + PBL_TUI_UPDATE_PROGRESS_BAR UpdateProgressBar; |
| 279 | + } Tui; |
| 280 | + struct |
| 281 | + { |
| 282 | + PBL_EXIT_BOOT_SERVICES ExitBootServices; |
| 283 | + PBL_GET_SECURE_BOOT_STATUS GetSecureBootStatus; |
| 284 | + PBL_SLEEP_EXECUTION SleepExecution; |
| 285 | + PBL_WAIT_FOR_EFI_EVENT WaitForEfiEvent; |
| 286 | + } Util; |
| 287 | +} XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL; |
| 288 | + |
| 289 | +#endif /* __XTDK_BLTYPES_H */ |
0 commit comments