1*1370a723SSascha Wildner /** @file 2*1370a723SSascha Wildner UGA Draw protocol from the EFI 1.10 specification. 3*1370a723SSascha Wildner 4*1370a723SSascha Wildner Abstraction of a very simple graphics device. 5*1370a723SSascha Wildner 6*1370a723SSascha Wildner Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 7*1370a723SSascha Wildner SPDX-License-Identifier: BSD-2-Clause-Patent 8*1370a723SSascha Wildner 9*1370a723SSascha Wildner **/ 10*1370a723SSascha Wildner 11*1370a723SSascha Wildner #ifndef __UGA_DRAW_H__ 12*1370a723SSascha Wildner #define __UGA_DRAW_H__ 13*1370a723SSascha Wildner 14*1370a723SSascha Wildner #define EFI_UGA_DRAW_PROTOCOL_GUID \ 15*1370a723SSascha Wildner { \ 16*1370a723SSascha Wildner 0x982c298b, 0xf4fa, 0x41cb, {0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \ 17*1370a723SSascha Wildner } 18*1370a723SSascha Wildner 19*1370a723SSascha Wildner typedef struct _EFI_UGA_DRAW_PROTOCOL EFI_UGA_DRAW_PROTOCOL; 20*1370a723SSascha Wildner 21*1370a723SSascha Wildner /** 22*1370a723SSascha Wildner Return the current video mode information. 23*1370a723SSascha Wildner 24*1370a723SSascha Wildner @param This The EFI_UGA_DRAW_PROTOCOL instance. 25*1370a723SSascha Wildner @param HorizontalResolution The size of video screen in pixels in the X dimension. 26*1370a723SSascha Wildner @param VerticalResolution The size of video screen in pixels in the Y dimension. 27*1370a723SSascha Wildner @param ColorDepth Number of bits per pixel, currently defined to be 32. 28*1370a723SSascha Wildner @param RefreshRate The refresh rate of the monitor in Hertz. 29*1370a723SSascha Wildner 30*1370a723SSascha Wildner @retval EFI_SUCCESS Mode information returned. 31*1370a723SSascha Wildner @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () 32*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One of the input args was NULL. 33*1370a723SSascha Wildner 34*1370a723SSascha Wildner **/ 35*1370a723SSascha Wildner typedef 36*1370a723SSascha Wildner EFI_STATUS 37*1370a723SSascha Wildner (EFIAPI *EFI_UGA_DRAW_PROTOCOL_GET_MODE)( 38*1370a723SSascha Wildner IN EFI_UGA_DRAW_PROTOCOL *This, 39*1370a723SSascha Wildner OUT UINT32 *HorizontalResolution, 40*1370a723SSascha Wildner OUT UINT32 *VerticalResolution, 41*1370a723SSascha Wildner OUT UINT32 *ColorDepth, 42*1370a723SSascha Wildner OUT UINT32 *RefreshRate 43*1370a723SSascha Wildner ); 44*1370a723SSascha Wildner 45*1370a723SSascha Wildner /** 46*1370a723SSascha Wildner Set the current video mode information. 47*1370a723SSascha Wildner 48*1370a723SSascha Wildner @param This The EFI_UGA_DRAW_PROTOCOL instance. 49*1370a723SSascha Wildner @param HorizontalResolution The size of video screen in pixels in the X dimension. 50*1370a723SSascha Wildner @param VerticalResolution The size of video screen in pixels in the Y dimension. 51*1370a723SSascha Wildner @param ColorDepth Number of bits per pixel, currently defined to be 32. 52*1370a723SSascha Wildner @param RefreshRate The refresh rate of the monitor in Hertz. 53*1370a723SSascha Wildner 54*1370a723SSascha Wildner @retval EFI_SUCCESS Mode information returned. 55*1370a723SSascha Wildner @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () 56*1370a723SSascha Wildner 57*1370a723SSascha Wildner **/ 58*1370a723SSascha Wildner typedef 59*1370a723SSascha Wildner EFI_STATUS 60*1370a723SSascha Wildner (EFIAPI *EFI_UGA_DRAW_PROTOCOL_SET_MODE)( 61*1370a723SSascha Wildner IN EFI_UGA_DRAW_PROTOCOL *This, 62*1370a723SSascha Wildner IN UINT32 HorizontalResolution, 63*1370a723SSascha Wildner IN UINT32 VerticalResolution, 64*1370a723SSascha Wildner IN UINT32 ColorDepth, 65*1370a723SSascha Wildner IN UINT32 RefreshRate 66*1370a723SSascha Wildner ); 67*1370a723SSascha Wildner 68*1370a723SSascha Wildner typedef struct { 69*1370a723SSascha Wildner UINT8 Blue; 70*1370a723SSascha Wildner UINT8 Green; 71*1370a723SSascha Wildner UINT8 Red; 72*1370a723SSascha Wildner UINT8 Reserved; 73*1370a723SSascha Wildner } EFI_UGA_PIXEL; 74*1370a723SSascha Wildner 75*1370a723SSascha Wildner typedef union { 76*1370a723SSascha Wildner EFI_UGA_PIXEL Pixel; 77*1370a723SSascha Wildner UINT32 Raw; 78*1370a723SSascha Wildner } EFI_UGA_PIXEL_UNION; 79*1370a723SSascha Wildner 80*1370a723SSascha Wildner /// 81*1370a723SSascha Wildner /// Enumration value for actions of Blt operations. 82*1370a723SSascha Wildner /// 83*1370a723SSascha Wildner typedef enum { 84*1370a723SSascha Wildner EfiUgaVideoFill, ///< Write data from the BltBuffer pixel (SourceX, SourceY) 85*1370a723SSascha Wildner ///< directly to every pixel of the video display rectangle 86*1370a723SSascha Wildner ///< (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 87*1370a723SSascha Wildner ///< Only one pixel will be used from the BltBuffer. Delta is NOT used. 88*1370a723SSascha Wildner 89*1370a723SSascha Wildner EfiUgaVideoToBltBuffer, ///< Read data from the video display rectangle 90*1370a723SSascha Wildner ///< (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in 91*1370a723SSascha Wildner ///< the BltBuffer rectangle (DestinationX, DestinationY ) 92*1370a723SSascha Wildner ///< (DestinationX + Width, DestinationY + Height). If DestinationX or 93*1370a723SSascha Wildner ///< DestinationY is not zero then Delta must be set to the length in bytes 94*1370a723SSascha Wildner ///< of a row in the BltBuffer. 95*1370a723SSascha Wildner 96*1370a723SSascha Wildner EfiUgaBltBufferToVideo, ///< Write data from the BltBuffer rectangle 97*1370a723SSascha Wildner ///< (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the 98*1370a723SSascha Wildner ///< video display rectangle (DestinationX, DestinationY) 99*1370a723SSascha Wildner ///< (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is 100*1370a723SSascha Wildner ///< not zero then Delta must be set to the length in bytes of a row in the 101*1370a723SSascha Wildner ///< BltBuffer. 102*1370a723SSascha Wildner 103*1370a723SSascha Wildner EfiUgaVideoToVideo, ///< Copy from the video display rectangle (SourceX, SourceY) 104*1370a723SSascha Wildner ///< (SourceX + Width, SourceY + Height) .to the video display rectangle 105*1370a723SSascha Wildner ///< (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). 106*1370a723SSascha Wildner ///< The BltBuffer and Delta are not used in this mode. 107*1370a723SSascha Wildner 108*1370a723SSascha Wildner EfiUgaBltMax ///< Maxmimum value for enumration value of Blt operation. If a Blt operation 109*1370a723SSascha Wildner ///< larger or equal to this enumration value, it is invalid. 110*1370a723SSascha Wildner } EFI_UGA_BLT_OPERATION; 111*1370a723SSascha Wildner 112*1370a723SSascha Wildner /** 113*1370a723SSascha Wildner Blt a rectangle of pixels on the graphics screen. 114*1370a723SSascha Wildner 115*1370a723SSascha Wildner @param[in] This - Protocol instance pointer. 116*1370a723SSascha Wildner @param[in] BltBuffer - Buffer containing data to blit into video buffer. This 117*1370a723SSascha Wildner buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL) 118*1370a723SSascha Wildner @param[in] BltOperation - Operation to perform on BlitBuffer and video memory 119*1370a723SSascha Wildner @param[in] SourceX - X coordinate of source for the BltBuffer. 120*1370a723SSascha Wildner @param[in] SourceY - Y coordinate of source for the BltBuffer. 121*1370a723SSascha Wildner @param[in] DestinationX - X coordinate of destination for the BltBuffer. 122*1370a723SSascha Wildner @param[in] DestinationY - Y coordinate of destination for the BltBuffer. 123*1370a723SSascha Wildner @param[in] Width - Width of rectangle in BltBuffer in pixels. 124*1370a723SSascha Wildner @param[in] Height - Hight of rectangle in BltBuffer in pixels. 125*1370a723SSascha Wildner @param[in] Delta - OPTIONAL 126*1370a723SSascha Wildner 127*1370a723SSascha Wildner @retval EFI_SUCCESS - The Blt operation completed. 128*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER - BltOperation is not valid. 129*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR - A hardware error occurred writting to the video buffer. 130*1370a723SSascha Wildner 131*1370a723SSascha Wildner **/ 132*1370a723SSascha Wildner typedef 133*1370a723SSascha Wildner EFI_STATUS 134*1370a723SSascha Wildner (EFIAPI *EFI_UGA_DRAW_PROTOCOL_BLT)( 135*1370a723SSascha Wildner IN EFI_UGA_DRAW_PROTOCOL * This, 136*1370a723SSascha Wildner IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, 137*1370a723SSascha Wildner IN EFI_UGA_BLT_OPERATION BltOperation, 138*1370a723SSascha Wildner IN UINTN SourceX, 139*1370a723SSascha Wildner IN UINTN SourceY, 140*1370a723SSascha Wildner IN UINTN DestinationX, 141*1370a723SSascha Wildner IN UINTN DestinationY, 142*1370a723SSascha Wildner IN UINTN Width, 143*1370a723SSascha Wildner IN UINTN Height, 144*1370a723SSascha Wildner IN UINTN Delta OPTIONAL 145*1370a723SSascha Wildner ); 146*1370a723SSascha Wildner 147*1370a723SSascha Wildner /// 148*1370a723SSascha Wildner /// This protocol provides a basic abstraction to set video modes and 149*1370a723SSascha Wildner /// copy pixels to and from the graphics controller's frame buffer. 150*1370a723SSascha Wildner /// 151*1370a723SSascha Wildner struct _EFI_UGA_DRAW_PROTOCOL { 152*1370a723SSascha Wildner EFI_UGA_DRAW_PROTOCOL_GET_MODE GetMode; 153*1370a723SSascha Wildner EFI_UGA_DRAW_PROTOCOL_SET_MODE SetMode; 154*1370a723SSascha Wildner EFI_UGA_DRAW_PROTOCOL_BLT Blt; 155*1370a723SSascha Wildner }; 156*1370a723SSascha Wildner 157*1370a723SSascha Wildner extern EFI_GUID gEfiUgaDrawProtocolGuid; 158*1370a723SSascha Wildner 159*1370a723SSascha Wildner #endif 160