]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / Bhyve / BhyveRfbDxe / Gop.h
1 /*++ @file
2
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>
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9 **/
10
11 #ifndef _GOP_H_
12 #define _GOP_H_
13
14 #include <Uefi.h>
15 #include <Protocol/GraphicsOutput.h>
16 #include <Protocol/PciIo.h>
17 #include <Protocol/DriverSupportedEfiVersion.h>
18 #include <Protocol/DevicePath.h>
19
20 #include <Guid/EventGroup.h>
21
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>
31
32 #include <IndustryStandard/Pci.h>
33
34 #define GRAPHICS_OUTPUT_INVALID_MODE_NUMBER 0xffff
35
36 typedef struct {
37 UINT32 HorizontalResolution;
38 UINT32 VerticalResolution;
39 UINT32 ColorDepth;
40 UINT32 RefreshRate;
41 } GOP_MODE_DATA;
42
43 #define PIXEL_RED_SHIFT 0
44 #define PIXEL_GREEN_SHIFT 3
45 #define PIXEL_BLUE_SHIFT 6
46
47 #define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5)
48 #define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2)
49 #define PIXEL_BLUE_MASK (BIT1 | BIT0)
50
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)
55
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) )
60
61 #define PIXEL24_RED_MASK 0x00ff0000
62 #define PIXEL24_GREEN_MASK 0x0000ff00
63 #define PIXEL24_BLUE_MASK 0x000000ff
64
65 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
66 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
67
68 #define EMU_UGA_CLASS_NAME L"EmuGopWindow"
69
70 #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
71 typedef struct {
72 UINT64 Signature;
73
74 EFI_HANDLE Handle;
75 EFI_PCI_IO_PROTOCOL *PciIo;
76 EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
77 EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
78
79 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
80
81 //
82 // GOP Private Data for QueryMode ()
83 //
84 GOP_MODE_DATA *ModeData;
85
86 UINT64 FbAddr;
87 UINT32 FbSize;
88 } GOP_PRIVATE_DATA;
89
90 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
91 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
92
93 typedef struct {
94 UINT32 FbSize;
95 UINT16 Width;
96 UINT16 Height;
97 UINT16 Depth;
98 UINT16 RefreshRate;
99 } BHYVE_FBUF_MEMREGS;
100
101 //
102 // Global Protocol Variables
103 //
104 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
105 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
106 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
107
108 //
109 // Gop Hardware abstraction internal worker functions
110 //
111 EFI_STATUS
112 EmuGopConstructor (
113 IN GOP_PRIVATE_DATA *Private
114 );
115
116 EFI_STATUS
117 EmuGopDestructor (
118 IN GOP_PRIVATE_DATA *Private
119 );
120
121 VOID
122 EFIAPI
123 ShutdownGopEvent (
124 IN EFI_EVENT Event,
125 IN VOID *Context
126 );
127
128 VOID
129 BhyveSetGraphicsMode (
130 GOP_PRIVATE_DATA *Private,
131 UINT16 Width,
132 UINT16 Height,
133 UINT16 Depth
134 );
135
136 VOID
137 BhyveGetMemregs (
138 GOP_PRIVATE_DATA *Private,
139 BHYVE_FBUF_MEMREGS *Memregs
140 );
141
142 VOID
143 InstallVbeShim (
144 IN CONST CHAR16 *CardName,
145 IN EFI_PHYSICAL_ADDRESS FrameBufferBase
146 );
147
148 #endif /* _GOP_H_ */