176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efi.h> 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efilib.h> 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanefi_main( 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_HANDLE image_handle, 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_SYSTEM_TABLE *systab 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman) 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL; 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_STATUS efi_status; 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_LOADED_IMAGE *li; 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINTN pat = PoolAllocationType; 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VOID *void_li_p; 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman InitializeLib(image_handle, systab); 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PoolAllocationType = 2; /* klooj */ 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13); 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"before InitializeLib(): PoolAllocationType=%d\n", 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman pat); 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" after InitializeLib(): PoolAllocationType=%d\n", 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PoolAllocationType); 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Locate loaded_image_handle instance. 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"BS->HandleProtocol() "); 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman efi_status = uefi_call_wrapper( 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BS->HandleProtocol, 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3, 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman image_handle, 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman &loaded_image_protocol, 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman &void_li_p); 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman li = void_li_p; 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"%xh (%r)\n", efi_status, efi_status); 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (efi_status != EFI_SUCCESS) { 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return efi_status; 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li: %xh\n", li); 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!li) { 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return EFI_UNSUPPORTED; 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->Revision: %xh\n", li->Revision); 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->ParentHandle: %xh\n", li->ParentHandle); 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->SystemTable: %xh\n", li->SystemTable); 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->DeviceHandle: %xh\n", li->DeviceHandle); 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->FilePath: %xh\n", li->FilePath); 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->Reserved: %xh\n", li->Reserved); 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->LoadOptionsSize: %xh\n", li->LoadOptionsSize); 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->LoadOptions: %xh\n", li->LoadOptions); 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->ImageBase: %xh\n", li->ImageBase); 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->ImageSize: %xh\n", li->ImageSize); 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->ImageCodeType: %xh\n", li->ImageCodeType); 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->ImageDataType: %xh\n", li->ImageDataType); 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L" li->Unload: %xh\n", li->Unload); 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Revision; 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_HANDLE ParentHandle; 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct _EFI_SYSTEM_TABLE *SystemTable; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Source location of image 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_HANDLE DeviceHandle; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH *FilePath; 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VOID *Reserved; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Images load options 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 LoadOptionsSize; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VOID *LoadOptions; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // Location of where image was loaded 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VOID *ImageBase; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ImageSize; 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_MEMORY_TYPE ImageCodeType; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_MEMORY_TYPE ImageDataType; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // If the driver image supports a dynamic unload request 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_IMAGE_UNLOAD Unload; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_LOADED_IMAGE; 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return EFI_SUCCESS; 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 96