• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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