efi: Directly use EFI functions instead of using GNU-EFI's call wrapper
diff --git a/stage23/Makefile b/stage23/Makefile
index cd651d4b..1a243c18 100644
--- a/stage23/Makefile
+++ b/stage23/Makefile
@@ -61,7 +61,6 @@ INTERNAL_CFLAGS := \
-fno-stack-protector \
-fno-omit-frame-pointer \
-fno-lto \
- -fno-pic \
-Wno-address-of-packed-member \
-Wshadow \
-mno-80387 \
@@ -85,6 +84,7 @@ ifeq ($(TARGET), bios)
-m32 \
-march=i386 \
-mabi=sysv \
+ -fno-pic \
-fno-pie
endif
@@ -96,6 +96,7 @@ ifeq ($(TARGET), uefi)
-m32 \
-march=i386 \
-mabi=sysv \
+ -DGNU_EFI_USE_MS_ABI \
-fpie
INTERNAL_CFLAGS += \
@@ -104,6 +105,7 @@ ifeq ($(TARGET), uefi)
-m64 \
-march=x86-64 \
-mabi=sysv \
+ -DGNU_EFI_USE_MS_ABI \
-I../gnu-efi/inc \
-I../gnu-efi/inc/x86_64 \
-fpie \
@@ -117,6 +119,7 @@ ifeq ($(TARGET), uefi32)
-m32 \
-march=i386 \
-mabi=sysv \
+ -DGNU_EFI_USE_MS_ABI \
-I../gnu-efi/inc \
-I../gnu-efi/inc/ia32 \
-fpie
@@ -254,15 +257,12 @@ $(BUILDDIR)/BOOTX64.EFI: $(BUILDDIR)/limine_efi.elf
$(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-x86_64.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a: $(BUILDDIR)/gnu-efi
$(MAKE) -C $(BUILDDIR)/gnu-efi/gnuefi CC="$(TOOLCHAIN_CC) -m64 -march=x86-64" AR="$(TOOLCHAIN_AR)" ARCH=x86_64
-$(BUILDDIR)/gnu-efi/lib/x86_64/efi_stub.o: $(BUILDDIR)/gnu-efi
- $(MAKE) -C $(BUILDDIR)/gnu-efi/lib CC="$(TOOLCHAIN_CC) -m64 -march=x86-64" ARCH=x86_64 x86_64/efi_stub.o
-
-$(BUILDDIR)/limine_efi_nomap.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-x86_64.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(BUILDDIR)/gnu-efi/lib/x86_64/efi_stub.o $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o
+$(BUILDDIR)/limine_efi_nomap.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-x86_64.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o
$(TOOLCHAIN_LD) \
-Tlinker_uefi_nomap.ld \
$^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -o $@
-$(BUILDDIR)/limine_efi.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-x86_64.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(BUILDDIR)/gnu-efi/lib/x86_64/efi_stub.o $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/full.map.o
+$(BUILDDIR)/limine_efi.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-x86_64.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/full.map.o
$(TOOLCHAIN_LD) \
-Tlinker_uefi.ld \
$^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -o $@
@@ -282,15 +282,12 @@ $(BUILDDIR)/BOOTIA32.EFI: $(BUILDDIR)/limine_efi.elf
$(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-ia32.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a: $(BUILDDIR)/gnu-efi
$(MAKE) -C $(BUILDDIR)/gnu-efi/gnuefi CC="$(TOOLCHAIN_CC) -m32 -march=i386" AR="$(TOOLCHAIN_AR)" ARCH=ia32
-$(BUILDDIR)/gnu-efi/lib/ia32/efi_stub.o: $(BUILDDIR)/gnu-efi
- $(MAKE) -C $(BUILDDIR)/gnu-efi/lib CC="$(TOOLCHAIN_CC) -m32 -march=i386" ARCH=ia32 ia32/efi_stub.o
-
-$(BUILDDIR)/limine_efi_nomap.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-ia32.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(BUILDDIR)/gnu-efi/lib/ia32/efi_stub.o $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o
+$(BUILDDIR)/limine_efi_nomap.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-ia32.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o
$(TOOLCHAIN_LD) \
-Tlinker_uefi32_nomap.ld \
$^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -o $@
-$(BUILDDIR)/limine_efi.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-ia32.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(BUILDDIR)/gnu-efi/lib/ia32/efi_stub.o $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/full.map.o
+$(BUILDDIR)/limine_efi.elf: $(BUILDDIR)/gnu-efi/gnuefi/crt0-efi-ia32.o $(BUILDDIR)/gnu-efi/gnuefi/libgnuefi.a $(OBJ) $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/full.map.o
$(TOOLCHAIN_LD) \
-Tlinker_uefi32.ld \
$^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -o $@
diff --git a/stage23/drivers/disk.s2.c b/stage23/drivers/disk.s2.c
index e0e39ffe..ebcc9788 100644
--- a/stage23/drivers/disk.s2.c
+++ b/stage23/drivers/disk.s2.c
@@ -214,23 +214,19 @@ struct volume *disk_volume_from_efi_handle(EFI_HANDLE *efi_handle) {
EFI_DISK_IO *disk_io = NULL;
EFI_BLOCK_IO *block_io = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3, efi_handle, &disk_io_guid,
- (void **)&disk_io);
+ status = gBS->HandleProtocol(efi_handle, &disk_io_guid, (void **)&disk_io);
if (status)
return NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3, efi_handle, &block_io_guid,
- (void **)&block_io);
+ status = gBS->HandleProtocol(efi_handle, &block_io_guid, (void **)&block_io);
if (status)
return NULL;
uint64_t signature = BUILD_ID;
uint64_t orig;
- uefi_call_wrapper(disk_io->ReadDisk, 5, disk_io, block_io->Media->MediaId, 0,
- sizeof(uint64_t), &orig);
+ disk_io->ReadDisk(disk_io, block_io->Media->MediaId, 0, sizeof(uint64_t), &orig);
- status = uefi_call_wrapper(disk_io->WriteDisk, 5,
- disk_io, block_io->Media->MediaId, 0, sizeof(uint64_t), &signature);
+ status = disk_io->WriteDisk(disk_io, block_io->Media->MediaId, 0, sizeof(uint64_t), &signature);
if (status) {
// Really hacky support for CDs because they are read-only
@@ -248,12 +244,12 @@ struct volume *disk_volume_from_efi_handle(EFI_HANDLE *efi_handle) {
EFI_DISK_IO *cur_disk_io = NULL;
EFI_BLOCK_IO *cur_block_io = NULL;
- uefi_call_wrapper(gBS->HandleProtocol, 3, volume_index[i]->efi_handle,
+ gBS->HandleProtocol(volume_index[i]->efi_handle,
&disk_io_guid, (void **)&cur_disk_io);
- uefi_call_wrapper(gBS->HandleProtocol, 3, volume_index[i]->efi_handle,
+ gBS->HandleProtocol(volume_index[i]->efi_handle,
&block_io_guid, (void **)&cur_block_io);
- uefi_call_wrapper(cur_disk_io->ReadDisk, 5, cur_disk_io,
+ cur_disk_io->ReadDisk(cur_disk_io,
cur_block_io->Media->MediaId,
0 +
volume_index[i]->first_sect * volume_index[i]->sector_size,
@@ -265,8 +261,7 @@ struct volume *disk_volume_from_efi_handle(EFI_HANDLE *efi_handle) {
}
}
- uefi_call_wrapper(disk_io->WriteDisk, 5, disk_io, block_io->Media->MediaId, 0,
- sizeof(uint64_t), &orig);
+ disk_io->WriteDisk(disk_io, block_io->Media->MediaId, 0, sizeof(uint64_t), &orig);
return ret;
}
@@ -277,10 +272,10 @@ bool disk_read_sectors(struct volume *volume, void *buf, uint64_t block, size_t
EFI_GUID block_io_guid = BLOCK_IO_PROTOCOL;
EFI_BLOCK_IO *block_io = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3, volume->efi_handle,
+ status = gBS->HandleProtocol(volume->efi_handle,
&block_io_guid, (void **)&block_io);
- status = uefi_call_wrapper(block_io->ReadBlocks, 5, block_io,
+ status = block_io->ReadBlocks(block_io,
block_io->Media->MediaId,
block, count * volume->sector_size, buf);
@@ -298,13 +293,11 @@ void disk_create_index(void) {
EFI_HANDLE *handles = NULL;
UINTN handles_size = 0;
- uefi_call_wrapper(gBS->LocateHandle, 5, ByProtocol, &block_io_guid,
- NULL, &handles_size, handles);
+ gBS->LocateHandle(ByProtocol, &block_io_guid, NULL, &handles_size, handles);
handles = ext_mem_alloc(handles_size);
- uefi_call_wrapper(gBS->LocateHandle, 5, ByProtocol, &block_io_guid,
- NULL, &handles_size, handles);
+ gBS->LocateHandle(ByProtocol, &block_io_guid, NULL, &handles_size, handles);
volume_index = ext_mem_alloc(sizeof(struct volume) * MAX_VOLUMES);
@@ -319,13 +312,11 @@ void disk_create_index(void) {
EFI_GUID disk_io_guid = DISK_IO_PROTOCOL;
EFI_DISK_IO *disk_io = NULL;
- uefi_call_wrapper(gBS->HandleProtocol, 3, handles[i], &disk_io_guid,
- (void **)&disk_io);
+ gBS->HandleProtocol(handles[i], &disk_io_guid, (void **)&disk_io);
EFI_BLOCK_IO *drive = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3, handles[i],
- &block_io_guid, (void **)&drive);
+ status = gBS->HandleProtocol(handles[i], &block_io_guid, (void **)&drive);
if (status != 0 || drive == NULL || drive->Media->LastBlock == 0)
continue;
@@ -334,10 +325,8 @@ void disk_create_index(void) {
continue;
uint64_t orig;
- uefi_call_wrapper(disk_io->ReadDisk, 5,
- disk_io, drive->Media->MediaId, 0, sizeof(uint64_t), &orig);
- status = uefi_call_wrapper(disk_io->WriteDisk, 5,
- disk_io, drive->Media->MediaId, 0, sizeof(uint64_t), &orig);
+ disk_io->ReadDisk(disk_io, drive->Media->MediaId, 0, sizeof(uint64_t), &orig);
+ status = disk_io->WriteDisk(disk_io, drive->Media->MediaId, 0, sizeof(uint64_t), &orig);
struct volume *block = ext_mem_alloc(sizeof(struct volume));
diff --git a/stage23/drivers/edid.c b/stage23/drivers/edid.c
index 4ad0c1fa..292a37c7 100644
--- a/stage23/drivers/edid.c
+++ b/stage23/drivers/edid.c
@@ -58,16 +58,14 @@ struct edid_info_struct *get_edid_info(void) {
UINTN handles_size = 0;
EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
- status = uefi_call_wrapper(gBS->LocateHandle, 5,
- ByProtocol, &gop_guid, NULL, &handles_size, handles);
+ status = gBS->LocateHandle(ByProtocol, &gop_guid, NULL, &handles_size, handles);
if (status && status != EFI_BUFFER_TOO_SMALL)
goto fail;
handles = ext_mem_alloc(handles_size);
- status = uefi_call_wrapper(gBS->LocateHandle, 5,
- ByProtocol, &gop_guid, NULL, &handles_size, handles);
+ status = gBS->LocateHandle(ByProtocol, &gop_guid, NULL, &handles_size, handles);
if (status)
goto fail;
@@ -75,8 +73,7 @@ struct edid_info_struct *get_edid_info(void) {
EFI_EDID_ACTIVE_PROTOCOL *edid = NULL;
EFI_GUID edid_guid = EFI_EDID_ACTIVE_PROTOCOL_GUID;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3,
- handles[0], &edid_guid, (void **)&edid);
+ status = gBS->HandleProtocol(handles[0], &edid_guid, (void **)&edid);
if (status)
goto fail;
diff --git a/stage23/drivers/gop.c b/stage23/drivers/gop.c
index 1611d53b..dfda55c1 100644
--- a/stage23/drivers/gop.c
+++ b/stage23/drivers/gop.c
@@ -40,13 +40,12 @@ static bool try_mode(struct fb_info *ret, size_t mode, int width, int height, in
EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
- uefi_call_wrapper(gBS->LocateProtocol, 3, &gop_guid, NULL, (void **)&gop);
+ gBS->LocateProtocol(&gop_guid, NULL, (void **)&gop);
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
UINTN mode_info_size;
- status = uefi_call_wrapper(gop->QueryMode, 4,
- gop, mode, &mode_info_size, &mode_info);
+ status = gop->QueryMode(gop, mode, &mode_info_size, &mode_info);
if (status)
return false;
@@ -102,7 +101,7 @@ static bool try_mode(struct fb_info *ret, size_t mode, int width, int height, in
if ((int)mode == current_video_mode) {
printv("gop: Mode was already set, perfect!\n");
} else {
- status = uefi_call_wrapper(gop->SetMode, 2, gop, mode);
+ status = gop->SetMode(gop, mode);
if (status) {
current_video_mode = -2;
@@ -137,17 +136,16 @@ bool init_gop(struct fb_info *ret,
EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
- uefi_call_wrapper(gBS->LocateProtocol, 3, &gop_guid, NULL, (void **)&gop);
+ gBS->LocateProtocol(&gop_guid, NULL, (void **)&gop);
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
UINTN mode_info_size;
- status = uefi_call_wrapper(gop->QueryMode, 4, gop,
- gop->Mode == NULL ? 0 : gop->Mode->Mode,
- &mode_info_size, &mode_info);
+ status = gop->QueryMode(gop, gop->Mode == NULL ? 0 : gop->Mode->Mode,
+ &mode_info_size, &mode_info);
if (status == EFI_NOT_STARTED) {
- status = uefi_call_wrapper(gop->SetMode, 2, gop, 0);
+ status = gop->SetMode(gop, 0);
}
if (status) {
diff --git a/stage23/entry.s3.c b/stage23/entry.s3.c
index c8ef5c39..0fc93670 100644
--- a/stage23/entry.s3.c
+++ b/stage23/entry.s3.c
@@ -67,9 +67,8 @@ void uefi_entry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
EFI_GUID loaded_img_prot_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
EFI_LOADED_IMAGE_PROTOCOL *loaded_image = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3,
- current_handle, &loaded_img_prot_guid,
- (void **)&loaded_image);
+ status = gBS->HandleProtocol(current_handle, &loaded_img_prot_guid,
+ (void **)&loaded_image);
if (status) {
panic("HandleProtocol failure (%x)", status);
diff --git a/stage23/lib/blib.c b/stage23/lib/blib.c
index 6a9e991a..eff945b5 100644
--- a/stage23/lib/blib.c
+++ b/stage23/lib/blib.c
@@ -15,7 +15,8 @@ EFI_BOOT_SERVICES *gBS;
EFI_RUNTIME_SERVICES *gRT;
EFI_HANDLE efi_image_handle;
EFI_MEMORY_DESCRIPTOR *efi_mmap = NULL;
-UINTN efi_mmap_size = 0, efi_desc_size = 0, efi_desc_ver = 0;
+UINTN efi_mmap_size = 0, efi_desc_size = 0;
+UINT32 efi_desc_ver = 0;
#endif
bool verbose = false;
@@ -93,27 +94,24 @@ bool efi_exit_boot_services(void) {
efi_mmap_size = sizeof(tmp_mmap);
UINTN mmap_key = 0;
- uefi_call_wrapper(gBS->GetMemoryMap, 5,
- &efi_mmap_size, tmp_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
+ gBS->GetMemoryMap(&efi_mmap_size, tmp_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
efi_mmap_size += 4096;
- status = uefi_call_wrapper(gBS->FreePool, 1, efi_mmap);
+ status = gBS->FreePool(efi_mmap);
if (status)
goto fail;
- status = uefi_call_wrapper(gBS->AllocatePool, 3,
- EfiLoaderData, efi_mmap_size, (void **)&efi_mmap);
+ status = gBS->AllocatePool(EfiLoaderData, efi_mmap_size, (void **)&efi_mmap);
if (status)
goto fail;
- status = uefi_call_wrapper(gBS->GetMemoryMap, 5,
- &efi_mmap_size, efi_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
+ status = gBS->GetMemoryMap(&efi_mmap_size, efi_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
if (status)
goto fail;
// Be gone, UEFI!
- status = uefi_call_wrapper(gBS->ExitBootServices, 2, efi_image_handle, mmap_key);
+ status = gBS->ExitBootServices(efi_image_handle, mmap_key);
asm volatile ("cli" ::: "memory");
diff --git a/stage23/lib/blib.h b/stage23/lib/blib.h
index bce166c2..a86502c2 100644
--- a/stage23/lib/blib.h
+++ b/stage23/lib/blib.h
@@ -17,7 +17,8 @@ extern EFI_BOOT_SERVICES *gBS;
extern EFI_RUNTIME_SERVICES *gRT;
extern EFI_HANDLE efi_image_handle;
extern EFI_MEMORY_DESCRIPTOR *efi_mmap;
-extern UINTN efi_mmap_size, efi_desc_size, efi_desc_ver;
+extern UINTN efi_mmap_size, efi_desc_size;
+extern UINT32 efi_desc_ver;
extern bool efi_boot_services_exited;
bool efi_exit_boot_services(void);
diff --git a/stage23/lib/panic.s2.c b/stage23/lib/panic.s2.c
index 8b2984bf..1094b99e 100644
--- a/stage23/lib/panic.s2.c
+++ b/stage23/lib/panic.s2.c
@@ -33,7 +33,7 @@ __attribute__((noreturn)) void panic(const char *fmt, ...) {
// release all uefi memory and return to firmware
pmm_release_uefi_mem();
- uefi_call_wrapper(gBS->Exit, 4, efi_image_handle, EFI_ABORTED, 0, NULL);
+ gBS->Exit(efi_image_handle, EFI_ABORTED, 0, NULL);
__builtin_unreachable();
} else {
print("System halted.");
diff --git a/stage23/lib/readline.c b/stage23/lib/readline.c
index bd4a5525..d9e19226 100644
--- a/stage23/lib/readline.c
+++ b/stage23/lib/readline.c
@@ -98,10 +98,9 @@ again:;
UINTN which;
- uefi_call_wrapper(
- gBS->WaitForEvent, 3, 1, (EFI_EVENT[]){ gST->ConIn->WaitForKey }, &which);
+ gBS->WaitForEvent(1, (EFI_EVENT[]){ gST->ConIn->WaitForKey }, &which);
- uefi_call_wrapper(gST->ConIn->ReadKeyStroke, 2, gST->ConIn, &key);
+ gST->ConIn->ReadKeyStroke(gST->ConIn, &key);
int ret = getchar_internal(key.ScanCode, key.UnicodeChar);
@@ -120,20 +119,18 @@ int pit_sleep_and_quit_on_keypress(int seconds) {
events[0] = gST->ConIn->WaitForKey;
- uefi_call_wrapper(
- gBS->CreateEvent, 5, EVT_TIMER, TPL_CALLBACK, NULL, NULL, &events[1]);
+ gBS->CreateEvent(EVT_TIMER, TPL_CALLBACK, NULL, NULL, &events[1]);
- uefi_call_wrapper(
- gBS->SetTimer, 3, events[1], TimerRelative, 10000000 * seconds);
+ gBS->SetTimer(events[1], TimerRelative, 10000000 * seconds);
again:
- uefi_call_wrapper(gBS->WaitForEvent, 3, 2, events, &which);
+ gBS->WaitForEvent(2, events, &which);
if (which == 1) {
return 0;
}
- uefi_call_wrapper(gST->ConIn->ReadKeyStroke, 2, gST->ConIn, &key);
+ gST->ConIn->ReadKeyStroke(gST->ConIn, &key);
int ret = getchar_internal(key.ScanCode, key.UnicodeChar);
diff --git a/stage23/lib/time.c b/stage23/lib/time.c
index 27d5ce13..19e59b52 100644
--- a/stage23/lib/time.c
+++ b/stage23/lib/time.c
@@ -52,7 +52,7 @@ uint64_t time(void) {
#if uefi == 1
uint64_t time(void) {
EFI_TIME time;
- uefi_call_wrapper(gRT->GetTime, 2, &time, NULL);
+ gRT->GetTime(&time, NULL);
return get_unix_epoch(time.Second, time.Minute, time.Hour,
time.Day, time.Month, time.Year);
diff --git a/stage23/mm/pmm.s2.c b/stage23/mm/pmm.s2.c
index 3283c7c5..3c63a12d 100644
--- a/stage23/mm/pmm.s2.c
+++ b/stage23/mm/pmm.s2.c
@@ -261,16 +261,13 @@ void init_memmap(void) {
efi_mmap_size = sizeof(tmp_mmap);
UINTN mmap_key = 0;
- status = uefi_call_wrapper(gBS->GetMemoryMap, 5,
- &efi_mmap_size, tmp_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
+ status = gBS->GetMemoryMap(&efi_mmap_size, tmp_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
efi_mmap_size += 4096;
- status = uefi_call_wrapper(gBS->AllocatePool, 3,
- EfiLoaderData, efi_mmap_size, (void **)&efi_mmap);
+ status = gBS->AllocatePool(EfiLoaderData, efi_mmap_size, (void **)&efi_mmap);
- status = uefi_call_wrapper(gBS->GetMemoryMap, 5,
- &efi_mmap_size, efi_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
+ status = gBS->GetMemoryMap(&efi_mmap_size, efi_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
size_t entry_count = efi_mmap_size / efi_desc_size;
@@ -334,8 +331,8 @@ void init_memmap(void) {
EFI_PHYSICAL_ADDRESS base = memmap[i].base;
- status = uefi_call_wrapper(gBS->AllocatePages, 4,
- AllocateAddress, EfiLoaderData, memmap[i].length / 4096, &base);
+ status = gBS->AllocatePages(AllocateAddress, EfiLoaderData,
+ memmap[i].length / 4096, &base);
if (status)
panic("pmm: AllocatePages failure (%x)", status);
@@ -447,8 +444,7 @@ void pmm_release_uefi_mem(void) {
continue;
}
- status = uefi_call_wrapper(gBS->FreePages, 2,
- memmap[i].base, memmap[i].length / 4096);
+ status = gBS->FreePages(memmap[i].base, memmap[i].length / 4096);
if (status)
panic("pmm: FreePages failure (%x)", status);
diff --git a/stage23/protos/chainload.c b/stage23/protos/chainload.c
index 1e3fb648..acea5558 100644
--- a/stage23/protos/chainload.c
+++ b/stage23/protos/chainload.c
@@ -123,8 +123,7 @@ void chainload(char *config) {
void *_ptr = freadall(image, MEMMAP_RESERVED);
size_t image_size = image->size;
void *ptr;
- status = uefi_call_wrapper(gBS->AllocatePool, 3,
- EfiLoaderData, image_size, &ptr);
+ status = gBS->AllocatePool(EfiLoaderData, image_size, &ptr);
if (status)
panic("chainload: Allocation failure");
memcpy(ptr, _ptr, image_size);
@@ -161,9 +160,9 @@ void chainload(char *config) {
EFI_HANDLE new_handle = 0;
- status = uefi_call_wrapper(gBS->LoadImage, 6, 0, efi_image_handle,
- (EFI_DEVICE_PATH *)memdev_path,
- ptr, image_size, &new_handle);
+ status = gBS->LoadImage(0, efi_image_handle,
+ (EFI_DEVICE_PATH *)memdev_path,
+ ptr, image_size, &new_handle);
if (status) {
panic("chainload: LoadImage failure (%x)", status);
}
@@ -173,17 +172,15 @@ void chainload(char *config) {
EFI_GUID loaded_img_prot_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
EFI_LOADED_IMAGE_PROTOCOL *loader_loaded_image = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3,
- efi_image_handle, &loaded_img_prot_guid,
- (void **)&loader_loaded_image);
+ status = gBS->HandleProtocol(efi_image_handle, &loaded_img_prot_guid,
+ (void **)&loader_loaded_image);
if (status) {
panic("chainload: HandleProtocol failure (%x)", status);
}
EFI_LOADED_IMAGE_PROTOCOL *new_handle_loaded_image = NULL;
- status = uefi_call_wrapper(gBS->HandleProtocol, 3,
- new_handle, &loaded_img_prot_guid,
- (void **)&new_handle_loaded_image);
+ status = gBS->HandleProtocol(new_handle, &loaded_img_prot_guid,
+ (void **)&new_handle_loaded_image);
if (status) {
panic("chainload: HandleProtocol failure (%x)", status);
}
@@ -192,11 +189,9 @@ void chainload(char *config) {
UINTN exit_data_size = 0;
CHAR16 *exit_data = NULL;
- EFI_STATUS exit_status = uefi_call_wrapper(gBS->StartImage, 3,
- new_handle, &exit_data_size, &exit_data);
+ EFI_STATUS exit_status = gBS->StartImage(new_handle, &exit_data_size, &exit_data);
- status = uefi_call_wrapper(gBS->Exit, 4,
- efi_image_handle, exit_status, exit_data_size, exit_data);
+ status = gBS->Exit(efi_image_handle, exit_status, exit_data_size, exit_data);
if (status) {
panic("chainload: Exit failure (%x)", status);
}
