mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-27 15:04:31 +00:00
362 lines
7.4 KiB
C
362 lines
7.4 KiB
C
/*
|
|
This file is part of Fennix Kernel.
|
|
|
|
Fennix Kernel is free software: you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation, either version 3 of
|
|
the License, or (at your option) any later version.
|
|
|
|
Fennix Kernel is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <types.h>
|
|
|
|
#ifdef __x86_64__
|
|
#define EFIAPI __attribute__((__ms_abi__))
|
|
#else
|
|
#define EFIAPI
|
|
#endif
|
|
|
|
#define IN
|
|
#define OUT
|
|
#define OPTIONAL
|
|
#define CONST const
|
|
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
|
|
#define MAX_BIT (~((UINTN) - 1 >> 1))
|
|
|
|
typedef intptr_t INTN;
|
|
typedef uintptr_t UINTN;
|
|
typedef int8_t INT8;
|
|
typedef uint8_t UINT8;
|
|
typedef int16_t INT16;
|
|
typedef uint16_t UINT16;
|
|
typedef int32_t INT32;
|
|
typedef uint32_t UINT32;
|
|
typedef int64_t INT64;
|
|
typedef uint64_t UINT64;
|
|
typedef int8_t CHAR8;
|
|
// typedef uint16_t CHAR16;
|
|
typedef wchar_t CHAR16;
|
|
|
|
typedef void VOID;
|
|
typedef bool BOOLEAN;
|
|
|
|
typedef INTN EFI_STATUS;
|
|
typedef VOID *EFI_HANDLE;
|
|
typedef VOID *EFI_EVENT;
|
|
|
|
typedef UINT64 EFI_PHYSICAL_ADDRESS;
|
|
typedef UINT64 EFI_VIRTUAL_ADDRESS;
|
|
|
|
typedef EFI_STATUS RETURN_STATUS;
|
|
typedef UINTN EFI_TPL;
|
|
|
|
enum EFI_MEMORY_TYPE
|
|
{
|
|
EfiReservedMemoryType,
|
|
EfiLoaderCode,
|
|
EfiLoaderData,
|
|
EfiBootServicesCode,
|
|
EfiBootServicesData,
|
|
EfiRuntimeServicesCode,
|
|
EfiRuntimeServicesData,
|
|
EfiConventionalMemory,
|
|
EfiUnusableMemory,
|
|
EfiACPIReclaimMemory,
|
|
EfiACPIMemoryNVS,
|
|
EfiMemoryMappedIO,
|
|
EfiMemoryMappedIOPortSpace,
|
|
EfiPalCode,
|
|
EfiPersistentMemory,
|
|
EfiMaxMemoryType,
|
|
MEMORY_TYPE_OEM_RESERVED_MIN = 0x70000000,
|
|
MEMORY_TYPE_OEM_RESERVED_MAX = 0x7FFFFFFF,
|
|
MEMORY_TYPE_OS_RESERVED_MIN = 0x80000000,
|
|
MEMORY_TYPE_OS_RESERVED_MAX = 0xFFFFFFFF
|
|
};
|
|
|
|
enum EFI_ALLOCATE_TYPE
|
|
{
|
|
AllocateAnyPages,
|
|
AllocateMaxAddress,
|
|
AllocateAddress,
|
|
MaxAllocateType
|
|
};
|
|
|
|
enum EFI_TIMER_DELAY
|
|
{
|
|
TimerCancel,
|
|
TimerPeriodic,
|
|
TimerRelative
|
|
};
|
|
|
|
enum EFI_LOCATE_SEARCH_TYPE
|
|
{
|
|
AllHandles,
|
|
ByRegisterNotify,
|
|
ByProtocol
|
|
};
|
|
|
|
enum EFI_INTERFACE_TYPE
|
|
{
|
|
EFI_NATIVE_INTERFACE
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
EfiResetCold,
|
|
EfiResetWarm,
|
|
EfiResetShutdown
|
|
} EFI_RESET_TYPE;
|
|
|
|
#include <efi/errors.h>
|
|
|
|
struct EFI_OPEN_PROTOCOL_INFORMATION_ENTRY
|
|
{
|
|
EFI_HANDLE AgentHandle;
|
|
EFI_HANDLE ControllerHandle;
|
|
UINT32 Attributes;
|
|
UINT32 OpenCount;
|
|
};
|
|
|
|
struct EFI_DEVICE_PATH_PROTOCOL
|
|
{
|
|
UINT8 Type;
|
|
UINT8 SubType;
|
|
UINT8 Length[2];
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
UINT16 ScanCode;
|
|
CHAR16 UnicodeChar;
|
|
} EFI_INPUT_KEY;
|
|
|
|
struct EFI_TABLE_HEADER
|
|
{
|
|
UINT64 Signature;
|
|
UINT32 Revision;
|
|
UINT32 HeaderSize;
|
|
UINT32 CRC32;
|
|
UINT32 Reserved;
|
|
};
|
|
|
|
struct _EFI_GUID
|
|
{
|
|
UINT32 Data1;
|
|
UINT16 Data2;
|
|
UINT16 Data3;
|
|
UINT8 Data4[8];
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
_EFI_GUID CapsuleGuid;
|
|
UINT32 HeaderSize;
|
|
UINT32 Flags;
|
|
UINT32 CapsuleImageSize;
|
|
} EFI_CAPSULE_HEADER;
|
|
|
|
typedef struct
|
|
{
|
|
UINT16 Year;
|
|
UINT8 Month;
|
|
UINT8 Day;
|
|
UINT8 Hour;
|
|
UINT8 Minute;
|
|
UINT8 Second;
|
|
UINT8 Pad1;
|
|
UINT32 Nanosecond;
|
|
INT16 TimeZone;
|
|
UINT8 Daylight;
|
|
UINT8 Pad2;
|
|
} EFI_TIME;
|
|
|
|
typedef struct
|
|
{
|
|
UINT32 Resolution;
|
|
UINT32 Accuracy;
|
|
BOOLEAN SetsToZero;
|
|
} EFI_TIME_CAPABILITIES;
|
|
|
|
typedef struct _EFI_GUID EFI_GUID;
|
|
typedef struct _EFI_GUID GUID;
|
|
|
|
typedef struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
|
typedef struct _EFI_MEMORY_DESCRIPTOR EFI_MEMORY_DESCRIPTOR;
|
|
|
|
#include <efi/calls.h>
|
|
#include <efi/tables.h>
|
|
|
|
struct _EFI_SIMPLE_TEXT_INPUT_PROTOCOL
|
|
{
|
|
EFI_INPUT_RESET Reset;
|
|
EFI_INPUT_READ_KEY ReadKeyStroke;
|
|
EFI_EVENT WaitForKey;
|
|
};
|
|
|
|
struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
|
|
{
|
|
void * /*EFI_TEXT_RESET*/ Reset;
|
|
|
|
void * /*EFI_TEXT_STRING*/ OutputString;
|
|
void * /*EFI_TEXT_TEST_STRING*/ TestString;
|
|
|
|
void * /*EFI_TEXT_QUERY_MODE*/ QueryMode;
|
|
void * /*EFI_TEXT_SET_MODE*/ SetMode;
|
|
void * /*EFI_TEXT_SET_ATTRIBUTE*/ SetAttribute;
|
|
|
|
void * /*EFI_TEXT_CLEAR_SCREEN*/ ClearScreen;
|
|
void * /*EFI_TEXT_SET_CURSOR_POSITION*/ SetCursorPosition;
|
|
void * /*EFI_TEXT_ENABLE_CURSOR*/ EnableCursor;
|
|
|
|
void /*EFI_SIMPLE_TEXT_OUTPUT_MODE*/ *Mode;
|
|
};
|
|
|
|
struct EFI_CONFIGURATION_TABLE
|
|
{
|
|
EFI_GUID VendorGuid;
|
|
VOID *VendorTable;
|
|
};
|
|
|
|
struct EFI_BOOT_SERVICES;
|
|
|
|
typedef struct
|
|
{
|
|
EFI_TABLE_HEADER Hdr;
|
|
|
|
//
|
|
// Time services
|
|
//
|
|
|
|
EFI_GET_TIME GetTime;
|
|
EFI_SET_TIME SetTime;
|
|
EFI_GET_WAKEUP_TIME GetWakeupTime;
|
|
EFI_SET_WAKEUP_TIME SetWakeupTime;
|
|
|
|
//
|
|
// Virtual memory services
|
|
//
|
|
|
|
EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
|
|
EFI_CONVERT_POINTER ConvertPointer;
|
|
|
|
//
|
|
// Variable serviers
|
|
//
|
|
|
|
EFI_GET_VARIABLE GetVariable;
|
|
EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
|
|
EFI_SET_VARIABLE SetVariable;
|
|
|
|
//
|
|
// Misc
|
|
//
|
|
|
|
EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount;
|
|
EFI_RESET_SYSTEM ResetSystem;
|
|
|
|
EFI_UPDATE_CAPSULE UpdateCapsule;
|
|
EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities;
|
|
EFI_QUERY_VARIABLE_INFO QueryVariableInfo;
|
|
} EFI_RUNTIME_SERVICES;
|
|
|
|
typedef struct
|
|
{
|
|
EFI_TABLE_HEADER Hdr;
|
|
CHAR16 *FirmwareVendor;
|
|
UINT32 FirmwareRevision;
|
|
EFI_HANDLE ConsoleInHandle;
|
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
|
|
EFI_HANDLE ConsoleOutHandle;
|
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
|
EFI_HANDLE StandardErrorHandle;
|
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr;
|
|
EFI_RUNTIME_SERVICES *RuntimeServices;
|
|
EFI_BOOT_SERVICES *BootServices;
|
|
UINTN NumberOfTableEntries;
|
|
EFI_CONFIGURATION_TABLE *ConfigurationTable;
|
|
} EFI_SYSTEM_TABLE;
|
|
|
|
struct _EFI_MEMORY_DESCRIPTOR
|
|
{
|
|
UINT32 Type;
|
|
EFI_PHYSICAL_ADDRESS PhysicalStart;
|
|
EFI_VIRTUAL_ADDRESS VirtualStart;
|
|
UINT64 NumberOfPages;
|
|
UINT64 Attribute;
|
|
};
|
|
|
|
struct EFI_BOOT_SERVICES
|
|
{
|
|
EFI_TABLE_HEADER Hdr;
|
|
EFI_RAISE_TPL RaiseTPL;
|
|
EFI_RESTORE_TPL RestoreTPL;
|
|
|
|
EFI_ALLOCATE_PAGES AllocatePages;
|
|
EFI_FREE_PAGES FreePages;
|
|
EFI_GET_MEMORY_MAP GetMemoryMap;
|
|
EFI_ALLOCATE_POOL AllocatePool;
|
|
EFI_FREE_POOL FreePool;
|
|
|
|
EFI_CREATE_EVENT CreateEvent;
|
|
EFI_SET_TIMER SetTimer;
|
|
EFI_WAIT_FOR_EVENT WaitForEvent;
|
|
EFI_SIGNAL_EVENT SignalEvent;
|
|
EFI_CLOSE_EVENT CloseEvent;
|
|
EFI_CHECK_EVENT CheckEvent;
|
|
|
|
EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
|
|
EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
|
|
EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
|
|
EFI_HANDLE_PROTOCOL HandleProtocol;
|
|
VOID *Reserved;
|
|
EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
|
|
EFI_LOCATE_HANDLE LocateHandle;
|
|
EFI_LOCATE_DEVICE_PATH LocateDevicePath;
|
|
EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
|
|
|
|
EFI_IMAGE_LOAD LoadImage;
|
|
EFI_IMAGE_START StartImage;
|
|
EFI_EXIT Exit;
|
|
EFI_IMAGE_UNLOAD UnloadImage;
|
|
EFI_EXIT_BOOT_SERVICES ExitBootServices;
|
|
|
|
EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
|
|
EFI_STALL Stall;
|
|
EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
|
|
|
|
EFI_CONNECT_CONTROLLER ConnectController;
|
|
EFI_DISCONNECT_CONTROLLER DisconnectController;
|
|
|
|
EFI_OPEN_PROTOCOL OpenProtocol;
|
|
EFI_CLOSE_PROTOCOL CloseProtocol;
|
|
EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation;
|
|
|
|
EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle;
|
|
EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer;
|
|
EFI_LOCATE_PROTOCOL LocateProtocol;
|
|
|
|
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
|
|
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
|
|
|
|
EFI_CALCULATE_CRC32 CalculateCrc32;
|
|
|
|
EFI_COPY_MEM CopyMem;
|
|
EFI_SET_MEM SetMem;
|
|
};
|
|
|
|
VOID InitializeLib(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable);
|
|
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2);
|