#! /bin/sh /usr/share/dpatch/dpatch-run ## 43_libeg_uefi_call_wrapper.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Wrap EFI API calls with uefi_call_wrapper(), mandatory for GNU EFI ## DP: especially on x86_64. @DPATCH@ diff -urNad refit-0.12~/libeg/image.c refit-0.12/libeg/image.c --- refit-0.12~/libeg/image.c 2008-10-23 18:35:42.000000000 +0200 +++ refit-0.12/libeg/image.c 2008-10-23 18:36:02.603613917 +0200 @@ -108,13 +108,13 @@ UINTN BufferSize; UINT8 *Buffer; - Status = BaseDir->Open(BaseDir, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); + Status = uefi_call_wrapper(BaseDir->Open, 5, BaseDir, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); if (EFI_ERROR(Status)) return Status; FileInfo = LibFileInfo(FileHandle); if (FileInfo == NULL) { - FileHandle->Close(FileHandle); + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); return EFI_NOT_FOUND; } ReadSize = FileInfo->FileSize; @@ -125,12 +125,12 @@ BufferSize = (UINTN)ReadSize; // was limited to 1 GB above, so this is safe Buffer = (UINT8 *) AllocatePool(BufferSize); if (Buffer == NULL) { - FileHandle->Close(FileHandle); + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); return EFI_OUT_OF_RESOURCES; } - Status = FileHandle->Read(FileHandle, &BufferSize, Buffer); - FileHandle->Close(FileHandle); + Status = uefi_call_wrapper(FileHandle->Read, 3, FileHandle, &BufferSize, Buffer); + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); if (EFI_ERROR(Status)) { FreePool(Buffer); return Status; @@ -172,14 +172,14 @@ return Status; } - Status = BaseDir->Open(BaseDir, &FileHandle, FileName, + Status = uefi_call_wrapper(BaseDir->Open, 5, BaseDir, &FileHandle, FileName, EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE, 0); if (EFI_ERROR(Status)) return Status; BufferSize = FileDataLength; - Status = FileHandle->Write(FileHandle, &BufferSize, FileData); - FileHandle->Close(FileHandle); + Status = uefi_call_wrapper(FileHandle->Write, 3, FileHandle, &BufferSize, FileData); + uefi_call_wrapper(FileHandle->Close, 1, FileHandle); return Status; } diff -urNad refit-0.12~/libeg/screen.c refit-0.12/libeg/screen.c --- refit-0.12~/libeg/screen.c 2008-10-23 18:35:42.000000000 +0200 +++ refit-0.12/libeg/screen.c 2008-10-23 18:36:47.797628379 +0200 @@ -37,7 +37,7 @@ #include "libegint.h" #include -#include +/* #include */ #include // Console defines and variables @@ -84,7 +84,7 @@ egScreenHeight = GraphicsOutput->Mode->Info->VerticalResolution; egHasGraphics = TRUE; } else if (UgaDraw != NULL) { - Status = UgaDraw->GetMode(UgaDraw, &UGAWidth, &UGAHeight, &UGADepth, &UGARefreshRate); + Status = uefi_call_wrapper(UgaDraw->GetMode, 5, UgaDraw, &UGAWidth, &UGAHeight, &UGADepth, &UGARefreshRate); if (EFI_ERROR(Status)) { UgaDraw = NULL; // graphics not available } else { @@ -130,7 +130,7 @@ EFI_CONSOLE_CONTROL_SCREEN_MODE CurrentMode; if (ConsoleControl != NULL) { - ConsoleControl->GetMode(ConsoleControl, &CurrentMode, NULL, NULL); + uefi_call_wrapper(ConsoleControl->GetMode, 4, ConsoleControl, &CurrentMode, NULL, NULL); return (CurrentMode == EfiConsoleControlScreenGraphics) ? TRUE : FALSE; } @@ -143,12 +143,12 @@ EFI_CONSOLE_CONTROL_SCREEN_MODE NewMode; if (ConsoleControl != NULL) { - ConsoleControl->GetMode(ConsoleControl, &CurrentMode, NULL, NULL); + uefi_call_wrapper(ConsoleControl->GetMode, 4, ConsoleControl, &CurrentMode, NULL, NULL); NewMode = Enable ? EfiConsoleControlScreenGraphics : EfiConsoleControlScreenText; if (CurrentMode != NewMode) - ConsoleControl->SetMode(ConsoleControl, NewMode); + uefi_call_wrapper(ConsoleControl->SetMode, 2, ConsoleControl, NewMode); } } @@ -172,10 +172,10 @@ // EFI_GRAPHICS_OUTPUT_BLT_PIXEL and EFI_UGA_PIXEL have the same // layout, and the header from TianoCore actually defines them // to be the same type. - GraphicsOutput->Blt(GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)&FillColor, EfiBltVideoFill, + uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)&FillColor, EfiBltVideoFill, 0, 0, 0, 0, egScreenWidth, egScreenHeight, 0); } else if (UgaDraw != NULL) { - UgaDraw->Blt(UgaDraw, &FillColor, EfiUgaVideoFill, + uefi_call_wrapper(UgaDraw->Blt, 10, UgaDraw, &FillColor, EfiUgaVideoFill, 0, 0, 0, 0, egScreenWidth, egScreenHeight, 0); } } @@ -191,10 +191,10 @@ } if (GraphicsOutput != NULL) { - GraphicsOutput->Blt(GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltBufferToVideo, + uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltBufferToVideo, 0, 0, ScreenPosX, ScreenPosY, Image->Width, Image->Height, 0); } else if (UgaDraw != NULL) { - UgaDraw->Blt(UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaBltBufferToVideo, + uefi_call_wrapper(UgaDraw->Blt, 10, UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaBltBufferToVideo, 0, 0, ScreenPosX, ScreenPosY, Image->Width, Image->Height, 0); } } @@ -217,10 +217,10 @@ } if (GraphicsOutput != NULL) { - GraphicsOutput->Blt(GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltBufferToVideo, + uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltBufferToVideo, AreaPosX, AreaPosY, ScreenPosX, ScreenPosY, AreaWidth, AreaHeight, Image->Width * 4); } else if (UgaDraw != NULL) { - UgaDraw->Blt(UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaBltBufferToVideo, + uefi_call_wrapper(UgaDraw->Blt, 10, UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaBltBufferToVideo, AreaPosX, AreaPosY, ScreenPosX, ScreenPosY, AreaWidth, AreaHeight, Image->Width * 4); } } @@ -249,10 +249,10 @@ // get full screen image if (GraphicsOutput != NULL) { - GraphicsOutput->Blt(GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltVideoToBltBuffer, + uefi_call_wrapper(GraphicsOutput->Blt, 10, GraphicsOutput, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)Image->PixelData, EfiBltVideoToBltBuffer, 0, 0, 0, 0, Image->Width, Image->Height, 0); } else if (UgaDraw != NULL) { - UgaDraw->Blt(UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaVideoToBltBuffer, + uefi_call_wrapper(UgaDraw->Blt, 10, UgaDraw, (EFI_UGA_PIXEL *)Image->PixelData, EfiUgaVideoToBltBuffer, 0, 0, 0, 0, Image->Width, Image->Height, 0); } @@ -277,7 +277,7 @@ // DEBUG: switch to text mode bailout_wait: egSetGraphicsModeEnabled(FALSE); - BS->WaitForEvent(1, &ST->ConIn->WaitForKey, &Index); + uefi_call_wrapper(BS->WaitForEvent, 3, 1, &ST->ConIn->WaitForKey, &Index); } /* EOF */