File indexing completed on 2025-05-11 08:24:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #ifndef _LOADER_EFILIB_H
0031 #define _LOADER_EFILIB_H
0032
0033 #ifndef __rtems__
0034 #include <stand.h>
0035 #endif
0036 #include <stdbool.h>
0037 #include <sys/queue.h>
0038 #ifdef __rtems__
0039 #include <errno.h>
0040 #include <stdbool.h>
0041 #include <stdlib.h>
0042 #endif
0043
0044 extern EFI_HANDLE IH;
0045 extern EFI_SYSTEM_TABLE *ST;
0046 extern EFI_BOOT_SERVICES *BS;
0047 extern EFI_RUNTIME_SERVICES *RS;
0048
0049 #ifndef __rtems__
0050
0051 extern struct devsw efipart_fddev;
0052 extern struct devsw efipart_cddev;
0053 extern struct devsw efipart_hddev;
0054 extern struct devsw efihttp_dev;
0055 extern struct devsw efinet_dev;
0056 extern struct netif_driver efinetif;
0057
0058
0059 typedef STAILQ_HEAD(pdinfo_list, pdinfo) pdinfo_list_t;
0060
0061 typedef struct pdinfo
0062 {
0063 STAILQ_ENTRY(pdinfo) pd_link;
0064 pdinfo_list_t pd_part;
0065 EFI_HANDLE pd_handle;
0066 EFI_HANDLE pd_alias;
0067 EFI_DEVICE_PATH *pd_devpath;
0068 EFI_BLOCK_IO *pd_blkio;
0069 uint32_t pd_unit;
0070 uint32_t pd_open;
0071 void *pd_bcache;
0072 struct pdinfo *pd_parent;
0073 struct devsw *pd_devsw;
0074 } pdinfo_t;
0075
0076 pdinfo_list_t *efiblk_get_pdinfo_list(struct devsw *dev);
0077 pdinfo_t *efiblk_get_pdinfo(struct devdesc *dev);
0078 pdinfo_t *efiblk_get_pdinfo_by_handle(EFI_HANDLE h);
0079 pdinfo_t *efiblk_get_pdinfo_by_device_path(EFI_DEVICE_PATH *path);
0080
0081
0082 void *efi_get_table(EFI_GUID *tbl);
0083 EFI_STATUS OpenProtocolByHandle(EFI_HANDLE, EFI_GUID *, void **);
0084
0085 static inline EFI_STATUS
0086 efi_exit_boot_services(UINTN key)
0087 {
0088 EFI_STATUS status;
0089
0090 status = BS->ExitBootServices(IH, key);
0091 if (!EFI_ERROR(status))
0092 boot_services_active = false;
0093 return (status);
0094 }
0095
0096 int efi_getdev(void **vdev, const char *devspec, const char **path);
0097
0098 int efi_register_handles(struct devsw *, EFI_HANDLE *, EFI_HANDLE *, int);
0099 EFI_HANDLE efi_find_handle(struct devsw *, int);
0100 int efi_handle_lookup(EFI_HANDLE, struct devsw **, int *, uint64_t *);
0101 int efi_handle_update_dev(EFI_HANDLE, struct devsw *, int, uint64_t);
0102
0103 EFI_DEVICE_PATH *efi_lookup_image_devpath(EFI_HANDLE);
0104 EFI_DEVICE_PATH *efi_lookup_devpath(EFI_HANDLE);
0105 void efi_close_devpath(EFI_HANDLE);
0106 EFI_HANDLE efi_devpath_handle(EFI_DEVICE_PATH *);
0107 EFI_DEVICE_PATH *efi_devpath_last_node(EFI_DEVICE_PATH *);
0108 EFI_DEVICE_PATH *efi_devpath_trim(EFI_DEVICE_PATH *);
0109 bool efi_devpath_match(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
0110 bool efi_devpath_match_node(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
0111 bool efi_devpath_is_prefix(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
0112 CHAR16 *efi_devpath_name(EFI_DEVICE_PATH *);
0113 void efi_free_devpath_name(CHAR16 *);
0114 bool efi_devpath_same_disk(EFI_DEVICE_PATH *, EFI_DEVICE_PATH *);
0115 EFI_DEVICE_PATH *efi_devpath_to_media_path(EFI_DEVICE_PATH *);
0116 UINTN efi_devpath_length(EFI_DEVICE_PATH *);
0117 EFI_DEVICE_PATH *efi_name_to_devpath(const char *path);
0118 EFI_DEVICE_PATH *efi_name_to_devpath16(CHAR16 *path);
0119 void efi_devpath_free(EFI_DEVICE_PATH *dp);
0120 EFI_HANDLE efi_devpath_to_handle(EFI_DEVICE_PATH *path, EFI_HANDLE *handles, unsigned nhandles);
0121
0122 int efi_status_to_errno(EFI_STATUS);
0123 EFI_STATUS errno_to_efi_status(int errno);
0124
0125 void efi_time_init(void);
0126 void efi_time_fini(void);
0127
0128 int parse_uefi_con_out(void);
0129 EFI_STATUS efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE* Xsystab);
0130
0131 EFI_STATUS main(int argc, CHAR16 *argv[]);
0132 void efi_exit(EFI_STATUS status) __dead2;
0133
0134
0135 void efi_init_environment(void);
0136
0137
0138 const char *efi_memory_type(EFI_MEMORY_TYPE);
0139 #endif
0140
0141
0142 int wcscmp(CHAR16 *, CHAR16 *);
0143 void cpy8to16(const char *, CHAR16 *, size_t);
0144 void cpy16to8(const CHAR16 *, char *, size_t);
0145
0146 #ifndef __rtems__
0147
0148
0149
0150
0151
0152
0153 EFI_STATUS efi_delenv(EFI_GUID *guid, const char *varname);
0154 EFI_STATUS efi_freebsd_delenv(const char *varname);
0155 EFI_STATUS efi_freebsd_getenv(const char *v, void *data, __size_t *len);
0156 EFI_STATUS efi_getenv(EFI_GUID *g, const char *v, void *data, __size_t *len);
0157 EFI_STATUS efi_global_getenv(const char *v, void *data, __size_t *len);
0158 EFI_STATUS efi_setenv(EFI_GUID *guid, const char *varname, UINT32 attr, void *data, __size_t len);
0159 EFI_STATUS efi_setenv_freebsd_wcs(const char *varname, CHAR16 *valstr);
0160
0161
0162 bool efi_guid_to_str(const EFI_GUID *, char **);
0163 bool efi_str_to_guid(const char *, EFI_GUID *);
0164 bool efi_name_to_guid(const char *, EFI_GUID *);
0165 bool efi_guid_to_name(EFI_GUID *, char **);
0166
0167
0168 int efipart_inithandles(void);
0169
0170 #endif
0171
0172 #endif