/** @file Copyright (c) 2021, American Megatrends International LLC. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __LINUX_BOOT_PRIVATE__H__ #define __LINUX_BOOT_PRIVATE__H__ #ifdef __cplusplus extern "C" { #endif // #ifdef __cplusplus //--------------------------------------------------------------------------- //#include #define BOOTSIG 0x1FE #define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */ #define E820_RAM 1 #define E820_RESERVED 2 #define E820_ACPI 3 #define E820_NVS 4 #define E820_UNUSABLE 5 #pragma pack(1) struct SetupHeader { UINT8 SetupSecs; // Sectors for setup code UINT16 Rootflags; UINT32 SysSize; UINT16 RamSize; UINT16 VideoMode; UINT16 RootDev; UINT16 Signature; // Boot signature UINT16 Jump; UINT32 Header; UINT16 Version; UINT16 SuSwitch; UINT16 SetupSeg; UINT16 StartSys; UINT16 KernelVer; UINT8 LoaderId; UINT8 LoadFlags; UINT16 MoveSize; UINT32 Code32Start; // Start of code loaded high UINT32 RamDiskStart; // Start of initial ramdisk UINT32 RamDiskLen; // Length of initial ramdisk UINT32 BootSectkludge; UINT16 HeapEnd; UINT8 ExtLoaderVer; // Extended boot loader version UINT8 ExtLoaderType; // Extended boot loader ID UINT32 CmdLinePtr; // 32-bit pointer to the kernel command line UINT32 RamDiskMax; // Highest legal initrd address UINT32 KernelAlignment; // Physical addr alignment required for kernel UINT8 RelocatableKernel; // Whether kernel is relocatable or not UINT8 MinAlignment; UINT16 XloadFlags; UINT32 CmdlineSize; UINT32 HardwareSubarch; UINT64 HardwareSubarchData; UINT32 PayloadOffset; UINT32 PayloadLength; UINT64 SetupData; UINT64 PrefAddress; UINT32 InitSize; UINT32 HandoverOffset; }; struct EfiInfo { UINT32 EfiLoaderSignature; UINT32 EfiSystab; UINT32 EfiMemdescSize; UINT32 EfiMemdescVersion; UINT32 EfiMemMap; UINT32 EfiMemMapSize; UINT32 EfiSystabHi; UINT32 EfiMemMapHi; }; struct E820Entry { UINT64 Addr; // start of memory segment UINT64 Size; // size of memory segment UINT32 Type; // type of memory segment }; struct ScreenInfo { UINT8 OrigX; // 0x00 UINT8 OrigY; // 0x01 UINT16 ExtMemK; // 0x02 UINT16 OrigVideoPage; // 0x04 UINT8 OrigVideoMode; // 0x06 UINT8 OrigVideoCols; // 0x07 UINT8 Flags; // 0x08 UINT8 Unused2; // 0x09 UINT16 OrigVideoEgaBx;// 0x0a UINT16 Unused3; // 0x0c UINT8 OrigVideoLines; // 0x0e UINT8 OrigVideoIsVGA; // 0x0f UINT16 OrigVideoPoints;// 0x10 // VESA graphic mode -- linear frame buffer UINT16 LfbWidth; // 0x12 UINT16 LfbHeight; // 0x14 UINT16 LfbDepth; // 0x16 UINT32 LfbBase; // 0x18 UINT32 LfbSize; // 0x1c UINT16 ClMagic, ClOffset; // 0x20 UINT16 LfbLineLength; // 0x24 UINT8 RedSize; // 0x26 UINT8 RedPos; // 0x27 UINT8 GreenSize; // 0x28 UINT8 GreenPos; // 0x29 UINT8 BlueSize; // 0x2a UINT8 BluePos; // 0x2b UINT8 RsvdSize; // 0x2c UINT8 RsvdPos; // 0x2d UINT16 VesaPmSeg; // 0x2e UINT16 VesaPmOff; // 0x30 UINT16 Pages; // 0x32 UINT16 VesaAttributes; // 0x34 UINT32 Capabilities; // 0x36 UINT8 Reserved[6]; // 0x3a }; struct BootParams { struct ScreenInfo ScreenInfo; UINT8 ApmBiosInfo[0x14]; UINT8 Pad2[4]; UINT64 TbootAddr; UINT8 IstInfo[0x10]; UINT8 Pad3[16]; UINT8 Hd0Info[16]; UINT8 Hd1Info[16]; UINT8 SysDescTable[0x10]; UINT8 OlpcOfwHeader[0x10]; UINT8 Pad4[128]; UINT8 EdidInfo[0x80]; struct EfiInfo EfiInfo; UINT32 AltMemK; UINT32 Scratch; UINT8 E820Entries; UINT8 EddBufEntries; UINT8 EddMbrSigBufEntries; UINT8 Pad6[6]; struct SetupHeader Hdr; UINT8 Pad7[0x290-0x1f1-sizeof(struct SetupHeader)]; UINT32 EddMbrSigBuffer[16]; struct E820Entry E820Map[128]; UINT8 Pad8[48]; UINT8 EddBuf[0x1ec]; UINT8 Pad9[276]; }; #pragma pack () //--------------------------------------------------------------------------- #ifndef MIN #define MIN(x,y) ((x) < (y) ? (x) : (y)) #endif // #ifndef MIN #define KERNEL_SETUP_SIZE 16384 //--------------------------------------------------------------------------- /// /// Function prototypes from Bds module /// VOID ConnectEverything(); VOID RecoverTheMemoryAbove4Gb(); VOID SignalAllDriversConnectedEvent(); VOID SignalProtocolEvent(IN EFI_GUID *ProtocolGuid); #if LINUXBOOT_SIGNAL_EXITPMAUTH == 1 VOID SignalExitPmAuthProtocolEvent(VOID); #endif // #if LINUXBOOT_SIGNAL_EXITPMAUTH == 1 typedef VOID (BDS_CONTROL_FLOW_FUNCTION)(); //--------------------------------------------------------------------------- /****** DO NOT WRITE BELOW THIS LINE *******/ #ifdef __cplusplus } #endif // #ifdef __cplusplus #endif // #ifndef __LINUX_BOOT_PRIVATE__H__