t3.c revision 1.1 1 1.1 jakllsch /* $NetBSD: t3.c,v 1.1 2014/04/01 16:16:06 jakllsch Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch #include <efi.h>
4 1.1 jakllsch #include <efilib.h>
5 1.1 jakllsch
6 1.1 jakllsch EFI_STATUS
7 1.1 jakllsch efi_main(
8 1.1 jakllsch EFI_HANDLE image_handle,
9 1.1 jakllsch EFI_SYSTEM_TABLE *systab
10 1.1 jakllsch )
11 1.1 jakllsch {
12 1.1 jakllsch EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL;
13 1.1 jakllsch EFI_STATUS efi_status;
14 1.1 jakllsch EFI_LOADED_IMAGE *li;
15 1.1 jakllsch UINTN pat = PoolAllocationType;
16 1.1 jakllsch VOID *void_li_p;
17 1.1 jakllsch
18 1.1 jakllsch InitializeLib(image_handle, systab);
19 1.1 jakllsch PoolAllocationType = 2; /* klooj */
20 1.1 jakllsch
21 1.1 jakllsch Print(L"Hello World! (0xd=0x%x, 13=%d)\n", 13, 13);
22 1.1 jakllsch
23 1.1 jakllsch Print(L"before InitializeLib(): PoolAllocationType=%d\n",
24 1.1 jakllsch pat);
25 1.1 jakllsch
26 1.1 jakllsch Print(L" after InitializeLib(): PoolAllocationType=%d\n",
27 1.1 jakllsch PoolAllocationType);
28 1.1 jakllsch
29 1.1 jakllsch /*
30 1.1 jakllsch * Locate loaded_image_handle instance.
31 1.1 jakllsch */
32 1.1 jakllsch
33 1.1 jakllsch Print(L"BS->HandleProtocol() ");
34 1.1 jakllsch
35 1.1 jakllsch efi_status = uefi_call_wrapper(
36 1.1 jakllsch BS->HandleProtocol,
37 1.1 jakllsch 3,
38 1.1 jakllsch image_handle,
39 1.1 jakllsch &loaded_image_protocol,
40 1.1 jakllsch &void_li_p);
41 1.1 jakllsch li = void_li_p;
42 1.1 jakllsch
43 1.1 jakllsch Print(L"%xh (%r)\n", efi_status, efi_status);
44 1.1 jakllsch
45 1.1 jakllsch if (efi_status != EFI_SUCCESS) {
46 1.1 jakllsch return efi_status;
47 1.1 jakllsch }
48 1.1 jakllsch
49 1.1 jakllsch Print(L" li: %xh\n", li);
50 1.1 jakllsch
51 1.1 jakllsch if (!li) {
52 1.1 jakllsch return EFI_UNSUPPORTED;
53 1.1 jakllsch }
54 1.1 jakllsch
55 1.1 jakllsch Print(L" li->Revision: %xh\n", li->Revision);
56 1.1 jakllsch Print(L" li->ParentHandle: %xh\n", li->ParentHandle);
57 1.1 jakllsch Print(L" li->SystemTable: %xh\n", li->SystemTable);
58 1.1 jakllsch Print(L" li->DeviceHandle: %xh\n", li->DeviceHandle);
59 1.1 jakllsch Print(L" li->FilePath: %xh\n", li->FilePath);
60 1.1 jakllsch Print(L" li->Reserved: %xh\n", li->Reserved);
61 1.1 jakllsch Print(L" li->LoadOptionsSize: %xh\n", li->LoadOptionsSize);
62 1.1 jakllsch Print(L" li->LoadOptions: %xh\n", li->LoadOptions);
63 1.1 jakllsch Print(L" li->ImageBase: %xh\n", li->ImageBase);
64 1.1 jakllsch Print(L" li->ImageSize: %xh\n", li->ImageSize);
65 1.1 jakllsch Print(L" li->ImageCodeType: %xh\n", li->ImageCodeType);
66 1.1 jakllsch Print(L" li->ImageDataType: %xh\n", li->ImageDataType);
67 1.1 jakllsch Print(L" li->Unload: %xh\n", li->Unload);
68 1.1 jakllsch
69 1.1 jakllsch #if 0
70 1.1 jakllsch typedef struct {
71 1.1 jakllsch UINT32 Revision;
72 1.1 jakllsch EFI_HANDLE ParentHandle;
73 1.1 jakllsch struct _EFI_SYSTEM_TABLE *SystemTable;
74 1.1 jakllsch
75 1.1 jakllsch // Source location of image
76 1.1 jakllsch EFI_HANDLE DeviceHandle;
77 1.1 jakllsch EFI_DEVICE_PATH *FilePath;
78 1.1 jakllsch VOID *Reserved;
79 1.1 jakllsch
80 1.1 jakllsch // Images load options
81 1.1 jakllsch UINT32 LoadOptionsSize;
82 1.1 jakllsch VOID *LoadOptions;
83 1.1 jakllsch
84 1.1 jakllsch // Location of where image was loaded
85 1.1 jakllsch VOID *ImageBase;
86 1.1 jakllsch UINT64 ImageSize;
87 1.1 jakllsch EFI_MEMORY_TYPE ImageCodeType;
88 1.1 jakllsch EFI_MEMORY_TYPE ImageDataType;
89 1.1 jakllsch
90 1.1 jakllsch // If the driver image supports a dynamic unload request
91 1.1 jakllsch EFI_IMAGE_UNLOAD Unload;
92 1.1 jakllsch
93 1.1 jakllsch } EFI_LOADED_IMAGE;
94 1.1 jakllsch #endif
95 1.1 jakllsch
96 1.1 jakllsch return EFI_SUCCESS;
97 1.1 jakllsch }
98