+ //\r
+ // Check if accessing Vmware SVGA interface works\r
+ //\r
+ if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *IoDesc;\r
+ UINT32 TargetId;\r
+ UINT32 SvgaIdRead;\r
+\r
+ IoDesc = NULL;\r
+ Status = Private->PciIo->GetBarAttributes (\r
+ Private->PciIo,\r
+ PCI_BAR_IDX0,\r
+ NULL,\r
+ (VOID**) &IoDesc\r
+ );\r
+ if (EFI_ERROR (Status) ||\r
+ IoDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_IO ||\r
+ IoDesc->AddrRangeMin > MAX_UINT16 + 1 - (VMWARE_SVGA_VALUE_PORT + 4)) {\r
+ if (IoDesc != NULL) {\r
+ FreePool (IoDesc);\r
+ }\r
+ Status = EFI_DEVICE_ERROR;\r
+ goto RestoreAttributes;\r
+ }\r
+ Private->VmwareSvgaBasePort = (UINT16) IoDesc->AddrRangeMin;\r
+ FreePool (IoDesc);\r
+\r
+ TargetId = VMWARE_SVGA_ID_2;\r
+ while (TRUE) {\r
+ VmwareSvgaWrite (Private, VmwareSvgaRegId, TargetId);\r
+ SvgaIdRead = VmwareSvgaRead (Private, VmwareSvgaRegId);\r
+ if ((SvgaIdRead == TargetId) || (TargetId <= VMWARE_SVGA_ID_0)) {\r
+ break;\r
+ }\r
+ TargetId--;\r
+ }\r
+\r
+ if (SvgaIdRead != TargetId) {\r
+ DEBUG ((\r
+ DEBUG_ERROR,\r
+ "QemuVideo: QEMU_VIDEO_VMWARE_SVGA ID mismatch "\r
+ "(got 0x%x, base address 0x%x)\n",\r
+ SvgaIdRead,\r
+ Private->VmwareSvgaBasePort\r
+ ));\r
+ Status = EFI_DEVICE_ERROR;\r
+ goto RestoreAttributes;\r
+ }\r
+\r
+ Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;\r
+ }\r
+\r