1 #include <efi.h>
2 #include <efilib.h>
3
4 EFI_STATUS
efi_main(EFI_HANDLE image_handle,EFI_SYSTEM_TABLE * systab)5 efi_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
68 typedef 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