]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/PciBusDxe/PciDeviceSupport.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / PciBusDxe / PciDeviceSupport.c
index b7832c6970ad1d3da08e23d0df61fab2138b8752..581e9075ad41ffa4aded31fdd490d5f5a9588663 100644 (file)
@@ -35,7 +35,7 @@ InitializePciDevicePool (
 **/\r
 VOID\r
 InsertRootBridge (\r
-  IN PCI_IO_DEVICE      *RootBridge\r
+  IN PCI_IO_DEVICE  *RootBridge\r
   )\r
 {\r
   InsertTailList (&mPciDevicePool, &(RootBridge->Link));\r
@@ -51,8 +51,8 @@ InsertRootBridge (
 **/\r
 VOID\r
 InsertPciDevice (\r
-  IN PCI_IO_DEVICE      *Bridge,\r
-  IN PCI_IO_DEVICE      *PciDeviceNode\r
+  IN PCI_IO_DEVICE  *Bridge,\r
+  IN PCI_IO_DEVICE  *PciDeviceNode\r
   )\r
 {\r
   InsertTailList (&Bridge->ChildList, &(PciDeviceNode->Link));\r
@@ -67,7 +67,7 @@ InsertPciDevice (
 **/\r
 VOID\r
 DestroyRootBridge (\r
-  IN PCI_IO_DEVICE      *RootBridge\r
+  IN PCI_IO_DEVICE  *RootBridge\r
   )\r
 {\r
   DestroyPciDeviceTree (RootBridge);\r
@@ -85,7 +85,7 @@ DestroyRootBridge (
 **/\r
 VOID\r
 FreePciDevice (\r
-  IN PCI_IO_DEVICE    *PciIoDevice\r
+  IN PCI_IO_DEVICE  *PciIoDevice\r
   )\r
 {\r
   ASSERT (PciIoDevice != NULL);\r
@@ -116,14 +116,13 @@ FreePciDevice (
 **/\r
 VOID\r
 DestroyPciDeviceTree (\r
-  IN PCI_IO_DEVICE      *Bridge\r
+  IN PCI_IO_DEVICE  *Bridge\r
   )\r
 {\r
-  LIST_ENTRY      *CurrentLink;\r
-  PCI_IO_DEVICE   *Temp;\r
+  LIST_ENTRY     *CurrentLink;\r
+  PCI_IO_DEVICE  *Temp;\r
 \r
   while (!IsListEmpty (&Bridge->ChildList)) {\r
-\r
     CurrentLink = Bridge->ChildList.ForwardLink;\r
 \r
     //\r
@@ -156,12 +155,11 @@ DestroyPciDeviceTree (
 **/\r
 EFI_STATUS\r
 DestroyRootBridgeByHandle (\r
-  IN EFI_HANDLE        Controller\r
+  IN EFI_HANDLE  Controller\r
   )\r
 {\r
-\r
-  LIST_ENTRY      *CurrentLink;\r
-  PCI_IO_DEVICE   *Temp;\r
+  LIST_ENTRY     *CurrentLink;\r
+  PCI_IO_DEVICE  *Temp;\r
 \r
   CurrentLink = mPciDevicePool.ForwardLink;\r
 \r
@@ -169,7 +167,6 @@ DestroyRootBridgeByHandle (
     Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
 \r
     if (Temp->Handle == Controller) {\r
-\r
       RemoveEntryList (CurrentLink);\r
 \r
       DestroyPciDeviceTree (Temp);\r
@@ -202,17 +199,17 @@ DestroyRootBridgeByHandle (
 **/\r
 EFI_STATUS\r
 RegisterPciDevice (\r
-  IN  EFI_HANDLE          Controller,\r
-  IN  PCI_IO_DEVICE       *PciIoDevice,\r
-  OUT EFI_HANDLE          *Handle      OPTIONAL\r
+  IN  EFI_HANDLE     Controller,\r
+  IN  PCI_IO_DEVICE  *PciIoDevice,\r
+  OUT EFI_HANDLE     *Handle      OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  VOID                *PlatformOpRomBuffer;\r
-  UINTN               PlatformOpRomSize;\r
-  EFI_PCI_IO_PROTOCOL *PciIo;\r
-  UINT8               Data8;\r
-  BOOLEAN             HasEfiImage;\r
+  EFI_STATUS           Status;\r
+  VOID                 *PlatformOpRomBuffer;\r
+  UINTN                PlatformOpRomSize;\r
+  EFI_PCI_IO_PROTOCOL  *PciIo;\r
+  UINT8                Data8;\r
+  BOOLEAN              HasEfiImage;\r
 \r
   //\r
   // Install the pciio protocol, device path protocol\r
@@ -240,7 +237,6 @@ RegisterPciDevice (
   // Process OpRom\r
   //\r
   if (!PciIoDevice->AllOpRomProcessed) {\r
-\r
     //\r
     // Get the OpRom provided by platform\r
     //\r
@@ -253,7 +249,7 @@ RegisterPciDevice (
                                        );\r
       if (!EFI_ERROR (Status)) {\r
         PciIoDevice->EmbeddedRom    = FALSE;\r
-        PciIoDevice->RomSize        = (UINT32) PlatformOpRomSize;\r
+        PciIoDevice->RomSize        = (UINT32)PlatformOpRomSize;\r
         PciIoDevice->PciIo.RomSize  = PlatformOpRomSize;\r
         PciIoDevice->PciIo.RomImage = PlatformOpRomBuffer;\r
         //\r
@@ -279,7 +275,7 @@ RegisterPciDevice (
                                        );\r
       if (!EFI_ERROR (Status)) {\r
         PciIoDevice->EmbeddedRom    = FALSE;\r
-        PciIoDevice->RomSize        = (UINT32) PlatformOpRomSize;\r
+        PciIoDevice->RomSize        = (UINT32)PlatformOpRomSize;\r
         PciIoDevice->PciIo.RomSize  = PlatformOpRomSize;\r
         PciIoDevice->PciIo.RomImage = PlatformOpRomBuffer;\r
         //\r
@@ -313,7 +309,7 @@ RegisterPciDevice (
                     );\r
     if (EFI_ERROR (Status)) {\r
       gBS->UninstallMultipleProtocolInterfaces (\r
-             &PciIoDevice->Handle,\r
+             PciIoDevice->Handle,\r
              &gEfiDevicePathProtocolGuid,\r
              PciIoDevice->DevicePath,\r
              &gEfiPciIoProtocolGuid,\r
@@ -324,9 +320,7 @@ RegisterPciDevice (
     }\r
   }\r
 \r
-\r
   if (!PciIoDevice->AllOpRomProcessed) {\r
-\r
     PciIoDevice->AllOpRomProcessed = TRUE;\r
 \r
     //\r
@@ -351,7 +345,7 @@ RegisterPciDevice (
                     );\r
     if (EFI_ERROR (Status)) {\r
       gBS->UninstallMultipleProtocolInterfaces (\r
-             &PciIoDevice->Handle,\r
+             PciIoDevice->Handle,\r
              &gEfiDevicePathProtocolGuid,\r
              PciIoDevice->DevicePath,\r
              &gEfiPciIoProtocolGuid,\r
@@ -360,7 +354,7 @@ RegisterPciDevice (
              );\r
       if (HasEfiImage) {\r
         gBS->UninstallMultipleProtocolInterfaces (\r
-               &PciIoDevice->Handle,\r
+               PciIoDevice->Handle,\r
                &gEfiLoadFile2ProtocolGuid,\r
                &PciIoDevice->LoadFile2,\r
                NULL\r
@@ -374,7 +368,7 @@ RegisterPciDevice (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiPciRootBridgeIoProtocolGuid,\r
-                  (VOID **) &(PciIoDevice->PciRootBridgeIo),\r
+                  (VOID **)&(PciIoDevice->PciRootBridgeIo),\r
                   gPciBusDriverBinding.DriverBindingHandle,\r
                   PciIoDevice->Handle,\r
                   EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
@@ -405,15 +399,14 @@ RegisterPciDevice (
 **/\r
 VOID\r
 RemoveAllPciDeviceOnBridge (\r
-  EFI_HANDLE               RootBridgeHandle,\r
-  PCI_IO_DEVICE            *Bridge\r
+  EFI_HANDLE     RootBridgeHandle,\r
+  PCI_IO_DEVICE  *Bridge\r
   )\r
 {\r
-  LIST_ENTRY      *CurrentLink;\r
-  PCI_IO_DEVICE   *Temp;\r
+  LIST_ENTRY     *CurrentLink;\r
+  PCI_IO_DEVICE  *Temp;\r
 \r
   while (!IsListEmpty (&Bridge->ChildList)) {\r
-\r
     CurrentLink = Bridge->ChildList.ForwardLink;\r
     Temp        = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
 \r
@@ -453,22 +446,22 @@ RemoveAllPciDeviceOnBridge (
 **/\r
 EFI_STATUS\r
 DeRegisterPciDevice (\r
-  IN  EFI_HANDLE                     Controller,\r
-  IN  EFI_HANDLE                     Handle\r
+  IN  EFI_HANDLE  Controller,\r
+  IN  EFI_HANDLE  Handle\r
   )\r
 \r
 {\r
-  EFI_PCI_IO_PROTOCOL             *PciIo;\r
-  EFI_STATUS                      Status;\r
-  PCI_IO_DEVICE                   *PciIoDevice;\r
-  PCI_IO_DEVICE                   *Node;\r
-  LIST_ENTRY                      *CurrentLink;\r
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
+  EFI_PCI_IO_PROTOCOL              *PciIo;\r
+  EFI_STATUS                       Status;\r
+  PCI_IO_DEVICE                    *PciIoDevice;\r
+  PCI_IO_DEVICE                    *Node;\r
+  LIST_ENTRY                       *CurrentLink;\r
+  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *PciRootBridgeIo;\r
 \r
   Status = gBS->OpenProtocol (\r
                   Handle,\r
                   &gEfiPciIoProtocolGuid,\r
-                  (VOID **) &PciIo,\r
+                  (VOID **)&PciIo,\r
                   gPciBusDriverBinding.DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -488,12 +481,11 @@ DeRegisterPciDevice (
     //\r
 \r
     if (!IsListEmpty (&PciIoDevice->ChildList)) {\r
-\r
       CurrentLink = PciIoDevice->ChildList.ForwardLink;\r
 \r
       while (CurrentLink != NULL && CurrentLink != &PciIoDevice->ChildList) {\r
-        Node    = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
-        Status  = DeRegisterPciDevice (Controller, Node->Handle);\r
+        Node   = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
+        Status = DeRegisterPciDevice (Controller, Node->Handle);\r
 \r
         if (EFI_ERROR (Status)) {\r
           return Status;\r
@@ -559,22 +551,22 @@ DeRegisterPciDevice (
                         NULL\r
                         );\r
       }\r
+\r
       //\r
       // Restore Status\r
       //\r
       Status = EFI_SUCCESS;\r
     }\r
 \r
-\r
     if (EFI_ERROR (Status)) {\r
       gBS->OpenProtocol (\r
-            Controller,\r
-            &gEfiPciRootBridgeIoProtocolGuid,\r
-            (VOID **) &PciRootBridgeIo,\r
-            gPciBusDriverBinding.DriverBindingHandle,\r
-            Handle,\r
-            EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-            );\r
+             Controller,\r
+             &gEfiPciRootBridgeIoProtocolGuid,\r
+             (VOID **)&PciRootBridgeIo,\r
+             gPciBusDriverBinding.DriverBindingHandle,\r
+             Handle,\r
+             EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+             );\r
       return Status;\r
     }\r
 \r
@@ -586,7 +578,6 @@ DeRegisterPciDevice (
     PciIoDevice->Registered = FALSE;\r
     PciIoDevice->Handle     = NULL;\r
   } else {\r
-\r
     //\r
     // Handle may be closed before\r
     //\r
@@ -613,11 +604,11 @@ DeRegisterPciDevice (
 **/\r
 EFI_STATUS\r
 StartPciDevicesOnBridge (\r
-  IN EFI_HANDLE                          Controller,\r
-  IN PCI_IO_DEVICE                       *RootBridge,\r
-  IN EFI_DEVICE_PATH_PROTOCOL            *RemainingDevicePath,\r
-  IN OUT UINT8                           *NumberOfChildren,\r
-  IN OUT EFI_HANDLE                      *ChildHandleBuffer\r
+  IN EFI_HANDLE                Controller,\r
+  IN PCI_IO_DEVICE             *RootBridge,\r
+  IN EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath,\r
+  IN OUT UINT8                 *NumberOfChildren,\r
+  IN OUT EFI_HANDLE            *ChildHandleBuffer\r
   )\r
 \r
 {\r
@@ -632,14 +623,13 @@ StartPciDevicesOnBridge (
   CurrentLink = RootBridge->ChildList.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &RootBridge->ChildList) {\r
-\r
     PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
     if (RemainingDevicePath != NULL) {\r
-\r
       Node.DevPath = RemainingDevicePath;\r
 \r
-      if (Node.Pci->Device != PciIoDevice->DeviceNumber ||\r
-          Node.Pci->Function != PciIoDevice->FunctionNumber) {\r
+      if ((Node.Pci->Device != PciIoDevice->DeviceNumber) ||\r
+          (Node.Pci->Function != PciIoDevice->FunctionNumber))\r
+      {\r
         CurrentLink = CurrentLink->ForwardLink;\r
         continue;\r
       }\r
@@ -661,10 +651,9 @@ StartPciDevicesOnBridge (
                    PciIoDevice,\r
                    NULL\r
                    );\r
-\r
       }\r
 \r
-      if (NumberOfChildren != NULL && ChildHandleBuffer != NULL && PciIoDevice->Registered) {\r
+      if ((NumberOfChildren != NULL) && (ChildHandleBuffer != NULL) && PciIoDevice->Registered) {\r
         ChildHandleBuffer[*NumberOfChildren] = PciIoDevice->Handle;\r
         (*NumberOfChildren)++;\r
       }\r
@@ -705,15 +694,12 @@ StartPciDevicesOnBridge (
 \r
         return Status;\r
       } else {\r
-\r
         //\r
         // Currently, the PCI bus driver only support PCI-PCI bridge\r
         //\r
         return EFI_UNSUPPORTED;\r
       }\r
-\r
     } else {\r
-\r
       //\r
       // If remaining device path is NULL,\r
       // try to enable all the pci devices under this bridge\r
@@ -724,10 +710,9 @@ StartPciDevicesOnBridge (
                    PciIoDevice,\r
                    NULL\r
                    );\r
-\r
       }\r
 \r
-      if (NumberOfChildren != NULL && ChildHandleBuffer != NULL && PciIoDevice->Registered) {\r
+      if ((NumberOfChildren != NULL) && (ChildHandleBuffer != NULL) && PciIoDevice->Registered) {\r
         ChildHandleBuffer[*NumberOfChildren] = PciIoDevice->Handle;\r
         (*NumberOfChildren)++;\r
       }\r
@@ -754,7 +739,6 @@ StartPciDevicesOnBridge (
                              Supports,\r
                              NULL\r
                              );\r
-\r
       }\r
 \r
       CurrentLink = CurrentLink->ForwardLink;\r
@@ -780,12 +764,12 @@ StartPciDevicesOnBridge (
 **/\r
 EFI_STATUS\r
 StartPciDevices (\r
-  IN EFI_HANDLE                         Controller\r
+  IN EFI_HANDLE  Controller\r
   )\r
 {\r
-  PCI_IO_DEVICE     *RootBridge;\r
-  EFI_HANDLE        ThisHostBridge;\r
-  LIST_ENTRY        *CurrentLink;\r
+  PCI_IO_DEVICE  *RootBridge;\r
+  EFI_HANDLE     ThisHostBridge;\r
+  LIST_ENTRY     *CurrentLink;\r
 \r
   RootBridge = GetRootBridgeByHandle (Controller);\r
   ASSERT (RootBridge != NULL);\r
@@ -794,19 +778,18 @@ StartPciDevices (
   CurrentLink = mPciDevicePool.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &mPciDevicePool) {\r
-\r
     RootBridge = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
     //\r
     // Locate the right root bridge to start\r
     //\r
     if (RootBridge->PciRootBridgeIo->ParentHandle == ThisHostBridge) {\r
       StartPciDevicesOnBridge (\r
-         RootBridge->Handle,\r
-         RootBridge,\r
-         NULL,\r
-         NULL,\r
-         NULL\r
-         );\r
+        RootBridge->Handle,\r
+        RootBridge,\r
+        NULL,\r
+        NULL,\r
+        NULL\r
+        );\r
     }\r
 \r
     CurrentLink = CurrentLink->ForwardLink;\r
@@ -826,27 +809,27 @@ StartPciDevices (
 **/\r
 PCI_IO_DEVICE *\r
 CreateRootBridge (\r
-  IN EFI_HANDLE                   RootBridgeHandle\r
+  IN EFI_HANDLE  RootBridgeHandle\r
   )\r
 {\r
-  EFI_STATUS                      Status;\r
-  PCI_IO_DEVICE                   *Dev;\r
-  EFI_DEVICE_PATH_PROTOCOL        *ParentDevicePath;\r
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
+  EFI_STATUS                       Status;\r
+  PCI_IO_DEVICE                    *Dev;\r
+  EFI_DEVICE_PATH_PROTOCOL         *ParentDevicePath;\r
+  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *PciRootBridgeIo;\r
 \r
   Dev = AllocateZeroPool (sizeof (PCI_IO_DEVICE));\r
   if (Dev == NULL) {\r
     return NULL;\r
   }\r
 \r
-  Dev->Signature  = PCI_IO_DEVICE_SIGNATURE;\r
-  Dev->Handle     = RootBridgeHandle;\r
+  Dev->Signature = PCI_IO_DEVICE_SIGNATURE;\r
+  Dev->Handle    = RootBridgeHandle;\r
   InitializeListHead (&Dev->ChildList);\r
 \r
   Status = gBS->OpenProtocol (\r
                   RootBridgeHandle,\r
                   &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &ParentDevicePath,\r
+                  (VOID **)&ParentDevicePath,\r
                   gPciBusDriverBinding.DriverBindingHandle,\r
                   RootBridgeHandle,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -868,7 +851,7 @@ CreateRootBridge (
   Status = gBS->OpenProtocol (\r
                   RootBridgeHandle,\r
                   &gEfiPciRootBridgeIoProtocolGuid,\r
-                  (VOID **) &PciRootBridgeIo,\r
+                  (VOID **)&PciRootBridgeIo,\r
                   gPciBusDriverBinding.DriverBindingHandle,\r
                   RootBridgeHandle,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -909,16 +892,15 @@ CreateRootBridge (
 **/\r
 PCI_IO_DEVICE *\r
 GetRootBridgeByHandle (\r
-  EFI_HANDLE RootBridgeHandle\r
+  EFI_HANDLE  RootBridgeHandle\r
   )\r
 {\r
-  PCI_IO_DEVICE   *RootBridgeDev;\r
-  LIST_ENTRY      *CurrentLink;\r
+  PCI_IO_DEVICE  *RootBridgeDev;\r
+  LIST_ENTRY     *CurrentLink;\r
 \r
   CurrentLink = mPciDevicePool.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &mPciDevicePool) {\r
-\r
     RootBridgeDev = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
     if (RootBridgeDev->Handle == RootBridgeHandle) {\r
       return RootBridgeDev;\r
@@ -942,18 +924,16 @@ GetRootBridgeByHandle (
 **/\r
 BOOLEAN\r
 PciDeviceExisted (\r
-  IN PCI_IO_DEVICE    *Bridge,\r
-  IN PCI_IO_DEVICE    *PciIoDevice\r
+  IN PCI_IO_DEVICE  *Bridge,\r
+  IN PCI_IO_DEVICE  *PciIoDevice\r
   )\r
 {\r
-\r
-  PCI_IO_DEVICE   *Temp;\r
-  LIST_ENTRY      *CurrentLink;\r
+  PCI_IO_DEVICE  *Temp;\r
+  LIST_ENTRY     *CurrentLink;\r
 \r
   CurrentLink = Bridge->ChildList.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &Bridge->ChildList) {\r
-\r
     Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
 \r
     if (Temp == PciIoDevice) {\r
@@ -982,20 +962,18 @@ PciDeviceExisted (
 **/\r
 PCI_IO_DEVICE *\r
 LocateVgaDeviceOnHostBridge (\r
-  IN EFI_HANDLE           HostBridgeHandle\r
+  IN EFI_HANDLE  HostBridgeHandle\r
   )\r
 {\r
-  LIST_ENTRY      *CurrentLink;\r
-  PCI_IO_DEVICE   *PciIoDevice;\r
+  LIST_ENTRY     *CurrentLink;\r
+  PCI_IO_DEVICE  *PciIoDevice;\r
 \r
   CurrentLink = mPciDevicePool.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &mPciDevicePool) {\r
-\r
     PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
 \r
-    if (PciIoDevice->PciRootBridgeIo->ParentHandle== HostBridgeHandle) {\r
-\r
+    if (PciIoDevice->PciRootBridgeIo->ParentHandle == HostBridgeHandle) {\r
       PciIoDevice = LocateVgaDevice (PciIoDevice);\r
 \r
       if (PciIoDevice != NULL) {\r
@@ -1019,28 +997,27 @@ LocateVgaDeviceOnHostBridge (
 **/\r
 PCI_IO_DEVICE *\r
 LocateVgaDevice (\r
-  IN PCI_IO_DEVICE        *Bridge\r
+  IN PCI_IO_DEVICE  *Bridge\r
   )\r
 {\r
-  LIST_ENTRY      *CurrentLink;\r
-  PCI_IO_DEVICE   *PciIoDevice;\r
+  LIST_ENTRY     *CurrentLink;\r
+  PCI_IO_DEVICE  *PciIoDevice;\r
 \r
   CurrentLink = Bridge->ChildList.ForwardLink;\r
 \r
   while (CurrentLink != NULL && CurrentLink != &Bridge->ChildList) {\r
-\r
     PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
 \r
-    if (IS_PCI_VGA(&PciIoDevice->Pci) &&\r
-        (PciIoDevice->Attributes &\r
-         (EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY |\r
-          EFI_PCI_IO_ATTRIBUTE_VGA_IO     |\r
-          EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) != 0) {\r
+    if (IS_PCI_VGA (&PciIoDevice->Pci) &&\r
+        ((PciIoDevice->Attributes &\r
+          (EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY |\r
+           EFI_PCI_IO_ATTRIBUTE_VGA_IO     |\r
+           EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) != 0))\r
+    {\r
       return PciIoDevice;\r
     }\r
 \r
     if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {\r
-\r
       PciIoDevice = LocateVgaDevice (PciIoDevice);\r
 \r
       if (PciIoDevice != NULL) {\r
@@ -1053,4 +1030,3 @@ LocateVgaDevice (
 \r
   return NULL;\r
 }\r
-\r