OvmfPkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
This commit is contained in:
committed by
mergify[bot]
parent
d1050b9dff
commit
ac0a286f4d
@@ -21,21 +21,20 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentNa
|
||||
//
|
||||
// EFI Component Name 2 Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) QemuVideoComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) QemuVideoComponentNameGetControllerName,
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)QemuVideoComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)QemuVideoComponentNameGetControllerName,
|
||||
"en"
|
||||
};
|
||||
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoDriverNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoDriverNameTable[] = {
|
||||
{ "eng;en", L"QEMU Video Driver" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoControllerNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoControllerNameTable[] = {
|
||||
{ "eng;en", L"QEMU Video PCI Adapter" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -165,14 +164,14 @@ QemuVideoComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// This is a device driver, so ChildHandle must be NULL.
|
||||
|
@@ -11,7 +11,7 @@
|
||||
#include "Qemu.h"
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
|
||||
EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
|
||||
EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
|
||||
QemuVideoControllerDriverSupported,
|
||||
QemuVideoControllerDriverStart,
|
||||
QemuVideoControllerDriverStop,
|
||||
@@ -20,77 +20,80 @@ EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
|
||||
NULL
|
||||
};
|
||||
|
||||
QEMU_VIDEO_CARD gQemuVideoCardList[] = {
|
||||
{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5430_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5430,
|
||||
L"Cirrus 5430"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5430,
|
||||
L"Cirrus 5430"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5446_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5446,
|
||||
L"Cirrus 5446"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1234,
|
||||
0x1111,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU Standard VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_OTHER,
|
||||
0x1234,
|
||||
0x1111,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU Standard VGA (secondary)"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1b36,
|
||||
0x0100,
|
||||
QEMU_VIDEO_BOCHS,
|
||||
L"QEMU QXL VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1af4,
|
||||
0x1050,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU VirtIO VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x15ad,
|
||||
0x0405,
|
||||
QEMU_VIDEO_VMWARE_SVGA,
|
||||
L"QEMU VMWare SVGA"
|
||||
},{
|
||||
0 /* end of list */
|
||||
}
|
||||
QEMU_VIDEO_CARD gQemuVideoCardList[] = {
|
||||
{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5430_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5430,
|
||||
L"Cirrus 5430"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5430,
|
||||
L"Cirrus 5430"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
CIRRUS_LOGIC_VENDOR_ID,
|
||||
CIRRUS_LOGIC_5446_DEVICE_ID,
|
||||
QEMU_VIDEO_CIRRUS_5446,
|
||||
L"Cirrus 5446"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1234,
|
||||
0x1111,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU Standard VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_OTHER,
|
||||
0x1234,
|
||||
0x1111,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU Standard VGA (secondary)"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1b36,
|
||||
0x0100,
|
||||
QEMU_VIDEO_BOCHS,
|
||||
L"QEMU QXL VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x1af4,
|
||||
0x1050,
|
||||
QEMU_VIDEO_BOCHS_MMIO,
|
||||
L"QEMU VirtIO VGA"
|
||||
},{
|
||||
PCI_CLASS_DISPLAY_VGA,
|
||||
0x15ad,
|
||||
0x0405,
|
||||
QEMU_VIDEO_VMWARE_SVGA,
|
||||
L"QEMU VMWare SVGA"
|
||||
},{
|
||||
0 /* end of list */
|
||||
}
|
||||
};
|
||||
|
||||
static QEMU_VIDEO_CARD*
|
||||
QemuVideoDetect(
|
||||
IN UINT8 SubClass,
|
||||
IN UINT16 VendorId,
|
||||
IN UINT16 DeviceId
|
||||
static QEMU_VIDEO_CARD *
|
||||
QemuVideoDetect (
|
||||
IN UINT8 SubClass,
|
||||
IN UINT16 VendorId,
|
||||
IN UINT16 DeviceId
|
||||
)
|
||||
{
|
||||
UINTN Index = 0;
|
||||
UINTN Index = 0;
|
||||
|
||||
while (gQemuVideoCardList[Index].VendorId != 0) {
|
||||
if (gQemuVideoCardList[Index].SubClass == SubClass &&
|
||||
gQemuVideoCardList[Index].VendorId == VendorId &&
|
||||
gQemuVideoCardList[Index].DeviceId == DeviceId) {
|
||||
if ((gQemuVideoCardList[Index].SubClass == SubClass) &&
|
||||
(gQemuVideoCardList[Index].VendorId == VendorId) &&
|
||||
(gQemuVideoCardList[Index].DeviceId == DeviceId))
|
||||
{
|
||||
return gQemuVideoCardList + Index;
|
||||
}
|
||||
|
||||
Index++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -108,15 +111,15 @@ QemuVideoDetect(
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoControllerDriverSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
PCI_TYPE00 Pci;
|
||||
QEMU_VIDEO_CARD *Card;
|
||||
EFI_STATUS Status;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
PCI_TYPE00 Pci;
|
||||
QEMU_VIDEO_CARD *Card;
|
||||
|
||||
//
|
||||
// Open the PCI I/O Protocol
|
||||
@@ -124,7 +127,7 @@ QemuVideoControllerDriverSupported (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &PciIo,
|
||||
(VOID **)&PciIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -151,7 +154,8 @@ QemuVideoControllerDriverSupported (
|
||||
if (!IS_PCI_DISPLAY (&Pci)) {
|
||||
goto Done;
|
||||
}
|
||||
Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);
|
||||
|
||||
Card = QemuVideoDetect (Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);
|
||||
if (Card != NULL) {
|
||||
DEBUG ((DEBUG_INFO, "QemuVideo: %s detected\n", Card->Name));
|
||||
Status = EFI_SUCCESS;
|
||||
@@ -162,11 +166,11 @@ Done:
|
||||
// Close the PCI I/O Protocol
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
return Status;
|
||||
}
|
||||
@@ -187,21 +191,21 @@ Done:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoControllerDriverStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
BOOLEAN IsQxl;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
ACPI_ADR_DEVICE_PATH AcpiDeviceNode;
|
||||
PCI_TYPE00 Pci;
|
||||
QEMU_VIDEO_CARD *Card;
|
||||
EFI_PCI_IO_PROTOCOL *ChildPciIo;
|
||||
UINT64 SupportedVgaIo;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
BOOLEAN IsQxl;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
ACPI_ADR_DEVICE_PATH AcpiDeviceNode;
|
||||
PCI_TYPE00 Pci;
|
||||
QEMU_VIDEO_CARD *Card;
|
||||
EFI_PCI_IO_PROTOCOL *ChildPciIo;
|
||||
UINT64 SupportedVgaIo;
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||
|
||||
@@ -217,7 +221,7 @@ QemuVideoControllerDriverStart (
|
||||
//
|
||||
// Set up context record
|
||||
//
|
||||
Private->Signature = QEMU_VIDEO_PRIVATE_DATA_SIGNATURE;
|
||||
Private->Signature = QEMU_VIDEO_PRIVATE_DATA_SIGNATURE;
|
||||
|
||||
//
|
||||
// Open PCI I/O Protocol
|
||||
@@ -225,7 +229,7 @@ QemuVideoControllerDriverStart (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &Private->PciIo,
|
||||
(VOID **)&Private->PciIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -238,12 +242,12 @@ QemuVideoControllerDriverStart (
|
||||
// Read the PCI Configuration Header from the PCI Device
|
||||
//
|
||||
Status = Private->PciIo->Pci.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
0,
|
||||
sizeof (Pci) / sizeof (UINT32),
|
||||
&Pci
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
0,
|
||||
sizeof (Pci) / sizeof (UINT32),
|
||||
&Pci
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto ClosePciIo;
|
||||
}
|
||||
@@ -251,11 +255,12 @@ QemuVideoControllerDriverStart (
|
||||
//
|
||||
// Determine card variant.
|
||||
//
|
||||
Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);
|
||||
Card = QemuVideoDetect (Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);
|
||||
if (Card == NULL) {
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
goto ClosePciIo;
|
||||
}
|
||||
|
||||
Private->Variant = Card->Variant;
|
||||
|
||||
//
|
||||
@@ -268,11 +273,11 @@ QemuVideoControllerDriverStart (
|
||||
// Save original PCI attributes
|
||||
//
|
||||
Status = Private->PciIo->Attributes (
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationGet,
|
||||
0,
|
||||
&Private->OriginalPciAttributes
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationGet,
|
||||
0,
|
||||
&Private->OriginalPciAttributes
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto ClosePciIo;
|
||||
@@ -292,7 +297,7 @@ QemuVideoControllerDriverStart (
|
||||
}
|
||||
|
||||
SupportedVgaIo &= (UINT64)(EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16);
|
||||
if (SupportedVgaIo == 0 && IS_PCI_VGA (&Pci)) {
|
||||
if ((SupportedVgaIo == 0) && IS_PCI_VGA (&Pci)) {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto ClosePciIo;
|
||||
}
|
||||
@@ -301,11 +306,11 @@ QemuVideoControllerDriverStart (
|
||||
// Set new PCI attributes
|
||||
//
|
||||
Status = Private->PciIo->Attributes (
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationEnable,
|
||||
EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | SupportedVgaIo,
|
||||
NULL
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationEnable,
|
||||
EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | SupportedVgaIo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto ClosePciIo;
|
||||
}
|
||||
@@ -314,21 +319,25 @@ QemuVideoControllerDriverStart (
|
||||
// Check whenever the qemu stdvga mmio bar is present (qemu 1.3+).
|
||||
//
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) {
|
||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc;
|
||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc;
|
||||
|
||||
Status = Private->PciIo->GetBarAttributes (
|
||||
Private->PciIo,
|
||||
PCI_BAR_IDX2,
|
||||
NULL,
|
||||
(VOID**) &MmioDesc
|
||||
);
|
||||
Private->PciIo,
|
||||
PCI_BAR_IDX2,
|
||||
NULL,
|
||||
(VOID **)&MmioDesc
|
||||
);
|
||||
if (EFI_ERROR (Status) ||
|
||||
MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM) {
|
||||
(MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM))
|
||||
{
|
||||
DEBUG ((DEBUG_INFO, "QemuVideo: No mmio bar, fallback to port io\n"));
|
||||
Private->Variant = QEMU_VIDEO_BOCHS;
|
||||
} else {
|
||||
DEBUG ((DEBUG_INFO, "QemuVideo: Using mmio bar @ 0x%lx\n",
|
||||
MmioDesc->AddrRangeMin));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"QemuVideo: Using mmio bar @ 0x%lx\n",
|
||||
MmioDesc->AddrRangeMin
|
||||
));
|
||||
}
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
@@ -340,17 +349,18 @@ QemuVideoControllerDriverStart (
|
||||
// VMWare SVGA is handled like Bochs (with port IO only).
|
||||
//
|
||||
if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
|
||||
Private->Variant = QEMU_VIDEO_BOCHS;
|
||||
Private->Variant = QEMU_VIDEO_BOCHS;
|
||||
Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
|
||||
}
|
||||
|
||||
//
|
||||
// Check if accessing the bochs interface works.
|
||||
//
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||
|
||||
Private->Variant == QEMU_VIDEO_BOCHS) {
|
||||
UINT16 BochsId;
|
||||
BochsId = BochsRead(Private, VBE_DISPI_INDEX_ID);
|
||||
if ((Private->Variant == QEMU_VIDEO_BOCHS_MMIO) ||
|
||||
(Private->Variant == QEMU_VIDEO_BOCHS))
|
||||
{
|
||||
UINT16 BochsId;
|
||||
BochsId = BochsRead (Private, VBE_DISPI_INDEX_ID);
|
||||
if ((BochsId & 0xFFF0) != VBE_DISPI_ID0) {
|
||||
DEBUG ((DEBUG_INFO, "QemuVideo: BochsID mismatch (got 0x%x)\n", BochsId));
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
@@ -364,7 +374,7 @@ QemuVideoControllerDriverStart (
|
||||
Status = gBS->HandleProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ParentDevicePath
|
||||
(VOID **)&ParentDevicePath
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto RestoreAttributes;
|
||||
@@ -374,15 +384,15 @@ QemuVideoControllerDriverStart (
|
||||
// Set Gop Device Path
|
||||
//
|
||||
ZeroMem (&AcpiDeviceNode, sizeof (ACPI_ADR_DEVICE_PATH));
|
||||
AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH;
|
||||
AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH;
|
||||
AcpiDeviceNode.Header.SubType = ACPI_ADR_DP;
|
||||
AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0);
|
||||
AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0);
|
||||
SetDevicePathNodeLength (&AcpiDeviceNode.Header, sizeof (ACPI_ADR_DEVICE_PATH));
|
||||
|
||||
Private->GopDevicePath = AppendDevicePathNode (
|
||||
ParentDevicePath,
|
||||
(EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode
|
||||
);
|
||||
ParentDevicePath,
|
||||
(EFI_DEVICE_PATH_PROTOCOL *)&AcpiDeviceNode
|
||||
);
|
||||
if (Private->GopDevicePath == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto RestoreAttributes;
|
||||
@@ -405,19 +415,20 @@ QemuVideoControllerDriverStart (
|
||||
// Construct video mode buffer
|
||||
//
|
||||
switch (Private->Variant) {
|
||||
case QEMU_VIDEO_CIRRUS_5430:
|
||||
case QEMU_VIDEO_CIRRUS_5446:
|
||||
Status = QemuVideoCirrusModeSetup (Private);
|
||||
break;
|
||||
case QEMU_VIDEO_BOCHS_MMIO:
|
||||
case QEMU_VIDEO_BOCHS:
|
||||
Status = QemuVideoBochsModeSetup (Private, IsQxl);
|
||||
break;
|
||||
default:
|
||||
ASSERT (FALSE);
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
break;
|
||||
case QEMU_VIDEO_CIRRUS_5430:
|
||||
case QEMU_VIDEO_CIRRUS_5446:
|
||||
Status = QemuVideoCirrusModeSetup (Private);
|
||||
break;
|
||||
case QEMU_VIDEO_BOCHS_MMIO:
|
||||
case QEMU_VIDEO_BOCHS:
|
||||
Status = QemuVideoBochsModeSetup (Private, IsQxl);
|
||||
break;
|
||||
default:
|
||||
ASSERT (FALSE);
|
||||
Status = EFI_DEVICE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto UninstallGopDevicePath;
|
||||
}
|
||||
@@ -444,30 +455,35 @@ QemuVideoControllerDriverStart (
|
||||
// Reference parent handle from child handle.
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **) &ChildPciIo,
|
||||
This->DriverBindingHandle,
|
||||
Private->Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
(VOID **)&ChildPciIo,
|
||||
This->DriverBindingHandle,
|
||||
Private->Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto UninstallGop;
|
||||
}
|
||||
|
||||
#if defined MDE_CPU_IA32 || defined MDE_CPU_X64
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||
|
||||
Private->Variant == QEMU_VIDEO_BOCHS) {
|
||||
#if defined MDE_CPU_IA32 || defined MDE_CPU_X64
|
||||
if ((Private->Variant == QEMU_VIDEO_BOCHS_MMIO) ||
|
||||
(Private->Variant == QEMU_VIDEO_BOCHS))
|
||||
{
|
||||
InstallVbeShim (Card->Name, Private->GraphicsOutput.Mode->FrameBufferBase);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
return EFI_SUCCESS;
|
||||
|
||||
UninstallGop:
|
||||
gBS->UninstallProtocolInterface (Private->Handle,
|
||||
&gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput);
|
||||
gBS->UninstallProtocolInterface (
|
||||
Private->Handle,
|
||||
&gEfiGraphicsOutputProtocolGuid,
|
||||
&Private->GraphicsOutput
|
||||
);
|
||||
|
||||
DestructQemuVideoGraphics:
|
||||
QemuVideoGraphicsOutputDestructor (Private);
|
||||
@@ -476,19 +492,30 @@ FreeModeData:
|
||||
FreePool (Private->ModeData);
|
||||
|
||||
UninstallGopDevicePath:
|
||||
gBS->UninstallProtocolInterface (Private->Handle,
|
||||
&gEfiDevicePathProtocolGuid, Private->GopDevicePath);
|
||||
gBS->UninstallProtocolInterface (
|
||||
Private->Handle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
Private->GopDevicePath
|
||||
);
|
||||
|
||||
FreeGopDevicePath:
|
||||
FreePool (Private->GopDevicePath);
|
||||
|
||||
RestoreAttributes:
|
||||
Private->PciIo->Attributes (Private->PciIo, EfiPciIoAttributeOperationSet,
|
||||
Private->OriginalPciAttributes, NULL);
|
||||
Private->PciIo->Attributes (
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationSet,
|
||||
Private->OriginalPciAttributes,
|
||||
NULL
|
||||
);
|
||||
|
||||
ClosePciIo:
|
||||
gBS->CloseProtocol (Controller, &gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle, Controller);
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
FreePrivate:
|
||||
FreePool (Private);
|
||||
@@ -515,15 +542,15 @@ RestoreTpl:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoControllerDriverStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
)
|
||||
{
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
|
||||
if (NumberOfChildren == 0) {
|
||||
@@ -531,11 +558,11 @@ QemuVideoControllerDriverStop (
|
||||
// Close the PCI I/O Protocol
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -547,7 +574,7 @@ QemuVideoControllerDriverStop (
|
||||
Status = gBS->OpenProtocol (
|
||||
ChildHandleBuffer[0],
|
||||
&gEfiGraphicsOutputProtocolGuid,
|
||||
(VOID **) &GraphicsOutput,
|
||||
(VOID **)&GraphicsOutput,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -581,22 +608,25 @@ QemuVideoControllerDriverStop (
|
||||
// Restore original PCI attributes
|
||||
//
|
||||
Private->PciIo->Attributes (
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationSet,
|
||||
Private->OriginalPciAttributes,
|
||||
NULL
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoAttributeOperationSet,
|
||||
Private->OriginalPciAttributes,
|
||||
NULL
|
||||
);
|
||||
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Private->Handle
|
||||
);
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Private->Handle
|
||||
);
|
||||
|
||||
FreePool (Private->ModeData);
|
||||
gBS->UninstallProtocolInterface (Private->Handle,
|
||||
&gEfiDevicePathProtocolGuid, Private->GopDevicePath);
|
||||
gBS->UninstallProtocolInterface (
|
||||
Private->Handle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
Private->GopDevicePath
|
||||
);
|
||||
FreePool (Private->GopDevicePath);
|
||||
|
||||
//
|
||||
@@ -620,18 +650,18 @@ QemuVideoControllerDriverStop (
|
||||
VOID
|
||||
outb (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address,
|
||||
UINT8 Data
|
||||
UINTN Address,
|
||||
UINT8 Data
|
||||
)
|
||||
{
|
||||
Private->PciIo->Io.Write (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -647,18 +677,18 @@ outb (
|
||||
VOID
|
||||
outw (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address,
|
||||
UINT16 Data
|
||||
UINTN Address,
|
||||
UINT16 Data
|
||||
)
|
||||
{
|
||||
Private->PciIo->Io.Write (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -673,19 +703,19 @@ outw (
|
||||
UINT8
|
||||
inb (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address
|
||||
UINTN Address
|
||||
)
|
||||
{
|
||||
UINT8 Data;
|
||||
UINT8 Data;
|
||||
|
||||
Private->PciIo->Io.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
return Data;
|
||||
}
|
||||
|
||||
@@ -701,19 +731,19 @@ inb (
|
||||
UINT16
|
||||
inw (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address
|
||||
UINTN Address
|
||||
)
|
||||
{
|
||||
UINT16 Data;
|
||||
|
||||
Private->PciIo->Io.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
EFI_PCI_IO_PASS_THROUGH_BAR,
|
||||
Address,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
return Data;
|
||||
}
|
||||
|
||||
@@ -732,16 +762,16 @@ inw (
|
||||
VOID
|
||||
SetPaletteColor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Index,
|
||||
UINT8 Red,
|
||||
UINT8 Green,
|
||||
UINT8 Blue
|
||||
UINTN Index,
|
||||
UINT8 Red,
|
||||
UINT8 Green,
|
||||
UINT8 Blue
|
||||
)
|
||||
{
|
||||
VgaOutb (Private, PALETTE_INDEX_REGISTER, (UINT8) Index);
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Red >> 2));
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Green >> 2));
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Blue >> 2));
|
||||
VgaOutb (Private, PALETTE_INDEX_REGISTER, (UINT8)Index);
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Red >> 2));
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Green >> 2));
|
||||
VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Blue >> 2));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -757,16 +787,16 @@ SetDefaultPalette (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN RedIndex;
|
||||
UINTN GreenIndex;
|
||||
UINTN BlueIndex;
|
||||
UINTN Index;
|
||||
UINTN RedIndex;
|
||||
UINTN GreenIndex;
|
||||
UINTN BlueIndex;
|
||||
|
||||
Index = 0;
|
||||
for (RedIndex = 0; RedIndex < 8; RedIndex++) {
|
||||
for (GreenIndex = 0; GreenIndex < 8; GreenIndex++) {
|
||||
for (BlueIndex = 0; BlueIndex < 4; BlueIndex++) {
|
||||
SetPaletteColor (Private, Index, (UINT8) (RedIndex << 5), (UINT8) (GreenIndex << 5), (UINT8) (BlueIndex << 6));
|
||||
SetPaletteColor (Private, Index, (UINT8)(RedIndex << 5), (UINT8)(GreenIndex << 5), (UINT8)(BlueIndex << 6));
|
||||
Index++;
|
||||
}
|
||||
}
|
||||
@@ -810,8 +840,8 @@ ClearScreen (
|
||||
VOID
|
||||
DrawLogo (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN ScreenWidth,
|
||||
UINTN ScreenHeight
|
||||
UINTN ScreenWidth,
|
||||
UINTN ScreenHeight
|
||||
)
|
||||
{
|
||||
}
|
||||
@@ -831,8 +861,8 @@ InitializeCirrusGraphicsMode (
|
||||
QEMU_VIDEO_CIRRUS_MODES *ModeData
|
||||
)
|
||||
{
|
||||
UINT8 Byte;
|
||||
UINTN Index;
|
||||
UINT8 Byte;
|
||||
UINTN Index;
|
||||
|
||||
outw (Private, SEQ_ADDRESS_REGISTER, 0x1206);
|
||||
outw (Private, SEQ_ADDRESS_REGISTER, 0x0012);
|
||||
@@ -843,7 +873,7 @@ InitializeCirrusGraphicsMode (
|
||||
|
||||
if (Private->Variant == QEMU_VIDEO_CIRRUS_5430) {
|
||||
outb (Private, SEQ_ADDRESS_REGISTER, 0x0f);
|
||||
Byte = (UINT8) ((inb (Private, SEQ_DATA_REGISTER) & 0xc7) ^ 0x30);
|
||||
Byte = (UINT8)((inb (Private, SEQ_DATA_REGISTER) & 0xc7) ^ 0x30);
|
||||
outb (Private, SEQ_DATA_REGISTER, Byte);
|
||||
}
|
||||
|
||||
@@ -853,17 +883,17 @@ InitializeCirrusGraphicsMode (
|
||||
outw (Private, CRTC_ADDRESS_REGISTER, 0x2011);
|
||||
|
||||
for (Index = 0; Index < 28; Index++) {
|
||||
outw (Private, CRTC_ADDRESS_REGISTER, (UINT16) ((ModeData->CrtcSettings[Index] << 8) | Index));
|
||||
outw (Private, CRTC_ADDRESS_REGISTER, (UINT16)((ModeData->CrtcSettings[Index] << 8) | Index));
|
||||
}
|
||||
|
||||
for (Index = 0; Index < 9; Index++) {
|
||||
outw (Private, GRAPH_ADDRESS_REGISTER, (UINT16) ((GraphicsController[Index] << 8) | Index));
|
||||
outw (Private, GRAPH_ADDRESS_REGISTER, (UINT16)((GraphicsController[Index] << 8) | Index));
|
||||
}
|
||||
|
||||
inb (Private, INPUT_STATUS_1_REGISTER);
|
||||
|
||||
for (Index = 0; Index < 21; Index++) {
|
||||
outb (Private, ATT_ADDRESS_REGISTER, (UINT8) Index);
|
||||
outb (Private, ATT_ADDRESS_REGISTER, (UINT8)Index);
|
||||
outb (Private, ATT_ADDRESS_REGISTER, AttributeController[Index]);
|
||||
}
|
||||
|
||||
@@ -885,21 +915,21 @@ BochsWrite (
|
||||
UINT16 Data
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) {
|
||||
Status = Private->PciIo->Mem.Write (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PCI_BAR_IDX2,
|
||||
0x500 + (Reg << 1),
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PCI_BAR_IDX2,
|
||||
0x500 + (Reg << 1),
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
} else {
|
||||
outw (Private, VBE_DISPI_IOPORT_INDEX, Reg);
|
||||
outw (Private, VBE_DISPI_IOPORT_DATA, Data);
|
||||
outw (Private, VBE_DISPI_IOPORT_DATA, Data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -909,23 +939,24 @@ BochsRead (
|
||||
UINT16 Reg
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT16 Data;
|
||||
EFI_STATUS Status;
|
||||
UINT16 Data;
|
||||
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) {
|
||||
Status = Private->PciIo->Mem.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PCI_BAR_IDX2,
|
||||
0x500 + (Reg << 1),
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PCI_BAR_IDX2,
|
||||
0x500 + (Reg << 1),
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
} else {
|
||||
outw (Private, VBE_DISPI_IOPORT_INDEX, Reg);
|
||||
Data = inw (Private, VBE_DISPI_IOPORT_DATA);
|
||||
}
|
||||
|
||||
return Data;
|
||||
}
|
||||
|
||||
@@ -936,17 +967,17 @@ VgaOutb (
|
||||
UINT8 Data
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) {
|
||||
Status = Private->PciIo->Mem.Write (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
PCI_BAR_IDX2,
|
||||
0x400 - 0x3c0 + Reg,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
PCI_BAR_IDX2,
|
||||
0x400 - 0x3c0 + Reg,
|
||||
1,
|
||||
&Data
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
} else {
|
||||
outb (Private, Reg, Data);
|
||||
@@ -956,28 +987,36 @@ VgaOutb (
|
||||
VOID
|
||||
InitializeBochsGraphicsMode (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
QEMU_VIDEO_BOCHS_MODES *ModeData
|
||||
QEMU_VIDEO_BOCHS_MODES *ModeData
|
||||
)
|
||||
{
|
||||
DEBUG ((DEBUG_INFO, "InitializeBochsGraphicsMode: %dx%d @ %d\n",
|
||||
ModeData->Width, ModeData->Height, ModeData->ColorDepth));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"InitializeBochsGraphicsMode: %dx%d @ %d\n",
|
||||
ModeData->Width,
|
||||
ModeData->Height,
|
||||
ModeData->ColorDepth
|
||||
));
|
||||
|
||||
/* unblank */
|
||||
VgaOutb (Private, ATT_ADDRESS_REGISTER, 0x20);
|
||||
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_BANK, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_X_OFFSET, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_Y_OFFSET, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_BANK, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_X_OFFSET, 0);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_Y_OFFSET, 0);
|
||||
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_BPP, (UINT16) ModeData->ColorDepth);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16) ModeData->Width);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16) ModeData->Width);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16) ModeData->Height);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16) ModeData->Height);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_BPP, (UINT16)ModeData->ColorDepth);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16)ModeData->Width);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16)ModeData->Width);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16)ModeData->Height);
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16)ModeData->Height);
|
||||
|
||||
BochsWrite (Private, VBE_DISPI_INDEX_ENABLE,
|
||||
VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);
|
||||
BochsWrite (
|
||||
Private,
|
||||
VBE_DISPI_INDEX_ENABLE,
|
||||
VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED
|
||||
);
|
||||
|
||||
SetDefaultPalette (Private);
|
||||
ClearScreen (Private);
|
||||
@@ -986,11 +1025,11 @@ InitializeBochsGraphicsMode (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitializeQemuVideo (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = EfiLibInstallDriverBindingComponentName2 (
|
||||
ImageHandle,
|
||||
|
@@ -12,52 +12,52 @@
|
||||
STATIC
|
||||
VOID
|
||||
QemuVideoCompleteModeInfo (
|
||||
IN QEMU_VIDEO_MODE_DATA *ModeData,
|
||||
IN QEMU_VIDEO_MODE_DATA *ModeData,
|
||||
OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info
|
||||
)
|
||||
{
|
||||
Info->Version = 0;
|
||||
if (ModeData->ColorDepth == 8) {
|
||||
Info->PixelFormat = PixelBitMask;
|
||||
Info->PixelInformation.RedMask = PIXEL_RED_MASK;
|
||||
Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK;
|
||||
Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK;
|
||||
Info->PixelFormat = PixelBitMask;
|
||||
Info->PixelInformation.RedMask = PIXEL_RED_MASK;
|
||||
Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK;
|
||||
Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK;
|
||||
Info->PixelInformation.ReservedMask = 0;
|
||||
} else if (ModeData->ColorDepth == 24) {
|
||||
Info->PixelFormat = PixelBitMask;
|
||||
Info->PixelInformation.RedMask = PIXEL24_RED_MASK;
|
||||
Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK;
|
||||
Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK;
|
||||
Info->PixelFormat = PixelBitMask;
|
||||
Info->PixelInformation.RedMask = PIXEL24_RED_MASK;
|
||||
Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK;
|
||||
Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK;
|
||||
Info->PixelInformation.ReservedMask = 0;
|
||||
} else if (ModeData->ColorDepth == 32) {
|
||||
DEBUG ((DEBUG_INFO, "PixelBlueGreenRedReserved8BitPerColor\n"));
|
||||
Info->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;
|
||||
}
|
||||
|
||||
Info->PixelsPerScanLine = Info->HorizontalResolution;
|
||||
}
|
||||
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
QemuVideoCompleteModeData (
|
||||
IN QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode
|
||||
IN QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode
|
||||
)
|
||||
{
|
||||
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
|
||||
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
|
||||
ModeData = &Private->ModeData[Mode->Mode];
|
||||
Info = Mode->Info;
|
||||
Info = Mode->Info;
|
||||
QemuVideoCompleteModeInfo (ModeData, Info);
|
||||
|
||||
Private->PciIo->GetBarAttributes (
|
||||
Private->PciIo,
|
||||
Private->FrameBufferVramBarIndex,
|
||||
NULL,
|
||||
(VOID**) &FrameBufDesc
|
||||
);
|
||||
Private->PciIo,
|
||||
Private->FrameBufferVramBarIndex,
|
||||
NULL,
|
||||
(VOID **)&FrameBufDesc
|
||||
);
|
||||
|
||||
Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin;
|
||||
Mode->FrameBufferSize = Info->HorizontalResolution * Info->VerticalResolution;
|
||||
@@ -65,8 +65,12 @@ QemuVideoCompleteModeData (
|
||||
Mode->FrameBufferSize = EFI_PAGES_TO_SIZE (
|
||||
EFI_SIZE_TO_PAGES (Mode->FrameBufferSize)
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n",
|
||||
Mode->FrameBufferBase, (UINT64)Mode->FrameBufferSize));
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n",
|
||||
Mode->FrameBufferBase,
|
||||
(UINT64)Mode->FrameBufferSize
|
||||
));
|
||||
|
||||
FreePool (FrameBufDesc);
|
||||
return EFI_SUCCESS;
|
||||
@@ -83,6 +87,7 @@ QemuVideoGraphicsOutputQueryMode (
|
||||
OUT UINTN *SizeOfInfo,
|
||||
OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
@@ -109,7 +114,7 @@ Routine Description:
|
||||
|
||||
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);
|
||||
|
||||
if (Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) {
|
||||
if ((Info == NULL) || (SizeOfInfo == NULL) || (ModeNumber >= This->Mode->MaxMode)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -120,7 +125,7 @@ Routine Description:
|
||||
|
||||
*SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
|
||||
|
||||
ModeData = &Private->ModeData[ModeNumber];
|
||||
ModeData = &Private->ModeData[ModeNumber];
|
||||
(*Info)->HorizontalResolution = ModeData->HorizontalResolution;
|
||||
(*Info)->VerticalResolution = ModeData->VerticalResolution;
|
||||
QemuVideoCompleteModeInfo (ModeData, *Info);
|
||||
@@ -131,9 +136,10 @@ Routine Description:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoGraphicsOutputSetMode (
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN UINT32 ModeNumber
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN UINT32 ModeNumber
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
@@ -151,10 +157,10 @@ Routine Description:
|
||||
|
||||
--*/
|
||||
{
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
RETURN_STATUS Status;
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
RETURN_STATUS Status;
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black;
|
||||
|
||||
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);
|
||||
|
||||
@@ -165,23 +171,23 @@ Routine Description:
|
||||
ModeData = &Private->ModeData[ModeNumber];
|
||||
|
||||
switch (Private->Variant) {
|
||||
case QEMU_VIDEO_CIRRUS_5430:
|
||||
case QEMU_VIDEO_CIRRUS_5446:
|
||||
InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]);
|
||||
break;
|
||||
case QEMU_VIDEO_BOCHS_MMIO:
|
||||
case QEMU_VIDEO_BOCHS:
|
||||
InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
|
||||
break;
|
||||
default:
|
||||
ASSERT (FALSE);
|
||||
return EFI_DEVICE_ERROR;
|
||||
case QEMU_VIDEO_CIRRUS_5430:
|
||||
case QEMU_VIDEO_CIRRUS_5446:
|
||||
InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]);
|
||||
break;
|
||||
case QEMU_VIDEO_BOCHS_MMIO:
|
||||
case QEMU_VIDEO_BOCHS:
|
||||
InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
|
||||
break;
|
||||
default:
|
||||
ASSERT (FALSE);
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
This->Mode->Mode = ModeNumber;
|
||||
This->Mode->Mode = ModeNumber;
|
||||
This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution;
|
||||
This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;
|
||||
This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
|
||||
This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;
|
||||
This->Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
|
||||
|
||||
QemuVideoCompleteModeData (Private, This->Mode);
|
||||
|
||||
@@ -189,7 +195,7 @@ Routine Description:
|
||||
// Re-initialize the frame buffer configure when mode changes.
|
||||
//
|
||||
Status = FrameBufferBltConfigure (
|
||||
(VOID*) (UINTN) This->Mode->FrameBufferBase,
|
||||
(VOID *)(UINTN)This->Mode->FrameBufferBase,
|
||||
This->Mode->Info,
|
||||
Private->FrameBufferBltConfigure,
|
||||
&Private->FrameBufferBltConfigureSize
|
||||
@@ -201,6 +207,7 @@ Routine Description:
|
||||
if (Private->FrameBufferBltConfigure != NULL) {
|
||||
FreePool (Private->FrameBufferBltConfigure);
|
||||
}
|
||||
|
||||
Private->FrameBufferBltConfigure =
|
||||
AllocatePool (Private->FrameBufferBltConfigureSize);
|
||||
ASSERT (Private->FrameBufferBltConfigure != NULL);
|
||||
@@ -209,12 +216,13 @@ Routine Description:
|
||||
// Create the configuration for FrameBufferBltLib
|
||||
//
|
||||
Status = FrameBufferBltConfigure (
|
||||
(VOID*) (UINTN) This->Mode->FrameBufferBase,
|
||||
This->Mode->Info,
|
||||
Private->FrameBufferBltConfigure,
|
||||
&Private->FrameBufferBltConfigureSize
|
||||
);
|
||||
(VOID *)(UINTN)This->Mode->FrameBufferBase,
|
||||
This->Mode->Info,
|
||||
Private->FrameBufferBltConfigure,
|
||||
&Private->FrameBufferBltConfigureSize
|
||||
);
|
||||
}
|
||||
|
||||
ASSERT (Status == RETURN_SUCCESS);
|
||||
|
||||
//
|
||||
@@ -225,9 +233,12 @@ Routine Description:
|
||||
Private->FrameBufferBltConfigure,
|
||||
&Black,
|
||||
EfiBltVideoFill,
|
||||
0, 0,
|
||||
0, 0,
|
||||
This->Mode->Info->HorizontalResolution, This->Mode->Info->VerticalResolution,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
This->Mode->Info->HorizontalResolution,
|
||||
This->Mode->Info->VerticalResolution,
|
||||
0
|
||||
);
|
||||
ASSERT_RETURN_ERROR (Status);
|
||||
@@ -238,17 +249,18 @@ Routine Description:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoGraphicsOutputBlt (
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
|
||||
IN UINTN SourceX,
|
||||
IN UINTN SourceY,
|
||||
IN UINTN DestinationX,
|
||||
IN UINTN DestinationY,
|
||||
IN UINTN Width,
|
||||
IN UINTN Height,
|
||||
IN UINTN Delta
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
|
||||
IN UINTN SourceX,
|
||||
IN UINTN SourceY,
|
||||
IN UINTN DestinationX,
|
||||
IN UINTN DestinationY,
|
||||
IN UINTN Width,
|
||||
IN UINTN Height,
|
||||
IN UINTN Delta
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
@@ -278,9 +290,9 @@ Returns:
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OriginalTPL;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OriginalTPL;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
|
||||
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);
|
||||
//
|
||||
@@ -291,27 +303,27 @@ Returns:
|
||||
OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
|
||||
switch (BltOperation) {
|
||||
case EfiBltVideoToBltBuffer:
|
||||
case EfiBltBufferToVideo:
|
||||
case EfiBltVideoFill:
|
||||
case EfiBltVideoToVideo:
|
||||
Status = FrameBufferBlt (
|
||||
Private->FrameBufferBltConfigure,
|
||||
BltBuffer,
|
||||
BltOperation,
|
||||
SourceX,
|
||||
SourceY,
|
||||
DestinationX,
|
||||
DestinationY,
|
||||
Width,
|
||||
Height,
|
||||
Delta
|
||||
);
|
||||
break;
|
||||
case EfiBltVideoToBltBuffer:
|
||||
case EfiBltBufferToVideo:
|
||||
case EfiBltVideoFill:
|
||||
case EfiBltVideoToVideo:
|
||||
Status = FrameBufferBlt (
|
||||
Private->FrameBufferBltConfigure,
|
||||
BltBuffer,
|
||||
BltOperation,
|
||||
SourceX,
|
||||
SourceY,
|
||||
DestinationX,
|
||||
DestinationY,
|
||||
Width,
|
||||
Height,
|
||||
Delta
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
break;
|
||||
default:
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
break;
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OriginalTPL);
|
||||
@@ -324,9 +336,8 @@ QemuVideoGraphicsOutputConstructor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||
|
||||
EFI_STATUS Status;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
|
||||
|
||||
GraphicsOutput = &Private->GraphicsOutput;
|
||||
GraphicsOutput->QueryMode = QemuVideoGraphicsOutputQueryMode;
|
||||
@@ -339,7 +350,7 @@ QemuVideoGraphicsOutputConstructor (
|
||||
Status = gBS->AllocatePool (
|
||||
EfiBootServicesData,
|
||||
sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE),
|
||||
(VOID **) &Private->GraphicsOutput.Mode
|
||||
(VOID **)&Private->GraphicsOutput.Mode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
@@ -348,12 +359,13 @@ QemuVideoGraphicsOutputConstructor (
|
||||
Status = gBS->AllocatePool (
|
||||
EfiBootServicesData,
|
||||
sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION),
|
||||
(VOID **) &Private->GraphicsOutput.Mode->Info
|
||||
(VOID **)&Private->GraphicsOutput.Mode->Info
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto FreeMode;
|
||||
}
|
||||
Private->GraphicsOutput.Mode->MaxMode = (UINT32) Private->MaxMode;
|
||||
|
||||
Private->GraphicsOutput.Mode->MaxMode = (UINT32)Private->MaxMode;
|
||||
Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
|
||||
Private->FrameBufferBltConfigure = NULL;
|
||||
Private->FrameBufferBltConfigureSize = 0;
|
||||
@@ -388,6 +400,7 @@ EFI_STATUS
|
||||
QemuVideoGraphicsOutputDestructor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
@@ -408,6 +421,7 @@ Returns:
|
||||
if (Private->GraphicsOutput.Mode->Info != NULL) {
|
||||
gBS->FreePool (Private->GraphicsOutput.Mode->Info);
|
||||
}
|
||||
|
||||
gBS->FreePool (Private->GraphicsOutput.Mode);
|
||||
}
|
||||
|
||||
|
@@ -9,7 +9,6 @@
|
||||
|
||||
#include "Qemu.h"
|
||||
|
||||
|
||||
///
|
||||
/// Generic Attribute Controller Register Settings
|
||||
///
|
||||
@@ -22,33 +21,33 @@ UINT8 AttributeController[21] = {
|
||||
///
|
||||
/// Generic Graphics Controller Register Settings
|
||||
///
|
||||
UINT8 GraphicsController[9] = {
|
||||
UINT8 GraphicsController[9] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF
|
||||
};
|
||||
|
||||
//
|
||||
// 640 x 480 x 256 color @ 60 Hertz
|
||||
//
|
||||
UINT8 Crtc_640_480_256_60[28] = {
|
||||
UINT8 Crtc_640_480_256_60[28] = {
|
||||
0x5d, 0x4f, 0x50, 0x82, 0x53, 0x9f, 0x00, 0x3e,
|
||||
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe1, 0x83, 0xdf, 0x50, 0x00, 0xe7, 0x04, 0xe3,
|
||||
0xff, 0x00, 0x00, 0x22
|
||||
};
|
||||
|
||||
UINT8 Crtc_640_480_32bpp_60[28] = {
|
||||
UINT8 Crtc_640_480_32bpp_60[28] = {
|
||||
0x5d, 0x4f, 0x50, 0x82, 0x53, 0x9f, 0x00, 0x3e,
|
||||
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe1, 0x83, 0xdf, 0x40, 0x00, 0xe7, 0x04, 0xe3,
|
||||
0xff, 0x00, 0x00, 0x32
|
||||
};
|
||||
|
||||
UINT16 Seq_640_480_256_60[15] = {
|
||||
UINT16 Seq_640_480_256_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x7e0e, 0x2b1b, 0x2f1c, 0x301d, 0x331e
|
||||
};
|
||||
|
||||
UINT16 Seq_640_480_32bpp_60[15] = {
|
||||
UINT16 Seq_640_480_32bpp_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x7e0e, 0x2b1b, 0x2f1c, 0x301d, 0x331e
|
||||
};
|
||||
@@ -56,38 +55,38 @@ UINT16 Seq_640_480_32bpp_60[15] = {
|
||||
//
|
||||
// 800 x 600 x 256 color @ 60 Hertz
|
||||
//
|
||||
UINT8 Crtc_800_600_256_60[28] = {
|
||||
UINT8 Crtc_800_600_256_60[28] = {
|
||||
0x7F, 0x63, 0x64, 0x80, 0x6B, 0x1B, 0x72, 0xF0,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x58, 0x8C, 0x57, 0x64, 0x00, 0x5F, 0x91, 0xE3,
|
||||
0xFF, 0x00, 0x00, 0x22
|
||||
};
|
||||
|
||||
UINT8 Crtc_800_600_32bpp_60[28] = {
|
||||
UINT8 Crtc_800_600_32bpp_60[28] = {
|
||||
0x7F, 0x63, 0x64, 0x80, 0x6B, 0x1B, 0x72, 0xF0,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x58, 0x8C, 0x57, 0x90, 0x00, 0x5F, 0x91, 0xE3,
|
||||
0xFF, 0x00, 0x00, 0x32
|
||||
};
|
||||
|
||||
UINT16 Seq_800_600_256_60[15] = {
|
||||
UINT16 Seq_800_600_256_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x510e, 0x2b1b, 0x2f1c, 0x301d, 0x3a1e
|
||||
};
|
||||
|
||||
UINT16 Seq_800_600_32bpp_60[15] = {
|
||||
UINT16 Seq_800_600_32bpp_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x510e, 0x2b1b, 0x2f1c, 0x301d, 0x3a1e
|
||||
};
|
||||
|
||||
UINT8 Crtc_960_720_32bpp_60[28] = {
|
||||
UINT8 Crtc_960_720_32bpp_60[28] = {
|
||||
0xA3, 0x77, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x88, 0xCF, 0xe0, 0x00, 0x00, 0x64, 0xE3,
|
||||
0xFF, 0x4A, 0x00, 0x32
|
||||
};
|
||||
|
||||
UINT16 Seq_960_720_32bpp_60[15] = {
|
||||
UINT16 Seq_960_720_32bpp_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e
|
||||
};
|
||||
@@ -95,14 +94,14 @@ UINT16 Seq_960_720_32bpp_60[15] = {
|
||||
//
|
||||
// 1024 x 768 x 256 color @ 60 Hertz
|
||||
//
|
||||
UINT8 Crtc_1024_768_256_60[28] = {
|
||||
UINT8 Crtc_1024_768_256_60[28] = {
|
||||
0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x88, 0xFF, 0x80, 0x00, 0x00, 0x24, 0xE3,
|
||||
0xFF, 0x4A, 0x00, 0x22
|
||||
};
|
||||
|
||||
UINT16 Seq_1024_768_256_60[15] = {
|
||||
UINT16 Seq_1024_768_256_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e
|
||||
};
|
||||
@@ -110,26 +109,26 @@ UINT16 Seq_1024_768_256_60[15] = {
|
||||
//
|
||||
// 1024 x 768 x 24-bit color @ 60 Hertz
|
||||
//
|
||||
UINT8 Crtc_1024_768_24bpp_60[28] = {
|
||||
UINT8 Crtc_1024_768_24bpp_60[28] = {
|
||||
0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x88, 0xFF, 0x80, 0x00, 0x00, 0x24, 0xE3,
|
||||
0xFF, 0x4A, 0x00, 0x32
|
||||
};
|
||||
|
||||
UINT16 Seq_1024_768_24bpp_60[15] = {
|
||||
UINT16 Seq_1024_768_24bpp_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1507, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e
|
||||
};
|
||||
|
||||
UINT8 Crtc_1024_768_32bpp_60[28] = {
|
||||
UINT8 Crtc_1024_768_32bpp_60[28] = {
|
||||
0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD,
|
||||
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x02, 0x88, 0xFF, 0xe0, 0x00, 0x00, 0x64, 0xE3,
|
||||
0xFF, 0x4A, 0x00, 0x32
|
||||
};
|
||||
|
||||
UINT16 Seq_1024_768_32bpp_60[15] = {
|
||||
UINT16 Seq_1024_768_32bpp_60[15] = {
|
||||
0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b,
|
||||
0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e
|
||||
};
|
||||
@@ -138,14 +137,14 @@ UINT16 Seq_1024_768_32bpp_60[15] = {
|
||||
/// Table of supported video modes
|
||||
///
|
||||
QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[] = {
|
||||
// { 640, 480, 8, Crtc_640_480_256_60, Seq_640_480_256_60, 0xe3 },
|
||||
// { 800, 600, 8, Crtc_800_600_256_60, Seq_800_600_256_60, 0xef },
|
||||
{ 640, 480, 32, Crtc_640_480_32bpp_60, Seq_640_480_32bpp_60, 0xef },
|
||||
{ 800, 600, 32, Crtc_800_600_32bpp_60, Seq_800_600_32bpp_60, 0xef },
|
||||
// { 1024, 768, 8, Crtc_1024_768_256_60, Seq_1024_768_256_60, 0xef }
|
||||
// { 640, 480, 8, Crtc_640_480_256_60, Seq_640_480_256_60, 0xe3 },
|
||||
// { 800, 600, 8, Crtc_800_600_256_60, Seq_800_600_256_60, 0xef },
|
||||
{ 640, 480, 32, Crtc_640_480_32bpp_60, Seq_640_480_32bpp_60, 0xef },
|
||||
{ 800, 600, 32, Crtc_800_600_32bpp_60, Seq_800_600_32bpp_60, 0xef },
|
||||
// { 1024, 768, 8, Crtc_1024_768_256_60, Seq_1024_768_256_60, 0xef }
|
||||
{ 1024, 768, 24, Crtc_1024_768_24bpp_60, Seq_1024_768_24bpp_60, 0xef }
|
||||
// { 1024, 768, 32, Crtc_1024_768_32bpp_60, Seq_1024_768_32bpp_60, 0xef }
|
||||
// { 960, 720, 32, Crtc_960_720_32bpp_60, Seq_1024_768_32bpp_60, 0xef }
|
||||
// { 1024, 768, 32, Crtc_1024_768_32bpp_60, Seq_1024_768_32bpp_60, 0xef }
|
||||
// { 960, 720, 32, Crtc_960_720_32bpp_60, Seq_1024_768_32bpp_60, 0xef }
|
||||
};
|
||||
|
||||
#define QEMU_VIDEO_CIRRUS_MODE_COUNT \
|
||||
@@ -160,9 +159,9 @@ QemuVideoCirrusModeSetup (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
)
|
||||
{
|
||||
UINT32 Index;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
QEMU_VIDEO_CIRRUS_MODES *VideoMode;
|
||||
UINT32 Index;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
QEMU_VIDEO_CIRRUS_MODES *VideoMode;
|
||||
|
||||
//
|
||||
// Setup Video Modes
|
||||
@@ -173,25 +172,28 @@ QemuVideoCirrusModeSetup (
|
||||
if (Private->ModeData == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
ModeData = Private->ModeData;
|
||||
|
||||
ModeData = Private->ModeData;
|
||||
VideoMode = &QemuVideoCirrusModes[0];
|
||||
for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index ++) {
|
||||
ModeData->InternalModeIndex = Index;
|
||||
ModeData->HorizontalResolution = VideoMode->Width;
|
||||
ModeData->VerticalResolution = VideoMode->Height;
|
||||
ModeData->ColorDepth = VideoMode->ColorDepth;
|
||||
DEBUG ((DEBUG_INFO,
|
||||
for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index++) {
|
||||
ModeData->InternalModeIndex = Index;
|
||||
ModeData->HorizontalResolution = VideoMode->Width;
|
||||
ModeData->VerticalResolution = VideoMode->Height;
|
||||
ModeData->ColorDepth = VideoMode->ColorDepth;
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"Adding Mode %d as Cirrus Internal Mode %d: %dx%d, %d-bit\n",
|
||||
(INT32) (ModeData - Private->ModeData),
|
||||
(INT32)(ModeData - Private->ModeData),
|
||||
ModeData->InternalModeIndex,
|
||||
ModeData->HorizontalResolution,
|
||||
ModeData->VerticalResolution,
|
||||
ModeData->ColorDepth
|
||||
));
|
||||
|
||||
ModeData ++ ;
|
||||
VideoMode ++;
|
||||
ModeData++;
|
||||
VideoMode++;
|
||||
}
|
||||
|
||||
Private->MaxMode = ModeData - Private->ModeData;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
@@ -201,26 +203,26 @@ QemuVideoCirrusModeSetup (
|
||||
/// Table of supported video modes
|
||||
///
|
||||
QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[] = {
|
||||
{ 640, 480, 32 },
|
||||
{ 800, 480, 32 },
|
||||
{ 800, 600, 32 },
|
||||
{ 832, 624, 32 },
|
||||
{ 960, 640, 32 },
|
||||
{ 1024, 600, 32 },
|
||||
{ 1024, 768, 32 },
|
||||
{ 1152, 864, 32 },
|
||||
{ 1152, 870, 32 },
|
||||
{ 1280, 720, 32 },
|
||||
{ 1280, 760, 32 },
|
||||
{ 1280, 768, 32 },
|
||||
{ 1280, 800, 32 },
|
||||
{ 1280, 960, 32 },
|
||||
{ 640, 480, 32 },
|
||||
{ 800, 480, 32 },
|
||||
{ 800, 600, 32 },
|
||||
{ 832, 624, 32 },
|
||||
{ 960, 640, 32 },
|
||||
{ 1024, 600, 32 },
|
||||
{ 1024, 768, 32 },
|
||||
{ 1152, 864, 32 },
|
||||
{ 1152, 870, 32 },
|
||||
{ 1280, 720, 32 },
|
||||
{ 1280, 760, 32 },
|
||||
{ 1280, 768, 32 },
|
||||
{ 1280, 800, 32 },
|
||||
{ 1280, 960, 32 },
|
||||
{ 1280, 1024, 32 },
|
||||
{ 1360, 768, 32 },
|
||||
{ 1366, 768, 32 },
|
||||
{ 1360, 768, 32 },
|
||||
{ 1366, 768, 32 },
|
||||
{ 1400, 1050, 32 },
|
||||
{ 1440, 900, 32 },
|
||||
{ 1600, 900, 32 },
|
||||
{ 1440, 900, 32 },
|
||||
{ 1600, 900, 32 },
|
||||
{ 1600, 1200, 32 },
|
||||
{ 1680, 1050, 32 },
|
||||
{ 1920, 1080, 32 },
|
||||
@@ -249,10 +251,10 @@ QemuVideoBochsModeSetup (
|
||||
BOOLEAN IsQxl
|
||||
)
|
||||
{
|
||||
UINT32 AvailableFbSize;
|
||||
UINT32 Index;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
QEMU_VIDEO_BOCHS_MODES *VideoMode;
|
||||
UINT32 AvailableFbSize;
|
||||
UINT32 Index;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
QEMU_VIDEO_BOCHS_MODES *VideoMode;
|
||||
|
||||
//
|
||||
// Fetch the available framebuffer size.
|
||||
@@ -272,33 +274,64 @@ QemuVideoBochsModeSetup (
|
||||
// where it is also available.
|
||||
//
|
||||
if (IsQxl) {
|
||||
UINT32 Signature;
|
||||
UINT32 DrawStart;
|
||||
UINT32 Signature;
|
||||
UINT32 DrawStart;
|
||||
|
||||
Signature = 0;
|
||||
DrawStart = 0xFFFFFFFF;
|
||||
Signature = 0;
|
||||
DrawStart = 0xFFFFFFFF;
|
||||
AvailableFbSize = 0;
|
||||
if (EFI_ERROR (
|
||||
Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2, 0, 1, &Signature)) ||
|
||||
Signature != SIGNATURE_32 ('Q', 'X', 'R', 'O') ||
|
||||
Private->PciIo->Mem.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2,
|
||||
0,
|
||||
1,
|
||||
&Signature
|
||||
)
|
||||
) ||
|
||||
(Signature != SIGNATURE_32 ('Q', 'X', 'R', 'O')) ||
|
||||
EFI_ERROR (
|
||||
Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2, 36, 1, &DrawStart)) ||
|
||||
DrawStart != 0 ||
|
||||
Private->PciIo->Mem.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2,
|
||||
36,
|
||||
1,
|
||||
&DrawStart
|
||||
)
|
||||
) ||
|
||||
(DrawStart != 0) ||
|
||||
EFI_ERROR (
|
||||
Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2, 40, 1, &AvailableFbSize))) {
|
||||
DEBUG ((DEBUG_ERROR, "%a: can't read size of drawable buffer from QXL "
|
||||
"ROM\n", __FUNCTION__));
|
||||
Private->PciIo->Mem.Read (
|
||||
Private->PciIo,
|
||||
EfiPciIoWidthUint32,
|
||||
PCI_BAR_IDX2,
|
||||
40,
|
||||
1,
|
||||
&AvailableFbSize
|
||||
)
|
||||
))
|
||||
{
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"%a: can't read size of drawable buffer from QXL "
|
||||
"ROM\n",
|
||||
__FUNCTION__
|
||||
));
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
} else {
|
||||
AvailableFbSize = BochsRead (Private, VBE_DISPI_INDEX_VIDEO_MEMORY_64K);
|
||||
AvailableFbSize *= SIZE_64KB;
|
||||
}
|
||||
DEBUG ((DEBUG_INFO, "%a: AvailableFbSize=0x%x\n", __FUNCTION__,
|
||||
AvailableFbSize));
|
||||
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: AvailableFbSize=0x%x\n",
|
||||
__FUNCTION__,
|
||||
AvailableFbSize
|
||||
));
|
||||
|
||||
//
|
||||
// Setup Video Modes
|
||||
@@ -309,34 +342,37 @@ QemuVideoBochsModeSetup (
|
||||
if (Private->ModeData == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
ModeData = Private->ModeData;
|
||||
|
||||
ModeData = Private->ModeData;
|
||||
VideoMode = &QemuVideoBochsModes[0];
|
||||
for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index ++) {
|
||||
UINTN RequiredFbSize;
|
||||
for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {
|
||||
UINTN RequiredFbSize;
|
||||
|
||||
ASSERT (VideoMode->ColorDepth % 8 == 0);
|
||||
RequiredFbSize = (UINTN) VideoMode->Width * VideoMode->Height *
|
||||
RequiredFbSize = (UINTN)VideoMode->Width * VideoMode->Height *
|
||||
(VideoMode->ColorDepth / 8);
|
||||
if (RequiredFbSize <= AvailableFbSize) {
|
||||
ModeData->InternalModeIndex = Index;
|
||||
ModeData->HorizontalResolution = VideoMode->Width;
|
||||
ModeData->VerticalResolution = VideoMode->Height;
|
||||
ModeData->ColorDepth = VideoMode->ColorDepth;
|
||||
DEBUG ((DEBUG_INFO,
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"Adding Mode %d as Bochs Internal Mode %d: %dx%d, %d-bit\n",
|
||||
(INT32) (ModeData - Private->ModeData),
|
||||
(INT32)(ModeData - Private->ModeData),
|
||||
ModeData->InternalModeIndex,
|
||||
ModeData->HorizontalResolution,
|
||||
ModeData->VerticalResolution,
|
||||
ModeData->ColorDepth
|
||||
));
|
||||
|
||||
ModeData ++ ;
|
||||
ModeData++;
|
||||
}
|
||||
VideoMode ++;
|
||||
|
||||
VideoMode++;
|
||||
}
|
||||
|
||||
Private->MaxMode = ModeData - Private->ModeData;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@@ -13,7 +13,6 @@
|
||||
#ifndef _QEMU_H_
|
||||
#define _QEMU_H_
|
||||
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Protocol/GraphicsOutput.h>
|
||||
#include <Protocol/PciIo.h>
|
||||
@@ -37,33 +36,33 @@
|
||||
//
|
||||
// QEMU Video PCI Configuration Header values
|
||||
//
|
||||
#define CIRRUS_LOGIC_VENDOR_ID 0x1013
|
||||
#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8
|
||||
#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0
|
||||
#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8
|
||||
#define CIRRUS_LOGIC_VENDOR_ID 0x1013
|
||||
#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8
|
||||
#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0
|
||||
#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8
|
||||
|
||||
//
|
||||
// QEMU Vide Graphical Mode Data
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 InternalModeIndex; // points into card-specific mode table
|
||||
UINT32 HorizontalResolution;
|
||||
UINT32 VerticalResolution;
|
||||
UINT32 ColorDepth;
|
||||
UINT32 InternalModeIndex; // points into card-specific mode table
|
||||
UINT32 HorizontalResolution;
|
||||
UINT32 VerticalResolution;
|
||||
UINT32 ColorDepth;
|
||||
} QEMU_VIDEO_MODE_DATA;
|
||||
|
||||
#define PIXEL_RED_SHIFT 0
|
||||
#define PIXEL_GREEN_SHIFT 3
|
||||
#define PIXEL_BLUE_SHIFT 6
|
||||
#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 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) | \
|
||||
@@ -90,117 +89,116 @@ typedef enum {
|
||||
} QEMU_VIDEO_VARIANT;
|
||||
|
||||
typedef struct {
|
||||
UINT8 SubClass;
|
||||
UINT16 VendorId;
|
||||
UINT16 DeviceId;
|
||||
QEMU_VIDEO_VARIANT Variant;
|
||||
CHAR16 *Name;
|
||||
UINT8 SubClass;
|
||||
UINT16 VendorId;
|
||||
UINT16 DeviceId;
|
||||
QEMU_VIDEO_VARIANT Variant;
|
||||
CHAR16 *Name;
|
||||
} QEMU_VIDEO_CARD;
|
||||
|
||||
typedef struct {
|
||||
UINT64 Signature;
|
||||
EFI_HANDLE Handle;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT64 OriginalPciAttributes;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
|
||||
EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
|
||||
UINT64 Signature;
|
||||
EFI_HANDLE Handle;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
UINT64 OriginalPciAttributes;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
|
||||
EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
|
||||
|
||||
//
|
||||
// The next two fields match the client-visible
|
||||
// EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.MaxMode field.
|
||||
//
|
||||
UINTN MaxMode;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
UINTN MaxMode;
|
||||
QEMU_VIDEO_MODE_DATA *ModeData;
|
||||
|
||||
QEMU_VIDEO_VARIANT Variant;
|
||||
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
|
||||
UINTN FrameBufferBltConfigureSize;
|
||||
UINT8 FrameBufferVramBarIndex;
|
||||
QEMU_VIDEO_VARIANT Variant;
|
||||
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
|
||||
UINTN FrameBufferBltConfigureSize;
|
||||
UINT8 FrameBufferVramBarIndex;
|
||||
} QEMU_VIDEO_PRIVATE_DATA;
|
||||
|
||||
///
|
||||
/// Card-specific Video Mode structures
|
||||
///
|
||||
typedef struct {
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
UINT32 ColorDepth;
|
||||
UINT8 *CrtcSettings;
|
||||
UINT16 *SeqSettings;
|
||||
UINT8 MiscSetting;
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
UINT32 ColorDepth;
|
||||
UINT8 *CrtcSettings;
|
||||
UINT16 *SeqSettings;
|
||||
UINT8 MiscSetting;
|
||||
} QEMU_VIDEO_CIRRUS_MODES;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
UINT32 ColorDepth;
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
UINT32 ColorDepth;
|
||||
} QEMU_VIDEO_BOCHS_MODES;
|
||||
|
||||
#define QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \
|
||||
CR(a, QEMU_VIDEO_PRIVATE_DATA, GraphicsOutput, QEMU_VIDEO_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
|
||||
//
|
||||
// Global Variables
|
||||
//
|
||||
extern UINT8 AttributeController[];
|
||||
extern UINT8 GraphicsController[];
|
||||
extern UINT8 Crtc_640_480_256_60[];
|
||||
extern UINT16 Seq_640_480_256_60[];
|
||||
extern UINT8 Crtc_800_600_256_60[];
|
||||
extern UINT16 Seq_800_600_256_60[];
|
||||
extern UINT8 Crtc_1024_768_256_60[];
|
||||
extern UINT16 Seq_1024_768_256_60[];
|
||||
extern QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[];
|
||||
extern QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[];
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2;
|
||||
extern UINT8 AttributeController[];
|
||||
extern UINT8 GraphicsController[];
|
||||
extern UINT8 Crtc_640_480_256_60[];
|
||||
extern UINT16 Seq_640_480_256_60[];
|
||||
extern UINT8 Crtc_800_600_256_60[];
|
||||
extern UINT16 Seq_800_600_256_60[];
|
||||
extern UINT8 Crtc_1024_768_256_60[];
|
||||
extern UINT16 Seq_1024_768_256_60[];
|
||||
extern QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[];
|
||||
extern QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[];
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2;
|
||||
|
||||
//
|
||||
// Io Registers defined by VGA
|
||||
//
|
||||
#define CRTC_ADDRESS_REGISTER 0x3d4
|
||||
#define CRTC_DATA_REGISTER 0x3d5
|
||||
#define SEQ_ADDRESS_REGISTER 0x3c4
|
||||
#define SEQ_DATA_REGISTER 0x3c5
|
||||
#define GRAPH_ADDRESS_REGISTER 0x3ce
|
||||
#define GRAPH_DATA_REGISTER 0x3cf
|
||||
#define ATT_ADDRESS_REGISTER 0x3c0
|
||||
#define MISC_OUTPUT_REGISTER 0x3c2
|
||||
#define INPUT_STATUS_1_REGISTER 0x3da
|
||||
#define DAC_PIXEL_MASK_REGISTER 0x3c6
|
||||
#define PALETTE_INDEX_REGISTER 0x3c8
|
||||
#define PALETTE_DATA_REGISTER 0x3c9
|
||||
#define CRTC_ADDRESS_REGISTER 0x3d4
|
||||
#define CRTC_DATA_REGISTER 0x3d5
|
||||
#define SEQ_ADDRESS_REGISTER 0x3c4
|
||||
#define SEQ_DATA_REGISTER 0x3c5
|
||||
#define GRAPH_ADDRESS_REGISTER 0x3ce
|
||||
#define GRAPH_DATA_REGISTER 0x3cf
|
||||
#define ATT_ADDRESS_REGISTER 0x3c0
|
||||
#define MISC_OUTPUT_REGISTER 0x3c2
|
||||
#define INPUT_STATUS_1_REGISTER 0x3da
|
||||
#define DAC_PIXEL_MASK_REGISTER 0x3c6
|
||||
#define PALETTE_INDEX_REGISTER 0x3c8
|
||||
#define PALETTE_DATA_REGISTER 0x3c9
|
||||
|
||||
#define VBE_DISPI_IOPORT_INDEX 0x01CE
|
||||
#define VBE_DISPI_IOPORT_DATA 0x01D0
|
||||
#define VBE_DISPI_IOPORT_INDEX 0x01CE
|
||||
#define VBE_DISPI_IOPORT_DATA 0x01D0
|
||||
|
||||
#define VBE_DISPI_INDEX_ID 0x0
|
||||
#define VBE_DISPI_INDEX_XRES 0x1
|
||||
#define VBE_DISPI_INDEX_YRES 0x2
|
||||
#define VBE_DISPI_INDEX_BPP 0x3
|
||||
#define VBE_DISPI_INDEX_ENABLE 0x4
|
||||
#define VBE_DISPI_INDEX_BANK 0x5
|
||||
#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
|
||||
#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
|
||||
#define VBE_DISPI_INDEX_X_OFFSET 0x8
|
||||
#define VBE_DISPI_INDEX_Y_OFFSET 0x9
|
||||
#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
|
||||
#define VBE_DISPI_INDEX_ID 0x0
|
||||
#define VBE_DISPI_INDEX_XRES 0x1
|
||||
#define VBE_DISPI_INDEX_YRES 0x2
|
||||
#define VBE_DISPI_INDEX_BPP 0x3
|
||||
#define VBE_DISPI_INDEX_ENABLE 0x4
|
||||
#define VBE_DISPI_INDEX_BANK 0x5
|
||||
#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
|
||||
#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
|
||||
#define VBE_DISPI_INDEX_X_OFFSET 0x8
|
||||
#define VBE_DISPI_INDEX_Y_OFFSET 0x9
|
||||
#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
|
||||
|
||||
#define VBE_DISPI_ID0 0xB0C0
|
||||
#define VBE_DISPI_ID1 0xB0C1
|
||||
#define VBE_DISPI_ID2 0xB0C2
|
||||
#define VBE_DISPI_ID3 0xB0C3
|
||||
#define VBE_DISPI_ID4 0xB0C4
|
||||
#define VBE_DISPI_ID5 0xB0C5
|
||||
#define VBE_DISPI_ID0 0xB0C0
|
||||
#define VBE_DISPI_ID1 0xB0C1
|
||||
#define VBE_DISPI_ID2 0xB0C2
|
||||
#define VBE_DISPI_ID3 0xB0C3
|
||||
#define VBE_DISPI_ID4 0xB0C4
|
||||
#define VBE_DISPI_ID5 0xB0C5
|
||||
|
||||
#define VBE_DISPI_DISABLED 0x00
|
||||
#define VBE_DISPI_ENABLED 0x01
|
||||
#define VBE_DISPI_GETCAPS 0x02
|
||||
#define VBE_DISPI_8BIT_DAC 0x20
|
||||
#define VBE_DISPI_LFB_ENABLED 0x40
|
||||
#define VBE_DISPI_NOCLEARMEM 0x80
|
||||
#define VBE_DISPI_DISABLED 0x00
|
||||
#define VBE_DISPI_ENABLED 0x01
|
||||
#define VBE_DISPI_GETCAPS 0x02
|
||||
#define VBE_DISPI_8BIT_DAC 0x20
|
||||
#define VBE_DISPI_LFB_ENABLED 0x40
|
||||
#define VBE_DISPI_NOCLEARMEM 0x80
|
||||
|
||||
//
|
||||
// Graphics Output Hardware abstraction internal worker functions
|
||||
@@ -215,10 +213,10 @@ QemuVideoGraphicsOutputDestructor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// EFI_DRIVER_BINDING_PROTOCOL Protocol Interface
|
||||
//
|
||||
|
||||
/**
|
||||
TODO: Add function description
|
||||
|
||||
@@ -278,6 +276,7 @@ QemuVideoControllerDriverStop (
|
||||
//
|
||||
// EFI Component Name Functions
|
||||
//
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
@@ -325,7 +324,6 @@ QemuVideoComponentNameGetDriverName (
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
@@ -397,14 +395,13 @@ QemuVideoComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
QemuVideoComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Local Function Prototypes
|
||||
//
|
||||
@@ -423,10 +420,10 @@ InitializeBochsGraphicsMode (
|
||||
VOID
|
||||
SetPaletteColor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Index,
|
||||
UINT8 Red,
|
||||
UINT8 Green,
|
||||
UINT8 Blue
|
||||
UINTN Index,
|
||||
UINT8 Red,
|
||||
UINT8 Green,
|
||||
UINT8 Blue
|
||||
);
|
||||
|
||||
VOID
|
||||
@@ -437,34 +434,34 @@ SetDefaultPalette (
|
||||
VOID
|
||||
DrawLogo (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN ScreenWidth,
|
||||
UINTN ScreenHeight
|
||||
UINTN ScreenWidth,
|
||||
UINTN ScreenHeight
|
||||
);
|
||||
|
||||
VOID
|
||||
outb (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address,
|
||||
UINT8 Data
|
||||
UINTN Address,
|
||||
UINT8 Data
|
||||
);
|
||||
|
||||
VOID
|
||||
outw (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address,
|
||||
UINT16 Data
|
||||
UINTN Address,
|
||||
UINT16 Data
|
||||
);
|
||||
|
||||
UINT8
|
||||
inb (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address
|
||||
UINTN Address
|
||||
);
|
||||
|
||||
UINT16
|
||||
inw (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINTN Address
|
||||
UINTN Address
|
||||
);
|
||||
|
||||
VOID
|
||||
@@ -500,7 +497,8 @@ QemuVideoBochsModeSetup (
|
||||
|
||||
VOID
|
||||
InstallVbeShim (
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
);
|
||||
|
||||
#endif
|
||||
|
@@ -26,8 +26,8 @@
|
||||
|
||||
#pragma pack (1)
|
||||
typedef struct {
|
||||
UINT16 Offset;
|
||||
UINT16 Segment;
|
||||
UINT16 Offset;
|
||||
UINT16 Segment;
|
||||
} IVT_ENTRY;
|
||||
#pragma pack ()
|
||||
|
||||
@@ -35,7 +35,7 @@ typedef struct {
|
||||
// This string is displayed by Windows 2008 R2 SP1 in the Screen Resolution,
|
||||
// Advanced Settings dialog. It should be short.
|
||||
//
|
||||
STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)";
|
||||
STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)";
|
||||
|
||||
/**
|
||||
Install the VBE Info and VBE Mode Info structures, and the VBE service
|
||||
@@ -51,23 +51,23 @@ STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)";
|
||||
**/
|
||||
VOID
|
||||
InstallVbeShim (
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
)
|
||||
{
|
||||
EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF;
|
||||
UINTN Segment0Pages;
|
||||
IVT_ENTRY *Int0x10;
|
||||
EFI_STATUS Segment0AllocationStatus;
|
||||
UINT16 HostBridgeDevId;
|
||||
UINTN Pam1Address;
|
||||
UINT8 Pam1;
|
||||
UINTN SegmentCPages;
|
||||
VBE_INFO *VbeInfoFull;
|
||||
VBE_INFO_BASE *VbeInfo;
|
||||
UINT8 *Ptr;
|
||||
UINTN Printed;
|
||||
VBE_MODE_INFO *VbeModeInfo;
|
||||
EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF;
|
||||
UINTN Segment0Pages;
|
||||
IVT_ENTRY *Int0x10;
|
||||
EFI_STATUS Segment0AllocationStatus;
|
||||
UINT16 HostBridgeDevId;
|
||||
UINTN Pam1Address;
|
||||
UINT8 Pam1;
|
||||
UINTN SegmentCPages;
|
||||
VBE_INFO *VbeInfoFull;
|
||||
VBE_INFO_BASE *VbeInfo;
|
||||
UINT8 *Ptr;
|
||||
UINTN Printed;
|
||||
VBE_MODE_INFO *VbeModeInfo;
|
||||
|
||||
if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7)) == BIT0) {
|
||||
DEBUG ((
|
||||
@@ -95,8 +95,8 @@ InstallVbeShim (
|
||||
//
|
||||
// The allocation request may fail, eg. if LegacyBiosDxe has already run.
|
||||
//
|
||||
Segment0Pages = 1;
|
||||
Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY));
|
||||
Segment0Pages = 1;
|
||||
Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY));
|
||||
Segment0AllocationStatus = gBS->AllocatePages (
|
||||
AllocateAddress,
|
||||
EfiBootServicesCode,
|
||||
@@ -105,7 +105,7 @@ InstallVbeShim (
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Segment0AllocationStatus)) {
|
||||
EFI_PHYSICAL_ADDRESS Handler;
|
||||
EFI_PHYSICAL_ADDRESS Handler;
|
||||
|
||||
//
|
||||
// Check if a video BIOS handler has been installed previously -- we
|
||||
@@ -113,9 +113,14 @@ InstallVbeShim (
|
||||
// it's already present.
|
||||
//
|
||||
Handler = (Int0x10->Segment << 4) + Int0x10->Offset;
|
||||
if (Handler >= SegmentC && Handler < SegmentF) {
|
||||
DEBUG ((DEBUG_INFO, "%a: Video BIOS handler found at %04x:%04x\n",
|
||||
__FUNCTION__, Int0x10->Segment, Int0x10->Offset));
|
||||
if ((Handler >= SegmentC) && (Handler < SegmentF)) {
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: Video BIOS handler found at %04x:%04x\n",
|
||||
__FUNCTION__,
|
||||
Int0x10->Segment,
|
||||
Int0x10->Offset
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -145,26 +150,28 @@ InstallVbeShim (
|
||||
//
|
||||
HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);
|
||||
switch (HostBridgeDevId) {
|
||||
case INTEL_82441_DEVICE_ID:
|
||||
Pam1Address = PMC_REGISTER_PIIX4 (PIIX4_PAM1);
|
||||
break;
|
||||
case INTEL_Q35_MCH_DEVICE_ID:
|
||||
Pam1Address = DRAMC_REGISTER_Q35 (MCH_PAM1);
|
||||
break;
|
||||
default:
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"%a: unknown host bridge device ID: 0x%04x\n",
|
||||
__FUNCTION__,
|
||||
HostBridgeDevId
|
||||
));
|
||||
ASSERT (FALSE);
|
||||
case INTEL_82441_DEVICE_ID:
|
||||
Pam1Address = PMC_REGISTER_PIIX4 (PIIX4_PAM1);
|
||||
break;
|
||||
case INTEL_Q35_MCH_DEVICE_ID:
|
||||
Pam1Address = DRAMC_REGISTER_Q35 (MCH_PAM1);
|
||||
break;
|
||||
default:
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"%a: unknown host bridge device ID: 0x%04x\n",
|
||||
__FUNCTION__,
|
||||
HostBridgeDevId
|
||||
));
|
||||
ASSERT (FALSE);
|
||||
|
||||
if (!EFI_ERROR (Segment0AllocationStatus)) {
|
||||
gBS->FreePages (Segment0, Segment0Pages);
|
||||
}
|
||||
return;
|
||||
if (!EFI_ERROR (Segment0AllocationStatus)) {
|
||||
gBS->FreePages (Segment0, Segment0Pages);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// low nibble covers 0xC0000 to 0xC3FFF
|
||||
// high nibble covers 0xC4000 to 0xC7FFF
|
||||
@@ -201,12 +208,12 @@ InstallVbeShim (
|
||||
VbeInfo->Capabilities = BIT0; // DAC can be switched into 8-bit mode
|
||||
|
||||
VbeInfo->ModeListAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
*(UINT16*)Ptr = 0x00f1; // mode number
|
||||
Ptr += 2;
|
||||
*(UINT16*)Ptr = 0xFFFF; // mode list terminator
|
||||
Ptr += 2;
|
||||
*(UINT16 *)Ptr = 0x00f1; // mode number
|
||||
Ptr += 2;
|
||||
*(UINT16 *)Ptr = 0xFFFF; // mode list terminator
|
||||
Ptr += 2;
|
||||
|
||||
VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536);
|
||||
VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536);
|
||||
VbeInfo->OemSoftwareVersion = 0x0000;
|
||||
|
||||
VbeInfo->VendorNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
@@ -214,9 +221,12 @@ InstallVbeShim (
|
||||
Ptr += 5;
|
||||
|
||||
VbeInfo->ProductNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
Printed = AsciiSPrint ((CHAR8 *)Ptr,
|
||||
sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), "%s",
|
||||
CardName);
|
||||
Printed = AsciiSPrint (
|
||||
(CHAR8 *)Ptr,
|
||||
sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer),
|
||||
"%s",
|
||||
CardName
|
||||
);
|
||||
Ptr += Printed + 1;
|
||||
|
||||
VbeInfo->ProductRevAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
@@ -246,7 +256,7 @@ InstallVbeShim (
|
||||
// bit1: bit1: readable
|
||||
// bit2: writeable
|
||||
//
|
||||
VbeModeInfo->WindowAAttr = BIT2 | BIT1 | BIT0;
|
||||
VbeModeInfo->WindowAAttr = BIT2 | BIT1 | BIT0;
|
||||
|
||||
VbeModeInfo->WindowBAttr = 0x00;
|
||||
VbeModeInfo->WindowGranularityKB = 0x0040;
|
||||
@@ -309,8 +319,8 @@ InstallVbeShim (
|
||||
//
|
||||
// Second, point the Int10h vector at the shim.
|
||||
//
|
||||
Int0x10->Segment = (UINT16) ((UINT32)SegmentC >> 4);
|
||||
Int0x10->Offset = (UINT16) ((UINTN) (VbeModeInfo + 1) - SegmentC);
|
||||
Int0x10->Segment = (UINT16)((UINT32)SegmentC >> 4);
|
||||
Int0x10->Offset = (UINT16)((UINTN)(VbeModeInfo + 1) - SegmentC);
|
||||
|
||||
DEBUG ((DEBUG_INFO, "%a: VBE shim installed\n", __FUNCTION__));
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user