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