]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Protocol/GraphicsOutput.h
Reviewed the code comments in the Include/Protocol directory for typos, grammar issue...
[mirror_edk2.git] / MdePkg / Include / Protocol / GraphicsOutput.h
1 /** @file
2 Graphics Output Protocol from the UEFI 2.0 specification.
3
4 Abstraction of a very simple graphics device.
5
6 Copyright (c) 2006 - 2008, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef __GRAPHICS_OUTPUT_H__
18 #define __GRAPHICS_OUTPUT_H__
19
20 #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
21 { \
22 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
23 }
24
25 typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
26
27 typedef struct {
28 UINT32 RedMask;
29 UINT32 GreenMask;
30 UINT32 BlueMask;
31 UINT32 ReservedMask;
32 } EFI_PIXEL_BITMASK;
33
34 typedef enum {
35 ///
36 /// A pixel is 32-bits. Byte zero represents red, byte one represents green,
37 /// byte two represents blue, and byte three is reserved. This is the definition
38 /// for the physical frame buffer. The byte values for the red, green, and blue
39 /// components represent the color intensity. This color intensity value range
40 /// from a minimum intensity of 0 to maximum intensity of 255.
41 ///
42 PixelRedGreenBlueReserved8BitPerColor,
43 ///
44 /// A pixel is 32-bits. Byte zero represents blue, byte one represents green,
45 /// byte two represents red, and byte three is reserved. This is the definition
46 /// for the physical frame buffer. The byte values for the red, green, and blue
47 /// components represent the color intensity. This color intensity value range
48 /// from a minimum intensity of 0 to maximum intensity of 255.
49 ///
50 PixelBlueGreenRedReserved8BitPerColor,
51 ///
52 /// The Pixel definition of the physical frame buffer.
53 ///
54 PixelBitMask,
55 ///
56 /// This mode does not support a physical frame buffer.
57 ///
58 PixelBltOnly,
59 ///
60 /// Valid EFI_GRAPHICS_PIXEL_FORMAT enum values are less than this value.
61 ///
62 PixelFormatMax
63 } EFI_GRAPHICS_PIXEL_FORMAT;
64
65 typedef struct {
66 ///
67 /// The version of this data structure. A value of zero represents the
68 /// EFI_GRAPHICS_OUTPUT_MODE_INFORMATION structure as defined in this specification.
69 ///
70 UINT32 Version;
71 ///
72 /// The size of video screen in pixels in the X dimension.
73 ///
74 UINT32 HorizontalResolution;
75 ///
76 /// The size of video screen in pixels in the Y dimension.
77 ///
78 UINT32 VerticalResolution;
79 ///
80 /// Enumeration that defines the physical format of the pixel. A value of PixelBltOnly
81 /// implies that a linear frame buffer is not available for this mode.
82 ///
83 EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
84 ///
85 /// This bit-mask is only valid if PixelFormat is set to PixelPixelBitMask.
86 /// A bit being set defines what bits are used for what purpose such as Red, Green, Blue, or Reserved.
87 ///
88 EFI_PIXEL_BITMASK PixelInformation;
89 ///
90 /// Defines the number of pixel elements per video memory line.
91 ///
92 UINT32 PixelsPerScanLine;
93 } EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
94
95 /**
96 Returns information for an available graphics mode that the graphics device
97 and the set of active video output devices supports.
98
99 @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
100 @param ModeNumber The mode number to return information on.
101 @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
102 @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
103
104 @retval EFI_SUCCESS Mode information returned.
105 @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
106 @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
107 @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
108 @retval EFI_INVALID_PARAMETER One of the input args was NULL.
109
110 **/
111 typedef
112 EFI_STATUS
113 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE)(
114 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
115 IN UINT32 ModeNumber,
116 OUT UINTN *SizeOfInfo,
117 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
118 );
119
120 /**
121 Set the video device into the specified mode and clears the visible portions of
122 the output display to black.
123
124 @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
125 @param ModeNumber Abstraction that defines the current video mode.
126
127 @retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected.
128 @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
129 @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
130
131 **/
132 typedef
133 EFI_STATUS
134 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE)(
135 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
136 IN UINT32 ModeNumber
137 );
138
139 typedef struct {
140 UINT8 Blue;
141 UINT8 Green;
142 UINT8 Red;
143 UINT8 Reserved;
144 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
145
146 typedef union {
147 EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
148 UINT32 Raw;
149 } EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
150
151 ///
152 /// actions for BltOperations
153 ///
154 typedef enum {
155 ///
156 /// Write data from the BltBuffer pixel (SourceX, SourceY)
157 /// directly to every pixel of the video display rectangle
158 /// (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
159 /// Only one pixel will be used from the BltBuffer. Delta is NOT used.
160 ///
161 EfiBltVideoFill,
162
163 ///
164 /// Read data from the video display rectangle
165 /// (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
166 /// the BltBuffer rectangle (DestinationX, DestinationY )
167 /// (DestinationX + Width, DestinationY + Height). If DestinationX or
168 /// DestinationY is not zero then Delta must be set to the length in bytes
169 /// of a row in the BltBuffer.
170 ///
171 EfiBltVideoToBltBuffer,
172
173 ///
174 /// Write data from the BltBuffer rectangle
175 /// (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
176 /// video display rectangle (DestinationX, DestinationY)
177 /// (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
178 /// not zero then Delta must be set to the length in bytes of a row in the
179 /// BltBuffer.
180 ///
181 EfiBltBufferToVideo,
182
183 ///
184 /// Copy from the video display rectangle (SourceX, SourceY)
185 /// (SourceX + Width, SourceY + Height) .to the video display rectangle
186 /// (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
187 /// The BltBuffer and Delta are not used in this mode.
188 /// EfiBltVideoToVideo,
189 ///
190 EfiBltVideoToVideo,
191
192 EfiGraphicsOutputBltOperationMax
193 } EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
194
195 /**
196 Blt a rectangle of pixels on the graphics screen. Blt stands for BLock Transfer.
197
198 @param This Protocol instance pointer.
199 @param BltBuffer Buffer containing data to blit into video buffer. This
200 buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
201 @param BltOperation Operation to perform on BlitBuffer and video memory
202 @param SourceX X coordinate of source for the BltBuffer.
203 @param SourceY Y coordinate of source for the BltBuffer.
204 @param DestinationX X coordinate of destination for the BltBuffer.
205 @param DestinationY Y coordinate of destination for the BltBuffer.
206 @param Width Width of rectangle in BltBuffer in pixels.
207 @param Height Hight of rectangle in BltBuffer in pixels.
208 @param Delta OPTIONAL
209
210 @retval EFI_SUCCESS The Blt operation completed.
211 @retval EFI_INVALID_PARAMETER BltOperation is not valid.
212 @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
213
214 **/
215 typedef
216 EFI_STATUS
217 (EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT)(
218 IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
219 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
220 IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
221 IN UINTN SourceX,
222 IN UINTN SourceY,
223 IN UINTN DestinationX,
224 IN UINTN DestinationY,
225 IN UINTN Width,
226 IN UINTN Height,
227 IN UINTN Delta OPTIONAL
228 );
229
230 typedef struct {
231 ///
232 /// The number of modes supported by QueryMode() and SetMode().
233 ///
234 UINT32 MaxMode;
235 ///
236 /// Current Mode of the graphics device. Valid mode numbers are 0 to MaxMode -1.
237 ///
238 UINT32 Mode;
239 ///
240 /// Pointer to read-only EFI_GRAPHICS_OUTPUT_MODE_INFORMATION data.
241 ///
242 EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
243 ///
244 /// Size of Info structure in bytes.
245 ///
246 UINTN SizeOfInfo;
247 ///
248 /// Base address of graphics linear frame buffer.
249 /// Offset zero in FrameBufferBase represents the upper left pixel of the display.
250 ///
251 EFI_PHYSICAL_ADDRESS FrameBufferBase;
252 ///
253 /// Size of the frame buffer represented by FrameBufferBase in bytes.
254 ///
255 UINTN FrameBufferSize;
256 } EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
257
258 ///
259 /// Provides a basic abstraction to set video modes and copy pixels to and from
260 /// the graphics controller's frame buffer. The linear address of the hardware
261 /// frame buffer is also exposed so software can write directly to the video hardware.
262 ///
263 struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
264 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
265 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
266 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
267 ///
268 /// Pointer to EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE data.
269 ///
270 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
271 };
272
273 extern EFI_GUID gEfiGraphicsOutputProtocolGuid;
274
275 #endif