/*++ @file | |
Copyright (c) 2020, Rebecca Cran <rebecca@bsdio.com> | |
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> | |
Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _GOP_H_ | |
#define _GOP_H_ | |
#include <Uefi.h> | |
#include <Protocol/GraphicsOutput.h> | |
#include <Protocol/PciIo.h> | |
#include <Protocol/DriverSupportedEfiVersion.h> | |
#include <Protocol/DevicePath.h> | |
#include <Guid/EventGroup.h> | |
#include <Library/DebugLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/PcdLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/UefiLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <IndustryStandard/Pci.h> | |
#define GRAPHICS_OUTPUT_INVALID_MODE_NUMBER 0xffff | |
typedef struct { | |
UINT32 HorizontalResolution; | |
UINT32 VerticalResolution; | |
UINT32 ColorDepth; | |
UINT32 RefreshRate; | |
} GOP_MODE_DATA; | |
#define PIXEL_RED_SHIFT 0 | |
#define PIXEL_GREEN_SHIFT 3 | |
#define PIXEL_BLUE_SHIFT 6 | |
#define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5) | |
#define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2) | |
#define PIXEL_BLUE_MASK (BIT1 | BIT0) | |
#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift)) | |
#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT) | |
#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT) | |
#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT) | |
#define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \ | |
(UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \ | |
(((Green) >> PIXEL_GREEN_SHIFT) & PIXEL_GREEN_MASK) | \ | |
(((Blue) >> PIXEL_BLUE_SHIFT) & PIXEL_BLUE_MASK) ) | |
#define PIXEL24_RED_MASK 0x00ff0000 | |
#define PIXEL24_GREEN_MASK 0x0000ff00 | |
#define PIXEL24_BLUE_MASK 0x000000ff | |
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; | |
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; | |
#define EMU_UGA_CLASS_NAME L"EmuGopWindow" | |
#define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N') | |
typedef struct { | |
UINT64 Signature; | |
EFI_HANDLE Handle; | |
EFI_PCI_IO_PROTOCOL *PciIo; | |
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; | |
EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; | |
EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
// | |
// GOP Private Data for QueryMode () | |
// | |
GOP_MODE_DATA *ModeData; | |
UINT64 FbAddr; | |
UINT32 FbSize; | |
} GOP_PRIVATE_DATA; | |
#define GOP_PRIVATE_DATA_FROM_THIS(a) \ | |
CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE) | |
typedef struct { | |
UINT32 FbSize; | |
UINT16 Width; | |
UINT16 Height; | |
UINT16 Depth; | |
UINT16 RefreshRate; | |
} BHYVE_FBUF_MEMREGS; | |
// | |
// Global Protocol Variables | |
// | |
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; | |
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; | |
extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2; | |
// | |
// Gop Hardware abstraction internal worker functions | |
// | |
EFI_STATUS | |
EmuGopConstructor ( | |
IN GOP_PRIVATE_DATA *Private | |
); | |
EFI_STATUS | |
EmuGopDestructor ( | |
IN GOP_PRIVATE_DATA *Private | |
); | |
VOID | |
EFIAPI | |
ShutdownGopEvent ( | |
IN EFI_EVENT Event, | |
IN VOID *Context | |
); | |
VOID | |
BhyveSetGraphicsMode ( | |
GOP_PRIVATE_DATA *Private, | |
UINT16 Width, | |
UINT16 Height, | |
UINT16 Depth | |
); | |
VOID | |
BhyveGetMemregs ( | |
GOP_PRIVATE_DATA *Private, | |
BHYVE_FBUF_MEMREGS *Memregs | |
); | |
VOID | |
InstallVbeShim ( | |
IN CONST CHAR16 *CardName, | |
IN EFI_PHYSICAL_ADDRESS FrameBufferBase | |
); | |
#endif /* _GOP_H_ */ |