1
2
3
4
5
6
7
8#ifndef _EFI_LOADER_H
9#define _EFI_LOADER_H 1
10
11#include <common.h>
12#include <blk.h>
13#include <event.h>
14#include <log.h>
15#include <part_efi.h>
16#include <efi_api.h>
17#include <image.h>
18#include <pe.h>
19#include <linux/list.h>
20#include <linux/oid_registry.h>
21
22struct blk_desc;
23struct jmp_buf_data;
24
25static inline int guidcmp(const void *g1, const void *g2)
26{
27 return memcmp(g1, g2, sizeof(efi_guid_t));
28}
29
30static inline void *guidcpy(void *dst, const void *src)
31{
32 return memcpy(dst, src, sizeof(efi_guid_t));
33}
34
35#if CONFIG_IS_ENABLED(EFI_LOADER)
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51#define __efi_runtime_data __section(".data.efi_runtime")
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#define __efi_runtime_rodata __section(".rodata.efi_runtime")
68
69
70
71
72
73
74
75
76
77
78
79
80
81#define __efi_runtime __section(".text.efi_runtime")
82
83
84
85
86
87efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len);
88
89
90
91
92
93void efi_restore_gd(void);
94
95void efi_set_bootdev(const char *dev, const char *devnr, const char *path,
96 void *buffer, size_t buffer_size);
97
98void efi_net_set_dhcp_ack(void *pkt, int len);
99
100void efi_print_image_infos(void *pc);
101
102
103efi_status_t efi_launch_capsules(void);
104
105#else
106
107
108#define __efi_runtime_data
109#define __efi_runtime_rodata
110#define __efi_runtime
111static inline efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len)
112{
113 return EFI_SUCCESS;
114}
115
116
117static inline void efi_restore_gd(void) { }
118static inline void efi_set_bootdev(const char *dev, const char *devnr,
119 const char *path, void *buffer,
120 size_t buffer_size) { }
121static inline void efi_net_set_dhcp_ack(void *pkt, int len) { }
122static inline void efi_print_image_infos(void *pc) { }
123static inline efi_status_t efi_launch_capsules(void)
124{
125 return EFI_SUCCESS;
126}
127
128#endif
129
130
131#define EFI_MAX_CONFIGURATION_TABLES 16
132
133
134#define U_BOOT_GUID \
135 EFI_GUID(0xe61d73b9, 0xa384, 0x4acc, \
136 0xae, 0xab, 0x82, 0xe8, 0x28, 0xf3, 0x62, 0x8b)
137
138#define U_BOOT_HOST_DEV_GUID \
139 EFI_GUID(0xbbe4e671, 0x5773, 0x4ea1, \
140 0x9a, 0xab, 0x3a, 0x7d, 0xbf, 0x40, 0xc4, 0x82)
141
142#define U_BOOT_VIRTIO_DEV_GUID \
143 EFI_GUID(0x63293792, 0xadf5, 0x9325, \
144 0xb9, 0x9f, 0x4e, 0x0e, 0x45, 0x5c, 0x1b, 0x1e)
145
146
147#define EFICONFIG_AUTO_GENERATED_ENTRY_GUID \
148 EFI_GUID(0x38c1acc1, 0x9fc0, 0x41f0, \
149 0xb9, 0x01, 0xfa, 0x74, 0xd6, 0xd6, 0xe4, 0xde)
150
151
152#define EFI_FDT_USE_INTERNAL NULL
153
154
155extern efi_handle_t efi_root;
156
157
158extern efi_status_t efi_obj_list_initialized;
159
160
161extern bool efi_st_keep_devices;
162
163
164extern struct efi_system_partition {
165 enum uclass_id uclass_id;
166 int devnum;
167 u8 part;
168} efi_system_partition;
169
170int __efi_entry_check(void);
171int __efi_exit_check(void);
172const char *__efi_nesting(void);
173const char *__efi_nesting_inc(void);
174const char *__efi_nesting_dec(void);
175
176
177
178
179#define EFI_ENTRY(format, ...) do { \
180 assert(__efi_entry_check()); \
181 debug("%sEFI: Entry %s(" format ")\n", __efi_nesting_inc(), \
182 __func__, ##__VA_ARGS__); \
183 } while(0)
184
185
186
187
188#define EFI_EXIT(ret) ({ \
189 typeof(ret) _r = ret; \
190 debug("%sEFI: Exit: %s: %u\n", __efi_nesting_dec(), \
191 __func__, (u32)((uintptr_t) _r & ~EFI_ERROR_MASK)); \
192 assert(__efi_exit_check()); \
193 _r; \
194 })
195
196
197
198
199#define EFI_CALL(exp) ({ \
200 debug("%sEFI: Call: %s\n", __efi_nesting_inc(), #exp); \
201 assert(__efi_exit_check()); \
202 typeof(exp) _r = exp; \
203 assert(__efi_entry_check()); \
204 debug("%sEFI: %lu returned by %s\n", __efi_nesting_dec(), \
205 (unsigned long)((uintptr_t)_r & ~EFI_ERROR_MASK), #exp); \
206 _r; \
207})
208
209
210
211
212#define EFI_CALL_VOID(exp) do { \
213 debug("%sEFI: Call: %s\n", __efi_nesting_inc(), #exp); \
214 assert(__efi_exit_check()); \
215 exp; \
216 assert(__efi_entry_check()); \
217 debug("%sEFI: Return From: %s\n", __efi_nesting_dec(), #exp); \
218 } while(0)
219
220
221
222
223#define EFI_PRINT(format, ...) ({ \
224 debug("%sEFI: " format, __efi_nesting(), \
225 ##__VA_ARGS__); \
226 })
227
228#ifdef CONFIG_SYS_CACHELINE_SIZE
229#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE
230#else
231
232#define EFI_CACHELINE_SIZE 128
233#endif
234
235
236#define BOOTMENU_DEVICE_NAME_MAX 16
237
238
239extern efi_uintn_t efi_memory_map_key;
240
241extern struct efi_runtime_services efi_runtime_services;
242extern struct efi_system_table systab;
243
244extern struct efi_simple_text_output_protocol efi_con_out;
245extern struct efi_simple_text_input_protocol efi_con_in;
246extern struct efi_console_control_protocol efi_console_control;
247extern const struct efi_device_path_to_text_protocol efi_device_path_to_text;
248
249extern const struct efi_device_path_utilities_protocol
250 efi_device_path_utilities;
251
252extern const struct efi_unicode_collation_protocol
253 efi_unicode_collation_protocol2;
254extern const struct efi_hii_config_routing_protocol efi_hii_config_routing;
255extern const struct efi_hii_config_access_protocol efi_hii_config_access;
256extern const struct efi_hii_database_protocol efi_hii_database;
257extern const struct efi_hii_string_protocol efi_hii_string;
258
259uint16_t *efi_dp_str(struct efi_device_path *dp);
260
261
262extern const efi_guid_t efi_guid_bootmenu_auto_generated;
263
264
265extern const efi_guid_t efi_u_boot_guid;
266#ifdef CONFIG_SANDBOX
267
268extern const efi_guid_t efi_guid_host_dev;
269#endif
270
271extern const efi_guid_t efi_block_io_guid;
272extern const efi_guid_t efi_global_variable_guid;
273extern const efi_guid_t efi_guid_console_control;
274extern const efi_guid_t efi_guid_device_path;
275
276extern const efi_guid_t efi_system_partition_guid;
277
278extern const efi_guid_t efi_guid_driver_binding_protocol;
279
280extern const efi_guid_t efi_guid_event_group_exit_boot_services;
281
282extern const efi_guid_t efi_guid_event_group_virtual_address_change;
283
284extern const efi_guid_t efi_guid_event_group_memory_map_change;
285
286extern const efi_guid_t efi_guid_event_group_ready_to_boot;
287
288extern const efi_guid_t efi_guid_event_group_reset_system;
289
290extern const efi_guid_t efi_guid_fdt;
291extern const efi_guid_t efi_guid_loaded_image;
292extern const efi_guid_t efi_guid_loaded_image_device_path;
293extern const efi_guid_t efi_guid_device_path_to_text_protocol;
294extern const efi_guid_t efi_simple_file_system_protocol_guid;
295extern const efi_guid_t efi_file_info_guid;
296
297extern const efi_guid_t efi_file_system_info_guid;
298extern const efi_guid_t efi_guid_device_path_utilities_protocol;
299
300extern const efi_guid_t efi_guid_unicode_collation_protocol;
301
302extern const efi_guid_t efi_guid_load_file_protocol;
303extern const efi_guid_t efi_guid_load_file2_protocol;
304
305extern const efi_guid_t efi_guid_unicode_collation_protocol2;
306extern const efi_guid_t efi_guid_hii_config_routing_protocol;
307extern const efi_guid_t efi_guid_hii_config_access_protocol;
308extern const efi_guid_t efi_guid_hii_database_protocol;
309extern const efi_guid_t efi_guid_hii_string_protocol;
310
311extern const efi_guid_t efi_guid_image_security_database;
312extern const efi_guid_t efi_guid_sha256;
313extern const efi_guid_t efi_guid_cert_x509;
314extern const efi_guid_t efi_guid_cert_x509_sha256;
315extern const efi_guid_t efi_guid_cert_x509_sha384;
316extern const efi_guid_t efi_guid_cert_x509_sha512;
317extern const efi_guid_t efi_guid_cert_type_pkcs7;
318
319
320extern const efi_guid_t efi_guid_rng_protocol;
321
322extern const efi_guid_t efi_guid_capsule_report;
323
324extern const efi_guid_t efi_guid_firmware_management_protocol;
325
326extern const efi_guid_t efi_esrt_guid;
327
328extern const efi_guid_t smbios_guid;
329
330extern const efi_guid_t efi_guid_text_input_protocol;
331
332extern char __efi_runtime_start[], __efi_runtime_stop[];
333extern char __efi_runtime_rel_start[], __efi_runtime_rel_stop[];
334
335
336
337
338
339
340
341
342
343
344struct efi_open_protocol_info_item {
345 struct list_head link;
346 struct efi_open_protocol_info_entry info;
347};
348
349
350
351
352
353
354
355
356
357
358
359
360
361struct efi_handler {
362 struct list_head link;
363 const efi_guid_t guid;
364 void *protocol_interface;
365 struct list_head open_infos;
366};
367
368
369
370
371
372
373
374enum efi_object_type {
375
376 EFI_OBJECT_TYPE_UNDEFINED = 0,
377
378 EFI_OBJECT_TYPE_U_BOOT_FIRMWARE,
379
380 EFI_OBJECT_TYPE_LOADED_IMAGE,
381
382 EFI_OBJECT_TYPE_STARTED_IMAGE,
383};
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404struct efi_object {
405
406 struct list_head link;
407
408 struct list_head protocols;
409 enum efi_object_type type;
410 struct udevice *dev;
411};
412
413enum efi_image_auth_status {
414 EFI_IMAGE_AUTH_FAILED = 0,
415 EFI_IMAGE_AUTH_PASSED,
416};
417
418
419
420
421
422
423
424
425
426
427
428
429
430struct efi_loaded_image_obj {
431 struct efi_object header;
432 efi_status_t *exit_status;
433 efi_uintn_t *exit_data_size;
434 u16 **exit_data;
435 struct jmp_buf_data *exit_jmp;
436 EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
437 struct efi_system_table *st);
438 u16 image_type;
439 enum efi_image_auth_status auth_status;
440};
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457struct efi_event {
458 struct list_head link;
459 struct list_head queue_link;
460 uint32_t type;
461 efi_uintn_t notify_tpl;
462 void (EFIAPI *notify_function)(struct efi_event *event, void *context);
463 void *notify_context;
464 const efi_guid_t *group;
465 u64 trigger_next;
466 u64 trigger_time;
467 enum efi_timer_delay trigger_type;
468 bool is_signaled;
469};
470
471
472extern struct list_head efi_obj_list;
473
474extern struct list_head efi_events;
475
476
477
478
479
480
481
482
483
484
485
486struct efi_protocol_notification {
487 struct list_head link;
488 efi_handle_t handle;
489};
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504struct efi_register_notify_event {
505 struct list_head link;
506 struct efi_event *event;
507 efi_guid_t protocol;
508 struct list_head handles;
509};
510
511
512extern struct list_head efi_register_notify_events;
513
514
515int efi_init_early(void);
516
517efi_status_t efi_init_obj_list(void);
518
519void efi_setup_console_size(void);
520
521efi_status_t efi_install_fdt(void *fdt);
522
523efi_status_t efi_run_image(void *source_buffer, efi_uintn_t source_size);
524
525efi_status_t efi_init_variables(void);
526
527void efi_variables_boot_exit_notify(void);
528efi_status_t efi_tcg2_notify_exit_boot_services_failed(void);
529
530efi_status_t efi_tcg2_measure_efi_app_invocation(struct efi_loaded_image_obj *handle);
531
532efi_status_t efi_tcg2_measure_efi_app_exit(void);
533
534efi_status_t efi_root_node_register(void);
535
536efi_status_t efi_initialize_system_table(void);
537
538void efi_runtime_detach(void);
539
540efi_status_t EFIAPI efi_convert_pointer(efi_uintn_t debug_disposition,
541 void **address);
542
543void efi_carve_out_dt_rsv(void *fdt);
544
545void efi_try_purge_kaslr_seed(void *fdt);
546
547efi_status_t efi_console_register(void);
548
549efi_status_t efi_disks_register(void);
550
551efi_status_t efi_rng_register(void);
552
553efi_status_t efi_tcg2_register(void);
554
555efi_status_t efi_riscv_register(void);
556
557efi_status_t efi_tcg2_do_initial_measurement(void);
558
559efi_status_t tcg2_measure_pe_image(void *efi, u64 efi_size,
560 struct efi_loaded_image_obj *handle,
561 struct efi_loaded_image *loaded_image_info);
562
563int efi_disk_create_partitions(efi_handle_t parent, struct blk_desc *desc,
564 const char *uclass_idname, int diskid,
565 const char *pdevname);
566
567efi_status_t efi_gop_register(void);
568
569efi_status_t efi_net_register(void);
570
571efi_status_t efi_watchdog_register(void);
572efi_status_t efi_initrd_register(void);
573efi_status_t efi_initrd_deregister(void);
574
575
576
577
578
579
580
581
582efi_status_t efi_acpi_register(void);
583
584
585
586
587
588
589
590efi_status_t efi_smbios_register(void);
591
592struct efi_simple_file_system_protocol *
593efi_fs_from_path(struct efi_device_path *fp);
594
595
596efi_status_t efi_set_watchdog(unsigned long timeout);
597
598
599void efi_timer_check(void);
600
601efi_status_t efi_check_pe(void *buffer, size_t size, void **nt_header);
602
603efi_status_t efi_load_pe(struct efi_loaded_image_obj *handle,
604 void *efi, size_t efi_size,
605 struct efi_loaded_image *loaded_image_info);
606
607void efi_save_gd(void);
608
609void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map);
610
611void efi_get_image_parameters(void **img_addr, size_t *img_size);
612
613void efi_add_handle(efi_handle_t obj);
614
615efi_status_t efi_create_handle(efi_handle_t *handle);
616
617void efi_delete_handle(efi_handle_t obj);
618
619struct efi_object *efi_search_obj(const efi_handle_t handle);
620
621efi_status_t EFIAPI efi_locate_device_path(const efi_guid_t *protocol,
622 struct efi_device_path **device_path,
623 efi_handle_t *device);
624
625efi_status_t EFIAPI efi_load_image(bool boot_policy,
626 efi_handle_t parent_image,
627 struct efi_device_path *file_path,
628 void *source_buffer,
629 efi_uintn_t source_size,
630 efi_handle_t *image_handle);
631
632efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
633 efi_uintn_t *exit_data_size,
634 u16 **exit_data);
635
636efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle);
637
638efi_status_t efi_search_protocol(const efi_handle_t handle,
639 const efi_guid_t *protocol_guid,
640 struct efi_handler **handler);
641
642efi_status_t efi_add_protocol(const efi_handle_t handle,
643 const efi_guid_t *protocol,
644 void *protocol_interface);
645
646efi_status_t efi_protocol_open(struct efi_handler *handler,
647 void **protocol_interface, void *agent_handle,
648 void *controller_handle, uint32_t attributes);
649
650
651efi_status_t efi_remove_protocol(const efi_handle_t handle,
652 const efi_guid_t *protocol,
653 void *protocol_interface);
654
655efi_status_t EFIAPI
656efi_install_multiple_protocol_interfaces(efi_handle_t *handle, ...);
657efi_status_t EFIAPI
658efi_uninstall_multiple_protocol_interfaces(efi_handle_t handle, ...);
659
660efi_status_t EFIAPI efi_locate_handle_buffer(
661 enum efi_locate_search_type search_type,
662 const efi_guid_t *protocol, void *search_key,
663 efi_uintn_t *no_handles, efi_handle_t **buffer);
664
665efi_status_t efi_close_protocol(efi_handle_t handle, const efi_guid_t *protocol,
666 efi_handle_t agent_handle,
667 efi_handle_t controller_handle);
668
669efi_status_t EFIAPI efi_handle_protocol(efi_handle_t handle,
670 const efi_guid_t *protocol,
671 void **protocol_interface);
672
673efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
674 void (EFIAPI *notify_function) (
675 struct efi_event *event,
676 void *context),
677 void *notify_context, efi_guid_t *group,
678 struct efi_event **event);
679
680efi_status_t efi_set_timer(struct efi_event *event, enum efi_timer_delay type,
681 uint64_t trigger_time);
682
683void efi_signal_event(struct efi_event *event);
684
685
686bool efi_disk_is_removable(efi_handle_t handle);
687
688
689struct efi_simple_file_system_protocol *efi_simple_file_system(
690 struct blk_desc *desc, int part, struct efi_device_path *dp);
691
692
693struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp);
694
695
696efi_status_t EFIAPI efi_register_protocol_notify(const efi_guid_t *protocol,
697 struct efi_event *event,
698 void **registration);
699efi_status_t efi_file_size(struct efi_file_handle *fh, efi_uintn_t *size);
700
701
702struct efi_device_path *efi_get_dp_from_boot(const efi_guid_t guid);
703
704
705const char *guid_to_sha_str(const efi_guid_t *guid);
706int algo_to_len(const char *algo);
707
708int efi_link_dev(efi_handle_t handle, struct udevice *dev);
709int efi_unlink_dev(efi_handle_t handle);
710bool efi_varname_is_load_option(u16 *var_name16, int *index);
711efi_status_t efi_next_variable_name(efi_uintn_t *size, u16 **buf,
712 efi_guid_t *guid);
713
714
715
716
717
718
719
720
721
722
723#define efi_size_in_pages(size) (((size) + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT)
724
725void *efi_alloc(uint64_t len, int memory_type);
726
727void *efi_alloc_aligned_pages(u64 len, int memory_type, size_t align);
728
729efi_status_t efi_allocate_pages(enum efi_allocate_type type,
730 enum efi_memory_type memory_type,
731 efi_uintn_t pages, uint64_t *memory);
732
733efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t pages);
734
735efi_status_t efi_allocate_pool(enum efi_memory_type pool_type,
736 efi_uintn_t size, void **buffer);
737
738efi_status_t efi_free_pool(void *buffer);
739
740efi_status_t efi_get_memory_map_alloc(efi_uintn_t *map_size,
741 struct efi_mem_desc **memory_map);
742
743efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size,
744 struct efi_mem_desc *memory_map,
745 efi_uintn_t *map_key,
746 efi_uintn_t *descriptor_size,
747 uint32_t *descriptor_version);
748
749efi_status_t efi_add_memory_map(u64 start, u64 size, int memory_type);
750
751efi_status_t efi_add_conventional_memory_map(u64 ram_start, u64 ram_end,
752 u64 ram_top);
753
754
755efi_status_t efi_driver_init(void);
756
757int efi_disk_probe(void *ctx, struct event *event);
758
759int efi_disk_remove(void *ctx, struct event *event);
760
761int efi_memory_init(void);
762
763efi_status_t efi_install_configuration_table(const efi_guid_t *guid, void *table);
764
765efi_status_t efi_setup_loaded_image(struct efi_device_path *device_path,
766 struct efi_device_path *file_path,
767 struct efi_loaded_image_obj **handle_ptr,
768 struct efi_loaded_image **info_ptr);
769
770#ifdef CONFIG_EFI_LOADER_BOUNCE_BUFFER
771extern void *efi_bounce_buffer;
772#define EFI_LOADER_BOUNCE_BUFFER_SIZE (64 * 1024 * 1024)
773#endif
774
775
776struct efi_device_path *efi_dp_shorten(struct efi_device_path *dp);
777struct efi_device_path *efi_dp_next(const struct efi_device_path *dp);
778int efi_dp_match(const struct efi_device_path *a,
779 const struct efi_device_path *b);
780efi_handle_t efi_dp_find_obj(struct efi_device_path *dp,
781 const efi_guid_t *guid,
782 struct efi_device_path **rem);
783
784efi_uintn_t efi_dp_instance_size(const struct efi_device_path *dp);
785
786efi_uintn_t efi_dp_size(const struct efi_device_path *dp);
787struct efi_device_path *efi_dp_dup(const struct efi_device_path *dp);
788struct efi_device_path *efi_dp_append(const struct efi_device_path *dp1,
789 const struct efi_device_path *dp2);
790struct efi_device_path *efi_dp_append_node(const struct efi_device_path *dp,
791 const struct efi_device_path *node);
792
793struct efi_device_path *efi_dp_create_device_node(const u8 type,
794 const u8 sub_type,
795 const u16 length);
796
797struct efi_device_path *efi_dp_append_instance(
798 const struct efi_device_path *dp,
799 const struct efi_device_path *dpi);
800
801struct efi_device_path *efi_dp_get_next_instance(struct efi_device_path **dp,
802 efi_uintn_t *size);
803
804bool efi_dp_is_multi_instance(const struct efi_device_path *dp);
805
806struct efi_device_path *efi_dp_from_part(struct blk_desc *desc, int part);
807
808struct efi_device_path *efi_dp_part_node(struct blk_desc *desc, int part);
809struct efi_device_path *efi_dp_from_file(struct blk_desc *desc, int part,
810 const char *path);
811struct efi_device_path *efi_dp_from_eth(void);
812struct efi_device_path *efi_dp_from_mem(uint32_t mem_type,
813 uint64_t start_address,
814 uint64_t end_address);
815
816const struct efi_device_path *efi_dp_last_node(
817 const struct efi_device_path *dp);
818efi_status_t efi_dp_split_file_path(struct efi_device_path *full_path,
819 struct efi_device_path **device_path,
820 struct efi_device_path **file_path);
821struct efi_device_path *efi_dp_from_uart(void);
822efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
823 const char *path,
824 struct efi_device_path **device,
825 struct efi_device_path **file);
826ssize_t efi_dp_check_length(const struct efi_device_path *dp,
827 const size_t maxlen);
828
829#define EFI_DP_TYPE(_dp, _type, _subtype) \
830 (((_dp)->type == DEVICE_PATH_TYPE_##_type) && \
831 ((_dp)->sub_type == DEVICE_PATH_SUB_TYPE_##_subtype))
832
833
834extern const struct efi_device_path END;
835
836
837efi_status_t efi_init_runtime_supported(void);
838
839
840void __efi_runtime efi_update_table_header_crc32(struct efi_table_hdr *table);
841
842
843
844void __efi_runtime EFIAPI efi_reset_system(
845 enum efi_reset_type reset_type,
846 efi_status_t reset_status,
847 unsigned long data_size, void *reset_data);
848
849
850efi_status_t efi_reset_system_init(void);
851
852efi_status_t __efi_runtime EFIAPI efi_get_time(
853 struct efi_time *time,
854 struct efi_time_cap *capabilities);
855
856efi_status_t __efi_runtime EFIAPI efi_set_time(struct efi_time *time);
857
858#ifdef CONFIG_CMD_BOOTEFI_SELFTEST
859
860
861
862
863efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
864 struct efi_system_table *systab);
865#endif
866
867efi_status_t EFIAPI efi_get_variable(u16 *variable_name,
868 const efi_guid_t *vendor, u32 *attributes,
869 efi_uintn_t *data_size, void *data);
870efi_status_t EFIAPI efi_get_next_variable_name(efi_uintn_t *variable_name_size,
871 u16 *variable_name,
872 efi_guid_t *vendor);
873efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
874 const efi_guid_t *vendor, u32 attributes,
875 efi_uintn_t data_size, const void *data);
876
877efi_status_t EFIAPI efi_query_variable_info(
878 u32 attributes, u64 *maximum_variable_storage_size,
879 u64 *remaining_variable_storage_size,
880 u64 *maximum_variable_size);
881
882void *efi_get_var(const u16 *name, const efi_guid_t *vendor, efi_uintn_t *size);
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897struct efi_load_option {
898 u32 attributes;
899 u16 file_path_length;
900 u16 *label;
901 struct efi_device_path *file_path;
902 const u8 *optional_data;
903};
904
905struct efi_device_path *efi_dp_from_lo(struct efi_load_option *lo,
906 const efi_guid_t *guid);
907struct efi_device_path *efi_dp_concat(const struct efi_device_path *dp1,
908 const struct efi_device_path *dp2);
909struct efi_device_path *search_gpt_dp_node(struct efi_device_path *device_path);
910efi_status_t efi_deserialize_load_option(struct efi_load_option *lo, u8 *data,
911 efi_uintn_t *size);
912unsigned long efi_serialize_load_option(struct efi_load_option *lo, u8 **data);
913efi_status_t efi_set_load_options(efi_handle_t handle,
914 efi_uintn_t load_options_size,
915 void *load_options);
916efi_status_t efi_bootmgr_load(efi_handle_t *handle, void **load_options);
917
918
919
920
921
922
923
924
925struct efi_image_regions {
926 int max;
927 int num;
928 struct image_region reg[];
929};
930
931
932
933
934
935
936
937
938
939
940
941
942struct efi_sig_data {
943 struct efi_sig_data *next;
944 efi_guid_t owner;
945 void *data;
946 size_t size;
947};
948
949
950
951
952
953
954
955
956
957
958struct efi_signature_store {
959 struct efi_signature_store *next;
960 efi_guid_t sig_type;
961 struct efi_sig_data *sig_data_list;
962};
963
964struct x509_certificate;
965struct pkcs7_message;
966
967
968
969
970
971
972
973
974
975
976
977struct eficonfig_media_boot_option {
978 void *lo;
979 efi_uintn_t size;
980 bool exist;
981};
982
983bool efi_hash_regions(struct image_region *regs, int count,
984 void **hash, const char *hash_algo, int *len);
985bool efi_signature_lookup_digest(struct efi_image_regions *regs,
986 struct efi_signature_store *db,
987 bool dbx);
988bool efi_signature_verify(struct efi_image_regions *regs,
989 struct pkcs7_message *msg,
990 struct efi_signature_store *db,
991 struct efi_signature_store *dbx);
992static inline bool efi_signature_verify_one(struct efi_image_regions *regs,
993 struct pkcs7_message *msg,
994 struct efi_signature_store *db)
995{
996 return efi_signature_verify(regs, msg, db, NULL);
997}
998bool efi_signature_check_signers(struct pkcs7_message *msg,
999 struct efi_signature_store *dbx);
1000
1001efi_status_t efi_image_region_add(struct efi_image_regions *regs,
1002 const void *start, const void *end,
1003 int nocheck);
1004
1005void efi_sigstore_free(struct efi_signature_store *sigstore);
1006struct efi_signature_store *efi_build_signature_store(void *sig_list,
1007 efi_uintn_t size);
1008struct efi_signature_store *efi_sigstore_parse_sigdb(u16 *name);
1009
1010bool efi_secure_boot_enabled(void);
1011
1012bool efi_capsule_auth_enabled(void);
1013
1014void *efi_prepare_aligned_image(void *efi, u64 *efi_size);
1015
1016bool efi_image_parse(void *efi, size_t len, struct efi_image_regions **regp,
1017 WIN_CERTIFICATE **auth, size_t *auth_len);
1018
1019struct pkcs7_message *efi_parse_pkcs7_header(const void *buf,
1020 size_t buflen,
1021 u8 **tmpbuf);
1022
1023
1024void efi_memcpy_runtime(void *dest, const void *src, size_t n);
1025
1026
1027u16 *efi_create_indexed_name(u16 *buffer, size_t buffer_size, const char *name,
1028 unsigned int index);
1029efi_string_t efi_convert_string(const char *str);
1030
1031extern const struct efi_firmware_management_protocol efi_fmp_fit;
1032extern const struct efi_firmware_management_protocol efi_fmp_raw;
1033
1034
1035efi_status_t EFIAPI efi_update_capsule(
1036 struct efi_capsule_header **capsule_header_array,
1037 efi_uintn_t capsule_count,
1038 u64 scatter_gather_list);
1039efi_status_t EFIAPI efi_query_capsule_caps(
1040 struct efi_capsule_header **capsule_header_array,
1041 efi_uintn_t capsule_count,
1042 u64 *maximum_capsule_size,
1043 u32 *reset_type);
1044
1045efi_status_t efi_capsule_authenticate(const void *capsule,
1046 efi_uintn_t capsule_size,
1047 void **image, efi_uintn_t *image_size);
1048
1049#define EFI_CAPSULE_DIR u"\\EFI\\UpdateCapsule\\"
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063struct efi_fw_image {
1064 efi_guid_t image_type_id;
1065 u16 *fw_name;
1066 u8 image_index;
1067};
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079struct efi_capsule_update_info {
1080 const char *dfu_string;
1081 struct efi_fw_image *images;
1082};
1083
1084extern struct efi_capsule_update_info update_info;
1085extern u8 num_image_type_guids;
1086
1087
1088
1089
1090
1091
1092efi_status_t efi_esrt_register(void);
1093
1094
1095
1096
1097
1098
1099efi_status_t efi_ecpt_register(void);
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111efi_status_t efi_esrt_populate(void);
1112efi_status_t efi_load_capsule_drivers(void);
1113
1114efi_status_t platform_get_eventlog(struct udevice *dev, u64 *addr, u32 *sz);
1115
1116efi_status_t efi_locate_handle_buffer_int(enum efi_locate_search_type search_type,
1117 const efi_guid_t *protocol, void *search_key,
1118 efi_uintn_t *no_handles, efi_handle_t **buffer);
1119
1120efi_status_t efi_open_volume_int(struct efi_simple_file_system_protocol *this,
1121 struct efi_file_handle **root);
1122efi_status_t efi_file_open_int(struct efi_file_handle *this,
1123 struct efi_file_handle **new_handle,
1124 u16 *file_name, u64 open_mode,
1125 u64 attributes);
1126efi_status_t efi_file_close_int(struct efi_file_handle *file);
1127efi_status_t efi_file_read_int(struct efi_file_handle *this,
1128 efi_uintn_t *buffer_size, void *buffer);
1129efi_status_t efi_file_setpos_int(struct efi_file_handle *file, u64 pos);
1130
1131typedef efi_status_t (*efi_console_filter_func)(struct efi_input_key *key);
1132efi_status_t efi_console_get_u16_string
1133 (struct efi_simple_text_input_protocol *cin,
1134 u16 *buf, efi_uintn_t count, efi_console_filter_func filer_func,
1135 int row, int col);
1136
1137efi_status_t efi_disk_get_device_name(const efi_handle_t handle, char *buf, int size);
1138
1139#endif
1140