|
10 | 10 | // Generated by: xxd -i vgabios.bin >> vgabios.h |
11 | 11 | #include "bins/vgabios.h" |
12 | 12 |
|
13 | | -const char *banner = "CSMWrap\n" |
| 13 | +#ifndef BUILD_VERSION |
| 14 | +#define BUILD_VERSION "Unknown" |
| 15 | +#endif |
| 16 | + |
| 17 | +const char *banner = "CSMWrap Version " BUILD_VERSION "\n" |
14 | 18 | "https://github.com/flygoat/csmwrap\n" |
15 | 19 | "By: Jiaxun Yang <[email protected]>\n"; |
16 | 20 |
|
17 | | -EFI_SYSTEM_TABLE *ST; |
18 | | -EFI_BOOT_SERVICES *BS; |
19 | | - |
20 | | -#define BIOS_ROM_BASE 0xc0000 |
| 21 | +EFI_SYSTEM_TABLE *gST; |
| 22 | +EFI_BOOT_SERVICES *gBS; |
21 | 23 |
|
22 | 24 | struct csmwrap_priv priv = { |
23 | 25 | .csm_bin = Csm16_bin, |
@@ -72,9 +74,9 @@ int set_smbios_table() |
72 | 74 | bool found = FALSE; |
73 | 75 | uintptr_t table_addr = 0; |
74 | 76 |
|
75 | | - for (i = 0; i < ST->NumberOfTableEntries; i++) { |
| 77 | + for (i = 0; i < gST->NumberOfTableEntries; i++) { |
76 | 78 | EFI_CONFIGURATION_TABLE *table; |
77 | | - table = ST->ConfigurationTable + i; |
| 79 | + table = gST->ConfigurationTable + i; |
78 | 80 |
|
79 | 81 | if (!efi_guidcmp(table->VendorGuid, smbiosGuid)) { |
80 | 82 | printf("Found SMBIOS Table at %x\n", (uintptr_t)table->VendorTable); |
@@ -107,18 +109,18 @@ int set_smbios_table() |
107 | 109 |
|
108 | 110 | EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) |
109 | 111 | { |
110 | | - ST = SystemTable; |
111 | | - BS = SystemTable->BootServices; |
112 | | - |
113 | 112 | EFI_PHYSICAL_ADDRESS HiPmm; |
114 | 113 | uintptr_t csm_bin_base; |
115 | 114 | EFI_STATUS Status; |
116 | 115 | EFI_IA32_REGISTER_SET Regs; |
117 | 116 |
|
| 117 | + gST = SystemTable; |
| 118 | + gBS = SystemTable->BootServices; |
| 119 | + |
118 | 120 | printf("%s", banner); |
119 | 121 |
|
120 | | - BS->RaiseTPL(TPL_NOTIFY); |
121 | | - BS->SetWatchdogTimer(0, 0, 0, NULL); |
| 122 | + gBS->RaiseTPL(TPL_NOTIFY); |
| 123 | + gBS->SetWatchdogTimer(0, 0, 0, NULL); |
122 | 124 |
|
123 | 125 | if (unlock_bios_region()) { |
124 | 126 | printf("Unable to unlock BIOS region\n"); |
@@ -153,7 +155,7 @@ EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) |
153 | 155 | } |
154 | 156 |
|
155 | 157 | HiPmm = 0xffffffff; |
156 | | - if (BS->AllocatePages(AllocateMaxAddress, EfiRuntimeServicesData, HIPMM_SIZE / EFI_PAGE_SIZE, &HiPmm) != EFI_SUCCESS) { |
| 158 | + if (gBS->AllocatePages(AllocateMaxAddress, EfiRuntimeServicesData, HIPMM_SIZE / EFI_PAGE_SIZE, &HiPmm) != EFI_SUCCESS) { |
157 | 159 | printf("Unable to alloc HiPmm!!!\n"); |
158 | 160 | return -1; |
159 | 161 | } |
@@ -197,15 +199,15 @@ EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) |
197 | 199 | EFI_MEMORY_DESCRIPTOR *efi_mmap; |
198 | 200 | EFI_MEMORY_DESCRIPTOR tmp_mmap[1]; |
199 | 201 | efi_mmap_size = sizeof(tmp_mmap); |
200 | | - BS->GetMemoryMap(&efi_mmap_size, tmp_mmap, &efi_mmap_key, &efi_desc_size, &efi_desc_ver); |
| 202 | + gBS->GetMemoryMap(&efi_mmap_size, tmp_mmap, &efi_mmap_key, &efi_desc_size, &efi_desc_ver); |
201 | 203 | efi_mmap_size += 4096; |
202 | | - BS->AllocatePool(EfiLoaderData, efi_mmap_size, (void **)&efi_mmap); |
203 | | - BS->GetMemoryMap(&efi_mmap_size, efi_mmap, &efi_mmap_key, &efi_desc_size, &efi_desc_ver); |
| 204 | + gBS->AllocatePool(EfiLoaderData, efi_mmap_size, (void **)&efi_mmap); |
| 205 | + gBS->GetMemoryMap(&efi_mmap_size, efi_mmap, &efi_mmap_key, &efi_desc_size, &efi_desc_ver); |
204 | 206 |
|
205 | 207 | // It may take N amounts of ExitBootServices() calls to complete... |
206 | 208 | // Cap at 128. |
207 | 209 | for (size_t i = 0; i < 128; i++) { |
208 | | - Status = BS->ExitBootServices(ImageHandle, efi_mmap_key); |
| 210 | + Status = gBS->ExitBootServices(ImageHandle, efi_mmap_key); |
209 | 211 | if (Status == EFI_SUCCESS) { |
210 | 212 | break; |
211 | 213 | } |
|
0 commit comments