ReactOS 0.4.16-dev-2613-g9533ad7
uefivid.c
Go to the documentation of this file.
1/*
2 * PROJECT: FreeLoader UEFI Support
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Video output
5 * COPYRIGHT: Copyright 2022 Justin Miller <justinmiller100@gmail.com>
6 */
7
8#include <uefildr.h>
9#include "../vidfb.h"
10
11#include <debug.h>
13
14/* GLOBALS ********************************************************************/
15
20
24
25typedef struct _UEFI_BGRT_LOGO
26{
42
44
45#define BMP_SIGNATURE 0x4D42
46#define BI_RGB 0
47
48#define BGRT_STATUS_ORIENTATION_MASK (0x3 << 1)
49#define BGRT_ORIENTATION_0 0
50#define BGRT_ORIENTATION_90 1
51#define BGRT_ORIENTATION_180 2
52#define BGRT_ORIENTATION_270 3
53
54#define LOWEST_SUPPORTED_RES 1
55
56#include <pshpack1.h>
57typedef struct _BMP_FILE_HEADER
58{
65
66typedef struct _BMP_INFO_HEADER
67{
80#include <poppack.h>
81
84
85/* FUNCTIONS ******************************************************************/
86
87/* EFI 1.x */
88#ifdef EFI_UGA_DRAW_PROTOCOL_GUID
89
90/* NOTE: EFI UGA does not support any other format than 32-bit xRGB, and
91 * no direct access to the underlying hardware framebuffer is offered */
92C_ASSERT(sizeof(EFI_UGA_PIXEL) == sizeof(ULONG));
93
94#endif /* EFI */
95
96/* UEFI support, see efi/GraphicsOutput.h */
97#ifdef EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID // __GRAPHICS_OUTPUT_H__
98
100
105static EFI_PIXEL_BITMASK EfiPixelMasks[] =
106{ /* Red, Green, Blue, Reserved */
107 {0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000}, // PixelRedGreenBlueReserved8BitPerColor
108 {0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000}, // PixelBlueGreenRedReserved8BitPerColor
109 {0, 0, 0, 0} // PixelBitMask, PixelBltOnly, ...
110};
111
112#endif /* UEFI */
113
117 _In_ USHORT BitsPerPixel,
118 _Out_ PULONG RowStride)
119{
120 ULONGLONG BitsPerRow, Stride;
121
122 BitsPerRow = (ULONGLONG)Width * BitsPerPixel;
123 Stride = ROUND_UP(BitsPerRow, 32) / 8;
124 if (Stride > MAXULONG)
125 return FALSE;
126
127 *RowStride = (ULONG)Stride;
128 return TRUE;
129}
130
131static
132VOID
134 _In_ ULONG BitmapSize,
135 _In_ ULONG ScreenSize,
138 _Out_ PULONG DrawSize)
139{
140 if (BitmapSize >= ScreenSize)
141 {
142 *SourceOffset = (BitmapSize - ScreenSize) / 2;
144 *DrawSize = ScreenSize;
145 return;
146 }
147
148 *SourceOffset = 0;
149 *DrawSize = BitmapSize;
150 *DestinationOffset = (ScreenSize - BitmapSize) / 2;
151}
152
153static
154VOID
156 _In_ ULONG BitmapSize,
157 _In_ ULONG ScreenSize,
158 _In_ ULONG RequestedOffset,
161 _Out_ PULONG DrawSize)
162{
163 *SourceOffset = 0;
164 *DestinationOffset = RequestedOffset;
165
166 if (RequestedOffset >= ScreenSize)
167 {
168 *DrawSize = 0;
169 return;
170 }
171
172 *DrawSize = min(BitmapSize, ScreenSize - RequestedOffset);
173}
174
175static
176VOID
181{
182 if ((Logo->Orientation == BGRT_ORIENTATION_90) ||
183 (Logo->Orientation == BGRT_ORIENTATION_270))
184 {
185 *Width = Logo->Height;
186 *Height = Logo->Width;
187 return;
188 }
189
190 *Width = Logo->Width;
191 *Height = Logo->Height;
192}
193
194static
195VOID
198 _In_ ULONG X,
199 _In_ ULONG Y,
200 _Out_ PULONG SourceX,
201 _Out_ PULONG SourceY)
202{
203 switch (Logo->Orientation)
204 {
206 *SourceX = Y;
207 *SourceY = Logo->Height - 1 - X;
208 break;
209
211 *SourceX = Logo->Width - 1 - X;
212 *SourceY = Logo->Height - 1 - Y;
213 break;
214
216 *SourceX = Logo->Width - 1 - Y;
217 *SourceY = X;
218 break;
219
221 default:
222 *SourceX = X;
223 *SourceY = Y;
224 break;
225 }
226}
227
228static
230PUCHAR
233 _In_ ULONG X,
234 _In_ ULONG Y)
235{
236 ULONG SourceRowIndex;
237
238 SourceRowIndex = (Logo->TopDown ? Y : (Logo->Height - 1 - Y));
239 return Logo->PixelData +
240 SourceRowIndex * Logo->RowStride +
241 X * (Logo->BitsPerPixel / 8);
242}
243
244static
245VOID
247{
248 PBGRT_TABLE BgrtTable;
249 PBMP_FILE_HEADER FileHeader;
250 PBMP_INFO_HEADER InfoHeader;
251 ULONG RowStride, HeaderSize;
253 ULONG RotatedWidth, RotatedHeight;
254 ULONGLONG ImageSize;
255 LONGLONG SignedHeight;
256 BOOLEAN UseFirmwarePlacement;
257
259
260 if ((FrameBufferData == NULL) ||
261 (FrameBufferData->BitsPerPixel != 32) ||
264 {
265 return;
266 }
267
269 if (BgrtTable == NULL)
270 {
271 TRACE("No BGRT table found\n");
272 return;
273 }
274
275 if (BgrtTable->Header.Length < sizeof(*BgrtTable))
276 {
277 WARN("BGRT table is too small (%lu)\n", BgrtTable->Header.Length);
278 return;
279 }
280
281 if ((BgrtTable->Status & BGRT_STATUS_IMAGE_VALID) == 0)
282 {
283 TRACE("BGRT image is not marked valid\n");
284 return;
285 }
286
287 if (BgrtTable->ImageType != BgrtImageTypeBitmap)
288 {
289 WARN("Unsupported BGRT image type %u\n", BgrtTable->ImageType);
290 return;
291 }
292
293 if ((BgrtTable->LogoAddress == 0) ||
294 (BgrtTable->LogoAddress != (ULONGLONG)(ULONG_PTR)BgrtTable->LogoAddress))
295 {
296 WARN("Unsupported BGRT logo address 0x%llx\n", BgrtTable->LogoAddress);
297 return;
298 }
299
300 FileHeader = (PBMP_FILE_HEADER)(ULONG_PTR)BgrtTable->LogoAddress;
301 if (FileHeader->Type != BMP_SIGNATURE)
302 {
303 WARN("BGRT logo does not contain a BMP signature\n");
304 return;
305 }
306
307 if (FileHeader->Size < sizeof(*FileHeader) + sizeof(*InfoHeader))
308 {
309 WARN("BGRT BMP is too small for a BITMAPINFOHEADER (%lu)\n",
310 FileHeader->Size);
311 return;
312 }
313
314 InfoHeader = (PBMP_INFO_HEADER)(FileHeader + 1);
315 if ((InfoHeader->Size < sizeof(*InfoHeader)) ||
316 (InfoHeader->Size > FileHeader->Size - sizeof(*FileHeader)))
317 {
318 WARN("Unsupported BMP info header size %lu\n", InfoHeader->Size);
319 return;
320 }
321
322 SignedHeight = (LONGLONG)InfoHeader->Height;
323 if ((InfoHeader->Width <= 0) || (SignedHeight == 0))
324 {
325 WARN("Unsupported BMP dimensions %ld x %ld\n",
326 InfoHeader->Width, InfoHeader->Height);
327 return;
328 }
329
330 if (InfoHeader->Planes != 1)
331 {
332 WARN("Unsupported BMP plane count %u\n", InfoHeader->Planes);
333 return;
334 }
335
336 if ((InfoHeader->BitCount != 24) && (InfoHeader->BitCount != 32))
337 {
338 WARN("Unsupported BMP bit depth %u\n", InfoHeader->BitCount);
339 return;
340 }
341
342 if (InfoHeader->Compression != BI_RGB)
343 {
344 WARN("Unsupported BMP compression %lu\n", InfoHeader->Compression);
345 return;
346 }
347
348 Width = (ULONG)InfoHeader->Width;
349 Height = (ULONG)ABS(SignedHeight);
350
351 if (!UefiCalculateBmpRowStride(Width, InfoHeader->BitCount, &RowStride))
352 {
353 WARN("BMP row stride overflows\n");
354 return;
355 }
356
357 if (InfoHeader->Size > MAXULONG - sizeof(*FileHeader))
358 {
359 WARN("BMP header size overflows\n");
360 return;
361 }
362
363 HeaderSize = sizeof(*FileHeader) + InfoHeader->Size;
364 ImageSize = (ULONGLONG)RowStride * Height;
365
366 if ((FileHeader->BitsOffset < HeaderSize) ||
367 (FileHeader->Size < FileHeader->BitsOffset) ||
368 (ImageSize > (ULONGLONG)FileHeader->Size - FileHeader->BitsOffset))
369 {
370 WARN("BGRT BMP image bounds are invalid\n");
371 return;
372 }
373
375 UefiBgrtLogo.TopDown = (SignedHeight < 0);
376 UefiBgrtLogo.PixelData = (PUCHAR)FileHeader + FileHeader->BitsOffset;
379 UefiBgrtLogo.RowStride = RowStride;
380 UefiBgrtLogo.BitsPerPixel = InfoHeader->BitCount;
382 (UCHAR)((BgrtTable->Status & BGRT_STATUS_ORIENTATION_MASK) >> 1);
383
384 UefiGetRotatedLogoSize(&UefiBgrtLogo, &RotatedWidth, &RotatedHeight);
385
386 UseFirmwarePlacement =
387 (RotatedWidth <= FrameBufferData->ScreenWidth) &&
388 (RotatedHeight <= FrameBufferData->ScreenHeight) &&
389 (BgrtTable->OffsetX <= FrameBufferData->ScreenWidth - RotatedWidth) &&
390 (BgrtTable->OffsetY <= FrameBufferData->ScreenHeight - RotatedHeight);
391
392 if (UseFirmwarePlacement)
393 {
396 BgrtTable->OffsetX,
400
401 UefiPreparePositionedLogoAxis(RotatedHeight,
403 BgrtTable->OffsetY,
407 }
408 else
409 {
410 UefiPrepareCenteredLogoAxis(RotatedWidth,
415
416 UefiPrepareCenteredLogoAxis(RotatedHeight,
421 }
422
423 TRACE("BGRT logo ready: %lux%lu rot=%u @ (%lu,%lu), crop (%lu,%lu) -> %lux%lu\n",
429}
430
431static
432VOID
434{
435 PUCHAR VramBase;
436 ULONG BytesPerPixel, Pitch;
437 ULONG Row, Col;
438
440 return;
441
442 if ((UefiBgrtLogo.DrawWidth == 0) || (UefiBgrtLogo.DrawHeight == 0))
443 return;
444
446 return;
447
450 VramBase = (PUCHAR)VramAddress;
451
452 for (Row = 0; Row < UefiBgrtLogo.DrawHeight; ++Row)
453 {
454 PULONG DestinationRow;
455
456 DestinationRow = (PULONG)(VramBase +
457 (UefiBgrtLogo.PositionY + Row) * Pitch +
459
460 for (Col = 0; Col < UefiBgrtLogo.DrawWidth; ++Col)
461 {
462 ULONG SourceX, SourceY;
463 PUCHAR SourcePixel;
464
466 UefiBgrtLogo.SourceX + Col,
467 UefiBgrtLogo.SourceY + Row,
468 &SourceX,
469 &SourceY);
470
471 SourcePixel = UefiGetLogoPixelAddress(&UefiBgrtLogo, SourceX, SourceY);
472
473 DestinationRow[Col] = 0xFF000000 |
474 (SourcePixel[2] << 16) |
475 (SourcePixel[1] << 8) |
476 SourcePixel[0];
477 }
478 }
479}
480
481static
484{
487
489 EFI_PIXEL_BITMASK* pPixelBitmask;
490 ULONG BitsPerPixel;
491
493 if (Status != EFI_SUCCESS)
494 {
495 TRACE("Failed to find GOP with status %d\n", Status);
496 return Status;
497 }
498
499 /* We don't need high resolutions for freeldr */
500 gop->SetMode(gop, LOWEST_SUPPORTED_RES);
501
502 /* Physical format of the pixel */
504 switch (PixelFormat)
505 {
508 {
509 pPixelBitmask = &EfiPixelMasks[PixelFormat];
511 break;
512 }
513
514 case PixelBitMask:
515 {
516 /*
517 * When the GOP pixel format is given by PixelBitMask, the pixel
518 * element size _may be_ different from 4 bytes.
519 * See UEFI Spec Rev.2.10 Section 12.9 "Graphics Output Protocol":
520 * example code "GetPixelElementSize()" function.
521 */
522 pPixelBitmask = &gop->Mode->Info->PixelInformation;
523 BitsPerPixel =
524 PixelBitmasksToBpp(pPixelBitmask->RedMask,
525 pPixelBitmask->GreenMask,
526 pPixelBitmask->BlueMask,
527 pPixelBitmask->ReservedMask);
528 break;
529 }
530
531 case PixelBltOnly:
532 default:
533 {
534 ERR("Unsupported UEFI GOP format %lu\n", PixelFormat);
535 pPixelBitmask = NULL;
536 BitsPerPixel = 0;
537 break;
538 }
539 }
540
545 VramSize,
549 BitsPerPixel,
550 (PPIXEL_BITMASK)pPixelBitmask))
551 {
552 ERR("Couldn't initialize video framebuffer\n");
554 }
555 else
556 {
558 }
559 return Status;
560}
561
562static
565{
567 APPLE_GRAPH_INFO_PROTOCOL *AppleGraph = NULL;
568 EFI_PIXEL_BITMASK* pPixelBitmask;
569
571 UINT32 BytesPerRow, Width, Height, Depth;
572
574 if (Status != EFI_SUCCESS)
575 {
576 ERR("Failed to find Apple Graphics Info with status %d\n", Status);
577 return Status;
578 }
579
580 Status = AppleGraph->GetInfo(AppleGraph,
583 &BytesPerRow,
584 &Width,
585 &Height,
586 &Depth);
587
588 if (Status != EFI_SUCCESS)
589 {
590 ERR("Failed to get graphics info from Apple Scren Info: %d\n", Status);
591 return Status;
592 }
593
594 /* All devices requiring Apple Graphics Info use PixelBlueGreenRedReserved8BitPerColor. */
595 pPixelBitmask = &EfiPixelMasks[PixelBlueGreenRedReserved8BitPerColor];
596
601 VramSize,
602 Width,
603 Height,
604 (BytesPerRow / 4),
605 Depth,
606 (PPIXEL_BITMASK)pPixelBitmask))
607 {
608 ERR("Couldn't initialize video framebuffer\n");
610 }
611 else
612 {
614 }
615
616 return Status;
617}
618
621{
623
624 /* First, try GOP */
626 if (Status == EFI_SUCCESS)
627 return Status;
628
629 /* Try Apple Graphics Info if that fails */
630 TRACE("Failed to detect GOP, trying Apple Graphics Info\n");
632 if (Status == EFI_SUCCESS)
633 return Status;
634
635 /* We didn't find GOP or Apple Graphics Info, probably a UGA-only system */
636 ERR("Cannot find framebuffer!\n");
637 return Status;
638}
639
640
641VOID
643{
644 FbConsClearScreen(Attr);
645}
646
647VOID
648UefiVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
649{
650 FbConsPutChar(Ch, Attr, X, Y);
651}
652
653VOID
655{
657}
658
661{
662 /* We only have one mode, semi-text */
663 return VideoTextMode;
664}
665
666ULONG
668{
669 return FbConsGetBufferSize();
670}
671
672VOID
674{
677}
678
679VOID
681{
682 /* We don't have a cursor yet */
683}
684
685VOID
687{
688 /* We don't have a cursor yet */
689}
690
693{
694 return 0;
695}
696
697VOID
699 UCHAR Green, UCHAR Blue)
700{
701 /* Not supported */
702}
703
704VOID
706 UCHAR* Green, UCHAR* Blue)
707{
708 /* Not supported */
709}
#define APPLE_GRAPH_INFO_PROTOCOL_GUID
EFI_GRAPHICS_PIXEL_FORMAT
@ PixelBitMask
@ PixelRedGreenBlueReserved8BitPerColor
@ PixelBlueGreenRedReserved8BitPerColor
@ PixelBltOnly
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID
#define EFI_UNSUPPORTED
Definition: UefiBaseType.h:123
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:31
#define EFI_SUCCESS
Definition: UefiBaseType.h:120
#define __inline
Definition: _wctype.cpp:15
unsigned char BOOLEAN
Definition: actypes.h:127
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define DBG_DEFAULT_CHANNEL(ch)
Definition: debug.h:106
@ VideoTextMode
Definition: machine.h:35
enum tagVIDEODISPLAYMODE VIDEODISPLAYMODE
UI_PROGRESS_BAR UiProgressBar
Definition: ui.c:62
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define Y(I)
#define ULONG_PTR
Definition: config.h:101
#define ROUND_UP(n, align)
Definition: eventvwr.h:34
static UCHAR BytesPerPixel
Definition: bootvid.c:37
INT PixelFormat
Status
Definition: gdiplustypes.h:25
#define ABS(x)
Definition: geom.h:69
#define X(b, s)
#define C_ASSERT(e)
Definition: intsafe.h:73
if(dx< 0)
Definition: linetemp.h:194
ULONG FrameBufferSize
Definition: xboxvideo.c:30
#define min(a, b)
Definition: monoChain.cc:55
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define RTL_BITS_OF(sizeOfArg)
Definition: ntbasedef.h:680
static ULONG ScreenHeight
Definition: pcvideo.c:117
static VIDEODISPLAYMODE DisplayMode
Definition: pcvideo.c:119
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
@ BgrtImageTypeBitmap
Definition: acpi.h:60
#define BGRT_STATUS_IMAGE_VALID
Definition: acpi.h:53
#define BGRT_SIGNATURE
Definition: acpi.h:43
struct _BGRT_TABLE * PBGRT_TABLE
#define Ch(x, y, z)
Definition: sha2.c:141
#define TRACE(s)
Definition: solgame.cpp:4
EFI_LOCATE_PROTOCOL LocateProtocol
Definition: UefiSpec.h:1873
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat
EFI_PHYSICAL_ADDRESS FrameBufferBase
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION * Info
EFI_BOOT_SERVICES * BootServices
Definition: UefiSpec.h:1959
Definition: ui.h:200
ULONG OffsetX
Definition: acpi.h:264
UCHAR ImageType
Definition: acpi.h:262
DESCRIPTION_HEADER Header
Definition: acpi.h:259
ULONGLONG LogoAddress
Definition: acpi.h:263
UCHAR Status
Definition: acpi.h:261
ULONG OffsetY
Definition: acpi.h:265
ULONG BitsOffset
Definition: uefivid.c:63
USHORT Type
Definition: uefivid.c:59
USHORT Reserved2
Definition: uefivid.c:62
USHORT Reserved1
Definition: uefivid.c:61
ULONG ClrUsed
Definition: uefivid.c:77
USHORT Planes
Definition: uefivid.c:71
ULONG ClrImportant
Definition: uefivid.c:78
USHORT BitCount
Definition: uefivid.c:72
LONG XPelsPerMeter
Definition: uefivid.c:75
ULONG Compression
Definition: uefivid.c:73
LONG YPelsPerMeter
Definition: uefivid.c:76
ULONG SizeImage
Definition: uefivid.c:74
ReactOS Framebuffer-specific video device configuration data.
Definition: framebuf.h:35
ULONG BitsPerPixel
Pixel depth.
Definition: framebuf.h:51
ULONG PixelsPerScanLine
Pitch/stride in pixels.
Definition: framebuf.h:50
EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE * Mode
EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode
Physical format of an RGB pixel, specified with per-component bit-masks. A bit being set defines thos...
Definition: vidfb.h:22
USHORT BitsPerPixel
Definition: uefivid.c:34
ULONG Width
Definition: uefivid.c:31
UCHAR Orientation
Definition: uefivid.c:29
ULONG SourceX
Definition: uefivid.c:35
ULONG DrawHeight
Definition: uefivid.c:40
BOOLEAN Valid
Definition: uefivid.c:27
ULONG PositionX
Definition: uefivid.c:37
ULONG DrawWidth
Definition: uefivid.c:39
ULONG PositionY
Definition: uefivid.c:38
BOOLEAN TopDown
Definition: uefivid.c:28
ULONG Height
Definition: uefivid.c:32
ULONG SourceY
Definition: uefivid.c:36
PUCHAR PixelData
Definition: uefivid.c:30
ULONG RowStride
Definition: uefivid.c:33
BOOLEAN Show
Definition: ui.h:142
#define MAXULONG
Definition: typedefs.h:251
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
int64_t LONGLONG
Definition: typedefs.h:68
const char * PCSTR
Definition: typedefs.h:52
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t UINT32
Definition: typedefs.h:59
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
PDESCRIPTION_HEADER UefiFindAcpiTable(_In_ ULONG Signature)
Definition: uefihw.c:94
VOID UefiVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: uefivid.c:705
EFI_GUID EfiGraphicsOutputProtocol
Definition: uefivid.c:18
VIDEODISPLAYMODE UefiVideoSetDisplayMode(PCSTR DisplayMode, BOOLEAN Init)
Definition: uefivid.c:660
struct _BMP_INFO_HEADER * PBMP_INFO_HEADER
VOID UefiVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: uefivid.c:698
ULONG_PTR VramAddress
Definition: uefivid.c:21
VOID UefiVideoClearScreen(UCHAR Attr)
Definition: uefivid.c:642
#define BI_RGB
Definition: uefivid.c:46
struct _UEFI_BGRT_LOGO UEFI_BGRT_LOGO
VOID UefiVideoHideShowTextCursor(BOOLEAN Show)
Definition: uefivid.c:686
ULONG UefiVideoGetBufferSize(VOID)
Definition: uefivid.c:667
static VOID UefiPreparePositionedLogoAxis(_In_ ULONG BitmapSize, _In_ ULONG ScreenSize, _In_ ULONG RequestedOffset, _Out_ PULONG SourceOffset, _Out_ PULONG DestinationOffset, _Out_ PULONG DrawSize)
Definition: uefivid.c:155
static VOID UefiInitializeBgrtLogo(VOID)
Definition: uefivid.c:246
static __inline PUCHAR UefiGetLogoPixelAddress(_In_ PUEFI_BGRT_LOGO Logo, _In_ ULONG X, _In_ ULONG Y)
Definition: uefivid.c:231
struct _BMP_FILE_HEADER * PBMP_FILE_HEADER
#define BGRT_ORIENTATION_270
Definition: uefivid.c:52
EFI_STATUS UefiInitializeVideo(VOID)
Definition: uefivid.c:620
#define BMP_SIGNATURE
Definition: uefivid.c:45
VOID UefiVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: uefivid.c:654
VOID UefiVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: uefivid.c:680
EFI_SYSTEM_TABLE * GlobalSystemTable
Definition: uefildr.c:16
#define LOWEST_SUPPORTED_RES
Definition: uefivid.c:54
EFI_GUID AppleGraphInfoProtocol
Definition: uefivid.c:19
static EFI_STATUS UefiInitializeAppleGraphics(VOID)
Definition: uefivid.c:564
static UEFI_BGRT_LOGO UefiBgrtLogo
Definition: uefivid.c:43
static VOID UefiDrawBgrtLogo(VOID)
Definition: uefivid.c:433
PCM_FRAMEBUF_DEVICE_DATA FrameBufferData
Definition: uefivid.c:23
static VOID UefiGetLogoSourceCoordinates(_In_ PUEFI_BGRT_LOGO Logo, _In_ ULONG X, _In_ ULONG Y, _Out_ PULONG SourceX, _Out_ PULONG SourceY)
Definition: uefivid.c:196
#define BGRT_STATUS_ORIENTATION_MASK
Definition: uefivid.c:48
VOID UefiVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: uefivid.c:648
struct _BMP_FILE_HEADER BMP_FILE_HEADER
ULONG VramSize
Definition: uefivid.c:22
VOID UefiVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: uefivid.c:673
static VOID UefiPrepareCenteredLogoAxis(_In_ ULONG BitmapSize, _In_ ULONG ScreenSize, _Out_ PULONG SourceOffset, _Out_ PULONG DestinationOffset, _Out_ PULONG DrawSize)
Definition: uefivid.c:133
struct _BMP_INFO_HEADER BMP_INFO_HEADER
static VOID UefiGetRotatedLogoSize(_In_ PUEFI_BGRT_LOGO Logo, _Out_ PULONG Width, _Out_ PULONG Height)
Definition: uefivid.c:177
#define BGRT_ORIENTATION_180
Definition: uefivid.c:51
static EFI_STATUS UefiInitializeGop(VOID)
Definition: uefivid.c:483
EFI_HANDLE GlobalImageHandle
Definition: uefildr.c:15
struct _UEFI_BGRT_LOGO * PUEFI_BGRT_LOGO
BOOLEAN UefiVideoIsPaletteFixed(VOID)
Definition: uefivid.c:692
#define BGRT_ORIENTATION_90
Definition: uefivid.c:50
BOOLEAN UefiCalculateBmpRowStride(_In_ ULONG Width, _In_ USHORT BitsPerPixel, _Out_ PULONG RowStride)
Definition: uefivid.c:115
#define BGRT_ORIENTATION_0
Definition: uefivid.c:49
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
VOID FbConsClearScreen(_In_ UCHAR Attr)
Definition: vidfb.c:413
VOID FbConsGetDisplaySize(_Out_ PULONG Width, _Out_ PULONG Height, _Out_ PULONG Depth)
Returns the width and height in number of CGA characters/attributes, of a full text-mode CGA-style ch...
Definition: vidfb.c:462
ULONG FbConsGetBufferSize(VOID)
Returns the size in bytes, of a full text-mode CGA-style character buffer rectangle that can fill the...
Definition: vidfb.c:481
VOID FbConsPutChar(_In_ UCHAR Char, _In_ UCHAR Attr, _In_ ULONG Column, _In_ ULONG Row)
Displays a character with specific text attributes at a given position.
Definition: vidfb.c:445
VOID FbConsCopyOffScreenBufferToVRAM(_In_ PVOID Buffer)
Copies a full text-mode CGA-style character buffer rectangle to the console.
Definition: vidfb.c:492
BOOLEAN VidFbInitializeVideo(_Out_opt_ PCM_FRAMEBUF_DEVICE_DATA *pFbData, _In_ ULONG_PTR BaseAddress, _In_ ULONG BufferSize, _In_ UINT32 ScreenWidth, _In_ UINT32 ScreenHeight, _In_ UINT32 PixelsPerScanLine, _In_ UINT32 BitsPerPixel, _In_opt_ PPIXEL_BITMASK PixelMasks)
Initializes internal framebuffer information based on the given parameters.
Definition: vidfb.c:99
FORCEINLINE ULONG PixelBitmasksToBpp(_In_ ULONG RedMask, _In_ ULONG GreenMask, _In_ ULONG BlueMask, _In_ ULONG ReservedMask)
Calculates the number of bits per pixel ("PixelDepth") for the given pixel format,...
Definition: vidfb.h:41
struct _PIXEL_BITMASK * PPIXEL_BITMASK
_Must_inspect_result_ _In_ WDFMEMORY _In_ size_t SourceOffset
Definition: wdfmemory.h:320
_Must_inspect_result_ _In_ WDFMEMORY _In_ size_t DestinationOffset
Definition: wdfmemory.h:361
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION _In_ ULONG _In_ SIZE_T _In_ ULONG _In_ USHORT Depth
Definition: exfuncs.h:819