1#include <efi.h>
2#include <efilib.h>
3
4EFI_STATUS
5efi_main(
6	EFI_HANDLE image_handle,
7	EFI_SYSTEM_TABLE *systab
8)
9{
10	EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL;
11	EFI_STATUS efi_status;
12	EFI_LOADED_IMAGE *li;
13	UINTN pat = PoolAllocationType;
14	VOID *void_li_p;
15
16	InitializeLib(image_handle, systab);
17	PoolAllocationType = 2; /* klooj */
18
19	Print(L"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13);
20
21	Print(L"before InitializeLib(): PoolAllocationType=%d\n",
22		pat);
23
24	Print(L" after InitializeLib(): PoolAllocationType=%d\n",
25		PoolAllocationType);
26
27	/*
28	 * Locate loaded_image_handle instance.
29	 */
30
31	Print(L"BS->HandleProtocol()  ");
32
33	efi_status = uefi_call_wrapper(
34		BS->HandleProtocol,
35		3,
36		image_handle,
37		&loaded_image_protocol,
38		&void_li_p);
39	li = void_li_p;
40
41	Print(L"%xh (%r)\n", efi_status, efi_status);
42
43	if (efi_status != EFI_SUCCESS) {
44		return efi_status;
45	}
46
47	Print(L"  li: %xh\n", li);
48
49	if (!li) {
50		return EFI_UNSUPPORTED;
51	}
52
53	Print(L"  li->Revision:        %xh\n", li->Revision);
54	Print(L"  li->ParentHandle:    %xh\n", li->ParentHandle);
55	Print(L"  li->SystemTable:     %xh\n", li->SystemTable);
56	Print(L"  li->DeviceHandle:    %xh\n", li->DeviceHandle);
57	Print(L"  li->FilePath:        %xh\n", li->FilePath);
58	Print(L"  li->Reserved:        %xh\n", li->Reserved);
59	Print(L"  li->LoadOptionsSize: %xh\n", li->LoadOptionsSize);
60	Print(L"  li->LoadOptions:     %xh\n", li->LoadOptions);
61	Print(L"  li->ImageBase:       %xh\n", li->ImageBase);
62	Print(L"  li->ImageSize:       %xh\n", li->ImageSize);
63	Print(L"  li->ImageCodeType:   %xh\n", li->ImageCodeType);
64	Print(L"  li->ImageDataType:   %xh\n", li->ImageDataType);
65	Print(L"  li->Unload:          %xh\n", li->Unload);
66
67#if 0
68typedef struct {
69    UINT32                          Revision;
70    EFI_HANDLE                      ParentHandle;
71    struct _EFI_SYSTEM_TABLE        *SystemTable;
72
73    // Source location of image
74    EFI_HANDLE                      DeviceHandle;
75    EFI_DEVICE_PATH                 *FilePath;
76    VOID                            *Reserved;
77
78    // Images load options
79    UINT32                          LoadOptionsSize;
80    VOID                            *LoadOptions;
81
82    // Location of where image was loaded
83    VOID                            *ImageBase;
84    UINT64                          ImageSize;
85    EFI_MEMORY_TYPE                 ImageCodeType;
86    EFI_MEMORY_TYPE                 ImageDataType;
87
88    // If the driver image supports a dynamic unload request
89    EFI_IMAGE_UNLOAD                Unload;
90
91} EFI_LOADED_IMAGE;
92#endif
93
94	return EFI_SUCCESS;
95}
96