diff --git a/Makefile b/Makefile
index a4fcf0c..bf81490 100644
--- a/Makefile
+++ b/Makefile
@@ -11,8 +11,7 @@
 EFI_AR		:= $(EFI_TOOLCHAIN)ar
 
 EFI_PATH	:= third_party/gnu-efi
-EFI_LIB_PATHS	:= $(EFI_PATH)/$(ARCH)/lib $(EFI_PATH)/$(ARCH)/gnuefi out
-EFI_INC_PATHS	:= $(EFI_PATH)/inc $(EFI_PATH)/inc/$(ARCH) $(EFI_PATH)/inc/protocol
+EFI_LIB_PATHS	:= $(EFI_PATH)/$(ARCH)/gnuefi out
 
 EFI_CRT0	:= $(EFI_PATH)/$(ARCH)/gnuefi/crt0-efi-$(ARCH).o
 EFI_LINKSCRIPT	:= $(EFI_PATH)/gnuefi/elf_$(ARCH)_efi.lds
@@ -20,16 +19,15 @@
 EFI_CFLAGS	:= -fpic -fshort-wchar -fno-stack-protector -mno-red-zone
 EFI_CFLAGS	+= -Wall
 EFI_CFLAGS	+= -std=c99
-EFI_CFLAGS	+= -ffreestanding -nostdinc -Iinclude -Isrc -Ithird_party/edk2 -Ithird_party/lk/include
+EFI_CFLAGS	+= -ffreestanding -nostdinc -Iinclude -Isrc -Ithird_party/lk/include
 EFI_CFLAGS	+= $(patsubst %,-I%,$(EFI_INC_PATHS))
-EFI_CFLAGS	+= -DHAVE_USE_MS_ABI=1
 EFI_CFLAGS	+= -ggdb
 
 EFI_LDFLAGS	:= -nostdlib -znocombreloc -T $(EFI_LINKSCRIPT)
 EFI_LDFLAGS	+= -shared -Bsymbolic
 EFI_LDFLAGS	+= $(patsubst %,-L%,$(EFI_LIB_PATHS))
 
-EFI_LIBS	:= -lutils -lefi -lgnuefi
+EFI_LIBS	:= -lutils -lgnuefi
 
 what_to_build::	all
 
@@ -58,6 +56,7 @@
 endif
 
 LIB_SRCS := \
+    lib/efi/guids.c \
     lib/utils.c \
     lib/loadfile.c \
     lib/console-printf.c \
diff --git a/include/efi/boot-services.h b/include/efi/boot-services.h
new file mode 100644
index 0000000..3ee9ec5
--- /dev/null
+++ b/include/efi/boot-services.h
@@ -0,0 +1,204 @@
+// 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 <efi/types.h>
+#include <efi/protocol/device-path.h>
+
+#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
+#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION
+
+typedef size_t efi_tpl;
+
+#define TPL_APPLICATION 4
+#define TPL_CALLBACK    8
+#define TPL_NOTIFY     16
+#define TPL_HIGH_LEVEL 31
+
+typedef enum {
+    AllocateAnyPages,
+    AllocateMaxAddress,
+    AllocateAddress,
+    MaxAllocateType
+} efi_allocate_type;
+
+typedef struct {
+    uint32_t Type;
+    efi_physical_addr PhysicalStart;
+    efi_virtual_addr VirtualStart;
+    uint64_t NumberOfPages;
+    uint64_t Attribute;
+} efi_memory_descriptor;
+
+#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_NV 0x0000000000008000
+#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000
+#define EFI_MEMORY_RO 0x0000000000020000
+#define EFI_MEMORY_RUNTIME 0x8000000000000000
+
+#define EFI_MEMORY_DESCRIPTOR_VERSION 1
+
+typedef enum {
+    EFI_NATIVE_INTERFACE
+} efi_interface_type;
+
+typedef enum {
+    AllHandles,
+    ByRegisterNotify,
+    ByProtocol
+} efi_locate_search_type;
+
+#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
+#define EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
+#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
+#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
+#define EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
+#define EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
+
+typedef struct {
+    efi_handle agent_handle;
+    efi_handle controller_handle;
+    uint32_t attributes;
+    uint32_t open_count;
+} efi_open_protocol_information_entry;
+
+#define EFI_HII_PACKAGE_LIST_PROTOCOL_GUID \
+    {0x6a1ee763, 0xd47a, 0x43b4, {0xaa, 0xbe, 0xef, 0x1d, 0xe2, 0xab, 0x56, 0xfc}}
+
+typedef struct efi_hii_package_list_header efi_hii_package_list_header;
+typedef efi_hii_package_list_header* efi_hii_package_list_protocol;
+
+// fwd declare efi_system_table to break circular dependencies
+typedef struct efi_system_table efi_system_table;
+typedef efi_status (*efi_image_entry_point) (efi_handle img, efi_system_table* sys) EFIAPI;
+
+typedef struct {
+    efi_table_header Hdr;
+
+    efi_tpl (*RaiseTPL) (efi_tpl new_tpl) EFIAPI;
+
+    void (*RestoreTPL) (efi_tpl old_tpl) EFIAPI;
+
+    efi_status (*AllocatePages) (efi_allocate_type type, efi_memory_type memory_type,
+                                 size_t pages, efi_physical_addr* memory) EFIAPI;
+
+    efi_status (*FreePages) (efi_physical_addr memory, size_t pages) EFIAPI;
+
+    efi_status (*GetMemoryMap) (size_t* memory_map_size, efi_memory_descriptor* memory_map,
+                                size_t* map_key, size_t* desc_size, uint32_t* desc_version) EFIAPI;
+
+    efi_status (*AllocatePool) (efi_memory_type pool_type, size_t size, void** buf) EFIAPI;
+
+    efi_status (*FreePool) (void* buf) EFIAPI;
+
+    efi_status (*CreateEvent) (uint32_t type, efi_tpl notify_tpl,
+                               efi_event_notify notify_fn, void* notify_ctx,
+                               efi_event* event) EFIAPI;
+
+    efi_status (*SetTimer) (efi_event event, efi_timer_delay type, uint64_t trigger_time) EFIAPI;
+
+    efi_status (*WaitForEvent) (size_t num_events, efi_event* event, size_t* index) EFIAPI;
+
+    efi_status (*SignalEvent) (efi_event event) EFIAPI;
+
+    efi_status (*CloseEvent) (efi_event event) EFIAPI;
+
+    efi_status (*CheckEvent) (efi_event event) EFIAPI;
+
+    efi_status (*InstallProtocolInterface) (efi_handle* handle, efi_guid* protocol,
+                                            efi_interface_type intf_type, void* intf) EFIAPI;
+
+    efi_status (*ReinstallProtocolInterface) (efi_handle hadle, efi_guid* protocol,
+                                              void* old_intf, void* new_intf) EFIAPI;
+
+    efi_status (*UninstallProtocolInterface) (efi_handle handle, efi_guid* protocol,
+                                              void* intf) EFIAPI;
+
+    efi_status (*HandleProtocol) (efi_handle handle, efi_guid* protocol, void** intf) EFIAPI;
+
+    void* Reserved;
+
+    efi_status (*RegisterProtocolNotify) (efi_guid* protocol, efi_event event,
+                                          void** registration) EFIAPI;
+
+    efi_status (*LocateHandle) (efi_locate_search_type search_type, efi_guid* protocol,
+                                void* search_key, size_t* buf_size, efi_handle* buf) EFIAPI;
+
+    efi_status (*LocateDevicePath) (efi_guid* protocol, efi_device_path_protocol** path,
+                                    efi_handle* device) EFIAPI;
+
+    efi_status (*InstallConfigurationTable) (efi_guid* guid, void* table) EFIAPI;
+
+    efi_status (*LoadImage) (bool boot_policy, efi_handle parent_image_handle,
+                             efi_device_path_protocol* path, void* src, size_t src_size,
+                             efi_handle* image_handle) EFIAPI;
+
+    efi_status (*StartImage) (efi_handle image_handle, size_t* exit_data_size,
+                              char16_t** exit_data) EFIAPI;
+
+    efi_status (*Exit) (efi_handle image_handle, efi_status exit_status,
+                        size_t exit_data_size, char16_t* exit_data) EFIAPI;
+
+    efi_status (*UnloadImage) (efi_handle image_handle) EFIAPI;
+
+    efi_status (*ExitBootServices) (efi_handle image_handle, size_t map_key) EFIAPI;
+
+    efi_status (*GetNextMonotonicCount) (uint64_t* count) EFIAPI;
+
+    efi_status (*Stall) (size_t microseconds) EFIAPI;
+
+    efi_status (*SetWatchdogTimer) (size_t timeout, uint64_t watchdog_code,
+                                    size_t data_size, char16_t* watchdog_data) EFIAPI;
+
+    efi_status (*ConnectController) (efi_handle controller_handle,
+                                     efi_handle* driver_image_handle,
+                                     efi_device_path_protocol* remaining_path,
+                                     bool recursive) EFIAPI;
+
+    efi_status (*DisconnectController) (efi_handle controller_handle,
+                                        efi_handle driver_image_handle,
+                                        efi_handle child_handle) EFIAPI;
+
+    efi_status (*OpenProtocol) (efi_handle handle, efi_guid* protocol, void** intf,
+                                efi_handle agent_handle, efi_handle controller_handle,
+                                uint32_t attributes) EFIAPI;
+
+    efi_status (*CloseProtocol) (efi_handle handle, efi_guid* protocol,
+                                 efi_handle agent_handle, efi_handle controller_handle) EFIAPI;
+
+    efi_status (*OpenProtocolInformation) (efi_handle handle, efi_guid* protocol,
+                                           efi_open_protocol_information_entry** entry_buf,
+                                           size_t* entry_count) EFIAPI;
+
+    efi_status (*ProtocolsPerHandle) (efi_handle handle, efi_guid*** protocol_buf,
+                                      size_t* protocol_buf_count) EFIAPI;
+
+    efi_status (*LocateHandleBuffer) (efi_locate_search_type search_type,
+                                      efi_guid* protocol, void* search_key,
+                                      size_t* num_handles, efi_handle** buf) EFIAPI;
+
+    efi_status (*LocateProtocol) (efi_guid* protocol, void* registration, void** intf) EFIAPI;
+
+    efi_status (*InstallMultipleProtocolInterfaces) (efi_handle* handle, ...) EFIAPI;
+
+    efi_status (*UninstallMultipleProtocolInterfaces) (efi_handle handle, ...) EFIAPI;
+
+    efi_status (*CalculateCrc32) (void* data, size_t len, uint32_t* crc32) EFIAPI;
+
+    void (*CopyMem) (void* dest, void* src, size_t len) EFIAPI;
+
+    void (*SetMem) (void* buf, size_t len, uint8_t val) EFIAPI;
+
+    efi_status (*CreateEventEx) (uint32_t type, efi_tpl notify_tpl,
+                                 efi_event_notify notify_fn, const void* notify_ctx,
+                                 const efi_guid* event_group, efi_event* event) EFIAPI;
+} efi_boot_services;
diff --git a/include/efi/protocol/device-path-to-text.h b/include/efi/protocol/device-path-to-text.h
new file mode 100644
index 0000000..a19e2ab
--- /dev/null
+++ b/include/efi/protocol/device-path-to-text.h
@@ -0,0 +1,20 @@
+// 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 <efi/types.h>
+#include <efi/protocol/device-path.h>
+
+#define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \
+    {0x8b843e20, 0x8132, 0x4852, {0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c}}
+extern efi_guid DevicePathToTextProtocol;
+
+typedef struct efi_device_path_to_text_protocol {
+    char16_t* (*ConvertDeviceNodeToText) (const efi_device_path_protocol* dev_node,
+                                          bool display_only, bool allow_shortcuts) EFIAPI;
+
+    char16_t* (*ConvertDevicePathToText) (const efi_device_path_protocol* dev_path,
+                                          bool display_only, bool allow_shortcuts) EFIAPI;
+} efi_device_path_to_text_protocol;
diff --git a/include/efi/protocol/device-path.h b/include/efi/protocol/device-path.h
new file mode 100644
index 0000000..8356c28
--- /dev/null
+++ b/include/efi/protocol/device-path.h
@@ -0,0 +1,45 @@
+// 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 <efi/types.h>
+
+#define EFI_DEVICE_PATH_PROTOCOL_GUID \
+    {0x09576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid DevicePathProtocol;
+
+typedef struct efi_device_path_protocol {
+    uint8_t Type;
+    uint8_t SubType;
+    uint8_t Length[2];
+} efi_device_path_protocol;
+
+#define DEVICE_PATH_HARDWARE       0x01
+#define DEVICE_PATH_ACPI           0x02
+#define DEVICE_PATH_MESSAGING      0x03
+#define DEVICE_PATH_MEDIA          0x04
+#define DEVICE_PATH_BIOS_BOOT_SPEC 0x05
+#define DEVICE_PATH_END            0x7f
+
+#define DEVICE_PATH_INSTANCE_END 0x01
+#define DEVICE_PATH_ENTIRE_END   0xff
+
+#define DEVICE_PATH_HW_PCI        0x01
+#define DEVICE_PATH_HW_PCCARD     0x02
+#define DEVICE_PATH_HW_MEMMAP     0x03
+#define DEVICE_PATH_HW_VENDOR     0x04
+#define DEVICE_PATH_HW_CONTROLLER 0x05
+#define DEVICE_PATH_HW_BMC        0x06
+
+// TODO: sub-types for other types (ACPI, etc)
+
+// TODO: move this to another header? would break circular dependencies between
+// boot-services.h and this header, for efi_memory_type
+typedef struct {
+    efi_device_path_protocol Header;
+    efi_memory_type MemoryType;
+    efi_physical_addr StartAddress;
+    efi_physical_addr EndAddress;
+} efi_device_path_hw_memmap;
diff --git a/include/efi/protocol/driver-binding.h b/include/efi/protocol/driver-binding.h
new file mode 100644
index 0000000..bd928ac
--- /dev/null
+++ b/include/efi/protocol/driver-binding.h
@@ -0,0 +1,30 @@
+// 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 <efi/types.h>
+#include <efi/protocol/device-path.h>
+
+#define EFI_DRIVER_BINDING_PROTOCOL_GUID \
+    {0x18a031ab, 0xb443, 0x4d1a, {0xa5, 0xc0, 0x0c, 0x09, 0x26, 0x1e, 0x9f, 0x71}}
+extern efi_guid DriverBindingProtocol;
+
+typedef struct efi_driver_binding_protocol {
+    efi_status (*Supported) (struct efi_driver_binding_protocol* self,
+                             efi_handle controller_handle,
+                             efi_device_path_protocol* remaining_path) EFIAPI;
+
+    efi_status (*Start) (struct efi_driver_binding_protocol* self,
+                         efi_handle controller_handle,
+                         efi_device_path_protocol* remaining_path) EFIAPI;
+
+    efi_status (*Stop) (struct efi_driver_binding_protocol* self,
+                        efi_handle controller_handle,
+                        size_t num_children, efi_handle* child_handle_buf) EFIAPI;
+
+    uint32_t Version;
+    efi_handle ImageHandle;
+    efi_handle DriverBindingHandle;
+} efi_driver_binding_protocol;
diff --git a/include/efi/protocol/file.h b/include/efi/protocol/file.h
new file mode 100644
index 0000000..5477bc6
--- /dev/null
+++ b/include/efi/protocol/file.h
@@ -0,0 +1,97 @@
+// 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 <efi/types.h>
+#include <efi/boot-services.h>
+#include <efi/runtime-services.h>
+
+#define EFI_FILE_PROTOCOL_REVISION        0x00010000
+#define EFI_FILE_PROTOCOL_REVISION2       0x00020000
+#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2
+
+#define EFI_FILE_MODE_READ   0x0000000000000001
+#define EFI_FILE_MODE_WRITE  0x0000000000000002
+#define EFI_FILE_MODE_CREATE 0x8000000000000000
+
+#define EFI_FILE_READ_ONLY  0x0000000000000001
+#define EFI_FILE_HIDDEN     0x0000000000000002
+#define EFI_FILE_SYSTEM     0x0000000000000004
+#define EFI_FILE_RESERVED   0x0000000000000008
+#define EFI_FILE_DIRECTORY  0x0000000000000010
+#define EFI_FILE_ARCHIVE    0x0000000000000020
+#define EFI_FILE_VALID_ATTR 0x0000000000000037
+
+typedef struct {
+    efi_event Event;
+    efi_status Status;
+    size_t BufferSize;
+    void* Buffer;
+} efi_file_io_token;
+
+#define EFI_FILE_INFO_GUID \
+    {0x09576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid FileInfoGuid;
+
+typedef struct {
+    uint64_t Size;
+    uint64_t FileSize;
+    uint64_t PhysicalSize;
+    efi_time CreateTime;
+    efi_time LastAccessTime;
+    efi_time ModificationTime;
+    uint64_t Attribute;
+    char16_t FileName[];
+} efi_file_info;
+
+#define EFI_FILE_SYSTEM_INFO_GUID \
+    {0x09576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid FileSystemInfoGuid;
+
+typedef struct {
+    uint64_t Size;
+    bool ReadOnly;
+    uint64_t VolumeSize;
+    uint64_t FreeSpace;
+    uint32_t BlockSize;
+    char16_t* VolumeLabel[];
+} efi_file_system_info;
+
+typedef struct efi_file_protocol {
+    uint64_t Revision;
+
+    efi_status (*Open) (struct efi_file_protocol* self, struct efi_file_protocol** new_handle,
+                        char16_t* filename, uint64_t open_mode, uint64_t attributes) EFIAPI;
+
+    efi_status (*Close) (struct efi_file_protocol* self) EFIAPI;
+
+    efi_status (*Delete) (struct efi_file_protocol* self) EFIAPI;
+
+    efi_status (*Read) (struct efi_file_protocol* self, size_t* len, void* buf) EFIAPI;
+
+    efi_status (*Write) (struct efi_file_protocol* self, size_t* len, void* buf) EFIAPI;
+
+    efi_status (*GetPosition) (struct efi_file_protocol* self, uint64_t* position) EFIAPI;
+
+    efi_status (*SetPosition) (struct efi_file_protocol* self, uint64_t position) EFIAPI;
+
+    efi_status (*GetInfo) (struct efi_file_protocol* self, efi_guid* info_type,
+                           size_t* buf_size, void* buf) EFIAPI;
+
+    efi_status (*SetInfo) (struct efi_file_protocol* self, efi_guid* info_type,
+                           size_t buf_size, void* buf) EFIAPI;
+
+    efi_status (*Flush) (struct efi_file_protocol* self) EFIAPI;
+
+    efi_status (*OpenEx) (struct efi_file_protocol* self, struct efi_file_protocol* new_handle,
+                          char16_t* filename, uint64_t open_mode, uint64_t attributes,
+                          efi_file_io_token* token) EFIAPI;
+
+    efi_status (*ReadEx) (struct efi_file_protocol* self, efi_file_io_token* token) EFIAPI;
+
+    efi_status (*WriteEx) (struct efi_file_protocol* self, efi_file_io_token* token) EFIAPI;
+
+    efi_status (*FlushEx) (struct efi_file_protocol* self, efi_file_io_token* token) EFIAPI;
+} efi_file_protocol;
diff --git a/include/efi/protocol/graphics-output.h b/include/efi/protocol/graphics-output.h
new file mode 100644
index 0000000..772cf06
--- /dev/null
+++ b/include/efi/protocol/graphics-output.h
@@ -0,0 +1,76 @@
+// 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 <efi/types.h>
+
+#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
+    {0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a}}
+extern efi_guid GraphicsOutputProtocol;
+
+typedef struct {
+    uint32_t RedMask;
+    uint32_t GreenMask;
+    uint32_t BlueMask;
+    uint32_t ReservedMask;
+} efi_pixel_bitmask;
+
+typedef enum {
+    PixelRedGreenBlueReserved8BitPerColor,
+    PixelBlueGreenRedReserved8BitPerColor,
+    PixelBitMask,
+    PixelBltOnly,
+    PixelFormatMax
+} efi_graphics_pixel_format;
+
+typedef struct {
+    uint32_t Version;
+    uint32_t HorizontalResolution;
+    uint32_t VerticalResolution;
+    efi_graphics_pixel_format PixelFormat;
+    efi_pixel_bitmask PixelInformation;
+    uint32_t PixelsPerScanLine;
+} efi_graphics_output_mode_information;
+
+typedef struct {
+    uint32_t MaxMode;
+    uint32_t Mode;
+    efi_graphics_output_mode_information* Info;
+    size_t SizeOfInfo;
+    efi_physical_addr FrameBufferBase;
+    size_t FrameBufferSize;
+} efi_graphics_output_mode;
+
+typedef struct {
+    uint8_t Blue;
+    uint8_t Green;
+    uint8_t Red;
+    uint8_t Reserved;
+} efi_graphics_output_blt_pixel;
+
+typedef enum {
+    EfiBltVideoFill,
+    EfiBltVideoToBltBuffer,
+    EfiBltBufferToVideo,
+    EfiBltVideoToVideo,
+    EfiGraphicsOutputBltOperationMax
+} efi_graphics_output_blt_operation;
+
+typedef struct efi_graphics_output_protocol {
+    efi_status (*QueryMode) (struct efi_graphics_output_protocol* self,
+                             uint32_t mode_num, size_t* info_len,
+                             efi_graphics_output_mode_information** info) EFIAPI;
+
+    efi_status (*SetMode) (struct efi_graphics_output_protocol* self,
+                           uint32_t mode_num) EFIAPI;
+
+    efi_status (*Blt) (struct efi_graphics_output_protocol* self,
+                       efi_graphics_output_blt_pixel* blt_buf,
+                       efi_graphics_output_blt_operation blt_operation,
+                       size_t src_x, size_t src_y, size_t dest_x, size_t dest_y,
+                       size_t width, size_t height, size_t delta) EFIAPI;
+
+    efi_graphics_output_mode* Mode;
+} efi_graphics_output_protocol;
diff --git a/include/efi/protocol/loaded-image.h b/include/efi/protocol/loaded-image.h
new file mode 100644
index 0000000..800d269
--- /dev/null
+++ b/include/efi/protocol/loaded-image.h
@@ -0,0 +1,32 @@
+// 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 <efi/types.h>
+#include <efi/system-table.h>
+#include <efi/protocol/device-path.h>
+
+#define EFI_LOADED_IMAGE_PROTOCOL_GUID \
+    {0x5b1b31a1, 0x9562, 0x11d2, {0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid LoadedImageProtocol;
+
+#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000
+
+typedef struct {
+    uint32_t Revision;
+    efi_handle ParentHandle;
+    efi_system_table* SystemTable;
+    efi_handle DeviceHandle;
+    efi_device_path_protocol* FilePath;
+    void* Reserved;
+    uint32_t LoadOptionsSize;
+    void* LoadOptions;
+    void* ImageBase;
+    uint64_t ImageSize;
+    efi_memory_type ImageCodeType;
+    efi_memory_type ImageDataType;
+
+    efi_status (*Unload) (efi_handle img) EFIAPI;
+} efi_loaded_image_protocol;
diff --git a/include/efi/protocol/managed-network.h b/include/efi/protocol/managed-network.h
index e9aafc3..2147054 100644
--- a/include/efi/protocol/managed-network.h
+++ b/include/efi/protocol/managed-network.h
@@ -4,106 +4,89 @@
 
 #pragma once
 
-#include <efi.h>
+#include <efi/types.h>
+#include <efi/protocol/simple-network.h>
 
 #define EFI_MANAGED_NETWORK_PROTOCOL_GUID \
     {0x7ab33a91, 0xace5, 0x4326,{0xb5, 0x72, 0xe7, 0xee, 0x33, 0xd3, 0x9f, 0x16}}
-
-EFI_GUID ManagedNetworkProtocol = EFI_MANAGED_NETWORK_PROTOCOL_GUID;
-
-struct _EFI_MANAGED_NETWORK_PROTOCOL;
+extern efi_guid ManagedNetworkProtocol;
 
 typedef struct {
-    EFI_TIME  Timestamp;
-    EFI_EVENT RecycleEvent;
-    UINT32 PacketLength;
-    UINT32 HeaderLength;
-    UINT32 AddressLength;
-    UINT32 DataLength;
-    BOOLEAN BroadcastFlag;
-    BOOLEAN MulticastFlag;
-    BOOLEAN PromiscuousFlag;
-    UINT16  ProtocolType;
-    VOID *DestinationAddress;
-    VOID *SourceAddress;
-    VOID *MediaHeader;
-    VOID *PacketData;
-} EFI_MANAGED_NETWORK_RECEIVE_DATA;
+    efi_time  Timestamp;
+    efi_event RecycleEvent;
+    uint32_t PacketLength;
+    uint32_t HeaderLength;
+    uint32_t AddressLength;
+    uint32_t DataLength;
+    bool BroadcastFlag;
+    bool MulticastFlag;
+    bool PromiscuousFlag;
+    uint16_t  ProtocolType;
+    void* DestinationAddress;
+    void* SourceAddress;
+    void* MediaHeader;
+    void* PacketData;
+} efi_managed_network_receive_data;
 
 typedef struct {
-    UINT32 FragmentLength;
-    VOID *FragmentBuffer;
-} EFI_MANAGED_NETWORK_FRAGMENT_DATA;
+    uint32_t FragmentLength;
+    void* FragmentBuffer;
+} efi_managed_network_fragment_data;
 
 typedef struct {
-    EFI_MAC_ADDRESS *DestinationAddress;
-    EFI_MAC_ADDRESS *SourceAddress;
-    UINT16 ProtocolType;
-    UINT32 DataLength;
-    UINT16 HeaderLength;
-    UINT16 FragmentCount;
-    EFI_MANAGED_NETWORK_FRAGMENT_DATA FragmentTable[1];
-} EFI_MANAGED_NETWORK_TRANSMIT_DATA;
+    efi_mac_addr* DestinationAddress;
+    efi_mac_addr* SourceAddress;
+    uint16_t ProtocolType;
+    uint32_t DataLength;
+    uint16_t HeaderLength;
+    uint16_t FragmentCount;
+    efi_managed_network_fragment_data FragmentTable[1];
+} efi_managed_network_transmit_data;
 
 typedef struct {
-    EFI_EVENT Event;
-    EFI_STATUS Status;
+    uint32_t ReceivedQueueTimeoutValue;
+    uint32_t TransmitQueueTimeoutValue;
+    uint16_t ProtocolTypeFilter;
+    bool EnableUnicastReceive;
+    bool EnableMulticastReceive;
+    bool EnableBroadcastReceive;
+    bool EnablePromiscuousReceive;
+    bool FlushQueuesOnReset;
+    bool EnableReceiveTimestamps;
+    bool DisableBackgroundPolling;
+} efi_managed_network_config_data;
+
+typedef struct {
+    efi_event Event;
+    efi_status Status;
     union {
-        EFI_MANAGED_NETWORK_RECEIVE_DATA *RxData;
-        EFI_MANAGED_NETWORK_TRANSMIT_DATA *TxData;
+        efi_managed_network_receive_data* RxData;
+        efi_managed_network_transmit_data* TxData;
     } Packet;
-} EFI_MANAGED_NETWORK_COMPLETION_TOKEN;
+} efi_managed_network_completion_token;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_GET_MODE_DATA) (
-    IN  struct _EFI_MANAGED_NETWORK_PROTOCOL     *This,
-    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
-    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData OPTIONAL
-);
+typedef struct efi_managed_network_protocol {
+    efi_status (*GetModeData) (struct efi_managed_network_protocol* self,
+                               efi_managed_network_config_data* mnp_config_data,
+                               efi_simple_network_mode* snp_mode_data) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_CONFIGURE) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN EFI_MANAGED_NETWORK_CONFIG_DATA      *MnpConfigData OPTIONAL
-);
+    efi_status (*Configure) (struct efi_managed_network_protocol* self,
+                             efi_managed_network_config_data* mnp_config_data) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_MCAST_IP_TO_MAC) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN BOOLEAN                              Ipv6Flag,
-    IN EFI_IP_ADDRESS                       *IpAddress,
-    OUT EFI_MAC_ADDRESS                     *MacAddress
-);
+    efi_status (*McastIpToMac) (struct efi_managed_network_protocol* self,
+                                bool ipv6_flag, efi_ip_addr* ip_addr, efi_mac_addr* mac_addr) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_GROUPS) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN BOOLEAN                              JoinFlag,
-    IN EFI_MAC_ADDRESS                      *MacAddress OPTIONAL
-);
+    efi_status (*Groups) (struct efi_managed_network_protocol* self, bool join_flag,
+                          efi_mac_addr* mac_addr) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_TRANSMIT) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
-);
+    efi_status (*Transmit) (struct efi_managed_network_protocol* self,
+                            efi_managed_network_completion_token* token) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_RECEIVE) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
-);
+    efi_status (*Receive) (struct efi_managed_network_protocol* self,
+                           efi_managed_network_completion_token* token) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_CANCEL)(
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This,
-    IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token OPTIONAL
-);
+    efi_status (*Cancel) (struct efi_managed_network_protocol* self,
+                          efi_managed_network_completion_token* token) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_MANAGED_NETWORK_POLL) (
-    IN struct _EFI_MANAGED_NETWORK_PROTOCOL *This
-);
-
-typedef struct _EFI_MANAGED_NETWORK {
-    EFI_MANAGED_NETWORK_GET_MODE_DATA   GetModeData;
-    EFI_MANAGED_NETWORK_CONFIGURE       Configure;
-    EFI_MANAGED_NETWORK_MCAST_IP_TO_MAC McastIpToMac;
-    EFI_MANAGED_NETWORK_GROUPS          Groups;
-    EFI_MANAGED_NETWORK_TRANSMIT        Transmit;
-    EFI_MANAGED_NETWORK_RECEIVE         Receive;
-    EFI_MANAGED_NETWORK_CANCEL          Cancel;
-    EFI_MANAGED_NETWORK_POLL            Poll;
-} EFI_MANAGED_NETWORK;
+    efi_status (*Poll) (struct efi_managed_network_protocol* self) EFIAPI;
+} efi_managed_network_protocol;
diff --git a/include/efi/protocol/pci-root-bridge-io.h b/include/efi/protocol/pci-root-bridge-io.h
index 3e66ce2..1e54f89 100644
--- a/include/efi/protocol/pci-root-bridge-io.h
+++ b/include/efi/protocol/pci-root-bridge-io.h
@@ -4,14 +4,12 @@
 
 #pragma once
 
-#include <efi.h>
+#include <efi/boot-services.h>
+#include <efi/types.h>
 
 #define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
     {0x2f707ebb, 0x4a1a, 0x11D4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d}}
-
-EFI_GUID PciRootBridgeIoProtocol = EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
-
-struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL;
+extern efi_guid PciRootBridgeIoProtocol;
 
 typedef enum {
     EfiPciWidthUint8,
@@ -27,30 +25,18 @@
     EfiPciWidthFillUint32,
     EfiPciWidthFillUint64,
     EfiPciWidthMaximum,
-} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH;
+} efi_pci_root_bridge_io_width;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM) (
-    IN  struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH   Width,
-    IN  UINT64                                  Address,
-    IN  UINT64                                  Mask,
-    IN  UINT64                                  Value,
-    IN  UINT64                                  Delay,
-    OUT UINT64                                  *Result
-);
-
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM) (
-    IN     struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH   Width,
-    IN     UINT64                                  Address,
-    IN     UINTN                                   Count,
-    IN OUT VOID                                    *Buffer
-);
+struct efi_pci_root_bridge_io_protocol;
 
 typedef struct {
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Read;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write;
-} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS;
+    efi_status (*Read) (struct efi_pci_root_bridge_io_protocol* self,
+                        efi_pci_root_bridge_io_width   width,
+                        uint64_t addr, size_t count, void* buffer) EFIAPI;
+    efi_status (*Write) (struct efi_pci_root_bridge_io_protocol* self,
+                         efi_pci_root_bridge_io_width   width,
+                         uint64_t addr, size_t count, void* buffer) EFIAPI;
+} efi_pci_root_bridge_io_access;
 
 #define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001
 #define EFI_PCI_ATTRIBUTE_ISA_IO 0x0002
@@ -75,82 +61,55 @@
     EfiPciOperationBusMasterWrite64,
     EfiPciOperationBusMasterCommonBuffer64,
     EfiPciOperationMaximum,
-} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION;
+} efi_pci_root_bridge_io_operation;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM) (
-    IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH   Width,
-    IN UINT64                                  DestAddress,
-    IN UINT64                                  SrcAddress,
-    IN UINTN                                   Count
-);
+typedef struct efi_pci_root_bridge_io_protocol {
+    efi_handle ParentHandle;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP) (
-    IN  struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL   *This,
-    IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
-    IN  VOID                                      *HostAddress,
-    IN  OUT UINTN                                 *NumberOfBytes,
-    OUT EFI_PHYSICAL_ADDRESS                      *DeviceAddress,
-    OUT VOID                                      **Mapping
-);
+    efi_status (*PollMem) (struct efi_pci_root_bridge_io_protocol *self,
+                           efi_pci_root_bridge_io_width width,
+                           uint64_t addr, uint64_t mask, uint64_t value, uint64_t delay,
+                           uint64_t* result) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP) (
-    IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN VOID                                    *Mapping
-);
+    efi_status (*PollIo) (struct efi_pci_root_bridge_io_protocol *self,
+                          efi_pci_root_bridge_io_width width,
+                          uint64_t addr, uint64_t mask, uint64_t value, uint64_t delay,
+                          uint64_t* result) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER) (
-    IN  struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN  EFI_ALLOCATE_TYPE                       Type,
-    IN  EFI_MEMORY_TYPE                         MemoryType,
-    IN  UINTN                                   Pages,
-    OUT VOID                                    **HostAddress,
-    IN  UINT64                                  Attributes
-);
+    efi_pci_root_bridge_io_access Mem;
+    efi_pci_root_bridge_io_access Io;
+    efi_pci_root_bridge_io_access Pci;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER) (
-    IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN UINTN                                   Pages,
-    IN VOID                                    *HostAddress
-);
+    efi_status (*CopyMem) (struct efi_pci_root_bridge_io_protocol* self,
+                           efi_pci_root_bridge_io_width width,
+                           uint64_t dest_addr, uint64_t src_addr, size_t count) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH) (
-    IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
-);
+    efi_status (*Map) (struct efi_pci_root_bridge_io_protocol* self,
+                       efi_pci_root_bridge_io_operation operation,
+                       void* host_addr, size_t* num_bytes,
+                       efi_physical_addr* device_addr, void** mapping) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES) (
-    IN  struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    OUT UINT64                                  *Supports   OPTIONAL,
-    OUT UINT64                                  *Attributes OPTIONAL
-);
+    efi_status (*Unmap) (struct efi_pci_root_bridge_io_protocol* self,
+                         void* mapping) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES) (
-    IN     struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    IN     UINT64                                  Attributes,
-    IN OUT UINT64                                  *ResourceBase   OPTIONAL,
-    IN OUT UINT64                                  *ResourceLength OPTIONAL
-);
+    efi_status (*AllocateBuffer) (struct efi_pci_root_bridge_io_protocol* self,
+                                  efi_allocate_type type, efi_memory_type memory_type,
+                                  size_t pages, void** host_addr, uint64_t attributes) EFIAPI;
 
-typedef EFI_STATUS (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION) (
-    IN  struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
-    OUT VOID                                    **Resources
-);
+    efi_status (*FreeBuffer) (struct efi_pci_root_bridge_io_protocol* self,
+                              size_t pages, void* host_addr) EFIAPI;
 
-typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL {
-    EFI_HANDLE ParentHandle;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollMem;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollIo;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Mem;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Io;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Pci;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM CopyMem;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP Map;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP Unmap;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER FreeBuffer;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH Flush;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES GetAttributes;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES SetAttributes;
-    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION Configuration;
-    UINT32 SegmentNumber;
-} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL;
+    efi_status (*Flush) (struct efi_pci_root_bridge_io_protocol* self) EFIAPI;
+
+    efi_status (*GetAttributes) (struct efi_pci_root_bridge_io_protocol* self,
+                                 uint64_t* supports, uint64_t* attributes) EFIAPI;
+
+    efi_status (*SetAttributes) (struct efi_pci_root_bridge_io_protocol* self,
+                                 uint64_t attributes, uint64_t* resource_base,
+                                 uint64_t* resource_len) EFIAPI;
+
+    efi_status (*Configuration) (struct efi_pci_root_bridge_io_protocol* self,
+                                 void** resources) EFIAPI;
+
+    uint32_t SegmentNumber;
+} efi_pci_root_bridge_io_protocol;
diff --git a/include/efi/protocol/simple-file-system.h b/include/efi/protocol/simple-file-system.h
new file mode 100644
index 0000000..ad7c42a
--- /dev/null
+++ b/include/efi/protocol/simple-file-system.h
@@ -0,0 +1,21 @@
+// 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 <efi/types.h>
+#include <efi/protocol/file.h>
+
+#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
+    {0x0964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid SimpleFileSystemProtocol;
+
+#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000
+
+typedef struct efi_simple_file_system_protocol {
+    uint64_t Revision;
+
+    efi_status (*OpenVolume) (struct efi_simple_file_system_protocol* self,
+                              efi_file_protocol** root) EFIAPI;
+} efi_simple_file_system_protocol;
diff --git a/include/efi/protocol/simple-network.h b/include/efi/protocol/simple-network.h
new file mode 100644
index 0000000..b4e3489
--- /dev/null
+++ b/include/efi/protocol/simple-network.h
@@ -0,0 +1,131 @@
+// 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 <efi/types.h>
+
+#define EFI_SIMPLE_NETWORK_PROTOCOL_GUID \
+    {0xa19832b9, 0xac25, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d}}
+extern efi_guid SimpleNetworkProtocol;
+
+#define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000
+
+#define MAX_MCAST_FILTER_CNT 16
+typedef struct {
+    uint32_t State;
+    uint32_t HwAddressSize;
+    uint32_t MediaHeaderSize;
+    uint32_t MaxPacketSize;
+    uint32_t NvRamSize;
+    uint32_t NvRamAccessSize;
+    uint32_t ReceiveFilterMask;
+    uint32_t ReceiveFilterSetting;
+    uint32_t MaxMCastFilterCount;
+    uint32_t MCastFilterCount;
+    efi_mac_addr MCastFilter[MAX_MCAST_FILTER_CNT];
+    efi_mac_addr CurrentAddress;
+    efi_mac_addr BroadcastAddress;
+    efi_mac_addr PermanentAddress;
+    uint8_t IfType;
+    bool MacAddressChangeable;
+    bool MultipleTxSupported;
+    bool MediaPresentSupported;
+    bool MediaPresent;
+} efi_simple_network_mode;
+
+typedef enum {
+    EfiSimpleNetworkStopped,
+    EfiSimpleNetworkStarted,
+    EfiSimpleNetworkInitialized,
+    EfiSimpleNetworkMaxState
+} efi_simple_network_state;
+
+#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST               0x01
+#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST             0x02
+#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST             0x04
+#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
+#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
+
+typedef struct {
+    uint64_t RxTotalFrames;
+    uint64_t RxGoodFrames;
+    uint64_t RxUndersizeFrames;
+    uint64_t RxOversizeFrames;
+    uint64_t RxDroppedFrames;
+    uint64_t RxUnicastFrames;
+    uint64_t RxBroadcastFrames;
+    uint64_t RxMulticastFrames;
+    uint64_t RxCrcErrorFrames;
+    uint64_t RxTotalBytes;
+    uint64_t TxTotalFrames;
+    uint64_t TxGoodFrames;
+    uint64_t TxUndersizeFrames;
+    uint64_t TxOversizeFrames;
+    uint64_t TxDroppedFrames;
+    uint64_t TxUnicastFrames;
+    uint64_t TxBroadcastFrames;
+    uint64_t TxMulticastFrames;
+    uint64_t TxCrcErrorFrames;
+    uint64_t TxTotalBytes;
+    uint64_t Collisions;
+    uint64_t UnsupportedProtocol;
+    uint64_t RxDuplicatedFrames;
+    uint64_t RxDecryptErrorFrames;
+    uint64_t TxErrorFrames;
+    uint64_t TxRetryFrames;
+} efi_network_statistics;
+
+#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT  0x01
+#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02
+#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT  0x04
+#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08
+
+typedef struct efi_simple_network_protocol {
+    uint64_t Revision;
+
+    efi_status (*Start) (struct efi_simple_network_protocol* self) EFIAPI;
+
+    efi_status (*Stop) (struct efi_simple_network_protocol* self) EFIAPI;
+
+    efi_status (*Initialize) (struct efi_simple_network_protocol* self,
+                              size_t extra_rx_buf_size, size_t extra_tx_buf_size) EFIAPI;
+
+    efi_status (*Reset) (struct efi_simple_network_protocol* self,
+                         bool extended_verification) EFIAPI;
+
+    efi_status (*Shutdown) (struct efi_simple_network_protocol* self) EFIAPI;
+
+    efi_status (*ReceiveFilters) (struct efi_simple_network_protocol* self,
+                                  uint32_t enable, uint32_t disable,
+                                  bool reset_mcast_filter, size_t mcast_filter_count,
+                                  efi_mac_addr* mcast_filter) EFIAPI;
+
+    efi_status (*StationAddress) (struct efi_simple_network_protocol* self,
+                                  bool reset, efi_mac_addr* new_addr) EFIAPI;
+
+    efi_status (*Statistics) (struct efi_simple_network_protocol* self,
+                              bool reset, size_t* stats_size,
+                              efi_network_statistics* stats_table) EFIAPI;
+
+    efi_status (*MCastIpToMac) (struct efi_simple_network_protocol* self,
+                                bool ipv6, efi_ip_addr* ip, efi_mac_addr* mac) EFIAPI;
+
+    efi_status (*NvData) (struct efi_simple_network_protocol* self,
+                          bool read_write, size_t offset, size_t buf_size, void* buf) EFIAPI;
+
+    efi_status (*GetStatus) (struct efi_simple_network_protocol* self,
+                             uint32_t* interrupt_status, void** tx_buf) EFIAPI;
+
+    efi_status (*Transmit) (struct efi_simple_network_protocol* self,
+                            size_t header_size, size_t buf_size, void* buf,
+                            efi_mac_addr* src, efi_mac_addr* dest, uint16_t* protocol) EFIAPI;
+
+    efi_status (*Receive) (struct efi_simple_network_protocol* self,
+                           size_t* header_size, size_t* buf_size, void* buf,
+                           efi_mac_addr* src, efi_mac_addr* dest, uint16_t* protocol) EFIAPI;
+
+    efi_event WaitForPacket;
+    efi_simple_network_mode* Mode;
+} efi_simple_network_protocol;
diff --git a/include/efi/protocol/simple-text-input.h b/include/efi/protocol/simple-text-input.h
new file mode 100644
index 0000000..ee6bf68
--- /dev/null
+++ b/include/efi/protocol/simple-text-input.h
@@ -0,0 +1,26 @@
+// 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 <efi/types.h>
+
+#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \
+    {0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid SimpleTextInputProtocol;
+
+typedef struct {
+    uint16_t ScanCode;
+    char16_t UnicodeChar;
+} efi_input_key;
+
+typedef struct efi_simple_text_input_protocol {
+    efi_status (*Reset) (struct efi_simple_text_input_protocol* self,
+                         bool extendend_verification) EFIAPI;
+
+    efi_status (*ReadKeyStroke) (struct efi_simple_text_input_protocol* self,
+                                 efi_input_key* key) EFIAPI;
+
+    efi_event WaitForKey;
+} efi_simple_text_input_protocol;
diff --git a/include/efi/protocol/simple-text-output.h b/include/efi/protocol/simple-text-output.h
new file mode 100644
index 0000000..ac93167
--- /dev/null
+++ b/include/efi/protocol/simple-text-output.h
@@ -0,0 +1,143 @@
+// 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 <efi/types.h>
+
+#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \
+    {0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
+extern efi_guid SimpleTextOutputProtocol;
+
+typedef struct {
+    int32_t MaxMode;
+    int32_t Mode;
+    int32_t Attribute;
+    int32_t CursorColumn;
+    int32_t CursorRow;
+    bool CursorVisible;
+} simple_text_output_mode;
+
+//*******************************************************
+// UNICODE DRAWING CHARACTERS
+//*******************************************************
+#define BOXDRAW_HORIZONTAL 0x2500
+#define BOXDRAW_VERTICAL 0x2502
+#define BOXDRAW_DOWN_RIGHT 0x250c
+#define BOXDRAW_DOWN_LEFT 0x2510
+#define BOXDRAW_UP_RIGHT 0x2514
+#define BOXDRAW_UP_LEFT 0x2518
+#define BOXDRAW_VERTICAL_RIGHT 0x251c
+#define BOXDRAW_VERTICAL_LEFT 0x2524
+#define BOXDRAW_DOWN_HORIZONTAL 0x252c
+#define BOXDRAW_UP_HORIZONTAL 0x2534
+#define BOXDRAW_VERTICAL_HORIZONTAL 0x253c
+#define BOXDRAW_DOUBLE_HORIZONTAL 0x2550
+#define BOXDRAW_DOUBLE_VERTICAL 0x2551
+#define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552
+#define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553
+#define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554
+#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555
+#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556
+#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557
+#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558
+#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559
+#define BOXDRAW_DOUBLE_UP_RIGHT 0x255a
+#define BOXDRAW_UP_LEFT_DOUBLE 0x255b
+#define BOXDRAW_UP_DOUBLE_LEFT 0x255c
+#define BOXDRAW_DOUBLE_UP_LEFT 0x255d
+#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e
+#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f
+#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560
+#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561
+#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562
+#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563
+#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564
+#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565
+#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566
+#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567
+#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568
+#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569
+#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a
+#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b
+#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c
+
+//*******************************************************
+// EFI Required Block Elements Code Chart
+//*******************************************************
+#define BLOCKELEMENT_FULL_BLOCK 0x2588
+#define BLOCKELEMENT_LIGHT_SHADE 0x2591
+
+//*******************************************************
+// EFI Required Geometric Shapes Code Chart
+//*******************************************************
+#define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2
+#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba
+#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc
+#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4
+
+//*******************************************************
+// EFI Required Arrow shapes
+//*******************************************************
+#define ARROW_UP 0x2191
+#define ARROW_DOWN 0x2193
+
+//*******************************************************
+// Attributes
+//*******************************************************
+#define EFI_BLACK 0x00
+#define EFI_BLUE 0x01
+#define EFI_GREEN 0x02
+#define EFI_CYAN 0x03
+#define EFI_RED 0x04
+#define EFI_MAGENTA 0x05
+#define EFI_BROWN 0x06
+#define EFI_LIGHTGRAY 0x07
+#define EFI_BRIGHT 0x08
+#define EFI_DARKGRAY 0x08
+#define EFI_LIGHTBLUE 0x09
+#define EFI_LIGHTGREEN 0x0A
+#define EFI_LIGHTCYAN 0x0B
+#define EFI_LIGHTRED 0x0C
+#define EFI_LIGHTMAGENTA 0x0D
+#define EFI_YELLOW 0x0E
+#define EFI_WHITE 0x0F
+#define EFI_BACKGROUND_BLACK 0x00
+#define EFI_BACKGROUND_BLUE 0x10
+#define EFI_BACKGROUND_GREEN 0x20
+#define EFI_BACKGROUND_CYAN 0x30
+#define EFI_BACKGROUND_RED 0x40
+#define EFI_BACKGROUND_MAGENTA 0x50
+#define EFI_BACKGROUND_BROWN 0x60
+#define EFI_BACKGROUND_LIGHTGRAY 0x70
+
+typedef struct efi_simple_text_output_protocol {
+    efi_status (*Reset) (struct efi_simple_text_output_protocol* self,
+                         bool extended_verification) EFIAPI;
+
+    efi_status (*OutputString) (struct efi_simple_text_output_protocol* self,
+                                char16_t* string) EFIAPI;
+
+    efi_status (*TestString) (struct efi_simple_text_output_protocol* self,
+                              char16_t* string) EFIAPI;
+
+    efi_status (*QueryMode) (struct efi_simple_text_output_protocol* self,
+                             size_t mode_num, size_t* cols, size_t* rows) EFIAPI;
+
+    efi_status (*SetMode) (struct efi_simple_text_output_protocol* self,
+                           size_t mode_num) EFIAPI;
+
+    efi_status (*SetAttribute) (struct efi_simple_text_output_protocol* self,
+                                size_t attribute) EFIAPI;
+
+    efi_status (*ClearScreen) (struct efi_simple_text_output_protocol* self) EFIAPI;
+
+    efi_status (*SetCursorPosition) (struct efi_simple_text_output_protocol* self,
+                                     size_t col, size_t row) EFIAPI;
+
+    efi_status (*EnableCursor) (struct efi_simple_text_output_protocol* self,
+                                bool visible) EFIAPI;
+
+    simple_text_output_mode* Mode;
+} efi_simple_text_output_protocol;
diff --git a/include/efi/protocol/usb-io.h b/include/efi/protocol/usb-io.h
new file mode 100644
index 0000000..721ce92
--- /dev/null
+++ b/include/efi/protocol/usb-io.h
@@ -0,0 +1,147 @@
+// 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 <efi/types.h>
+
+#define EFI_USB_IO_PROTOCOL_GUID \
+    {0x2b2f68d6, 0x0cd2, 0x44cf, {0x8e, 0x8b, 0xbb, 0xa2, 0x0b, 0x1b, 0x5b, 0x75}}
+extern efi_guid UsbIoProtocol;
+
+typedef enum {
+    EfiUsbDataIn,
+    EfiUsbDataOut,
+    EfiUsbNoData
+} efi_usb_data_direction;
+
+#define EFI_USB_NOERROR        0x0000
+#define EFI_USB_ERR_NOTEXECUTE 0x0001
+#define EFI_USB_ERR_STALL      0x0002
+#define EFI_USB_ERR_BUFFER     0x0004
+#define EFI_USB_ERR_BABBLE     0x0008
+#define EFI_USB_ERR_NAK        0x0010
+#define EFI_USB_ERR_CRC        0x0020
+#define EFI_USB_ERR_TIMEOUT    0x0040
+#define EFI_USB_ERR_BITSTUFF   0x0080
+#define EFI_USB_ERR_SYSTEM     0x0100
+
+typedef struct {
+    uint8_t  RequestType;
+    uint8_t  Request;
+    uint16_t Value;
+    uint16_t Index;
+    uint16_t Length;
+} efi_usb_device_request;
+
+typedef efi_status (*efi_async_usb_transfer_callback) (
+        void* Data, size_t DataLength, void* Context, uint32_t Status) EFIAPI;
+
+typedef struct {
+    uint8_t  Length;
+    uint8_t  DescriptorType;
+    uint16_t BcdUSB;
+    uint8_t  DeviceClass;
+    uint8_t  DeviceSubClass;
+    uint8_t  DeviceProtocol;
+    uint8_t  MaxPacketSize0;
+    uint16_t IdVendor;
+    uint16_t IdProduct;
+    uint16_t BcdDevice;
+    uint8_t  StrManufacturer;
+    uint8_t  StrProduct;
+    uint8_t  StrSerialNumber;
+    uint8_t  NumConfigurations;
+} efi_usb_device_descriptor;
+
+typedef struct {
+    uint8_t  Length;
+    uint8_t  DescriptorType;
+    uint16_t TotalLength;
+    uint8_t  NumInterfaces;
+    uint8_t  ConfigurationValue;
+    uint8_t  Configuration;
+    uint8_t  Attributes;
+    uint8_t  MaxPower;
+} efi_usb_config_descriptor;
+
+typedef struct {
+    uint8_t Length;
+    uint8_t DescriptorType;
+    uint8_t InterfaceNumber;
+    uint8_t AlternateSetting;
+    uint8_t NumEndpoints;
+    uint8_t InterfaceClass;
+    uint8_t InterfaceSubClass;
+    uint8_t InterfaceProtocol;
+    uint8_t Interface;
+} efi_usb_interface_descriptor;
+
+typedef struct {
+    uint8_t  Length;
+    uint8_t  DescriptorType;
+    uint8_t  EndpointAddress;
+    uint8_t  Attributes;
+    uint16_t MaxPacketSize;
+    uint8_t  Interval;
+} efi_usb_endpoint_descriptor;
+
+typedef struct efi_usb_io_protocol {
+    efi_status (*UsbControlTransfer) (struct efi_usb_io_protocol* self,
+                                      efi_usb_device_request* request,
+                                      efi_usb_data_direction direction,
+                                      uint32_t timeout, void* data,
+                                      size_t data_len, uint32_t* status) EFIAPI;
+
+    efi_status (*UsbBulkTransfer) (struct efi_usb_io_protocol* self,
+                                   uint8_t endpoint, void* data,
+                                   size_t data_len, size_t timeout,
+                                   uint32_t* status) EFIAPI;
+
+    efi_status (*UsbAsyncInterruptTransfer) (struct efi_usb_io_protocol* self,
+                                             uint8_t endpoint, bool is_new_transfer,
+                                             size_t polling_interval,
+                                             size_t data_len,
+                                             efi_async_usb_transfer_callback interrupt_cb,
+                                             void* context) EFIAPI;
+
+    efi_status (*UsbSyncInterruptTransfer) (struct efi_usb_io_protocol* self,
+                                            uint8_t endpoint, void* data,
+                                            size_t* data_len, size_t timeout,
+                                            uint32_t* status) EFIAPI;
+
+    efi_status (*UsbIsochronousTransfer) (struct efi_usb_io_protocol* self,
+                                          uint8_t endpoint,
+                                          void* data, size_t data_len,
+                                          uint32_t* status) EFIAPI;
+
+    efi_status (*UsbAsyncIsochronousTransfer) (struct efi_usb_io_protocol* self,
+                                               uint8_t endpoint,
+                                               void* data, size_t data_len,
+                                               efi_async_usb_transfer_callback isoc_cb,
+                                               void* context) EFIAPI;
+
+    efi_status (*UsbGetDeviceDescriptor) (struct efi_usb_io_protocol* self,
+                                          efi_usb_device_descriptor* descriptor) EFIAPI;
+
+    efi_status (*UsbGetConfigDescriptor) (struct efi_usb_io_protocol* self,
+                                          efi_usb_config_descriptor* descriptor) EFIAPI;
+
+    efi_status (*UsbGetInterfaceDescriptor) (struct efi_usb_io_protocol* self,
+                                             efi_usb_interface_descriptor* descriptor) EFIAPI;
+
+    efi_status (*UsbGetEndpointDescriptor) (struct efi_usb_io_protocol* self,
+                                            uint8_t endpt_index,
+                                            efi_usb_endpoint_descriptor* descriptor) EFIAPI;
+
+    efi_status (*UsbGetStringDescriptor) (struct efi_usb_io_protocol* self,
+                                          uint16_t langid, uint8_t stringid,
+                                          char16_t** str) EFIAPI;
+
+    efi_status (*UsbGetSupportedLanguages) (struct efi_usb_io_protocol* self,
+                                            uint16_t** langid_table,
+                                            uint16_t* table_size) EFIAPI;
+
+    efi_status (*UsbPortReset) (struct efi_usb_io_protocol* self) EFIAPI;
+} efi_usb_io_protocol;
diff --git a/include/efi/runtime-services.h b/include/efi/runtime-services.h
new file mode 100644
index 0000000..613b34f
--- /dev/null
+++ b/include/efi/runtime-services.h
@@ -0,0 +1,151 @@
+// 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 <efi/types.h>
+#include <efi/boot-services.h>
+
+#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
+#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION
+
+#define EFI_VARIABLE_NON_VOLATILE                          0x00000001
+#define EFI_VARIABLE_BOOTSERVICE_ACCESS                    0x00000002
+#define EFI_VARIABLE_RUNTIME_ACCESS                        0x00000004
+#define EFI_VARIABLE_HARDWARE_ERROR_RECORD                 0x00000008
+#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS            0x00000010
+#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
+#define EFI_VARIABLE_APPEND_WRITE                          0x00000040
+
+// TODO: implement the win_certificate structs if we need them
+//typedef struct {
+//    uint64_t MonotonicCount;
+//    win_certificate_uefi_guid AuthInfo;
+//} efi_variable_authentication;
+//
+//typedef struct {
+//    efi_time TimeStamp;
+//    win_certificate_uefi_guid AuthInfo;
+//} efi_variable_authentication_2;
+
+#define EFI_HARDWARE_ERROR_VARIABLE \
+    {0x414e6bdd, 0xe47b, 0x47cc, {0xb2, 0x44, 0xbb, 0x61, 0x02, 0x0c, 0xf5, 0x16}}
+
+typedef struct {
+    uint16_t Year;
+    uint8_t  Month;
+    uint8_t  Day;
+    uint8_t  Hour;
+    uint8_t  Minute;
+    uint8_t  Second;
+    uint8_t  Pad1;
+    uint32_t Nanosecond;
+    int16_t  TimeZone;
+    uint8_t  Daylight;
+    uint8_t  Pad2;
+} efi_time;
+
+#define EFI_TIME_ADJUST_DAYLIGHT 0x01
+#define EFI_TIME_IN_DAYLIGHT     0x02
+
+#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
+
+typedef struct {
+    uint32_t Resolution;
+    uint32_t Accuracy;
+    bool SetsToZero;
+} efi_time_capabilities;
+
+#define EFI_OPTIONAL_PTR 0x00000001
+
+typedef enum {
+    EfiResetCold,
+    EfiResetWarm,
+    EfiResetShutdown,
+    EfiResetPlatformSpecific
+} efi_reset_type;
+
+typedef struct {
+    uint64_t Length;
+    union {
+        efi_physical_addr DataBlock;
+        efi_physical_addr ContinuationPointer;
+    } Union;
+} efi_capsule_block_descriptor;
+
+typedef struct {
+    efi_guid CapsuleGuid;
+    uint32_t HeaderSize;
+    uint32_t Flags;
+    uint32_t CapsuleImageSize;
+} efi_capsule_header;
+
+#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET  0x00010000
+#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000
+#define CAPSULE_FLAGS_INITIATE_RESET        0x00040000
+
+#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI                   0x0000000000000001
+#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION            0x0000000000000002
+#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004
+#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED           0x0000000000000008
+#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED    0x0000000000000010
+#define EFI_OS_INDICATIONS_START_OS_RECOVERY               0x0000000000000020
+#define EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY         0x0000000000000040
+
+#define EFI_CAPSULE_REPORT_GUID \
+    {0x39b68c46, 0xf7fb, 0x441b, {0xb6, 0xec, 0x16, 0xb0, 0xf6, 0x98, 0x21, 0xf3}}
+
+typedef struct {
+    uint32_t VariableTotalSize;
+    uint32_t Reserved;
+    efi_guid CapsuleGuid;
+    efi_time CapsuleProcessed;
+    efi_status CapsuleStatus;
+} efi_capsule_result_variable_header;
+
+typedef struct {
+    efi_table_header Hdr;
+
+    efi_status (*GetTime) (efi_time* time, efi_time_capabilities* capabilities) EFIAPI;
+
+    efi_status (*SetTime) (efi_time* time) EFIAPI;
+
+    efi_status (*GetWakeupTime) (bool* enabled, bool* pending, efi_time* time) EFIAPI;
+
+    efi_status (*SetWakeupTime) (bool enable, efi_time* time) EFIAPI;
+
+    efi_status (*SetVirtualAddressMap) (size_t memory_map_size, size_t desc_size,
+                                        uint32_t desc_version,
+                                        efi_memory_descriptor* virtual_map) EFIAPI;
+
+    efi_status (*ConvertPointer) (size_t debug_disposition, void** addr) EFIAPI;
+
+    efi_status (*GetVariable) (char16_t* var_name, efi_guid* vendor_guid,
+                               uint32_t* attributes, size_t* data_size, void* data) EFIAPI;
+
+    efi_status (*GetNextVariableName) (size_t* var_name_size, char16_t* var_name,
+                                       efi_guid* vendor_guid) EFIAPI;
+
+    efi_status (*SetVariable) (char16_t* var_name, efi_guid* vendor_guid,
+                               uint32_t attributes, size_t data_size, void* data) EFIAPI;
+
+    efi_status (*GetNextHighMonotonicCount) (uint32_t* high_count) EFIAPI;
+
+    efi_status (*ResetSystem) (efi_reset_type reset_type, efi_status reset_status,
+                               size_t data_size, void* reset_data) EFIAPI;
+
+    efi_status (*UpdateCapsule) (efi_capsule_header** capsule_header_array,
+                                 size_t capsule_count,
+                                 efi_physical_addr scatter_gather_list) EFIAPI;
+
+    efi_status (*QueryCapsuleCapabilities) (efi_capsule_header** capsule_header_array,
+                                            size_t capsule_count,
+                                            uint64_t* max_capsule_size,
+                                            efi_reset_type* reset_type) EFIAPI;
+
+    efi_status (*QueryVariableInfo) (uint32_t attributes,
+                                     uint64_t* max_var_storage_size,
+                                     uint64_t* remaining_var_storage_size,
+                                     uint64_t* max_var_size) EFIAPI;
+} efi_runtime_services;
diff --git a/include/efi/system-table.h b/include/efi/system-table.h
new file mode 100644
index 0000000..3f145af
--- /dev/null
+++ b/include/efi/system-table.h
@@ -0,0 +1,48 @@
+// 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>
+
+#include <efi/types.h>
+#include <efi/boot-services.h>
+#include <efi/runtime-services.h>
+#include <efi/protocol/simple-text-input.h>
+#include <efi/protocol/simple-text-output.h>
+
+#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
+#define EFI_2_60_SYSTEM_TABLE_REVISION ((2<<16) | (60))
+#define EFI_2_50_SYSTEM_TABLE_REVISION ((2<<16) | (50))
+#define EFI_2_40_SYSTEM_TABLE_REVISION ((2<<16) | (40))
+#define EFI_2_31_SYSTEM_TABLE_REVISION ((2<<16) | (31))
+#define EFI_2_30_SYSTEM_TABLE_REVISION ((2<<16) | (30))
+#define EFI_2_20_SYSTEM_TABLE_REVISION ((2<<16) | (20))
+#define EFI_2_10_SYSTEM_TABLE_REVISION ((2<<16) | (10))
+#define EFI_2_00_SYSTEM_TABLE_REVISION ((2<<16) | (00))
+#define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | (10))
+#define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | (02))
+#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION
+#define EFI_SYSTEM_TABLE_REVISION EFI_2_60_SYSTEM_TABLE_REVISION
+
+typedef struct {
+    efi_guid VendorGuid;
+    void* VendorTable;
+} efi_configuration_table;
+
+typedef struct efi_system_table {
+    efi_table_header Hdr;
+    char16_t* FirmwareVendor;
+    uint32_t 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;
+    size_t NumberOfTableEntries;
+    efi_configuration_table *ConfigurationTable;
+} efi_system_table;
diff --git a/include/efi/types.h b/include/efi/types.h
new file mode 100644
index 0000000..2aa6408
--- /dev/null
+++ b/include/efi/types.h
@@ -0,0 +1,141 @@
+// 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;
diff --git a/include/stdint.h b/include/stdint.h
index 6dd18fd..a7e4d5a 100644
--- a/include/stdint.h
+++ b/include/stdint.h
@@ -29,4 +29,4 @@
 #define INT_MAX (__INT_MAX__)
 
 typedef int ssize_t;
-
+typedef __CHAR16_TYPE__ char16_t;
diff --git a/include/utils.h b/include/utils.h
index 3a7b225..76f96ff 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -4,30 +4,40 @@
 
 #pragma once
 
-void InitGoodies(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys);
+#include <efi/boot-services.h>
+#include <efi/system-table.h>
+#include <efi/types.h>
+#include <efi/protocol/device-path.h>
+#include <efi/protocol/simple-text-output.h>
+
+void InitGoodies(efi_handle img, efi_system_table* sys);
 
 void WaitAnyKey(void);
-void Fatal(const char* msg, EFI_STATUS status);
-CHAR16* HandleToString(EFI_HANDLE handle);
-const char *efi_strerror(EFI_STATUS status);
-const CHAR16 *efi_wstrerror(EFI_STATUS status);
-size_t strlen_16(CHAR16 *str);
+void Fatal(const char* msg, efi_status status);
+char16_t* HandleToString(efi_handle handle);
+const char *efi_strerror(efi_status status);
+const char16_t* efi_wstrerror(efi_status status);
+size_t strlen_16(char16_t* str);
+
+char16_t* DevicePathToStr(efi_device_path_protocol* path);
+
+int CompareGuid(efi_guid* guid1, efi_guid* guid2);
 
 // Convenience wrappers for Open/Close protocol for use by
 // UEFI app code that's not a driver model participant
-EFI_STATUS OpenProtocol(EFI_HANDLE h, EFI_GUID* guid, void** ifc);
-EFI_STATUS CloseProtocol(EFI_HANDLE h, EFI_GUID* guid);
+efi_status OpenProtocol(efi_handle h, efi_guid* guid, void** ifc);
+efi_status CloseProtocol(efi_handle h, efi_guid* guid);
 
-void* LoadFile(CHAR16* filename, UINTN* size_out);
+void* LoadFile(char16_t* filename, size_t* size_out);
 
-EFI_STATUS FindPCIMMIO(EFI_BOOT_SERVICES* bs, uint8_t cls, uint8_t sub, uint8_t ifc, uint64_t* mmio);
+efi_status FindPCIMMIO(efi_boot_services* bs, uint8_t cls, uint8_t sub, uint8_t ifc, uint64_t* mmio);
 
 // GUIDs
-extern EFI_GUID SimpleFileSystemProtocol;
-extern EFI_GUID FileInfoGUID;
+extern efi_guid SimpleFileSystemProtocol;
+extern efi_guid FileInfoGUID;
 
 // Global Context
-extern EFI_HANDLE gImg;
-extern EFI_SYSTEM_TABLE* gSys;
-extern EFI_BOOT_SERVICES* gBS;
-extern SIMPLE_TEXT_OUTPUT_INTERFACE* gConOut;
+extern efi_handle gImg;
+extern efi_system_table* gSys;
+extern efi_boot_services* gBS;
+extern efi_simple_text_output_protocol* gConOut;
diff --git a/lib/console-printf.c b/lib/console-printf.c
index 3a07f67..e599cae 100644
--- a/lib/console-printf.c
+++ b/lib/console-printf.c
@@ -3,9 +3,6 @@
 // found in the LICENSE file.
 
 #include <printf.h>
-
-#include <efi.h>
-#include <efilib.h>
 #include <utils.h>
 
 #define PCBUFMAX 126
@@ -14,12 +11,12 @@
 
 typedef struct {
     int off;
-    CHAR16 buf[PCBUFMAX + 2];
+    char16_t buf[PCBUFMAX + 2];
 } _pcstate;
 
 static int _printf_console_out(const char* str, size_t len, void* _state) {
     _pcstate* state = _state;
-    CHAR16* buf = state->buf;
+    char16_t* buf = state->buf;
     int i = state->off;
     int n = len;
     while (n > 0) {
diff --git a/lib/efi/guids.c b/lib/efi/guids.c
new file mode 100644
index 0000000..20fd51a
--- /dev/null
+++ b/lib/efi/guids.c
@@ -0,0 +1,32 @@
+// 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.
+
+#include <efi/protocol/device-path.h>
+#include <efi/protocol/device-path-to-text.h>
+#include <efi/protocol/driver-binding.h>
+#include <efi/protocol/file.h>
+#include <efi/protocol/graphics-output.h>
+#include <efi/protocol/loaded-image.h>
+#include <efi/protocol/managed-network.h>
+#include <efi/protocol/pci-root-bridge-io.h>
+#include <efi/protocol/simple-file-system.h>
+#include <efi/protocol/simple-network.h>
+#include <efi/protocol/simple-text-input.h>
+#include <efi/protocol/simple-text-output.h>
+#include <efi/protocol/usb-io.h>
+
+efi_guid DevicePathProtocol = EFI_DEVICE_PATH_PROTOCOL_GUID;
+efi_guid DevicePathToTextProtocol = EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID;
+efi_guid DriverBindingProtocol = EFI_DRIVER_BINDING_PROTOCOL_GUID;
+efi_guid FileInfoGuid = EFI_FILE_INFO_GUID;
+efi_guid FileSystemInfoGuid = EFI_FILE_SYSTEM_INFO_GUID;
+efi_guid GraphicsOutputProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
+efi_guid LoadedImageProtocol = EFI_LOADED_IMAGE_PROTOCOL_GUID;
+efi_guid ManagedNetworkProtocol = EFI_MANAGED_NETWORK_PROTOCOL_GUID;
+efi_guid PciRootBridgeIoProtocol = EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
+efi_guid SimpleFileSystemProtocol = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
+efi_guid SimpleNetworkProtocol = EFI_SIMPLE_NETWORK_PROTOCOL_GUID;
+efi_guid SimpleTextInputProtocol = EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID;
+efi_guid SimpleTextOutputProtocol = EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID;
+efi_guid UsbIoProtocol = EFI_USB_IO_PROTOCOL_GUID;
diff --git a/lib/loadfile.c b/lib/loadfile.c
index aad14ea..bbe5410 100644
--- a/lib/loadfile.c
+++ b/lib/loadfile.c
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/protocol/loaded-image.h>
+#include <efi/protocol/simple-file-system.h>
+
 #include <utils.h>
 #include <stdio.h>
 
-void* LoadFile(CHAR16* filename, UINTN* _sz) {
-    EFI_LOADED_IMAGE* loaded;
-    EFI_STATUS r;
+void* LoadFile(char16_t* filename, size_t* _sz) {
+    efi_loaded_image_protocol* loaded;
+    efi_status r;
     void* data = NULL;
-    UINTN pages = 0;
+    size_t pages = 0;
 
     r = OpenProtocol(gImg, &LoadedImageProtocol, (void**)&loaded);
     if (r) {
@@ -25,21 +26,21 @@
 	printf("Img Base=%lx Size=%lx\n", loaded->ImageBase, loaded->ImageSize);
 #endif
 
-    EFI_FILE_IO_INTERFACE* fioi;
-    r = OpenProtocol(loaded->DeviceHandle, &SimpleFileSystemProtocol, (void**)&fioi);
+    efi_simple_file_system_protocol* sfs;
+    r = OpenProtocol(loaded->DeviceHandle, &SimpleFileSystemProtocol, (void**)&sfs);
     if (r) {
         printf("LoadFile: Cannot open SimpleFileSystemProtocol (%s)\n", efi_strerror(r));
         goto exit1;
     }
 
-    EFI_FILE_HANDLE root;
-    r = fioi->OpenVolume(fioi, &root);
+    efi_file_protocol* root;
+    r = sfs->OpenVolume(sfs, &root);
     if (r) {
         printf("LoadFile: Cannot open root volume (%s)\n", efi_strerror(r));
         goto exit2;
     }
 
-    EFI_FILE_HANDLE file;
+    efi_file_protocol* file;
     r = root->Open(root, &file, filename, EFI_FILE_MODE_READ, 0);
     if (r) {
         printf("LoadFile: Cannot open file (%s)\n", efi_strerror(r));
@@ -47,16 +48,16 @@
     }
 
     char buf[512];
-    UINTN sz = sizeof(buf);
-    EFI_FILE_INFO* finfo = (void*)buf;
-    r = file->GetInfo(file, &FileInfoGUID, &sz, finfo);
+    size_t sz = sizeof(buf);
+    efi_file_info* finfo = (void*)buf;
+    r = file->GetInfo(file, &FileInfoGuid, &sz, finfo);
     if (r) {
         printf("LoadFile: Cannot get FileInfo (%s)\n", efi_strerror(r));
         goto exit3;
     }
 
     pages = (finfo->FileSize + 4095) / 4096;
-    r = gBS->AllocatePages(AllocateAnyPages, EfiLoaderData, pages, (EFI_PHYSICAL_ADDRESS *)&data);
+    r = gBS->AllocatePages(AllocateAnyPages, EfiLoaderData, pages, (efi_physical_addr *)&data);
     if (r) {
         printf("LoadFile: Cannot allocate buffer (%s)\n", efi_strerror(r));
         data = NULL;
@@ -67,13 +68,13 @@
     r = file->Read(file, &sz, data);
     if (r) {
         printf("LoadFile: Error reading file (%s)\n", efi_strerror(r));
-        gBS->FreePages((EFI_PHYSICAL_ADDRESS)data, pages);
+        gBS->FreePages((efi_physical_addr)data, pages);
         data = NULL;
         goto exit4;
     }
     if (sz != finfo->FileSize) {
         printf("LoadFile: Short read\n");
-        gBS->FreePages((EFI_PHYSICAL_ADDRESS)data, pages);
+        gBS->FreePages((efi_physical_addr)data, pages);
         data = NULL;
         goto exit4;
     }
diff --git a/lib/utils.c b/lib/utils.c
index 67107cb..4dc2cd8 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -2,16 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/types.h>
+#include <efi/protocol/device-path-to-text.h>
+#include <efi/protocol/file.h>
+#include <efi/protocol/simple-file-system.h>
 
-#include <utils.h>
+#include <stdlib.h>
+#include <string.h>
 #include <printf.h>
+#include <utils.h>
 
 #define ERR_ENTRY(x) { #x, L"" #x }
 typedef struct {
-    const char *str;
-    const CHAR16 *w_str;
+    const char* str;
+    const char16_t* w_str;
 } err_entry_t;
 
 err_entry_t efi_error_labels[] = {
@@ -49,18 +53,12 @@
     ERR_ENTRY(EFI_COMPROMISED_DATA),
 };
 
-// Useful GUID Constants Not Defined by -lefi
-EFI_GUID SimpleFileSystemProtocol = SIMPLE_FILE_SYSTEM_PROTOCOL;
-EFI_GUID FileInfoGUID = EFI_FILE_INFO_ID;
+efi_system_table* gSys;
+efi_handle gImg;
+efi_boot_services* gBS;
+efi_simple_text_output_protocol* gConOut;
 
-// -lefi has its own globals, but this may end up not
-// depending on that, so let's not depend on those
-EFI_SYSTEM_TABLE* gSys;
-EFI_HANDLE gImg;
-EFI_BOOT_SERVICES* gBS;
-SIMPLE_TEXT_OUTPUT_INTERFACE* gConOut;
-
-void InitGoodies(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
+void InitGoodies(efi_handle img, efi_system_table* sys) {
     gSys = sys;
     gImg = img;
     gBS = sys->BootServices;
@@ -68,38 +66,66 @@
 }
 
 void WaitAnyKey(void) {
-    SIMPLE_INPUT_INTERFACE* sii = gSys->ConIn;
-    EFI_INPUT_KEY key;
+    efi_simple_text_input_protocol* sii = gSys->ConIn;
+    efi_input_key key;
     while (sii->ReadKeyStroke(sii, &key) != EFI_SUCCESS)
         ;
 }
 
-void Fatal(const char* msg, EFI_STATUS status) {
+void Fatal(const char* msg, efi_status status) {
     printf("\nERROR: %s (%s)\n", msg, efi_strerror(status));
     WaitAnyKey();
     gBS->Exit(gImg, 1, 0, NULL);
 }
 
-CHAR16* HandleToString(EFI_HANDLE h) {
-    EFI_DEVICE_PATH* path = DevicePathFromHandle(h);
-    if (path == NULL)
-        return L"<NoPath>";
-    CHAR16* str = DevicePathToStr(path);
-    if (str == NULL)
-        return L"<NoString>";
+char16_t* DevicePathToStr(efi_device_path_protocol* path) {
+    efi_device_path_to_text_protocol* prot;
+    efi_status status = gBS->LocateProtocol(&DevicePathToTextProtocol, NULL, (void**)&prot);
+    if (EFI_ERROR(status)) {
+        return NULL;
+    }
+    return prot->ConvertDevicePathToText(path, false, false);
+}
+
+int CompareGuid(efi_guid* guid1, efi_guid* guid2) {
+    return memcmp(guid1, guid2, sizeof(efi_guid));
+}
+
+char16_t* HandleToString(efi_handle h) {
+    efi_device_path_protocol* path;
+    efi_status status = gBS->HandleProtocol(h, &DevicePathProtocol, (void*)&path);
+    if (EFI_ERROR(status)) {
+        char16_t* err;
+        status = gBS->AllocatePool(EfiLoaderData, sizeof(L"<NoPath>"), (void**)&err);
+        if (EFI_ERROR(status)) {
+            return NULL;
+        }
+        gBS->CopyMem(err, L"<NoPath>", sizeof(L"<NoPath>"));
+        return err;
+    }
+    char16_t* str = DevicePathToStr(path);
+    if (str == NULL) {
+        char16_t* err;
+        status = gBS->AllocatePool(EfiLoaderData, sizeof(L"<NoString>"), (void**)&err);
+        if (EFI_ERROR(status)) {
+            return NULL;
+        }
+        gBS->CopyMem(err, L"<NoString>", sizeof(L"<NoString>"));
+        return err;
+    }
     return str;
 }
 
-EFI_STATUS OpenProtocol(EFI_HANDLE h, EFI_GUID* guid, void** ifc) {
+efi_status OpenProtocol(efi_handle h, efi_guid* guid, void** ifc) {
     return gBS->OpenProtocol(h, guid, ifc, gImg, NULL,
                              EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
 }
 
-EFI_STATUS CloseProtocol(EFI_HANDLE h, EFI_GUID* guid) {
+efi_status CloseProtocol(efi_handle h, efi_guid* guid) {
     return gBS->CloseProtocol(h, guid, gImg, NULL);
 }
 
-const char *efi_strerror(EFI_STATUS status)
+const char *efi_strerror(efi_status status)
 {
     size_t i = (~EFI_ERROR_MASK & status);
     if (i < sizeof(efi_error_labels)/sizeof(efi_error_labels[0])) {
@@ -109,7 +135,7 @@
     return "<Unknown error>";
 }
 
-const CHAR16 *efi_wstrerror(EFI_STATUS status)
+const char16_t* efi_wstrerror(efi_status status)
 {
     size_t i = (~EFI_ERROR_MASK & status);
     if (i < sizeof(efi_error_labels)/sizeof(efi_error_labels[0])) {
@@ -119,7 +145,7 @@
     return L"<Unknown error>";
 }
 
-size_t strlen_16(CHAR16 *str)
+size_t strlen_16(char16_t* str)
 {
     size_t len = 0;
     while (*(str + len) != '\0') {
diff --git a/src/fileio.c b/src/fileio.c
index 2cad9da..3e39970 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2,48 +2,51 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/system-table.h>
+#include <efi/types.h>
+#include <efi/protocol/loaded-image.h>
+#include <efi/protocol/simple-file-system.h>
+
+#include <stdio.h>
 #include <utils.h>
 
-EFI_STATUS efi_main(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_LOADED_IMAGE* loaded;
-    EFI_STATUS r;
+efi_status efi_main(efi_handle img, efi_system_table* sys) {
+    efi_loaded_image_protocol* loaded;
+    efi_status r;
 
-    InitializeLib(img, sys);
     InitGoodies(img, sys);
 
-    Print(L"Hello, EFI World\n");
+    printf("Hello, EFI World\n");
 
     r = OpenProtocol(img, &LoadedImageProtocol, (void**)&loaded);
     if (r)
         Fatal("LoadedImageProtocol", r);
 
-    Print(L"Img DeviceHandle='%s'\n", HandleToString(loaded->DeviceHandle));
-    Print(L"Img FilePath='%s'\n", DevicePathToStr(loaded->FilePath));
-    Print(L"Img Base=%lx Size=%lx\n", loaded->ImageBase, loaded->ImageSize);
+    printf("Img DeviceHandle='%ls'\n", HandleToString(loaded->DeviceHandle));
+    printf("Img FilePath='%ls'\n", DevicePathToStr(loaded->FilePath));
+    printf("Img Base=%p Size=%lx\n", loaded->ImageBase, loaded->ImageSize);
 
-    EFI_FILE_IO_INTERFACE* fioi;
-    r = OpenProtocol(loaded->DeviceHandle, &SimpleFileSystemProtocol, (void**)&fioi);
+    efi_simple_file_system_protocol* sfs;
+    r = OpenProtocol(loaded->DeviceHandle, &SimpleFileSystemProtocol, (void**)&sfs);
     if (r)
         Fatal("SimpleFileSystemProtocol", r);
 
-    EFI_FILE_HANDLE root;
-    r = fioi->OpenVolume(fioi, &root);
+    efi_file_protocol* root;
+    r = sfs->OpenVolume(sfs, &root);
     if (r)
         Fatal("OpenVolume", r);
 
-    EFI_FILE_HANDLE file;
+    efi_file_protocol* file;
     r = root->Open(root, &file, L"README.txt", EFI_FILE_MODE_READ, 0);
 
     if (r == EFI_SUCCESS) {
         char buf[512];
-        UINTN sz = sizeof(buf);
-        EFI_FILE_INFO* finfo = (void*)buf;
-        r = file->GetInfo(file, &FileInfoGUID, &sz, finfo);
+        size_t sz = sizeof(buf);
+        efi_file_info* finfo = (void*)buf;
+        r = file->GetInfo(file, &FileInfoGuid, &sz, finfo);
         if (r)
             Fatal("GetInfo", r);
-        Print(L"FileSize %ld\n", finfo->FileSize);
+        printf("FileSize %ld\n", finfo->FileSize);
 
         sz = sizeof(buf) - 1;
         r = file->Read(file, &sz, buf);
@@ -52,7 +55,7 @@
 
         char* x = buf;
         while (sz-- > 0)
-            Print(L"%c", (CHAR16)*x++);
+            printf("%c", *x++);
 
         file->Close(file);
     }
diff --git a/src/hello.c b/src/hello.c
index 551e354..45c62bb 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
+#include <efi/types.h>
 
-EFI_STATUS efi_main(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    SIMPLE_TEXT_OUTPUT_INTERFACE* ConOut = sys->ConOut;
+efi_status efi_main(efi_handle img, efi_system_table* sys) {
+    efi_simple_text_output_protocol* ConOut = sys->ConOut;
     ConOut->OutputString(ConOut, L"Hello, EFI World!\r\n");
     return EFI_SUCCESS;
 }
diff --git a/src/magenta.c b/src/magenta.c
index 5d7dfa4..e4e1b0a 100644
--- a/src/magenta.c
+++ b/src/magenta.c
@@ -4,18 +4,18 @@
 
 #include <magenta.h>
 
-#include <efilib.h>
+#include <efi/protocol/graphics-output.h>
+
 #include <stdio.h>
 #include <string.h>
 #include <utils.h>
 
-static EFI_GUID GraphicsOutputProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
-static EFI_GUID AcpiTableGUID = ACPI_TABLE_GUID;
-static EFI_GUID Acpi2TableGUID = ACPI_20_TABLE_GUID;
-static UINT8 ACPI_RSD_PTR[8] = "RSD PTR ";
+static efi_guid AcpiTableGUID = ACPI_TABLE_GUID;
+static efi_guid Acpi2TableGUID = ACPI_20_TABLE_GUID;
+static uint8_t ACPI_RSD_PTR[8] = "RSD PTR ";
 
-uint32_t find_acpi_root(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_CONFIGURATION_TABLE* cfgtab = sys->ConfigurationTable;
+uint32_t find_acpi_root(efi_handle img, efi_system_table* sys) {
+    efi_configuration_table* cfgtab = sys->ConfigurationTable;
     int i;
 
     for (i = 0; i < sys->NumberOfTableEntries; i++) {
@@ -24,7 +24,7 @@
             // not an ACPI table
             continue;
         }
-        if (CompareMem(cfgtab[i].VendorTable, ACPI_RSD_PTR, 8)) {
+        if (memcmp(cfgtab[i].VendorTable, ACPI_RSD_PTR, 8)) {
             // not the Root Description Pointer
             continue;
         }
@@ -50,9 +50,9 @@
 };
 
 struct e820entry {
-    UINT64 addr;
-    UINT64 size;
-    UINT32 type;
+    uint64_t addr;
+    uint64_t size;
+    uint32_t type;
 } __attribute__((packed));
 
 static unsigned e820type(unsigned uefi_mem_type) {
@@ -91,17 +91,17 @@
 static unsigned char scratch[32768];
 static struct e820entry e820table[128];
 
-static int process_memory_map(EFI_SYSTEM_TABLE* sys, UINTN* _key, int silent) {
-    EFI_MEMORY_DESCRIPTOR* mmap;
+static int process_memory_map(efi_system_table* sys, size_t* _key, int silent) {
+    efi_memory_descriptor* mmap;
     struct e820entry* entry = e820table;
-    UINTN msize, off;
-    UINTN mkey, dsize;
-    UINT32 dversion;
+    size_t msize, off;
+    size_t mkey, dsize;
+    uint32_t dversion;
     unsigned n, type;
-    EFI_STATUS r;
+    efi_status r;
 
     msize = sizeof(scratch);
-    mmap = (EFI_MEMORY_DESCRIPTOR*)scratch;
+    mmap = (efi_memory_descriptor*)scratch;
     mkey = dsize = dversion = 0;
     r = sys->BootServices->GetMemoryMap(&msize, mmap, &mkey, &dsize, &dversion);
     if (!silent)
@@ -115,7 +115,7 @@
         return -1;
     }
     for (off = 0, n = 0; off < msize; off += dsize) {
-        mmap = (EFI_MEMORY_DESCRIPTOR*)(scratch + off);
+        mmap = (efi_memory_descriptor*)(scratch + off);
         type = e820type(mmap->Type);
         if (type == E820_IGNORE) {
             continue;
@@ -166,9 +166,9 @@
 
 #define ZP_MAGIC_VALUE 0xDBC64323
 
-#define ZP8(p, off) (*((UINT8*)((p) + (off))))
-#define ZP16(p, off) (*((UINT16*)((p) + (off))))
-#define ZP32(p, off) (*((UINT32*)((p) + (off))))
+#define ZP8(p, off) (*((uint8_t*)((p) + (off))))
+#define ZP16(p, off) (*((uint16_t*)((p) + (off))))
+#define ZP32(p, off) (*((uint32_t*)((p) + (off))))
 
 static void install_memmap(kernel_t* k, struct e820entry* memmap, unsigned count) {
     memcpy(k->zeropage + ZP_E820_TABLE, memmap, sizeof(*memmap) * count);
@@ -177,7 +177,7 @@
 
 static void start_kernel(kernel_t* k) {
     // 64bit entry is at offset 0x200
-    UINT64 entry = (UINT64)(k->image + 0x200);
+    uint64_t entry = (uint64_t)(k->image + 0x200);
 
     // ebx = 0, ebp = 0, edi = 0, esi = zeropage
     __asm__ __volatile__(
@@ -190,11 +190,11 @@
         ;
 }
 
-static int load_kernel(EFI_BOOT_SERVICES* bs, uint8_t* image, size_t sz, kernel_t* k) {
-    UINT32 setup_sz;
-    UINT32 image_sz;
-    UINT32 setup_end;
-    EFI_PHYSICAL_ADDRESS mem;
+static int load_kernel(efi_boot_services* bs, uint8_t* image, size_t sz, kernel_t* k) {
+    uint32_t setup_sz;
+    uint32_t image_sz;
+    uint32_t setup_end;
+    efi_physical_addr mem;
 
     k->zeropage = NULL;
     k->cmdline = NULL;
@@ -248,10 +248,10 @@
     k->image = (void*)mem;
 
     // setup zero page, copy setup header from kernel binary
-    ZeroMem(k->zeropage, 4096);
-    CopyMem(k->zeropage + ZP_SETUP, image + ZP_SETUP, setup_end - ZP_SETUP);
+    memset(k->zeropage, 0, 4096);
+    memcpy(k->zeropage + ZP_SETUP, image + ZP_SETUP, setup_end - ZP_SETUP);
 
-    CopyMem(k->image, image + setup_sz, image_sz);
+    memcpy(k->image, image + setup_sz, image_sz);
 
     // empty commandline for now
     ZP32(k->zeropage, ZP_CMDLINE) = (uint64_t)k->cmdline;
@@ -270,28 +270,28 @@
     return 0;
 fail:
     if (k->image) {
-        bs->FreePages((EFI_PHYSICAL_ADDRESS)k->image, k->pages);
+        bs->FreePages((efi_physical_addr)k->image, k->pages);
     }
     if (k->cmdline) {
-        bs->FreePages((EFI_PHYSICAL_ADDRESS)k->cmdline, 1);
+        bs->FreePages((efi_physical_addr)k->cmdline, 1);
     }
     if (k->zeropage) {
-        bs->FreePages((EFI_PHYSICAL_ADDRESS)k->zeropage, 1);
+        bs->FreePages((efi_physical_addr)k->zeropage, 1);
     }
 
     return -1;
 }
 
-int boot_kernel(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys,
+int boot_kernel(efi_handle img, efi_system_table* sys,
                 void* image, size_t sz, void* ramdisk, size_t rsz,
                 void* cmdline, size_t csz, void* cmdline2, size_t csz2) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
+    efi_boot_services* bs = sys->BootServices;
     kernel_t kernel;
-    EFI_STATUS r;
-    UINTN key;
+    efi_status r;
+    size_t key;
     int n, i;
 
-    EFI_GRAPHICS_OUTPUT_PROTOCOL* gop;
+    efi_graphics_output_protocol* gop;
     bs->LocateProtocol(&GraphicsOutputProtocol, NULL, (void**)&gop);
 
     printf("boot_kernel() from %p (%ld bytes)\n", image, sz);
@@ -307,10 +307,10 @@
     ZP32(kernel.zeropage, ZP_EXTRA_MAGIC) = ZP_MAGIC_VALUE;
     ZP32(kernel.zeropage, ZP_ACPI_RSD) = find_acpi_root(img, sys);
 
-    ZP32(kernel.zeropage, ZP_FB_BASE) = (UINT32)gop->Mode->FrameBufferBase;
-    ZP32(kernel.zeropage, ZP_FB_WIDTH) = (UINT32)gop->Mode->Info->HorizontalResolution;
-    ZP32(kernel.zeropage, ZP_FB_HEIGHT) = (UINT32)gop->Mode->Info->VerticalResolution;
-    ZP32(kernel.zeropage, ZP_FB_STRIDE) = (UINT32)gop->Mode->Info->PixelsPerScanLine;
+    ZP32(kernel.zeropage, ZP_FB_BASE) = (uint32_t)gop->Mode->FrameBufferBase;
+    ZP32(kernel.zeropage, ZP_FB_WIDTH) = (uint32_t)gop->Mode->Info->HorizontalResolution;
+    ZP32(kernel.zeropage, ZP_FB_HEIGHT) = (uint32_t)gop->Mode->Info->VerticalResolution;
+    ZP32(kernel.zeropage, ZP_FB_STRIDE) = (uint32_t)gop->Mode->Info->PixelsPerScanLine;
     ZP32(kernel.zeropage, ZP_FB_FORMAT) = 5; // XRGB32
     ZP32(kernel.zeropage, ZP_FB_REGBASE) = 0;
     ZP32(kernel.zeropage, ZP_FB_SIZE) = 256 * 1024 * 1024;
diff --git a/src/magenta.h b/src/magenta.h
index c3ae7db..1c92213 100644
--- a/src/magenta.h
+++ b/src/magenta.h
@@ -2,15 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
+#include <efi/types.h>
+#include <efi/system-table.h>
 
 typedef struct {
-    UINT8* zeropage;
-    UINT8* cmdline;
+    uint8_t* zeropage;
+    uint8_t* cmdline;
     void* image;
-    UINT32 pages;
+    uint32_t pages;
 } kernel_t;
 
-int boot_kernel(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys,
+int boot_kernel(efi_handle img, efi_system_table* sys,
                 void* image, size_t sz, void* ramdisk, size_t rsz,
                 void* cmdline, size_t csz, void* cmdline2, size_t csz2);
diff --git a/src/netifc.c b/src/netifc.c
index d5a4797..749682c 100644
--- a/src/netifc.c
+++ b/src/netifc.c
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/protocol/simple-network.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -12,10 +11,10 @@
 #include <inet6.h>
 #include <netifc.h>
 
-static EFI_SIMPLE_NETWORK* snp;
+static efi_simple_network_protocol* snp;
 
 #define MAX_FILTER 8
-static EFI_MAC_ADDRESS mcast_filters[MAX_FILTER];
+static efi_mac_addr mcast_filters[MAX_FILTER];
 static unsigned mcast_filter_count = 0;
 
 #define NUM_BUFFER_PAGES 8
@@ -30,7 +29,7 @@
     uint8_t data[0];
 };
 
-static EFI_PHYSICAL_ADDRESS eth_buffers_base = 0;
+static efi_physical_addr eth_buffers_base = 0;
 static eth_buffer* eth_buffers = NULL;
 
 void* eth_get_buffer(size_t sz) {
@@ -60,7 +59,7 @@
 }
 
 int eth_send(void* data, size_t len) {
-    EFI_STATUS r;
+    efi_status r;
 
     if ((r = snp->Transmit(snp, 0, len, (void*)data, NULL, NULL, NULL))) {
         eth_put_buffer(data);
@@ -77,7 +76,7 @@
     printf("RcvMask/RcvCfg/MaxMcast/NumMcast %d %d %d %d\n",
            snp->Mode->ReceiveFilterMask, snp->Mode->ReceiveFilterSetting,
            snp->Mode->MaxMCastFilterCount, snp->Mode->MCastFilterCount);
-    UINT8* x = snp->Mode->CurrentAddress.Addr;
+    uint8_t* x = snp->Mode->CurrentAddress.addr;
     printf("MacAddr %02x:%02x:%02x:%02x:%02x:%02x\n",
            x[0], x[1], x[2], x[3], x[4], x[5]);
     printf("SetMac/MultiTx/LinkDetect/Link %d %d %d %d\n",
@@ -95,7 +94,7 @@
     return 0;
 }
 
-static EFI_EVENT net_timer = NULL;
+static efi_event net_timer = NULL;
 
 #define TIMER_MS(n) (((uint64_t)(n)) * 10000UL)
 
@@ -118,12 +117,12 @@
 
 /* Search the available network interfaces via SimpleNetworkProtocol handles
  * and find the first valid one with a Link detected */
-EFI_SIMPLE_NETWORK *netifc_find_available(void) {
-    EFI_BOOT_SERVICES* bs = gSys->BootServices;
-    EFI_STATUS ret;
-    EFI_SIMPLE_NETWORK *cur_snp = NULL;
-    EFI_HANDLE handles[32];
-    CHAR16 *paths[32];
+efi_simple_network_protocol* netifc_find_available(void) {
+    efi_boot_services* bs = gSys->BootServices;
+    efi_status ret;
+    efi_simple_network_protocol* cur_snp = NULL;
+    efi_handle handles[32];
+    char16_t *paths[32];
     size_t nic_cnt = 0;
     size_t sz = sizeof(handles);
     uint32_t last_parent = 0;
@@ -137,7 +136,7 @@
         return NULL;
     }
 
-    nic_cnt = sz / sizeof(EFI_HANDLE);
+    nic_cnt = sz / sizeof(efi_handle);
     for (size_t i = 0; i < nic_cnt; i++) {
         paths[i] = HandleToString(handles[i]);
     }
@@ -155,7 +154,7 @@
             }
         }
 
-        Print(L"%s: ", paths[i]);
+        printf("%ls: ", paths[i]);
         ret = bs->HandleProtocol(handles[i], &SimpleNetworkProtocol, (void**)&cur_snp);
         if (ret) {
             printf("Failed to open (%s)\n", efi_strerror(ret));
@@ -205,8 +204,8 @@
 }
 
 int netifc_open(void) {
-    EFI_BOOT_SERVICES* bs = gSys->BootServices;
-    EFI_STATUS ret;
+    efi_boot_services* bs = gSys->BootServices;
+    efi_status ret;
     int j;
 
     bs->CreateEvent(EVT_TIMER, TPL_CALLBACK, NULL, NULL, &net_timer);
@@ -230,7 +229,7 @@
         ptr += 2048;
     }
 
-    ip6_init(snp->Mode->CurrentAddress.Addr);
+    ip6_init(snp->Mode->CurrentAddress.addr);
 
     ret = snp->ReceiveFilters(snp,
                             EFI_SIMPLE_NETWORK_RECEIVE_UNICAST |
@@ -290,11 +289,11 @@
 }
 
 void netifc_poll(void) {
-    UINT8 data[1514];
-    EFI_STATUS r;
-    UINTN hsz, bsz;
-    UINT32 irq;
-    VOID* txdone;
+    uint8_t data[1514];
+    efi_status r;
+    size_t hsz, bsz;
+    uint32_t irq;
+    void* txdone;
 
     if ((r = snp->GetStatus(snp, &irq, &txdone))) {
         return;
diff --git a/src/osboot.c b/src/osboot.c
index 193c5ee..5811276 100644
--- a/src/osboot.c
+++ b/src/osboot.c
@@ -2,19 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include <efi/boot-services.h>
+#include <efi/system-table.h>
+#include <efi/protocol/device-path.h>
+#include <efi/protocol/graphics-output.h>
+#include <efi/protocol/simple-text-input.h>
+
 #include <cmdline.h>
 #include <magenta.h>
 #include <netboot.h>
 #include <utils.h>
 
-static EFI_GUID GraphicsOutputProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
-
 #define DEFAULT_TIMEOUT 3
 
 #define KBUFSIZE (32*1024*1024)
@@ -49,15 +51,15 @@
     BOOT_DEVICE_LOCAL,
 };
 
-int boot_prompt(EFI_SYSTEM_TABLE* sys, int timeout_s) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
+int boot_prompt(efi_system_table* sys, int timeout_s) {
+    efi_boot_services* bs = sys->BootServices;
 
-    EFI_EVENT TimerEvent;
-    EFI_EVENT WaitList[2];
+    efi_event TimerEvent;
+    efi_event WaitList[2];
 
-    EFI_STATUS status;
-    UINTN Index;
-    EFI_INPUT_KEY key;
+    efi_status status;
+    size_t Index;
+    efi_input_key key;
     memset(&key, 0, sizeof(key));
 
     status = bs->CreateEvent(EVT_TIMER, 0, NULL, NULL, &TimerEvent);
@@ -117,7 +119,7 @@
     return BOOT_DEVICE_NETBOOT;
 }
 
-void set_graphics_mode(EFI_SYSTEM_TABLE* sys, EFI_GRAPHICS_OUTPUT_PROTOCOL* gop, char* cmdline) {
+void set_graphics_mode(efi_system_table* sys, efi_graphics_output_protocol* gop, char* cmdline) {
     if (!gop || !cmdline) return;
 
     char res[11];
@@ -134,12 +136,12 @@
     vres = atol(x);
     if (!hres || !vres) return;
 
-    UINT32 max_mode = gop->Mode->MaxMode;
+    uint32_t max_mode = gop->Mode->MaxMode;
 
     for (int i = 0; i < max_mode; i++) {
-        EFI_GRAPHICS_OUTPUT_MODE_INFORMATION* mode_info;
-        UINTN info_size = 0;
-        EFI_STATUS status = gop->QueryMode(gop, i, &info_size, &mode_info);
+        efi_graphics_output_mode_information* mode_info;
+        size_t info_size = 0;
+        efi_status status = gop->QueryMode(gop, i, &info_size, &mode_info);
         if (EFI_ERROR(status)) {
             printf("Could not retrieve mode %d: %s\n", i, efi_strerror(status));
             continue;
@@ -158,17 +160,17 @@
     sys->BootServices->Stall(5000000);
 }
 
-void draw_logo(EFI_GRAPHICS_OUTPUT_PROTOCOL* gop) {
+void draw_logo(efi_graphics_output_protocol* gop) {
     if (!gop) return;
 
     const uint32_t h_res = gop->Mode->Info->HorizontalResolution;
     const uint32_t v_res = gop->Mode->Info->VerticalResolution;
-    EFI_GRAPHICS_OUTPUT_BLT_PIXEL fuchsia = {
+    efi_graphics_output_blt_pixel fuchsia = {
         .Red = 0xFF,
         .Green = 0x0,
         .Blue = 0xFF,
     };
-    EFI_GRAPHICS_OUTPUT_BLT_PIXEL black = {
+    efi_graphics_output_blt_pixel black = {
         .Red = 0x0,
         .Green = 0x0,
         .Blue = 0x0
@@ -181,10 +183,10 @@
     gop->Blt(gop, &fuchsia, EfiBltVideoFill, 0, 0, 0, v_res - (v_res/100), h_res, v_res/100, 0);
 }
 
-void do_netboot(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
+void do_netboot(efi_handle img, efi_system_table* sys) {
+    efi_boot_services* bs = sys->BootServices;
 
-    EFI_PHYSICAL_ADDRESS mem = 0xFFFFFFFF;
+    efi_physical_addr mem = 0xFFFFFFFF;
     if (bs->AllocatePages(AllocateMaxAddress, EfiLoaderData, KBUFSIZE / 4096, &mem)) {
         printf("Failed to allocate network io buffer\n");
         return;
@@ -206,7 +208,7 @@
     cmdline[0] = 0;
 
     printf("\nNetBoot Server Started...\n\n");
-    EFI_TPL prev_tpl = bs->RaiseTPL(TPL_NOTIFY);
+    efi_tpl prev_tpl = bs->RaiseTPL(TPL_NOTIFY);
     for (;;) {
         int n = netboot_poll();
         if (n < 1) {
@@ -218,34 +220,34 @@
         }
         uint8_t* x = nbkernel.data;
         if ((x[0] == 'M') && (x[1] == 'Z') && (x[0x80] == 'P') && (x[0x81] == 'E')) {
-            UINTN exitdatasize;
-            EFI_STATUS r;
-            EFI_HANDLE h;
+            size_t exitdatasize;
+            efi_status r;
+            efi_handle h;
 
-            MEMMAP_DEVICE_PATH mempath[2] = {
+            efi_device_path_hw_memmap mempath[2] = {
                 {
                     .Header = {
-                        .Type = HARDWARE_DEVICE_PATH,
-                        .SubType = HW_MEMMAP_DP,
-                        .Length = { (UINT8)(sizeof(MEMMAP_DEVICE_PATH) & 0xff),
-                            (UINT8)((sizeof(MEMMAP_DEVICE_PATH) >> 8) & 0xff), },
+                        .Type = DEVICE_PATH_HARDWARE,
+                        .SubType = DEVICE_PATH_HW_MEMMAP,
+                        .Length = { (uint8_t)(sizeof(efi_device_path_hw_memmap) & 0xff),
+                            (uint8_t)((sizeof(efi_device_path_hw_memmap) >> 8) & 0xff), },
                     },
                     .MemoryType = EfiLoaderData,
-                    .StartingAddress = (EFI_PHYSICAL_ADDRESS)nbkernel.data,
-                    .EndingAddress = (EFI_PHYSICAL_ADDRESS)(nbkernel.data + nbkernel.offset),
+                    .StartAddress = (efi_physical_addr)nbkernel.data,
+                    .EndAddress = (efi_physical_addr)(nbkernel.data + nbkernel.offset),
                 },
                 {
                     .Header = {
-                        .Type = END_DEVICE_PATH_TYPE,
-                        .SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE,
-                        .Length = { (UINT8)(sizeof(EFI_DEVICE_PATH) & 0xff),
-                            (UINT8)((sizeof(EFI_DEVICE_PATH) >> 8) & 0xff), },
+                        .Type = DEVICE_PATH_END,
+                        .SubType = DEVICE_PATH_ENTIRE_END,
+                        .Length = { (uint8_t)(sizeof(efi_device_path_protocol) & 0xff),
+                            (uint8_t)((sizeof(efi_device_path_protocol) >> 8) & 0xff), },
                     },
                 },
             };
 
             printf("Attempting to run EFI binary...\n");
-            r = bs->LoadImage(FALSE, img, (EFI_DEVICE_PATH*)mempath, (void*)nbkernel.data, nbkernel.offset, &h);
+            r = bs->LoadImage(false, img, (efi_device_path_protocol*)mempath, (void*)nbkernel.data, nbkernel.offset, &h);
             if (EFI_ERROR(r)) {
                 printf("LoadImage Failed (%s)\n", efi_strerror(r));
                 continue;
@@ -269,7 +271,7 @@
         cmdline[nbcmdline.offset] = 0;
 
         // maybe it's a kernel image?
-        EFI_GRAPHICS_OUTPUT_PROTOCOL* gop;
+        efi_graphics_output_protocol* gop;
         bs->LocateProtocol(&GraphicsOutputProtocol, NULL, (void**)&gop);
         set_graphics_mode(sys, gop, cmdline);
 
@@ -280,10 +282,9 @@
     }
 }
 
-EFI_STATUS efi_main(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
+efi_status efi_main(efi_handle img, efi_system_table* sys) {
+    efi_boot_services* bs = sys->BootServices;
 
-    InitializeLib(img, sys);
     InitGoodies(img, sys);
 
     uint64_t mmio;
@@ -294,14 +295,14 @@
     }
 
     // Load the cmdline
-    UINTN csz = 0;
+    size_t csz = 0;
     char* cmdline = LoadFile(L"cmdline", &csz);
     if (cmdline) {
         cmdline[csz] = '\0';
         printf("cmdline: %s\n", cmdline);
     }
 
-    EFI_GRAPHICS_OUTPUT_PROTOCOL* gop;
+    efi_graphics_output_protocol* gop;
     bs->LocateProtocol(&GraphicsOutputProtocol, NULL, (void**)&gop);
     set_graphics_mode(sys, gop, cmdline);
     draw_logo(gop);
@@ -314,7 +315,7 @@
 
     // Look for a kernel image on disk
     // TODO: use the filesystem protocol
-    UINTN ksz = 0;
+    size_t ksz = 0;
     void* kernel = LoadFile(L"magenta.bin", &ksz);
 
     if (!have_network && kernel == NULL) {
@@ -339,7 +340,7 @@
             do_netboot(img, sys);
             break;
         case BOOT_DEVICE_LOCAL: {
-            UINTN rsz = 0;
+            size_t rsz = 0;
             void* ramdisk = LoadFile(L"ramdisk.bin", &rsz);
             boot_kernel(img, sys, kernel, ksz, ramdisk, rsz,
                         cmdline, csz, cmdextra, strlen(cmdextra));
diff --git a/src/pci.c b/src/pci.c
index 6bf0dfa..2aa0fd9 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/types.h>
 #include <efi/protocol/pci-root-bridge-io.h>
 
 #include <stdio.h>
@@ -54,10 +53,10 @@
 #define PCI_MAX_DEVICES 32
 #define PCI_MAX_FUNCS 8
 
-EFI_STATUS FindPCIMMIO(EFI_BOOT_SERVICES* bs, uint8_t cls, uint8_t sub, uint8_t ifc, uint64_t* mmio) {
-    UINTN num_handles;
-    EFI_HANDLE* handles;
-    EFI_STATUS status = bs->LocateHandleBuffer(ByProtocol, &PciRootBridgeIoProtocol,
+efi_status FindPCIMMIO(efi_boot_services* bs, uint8_t cls, uint8_t sub, uint8_t ifc, uint64_t* mmio) {
+    size_t num_handles;
+    efi_handle* handles;
+    efi_status status = bs->LocateHandleBuffer(ByProtocol, &PciRootBridgeIoProtocol,
             NULL, &num_handles, &handles);
     if (EFI_ERROR(status)) {
         printf("Could not find PCI root bridge IO protocol: %s\n", efi_strerror(status));
@@ -66,7 +65,7 @@
 
     for (int i = 0; i < num_handles; i++) {
         printf("handle %d\n", i);
-        EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL* iodev;
+        efi_pci_root_bridge_io_protocol* iodev;
         status = bs->HandleProtocol(handles[i], &PciRootBridgeIoProtocol, (void**)&iodev);
         if (EFI_ERROR(status)) {
             printf("Could not get protocol for handle %d: %s\n", i, efi_strerror(status));
@@ -79,10 +78,10 @@
             continue;
         }
 
-        UINT16 min_bus, max_bus;
+        uint16_t min_bus, max_bus;
         while (descriptors->descriptor != ACPI_END_TAG_DESCRIPTOR) {
-            min_bus = (UINT16)descriptors->addrrange_minimum;
-            max_bus = (UINT16)descriptors->addrrange_maximum;
+            min_bus = (uint16_t)descriptors->addrrange_minimum;
+            max_bus = (uint16_t)descriptors->addrrange_maximum;
 
             if (descriptors->res_type != ACPI_ADDRESS_SPACE_TYPE_BUS) {
                 descriptors++;
@@ -94,7 +93,7 @@
                     for (int func = 0; func < PCI_MAX_FUNCS; func++) {
                         pci_common_header_t pci_hdr;
                         bs->SetMem(&pci_hdr, sizeof(pci_hdr), 0);
-                        UINT64 address = (UINT64)((bus << 24) + (dev << 16) + (func << 8));
+                        uint64_t address = (uint64_t)((bus << 24) + (dev << 16) + (func << 8));
                         status = iodev->Pci.Read(iodev, EfiPciWidthUint16, address, sizeof(pci_hdr) / 2, &pci_hdr);
                         if (EFI_ERROR(status)) {
                             printf("could not read pci configuration for bus %d dev %d func %d: %s\n",
diff --git a/src/showmem.c b/src/showmem.c
index e8f7e16..d260ad8 100644
--- a/src/showmem.c
+++ b/src/showmem.c
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/types.h>
+#include <efi/system-table.h>
 
 #include <printf.h>
 
-static const char* MemTypeName(UINT32 type, char* buf) {
+static const char* MemTypeName(uint32_t type, char* buf) {
     switch (type) {
     case EfiReservedMemoryType:
         return "Reserved";
@@ -45,16 +45,16 @@
 
 static unsigned char scratch[4096];
 
-static void dump_memmap(EFI_SYSTEM_TABLE* systab) {
-    EFI_STATUS r;
-    UINTN msize, off;
-    EFI_MEMORY_DESCRIPTOR* mmap;
-    UINTN mkey, dsize;
-    UINT32 dversion;
+static void dump_memmap(efi_system_table* systab) {
+    efi_status r;
+    size_t msize, off;
+    efi_memory_descriptor* mmap;
+    size_t mkey, dsize;
+    uint32_t dversion;
     char tmp[32];
 
     msize = sizeof(scratch);
-    mmap = (EFI_MEMORY_DESCRIPTOR*)scratch;
+    mmap = (efi_memory_descriptor*)scratch;
     mkey = dsize = dversion;
     r = systab->BootServices->GetMemoryMap(&msize, mmap, &mkey, &dsize, &dversion);
     printf("r=%lx msz=%lx key=%lx dsz=%lx dvn=%x\n",
@@ -63,7 +63,7 @@
         return;
     }
     for (off = 0; off < msize; off += dsize) {
-        mmap = (EFI_MEMORY_DESCRIPTOR*)(scratch + off);
+        mmap = (efi_memory_descriptor*)(scratch + off);
         printf("%016lx %016lx %08lx %c %04lx %s\n",
                mmap->PhysicalStart, mmap->VirtualStart,
                mmap->NumberOfPages,
@@ -75,8 +75,7 @@
 
 #include <utils.h>
 
-EFI_STATUS efi_main(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    InitializeLib(img, sys);
+efi_status efi_main(efi_handle img, efi_system_table* sys) {
     InitGoodies(img, sys);
     dump_memmap(sys);
     WaitAnyKey();
diff --git a/src/usbtest.c b/src/usbtest.c
index cd6cff9..fddd734 100644
--- a/src/usbtest.c
+++ b/src/usbtest.c
@@ -2,23 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <efi.h>
-#include <efilib.h>
+#include <efi/types.h>
+#include <efi/protocol/device-path.h>
+#include <efi/protocol/driver-binding.h>
+#include <efi/protocol/usb-io.h>
 
 #include <utils.h>
 #include <stdio.h>
 
-#include <Protocol/UsbIo.h>
+EFIAPI efi_status MyDriverSupported(
+    efi_driver_binding_protocol* self, efi_handle ctlr,
+    efi_device_path_protocol* path) {
 
-EFI_GUID UsbIoProtocol = EFI_USB_IO_PROTOCOL_GUID;
-
-EFIAPI EFI_STATUS MyDriverSupported(
-    EFI_DRIVER_BINDING* self, EFI_HANDLE ctlr,
-    EFI_DEVICE_PATH* path) {
-
-    EFI_USB_DEVICE_DESCRIPTOR dev;
-    EFI_USB_IO_PROTOCOL* usbio;
-    EFI_STATUS r;
+    efi_usb_device_descriptor dev;
+    efi_usb_io_protocol* usbio;
+    efi_status r;
 
     r = gBS->OpenProtocol(ctlr, &UsbIoProtocol,
                           (void**)&usbio, self->DriverBindingHandle,
@@ -37,12 +35,12 @@
     return EFI_UNSUPPORTED;
 }
 
-EFIAPI EFI_STATUS MyDriverStart(
-    EFI_DRIVER_BINDING* self, EFI_HANDLE ctlr,
-    EFI_DEVICE_PATH* path) {
-    EFI_STATUS r;
+EFIAPI efi_status MyDriverStart(
+    efi_driver_binding_protocol* self, efi_handle ctlr,
+    efi_device_path_protocol* path) {
+    efi_status r;
 
-    EFI_USB_IO_PROTOCOL* usbio;
+    efi_usb_io_protocol* usbio;
 
     printf("Start! ctlr=%p\n", ctlr);
 
@@ -60,9 +58,9 @@
     return EFI_SUCCESS;
 }
 
-EFIAPI EFI_STATUS MyDriverStop(
-    EFI_DRIVER_BINDING* self, EFI_HANDLE ctlr,
-    UINTN count, EFI_HANDLE* children) {
+EFIAPI efi_status MyDriverStop(
+    efi_driver_binding_protocol* self, efi_handle ctlr,
+    size_t count, efi_handle* children) {
 
     printf("Stop! ctlr=%p\n", ctlr);
 
@@ -73,7 +71,7 @@
     return EFI_SUCCESS;
 }
 
-static EFI_DRIVER_BINDING MyDriver = {
+static efi_driver_binding_protocol MyDriver = {
     .Supported = MyDriverSupported,
     .Start = MyDriverStart,
     .Stop = MyDriverStop,
@@ -82,18 +80,18 @@
     .DriverBindingHandle = NULL,
 };
 
-void InstallMyDriver(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
-    EFI_HANDLE* list;
-    UINTN count, i;
-    EFI_STATUS r;
+void InstallMyDriver(efi_handle img, efi_system_table* sys) {
+    efi_boot_services* bs = sys->BootServices;
+    efi_handle* list;
+    size_t count, i;
+    efi_status r;
 
     MyDriver.ImageHandle = img;
     MyDriver.DriverBindingHandle = img;
     r = bs->InstallProtocolInterface(&img, &DriverBindingProtocol,
                                      EFI_NATIVE_INTERFACE, &MyDriver);
     if (r) {
-        Print(L"DriverBinding failed %lx\n", r);
+        printf("DriverBinding failed %lx\n", r);
         return;
     }
 
@@ -101,17 +99,17 @@
     r = bs->LocateHandleBuffer(ByProtocol, &UsbIoProtocol, NULL, &count, &list);
     if (r == 0) {
         for (i = 0; i < count; i++) {
-            r = bs->ConnectController(list[i], NULL, NULL, FALSE);
+            r = bs->ConnectController(list[i], NULL, NULL, false);
         }
         bs->FreePool(list);
     }
 }
 
-void RemoveMyDriver(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    EFI_BOOT_SERVICES* bs = sys->BootServices;
-    EFI_HANDLE* list;
-    UINTN count, i;
-    EFI_STATUS r;
+void RemoveMyDriver(efi_handle img, efi_system_table* sys) {
+    efi_boot_services* bs = sys->BootServices;
+    efi_handle* list;
+    size_t count, i;
+    efi_status r;
 
     // Disconnect the driver
     r = bs->LocateHandleBuffer(ByProtocol, &UsbIoProtocol, NULL, &count, &list);
@@ -128,11 +126,10 @@
         printf("UninstallProtocol failed %lx\n", r);
 }
 
-EFI_STATUS efi_main(EFI_HANDLE img, EFI_SYSTEM_TABLE* sys) {
-    InitializeLib(img, sys);
+efi_status efi_main(efi_handle img, efi_system_table* sys) {
     InitGoodies(img, sys);
 
-    Print(L"Hello, EFI World\n");
+    printf("Hello, EFI World\n");
 
     InstallMyDriver(img, sys);
 
diff --git a/third_party/gnu-efi/Makefile b/third_party/gnu-efi/Makefile
index 3d4275c..0f754bc 100644
--- a/third_party/gnu-efi/Makefile
+++ b/third_party/gnu-efi/Makefile
@@ -42,8 +42,7 @@
 
 include $(SRCDIR)/Make.defaults
 
-SUBDIRS = lib gnuefi inc apps
-gnuefi: lib
+SUBDIRS = gnuefi
 
 all:	check_gcc $(SUBDIRS)
 
