]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/QemuVideoDxe: Add SubClass field to QEMU_VIDEO_CARD
authorGerd Hoffmann <kraxel@redhat.com>
Thu, 17 May 2018 09:21:32 +0000 (11:21 +0200)
committerLaszlo Ersek <lersek@redhat.com>
Thu, 17 May 2018 10:50:46 +0000 (12:50 +0200)
Then check for PCI_CLASS_DISPLAY_VGA using the new field.
This allows to enable/disable non-vga display classes per
card entry.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
OvmfPkg/QemuVideoDxe/Driver.c
OvmfPkg/QemuVideoDxe/Qemu.h

index 0dce80e59ba8af4e01e8c6b586d104974e54431c..2d7ad43cb33bb09c930279599139d9534ccfbed5 100644 (file)
@@ -30,36 +30,43 @@ EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = {
 \r
 QEMU_VIDEO_CARD gQemuVideoCardList[] = {\r
     {\r
+        PCI_CLASS_DISPLAY_VGA,\r
         CIRRUS_LOGIC_VENDOR_ID,\r
         CIRRUS_LOGIC_5430_DEVICE_ID,\r
         QEMU_VIDEO_CIRRUS_5430,\r
         L"Cirrus 5430"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         CIRRUS_LOGIC_VENDOR_ID,\r
         CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID,\r
         QEMU_VIDEO_CIRRUS_5430,\r
         L"Cirrus 5430"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         CIRRUS_LOGIC_VENDOR_ID,\r
         CIRRUS_LOGIC_5446_DEVICE_ID,\r
         QEMU_VIDEO_CIRRUS_5446,\r
         L"Cirrus 5446"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         0x1234,\r
         0x1111,\r
         QEMU_VIDEO_BOCHS_MMIO,\r
         L"QEMU Standard VGA"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         0x1b36,\r
         0x0100,\r
         QEMU_VIDEO_BOCHS,\r
         L"QEMU QXL VGA"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         0x1af4,\r
         0x1050,\r
         QEMU_VIDEO_BOCHS_MMIO,\r
         L"QEMU VirtIO VGA"\r
     },{\r
+        PCI_CLASS_DISPLAY_VGA,\r
         VMWARE_PCI_VENDOR_ID_VMWARE,\r
         VMWARE_PCI_DEVICE_ID_VMWARE_SVGA2,\r
         QEMU_VIDEO_VMWARE_SVGA,\r
@@ -71,6 +78,7 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
 \r
 static QEMU_VIDEO_CARD*\r
 QemuVideoDetect(\r
+  IN UINT8 SubClass,\r
   IN UINT16 VendorId,\r
   IN UINT16 DeviceId\r
   )\r
@@ -78,7 +86,8 @@ QemuVideoDetect(
   UINTN Index = 0;\r
 \r
   while (gQemuVideoCardList[Index].VendorId != 0) {\r
-    if (gQemuVideoCardList[Index].VendorId == VendorId &&\r
+    if (gQemuVideoCardList[Index].SubClass == SubClass &&\r
+        gQemuVideoCardList[Index].VendorId == VendorId &&\r
         gQemuVideoCardList[Index].DeviceId == DeviceId) {\r
       return gQemuVideoCardList + Index;\r
     }\r
@@ -141,10 +150,10 @@ QemuVideoControllerDriverSupported (
   }\r
 \r
   Status = EFI_UNSUPPORTED;\r
-  if (!IS_PCI_VGA (&Pci)) {\r
+  if (!IS_PCI_DISPLAY (&Pci)) {\r
     goto Done;\r
   }\r
-  Card = QemuVideoDetect(Pci.Hdr.VendorId, Pci.Hdr.DeviceId);\r
+  Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);\r
   if (Card != NULL) {\r
     DEBUG ((EFI_D_INFO, "QemuVideo: %s detected\n", Card->Name));\r
     Status = EFI_SUCCESS;\r
@@ -243,7 +252,7 @@ QemuVideoControllerDriverStart (
   //\r
   // Determine card variant.\r
   //\r
-  Card = QemuVideoDetect(Pci.Hdr.VendorId, Pci.Hdr.DeviceId);\r
+  Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId);\r
   if (Card == NULL) {\r
     Status = EFI_DEVICE_ERROR;\r
     goto ClosePciIo;\r
index 7fbb25b3efd35c47bb88ac31bda9d92653f7f145..bc49f867a4ffc7aa6c09f62b81faff483b51d37f 100644 (file)
@@ -96,6 +96,7 @@ typedef enum {
 } QEMU_VIDEO_VARIANT;\r
 \r
 typedef struct {\r
+  UINT8                                 SubClass;\r
   UINT16                                VendorId;\r
   UINT16                                DeviceId;\r
   QEMU_VIDEO_VARIANT                    Variant;\r