|  | // 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/boot-services.h> | 
|  | #include <efi/system-table.h> | 
|  | #include <efi/types.h> | 
|  | #include <efi/protocol/device-path.h> | 
|  | #include <efi/protocol/file.h> | 
|  | #include <efi/protocol/simple-text-output.h> | 
|  |  | 
|  | void xefi_init(efi_handle img, efi_system_table* sys); | 
|  |  | 
|  | void xefi_wait_any_key(void); | 
|  | void xefi_fatal(const char* msg, efi_status status); | 
|  | char16_t* xefi_handle_to_str(efi_handle handle); | 
|  | const char *xefi_strerror(efi_status status); | 
|  | const char16_t* xefi_wstrerror(efi_status status); | 
|  | size_t strlen_16(char16_t* str); | 
|  |  | 
|  | char16_t* xefi_devpath_to_str(efi_device_path_protocol* path); | 
|  |  | 
|  | int xefi_cmp_guid(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 xefi_open_protocol(efi_handle h, efi_guid* guid, void** ifc); | 
|  | efi_status xefi_close_protocol(efi_handle h, efi_guid* guid); | 
|  |  | 
|  | efi_file_protocol* xefi_open_file(char16_t* filename); | 
|  | void* xefi_read_file(efi_file_protocol* file, size_t* _sz, size_t front_bytes); | 
|  | void* xefi_load_file(char16_t* filename, size_t* size_out, size_t front_bytes); | 
|  |  | 
|  | efi_status xefi_find_pci_mmio(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; | 
|  |  | 
|  | typedef struct { | 
|  | efi_handle img; | 
|  | efi_system_table* sys; | 
|  | efi_boot_services* bs; | 
|  | efi_simple_text_output_protocol* conout; | 
|  | } xefi_global; | 
|  |  | 
|  | extern xefi_global xefi_global_state; | 
|  |  | 
|  | // Global Context | 
|  | #define gImg (xefi_global_state.img) | 
|  | #define gSys (xefi_global_state.sys) | 
|  | #define gBS (xefi_global_state.bs) | 
|  | #define gConOut (xefi_global_state.conout) | 
|  |  |