]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c
Fix the bug in PciBusNoEnumerationDxe driver to correct parse the 64bit BAR.
[mirror_edk2.git] / DuetPkg / PciBusNoEnumerationDxe / PciEnumeratorSupport.c
index 0b6658d61c0d4cd3275c4a2581b524a5c8326e2c..6f3979a9c26141d4b6cce281a70499c19378e8f9 100644 (file)
@@ -1,7 +1,7 @@
 /*++\r
 \r
-Copyright (c) 2005 - 2007, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2005 - 2012, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -484,7 +484,7 @@ Returns:
 {\r
   PCI_IO_DEVICE                   *PciIoDevice;\r
   EFI_STATUS                      Status;\r
-  UINT32                          Value;\r
+  UINT                          Value;\r
   EFI_PCI_IO_PROTOCOL             *PciIo;\r
   UINT8                           Temp;\r
 \r
@@ -818,7 +818,7 @@ Returns:
     // will block forwarding 0x100-0x3ff for each 1KB in the \r
     // first 64KB I/O range.\r
     //\r
-    if (!BridgeControl & EFI_PCI_BRIDGE_CONTROL_ISA) {\r
+    if ((BridgeControl & EFI_PCI_BRIDGE_CONTROL_ISA) != 0) {\r
       PciIoDevice->Attributes |= EFI_PCI_IO_ATTRIBUTE_ISA_IO;\r
     } \r
 \r
@@ -864,16 +864,12 @@ Returns:
 --*/\r
 {\r
   UINT32      Value;\r
-  UINT64      BarValue64;\r
   UINT32      OriginalValue;\r
   UINT32      Mask;\r
-  UINT32      Data;\r
-  UINT8       Index;\r
   EFI_STATUS  Status;\r
 \r
   OriginalValue = 0;\r
   Value         = 0;\r
-  BarValue64    = 0;\r
 \r
   Status = BarExisted (\r
             PciIoDevice,\r
@@ -923,7 +919,7 @@ Returns:
     // Need to treat it as no-bar\r
     //\r
     if (PciIoDevice->PciBar[BarIndex].Length == 0) {\r
-      PciIoDevice->PciBar[BarIndex].BarType = 0;\r
+      PciIoDevice->PciBar[BarIndex].BarType = PciBarTypeUnknown;\r
     }\r
 \r
     PciIoDevice->PciBar[BarIndex].Prefetchable  = FALSE;\r
@@ -991,12 +987,7 @@ Returns:
       //\r
       // Fix the length to support some spefic 64 bit BAR\r
       //\r
-      Data  = Value;\r
-      Index = 0;\r
-      for (Data = Value; Data != 0; Data >>= 1) {\r
-       Index ++;\r
-      }\r
-      Value |= ((UINT32)(-1) << Index); \r
+      Value |= ((UINT32)(-1) << HighBitSet32 (Value)); \r
 \r
       //\r
       // Calculate the size of 64bit bar\r
@@ -1291,7 +1282,7 @@ Returns:
     return Status;\r
   }\r
 \r
-  while (PciGetBusRange (Descriptors, &MinBus, &MaxBus, NULL) == EFI_SUCCESS) {\r
+  while (PciGetBusRange (&Descriptors, &MinBus, &MaxBus, NULL) == EFI_SUCCESS) {\r
 \r
     //\r
     // Create a device node for root bridge device with a NULL host bridge controller handle\r
@@ -1335,7 +1326,7 @@ Returns:
 \r
 EFI_STATUS\r
 PciGetBusRange (\r
-  IN     EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Descriptors,\r
+  IN     EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  **Descriptors,\r
   OUT    UINT16                             *MinBus,\r
   OUT    UINT16                             *MaxBus,\r
   OUT    UINT16                             *BusRange\r
@@ -1360,23 +1351,23 @@ Returns:
 --*/\r
 {\r
 \r
-  while (Descriptors->Desc != ACPI_END_TAG_DESCRIPTOR) {\r
-    if (Descriptors->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS) {\r
+  while ((*Descriptors)->Desc != ACPI_END_TAG_DESCRIPTOR) {\r
+    if ((*Descriptors)->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS) {\r
       if (MinBus != NULL) {\r
-        *MinBus = (UINT16)Descriptors->AddrRangeMin;\r
+        *MinBus = (UINT16)(*Descriptors)->AddrRangeMin;\r
       }\r
 \r
       if (MaxBus != NULL) {\r
-        *MaxBus = (UINT16)Descriptors->AddrRangeMax;\r
+        *MaxBus = (UINT16)(*Descriptors)->AddrRangeMax;\r
       }\r
 \r
       if (BusRange != NULL) {\r
-        *BusRange = (UINT16)Descriptors->AddrLen;\r
+        *BusRange = (UINT16)(*Descriptors)->AddrLen;\r
       }\r
       return EFI_SUCCESS;\r
     }\r
 \r
-    Descriptors ++;\r
+    (*Descriptors)++;\r
   }\r
 \r
   return EFI_NOT_FOUND;\r