* [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support"
2018-10-24 6:40 [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
@ 2018-10-24 6:40 ` yuchenlin
2018-11-01 18:58 ` Philippe Mathieu-Daudé
2018-10-24 6:40 ` [PATCH 2/4] Revert "OvmfPkg/QemuVideoDxe: Helper functions for unaligned port I/O." yuchenlin
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: yuchenlin @ 2018-10-24 6:40 UTC (permalink / raw)
To: edk2-devel
Cc: jordan.l.justen, lersek, ard.biesheuvel, anthony.perard,
julien.grall, phil, kraxel, yuchenlin
From: yuchenlin <yuchenlin@synology.com>
This reverts commit c137d95081690d4877fbeb5f1856972e84ac32f2.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: yuchenlin <yuchenlin@synology.com>
---
OvmfPkg/QemuVideoDxe/Driver.c | 135 +------------------------
OvmfPkg/QemuVideoDxe/Gop.c | 65 +------------
OvmfPkg/QemuVideoDxe/Initialize.c | 157 ------------------------------
OvmfPkg/QemuVideoDxe/Qemu.h | 29 ------
4 files changed, 7 insertions(+), 379 deletions(-)
diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.c
index 73eb2cad05..2304afd1e6 100644
--- a/OvmfPkg/QemuVideoDxe/Driver.c
+++ b/OvmfPkg/QemuVideoDxe/Driver.c
@@ -14,10 +14,8 @@
**/
-#include <IndustryStandard/VmwareSvga.h>
-#include <IndustryStandard/Acpi.h>
#include "Qemu.h"
-#include "UnalignedIoInternal.h"
+#include <IndustryStandard/Acpi.h>
EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
QemuVideoControllerDriverSupported,
@@ -71,12 +69,6 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
0x1050,
QEMU_VIDEO_BOCHS_MMIO,
L"QEMU VirtIO VGA"
- },{
- PCI_CLASS_DISPLAY_VGA,
- VMWARE_PCI_VENDOR_ID_VMWARE,
- VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
- QEMU_VIDEO_VMWARE_SVGA,
- L"QEMU VMWare SVGA"
},{
0 /* end of list */
}
@@ -264,7 +256,6 @@ QemuVideoControllerDriverStart (
goto ClosePciIo;
}
Private->Variant = Card->Variant;
- Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
//
// IsQxl is based on the detected Card->Variant, which at a later point might
@@ -339,58 +330,6 @@ QemuVideoControllerDriverStart (
}
}
- //
- // Check if accessing Vmware SVGA interface works
- //
- if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *IoDesc;
- UINT32 TargetId;
- UINT32 SvgaIdRead;
-
- IoDesc = NULL;
- Status = Private->PciIo->GetBarAttributes (
- Private->PciIo,
- PCI_BAR_IDX0,
- NULL,
- (VOID**) &IoDesc
- );
- if (EFI_ERROR (Status) ||
- IoDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_IO ||
- IoDesc->AddrRangeMin > MAX_UINT16 + 1 - (VMWARE_SVGA_VALUE_PORT + 4)) {
- if (IoDesc != NULL) {
- FreePool (IoDesc);
- }
- Status = EFI_DEVICE_ERROR;
- goto RestoreAttributes;
- }
- Private->VmwareSvgaBasePort = (UINT16) IoDesc->AddrRangeMin;
- FreePool (IoDesc);
-
- TargetId = VMWARE_SVGA_ID_2;
- while (TRUE) {
- VmwareSvgaWrite (Private, VmwareSvgaRegId, TargetId);
- SvgaIdRead = VmwareSvgaRead (Private, VmwareSvgaRegId);
- if ((SvgaIdRead == TargetId) || (TargetId <= VMWARE_SVGA_ID_0)) {
- break;
- }
- TargetId--;
- }
-
- if (SvgaIdRead != TargetId) {
- DEBUG ((
- DEBUG_ERROR,
- "QemuVideo: QEMU_VIDEO_VMWARE_SVGA ID mismatch "
- "(got 0x%x, base address 0x%x)\n",
- SvgaIdRead,
- Private->VmwareSvgaBasePort
- ));
- Status = EFI_DEVICE_ERROR;
- goto RestoreAttributes;
- }
-
- Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
- }
-
//
// Get ParentDevicePath
//
@@ -446,9 +385,6 @@ QemuVideoControllerDriverStart (
case QEMU_VIDEO_BOCHS:
Status = QemuVideoBochsModeSetup (Private, IsQxl);
break;
- case QEMU_VIDEO_VMWARE_SVGA:
- Status = QemuVideoVmwareSvgaModeSetup (Private);
- break;
default:
ASSERT (FALSE);
Status = EFI_DEVICE_ERROR;
@@ -510,9 +446,6 @@ DestructQemuVideoGraphics:
FreeModeData:
FreePool (Private->ModeData);
- if (Private->VmwareSvgaModeInfo != NULL) {
- FreePool (Private->VmwareSvgaModeInfo);
- }
UninstallGopDevicePath:
gBS->UninstallProtocolInterface (Private->Handle,
@@ -634,9 +567,6 @@ QemuVideoControllerDriverStop (
);
FreePool (Private->ModeData);
- if (Private->VmwareSvgaModeInfo != NULL) {
- FreePool (Private->VmwareSvgaModeInfo);
- }
gBS->UninstallProtocolInterface (Private->Handle,
&gEfiDevicePathProtocolGuid, Private->GopDevicePath);
FreePool (Private->GopDevicePath);
@@ -834,7 +764,7 @@ ClearScreen (
Private->PciIo->Mem.Write (
Private->PciIo,
EfiPciIoWidthFillUint32,
- Private->FrameBufferVramBarIndex,
+ 0,
0,
0x400000 >> 2,
&Color
@@ -971,38 +901,6 @@ BochsRead (
return Data;
}
-VOID
-VmwareSvgaWrite (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- UINT16 Register,
- UINT32 Value
- )
-{
- UnalignedIoWrite32 (
- Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
- Register
- );
- UnalignedIoWrite32 (
- Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT,
- Value
- );
-}
-
-UINT32
-VmwareSvgaRead (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- UINT16 Register
- )
-{
- UnalignedIoWrite32 (
- Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
- Register
- );
- return UnalignedIoRead32 (
- Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT
- );
-}
-
VOID
VgaOutb (
QEMU_VIDEO_PRIVATE_DATA *Private,
@@ -1057,35 +955,6 @@ InitializeBochsGraphicsMode (
ClearScreen (Private);
}
-VOID
-InitializeVmwareSvgaGraphicsMode (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- QEMU_VIDEO_BOCHS_MODES *ModeData
- )
-{
- UINT32 Capabilities;
-
- VmwareSvgaWrite (Private, VmwareSvgaRegWidth, ModeData->Width);
- VmwareSvgaWrite (Private, VmwareSvgaRegHeight, ModeData->Height);
-
- Capabilities = VmwareSvgaRead (
- Private,
- VmwareSvgaRegCapabilities
- );
- if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
- VmwareSvgaWrite (
- Private,
- VmwareSvgaRegBitsPerPixel,
- ModeData->ColorDepth
- );
- }
-
- VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 1);
-
- SetDefaultPalette (Private);
- ClearScreen (Private);
-}
-
EFI_STATUS
EFIAPI
InitializeQemuVideo (
diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
index c9941ef138..d490fa7a2e 100644
--- a/OvmfPkg/QemuVideoDxe/Gop.c
+++ b/OvmfPkg/QemuVideoDxe/Gop.c
@@ -13,7 +13,6 @@
**/
-#include <IndustryStandard/VmwareSvga.h>
#include "Qemu.h"
STATIC
@@ -79,46 +78,6 @@ QemuVideoCompleteModeData (
return EFI_SUCCESS;
}
-STATIC
-EFI_STATUS
-QemuVideoVmwareSvgaCompleteModeData (
- IN QEMU_VIDEO_PRIVATE_DATA *Private,
- OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode
- )
-{
- EFI_STATUS Status;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;
- UINT32 BytesPerLine, FbOffset, BytesPerPixel;
-
- Info = Mode->Info;
- CopyMem (Info, &Private->VmwareSvgaModeInfo[Mode->Mode], sizeof (*Info));
- BytesPerPixel = Private->ModeData[Mode->Mode].ColorDepth / 8;
- BytesPerLine = Info->PixelsPerScanLine * BytesPerPixel;
-
- FbOffset = VmwareSvgaRead (Private, VmwareSvgaRegFbOffset);
-
- Status = Private->PciIo->GetBarAttributes (
- Private->PciIo,
- PCI_BAR_IDX1,
- NULL,
- (VOID**) &FrameBufDesc
- );
- if (EFI_ERROR (Status)) {
- return EFI_DEVICE_ERROR;
- }
-
- Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin + FbOffset;
- Mode->FrameBufferSize = BytesPerLine * Info->VerticalResolution;
- Mode->FrameBufferSize = EFI_PAGES_TO_SIZE (
- EFI_SIZE_TO_PAGES (Mode->FrameBufferSize)
- );
-
- FreePool (FrameBufDesc);
- return Status;
-}
-
-
//
// Graphics Output Protocol Member Functions
//
@@ -167,14 +126,10 @@ Routine Description:
*SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
- if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
- CopyMem (*Info, &Private->VmwareSvgaModeInfo[ModeNumber], sizeof (**Info));
- } else {
- ModeData = &Private->ModeData[ModeNumber];
- (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
- (*Info)->VerticalResolution = ModeData->VerticalResolution;
- QemuVideoCompleteModeInfo (ModeData, *Info);
- }
+ ModeData = &Private->ModeData[ModeNumber];
+ (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
+ (*Info)->VerticalResolution = ModeData->VerticalResolution;
+ QemuVideoCompleteModeInfo (ModeData, *Info);
return EFI_SUCCESS;
}
@@ -224,12 +179,6 @@ Routine Description:
case QEMU_VIDEO_BOCHS:
InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
break;
- case QEMU_VIDEO_VMWARE_SVGA:
- InitializeVmwareSvgaGraphicsMode (
- Private,
- &QemuVideoBochsModes[ModeData->InternalModeIndex]
- );
- break;
default:
ASSERT (FALSE);
return EFI_DEVICE_ERROR;
@@ -240,11 +189,7 @@ Routine Description:
This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;
This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
- if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
- QemuVideoVmwareSvgaCompleteModeData (Private, This->Mode);
- } else {
- QemuVideoCompleteModeData (Private, This->Mode);
- }
+ QemuVideoCompleteModeData (Private, This->Mode);
//
// Re-initialize the frame buffer configure when mode changes.
diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c b/OvmfPkg/QemuVideoDxe/Initialize.c
index 357124d628..d5d8cfef96 100644
--- a/OvmfPkg/QemuVideoDxe/Initialize.c
+++ b/OvmfPkg/QemuVideoDxe/Initialize.c
@@ -13,7 +13,6 @@
**/
-#include <IndustryStandard/VmwareSvga.h>
#include "Qemu.h"
@@ -347,159 +346,3 @@ QemuVideoBochsModeSetup (
return EFI_SUCCESS;
}
-EFI_STATUS
-QemuVideoVmwareSvgaModeSetup (
- QEMU_VIDEO_PRIVATE_DATA *Private
- )
-{
- EFI_STATUS Status;
- UINT32 FbSize;
- UINT32 MaxWidth, MaxHeight;
- UINT32 Capabilities;
- UINT32 BitsPerPixel;
- UINT32 Index;
- QEMU_VIDEO_MODE_DATA *ModeData;
- QEMU_VIDEO_BOCHS_MODES *VideoMode;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo;
-
- VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 0);
-
- Private->ModeData =
- AllocatePool (sizeof (Private->ModeData[0]) * QEMU_VIDEO_BOCHS_MODE_COUNT);
- if (Private->ModeData == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto ModeDataAllocError;
- }
-
- Private->VmwareSvgaModeInfo =
- AllocatePool (
- sizeof (Private->VmwareSvgaModeInfo[0]) * QEMU_VIDEO_BOCHS_MODE_COUNT
- );
- if (Private->VmwareSvgaModeInfo == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto ModeInfoAllocError;
- }
-
- FbSize = VmwareSvgaRead (Private, VmwareSvgaRegFbSize);
- MaxWidth = VmwareSvgaRead (Private, VmwareSvgaRegMaxWidth);
- MaxHeight = VmwareSvgaRead (Private, VmwareSvgaRegMaxHeight);
- Capabilities = VmwareSvgaRead (Private, VmwareSvgaRegCapabilities);
- if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
- BitsPerPixel = VmwareSvgaRead (
- Private,
- VmwareSvgaRegHostBitsPerPixel
- );
- VmwareSvgaWrite (
- Private,
- VmwareSvgaRegBitsPerPixel,
- BitsPerPixel
- );
- } else {
- BitsPerPixel = VmwareSvgaRead (
- Private,
- VmwareSvgaRegBitsPerPixel
- );
- }
-
- if (FbSize == 0 ||
- MaxWidth == 0 ||
- MaxHeight == 0 ||
- BitsPerPixel == 0 ||
- BitsPerPixel % 8 != 0) {
- Status = EFI_DEVICE_ERROR;
- goto Rollback;
- }
-
- ModeData = Private->ModeData;
- ModeInfo = Private->VmwareSvgaModeInfo;
- VideoMode = &QemuVideoBochsModes[0];
- for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {
- UINTN RequiredFbSize;
-
- RequiredFbSize = (UINTN) VideoMode->Width * VideoMode->Height *
- (BitsPerPixel / 8);
- if (RequiredFbSize <= FbSize &&
- VideoMode->Width <= MaxWidth &&
- VideoMode->Height <= MaxHeight) {
- UINT32 BytesPerLine;
- UINT32 RedMask, GreenMask, BlueMask, PixelMask;
-
- VmwareSvgaWrite (
- Private,
- VmwareSvgaRegWidth,
- VideoMode->Width
- );
- VmwareSvgaWrite (
- Private,
- VmwareSvgaRegHeight,
- VideoMode->Height
- );
-
- ModeData->InternalModeIndex = Index;
- ModeData->HorizontalResolution = VideoMode->Width;
- ModeData->VerticalResolution = VideoMode->Height;
- ModeData->ColorDepth = BitsPerPixel;
-
- //
- // Setting VmwareSvgaRegWidth/VmwareSvgaRegHeight actually changes
- // the device's display mode, so we save all properties of each mode up
- // front to avoid inadvertent mode changes later.
- //
- ModeInfo->Version = 0;
- ModeInfo->HorizontalResolution = ModeData->HorizontalResolution;
- ModeInfo->VerticalResolution = ModeData->VerticalResolution;
-
- ModeInfo->PixelFormat = PixelBitMask;
-
- RedMask = VmwareSvgaRead (Private, VmwareSvgaRegRedMask);
- ModeInfo->PixelInformation.RedMask = RedMask;
-
- GreenMask = VmwareSvgaRead (Private, VmwareSvgaRegGreenMask);
- ModeInfo->PixelInformation.GreenMask = GreenMask;
-
- BlueMask = VmwareSvgaRead (Private, VmwareSvgaRegBlueMask);
- ModeInfo->PixelInformation.BlueMask = BlueMask;
-
- //
- // Reserved mask is whatever bits in the pixel not containing RGB data,
- // so start with binary 1s for every bit in the pixel, then mask off
- // bits already used for RGB. Special case 32 to avoid undefined
- // behaviour in the shift.
- //
- if (BitsPerPixel == 32) {
- if (BlueMask == 0xff && GreenMask == 0xff00 && RedMask == 0xff0000) {
- ModeInfo->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;
- } else if (BlueMask == 0xff0000 &&
- GreenMask == 0xff00 &&
- RedMask == 0xff) {
- ModeInfo->PixelFormat = PixelRedGreenBlueReserved8BitPerColor;
- }
- PixelMask = MAX_UINT32;
- } else {
- PixelMask = (1u << BitsPerPixel) - 1;
- }
- ModeInfo->PixelInformation.ReservedMask =
- PixelMask & ~(RedMask | GreenMask | BlueMask);
-
- BytesPerLine = VmwareSvgaRead (Private, VmwareSvgaRegBytesPerLine);
- ModeInfo->PixelsPerScanLine = BytesPerLine / (BitsPerPixel / 8);
-
- ModeData++;
- ModeInfo++;
- }
- VideoMode++;
- }
- Private->MaxMode = ModeData - Private->ModeData;
- return EFI_SUCCESS;
-
-Rollback:
- FreePool (Private->VmwareSvgaModeInfo);
- Private->VmwareSvgaModeInfo = NULL;
-
-ModeInfoAllocError:
- FreePool (Private->ModeData);
- Private->ModeData = NULL;
-
-ModeDataAllocError:
- return Status;
-}
diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
index bc49f867a4..d7da761705 100644
--- a/OvmfPkg/QemuVideoDxe/Qemu.h
+++ b/OvmfPkg/QemuVideoDxe/Qemu.h
@@ -92,7 +92,6 @@ typedef enum {
QEMU_VIDEO_CIRRUS_5446,
QEMU_VIDEO_BOCHS,
QEMU_VIDEO_BOCHS_MMIO,
- QEMU_VIDEO_VMWARE_SVGA,
} QEMU_VIDEO_VARIANT;
typedef struct {
@@ -117,13 +116,10 @@ typedef struct {
//
UINTN MaxMode;
QEMU_VIDEO_MODE_DATA *ModeData;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *VmwareSvgaModeInfo;
QEMU_VIDEO_VARIANT Variant;
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
UINTN FrameBufferBltConfigureSize;
- UINT8 FrameBufferVramBarIndex;
- UINT16 VmwareSvgaBasePort;
} QEMU_VIDEO_PRIVATE_DATA;
///
@@ -507,34 +503,9 @@ QemuVideoBochsModeSetup (
BOOLEAN IsQxl
);
-EFI_STATUS
-QemuVideoVmwareSvgaModeSetup (
- QEMU_VIDEO_PRIVATE_DATA *Private
- );
-
VOID
InstallVbeShim (
IN CONST CHAR16 *CardName,
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
);
-
-VOID
-VmwareSvgaWrite (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- UINT16 Register,
- UINT32 Value
- );
-
-UINT32
-VmwareSvgaRead (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- UINT16 Register
- );
-
-VOID
-InitializeVmwareSvgaGraphicsMode (
- QEMU_VIDEO_PRIVATE_DATA *Private,
- QEMU_VIDEO_BOCHS_MODES *ModeData
- );
-
#endif
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support"
2018-10-24 6:40 ` [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support" yuchenlin
@ 2018-11-01 18:58 ` Philippe Mathieu-Daudé
2018-11-02 2:09 ` yuchenlin
0 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-11-01 18:58 UTC (permalink / raw)
To: yuchenlin, edk2-devel; +Cc: phil, jordan.l.justen, anthony.perard, lersek
Hi Yu-chen Lin,
On 24/10/18 8:40, yuchenlin@synology.com wrote:
> From: yuchenlin <yuchenlin@synology.com>
>
> This reverts commit c137d95081690d4877fbeb5f1856972e84ac32f2.
Can we have a comment here about why we need to revert this patch?
(same for patches 2 and 3).
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: yuchenlin <yuchenlin@synology.com>
> ---
> OvmfPkg/QemuVideoDxe/Driver.c | 135 +------------------------
> OvmfPkg/QemuVideoDxe/Gop.c | 65 +------------
> OvmfPkg/QemuVideoDxe/Initialize.c | 157 ------------------------------
> OvmfPkg/QemuVideoDxe/Qemu.h | 29 ------
> 4 files changed, 7 insertions(+), 379 deletions(-)
>
> diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.c
> index 73eb2cad05..2304afd1e6 100644
> --- a/OvmfPkg/QemuVideoDxe/Driver.c
> +++ b/OvmfPkg/QemuVideoDxe/Driver.c
> @@ -14,10 +14,8 @@
>
> **/
>
> -#include <IndustryStandard/VmwareSvga.h>
> -#include <IndustryStandard/Acpi.h>
> #include "Qemu.h"
> -#include "UnalignedIoInternal.h"
> +#include <IndustryStandard/Acpi.h>
>
> EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
> QemuVideoControllerDriverSupported,
> @@ -71,12 +69,6 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
> 0x1050,
> QEMU_VIDEO_BOCHS_MMIO,
> L"QEMU VirtIO VGA"
> - },{
> - PCI_CLASS_DISPLAY_VGA,
> - VMWARE_PCI_VENDOR_ID_VMWARE,
> - VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
> - QEMU_VIDEO_VMWARE_SVGA,
> - L"QEMU VMWare SVGA"
> },{
> 0 /* end of list */
> }
> @@ -264,7 +256,6 @@ QemuVideoControllerDriverStart (
> goto ClosePciIo;
> }
> Private->Variant = Card->Variant;
> - Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
>
> //
> // IsQxl is based on the detected Card->Variant, which at a later point might
> @@ -339,58 +330,6 @@ QemuVideoControllerDriverStart (
> }
> }
>
> - //
> - // Check if accessing Vmware SVGA interface works
> - //
> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *IoDesc;
> - UINT32 TargetId;
> - UINT32 SvgaIdRead;
> -
> - IoDesc = NULL;
> - Status = Private->PciIo->GetBarAttributes (
> - Private->PciIo,
> - PCI_BAR_IDX0,
> - NULL,
> - (VOID**) &IoDesc
> - );
> - if (EFI_ERROR (Status) ||
> - IoDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_IO ||
> - IoDesc->AddrRangeMin > MAX_UINT16 + 1 - (VMWARE_SVGA_VALUE_PORT + 4)) {
> - if (IoDesc != NULL) {
> - FreePool (IoDesc);
> - }
> - Status = EFI_DEVICE_ERROR;
> - goto RestoreAttributes;
> - }
> - Private->VmwareSvgaBasePort = (UINT16) IoDesc->AddrRangeMin;
> - FreePool (IoDesc);
> -
> - TargetId = VMWARE_SVGA_ID_2;
> - while (TRUE) {
> - VmwareSvgaWrite (Private, VmwareSvgaRegId, TargetId);
> - SvgaIdRead = VmwareSvgaRead (Private, VmwareSvgaRegId);
> - if ((SvgaIdRead == TargetId) || (TargetId <= VMWARE_SVGA_ID_0)) {
> - break;
> - }
> - TargetId--;
> - }
> -
> - if (SvgaIdRead != TargetId) {
> - DEBUG ((
> - DEBUG_ERROR,
> - "QemuVideo: QEMU_VIDEO_VMWARE_SVGA ID mismatch "
> - "(got 0x%x, base address 0x%x)\n",
> - SvgaIdRead,
> - Private->VmwareSvgaBasePort
> - ));
> - Status = EFI_DEVICE_ERROR;
> - goto RestoreAttributes;
> - }
> -
> - Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
> - }
> -
> //
> // Get ParentDevicePath
> //
> @@ -446,9 +385,6 @@ QemuVideoControllerDriverStart (
> case QEMU_VIDEO_BOCHS:
> Status = QemuVideoBochsModeSetup (Private, IsQxl);
> break;
> - case QEMU_VIDEO_VMWARE_SVGA:
> - Status = QemuVideoVmwareSvgaModeSetup (Private);
> - break;
> default:
> ASSERT (FALSE);
> Status = EFI_DEVICE_ERROR;
> @@ -510,9 +446,6 @@ DestructQemuVideoGraphics:
>
> FreeModeData:
> FreePool (Private->ModeData);
> - if (Private->VmwareSvgaModeInfo != NULL) {
> - FreePool (Private->VmwareSvgaModeInfo);
> - }
>
> UninstallGopDevicePath:
> gBS->UninstallProtocolInterface (Private->Handle,
> @@ -634,9 +567,6 @@ QemuVideoControllerDriverStop (
> );
>
> FreePool (Private->ModeData);
> - if (Private->VmwareSvgaModeInfo != NULL) {
> - FreePool (Private->VmwareSvgaModeInfo);
> - }
> gBS->UninstallProtocolInterface (Private->Handle,
> &gEfiDevicePathProtocolGuid, Private->GopDevicePath);
> FreePool (Private->GopDevicePath);
> @@ -834,7 +764,7 @@ ClearScreen (
> Private->PciIo->Mem.Write (
> Private->PciIo,
> EfiPciIoWidthFillUint32,
> - Private->FrameBufferVramBarIndex,
> + 0,
> 0,
> 0x400000 >> 2,
> &Color
> @@ -971,38 +901,6 @@ BochsRead (
> return Data;
> }
>
> -VOID
> -VmwareSvgaWrite (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - UINT16 Register,
> - UINT32 Value
> - )
> -{
> - UnalignedIoWrite32 (
> - Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
> - Register
> - );
> - UnalignedIoWrite32 (
> - Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT,
> - Value
> - );
> -}
> -
> -UINT32
> -VmwareSvgaRead (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - UINT16 Register
> - )
> -{
> - UnalignedIoWrite32 (
> - Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
> - Register
> - );
> - return UnalignedIoRead32 (
> - Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT
> - );
> -}
> -
> VOID
> VgaOutb (
> QEMU_VIDEO_PRIVATE_DATA *Private,
> @@ -1057,35 +955,6 @@ InitializeBochsGraphicsMode (
> ClearScreen (Private);
> }
>
> -VOID
> -InitializeVmwareSvgaGraphicsMode (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - QEMU_VIDEO_BOCHS_MODES *ModeData
> - )
> -{
> - UINT32 Capabilities;
> -
> - VmwareSvgaWrite (Private, VmwareSvgaRegWidth, ModeData->Width);
> - VmwareSvgaWrite (Private, VmwareSvgaRegHeight, ModeData->Height);
> -
> - Capabilities = VmwareSvgaRead (
> - Private,
> - VmwareSvgaRegCapabilities
> - );
> - if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
> - VmwareSvgaWrite (
> - Private,
> - VmwareSvgaRegBitsPerPixel,
> - ModeData->ColorDepth
> - );
> - }
> -
> - VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 1);
> -
> - SetDefaultPalette (Private);
> - ClearScreen (Private);
> -}
> -
> EFI_STATUS
> EFIAPI
> InitializeQemuVideo (
> diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
> index c9941ef138..d490fa7a2e 100644
> --- a/OvmfPkg/QemuVideoDxe/Gop.c
> +++ b/OvmfPkg/QemuVideoDxe/Gop.c
> @@ -13,7 +13,6 @@
>
> **/
>
> -#include <IndustryStandard/VmwareSvga.h>
> #include "Qemu.h"
>
> STATIC
> @@ -79,46 +78,6 @@ QemuVideoCompleteModeData (
> return EFI_SUCCESS;
> }
>
> -STATIC
> -EFI_STATUS
> -QemuVideoVmwareSvgaCompleteModeData (
> - IN QEMU_VIDEO_PRIVATE_DATA *Private,
> - OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode
> - )
> -{
> - EFI_STATUS Status;
> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;
> - UINT32 BytesPerLine, FbOffset, BytesPerPixel;
> -
> - Info = Mode->Info;
> - CopyMem (Info, &Private->VmwareSvgaModeInfo[Mode->Mode], sizeof (*Info));
> - BytesPerPixel = Private->ModeData[Mode->Mode].ColorDepth / 8;
> - BytesPerLine = Info->PixelsPerScanLine * BytesPerPixel;
> -
> - FbOffset = VmwareSvgaRead (Private, VmwareSvgaRegFbOffset);
> -
> - Status = Private->PciIo->GetBarAttributes (
> - Private->PciIo,
> - PCI_BAR_IDX1,
> - NULL,
> - (VOID**) &FrameBufDesc
> - );
> - if (EFI_ERROR (Status)) {
> - return EFI_DEVICE_ERROR;
> - }
> -
> - Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin + FbOffset;
> - Mode->FrameBufferSize = BytesPerLine * Info->VerticalResolution;
> - Mode->FrameBufferSize = EFI_PAGES_TO_SIZE (
> - EFI_SIZE_TO_PAGES (Mode->FrameBufferSize)
> - );
> -
> - FreePool (FrameBufDesc);
> - return Status;
> -}
> -
> -
> //
> // Graphics Output Protocol Member Functions
> //
> @@ -167,14 +126,10 @@ Routine Description:
>
> *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
>
> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
> - CopyMem (*Info, &Private->VmwareSvgaModeInfo[ModeNumber], sizeof (**Info));
> - } else {
> - ModeData = &Private->ModeData[ModeNumber];
> - (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
> - (*Info)->VerticalResolution = ModeData->VerticalResolution;
> - QemuVideoCompleteModeInfo (ModeData, *Info);
> - }
> + ModeData = &Private->ModeData[ModeNumber];
> + (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
> + (*Info)->VerticalResolution = ModeData->VerticalResolution;
> + QemuVideoCompleteModeInfo (ModeData, *Info);
>
> return EFI_SUCCESS;
> }
> @@ -224,12 +179,6 @@ Routine Description:
> case QEMU_VIDEO_BOCHS:
> InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
> break;
> - case QEMU_VIDEO_VMWARE_SVGA:
> - InitializeVmwareSvgaGraphicsMode (
> - Private,
> - &QemuVideoBochsModes[ModeData->InternalModeIndex]
> - );
> - break;
> default:
> ASSERT (FALSE);
> return EFI_DEVICE_ERROR;
> @@ -240,11 +189,7 @@ Routine Description:
> This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;
> This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
>
> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
> - QemuVideoVmwareSvgaCompleteModeData (Private, This->Mode);
> - } else {
> - QemuVideoCompleteModeData (Private, This->Mode);
> - }
> + QemuVideoCompleteModeData (Private, This->Mode);
>
> //
> // Re-initialize the frame buffer configure when mode changes.
> diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c b/OvmfPkg/QemuVideoDxe/Initialize.c
> index 357124d628..d5d8cfef96 100644
> --- a/OvmfPkg/QemuVideoDxe/Initialize.c
> +++ b/OvmfPkg/QemuVideoDxe/Initialize.c
> @@ -13,7 +13,6 @@
>
> **/
>
> -#include <IndustryStandard/VmwareSvga.h>
> #include "Qemu.h"
>
>
> @@ -347,159 +346,3 @@ QemuVideoBochsModeSetup (
> return EFI_SUCCESS;
> }
>
> -EFI_STATUS
> -QemuVideoVmwareSvgaModeSetup (
> - QEMU_VIDEO_PRIVATE_DATA *Private
> - )
> -{
> - EFI_STATUS Status;
> - UINT32 FbSize;
> - UINT32 MaxWidth, MaxHeight;
> - UINT32 Capabilities;
> - UINT32 BitsPerPixel;
> - UINT32 Index;
> - QEMU_VIDEO_MODE_DATA *ModeData;
> - QEMU_VIDEO_BOCHS_MODES *VideoMode;
> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo;
> -
> - VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 0);
> -
> - Private->ModeData =
> - AllocatePool (sizeof (Private->ModeData[0]) * QEMU_VIDEO_BOCHS_MODE_COUNT);
> - if (Private->ModeData == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ModeDataAllocError;
> - }
> -
> - Private->VmwareSvgaModeInfo =
> - AllocatePool (
> - sizeof (Private->VmwareSvgaModeInfo[0]) * QEMU_VIDEO_BOCHS_MODE_COUNT
> - );
> - if (Private->VmwareSvgaModeInfo == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - goto ModeInfoAllocError;
> - }
> -
> - FbSize = VmwareSvgaRead (Private, VmwareSvgaRegFbSize);
> - MaxWidth = VmwareSvgaRead (Private, VmwareSvgaRegMaxWidth);
> - MaxHeight = VmwareSvgaRead (Private, VmwareSvgaRegMaxHeight);
> - Capabilities = VmwareSvgaRead (Private, VmwareSvgaRegCapabilities);
> - if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
> - BitsPerPixel = VmwareSvgaRead (
> - Private,
> - VmwareSvgaRegHostBitsPerPixel
> - );
> - VmwareSvgaWrite (
> - Private,
> - VmwareSvgaRegBitsPerPixel,
> - BitsPerPixel
> - );
> - } else {
> - BitsPerPixel = VmwareSvgaRead (
> - Private,
> - VmwareSvgaRegBitsPerPixel
> - );
> - }
> -
> - if (FbSize == 0 ||
> - MaxWidth == 0 ||
> - MaxHeight == 0 ||
> - BitsPerPixel == 0 ||
> - BitsPerPixel % 8 != 0) {
> - Status = EFI_DEVICE_ERROR;
> - goto Rollback;
> - }
> -
> - ModeData = Private->ModeData;
> - ModeInfo = Private->VmwareSvgaModeInfo;
> - VideoMode = &QemuVideoBochsModes[0];
> - for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {
> - UINTN RequiredFbSize;
> -
> - RequiredFbSize = (UINTN) VideoMode->Width * VideoMode->Height *
> - (BitsPerPixel / 8);
> - if (RequiredFbSize <= FbSize &&
> - VideoMode->Width <= MaxWidth &&
> - VideoMode->Height <= MaxHeight) {
> - UINT32 BytesPerLine;
> - UINT32 RedMask, GreenMask, BlueMask, PixelMask;
> -
> - VmwareSvgaWrite (
> - Private,
> - VmwareSvgaRegWidth,
> - VideoMode->Width
> - );
> - VmwareSvgaWrite (
> - Private,
> - VmwareSvgaRegHeight,
> - VideoMode->Height
> - );
> -
> - ModeData->InternalModeIndex = Index;
> - ModeData->HorizontalResolution = VideoMode->Width;
> - ModeData->VerticalResolution = VideoMode->Height;
> - ModeData->ColorDepth = BitsPerPixel;
> -
> - //
> - // Setting VmwareSvgaRegWidth/VmwareSvgaRegHeight actually changes
> - // the device's display mode, so we save all properties of each mode up
> - // front to avoid inadvertent mode changes later.
> - //
> - ModeInfo->Version = 0;
> - ModeInfo->HorizontalResolution = ModeData->HorizontalResolution;
> - ModeInfo->VerticalResolution = ModeData->VerticalResolution;
> -
> - ModeInfo->PixelFormat = PixelBitMask;
> -
> - RedMask = VmwareSvgaRead (Private, VmwareSvgaRegRedMask);
> - ModeInfo->PixelInformation.RedMask = RedMask;
> -
> - GreenMask = VmwareSvgaRead (Private, VmwareSvgaRegGreenMask);
> - ModeInfo->PixelInformation.GreenMask = GreenMask;
> -
> - BlueMask = VmwareSvgaRead (Private, VmwareSvgaRegBlueMask);
> - ModeInfo->PixelInformation.BlueMask = BlueMask;
> -
> - //
> - // Reserved mask is whatever bits in the pixel not containing RGB data,
> - // so start with binary 1s for every bit in the pixel, then mask off
> - // bits already used for RGB. Special case 32 to avoid undefined
> - // behaviour in the shift.
> - //
> - if (BitsPerPixel == 32) {
> - if (BlueMask == 0xff && GreenMask == 0xff00 && RedMask == 0xff0000) {
> - ModeInfo->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;
> - } else if (BlueMask == 0xff0000 &&
> - GreenMask == 0xff00 &&
> - RedMask == 0xff) {
> - ModeInfo->PixelFormat = PixelRedGreenBlueReserved8BitPerColor;
> - }
> - PixelMask = MAX_UINT32;
> - } else {
> - PixelMask = (1u << BitsPerPixel) - 1;
> - }
> - ModeInfo->PixelInformation.ReservedMask =
> - PixelMask & ~(RedMask | GreenMask | BlueMask);
> -
> - BytesPerLine = VmwareSvgaRead (Private, VmwareSvgaRegBytesPerLine);
> - ModeInfo->PixelsPerScanLine = BytesPerLine / (BitsPerPixel / 8);
> -
> - ModeData++;
> - ModeInfo++;
> - }
> - VideoMode++;
> - }
> - Private->MaxMode = ModeData - Private->ModeData;
> - return EFI_SUCCESS;
> -
> -Rollback:
> - FreePool (Private->VmwareSvgaModeInfo);
> - Private->VmwareSvgaModeInfo = NULL;
> -
> -ModeInfoAllocError:
> - FreePool (Private->ModeData);
> - Private->ModeData = NULL;
> -
> -ModeDataAllocError:
> - return Status;
> -}
> diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
> index bc49f867a4..d7da761705 100644
> --- a/OvmfPkg/QemuVideoDxe/Qemu.h
> +++ b/OvmfPkg/QemuVideoDxe/Qemu.h
> @@ -92,7 +92,6 @@ typedef enum {
> QEMU_VIDEO_CIRRUS_5446,
> QEMU_VIDEO_BOCHS,
> QEMU_VIDEO_BOCHS_MMIO,
> - QEMU_VIDEO_VMWARE_SVGA,
> } QEMU_VIDEO_VARIANT;
>
> typedef struct {
> @@ -117,13 +116,10 @@ typedef struct {
> //
> UINTN MaxMode;
> QEMU_VIDEO_MODE_DATA *ModeData;
> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *VmwareSvgaModeInfo;
>
> QEMU_VIDEO_VARIANT Variant;
> FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
> UINTN FrameBufferBltConfigureSize;
> - UINT8 FrameBufferVramBarIndex;
> - UINT16 VmwareSvgaBasePort;
> } QEMU_VIDEO_PRIVATE_DATA;
>
> ///
> @@ -507,34 +503,9 @@ QemuVideoBochsModeSetup (
> BOOLEAN IsQxl
> );
>
> -EFI_STATUS
> -QemuVideoVmwareSvgaModeSetup (
> - QEMU_VIDEO_PRIVATE_DATA *Private
> - );
> -
> VOID
> InstallVbeShim (
> IN CONST CHAR16 *CardName,
> IN EFI_PHYSICAL_ADDRESS FrameBufferBase
> );
> -
> -VOID
> -VmwareSvgaWrite (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - UINT16 Register,
> - UINT32 Value
> - );
> -
> -UINT32
> -VmwareSvgaRead (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - UINT16 Register
> - );
> -
> -VOID
> -InitializeVmwareSvgaGraphicsMode (
> - QEMU_VIDEO_PRIVATE_DATA *Private,
> - QEMU_VIDEO_BOCHS_MODES *ModeData
> - );
> -
> #endif
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support"
2018-11-01 18:58 ` Philippe Mathieu-Daudé
@ 2018-11-02 2:09 ` yuchenlin
0 siblings, 0 replies; 12+ messages in thread
From: yuchenlin @ 2018-11-02 2:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: edk2-devel, phil, jordan.l.justen, anthony.perard, lersek
On 2018-11-02 02:58, Philippe Mathieu-Daudé wrote:
> Hi Yu-chen Lin,
>
> On 24/10/18 8:40, yuchenlin@synology.com wrote:
>> From: yuchenlin <yuchenlin@synology.com>
>>
>> This reverts commit c137d95081690d4877fbeb5f1856972e84ac32f2.
>
> Can we have a comment here about why we need to revert this patch?
> (same for patches 2 and 3).
>
Will do
Thanks,
yuchenlin
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: yuchenlin <yuchenlin@synology.com>
>> ---
>> OvmfPkg/QemuVideoDxe/Driver.c | 135 +------------------------
>> OvmfPkg/QemuVideoDxe/Gop.c | 65 +------------
>> OvmfPkg/QemuVideoDxe/Initialize.c | 157
>> ------------------------------
>> OvmfPkg/QemuVideoDxe/Qemu.h | 29 ------
>> 4 files changed, 7 insertions(+), 379 deletions(-)
>>
>> diff --git a/OvmfPkg/QemuVideoDxe/Driver.c
>> b/OvmfPkg/QemuVideoDxe/Driver.c
>> index 73eb2cad05..2304afd1e6 100644
>> --- a/OvmfPkg/QemuVideoDxe/Driver.c
>> +++ b/OvmfPkg/QemuVideoDxe/Driver.c
>> @@ -14,10 +14,8 @@
>> **/
>> -#include <IndustryStandard/VmwareSvga.h>
>> -#include <IndustryStandard/Acpi.h>
>> #include "Qemu.h"
>> -#include "UnalignedIoInternal.h"
>> +#include <IndustryStandard/Acpi.h>
>> EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
>> QemuVideoControllerDriverSupported,
>> @@ -71,12 +69,6 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
>> 0x1050,
>> QEMU_VIDEO_BOCHS_MMIO,
>> L"QEMU VirtIO VGA"
>> - },{
>> - PCI_CLASS_DISPLAY_VGA,
>> - VMWARE_PCI_VENDOR_ID_VMWARE,
>> - VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
>> - QEMU_VIDEO_VMWARE_SVGA,
>> - L"QEMU VMWare SVGA"
>> },{
>> 0 /* end of list */
>> }
>> @@ -264,7 +256,6 @@ QemuVideoControllerDriverStart (
>> goto ClosePciIo;
>> }
>> Private->Variant = Card->Variant;
>> - Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
>> //
>> // IsQxl is based on the detected Card->Variant, which at a later
>> point might
>> @@ -339,58 +330,6 @@ QemuVideoControllerDriverStart (
>> }
>> }
>> - //
>> - // Check if accessing Vmware SVGA interface works
>> - //
>> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
>> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *IoDesc;
>> - UINT32 TargetId;
>> - UINT32 SvgaIdRead;
>> -
>> - IoDesc = NULL;
>> - Status = Private->PciIo->GetBarAttributes (
>> - Private->PciIo,
>> - PCI_BAR_IDX0,
>> - NULL,
>> - (VOID**) &IoDesc
>> - );
>> - if (EFI_ERROR (Status) ||
>> - IoDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_IO ||
>> - IoDesc->AddrRangeMin > MAX_UINT16 + 1 -
>> (VMWARE_SVGA_VALUE_PORT + 4)) {
>> - if (IoDesc != NULL) {
>> - FreePool (IoDesc);
>> - }
>> - Status = EFI_DEVICE_ERROR;
>> - goto RestoreAttributes;
>> - }
>> - Private->VmwareSvgaBasePort = (UINT16) IoDesc->AddrRangeMin;
>> - FreePool (IoDesc);
>> -
>> - TargetId = VMWARE_SVGA_ID_2;
>> - while (TRUE) {
>> - VmwareSvgaWrite (Private, VmwareSvgaRegId, TargetId);
>> - SvgaIdRead = VmwareSvgaRead (Private, VmwareSvgaRegId);
>> - if ((SvgaIdRead == TargetId) || (TargetId <= VMWARE_SVGA_ID_0))
>> {
>> - break;
>> - }
>> - TargetId--;
>> - }
>> -
>> - if (SvgaIdRead != TargetId) {
>> - DEBUG ((
>> - DEBUG_ERROR,
>> - "QemuVideo: QEMU_VIDEO_VMWARE_SVGA ID mismatch "
>> - "(got 0x%x, base address 0x%x)\n",
>> - SvgaIdRead,
>> - Private->VmwareSvgaBasePort
>> - ));
>> - Status = EFI_DEVICE_ERROR;
>> - goto RestoreAttributes;
>> - }
>> -
>> - Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
>> - }
>> -
>> //
>> // Get ParentDevicePath
>> //
>> @@ -446,9 +385,6 @@ QemuVideoControllerDriverStart (
>> case QEMU_VIDEO_BOCHS:
>> Status = QemuVideoBochsModeSetup (Private, IsQxl);
>> break;
>> - case QEMU_VIDEO_VMWARE_SVGA:
>> - Status = QemuVideoVmwareSvgaModeSetup (Private);
>> - break;
>> default:
>> ASSERT (FALSE);
>> Status = EFI_DEVICE_ERROR;
>> @@ -510,9 +446,6 @@ DestructQemuVideoGraphics:
>> FreeModeData:
>> FreePool (Private->ModeData);
>> - if (Private->VmwareSvgaModeInfo != NULL) {
>> - FreePool (Private->VmwareSvgaModeInfo);
>> - }
>> UninstallGopDevicePath:
>> gBS->UninstallProtocolInterface (Private->Handle,
>> @@ -634,9 +567,6 @@ QemuVideoControllerDriverStop (
>> );
>> FreePool (Private->ModeData);
>> - if (Private->VmwareSvgaModeInfo != NULL) {
>> - FreePool (Private->VmwareSvgaModeInfo);
>> - }
>> gBS->UninstallProtocolInterface (Private->Handle,
>> &gEfiDevicePathProtocolGuid, Private->GopDevicePath);
>> FreePool (Private->GopDevicePath);
>> @@ -834,7 +764,7 @@ ClearScreen (
>> Private->PciIo->Mem.Write (
>> Private->PciIo,
>> EfiPciIoWidthFillUint32,
>> - Private->FrameBufferVramBarIndex,
>> + 0,
>> 0,
>> 0x400000 >> 2,
>> &Color
>> @@ -971,38 +901,6 @@ BochsRead (
>> return Data;
>> }
>> -VOID
>> -VmwareSvgaWrite (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - UINT16 Register,
>> - UINT32 Value
>> - )
>> -{
>> - UnalignedIoWrite32 (
>> - Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
>> - Register
>> - );
>> - UnalignedIoWrite32 (
>> - Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT,
>> - Value
>> - );
>> -}
>> -
>> -UINT32
>> -VmwareSvgaRead (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - UINT16 Register
>> - )
>> -{
>> - UnalignedIoWrite32 (
>> - Private->VmwareSvgaBasePort + VMWARE_SVGA_INDEX_PORT,
>> - Register
>> - );
>> - return UnalignedIoRead32 (
>> - Private->VmwareSvgaBasePort + VMWARE_SVGA_VALUE_PORT
>> - );
>> -}
>> -
>> VOID
>> VgaOutb (
>> QEMU_VIDEO_PRIVATE_DATA *Private,
>> @@ -1057,35 +955,6 @@ InitializeBochsGraphicsMode (
>> ClearScreen (Private);
>> }
>> -VOID
>> -InitializeVmwareSvgaGraphicsMode (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - QEMU_VIDEO_BOCHS_MODES *ModeData
>> - )
>> -{
>> - UINT32 Capabilities;
>> -
>> - VmwareSvgaWrite (Private, VmwareSvgaRegWidth, ModeData->Width);
>> - VmwareSvgaWrite (Private, VmwareSvgaRegHeight, ModeData->Height);
>> -
>> - Capabilities = VmwareSvgaRead (
>> - Private,
>> - VmwareSvgaRegCapabilities
>> - );
>> - if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
>> - VmwareSvgaWrite (
>> - Private,
>> - VmwareSvgaRegBitsPerPixel,
>> - ModeData->ColorDepth
>> - );
>> - }
>> -
>> - VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 1);
>> -
>> - SetDefaultPalette (Private);
>> - ClearScreen (Private);
>> -}
>> -
>> EFI_STATUS
>> EFIAPI
>> InitializeQemuVideo (
>> diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
>> index c9941ef138..d490fa7a2e 100644
>> --- a/OvmfPkg/QemuVideoDxe/Gop.c
>> +++ b/OvmfPkg/QemuVideoDxe/Gop.c
>> @@ -13,7 +13,6 @@
>> **/
>> -#include <IndustryStandard/VmwareSvga.h>
>> #include "Qemu.h"
>> STATIC
>> @@ -79,46 +78,6 @@ QemuVideoCompleteModeData (
>> return EFI_SUCCESS;
>> }
>> -STATIC
>> -EFI_STATUS
>> -QemuVideoVmwareSvgaCompleteModeData (
>> - IN QEMU_VIDEO_PRIVATE_DATA *Private,
>> - OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode
>> - )
>> -{
>> - EFI_STATUS Status;
>> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
>> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;
>> - UINT32 BytesPerLine, FbOffset,
>> BytesPerPixel;
>> -
>> - Info = Mode->Info;
>> - CopyMem (Info, &Private->VmwareSvgaModeInfo[Mode->Mode], sizeof
>> (*Info));
>> - BytesPerPixel = Private->ModeData[Mode->Mode].ColorDepth / 8;
>> - BytesPerLine = Info->PixelsPerScanLine * BytesPerPixel;
>> -
>> - FbOffset = VmwareSvgaRead (Private, VmwareSvgaRegFbOffset);
>> -
>> - Status = Private->PciIo->GetBarAttributes (
>> - Private->PciIo,
>> - PCI_BAR_IDX1,
>> - NULL,
>> - (VOID**) &FrameBufDesc
>> - );
>> - if (EFI_ERROR (Status)) {
>> - return EFI_DEVICE_ERROR;
>> - }
>> -
>> - Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin + FbOffset;
>> - Mode->FrameBufferSize = BytesPerLine * Info->VerticalResolution;
>> - Mode->FrameBufferSize = EFI_PAGES_TO_SIZE (
>> - EFI_SIZE_TO_PAGES (Mode->FrameBufferSize)
>> - );
>> -
>> - FreePool (FrameBufDesc);
>> - return Status;
>> -}
>> -
>> -
>> //
>> // Graphics Output Protocol Member Functions
>> //
>> @@ -167,14 +126,10 @@ Routine Description:
>> *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
>> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
>> - CopyMem (*Info, &Private->VmwareSvgaModeInfo[ModeNumber], sizeof
>> (**Info));
>> - } else {
>> - ModeData = &Private->ModeData[ModeNumber];
>> - (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
>> - (*Info)->VerticalResolution = ModeData->VerticalResolution;
>> - QemuVideoCompleteModeInfo (ModeData, *Info);
>> - }
>> + ModeData = &Private->ModeData[ModeNumber];
>> + (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
>> + (*Info)->VerticalResolution = ModeData->VerticalResolution;
>> + QemuVideoCompleteModeInfo (ModeData, *Info);
>> return EFI_SUCCESS;
>> }
>> @@ -224,12 +179,6 @@ Routine Description:
>> case QEMU_VIDEO_BOCHS:
>> InitializeBochsGraphicsMode (Private,
>> &QemuVideoBochsModes[ModeData->InternalModeIndex]);
>> break;
>> - case QEMU_VIDEO_VMWARE_SVGA:
>> - InitializeVmwareSvgaGraphicsMode (
>> - Private,
>> - &QemuVideoBochsModes[ModeData->InternalModeIndex]
>> - );
>> - break;
>> default:
>> ASSERT (FALSE);
>> return EFI_DEVICE_ERROR;
>> @@ -240,11 +189,7 @@ Routine Description:
>> This->Mode->Info->VerticalResolution =
>> ModeData->VerticalResolution;
>> This->Mode->SizeOfInfo =
>> sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
>> - if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
>> - QemuVideoVmwareSvgaCompleteModeData (Private, This->Mode);
>> - } else {
>> - QemuVideoCompleteModeData (Private, This->Mode);
>> - }
>> + QemuVideoCompleteModeData (Private, This->Mode);
>> //
>> // Re-initialize the frame buffer configure when mode changes.
>> diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c
>> b/OvmfPkg/QemuVideoDxe/Initialize.c
>> index 357124d628..d5d8cfef96 100644
>> --- a/OvmfPkg/QemuVideoDxe/Initialize.c
>> +++ b/OvmfPkg/QemuVideoDxe/Initialize.c
>> @@ -13,7 +13,6 @@
>> **/
>> -#include <IndustryStandard/VmwareSvga.h>
>> #include "Qemu.h"
>> @@ -347,159 +346,3 @@ QemuVideoBochsModeSetup (
>> return EFI_SUCCESS;
>> }
>> -EFI_STATUS
>> -QemuVideoVmwareSvgaModeSetup (
>> - QEMU_VIDEO_PRIVATE_DATA *Private
>> - )
>> -{
>> - EFI_STATUS Status;
>> - UINT32 FbSize;
>> - UINT32 MaxWidth, MaxHeight;
>> - UINT32 Capabilities;
>> - UINT32 BitsPerPixel;
>> - UINT32 Index;
>> - QEMU_VIDEO_MODE_DATA *ModeData;
>> - QEMU_VIDEO_BOCHS_MODES *VideoMode;
>> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo;
>> -
>> - VmwareSvgaWrite (Private, VmwareSvgaRegEnable, 0);
>> -
>> - Private->ModeData =
>> - AllocatePool (sizeof (Private->ModeData[0]) *
>> QEMU_VIDEO_BOCHS_MODE_COUNT);
>> - if (Private->ModeData == NULL) {
>> - Status = EFI_OUT_OF_RESOURCES;
>> - goto ModeDataAllocError;
>> - }
>> -
>> - Private->VmwareSvgaModeInfo =
>> - AllocatePool (
>> - sizeof (Private->VmwareSvgaModeInfo[0]) *
>> QEMU_VIDEO_BOCHS_MODE_COUNT
>> - );
>> - if (Private->VmwareSvgaModeInfo == NULL) {
>> - Status = EFI_OUT_OF_RESOURCES;
>> - goto ModeInfoAllocError;
>> - }
>> -
>> - FbSize = VmwareSvgaRead (Private, VmwareSvgaRegFbSize);
>> - MaxWidth = VmwareSvgaRead (Private, VmwareSvgaRegMaxWidth);
>> - MaxHeight = VmwareSvgaRead (Private, VmwareSvgaRegMaxHeight);
>> - Capabilities = VmwareSvgaRead (Private, VmwareSvgaRegCapabilities);
>> - if ((Capabilities & VMWARE_SVGA_CAP_8BIT_EMULATION) != 0) {
>> - BitsPerPixel = VmwareSvgaRead (
>> - Private,
>> - VmwareSvgaRegHostBitsPerPixel
>> - );
>> - VmwareSvgaWrite (
>> - Private,
>> - VmwareSvgaRegBitsPerPixel,
>> - BitsPerPixel
>> - );
>> - } else {
>> - BitsPerPixel = VmwareSvgaRead (
>> - Private,
>> - VmwareSvgaRegBitsPerPixel
>> - );
>> - }
>> -
>> - if (FbSize == 0 ||
>> - MaxWidth == 0 ||
>> - MaxHeight == 0 ||
>> - BitsPerPixel == 0 ||
>> - BitsPerPixel % 8 != 0) {
>> - Status = EFI_DEVICE_ERROR;
>> - goto Rollback;
>> - }
>> -
>> - ModeData = Private->ModeData;
>> - ModeInfo = Private->VmwareSvgaModeInfo;
>> - VideoMode = &QemuVideoBochsModes[0];
>> - for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {
>> - UINTN RequiredFbSize;
>> -
>> - RequiredFbSize = (UINTN) VideoMode->Width * VideoMode->Height *
>> - (BitsPerPixel / 8);
>> - if (RequiredFbSize <= FbSize &&
>> - VideoMode->Width <= MaxWidth &&
>> - VideoMode->Height <= MaxHeight) {
>> - UINT32 BytesPerLine;
>> - UINT32 RedMask, GreenMask, BlueMask, PixelMask;
>> -
>> - VmwareSvgaWrite (
>> - Private,
>> - VmwareSvgaRegWidth,
>> - VideoMode->Width
>> - );
>> - VmwareSvgaWrite (
>> - Private,
>> - VmwareSvgaRegHeight,
>> - VideoMode->Height
>> - );
>> -
>> - ModeData->InternalModeIndex = Index;
>> - ModeData->HorizontalResolution = VideoMode->Width;
>> - ModeData->VerticalResolution = VideoMode->Height;
>> - ModeData->ColorDepth = BitsPerPixel;
>> -
>> - //
>> - // Setting VmwareSvgaRegWidth/VmwareSvgaRegHeight actually
>> changes
>> - // the device's display mode, so we save all properties of each
>> mode up
>> - // front to avoid inadvertent mode changes later.
>> - //
>> - ModeInfo->Version = 0;
>> - ModeInfo->HorizontalResolution =
>> ModeData->HorizontalResolution;
>> - ModeInfo->VerticalResolution = ModeData->VerticalResolution;
>> -
>> - ModeInfo->PixelFormat = PixelBitMask;
>> -
>> - RedMask = VmwareSvgaRead (Private, VmwareSvgaRegRedMask);
>> - ModeInfo->PixelInformation.RedMask = RedMask;
>> -
>> - GreenMask = VmwareSvgaRead (Private, VmwareSvgaRegGreenMask);
>> - ModeInfo->PixelInformation.GreenMask = GreenMask;
>> -
>> - BlueMask = VmwareSvgaRead (Private, VmwareSvgaRegBlueMask);
>> - ModeInfo->PixelInformation.BlueMask = BlueMask;
>> -
>> - //
>> - // Reserved mask is whatever bits in the pixel not containing
>> RGB data,
>> - // so start with binary 1s for every bit in the pixel, then
>> mask off
>> - // bits already used for RGB. Special case 32 to avoid
>> undefined
>> - // behaviour in the shift.
>> - //
>> - if (BitsPerPixel == 32) {
>> - if (BlueMask == 0xff && GreenMask == 0xff00 && RedMask ==
>> 0xff0000) {
>> - ModeInfo->PixelFormat =
>> PixelBlueGreenRedReserved8BitPerColor;
>> - } else if (BlueMask == 0xff0000 &&
>> - GreenMask == 0xff00 &&
>> - RedMask == 0xff) {
>> - ModeInfo->PixelFormat =
>> PixelRedGreenBlueReserved8BitPerColor;
>> - }
>> - PixelMask = MAX_UINT32;
>> - } else {
>> - PixelMask = (1u << BitsPerPixel) - 1;
>> - }
>> - ModeInfo->PixelInformation.ReservedMask =
>> - PixelMask & ~(RedMask | GreenMask | BlueMask);
>> -
>> - BytesPerLine = VmwareSvgaRead (Private,
>> VmwareSvgaRegBytesPerLine);
>> - ModeInfo->PixelsPerScanLine = BytesPerLine / (BitsPerPixel /
>> 8);
>> -
>> - ModeData++;
>> - ModeInfo++;
>> - }
>> - VideoMode++;
>> - }
>> - Private->MaxMode = ModeData - Private->ModeData;
>> - return EFI_SUCCESS;
>> -
>> -Rollback:
>> - FreePool (Private->VmwareSvgaModeInfo);
>> - Private->VmwareSvgaModeInfo = NULL;
>> -
>> -ModeInfoAllocError:
>> - FreePool (Private->ModeData);
>> - Private->ModeData = NULL;
>> -
>> -ModeDataAllocError:
>> - return Status;
>> -}
>> diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
>> index bc49f867a4..d7da761705 100644
>> --- a/OvmfPkg/QemuVideoDxe/Qemu.h
>> +++ b/OvmfPkg/QemuVideoDxe/Qemu.h
>> @@ -92,7 +92,6 @@ typedef enum {
>> QEMU_VIDEO_CIRRUS_5446,
>> QEMU_VIDEO_BOCHS,
>> QEMU_VIDEO_BOCHS_MMIO,
>> - QEMU_VIDEO_VMWARE_SVGA,
>> } QEMU_VIDEO_VARIANT;
>> typedef struct {
>> @@ -117,13 +116,10 @@ typedef struct {
>> //
>> UINTN MaxMode;
>> QEMU_VIDEO_MODE_DATA *ModeData;
>> - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *VmwareSvgaModeInfo;
>> QEMU_VIDEO_VARIANT Variant;
>> FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
>> UINTN FrameBufferBltConfigureSize;
>> - UINT8 FrameBufferVramBarIndex;
>> - UINT16 VmwareSvgaBasePort;
>> } QEMU_VIDEO_PRIVATE_DATA;
>> ///
>> @@ -507,34 +503,9 @@ QemuVideoBochsModeSetup (
>> BOOLEAN IsQxl
>> );
>> -EFI_STATUS
>> -QemuVideoVmwareSvgaModeSetup (
>> - QEMU_VIDEO_PRIVATE_DATA *Private
>> - );
>> -
>> VOID
>> InstallVbeShim (
>> IN CONST CHAR16 *CardName,
>> IN EFI_PHYSICAL_ADDRESS FrameBufferBase
>> );
>> -
>> -VOID
>> -VmwareSvgaWrite (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - UINT16 Register,
>> - UINT32 Value
>> - );
>> -
>> -UINT32
>> -VmwareSvgaRead (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - UINT16 Register
>> - );
>> -
>> -VOID
>> -InitializeVmwareSvgaGraphicsMode (
>> - QEMU_VIDEO_PRIVATE_DATA *Private,
>> - QEMU_VIDEO_BOCHS_MODES *ModeData
>> - );
>> -
>> #endif
>>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/4] Revert "OvmfPkg/QemuVideoDxe: Helper functions for unaligned port I/O."
2018-10-24 6:40 [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
2018-10-24 6:40 ` [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support" yuchenlin
@ 2018-10-24 6:40 ` yuchenlin
2018-10-24 6:40 ` [PATCH 3/4] Revert "OvmfPkg/QemuVideoDxe: list "UnalignedIoInternal.h" in the INF file" yuchenlin
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: yuchenlin @ 2018-10-24 6:40 UTC (permalink / raw)
To: edk2-devel
Cc: jordan.l.justen, lersek, ard.biesheuvel, anthony.perard,
julien.grall, phil, kraxel, yuchenlin
From: yuchenlin <yuchenlin@synology.com>
This reverts commit 05a5379458725234de8a05780fcb5da2c12680e4.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: yuchenlin <yuchenlin@synology.com>
---
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 6 --
OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c | 70 ----------------
OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c | 80 -------------------
OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h | 59 --------------
OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c | 78 ------------------
OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c | 66 ---------------
6 files changed, 359 deletions(-)
delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c
delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c
delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h
delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c
delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c
diff --git a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
index a04ed537dd..c071fafa4e 100644
--- a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+++ b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
@@ -42,15 +42,9 @@
UnalignedIoInternal.h
[Sources.Ia32, Sources.X64]
- UnalignedIoGcc.c | GCC
- UnalignedIoIcc.c | INTEL
- UnalignedIoMsc.c | MSFT
VbeShim.c
VbeShim.h
-[Sources.EBC]
- UnalignedIoUnsupported.c
-
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
diff --git a/OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c b/OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c
deleted file mode 100644
index 105d55d3b9..0000000000
--- a/OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/** @file
- Unaligned Port I/O. This file has compiler specifics for GCC as there is no
- ANSI C standard for doing IO.
-
- Based on IoLibGcc.c.
-
- Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include "UnalignedIoInternal.h"
-
-/**
- Performs a 32-bit write to the specified, possibly unaligned I/O-type
- address.
-
- Writes the 32-bit I/O port specified by Port with the value specified by
- Value and returns Value. This function must guarantee that all I/O read and
- write operations are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port I/O port address
- @param[in] Value 32-bit word to write
-
- @return The value written to the I/O port.
-
-**/
-UINT32
-UnalignedIoWrite32 (
- IN UINTN Port,
- IN UINT32 Value
- )
-{
- __asm__ __volatile__ ( "outl %0, %1" : : "a" (Value), "d" ((UINT16)Port) );
- return Value;
-}
-
-/**
- Reads a 32-bit word from the specified, possibly unaligned I/O-type address.
-
- Reads the 32-bit I/O port specified by Port. The 32-bit read value is
- returned. This function must guarantee that all I/O read and write operations
- are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port The I/O port to read.
-
- @return The value read.
-
-**/
-UINT32
-UnalignedIoRead32 (
- IN UINTN Port
- )
-{
- UINT32 Data;
- __asm__ __volatile__ ( "inl %1, %0" : "=a" (Data) : "d" ((UINT16)Port) );
- return Data;
-}
-
diff --git a/OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c b/OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c
deleted file mode 100644
index 79f3e446dd..0000000000
--- a/OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/** @file
- Unaligned port I/O. This file has compiler specifics for ICC as there
- is no ANSI C standard for doing IO.
-
- Based on IoLibIcc.c.
-
- Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include "UnalignedIoInternal.h"
-
-/**
- Performs a 32-bit write to the specified, possibly unaligned I/O-type
- address.
-
- Writes the 32-bit I/O port specified by Port with the value specified by
- Value and returns Value. This function must guarantee that all I/O read and
- write operations are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port I/O port address
- @param[in] Value 32-bit word to write
-
- @return The value written to the I/O port.
-
-**/
-UINT32
-UnalignedIoWrite32 (
- IN UINTN Port,
- IN UINT32 Value
- )
-{
- __asm {
- mov eax, dword ptr [Value]
- mov dx, word ptr [Port]
- out dx, eax
- }
-
- return Value;
-}
-
-/**
- Reads a 32-bit word from the specified, possibly unaligned I/O-type address.
-
- Reads the 32-bit I/O port specified by Port. The 32-bit read value is
- returned. This function must guarantee that all I/O read and write operations
- are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port The I/O port to read.
-
- @return The value read.
-
-**/
-UINT32
-UnalignedIoRead32 (
- IN UINTN Port
- )
-{
- UINT32 Data;
-
- __asm {
- mov dx, word ptr [Port]
- in eax, dx
- mov dword ptr [Data], eax
- }
-
- return Data;
-}
diff --git a/OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h b/OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h
deleted file mode 100644
index 234de6c21b..0000000000
--- a/OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/** @file
- Unaligned port I/O, with implementations for various x86 compilers and a
- dummy for platforms which do not support unaligned port I/O.
-
- Copyright (c) 2017, Phil Dennis-Jordan.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef _UNALIGNED_IO_INTERNAL_H_
-#define _UNALIGNED_IO_INTERNAL_H_
-
-/**
- Performs a 32-bit write to the specified, possibly unaligned I/O-type address.
-
- Writes the 32-bit I/O port specified by Port with the value specified by Value
- and returns Value. This function must guarantee that all I/O read and write
- operations are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port I/O port address
- @param[in] Value 32-bit word to write
-
- @return The value written to the I/O port.
-
-**/
-UINT32
-UnalignedIoWrite32 (
- IN UINTN Port,
- IN UINT32 Value
- );
-
-/**
- Reads a 32-bit word from the specified, possibly unaligned I/O-type address.
-
- Reads the 32-bit I/O port specified by Port. The 32-bit read value is
- returned. This function must guarantee that all I/O read and write operations
- are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port The I/O port to read.
-
- @return The value read.
-
-**/
-UINT32
-UnalignedIoRead32 (
- IN UINTN Port
- );
-
-#endif
diff --git a/OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c b/OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c
deleted file mode 100644
index a466baee84..0000000000
--- a/OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/** @file
- Unaligned port I/O. This file has compiler specifics for Microsoft C as there
- is no ANSI C standard for doing IO.
-
- Based on IoLibMsc.c
-
- Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include "UnalignedIoInternal.h"
-
-unsigned long _inpd (unsigned short port);
-unsigned long _outpd (unsigned short port, unsigned long dataword );
-void _ReadWriteBarrier (void);
-
-/**
- Performs a 32-bit write to the specified, possibly unaligned I/O-type
- address.
-
- Writes the 32-bit I/O port specified by Port with the value specified by
- Value and returns Value. This function must guarantee that all I/O read and
- write operations are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port I/O port address
- @param[in] Value 32-bit word to write
-
- @return The value written to the I/O port.
-
-**/
-UINT32
-UnalignedIoWrite32 (
- IN UINTN Port,
- IN UINT32 Value
- )
-{
- _ReadWriteBarrier ();
- _outpd ((UINT16)Port, Value);
- _ReadWriteBarrier ();
- return Value;
-}
-
-/**
- Reads a 32-bit word from the specified, possibly unaligned I/O-type address.
-
- Reads the 32-bit I/O port specified by Port. The 32-bit read value is
- returned. This function must guarantee that all I/O read and write operations
- are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port The I/O port to read.
-
- @return The value read.
-
-**/
-UINT32
-UnalignedIoRead32 (
- IN UINTN Port
- )
-{
- UINT32 Value;
-
- _ReadWriteBarrier ();
- Value = _inpd ((UINT16)Port);
- _ReadWriteBarrier ();
- return Value;
-}
diff --git a/OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c b/OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c
deleted file mode 100644
index 57560ab38f..0000000000
--- a/OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file
- Unaligned port I/O dummy implementation for platforms which do not support it.
-
- Copyright (c) 2017, Phil Dennis-Jordan.<BR>
- This program and the accompanying materials are licensed and made available
- under the terms and conditions of the BSD License which accompanies this
- distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-#include <Library/DebugLib.h>
-#include "UnalignedIoInternal.h"
-
-/**
- Performs a 32-bit write to the specified, possibly unaligned I/O-type
- address.
-
- Writes the 32-bit I/O port specified by Port with the value specified by
- Value and returns Value. This function must guarantee that all I/O read and
- write operations are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port I/O port address
- @param[in] Value 32-bit word to write
-
- @return The value written to the I/O port.
-
-**/
-UINT32
-UnalignedIoWrite32 (
- IN UINTN Port,
- IN UINT32 Value
- )
-{
- ASSERT (FALSE);
- return Value;
-}
-
-/**
- Reads a 32-bit word from the specified, possibly unaligned I/O-type address.
-
- Reads the 32-bit I/O port specified by Port. The 32-bit read value is
- returned. This function must guarantee that all I/O read and write operations
- are serialized.
-
- If 32-bit unaligned I/O port operations are not supported, then ASSERT().
-
- @param[in] Port The I/O port to read.
-
- @return The value read.
-
-**/
-UINT32
-UnalignedIoRead32 (
- IN UINTN Port
- )
-{
- ASSERT (FALSE);
- return 0;
-}
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] Revert "OvmfPkg/QemuVideoDxe: list "UnalignedIoInternal.h" in the INF file"
2018-10-24 6:40 [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
2018-10-24 6:40 ` [PATCH 1/4] Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support" yuchenlin
2018-10-24 6:40 ` [PATCH 2/4] Revert "OvmfPkg/QemuVideoDxe: Helper functions for unaligned port I/O." yuchenlin
@ 2018-10-24 6:40 ` yuchenlin
2018-10-24 6:40 ` [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
2018-11-01 19:02 ` [PATCH 0/4] " Philippe Mathieu-Daudé
4 siblings, 0 replies; 12+ messages in thread
From: yuchenlin @ 2018-10-24 6:40 UTC (permalink / raw)
To: edk2-devel
Cc: jordan.l.justen, lersek, ard.biesheuvel, anthony.perard,
julien.grall, phil, kraxel, yuchenlin
From: yuchenlin <yuchenlin@synology.com>
This reverts commit b2959e9f1a57279506ca46d56bc424fd7fa6b62a.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: yuchenlin <yuchenlin@synology.com>
---
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 1 -
1 file changed, 1 deletion(-)
diff --git a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
index c071fafa4e..e5575622dc 100644
--- a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+++ b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
@@ -39,7 +39,6 @@
Gop.c
Initialize.c
Qemu.h
- UnalignedIoInternal.h
[Sources.Ia32, Sources.X64]
VbeShim.c
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-10-24 6:40 [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
` (2 preceding siblings ...)
2018-10-24 6:40 ` [PATCH 3/4] Revert "OvmfPkg/QemuVideoDxe: list "UnalignedIoInternal.h" in the INF file" yuchenlin
@ 2018-10-24 6:40 ` yuchenlin
2018-10-24 9:16 ` Gerd Hoffmann
2018-11-01 18:54 ` Philippe Mathieu-Daudé
2018-11-01 19:02 ` [PATCH 0/4] " Philippe Mathieu-Daudé
4 siblings, 2 replies; 12+ messages in thread
From: yuchenlin @ 2018-10-24 6:40 UTC (permalink / raw)
To: edk2-devel
Cc: jordan.l.justen, lersek, ard.biesheuvel, anthony.perard,
julien.grall, phil, kraxel, yuchenlin
From: yuchenlin <yuchenlin@synology.com>
BAR | std vga | vmsvga
---------------------------------
0 | Framebuffer | I/O space
1 | Reserved | Framebuffer
2 | MMIO | FIFO
Because of the PCI BARs difference between std vga and
vmsvga, we can not simply recognize the "QEMU VMWare SVGA"
as the QEMU_VIDEO_BOCHS_MMIO variant.
Instead, we remain variant QEMU_VIDEO_VMWARE_SVGA, and use
it for:
(1) Get framebuffer from correct PCI BAR
(2) Prevent using BAR2 for MMIO
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: yuchenlin <yuchenlin@synology.com>
---
OvmfPkg/QemuVideoDxe/Driver.c | 16 +++++++++++++++-
OvmfPkg/QemuVideoDxe/Gop.c | 3 ++-
OvmfPkg/QemuVideoDxe/Qemu.h | 2 ++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.c
index 2304afd1e6..a1785c2285 100644
--- a/OvmfPkg/QemuVideoDxe/Driver.c
+++ b/OvmfPkg/QemuVideoDxe/Driver.c
@@ -16,6 +16,7 @@
#include "Qemu.h"
#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/VmwareSvga.h>
EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
QemuVideoControllerDriverSupported,
@@ -69,6 +70,12 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
0x1050,
QEMU_VIDEO_BOCHS_MMIO,
L"QEMU VirtIO VGA"
+ },{
+ PCI_CLASS_DISPLAY_VGA,
+ VMWARE_PCI_VENDOR_ID_VMWARE,
+ VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
+ QEMU_VIDEO_VMWARE_SVGA,
+ L"QEMU VMWare SVGA"
},{
0 /* end of list */
}
@@ -256,6 +263,11 @@ QemuVideoControllerDriverStart (
goto ClosePciIo;
}
Private->Variant = Card->Variant;
+ Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
+ if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
+ Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
+ }
+
//
// IsQxl is based on the detected Card->Variant, which at a later point might
@@ -320,7 +332,8 @@ QemuVideoControllerDriverStart (
// Check if accessing the bochs interface works.
//
if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||
- Private->Variant == QEMU_VIDEO_BOCHS) {
+ Private->Variant == QEMU_VIDEO_BOCHS ||
+ Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
UINT16 BochsId;
BochsId = BochsRead(Private, VBE_DISPI_INDEX_ID);
if ((BochsId & 0xFFF0) != VBE_DISPI_ID0) {
@@ -383,6 +396,7 @@ QemuVideoControllerDriverStart (
break;
case QEMU_VIDEO_BOCHS_MMIO:
case QEMU_VIDEO_BOCHS:
+ case QEMU_VIDEO_VMWARE_SVGA:
Status = QemuVideoBochsModeSetup (Private, IsQxl);
break;
default:
diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
index d490fa7a2e..3abc5eeb36 100644
--- a/OvmfPkg/QemuVideoDxe/Gop.c
+++ b/OvmfPkg/QemuVideoDxe/Gop.c
@@ -60,7 +60,7 @@ QemuVideoCompleteModeData (
Private->PciIo->GetBarAttributes (
Private->PciIo,
- 0,
+ Private->FrameBufferVramBarIndex,
NULL,
(VOID**) &FrameBufDesc
);
@@ -177,6 +177,7 @@ Routine Description:
break;
case QEMU_VIDEO_BOCHS_MMIO:
case QEMU_VIDEO_BOCHS:
+ case QEMU_VIDEO_VMWARE_SVGA:
InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
break;
default:
diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
index d7da761705..3aac9eeca6 100644
--- a/OvmfPkg/QemuVideoDxe/Qemu.h
+++ b/OvmfPkg/QemuVideoDxe/Qemu.h
@@ -92,6 +92,7 @@ typedef enum {
QEMU_VIDEO_CIRRUS_5446,
QEMU_VIDEO_BOCHS,
QEMU_VIDEO_BOCHS_MMIO,
+ QEMU_VIDEO_VMWARE_SVGA,
} QEMU_VIDEO_VARIANT;
typedef struct {
@@ -120,6 +121,7 @@ typedef struct {
QEMU_VIDEO_VARIANT Variant;
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
UINTN FrameBufferBltConfigureSize;
+ UINT8 FrameBufferVramBarIndex;
} QEMU_VIDEO_PRIVATE_DATA;
///
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-10-24 6:40 ` [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
@ 2018-10-24 9:16 ` Gerd Hoffmann
2018-11-01 18:54 ` Philippe Mathieu-Daudé
1 sibling, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2018-10-24 9:16 UTC (permalink / raw)
To: yuchenlin
Cc: edk2-devel, jordan.l.justen, lersek, ard.biesheuvel,
anthony.perard, julien.grall, phil
On Wed, Oct 24, 2018 at 02:40:08PM +0800, yuchenlin@synology.com wrote:
> From: yuchenlin <yuchenlin@synology.com>
>
> BAR | std vga | vmsvga
> ---------------------------------
> 0 | Framebuffer | I/O space
> 1 | Reserved | Framebuffer
> 2 | MMIO | FIFO
>
> Because of the PCI BARs difference between std vga and
> vmsvga, we can not simply recognize the "QEMU VMWare SVGA"
> as the QEMU_VIDEO_BOCHS_MMIO variant.
>
> Instead, we remain variant QEMU_VIDEO_VMWARE_SVGA, and use
> it for:
>
> (1) Get framebuffer from correct PCI BAR
> (2) Prevent using BAR2 for MMIO
looks good to me. seavgabios uses the same logic.
cheers,
Gerd
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-10-24 6:40 ` [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
2018-10-24 9:16 ` Gerd Hoffmann
@ 2018-11-01 18:54 ` Philippe Mathieu-Daudé
2018-11-02 2:05 ` yuchenlin
1 sibling, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-11-01 18:54 UTC (permalink / raw)
To: yuchenlin, edk2-devel; +Cc: phil, jordan.l.justen, anthony.perard, lersek
Hi Yu-chen Lin,
On 24/10/18 8:40, yuchenlin@synology.com wrote:
> From: yuchenlin <yuchenlin@synology.com>
>
> BAR | std vga | vmsvga
> ---------------------------------
> 0 | Framebuffer | I/O space
> 1 | Reserved | Framebuffer
> 2 | MMIO | FIFO
>
> Because of the PCI BARs difference between std vga and
> vmsvga, we can not simply recognize the "QEMU VMWare SVGA"
> as the QEMU_VIDEO_BOCHS_MMIO variant.
>
> Instead, we remain variant QEMU_VIDEO_VMWARE_SVGA, and use
> it for:
>
> (1) Get framebuffer from correct PCI BAR
> (2) Prevent using BAR2 for MMIO
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: yuchenlin <yuchenlin@synology.com>
> ---
> OvmfPkg/QemuVideoDxe/Driver.c | 16 +++++++++++++++-
> OvmfPkg/QemuVideoDxe/Gop.c | 3 ++-
> OvmfPkg/QemuVideoDxe/Qemu.h | 2 ++
> 3 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.c
> index 2304afd1e6..a1785c2285 100644
> --- a/OvmfPkg/QemuVideoDxe/Driver.c
> +++ b/OvmfPkg/QemuVideoDxe/Driver.c
> @@ -16,6 +16,7 @@
>
> #include "Qemu.h"
> #include <IndustryStandard/Acpi.h>
> +#include <IndustryStandard/VmwareSvga.h>
>
> EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
> QemuVideoControllerDriverSupported,
> @@ -69,6 +70,12 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
> 0x1050,
> QEMU_VIDEO_BOCHS_MMIO,
> L"QEMU VirtIO VGA"
> + },{
> + PCI_CLASS_DISPLAY_VGA,
> + VMWARE_PCI_VENDOR_ID_VMWARE,
> + VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
> + QEMU_VIDEO_VMWARE_SVGA,
> + L"QEMU VMWare SVGA"
Looks OK.
> },{
> 0 /* end of list */
> }
> @@ -256,6 +263,11 @@ QemuVideoControllerDriverStart (
> goto ClosePciIo;
> }
> Private->Variant = Card->Variant;
> + Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
> + if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
> + Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
OK, but why not use an 'else' clause?
> + }
> +
>
> //
> // IsQxl is based on the detected Card->Variant, which at a later point might
> @@ -320,7 +332,8 @@ QemuVideoControllerDriverStart (
> // Check if accessing the bochs interface works.
> //
> if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||
> - Private->Variant == QEMU_VIDEO_BOCHS) {
> + Private->Variant == QEMU_VIDEO_BOCHS ||
> + Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
> UINT16 BochsId;
> BochsId = BochsRead(Private, VBE_DISPI_INDEX_ID);
> if ((BochsId & 0xFFF0) != VBE_DISPI_ID0) {
> @@ -383,6 +396,7 @@ QemuVideoControllerDriverStart (
> break;
> case QEMU_VIDEO_BOCHS_MMIO:
> case QEMU_VIDEO_BOCHS:
> + case QEMU_VIDEO_VMWARE_SVGA:
> Status = QemuVideoBochsModeSetup (Private, IsQxl);
> break;
> default:
> diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
> index d490fa7a2e..3abc5eeb36 100644
> --- a/OvmfPkg/QemuVideoDxe/Gop.c
> +++ b/OvmfPkg/QemuVideoDxe/Gop.c
> @@ -60,7 +60,7 @@ QemuVideoCompleteModeData (
>
> Private->PciIo->GetBarAttributes (
> Private->PciIo,
> - 0,
> + Private->FrameBufferVramBarIndex,
OK
> NULL,
> (VOID**) &FrameBufDesc
> );
> @@ -177,6 +177,7 @@ Routine Description:
> break;
> case QEMU_VIDEO_BOCHS_MMIO:
> case QEMU_VIDEO_BOCHS:
> + case QEMU_VIDEO_VMWARE_SVGA:
> InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);
> break;
> default:
> diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
> index d7da761705..3aac9eeca6 100644
> --- a/OvmfPkg/QemuVideoDxe/Qemu.h
> +++ b/OvmfPkg/QemuVideoDxe/Qemu.h
> @@ -92,6 +92,7 @@ typedef enum {
> QEMU_VIDEO_CIRRUS_5446,
> QEMU_VIDEO_BOCHS,
> QEMU_VIDEO_BOCHS_MMIO,
> + QEMU_VIDEO_VMWARE_SVGA,
> } QEMU_VIDEO_VARIANT;
>
> typedef struct {
> @@ -120,6 +121,7 @@ typedef struct {
> QEMU_VIDEO_VARIANT Variant;
> FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
> UINTN FrameBufferBltConfigureSize;
> + UINT8 FrameBufferVramBarIndex;
> } QEMU_VIDEO_PRIVATE_DATA;
>
> ///
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-11-01 18:54 ` Philippe Mathieu-Daudé
@ 2018-11-02 2:05 ` yuchenlin
0 siblings, 0 replies; 12+ messages in thread
From: yuchenlin @ 2018-11-02 2:05 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: edk2-devel, phil, jordan.l.justen, anthony.perard, lersek
On 2018-11-02 02:54, Philippe Mathieu-Daudé wrote:
> Hi Yu-chen Lin,
>
> On 24/10/18 8:40, yuchenlin@synology.com wrote:
>> From: yuchenlin <yuchenlin@synology.com>
>>
>> BAR | std vga | vmsvga
>> ---------------------------------
>> 0 | Framebuffer | I/O space
>> 1 | Reserved | Framebuffer
>> 2 | MMIO | FIFO
>>
>> Because of the PCI BARs difference between std vga and
>> vmsvga, we can not simply recognize the "QEMU VMWare SVGA"
>> as the QEMU_VIDEO_BOCHS_MMIO variant.
>>
>> Instead, we remain variant QEMU_VIDEO_VMWARE_SVGA, and use
>> it for:
>>
>> (1) Get framebuffer from correct PCI BAR
>> (2) Prevent using BAR2 for MMIO
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: yuchenlin <yuchenlin@synology.com>
>> ---
>> OvmfPkg/QemuVideoDxe/Driver.c | 16 +++++++++++++++-
>> OvmfPkg/QemuVideoDxe/Gop.c | 3 ++-
>> OvmfPkg/QemuVideoDxe/Qemu.h | 2 ++
>> 3 files changed, 19 insertions(+), 2 deletions(-)
>>
>> diff --git a/OvmfPkg/QemuVideoDxe/Driver.c
>> b/OvmfPkg/QemuVideoDxe/Driver.c
>> index 2304afd1e6..a1785c2285 100644
>> --- a/OvmfPkg/QemuVideoDxe/Driver.c
>> +++ b/OvmfPkg/QemuVideoDxe/Driver.c
>> @@ -16,6 +16,7 @@
>> #include "Qemu.h"
>> #include <IndustryStandard/Acpi.h>
>> +#include <IndustryStandard/VmwareSvga.h>
>> EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
>> QemuVideoControllerDriverSupported,
>> @@ -69,6 +70,12 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
>> 0x1050,
>> QEMU_VIDEO_BOCHS_MMIO,
>> L"QEMU VirtIO VGA"
>> + },{
>> + PCI_CLASS_DISPLAY_VGA,
>> + VMWARE_PCI_VENDOR_ID_VMWARE,
>> + VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,
>> + QEMU_VIDEO_VMWARE_SVGA,
>> + L"QEMU VMWare SVGA"
>
> Looks OK.
>
>> },{
>> 0 /* end of list */
>> }
>> @@ -256,6 +263,11 @@ QemuVideoControllerDriverStart (
>> goto ClosePciIo;
>> }
>> Private->Variant = Card->Variant;
>> + Private->FrameBufferVramBarIndex = PCI_BAR_IDX0;
>> + if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
>> + Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
>
> OK, but why not use an 'else' clause?
Will do
Thanks,
yuchenlin
>
>> + }
>> +
>> //
>> // IsQxl is based on the detected Card->Variant, which at a later
>> point might
>> @@ -320,7 +332,8 @@ QemuVideoControllerDriverStart (
>> // Check if accessing the bochs interface works.
>> //
>> if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||
>> - Private->Variant == QEMU_VIDEO_BOCHS) {
>> + Private->Variant == QEMU_VIDEO_BOCHS ||
>> + Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
>> UINT16 BochsId;
>> BochsId = BochsRead(Private, VBE_DISPI_INDEX_ID);
>> if ((BochsId & 0xFFF0) != VBE_DISPI_ID0) {
>> @@ -383,6 +396,7 @@ QemuVideoControllerDriverStart (
>> break;
>> case QEMU_VIDEO_BOCHS_MMIO:
>> case QEMU_VIDEO_BOCHS:
>> + case QEMU_VIDEO_VMWARE_SVGA:
>> Status = QemuVideoBochsModeSetup (Private, IsQxl);
>> break;
>> default:
>> diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
>> index d490fa7a2e..3abc5eeb36 100644
>> --- a/OvmfPkg/QemuVideoDxe/Gop.c
>> +++ b/OvmfPkg/QemuVideoDxe/Gop.c
>> @@ -60,7 +60,7 @@ QemuVideoCompleteModeData (
>> Private->PciIo->GetBarAttributes (
>> Private->PciIo,
>> - 0,
>> + Private->FrameBufferVramBarIndex,
>
> OK
>
>> NULL,
>> (VOID**) &FrameBufDesc
>> );
>> @@ -177,6 +177,7 @@ Routine Description:
>> break;
>> case QEMU_VIDEO_BOCHS_MMIO:
>> case QEMU_VIDEO_BOCHS:
>> + case QEMU_VIDEO_VMWARE_SVGA:
>> InitializeBochsGraphicsMode (Private,
>> &QemuVideoBochsModes[ModeData->InternalModeIndex]);
>> break;
>> default:
>> diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
>> index d7da761705..3aac9eeca6 100644
>> --- a/OvmfPkg/QemuVideoDxe/Qemu.h
>> +++ b/OvmfPkg/QemuVideoDxe/Qemu.h
>> @@ -92,6 +92,7 @@ typedef enum {
>> QEMU_VIDEO_CIRRUS_5446,
>> QEMU_VIDEO_BOCHS,
>> QEMU_VIDEO_BOCHS_MMIO,
>> + QEMU_VIDEO_VMWARE_SVGA,
>> } QEMU_VIDEO_VARIANT;
>> typedef struct {
>> @@ -120,6 +121,7 @@ typedef struct {
>> QEMU_VIDEO_VARIANT Variant;
>> FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
>> UINTN FrameBufferBltConfigureSize;
>> + UINT8 FrameBufferVramBarIndex;
>> } QEMU_VIDEO_PRIVATE_DATA;
>> ///
>>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-10-24 6:40 [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
` (3 preceding siblings ...)
2018-10-24 6:40 ` [PATCH 4/4] OvmfPkg: simply use the Bochs interface for vmsvga yuchenlin
@ 2018-11-01 19:02 ` Philippe Mathieu-Daudé
2018-11-02 2:12 ` yuchenlin
4 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-11-01 19:02 UTC (permalink / raw)
To: yuchenlin, edk2-devel; +Cc: phil, jordan.l.justen, anthony.perard, lersek
Hi Yu-chen Lin,
On 24/10/18 8:40, yuchenlin@synology.com wrote:
> From: yuchenlin <yuchenlin@synology.com>
>
> In this series, replace the original vmsvga driver to Bochs
> interface.
This is the 'v2' of your previous patch 'OvmfPkg: initialize bochs when
initializing vmsvga':
https://lists.01.org/pipermail/edk2-devel/2018-October/031235.html
Keeping different versions and referencing previous series helps when
reviewing.
>
> Simply revert vmsvga driver implementation. After it, use Bochs
> interface for initializing vmsvga.
>
> Because of the PCI BARs difference between std vga and vmsvga.
> We can not simply recognize the "QEMU VMWare SVGA" as the
> QEMU_VIDEO_BOCHS_MMIO variant.
>
> BAR | std vga | vmsvga
> ---------------------------------
> 0 | Framebuffer | I/O space
> 1 | Reserved | Framebuffer
> 2 | MMIO | FIFO
>
> To overcome this problem, we remain variant QEMU_VIDEO_VMWARE_SVGA,
> and use it for:
>
> (1) Get framebuffer from correct PCI BAR
> (2) Prevent using BAR2 for MMIO
>
> We have tested on qemu before and after commit 104bd1dc70 and all worked.
Did you also test against QEMU v2.9.1?
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: yuchenlin <yuchenlin@synology.com>
>
> yuchenlin (4):
> Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support"
> Revert "OvmfPkg/QemuVideoDxe: Helper functions for unaligned port
> I/O."
> Revert "OvmfPkg/QemuVideoDxe: list "UnalignedIoInternal.h" in the INF
> file"
> OvmfPkg: simply use the Bochs interface for vmsvga
>
> OvmfPkg/QemuVideoDxe/Driver.c | 137 ++-------------
> OvmfPkg/QemuVideoDxe/Gop.c | 68 +-------
> OvmfPkg/QemuVideoDxe/Initialize.c | 157 ------------------
> OvmfPkg/QemuVideoDxe/Qemu.h | 27 ---
> OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 7 -
> OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c | 70 --------
> OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c | 80 ---------
> OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h | 59 -------
> OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c | 78 ---------
> OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c | 66 --------
> 10 files changed, 17 insertions(+), 732 deletions(-)
> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c
> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c
> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h
> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c
> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/4] OvmfPkg: simply use the Bochs interface for vmsvga
2018-11-01 19:02 ` [PATCH 0/4] " Philippe Mathieu-Daudé
@ 2018-11-02 2:12 ` yuchenlin
0 siblings, 0 replies; 12+ messages in thread
From: yuchenlin @ 2018-11-02 2:12 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: edk2-devel, phil, jordan.l.justen, anthony.perard, lersek
On 2018-11-02 03:02, Philippe Mathieu-Daudé wrote:
> Hi Yu-chen Lin,
>
> On 24/10/18 8:40, yuchenlin@synology.com wrote:
>> From: yuchenlin <yuchenlin@synology.com>
>>
>> In this series, replace the original vmsvga driver to Bochs
>> interface.
>
> This is the 'v2' of your previous patch 'OvmfPkg: initialize bochs
> when initializing vmsvga':
> https://lists.01.org/pipermail/edk2-devel/2018-October/031235.html
>
> Keeping different versions and referencing previous series helps when
> reviewing.
>
Sorry for that.
I will add v2 (or v3?) next time.
Thanks,
yuchenlin
>>
>> Simply revert vmsvga driver implementation. After it, use Bochs
>> interface for initializing vmsvga.
>>
>> Because of the PCI BARs difference between std vga and vmsvga.
>> We can not simply recognize the "QEMU VMWare SVGA" as the
>> QEMU_VIDEO_BOCHS_MMIO variant.
>>
>> BAR | std vga | vmsvga
>> ---------------------------------
>> 0 | Framebuffer | I/O space
>> 1 | Reserved | Framebuffer
>> 2 | MMIO | FIFO
>>
>> To overcome this problem, we remain variant QEMU_VIDEO_VMWARE_SVGA,
>> and use it for:
>>
>> (1) Get framebuffer from correct PCI BAR
>> (2) Prevent using BAR2 for MMIO
>>
>> We have tested on qemu before and after commit 104bd1dc70 and all
>> worked.
>
> Did you also test against QEMU v2.9.1?
>
No, but I tested it in QEMU v2.9.0.
Thanks,
yuchenlin
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: yuchenlin <yuchenlin@synology.com>
>>
>> yuchenlin (4):
>> Revert "OvmfPkg/QemuVideoDxe: VMWare SVGA device support"
>> Revert "OvmfPkg/QemuVideoDxe: Helper functions for unaligned port
>> I/O."
>> Revert "OvmfPkg/QemuVideoDxe: list "UnalignedIoInternal.h" in the
>> INF
>> file"
>> OvmfPkg: simply use the Bochs interface for vmsvga
>>
>> OvmfPkg/QemuVideoDxe/Driver.c | 137 ++-------------
>> OvmfPkg/QemuVideoDxe/Gop.c | 68 +-------
>> OvmfPkg/QemuVideoDxe/Initialize.c | 157
>> ------------------
>> OvmfPkg/QemuVideoDxe/Qemu.h | 27 ---
>> OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 7 -
>> OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c | 70 --------
>> OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c | 80 ---------
>> OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h | 59 -------
>> OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c | 78 ---------
>> OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c | 66 --------
>> 10 files changed, 17 insertions(+), 732 deletions(-)
>> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoGcc.c
>> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoIcc.c
>> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoInternal.h
>> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoMsc.c
>> delete mode 100644 OvmfPkg/QemuVideoDxe/UnalignedIoUnsupported.c
>>
^ permalink raw reply [flat|nested] 12+ messages in thread