]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.c
MdeModulePkg/IncompPciDeviceSupport: Use correct descriptor length
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / IncompatiblePciDeviceSupportDxe / IncompatiblePciDeviceSupport.c
index 310817f777398659739ce8822e0bf9f72963e9ff..da8daba87d80f26d9f69ebcd5dad8f99896183a5 100644 (file)
@@ -1,12 +1,12 @@
 /** @file\r
   This module is one template module for Incompatible PCI Device Support protocol.\r
-  It includes one incompatile pci devices list template.\r
+  It includes one incompatible pci devices list template.\r
   \r
   Incompatible PCI Device Support protocol allows the PCI bus driver to support\r
   resource allocation for some PCI devices that do not comply with the PCI Specification.\r
 \r
-Copyright (c) 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2009 - 2018, 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
@@ -48,13 +48,11 @@ typedef struct {
 #define PCI_DEVICE_ID(VendorId, DeviceId, Revision, SubVendorId, SubDeviceId) \\r
     VendorId, DeviceId, Revision, SubVendorId, SubDeviceId\r
 \r
-#define PCI_BAR_TYPE_IO   ACPI_ADDRESS_SPACE_TYPE_IO\r
-#define PCI_BAR_TYPE_MEM  ACPI_ADDRESS_SPACE_TYPE_MEM\r
-\r
 #define DEVICE_INF_TAG    0xFFF2\r
 #define DEVICE_RES_TAG    0xFFF1\r
 #define LIST_END_TAG      0x0000\r
 \r
+#define EVEN_ALIGN        0xFFFFFFFFFFFFFFFEULL\r
 \r
 /**\r
   Returns a list of ACPI resource descriptors that detail the special\r
@@ -114,72 +112,72 @@ GLOBAL_REMOVE_IF_UNREFERENCED UINT64 mIncompatiblePciDeviceList[] = {
   // Device Adaptec 9004\r
   //\r
   DEVICE_INF_TAG,\r
-  PCI_DEVICE_ID(0x9004, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),\r
+  PCI_DEVICE_ID(0x9004, MAX_UINT64, MAX_UINT64, MAX_UINT64, MAX_UINT64),\r
   DEVICE_RES_TAG,\r
-  PCI_BAR_TYPE_IO,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_BAR_EVEN_ALIGN,\r
-  PCI_BAR_ALL,\r
-  PCI_BAR_NOCHANGE,\r
+  ACPI_ADDRESS_SPACE_TYPE_IO,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  EVEN_ALIGN,\r
+  MAX_UINT64,\r
+  0,\r
   //\r
   // Device Adaptec 9005\r
   //\r
   DEVICE_INF_TAG,\r
-  PCI_DEVICE_ID(0x9005, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),\r
+  PCI_DEVICE_ID(0x9005, MAX_UINT64, MAX_UINT64, MAX_UINT64, MAX_UINT64),\r
   DEVICE_RES_TAG,\r
-  PCI_BAR_TYPE_IO,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_BAR_EVEN_ALIGN,\r
-  PCI_BAR_ALL,\r
-  PCI_BAR_NOCHANGE,\r
+  ACPI_ADDRESS_SPACE_TYPE_IO,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  EVEN_ALIGN,\r
+  MAX_UINT64,\r
+  0,\r
   //\r
   // Device QLogic  1007\r
   //\r
   DEVICE_INF_TAG,\r
-  PCI_DEVICE_ID(0x1077, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),\r
+  PCI_DEVICE_ID(0x1077, MAX_UINT64, MAX_UINT64, MAX_UINT64, MAX_UINT64),\r
   DEVICE_RES_TAG,\r
-  PCI_BAR_TYPE_IO,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_BAR_EVEN_ALIGN,\r
-  PCI_BAR_ALL,\r
-  PCI_BAR_NOCHANGE,\r
+  ACPI_ADDRESS_SPACE_TYPE_IO,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  EVEN_ALIGN,\r
+  MAX_UINT64,\r
+  0,\r
   //\r
   // Device Agilent 103C\r
   //\r
   DEVICE_INF_TAG,\r
-  PCI_DEVICE_ID(0x103C, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),\r
+  PCI_DEVICE_ID(0x103C, MAX_UINT64, MAX_UINT64, MAX_UINT64, MAX_UINT64),\r
   DEVICE_RES_TAG,\r
-  PCI_BAR_TYPE_IO,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_BAR_EVEN_ALIGN,\r
-  PCI_BAR_ALL,\r
-  PCI_BAR_NOCHANGE,\r
+  ACPI_ADDRESS_SPACE_TYPE_IO,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  EVEN_ALIGN,\r
+  MAX_UINT64,\r
+  0,\r
   //\r
   // Device Agilent 15BC\r
   //\r
   DEVICE_INF_TAG,\r
-  PCI_DEVICE_ID(0x15BC, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE, DEVICE_ID_NOCARE),\r
+  PCI_DEVICE_ID(0x15BC, MAX_UINT64, MAX_UINT64, MAX_UINT64, MAX_UINT64),\r
   DEVICE_RES_TAG,\r
-  PCI_BAR_TYPE_IO,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_ACPI_UNUSED,\r
-  PCI_BAR_EVEN_ALIGN,\r
-  PCI_BAR_ALL,\r
-  PCI_BAR_NOCHANGE,\r
+  ACPI_ADDRESS_SPACE_TYPE_IO,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  EVEN_ALIGN,\r
+  MAX_UINT64,\r
+  0,\r
   //\r
   // The end of the list\r
   //\r
@@ -285,31 +283,31 @@ PCheckDevice (
       //\r
       // See if the Header matches the parameters passed in\r
       //\r
-      if (Header->VendorId != DEVICE_ID_NOCARE) {\r
+      if ((Header->VendorId != MAX_UINT64) && (VendorId != MAX_UINTN)) {\r
         if (Header->VendorId != VendorId) {\r
           continue;\r
         }\r
       }\r
 \r
-      if (Header->DeviceId != DEVICE_ID_NOCARE) {\r
+      if ((Header->DeviceId != MAX_UINT64) && (DeviceId != MAX_UINTN)) {\r
         if (DeviceId != Header->DeviceId) {\r
           continue;\r
         }\r
       }\r
 \r
-      if (Header->RevisionId != DEVICE_ID_NOCARE) {\r
+      if ((Header->RevisionId != MAX_UINT64) && (RevisionId != MAX_UINTN)) {\r
         if (RevisionId != Header->RevisionId) {\r
           continue;\r
         }\r
       }\r
 \r
-      if (Header->SubsystemVendorId != DEVICE_ID_NOCARE) {\r
+      if ((Header->SubsystemVendorId != MAX_UINT64) && (SubsystemVendorId != MAX_UINTN)) {\r
         if (SubsystemVendorId != Header->SubsystemVendorId) {\r
           continue;\r
         }\r
       }\r
 \r
-      if (Header->SubsystemDeviceId != DEVICE_ID_NOCARE) {\r
+      if ((Header->SubsystemDeviceId != MAX_UINT64) && (SubsystemDeviceId != MAX_UINTN)) {\r
         if (SubsystemDeviceId != Header->SubsystemDeviceId) {\r
           continue;\r
         }\r
@@ -346,7 +344,7 @@ PCheckDevice (
         Dsc = (EFI_PCI_RESOUCE_DESCRIPTOR *) (ListPtr + 1);\r
 \r
         AcpiPtr->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;\r
-        AcpiPtr->Len = sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);\r
+        AcpiPtr->Len = (UINT16) sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - 3;\r
         AcpiPtr->ResType = (UINT8) Dsc->ResType;\r
         AcpiPtr->GenFlag = (UINT8) Dsc->GenFlag;\r
         AcpiPtr->SpecificFlag = (UINT8) Dsc->SpecificFlag;\r