176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efi.h>
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efilib.h>
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_STATUS (*foo_t)(EFI_HANDLE, EFI_GUID *, VOID **);
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	unsigned long addr;
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	unsigned long gp;
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} fdesc_t;
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_LOADED_IMAGE my_loaded;
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanefi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	EFI_LOADED_IMAGE *loaded_image = NULL;
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	EFI_DEVICE_PATH *dev_path;
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	EFI_STATUS status;
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	InitializeLib(image, systab);
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	status = uefi_call_wrapper(systab->BootServices->HandleProtocol,
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman				3,
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman				image,
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman				&LoadedImageProtocol,
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman				(void **) &loaded_image);
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	if (EFI_ERROR(status)) {
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		Print(L"handleprotocol: %r\n", status);
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	}
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	BS->HandleProtocol(loaded_image->DeviceHandle, &DevicePathProtocol, (void **) &dev_path);
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Image device      : %s\n", DevicePathToStr(dev_path));
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Image file        : %s\n", DevicePathToStr(loaded_image->FilePath));
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Image base        : %lx\n", loaded_image->ImageBase);
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Image size        : %lx\n", loaded_image->ImageSize);
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Load options size : %lx\n", loaded_image->LoadOptionsSize);
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Print(L"Load options      : %s\n", loaded_image->LoadOptions);
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return EFI_SUCCESS;
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
44