From caebd91505fa9e778ccaba6bd6c8f1d19723602a Mon Sep 17 00:00:00 2001 From: jljusten Date: Tue, 12 Apr 2011 15:07:34 +0000 Subject: [PATCH] OptionRomPkg: Add BltLib definition This library is intended to make it easy to perform blt operations on a GOP framebuffer without using the GOP Blt function. There can be two main forms of implementations of this library: 1) A library which interfaces directly with a framebuffer, and has no dependence on the GOP protocol. Once configured with the framebuffer parameters, it can operate directly on the framebuffer. 2) A library which interfaces with the GOP protocol. In this case this library provides a convenience layer and allows blt code to look cleaner. Potential uses for this library: * Video driver with a framebuffer will not need to implement GOP Blt function itself. Instead it can utilize an implementation of this library as described in #1 above. * OS Loader code which would like to easily use the GOP framebuffer after Exit Boot Services. This would use a library instance as described in #1 above. * Any other code which would like to call GOP blt, but simplify the code with the more convenient functions provided by this library interface. (Using a library as described in #2 above.) git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11520 6f19259b-4bc3-4df7-8a09-765794883524 --- OptionRomPkg/Include/Library/BltLib.h | 259 ++++++++++++++++++++++++++ OptionRomPkg/OptionRomPkg.dec | 9 + 2 files changed, 268 insertions(+) create mode 100644 OptionRomPkg/Include/Library/BltLib.h diff --git a/OptionRomPkg/Include/Library/BltLib.h b/OptionRomPkg/Include/Library/BltLib.h new file mode 100644 index 0000000000..9e519b17cd --- /dev/null +++ b/OptionRomPkg/Include/Library/BltLib.h @@ -0,0 +1,259 @@ +/** @file + Library for performing video blt operations + + Copyright (c) 2009 - 2011, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __BLT_LIB__ +#define __BLT_LIB__ + +#include + + +/** + Configure the BltLib for a frame-buffer + + @param[in] FrameBuffer Pointer to the start of the frame buffer + @param[in] FrameBufferInfo Describes the frame buffer characteristics + + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibConfigure ( + IN VOID *FrameBuffer, + IN EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *FrameBufferInfo + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt operation. + + @param[in,out] BltBuffer - The data to transfer to screen + @param[in] BltOperation - The operation to perform + @param[in] SourceX - The X coordinate of the source for BltOperation + @param[in] SourceY - The Y coordinate of the source for BltOperation + @param[in] DestinationX - The X coordinate of the destination for BltOperation + @param[in] DestinationY - The Y coordinate of the destination for BltOperation + @param[in] Width - The width of a rectangle in the blt rectangle in pixels + @param[in] Height - The height of a rectangle in the blt rectangle in pixels + @param[in] Delta - Not used for EfiBltVideoFill and EfiBltVideoToVideo operation. + If a Delta of 0 is used, the entire BltBuffer will be operated on. + If a subrectangle of the BltBuffer is used, then Delta represents + the number of bytes in a row of the BltBuffer. + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibGopBlt ( + IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Video Fill. + + @param[in] Color Color to fill the region with + @param[in] DestinationX X location to start fill operation + @param[in] DestinationY Y location to start fill operation + @param[in] Width Width (in pixels) to fill + @param[in] Height Height to fill + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibVideoFill ( + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Color, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Video to Buffer operation. + + @param[out] BltBuffer Output buffer for pixel color data + @param[in] SourceX X location within video + @param[in] SourceY Y location within video + @param[in] Width Width (in pixels) + @param[in] Height Height + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibVideoToBltBuffer ( + OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN Width, + IN UINTN Height + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Video to Buffer operation + with extended parameters. + + @param[out] BltBuffer Output buffer for pixel color data + @param[in] SourceX X location within video + @param[in] SourceY Y location within video + @param[in] DestinationX X location within BltBuffer + @param[in] DestinationY Y location within BltBuffer + @param[in] Width Width (in pixels) + @param[in] Height Height + @param[in] Delta Number of bytes in a row of BltBuffer + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibVideoToBltBufferEx ( + OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Buffer to Video operation. + + @param[in] BltBuffer Output buffer for pixel color data + @param[in] DestinationX X location within video + @param[in] DestinationY Y location within video + @param[in] Width Width (in pixels) + @param[in] Height Height + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibBufferToVideo ( + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Buffer to Video operation + with extended parameters. + + @param[in] BltBuffer Output buffer for pixel color data + @param[in] SourceX X location within BltBuffer + @param[in] SourceY Y location within BltBuffer + @param[in] DestinationX X location within video + @param[in] DestinationY Y location within video + @param[in] Width Width (in pixels) + @param[in] Height Height + @param[in] Delta Number of bytes in a row of BltBuffer + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibBufferToVideoEx ( + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta + ); + + +/** + Performs a UEFI Graphics Output Protocol Blt Video to Video operation + + @param[in] SourceX X location within video + @param[in] SourceY Y location within video + @param[in] DestinationX X location within video + @param[in] DestinationY Y location within video + @param[in] Width Width (in pixels) + @param[in] Height Height + + @retval EFI_DEVICE_ERROR - A hardware error occured + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - Blt operation success + +**/ +EFI_STATUS +EFIAPI +BltLibVideoToVideo ( + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height + ); + + +/** + Returns the sizes related to the video device + + @param[out] Width Width (in pixels) + @param[out] Height Height (in pixels) + + @retval EFI_INVALID_PARAMETER - Invalid parameter passed in + @retval EFI_SUCCESS - The sizes were returned + +**/ +EFI_STATUS +EFIAPI +BltLibGetSizes ( + OUT UINTN *Width, OPTIONAL + OUT UINTN *Height OPTIONAL + ); + +#endif + diff --git a/OptionRomPkg/OptionRomPkg.dec b/OptionRomPkg/OptionRomPkg.dec index b9eb62048b..db61bbec74 100644 --- a/OptionRomPkg/OptionRomPkg.dec +++ b/OptionRomPkg/OptionRomPkg.dec @@ -24,6 +24,15 @@ PACKAGE_GUID = AA3865E8-7F30-4f59-8696-99F560101852 PACKAGE_VERSION = 0.1 +[Includes.common] + Include + +[LibraryClasses] + ## @libraryclass Provides an interface for performing UEFI Graphics + ## Output Protocol Video blt operations + ## + BltLib|Include/Library/BltLib.h + [PcdsFeatureFlag] gOptionRomPkgTokenSpaceGuid.PcdSupportScsiPassThru|TRUE|BOOLEAN|0x00010001 gOptionRomPkgTokenSpaceGuid.PcdSupportExtScsiPassThru|TRUE|BOOLEAN|0x00010002