4 * Copyright (c) 2016 Google, Inc
5 * Written by Simon Glass <sjg@chromium.org>
7 * SPDX-License-Identifier: GPL-2.0+
9 * This program demonstrates calling a boottime service.
10 * It writes a greeting and the load options to the console.
16 static const efi_guid_t loaded_image_guid
= LOADED_IMAGE_GUID
;
19 * Entry point of the EFI application.
21 * @handle handle of the loaded image
22 * @systable system table
25 efi_status_t EFIAPI
efi_main(efi_handle_t handle
,
26 struct efi_system_table
*systable
)
28 struct efi_simple_text_output_protocol
*con_out
= systable
->con_out
;
29 struct efi_boot_services
*boottime
= systable
->boottime
;
30 struct efi_loaded_image
*loaded_image
;
33 con_out
->output_string(con_out
, L
"Hello, world!\n");
35 /* Get the loaded image protocol */
36 ret
= boottime
->handle_protocol(handle
, &loaded_image_guid
,
37 (void **)&loaded_image
);
38 if (ret
!= EFI_SUCCESS
) {
39 con_out
->output_string(con_out
,
40 L
"Cannot open loaded image protocol\n");
43 /* Output the load options */
44 con_out
->output_string(con_out
, L
"Load options: ");
45 if (loaded_image
->load_options_size
&& loaded_image
->load_options
)
46 con_out
->output_string(con_out
,
47 (u16
*)loaded_image
->load_options
);
49 con_out
->output_string(con_out
, L
"<none>");
50 con_out
->output_string(con_out
, L
"\n");
53 boottime
->exit(handle
, ret
, 0, NULL
);
55 /* We should never arrive here */