3 Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com>
4 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
5 Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
15 #include <Protocol/GraphicsOutput.h>
16 #include <Protocol/PciIo.h>
17 #include <Protocol/DriverSupportedEfiVersion.h>
18 #include <Protocol/DevicePath.h>
20 #include <Guid/EventGroup.h>
22 #include <Library/DebugLib.h>
23 #include <Library/BaseLib.h>
24 #include <Library/PcdLib.h>
25 #include <Library/UefiDriverEntryPoint.h>
26 #include <Library/UefiLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/MemoryAllocationLib.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/DevicePathLib.h>
32 #include <IndustryStandard/Pci.h>
34 #define GRAPHICS_OUTPUT_INVALID_MODE_NUMBER 0xffff
37 UINT32 HorizontalResolution
;
38 UINT32 VerticalResolution
;
43 #define PIXEL_RED_SHIFT 0
44 #define PIXEL_GREEN_SHIFT 3
45 #define PIXEL_BLUE_SHIFT 6
47 #define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5)
48 #define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2)
49 #define PIXEL_BLUE_MASK (BIT1 | BIT0)
51 #define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift))
52 #define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT)
53 #define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT)
54 #define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT)
56 #define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \
57 (UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \
58 (((Green) >> PIXEL_GREEN_SHIFT) & PIXEL_GREEN_MASK) | \
59 (((Blue) >> PIXEL_BLUE_SHIFT) & PIXEL_BLUE_MASK) )
61 #define PIXEL24_RED_MASK 0x00ff0000
62 #define PIXEL24_GREEN_MASK 0x0000ff00
63 #define PIXEL24_BLUE_MASK 0x000000ff
65 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
66 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
68 #define EMU_UGA_CLASS_NAME L"EmuGopWindow"
70 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
75 EFI_PCI_IO_PROTOCOL
*PciIo
;
76 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput
;
77 EFI_DEVICE_PATH_PROTOCOL
*GopDevicePath
;
79 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
82 // GOP Private Data for QueryMode ()
84 GOP_MODE_DATA
*ModeData
;
91 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
92 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
100 } BHYVE_FBUF_MEMREGS
;
103 // Global Protocol Variables
105 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding
;
106 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName
;
107 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2
;
110 // Gop Hardware abstraction internal worker functions
114 IN GOP_PRIVATE_DATA
*Private
119 IN GOP_PRIVATE_DATA
*Private
130 BhyveSetGraphicsMode (
131 GOP_PRIVATE_DATA
*Private
,
139 GOP_PRIVATE_DATA
*Private
,
140 BHYVE_FBUF_MEMREGS
*Memregs
145 IN CONST CHAR16
*CardName
,
146 IN EFI_PHYSICAL_ADDRESS FrameBufferBase