]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h
OvmfPkg/Bhyve: Fix various style issues
[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
91 #define GOP_PRIVATE_DATA_FROM_THIS(a) \
92 CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
93
94 typedef struct {
95 UINT32 FbSize;
96 UINT16 Width;
97 UINT16 Height;
98 UINT16 Depth;
99 UINT16 RefreshRate;
100 } BHYVE_FBUF_MEMREGS;
101
102 //
103 // Global Protocol Variables
104 //
105 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
106 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
107 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
108
109 //
110 // Gop Hardware abstraction internal worker functions
111 //
112 EFI_STATUS
113 EmuGopConstructor (
114 IN GOP_PRIVATE_DATA *Private
115 );
116
117 EFI_STATUS
118 EmuGopDestructor (
119 IN GOP_PRIVATE_DATA *Private
120 );
121
122 VOID
123 EFIAPI
124 ShutdownGopEvent (
125 IN EFI_EVENT Event,
126 IN VOID *Context
127 );
128
129 VOID
130 BhyveSetGraphicsMode (
131 GOP_PRIVATE_DATA *Private,
132 UINT16 Width,
133 UINT16 Height,
134 UINT16 Depth
135 );
136
137 VOID
138 BhyveGetMemregs (
139 GOP_PRIVATE_DATA *Private,
140 BHYVE_FBUF_MEMREGS *Memregs
141 );
142
143 VOID
144 InstallVbeShim (
145 IN CONST CHAR16 *CardName,
146 IN EFI_PHYSICAL_ADDRESS FrameBufferBase
147 );
148
149 #endif /* _GOP_H_ */