blob: 2aa6408525a08b31d233cc36fbfe1a53dcdfcc9c [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <stdint.h>
#define EFIAPI __attribute__((ms_abi))
#define EFI_ERROR_MASK 0x8000000000000000
#define EFI_ERR(x) (EFI_ERROR_MASK | x)
#define EFI_ERROR(x) (((int64_t)x) < 0)
#define EFI_SUCCESS 0
#define EFI_LOAD_ERROR EFI_ERR(1)
#define EFI_INVALID_PARAMETER EFI_ERR(2)
#define EFI_UNSUPPORTED EFI_ERR(3)
#define EFI_BAD_BUFFER_SIZE EFI_ERR(4)
#define EFI_BUFFER_TOO_SMALL EFI_ERR(5)
#define EFI_NOT_READY EFI_ERR(6)
#define EFI_DEVICE_ERROR EFI_ERR(7)
#define EFI_WRITE_PROTECTED EFI_ERR(8)
#define EFI_OUT_OF_RESOURCES EFI_ERR(9)
#define EFI_VOLUME_CORRUPTED EFI_ERR(10)
#define EFI_VOLUME_FULL EFI_ERR(11)
#define EFI_NO_MEDIA EFI_ERR(12)
#define EFI_MEDIA_CHANGED EFI_ERR(13)
#define EFI_NOT_FOUND EFI_ERR(14)
#define EFI_ACCESS_DENIED EFI_ERR(15)
#define EFI_NO_RESPONSE EFI_ERR(16)
#define EFI_NO_MAPPING EFI_ERR(17)
#define EFI_TIMEOUT EFI_ERR(18)
#define EFI_NOT_STARTED EFI_ERR(19)
#define EFI_ALREADY_STARTED EFI_ERR(20)
#define EFI_ABORTED EFI_ERR(21)
#define EFI_ICMP_ERROR EFI_ERR(22)
#define EFI_TFTP_ERROR EFI_ERR(23)
#define EFI_PROTOCOL_ERROR EFI_ERR(24)
#define EFI_INCOMPATIBLE_VERSION EFI_ERR(25)
#define EFI_SECURITY_VIOLATION EFI_ERR(26)
#define EFI_CRC_ERROR EFI_ERR(27)
#define EFI_END_OF_MEDIA EFI_ERR(28)
#define EFI_END_OF_FILE EFI_ERR(31)
#define EFI_INVALID_LANGUAGE EFI_ERR(32)
#define EFI_COMPROMISED_DATA EFI_ERR(33)
#define EFI_IP_ADDRESS_CONFLICT EFI_ERR(34)
#define EFI_HTTP_ERROR EFI_ERR(35)
// TODO: figure out where to put these. They're just mentioned in passing in the
// spec as some of many industry standard GUIDs but not part of the spec itself.
#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, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
typedef struct {
uint64_t Signature;
uint32_t Revision;
uint32_t HeaderSize;
uint32_t CRC32;
uint32_t Reserved;
} efi_table_header;
typedef struct efi_guid {
uint32_t data1;
uint16_t data2;
uint16_t data3;
uint8_t data4[8];
} efi_guid;
typedef void* efi_handle;
typedef size_t efi_status;
typedef struct {
uint8_t addr[32];
} efi_mac_addr;
typedef struct {
uint8_t addr[4];
} efi_ipv4_addr;
typedef struct {
uint8_t addr[16];
} efi_ipv6_addr;
typedef union {
efi_ipv4_addr v4;
efi_ipv6_addr v6;
} efi_ip_addr;
// This really belongs in boot-services.h, but causes circular dependencies with
// device-path.h.
typedef enum {
EfiReservedMemoryType,
EfiLoaderCode,
EfiLoaderData,
EfiBootServicesCode,
EfiBootServicesData,
EfiRuntimeServicesCode,
EfiRuntimeServicesData,
EfiConventionalMemory,
EfiUnusableMemory,
EfiACPIReclaimMemory,
EfiACPIMemoryNVS,
EfiMemoryMappedIO,
EfiMemoryMappedIOPortSpace,
EfiPalCode,
EfiPersistentMemory,
EfiMaxMemoryType
} efi_memory_type;
typedef uint64_t efi_physical_addr;
typedef uint64_t efi_virtual_addr;
typedef void* efi_event;
#define EVT_TIMER 0x80000000
#define EVT_RUNTIME 0x40000000
#define EVT_NOTIFY_WAIT 0x00000100
#define EVT_NOTIFY_SIGNAL 0x00000200
#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
#define EFI_EVENT_GROUP_EXIT_BOOT_SERVICES \
{0x27abf055, 0xb1b8, 0x4c26, {0x80, 0x48, 0x74, 0x8f, 0x37, 0xba, 0xa2, 0xdf}}
#define EFI_EVENT_GROUP_VIRTUAL_ADDRESS_CHANGE \
{0x13fa7698, 0xc831, 0x49c7, {0x87, 0xea, 0x8f, 0x43, 0xfc, 0xc2, 0x51, 0x96}}
#define EFI_EVENT_GROUP_MEMORY_MAP_CHANGE \
{0x78bee926, 0x692f, 0x48fd, {0x9e, 0xdb, 0x01, 0x42, 0x2e, 0xf0, 0xd7, 0xab}}
#define EFI_EVENT_GROUP_READY_TO_BOOT \
{0x7ce88fb3, 0x4bd7, 0x4679, {0x87, 0xa8, 0xa8, 0xd8, 0xde, 0xe5, 0x0d, 0x2b}}
typedef void (*efi_event_notify) (efi_event event, void* ctx) EFIAPI;
typedef enum {
TimerCancel,
TimerPeriodic,
TimerRelative
} efi_timer_delay;