0
|
1 #include <efi.h>
|
|
2 #include <efilib.h>
|
|
3
|
1
|
4 #include "registers.h"
|
|
5
|
0
|
6 EFI_STATUS
|
|
7 efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
|
|
8 {
|
|
9 InitializeLib(image, systab);
|
|
10
|
|
11 Print(L"test start.\n");
|
|
12
|
|
13 UINTN map_size, cookie, size, version;
|
|
14 map_size = EFI_PAGE_SIZE * 2;
|
|
15 EFI_MEMORY_DESCRIPTOR *md;
|
|
16
|
|
17 EFI_STATUS status = uefi_call_wrapper(BS->AllocatePool, 3, EfiLoaderData, map_size, &md);
|
|
18
|
|
19 if (EFI_ERROR(status)) {
|
|
20 Print(L"error 'allocate pool' %r \n", status);
|
|
21 }
|
|
22
|
|
23 status = uefi_call_wrapper(BS->GetMemoryMap, 5, &map_size, md, &cookie, &size, &version);
|
|
24 if (EFI_ERROR(status)) {
|
|
25 Print(L"error 'get memory map' %r \n", status);
|
|
26 }
|
|
27
|
|
28 /*
|
|
29 UINTN nr_map = map_size/size;
|
|
30
|
|
31 UINTN i;
|
|
32 for (i=0; i <nr_map ;i++) {
|
|
33 EFI_MEMORY_DESCRIPTOR p = md[i];
|
|
34 switch (p.Type) {
|
|
35 case EfiReservedMemoryType:
|
|
36 Print(L"| reserved memory.");
|
|
37 break;
|
|
38 case EfiLoaderCode:
|
|
39 Print(L"| loader code.");
|
|
40 break;
|
|
41 case EfiLoaderData:
|
|
42 Print(L"| loader data.");
|
|
43 break;
|
|
44 case EfiBootServicesCode:
|
|
45 Print(L"| boot services code.");
|
|
46 break;
|
|
47 case EfiBootServicesData:
|
|
48 Print(L"| boot services data.");
|
|
49 break;
|
|
50 case EfiConventionalMemory:
|
|
51 Print(L"| conventional memory.");
|
|
52 break;
|
|
53 case EfiUnusableMemory:
|
|
54 Print(L"| unusable memory.");
|
|
55 break;
|
|
56 case EfiACPIReclaimMemory:
|
|
57 Print(L"| ACPI reclaim memory.");
|
|
58 break;
|
|
59 case EfiACPIMemoryNVS:
|
|
60 Print(L"| ACPI memory NVS.");
|
|
61 break;
|
|
62 case EfiMemoryMappedIO:
|
|
63 Print(L"| memory mapped IO.");
|
|
64 break;
|
|
65 case EfiMemoryMappedIOPortSpace:
|
|
66 Print(L"| memory mapped IO port space.");
|
|
67 break;
|
|
68 case EfiPalCode:
|
|
69 Print(L"| pal code. ");
|
|
70 break;
|
|
71 case EfiMaxMemoryType:
|
|
72 Print(L"| max memory type.");
|
|
73 break;
|
|
74 }
|
|
75 }
|
|
76 */
|
|
77
|
|
78 status = uefi_call_wrapper(BS->ExitBootServices, 2, image, cookie);
|
|
79
|
|
80 if (EFI_ERROR(status)) {
|
|
81 Print(L"error 'exit boot services' %r \n", status);
|
|
82 }
|
|
83
|
1
|
84 asm volatile ("cli" ::);
|
|
85
|
|
86 cr0_t cr0;
|
|
87 asm volatile("mov %%cr0,%0\n\t" : "=r" (cr0));
|
0
|
88 while(1) { }
|
1
|
89 cr0.pg = 0;
|
|
90 asm volatile("mov %0, %%cr0" : : "r" (cr0));
|
|
91
|
0
|
92
|
|
93 return EFI_SUCCESS;
|
|
94 }
|