freebsd-dev/sys/ia64/include/efi.h
2001-01-29 13:31:19 +00:00

618 lines
14 KiB
C

/*-
* Copyright (c) 2000 Doug Rabson
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _MACHINE_EFI_H_
#define _MACHINE_EFI_H_
typedef u_int8_t BOOLEAN;
typedef int32_t INTN;
typedef u_int32_t UINTN;
typedef int8_t INT8;
typedef u_int8_t UINT8;
typedef int16_t INT16;
typedef u_int16_t UINT16;
typedef int32_t INT32;
typedef u_int32_t UINT32;
typedef int64_t INT64;
typedef u_int64_t UINT64;
typedef UINT8 CHAR8;
typedef UINT16 CHAR16;
typedef struct _EFI_GUID {
UINT32 Data1;
UINT16 Data2;
UINT16 Data3;
UINT8 Data4[8];
} EFI_GUID;
typedef INTN EFI_STATUS;
typedef void *EFI_HANDLE;
typedef void *EFI_EVENT;
typedef UINT64 EFI_LBA;
typedef UINTN EFI_TPL;
/*
* EFI_STATUS Error Codes.
*/
#define EFI_SUCCESS 0
#define EFI_LOAD_ERROR 1
#define EFI_INVALID_PARAMETER 2
#define EFI_UNSUPPORTED 3
#define EFI_BAD_BUFFER_SIZE 4
#define EFI_BUFFER_TOO_SMALL 5
#define EFI_NOT_READY 6
#define EFI_DEVICE_ERROR 7
#define EFI_WRITE_PROTECTED 8
#define EFI_OUT_OF_RESOURCES 9
#define EFI_VOLUME_CORRUPTED 10
#define EFI_VOLUME_FULL 11
#define EFI_NO_MEDIA 12
#define EFI_MEDIA_CHANGED 13
#define EFI_NOT_FOUND 14
#define EFI_ACCESS_DENIED 15
#define EFI_NO_RESPONSE 16
#define EFI_NO_MAPPING 17
#define EFI_TIMEOUT 18
#define EFI_NOT_STARTED 19
#define EFI_ALREADY_STARTED 20
#define EFI_ABORTED 21
#define EFI_ICMP_ERROR 22
#define EFI_TFTP_ERROR 23
#define EFI_PROTOCOL_ERROR 24
/*
* EFI_STATUS Warning Codes.
*/
#define EFI_WARN_UNKNOWN_GLYPH 1
#define EFI_WARN_DELETE_FAILURE 2
#define EFI_WARN_WRITE_FAILURE 3
#define EFI_WARN_BUFFER_TOO_SMALL 4
typedef struct _EFI_MAC_ADDRESS {
CHAR8 Address[32];
} EFI_MAC_ADDRESS;
typedef struct _EFI_IPv4_ADDRESS {
CHAR8 Address[4];
} EFI_IPv4_ADDRESS;
typedef struct _EFI_IPv6_ADDRESS {
CHAR8 Address[16];
} EFI_IPv6_ADDRESS, EFI_IP_ADDRESS;
typedef struct _EFI_TIME {
UINT16 Year; /* 1998 - 20xx */
UINT8 Month; /* 1 - 12 */
UINT8 Day; /* 1 - 31 */
UINT8 Hour; /* 0 - 23 */
UINT8 Minute; /* 0 - 59 */
UINT8 Second; /* 0 - 59 */
UINT8 Pad1;
UINT32 Nanosecond; /* 0 - 999,999,999 */
INT16 TimeZone; /* -1440 - 1440 or 2047 */
UINT8 Daylight;
UINT8 Pad2;
} EFI_TIME;
typedef struct _EFI_TIME_CAPABILITIES {
UINT32 Resolution;
UINT32 Accuracy;
BOOLEAN SetsToZero;
} EFI_TIME_CAPABILITIES;
/*
* Reset types.
*/
typedef enum _EFI_RESET_TYPE {
EfiResetCold,
EfiResetWarm
} EFI_RESET_TYPE;
/*
* Allocate Types.
*/
typedef enum _EFI_ALLOCATE_TYPE {
AllocateAnyPages,
AllocateMaxAddress,
AllocateAddress,
MaxAllocateType
} EFI_ALLOCATE_TYPE;
/*
* Memory types.
*/
typedef enum _EFI_MEMORY_TYPE {
EfiReservedMemoryType,
EfiLoaderCode,
EfiLoaderData,
EfiBootServicesCode,
EfiBootServicesData,
EfiRuntimeServicesCode,
EfiRuntimeServicesData,
EfiConventionalMemory,
EfiUnusableMemory,
EfiAcpiReclaimMemory,
EfiAcpiMemoryNvs,
EfiMemoryMappedIo,
EfiMemoryMappedIoPortSpace,
EfiPalCode,
EfiMaxMemoryType
} EFI_MEMORY_TYPE;
/*
* Physical Address.
*/
typedef UINT64 EFI_PHYSICAL_ADDRESS;
/*
* Virtual Address.
*/
typedef UINT64 EFI_VIRTUAL_ADDRESS;
/*
* Memory Descriptor.
*/
typedef struct _EFI_MEMORY_DESCRIPTOR {
UINT32 Type;
EFI_PHYSICAL_ADDRESS PhysicalStart;
EFI_VIRTUAL_ADDRESS VirtualStart;
UINT64 NumberOfPages;
UINT64 Attribute;
} EFI_MEMORY_DESCRIPTOR;
#define EFI_MEMORY_DESCRIPTOR_VERSION 1
/*
* Memory Attribute Definitions.
*/
#define EFI_MEMORY_UC 0x0000000000000001
#define EFI_MEMORY_WC 0x0000000000000002
#define EFI_MEMORY_WT 0x0000000000000004
#define EFI_MEMORY_WB 0x0000000000000008
#define EFI_MEMORY_UCE 0x0000000000000010
#define EFI_MEMORY_WP 0x0000000000001000
#define EFI_MEMORY_RP 0x0000000000002000
#define EFI_MEMORY_XP 0x0000000000004000
#define EFI_MEMORY_RUNTIME 0x8000000000000000
/*
* Variable Attributes.
*/
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
#define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
/*
* Task Priority Levels.
*/
#define TPL_APPLICATION 4
#define TPL_CALLBACK 8
#define TPL_NOTIFY 16
#define TPL_HIGH_LEVEL 31
/*
* Event Types.
*/
#define EVT_TIMER 0x80000000
#define EVT_RUNTIME 0x40000000
#define EVT_RUNTIME_CONTEXT 0x20000000
#define EVT_NOTIFY_WAIT 0x00000100
#define EVT_NOTIFY_SIGNAL 0x00000200
#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
/*
* Event Notification Function.
*/
typedef void (*EFI_EVENT_NOTIFY)(EFI_EVENT Event,
void *Context);
/*
* Timer Delay
*/
typedef enum _EFI_TIMER_DELAY {
TimerCancel,
TimerPeriodic,
TimerRelative
} EFI_TIMER_DELAY;
/*
* Interface Types.
*/
typedef enum _EFI_INTERFACE_TYPE {
EFI_NATIVE_INTERFACE,
EFI_PCODE_INTERFACE
} EFI_INTERFACE_TYPE;
/*
* Search Type.
*/
typedef enum _EFI_LOCATE_SEARCH_TYPE {
AllHandles,
ByRegisterNotify,
ByProtocol
} EFI_LOCATE_SEARCH_TYPE;
/*
* Device Path.
*/
typedef struct _EFI_DEVICE_PATH {
UINT8 Type;
UINT8 SubType;
UINT8 Length[2];
} EFI_DEVICE_PATH;
/*
* SIMPLE_INPUT Protocol
*/
#define SIMPLE_INPUT_PROTOCOL \
{ 0x387477c1,0x69c7,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b }
typedef struct _EFI_INPUT_KEY {
UINT16 ScanCode;
CHAR16 UnicodeChar;
} EFI_INPUT_KEY;
typedef struct _SIMPLE_INPUT_INTERFACE SIMPLE_INPUT_INTERFACE;
struct _SIMPLE_INPUT_INTERFACE {
EFI_STATUS (*Reset)
(SIMPLE_INPUT_INTERFACE *This,
BOOLEAN ExtendedVerification);
EFI_STATUS (*ReadKey)
(SIMPLE_INPUT_INTERFACE *This,
EFI_INPUT_KEY *Key);
EFI_EVENT WaitForKey;
};
/*
* SIMPLE_TEXT_OUTPUT Protocol.
*/
#define SIMPLE_TEXT_OUTPUT_PROTOCOL \
{ 0x387477c2,0x69c7,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b }
typedef struct _SIMPLE_TEXT_OUTPUT_MODE {
INT32 MaxMode;
/* current settings */
INT32 Mode;
INT32 Attribute;
INT32 CursorColumn;
INT32 CursorRow;
BOOLEAN CursorVisible;
} SIMPLE_TEXT_OUTPUT_MODE;
typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE SIMPLE_TEXT_OUTPUT_INTERFACE;
struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
EFI_STATUS (*Reset)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
BOOLEAN ExtendedVerification);
EFI_STATUS (*OutputString)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
CHAR16 *String);
EFI_STATUS (*TestString)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
CHAR16 *String);
EFI_STATUS (*QueryMode)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
UINTN ModeNumber,
UINTN *Columns,
UINTN *Rows);
EFI_STATUS (*SetMode)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
UINTN ModeNumber);
EFI_STATUS (*SetAttribute)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
UINTN Attribute);
EFI_STATUS (*ClearScreen)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This);
EFI_STATUS (*SetCursorPosition)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
UINTN Column,
UINTN Row);
EFI_STATUS (*EnableCursor)
(SIMPLE_TEXT_OUTPUT_INTERFACE *This,
BOOLEAN Visible);
SIMPLE_TEXT_OUTPUT_MODE Mode;
};
/*
* Standard EFI table header.
*/
typedef struct _EFI_TABLE_HEADER {
u_int64_t Signature;
u_int32_t Revision;
u_int32_t HeaderSize;
u_int32_t CRC32;
u_int32_t Reserved;
} EFI_TABLE_HEADER;
/*
* EFI Runtime Services Table.
*/
#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
#define EFI_RUNTIME_SERVICES_REVISION ((1<<16) | 99)
typedef struct _EFI_RUNTIME_SERVICES {
EFI_TABLE_HEADER Hdr;
/*
* Time Services.
*/
EFI_STATUS (*GetTime)
(EFI_TIME *Time,
EFI_TIME_CAPABILITIES *Capabilities);
EFI_STATUS (*SetTime)
(EFI_TIME *Time);
EFI_STATUS (*GetWakeupTime)
(BOOLEAN *Enabled,
BOOLEAN *Pending,
EFI_TIME *Time);
EFI_STATUS (*SetWakeupTime)
(BOOLEAN Enable,
EFI_TIME *Time);
/*
* Virtual Memory Services.
*/
EFI_STATUS (*SetVirtualAddressMap)
(UINTN MemoryMapSize,
UINTN DescriptorSize,
UINT32 DescriptorVersion,
EFI_MEMORY_DESCRIPTOR *VirtualMap);
EFI_STATUS (*ConvertPointer)
(UINTN DebugDisposition,
void **Address);
/*
* Variable Services.
*/
EFI_STATUS (*GetVariable)
(CHAR16 *VariableName,
EFI_GUID *VendorGuid,
UINT32 *Attributes,
UINTN *DataSize,
void *Data);
EFI_STATUS (*GetNextVariableName)
(UINTN *VariableNameSize,
CHAR16 *VariableName,
EFI_GUID *VendorGuid);
EFI_STATUS (*SetVariable)
(CHAR16 *VariableName,
EFI_GUID *VendorGuid,
UINT32 Attributes,
UINTN DataSize,
void *Data);
/*
* Miscellaneous Services.
*/
EFI_STATUS (*GetNextHighMonotonicCount)
(UINT32 *HighCount);
EFI_STATUS (*ResetSystem)
(EFI_RESET_TYPE ResetType,
EFI_STATUS ResetStatus,
UINTN DataSize,
CHAR16 *ResetData);
} EFI_RUNTIME_SERVICES;
/*
* Boot Services Table.
*/
#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
#define EFI_BOOT_SERVICES_REVISION ((0<<16) | 91)
typedef struct _EFI_BOOT_SERVICES {
EFI_TABLE_HEADER Hdr;
/*
* Task Priority Services.
*/
EFI_TPL (*RaiseTPL)
(EFI_TPL NewTpl);
void (*RestoreTPL)
(EFI_TPL OldTpl);
/*
* Memory Services.
*/
EFI_STATUS (*AllocatePages)
(EFI_ALLOCATE_TYPE Type,
EFI_MEMORY_TYPE MemoryType,
UINTN Pages,
EFI_PHYSICAL_ADDRESS *Memory);
EFI_STATUS (*FreePages)
(EFI_PHYSICAL_ADDRESS Memory,
UINTN Pages);
EFI_STATUS (*GetMemoryMap)
(UINTN *MemoryMapSize,
EFI_MEMORY_DESCRIPTOR *MemoryMap,
UINTN *MapKey,
UINTN *DescriptorSize,
UINT32 *DescriptorVersion);
EFI_STATUS (*AllocatePool)
(EFI_MEMORY_TYPE *PoolType,
UINTN Size,
void **Buffer);
EFI_STATUS (*FreePool)
(void *Buffer);
/*
* Event & Timer Services.
*/
EFI_STATUS (*CreateEvent)
(UINT32 Type,
EFI_TPL NotifyTpl,
EFI_EVENT_NOTIFY NotifyFunction,
void *NotifyContext,
EFI_EVENT *Event);
EFI_STATUS (*SetTimer)
(EFI_EVENT Event,
EFI_TIMER_DELAY Type,
UINT64 TriggerTime);
EFI_STATUS (*WaitForEvent)
(UINTN NumberOfEvents,
EFI_EVENT *Event,
UINTN *Index);
EFI_STATUS (*SignalEvent)
(EFI_EVENT Event);
EFI_STATUS (*CloseEvent)
(EFI_EVENT Event);
EFI_STATUS (*CheckEvent)
(EFI_EVENT Event);
/*
* Protocol Handler Services.
*/
EFI_STATUS (*InstallProtocolInterface)
(EFI_HANDLE *Handle,
EFI_GUID *Protocol,
EFI_INTERFACE_TYPE InterfaceType,
void *Interface);
EFI_STATUS (*ReinstallProtocolInterface)
(EFI_HANDLE *Handle,
EFI_GUID *Protocol,
void *OldInterface,
void *NewInterface);
EFI_STATUS (*UninstallProtocolInterface)
(EFI_HANDLE Handle,
EFI_GUID *Protocol,
void *Interface);
EFI_STATUS (*HandleProtocol)
(EFI_HANDLE Handle,
EFI_GUID *Protocol,
void **Interface);
EFI_STATUS (*PCHandleProtocol)
(EFI_HANDLE Handle,
EFI_GUID *Protocol,
void **Interface);
EFI_STATUS (*RegisterProtocolNotify)
(EFI_GUID *Protocol,
EFI_EVENT Event,
void **Registration);
EFI_STATUS (*LocateHandle)
(EFI_LOCATE_SEARCH_TYPE SearchType,
EFI_GUID *Protocol,
void *SearchKey,
UINTN *BufferSize,
EFI_HANDLE *Buffer);
EFI_STATUS (*LocateDevicePath)
(EFI_GUID *Protocol,
EFI_DEVICE_PATH **DevicePath,
EFI_HANDLE Device);
EFI_STATUS (*InstallConfigurationTable)
(EFI_GUID *Guid,
void *Table);
/*
* Image Services.
*/
EFI_STATUS (*LoadImage)
(BOOLEAN BootPolicy,
EFI_HANDLE ParentImageHandle,
EFI_DEVICE_PATH *FilePath,
void *SourceBuffer,
UINTN SourceSize,
EFI_HANDLE *ImageHandle);
EFI_STATUS (*StartImage)
(EFI_HANDLE ImageHandle,
UINTN *ExitDataSize,
CHAR16 *ExitData);
EFI_STATUS (*Exit)
(EFI_HANDLE ImageHandle,
EFI_STATUS ExitStatus,
UINTN ExitDataSize,
CHAR16 ExitData);
EFI_STATUS (*UnloadImage)
(EFI_HANDLE ImageHandle);
EFI_STATUS (*ExitBootServices)
(EFI_HANDLE ImageHandle,
UINTN MapKey);
/*
* Miscellaneous Services.
*/
EFI_STATUS (*GetNextMonotonicCount)
(UINT64 *Count);
EFI_STATUS (*Stall)
(UINTN Microseconds);
EFI_STATUS (*SetWatchdogTimer)
(UINTN Timeout,
UINT64 WatchdogCode,
UINTN DataSize,
CHAR16 *WatchdogData);
} EFI_BOOT_SERVICES;
/*
* EFI Configuration Table and GUID Declarations.
*/
#define MPS_TABLE_GUID \
{0xeb9d2d2f,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}
#define ACPI_TABLE_GUID \
{0xeb9d2d30,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}
#define ACPI_20_TABLE_GUID \
{0x8868e871,0xe4f1,0x11d3,0xbc,0x22,0x00,x080,0xc7,0x3c,0x88,0x81}
#define SMBIOS_TABLE_GUID \
{0xeb9d2d31,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}
#define SAL_TABLE_GUID \
{0xeb9d2d32,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}
typedef struct _EFI_CONFIGURATION_TABLE {
EFI_GUID VendorGuid;
void *VendorTable;
} EFI_CONFIGURATION_TABLE;
/*
* EFI System Table.
*/
typedef struct _EFI_SYSTEM_TABLE {
EFI_TABLE_HEADER Hdr;
CHAR16 FirmwareVendor;
UINT32 FirmwareRevision;
EFI_HANDLE ConsoleInHandle;
SIMPLE_INPUT_INTERFACE *ConIn;
EFI_HANDLE ConsoleOutHandle;
SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
EFI_HANDLE StandardErrorHandle;
SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr;
EFI_RUNTIME_SERVICES *RuntimeServices;
EFI_BOOT_SERVICES *BootServices;
UINTN NumberOfTableEntries;
EFI_CONFIGURATION_TABLE *ConfiguratioNTable;
} EFI_SYSTEM_TABLE;
#endif /* _MACHINE_EFI_H_ */