[ACPICA]
[reactos.git] / reactos / drivers / bus / acpi / buspdo.c
index a50fa17..87e7e3f 100644 (file)
@@ -165,6 +165,42 @@ Bus_PDO_PnP (
         }
         status = STATUS_SUCCESS;// We must not fail this IRP.
         break;
+
+    case IRP_MN_REMOVE_DEVICE:
+        //
+        // We handle REMOVE_DEVICE just like STOP_DEVICE. This is because
+        // the device is still physically present (or at least we don't know any better)
+        // so we have to retain the PDO after stopping and removing power from it.
+        //
+        if (DeviceData->InterfaceName.Length != 0)
+            IoSetDeviceInterfaceState(&DeviceData->InterfaceName, FALSE);
+
+        if (DeviceData->AcpiHandle && acpi_bus_power_manageable(DeviceData->AcpiHandle) &&
+            !ACPI_SUCCESS(acpi_bus_set_power(DeviceData->AcpiHandle, ACPI_STATE_D3)))
+        {
+            DPRINT1("Device %x failed to enter D3!\n", DeviceData->AcpiHandle);
+            state.DeviceState = PowerDeviceD3;
+            PoSetPowerState(DeviceData->Common.Self, DevicePowerState, state);
+            DeviceData->Common.DevicePowerState = PowerDeviceD3;
+        }
+        
+        SET_NEW_PNP_STATE(DeviceData->Common, Stopped);
+        status = STATUS_SUCCESS;
+        break;
+
+    case IRP_MN_QUERY_REMOVE_DEVICE:
+        SET_NEW_PNP_STATE(DeviceData->Common, RemovalPending);
+        status = STATUS_SUCCESS;
+        break;
+
+    case IRP_MN_CANCEL_REMOVE_DEVICE:
+        if (RemovalPending == DeviceData->Common.DevicePnPState)
+        {
+            RESTORE_PREVIOUS_PNP_STATE(DeviceData->Common);
+        }
+        status = STATUS_SUCCESS;
+        break;
+
     case IRP_MN_QUERY_CAPABILITIES:
 
         //
@@ -436,7 +472,7 @@ Bus_PDO_QueryDeviceId(
 
         NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp));
 
-        buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof(WCHAR), 'IPCA');
+        buffer = ExAllocatePoolWithTag(PagedPool, length * sizeof(WCHAR), 'IpcA');
 
         if (!buffer) {
            status = STATUS_INSUFFICIENT_RESOURCES;
@@ -475,7 +511,7 @@ Bus_PDO_QueryDeviceId(
 
         NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp));
 
-        buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof (WCHAR), 'IPCA');
+        buffer = ExAllocatePoolWithTag(PagedPool, length * sizeof(WCHAR), 'IpcA');
         if (!buffer) {
            status = STATUS_INSUFFICIENT_RESOURCES;
            break;
@@ -541,7 +577,7 @@ Bus_PDO_QueryDeviceId(
 
         NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp));
 
-        buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof(WCHAR), 'IPCA');
+        buffer = ExAllocatePoolWithTag(PagedPool, length * sizeof(WCHAR), 'IpcA');
 
         if (!buffer) {
            status = STATUS_INSUFFICIENT_RESOURCES;
@@ -551,6 +587,7 @@ Bus_PDO_QueryDeviceId(
         RtlCopyMemory (buffer, src, length * sizeof(WCHAR));
         Irp->IoStatus.Information = (ULONG_PTR) buffer;
         DPRINT("BusQueryHardwareIDs: %ls\n",buffer);
+        status = STATUS_SUCCESS;
         break;
 
     case BusQueryCompatibleIDs:
@@ -611,7 +648,7 @@ Bus_PDO_QueryDeviceId(
             
             NT_ASSERT(length * sizeof(WCHAR) <= sizeof(temp));
 
-            buffer = ExAllocatePoolWithTag (PagedPool, length * sizeof(WCHAR), 'IPCA');
+            buffer = ExAllocatePoolWithTag(PagedPool, length * sizeof(WCHAR), 'IpcA');
             if (!buffer)
             {
                 status = STATUS_INSUFFICIENT_RESOURCES;
@@ -720,7 +757,7 @@ Bus_PDO_QueryDeviceText(
           else
             Temp = L"Other ACPI device";
 
-            Buffer = ExAllocatePoolWithTag (PagedPool, (wcslen(Temp) + 1) * sizeof(WCHAR), 'IPCA');
+            Buffer = ExAllocatePoolWithTag(PagedPool, (wcslen(Temp) + 1) * sizeof(WCHAR), 'IpcA');
 
             if (!Buffer) {
                 status = STATUS_INSUFFICIENT_RESOURCES;
@@ -796,7 +833,7 @@ Bus_PDO_QueryResources(
         DPRINT("Found PCI root hub: %d\n", BusNumber);
 
         ResourceListSize = sizeof(CM_RESOURCE_LIST);
-        ResourceList = (PCM_RESOURCE_LIST)ExAllocatePoolWithTag(PagedPool, ResourceListSize, 'IPCA');
+        ResourceList = ExAllocatePoolWithTag(PagedPool, ResourceListSize, 'RpcA');
         if (!ResourceList)
             return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -826,7 +863,7 @@ Bus_PDO_QueryResources(
       return Irp->IoStatus.Status;
     }
 
-    Buffer.Pointer = ExAllocatePoolWithTag(PagedPool, Buffer.Length, 'IPCA');
+    Buffer.Pointer = ExAllocatePoolWithTag(PagedPool, Buffer.Length, 'BpcA');
     if (!Buffer.Pointer)
       return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -895,11 +932,11 @@ Bus_PDO_QueryResources(
 
     /* Allocate memory */
     ResourceListSize = sizeof(CM_RESOURCE_LIST) + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * (NumberOfResources - 1);
-    ResourceList = (PCM_RESOURCE_LIST)ExAllocatePoolWithTag(PagedPool, ResourceListSize, 'IPCA');
+    ResourceList = ExAllocatePoolWithTag(PagedPool, ResourceListSize, 'RpcA');
 
     if (!ResourceList)
     {
-        ExFreePoolWithTag(Buffer.Pointer, 'IPCA');
+        ExFreePoolWithTag(Buffer.Pointer, 'BpcA');
         return STATUS_INSUFFICIENT_RESOURCES;
     }
     ResourceList->Count = 1;
@@ -1021,8 +1058,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Type = CmResourceTypeBusNumber;
                     ResourceDescriptor->ShareDisposition = CmResourceShareShared;
                     ResourceDescriptor->Flags = 0;
-                    ResourceDescriptor->u.BusNumber.Start = addr16_data->Minimum;
-                    ResourceDescriptor->u.BusNumber.Length = addr16_data->AddressLength;
+                    ResourceDescriptor->u.BusNumber.Start = addr16_data->Address.Minimum;
+                    ResourceDescriptor->u.BusNumber.Length = addr16_data->Address.AddressLength;
                 }
                 else if (addr16_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1031,8 +1068,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr16_data->Decode == ACPI_POS_DECODE)
                         ResourceDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    ResourceDescriptor->u.Port.Start.QuadPart = addr16_data->Minimum;
-                    ResourceDescriptor->u.Port.Length = addr16_data->AddressLength;
+                    ResourceDescriptor->u.Port.Start.QuadPart = addr16_data->Address.Minimum;
+                    ResourceDescriptor->u.Port.Length = addr16_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1049,8 +1086,8 @@ Bus_PDO_QueryResources(
                         case ACPI_WRITE_COMBINING_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    ResourceDescriptor->u.Memory.Start.QuadPart = addr16_data->Minimum;
-                    ResourceDescriptor->u.Memory.Length = addr16_data->AddressLength;
+                    ResourceDescriptor->u.Memory.Start.QuadPart = addr16_data->Address.Minimum;
+                    ResourceDescriptor->u.Memory.Length = addr16_data->Address.AddressLength;
                 }
                 ResourceDescriptor++;
                 break;
@@ -1065,8 +1102,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Type = CmResourceTypeBusNumber;
                     ResourceDescriptor->ShareDisposition = CmResourceShareShared;
                     ResourceDescriptor->Flags = 0;
-                    ResourceDescriptor->u.BusNumber.Start = addr32_data->Minimum;
-                    ResourceDescriptor->u.BusNumber.Length = addr32_data->AddressLength;
+                    ResourceDescriptor->u.BusNumber.Start = addr32_data->Address.Minimum;
+                    ResourceDescriptor->u.BusNumber.Length = addr32_data->Address.AddressLength;
                 }
                 else if (addr32_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1075,8 +1112,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr32_data->Decode == ACPI_POS_DECODE)
                         ResourceDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    ResourceDescriptor->u.Port.Start.QuadPart = addr32_data->Minimum;
-                    ResourceDescriptor->u.Port.Length = addr32_data->AddressLength;
+                    ResourceDescriptor->u.Port.Start.QuadPart = addr32_data->Address.Minimum;
+                    ResourceDescriptor->u.Port.Length = addr32_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1093,8 +1130,8 @@ Bus_PDO_QueryResources(
                         case ACPI_WRITE_COMBINING_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    ResourceDescriptor->u.Memory.Start.QuadPart = addr32_data->Minimum;
-                    ResourceDescriptor->u.Memory.Length = addr32_data->AddressLength;
+                    ResourceDescriptor->u.Memory.Start.QuadPart = addr32_data->Address.Minimum;
+                    ResourceDescriptor->u.Memory.Length = addr32_data->Address.AddressLength;
                 }
                 ResourceDescriptor++;
                 break;
@@ -1110,8 +1147,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Type = CmResourceTypeBusNumber;
                     ResourceDescriptor->ShareDisposition = CmResourceShareShared;
                     ResourceDescriptor->Flags = 0;
-                    ResourceDescriptor->u.BusNumber.Start = (ULONG)addr64_data->Minimum;
-                    ResourceDescriptor->u.BusNumber.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.BusNumber.Start = (ULONG)addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.BusNumber.Length = addr64_data->Address.AddressLength;
                 }
                 else if (addr64_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1120,8 +1157,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr64_data->Decode == ACPI_POS_DECODE)
                         ResourceDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    ResourceDescriptor->u.Port.Start.QuadPart = addr64_data->Minimum;
-                    ResourceDescriptor->u.Port.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.Port.Start.QuadPart = addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.Port.Length = addr64_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1138,8 +1175,8 @@ Bus_PDO_QueryResources(
                         case ACPI_WRITE_COMBINING_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    ResourceDescriptor->u.Memory.Start.QuadPart = addr64_data->Minimum;
-                    ResourceDescriptor->u.Memory.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.Memory.Start.QuadPart = addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.Memory.Length = addr64_data->Address.AddressLength;
                 }
                 ResourceDescriptor++;
                 break;
@@ -1155,8 +1192,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Type = CmResourceTypeBusNumber;
                     ResourceDescriptor->ShareDisposition = CmResourceShareShared;
                     ResourceDescriptor->Flags = 0;
-                    ResourceDescriptor->u.BusNumber.Start = (ULONG)addr64_data->Minimum;
-                    ResourceDescriptor->u.BusNumber.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.BusNumber.Start = (ULONG)addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.BusNumber.Length = addr64_data->Address.AddressLength;
                 }
                 else if (addr64_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1165,8 +1202,8 @@ Bus_PDO_QueryResources(
                     ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr64_data->Decode == ACPI_POS_DECODE)
                         ResourceDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    ResourceDescriptor->u.Port.Start.QuadPart = addr64_data->Minimum;
-                    ResourceDescriptor->u.Port.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.Port.Start.QuadPart = addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.Port.Length = addr64_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1183,8 +1220,8 @@ Bus_PDO_QueryResources(
                         case ACPI_WRITE_COMBINING_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: ResourceDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    ResourceDescriptor->u.Memory.Start.QuadPart = addr64_data->Minimum;
-                    ResourceDescriptor->u.Memory.Length = addr64_data->AddressLength;
+                    ResourceDescriptor->u.Memory.Start.QuadPart = addr64_data->Address.Minimum;
+                    ResourceDescriptor->u.Memory.Length = addr64_data->Address.AddressLength;
                 }
                 ResourceDescriptor++;
                 break;
@@ -1245,7 +1282,7 @@ Bus_PDO_QueryResources(
         resource = ACPI_NEXT_RESOURCE(resource);
     }
 
-    ExFreePoolWithTag(Buffer.Pointer, 'IPCA');
+    ExFreePoolWithTag(Buffer.Pointer, 'BpcA');
     Irp->IoStatus.Information = (ULONG_PTR)ResourceList;
     return STATUS_SUCCESS;
 }
@@ -1298,7 +1335,7 @@ Bus_PDO_QueryResourceRequirements(
             break;
     }
 
-    Buffer.Pointer = ExAllocatePoolWithTag(PagedPool, Buffer.Length, 'IPCA');
+    Buffer.Pointer = ExAllocatePoolWithTag(PagedPool, Buffer.Length, 'BpcA');
     if (!Buffer.Pointer)
       return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -1368,11 +1405,11 @@ Bus_PDO_QueryResourceRequirements(
     }
 
     RequirementsListSize = sizeof(IO_RESOURCE_REQUIREMENTS_LIST) + sizeof(IO_RESOURCE_DESCRIPTOR) * (NumberOfResources - 1);
-    RequirementsList = (PIO_RESOURCE_REQUIREMENTS_LIST)ExAllocatePoolWithTag(PagedPool, RequirementsListSize, 'IPCA');
+    RequirementsList = ExAllocatePoolWithTag(PagedPool, RequirementsListSize, 'RpcA');
 
     if (!RequirementsList)
     {
-        ExFreePoolWithTag(Buffer.Pointer, 'IPCA');
+        ExFreePoolWithTag(Buffer.Pointer, 'BpcA');
         return STATUS_INSUFFICIENT_RESOURCES;
     }
     RequirementsList->ListSize = RequirementsListSize;
@@ -1500,9 +1537,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Type = CmResourceTypeBusNumber;
                     RequirementDescriptor->ShareDisposition = CmResourceShareShared;
                     RequirementDescriptor->Flags = 0;
-                    RequirementDescriptor->u.BusNumber.MinBusNumber = addr16_data->Minimum;
-                    RequirementDescriptor->u.BusNumber.MaxBusNumber = addr16_data->Maximum + addr16_data->AddressLength - 1;
-                    RequirementDescriptor->u.BusNumber.Length = addr16_data->AddressLength;
+                    RequirementDescriptor->u.BusNumber.MinBusNumber = addr16_data->Address.Minimum;
+                    RequirementDescriptor->u.BusNumber.MaxBusNumber = addr16_data->Address.Maximum + addr16_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.BusNumber.Length = addr16_data->Address.AddressLength;
                 }
                 else if (addr16_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1511,9 +1548,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr16_data->Decode == ACPI_POS_DECODE)
                         RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr16_data->Minimum;
-                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr16_data->Maximum + addr16_data->AddressLength - 1;
-                    RequirementDescriptor->u.Port.Length = addr16_data->AddressLength;
+                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr16_data->Address.Minimum;
+                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr16_data->Address.Maximum + addr16_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Port.Length = addr16_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1530,9 +1567,9 @@ Bus_PDO_QueryResourceRequirements(
                         case ACPI_WRITE_COMBINING_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr16_data->Minimum;
-                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr16_data->Maximum + addr16_data->AddressLength - 1;
-                    RequirementDescriptor->u.Memory.Length = addr16_data->AddressLength;
+                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr16_data->Address.Minimum;
+                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr16_data->Address.Maximum + addr16_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Memory.Length = addr16_data->Address.AddressLength;
                 }
                 RequirementDescriptor++;
                 break;
@@ -1548,9 +1585,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Type = CmResourceTypeBusNumber;
                     RequirementDescriptor->ShareDisposition = CmResourceShareShared;
                     RequirementDescriptor->Flags = 0;
-                    RequirementDescriptor->u.BusNumber.MinBusNumber = addr32_data->Minimum;
-                    RequirementDescriptor->u.BusNumber.MaxBusNumber = addr32_data->Maximum + addr32_data->AddressLength - 1;
-                    RequirementDescriptor->u.BusNumber.Length = addr32_data->AddressLength;
+                    RequirementDescriptor->u.BusNumber.MinBusNumber = addr32_data->Address.Minimum;
+                    RequirementDescriptor->u.BusNumber.MaxBusNumber = addr32_data->Address.Maximum + addr32_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.BusNumber.Length = addr32_data->Address.AddressLength;
                 }
                 else if (addr32_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1559,9 +1596,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr32_data->Decode == ACPI_POS_DECODE)
                         RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr32_data->Minimum;
-                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr32_data->Maximum + addr32_data->AddressLength - 1;
-                    RequirementDescriptor->u.Port.Length = addr32_data->AddressLength;
+                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr32_data->Address.Minimum;
+                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr32_data->Address.Maximum + addr32_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Port.Length = addr32_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1578,9 +1615,9 @@ Bus_PDO_QueryResourceRequirements(
                         case ACPI_WRITE_COMBINING_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr32_data->Minimum;
-                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr32_data->Maximum + addr32_data->AddressLength - 1;
-                    RequirementDescriptor->u.Memory.Length = addr32_data->AddressLength;
+                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr32_data->Address.Minimum;
+                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr32_data->Address.Maximum + addr32_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Memory.Length = addr32_data->Address.AddressLength;
                 }
                 RequirementDescriptor++;
                 break;
@@ -1597,9 +1634,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Type = CmResourceTypeBusNumber;
                     RequirementDescriptor->ShareDisposition = CmResourceShareShared;
                     RequirementDescriptor->Flags = 0;
-                    RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Minimum;
-                    RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.BusNumber.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.BusNumber.Length = addr64_data->Address.AddressLength;
                 }
                 else if (addr64_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1608,9 +1645,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr64_data->Decode == ACPI_POS_DECODE)
                         RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Minimum;
-                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.Port.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Port.Length = addr64_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1627,9 +1664,9 @@ Bus_PDO_QueryResourceRequirements(
                         case ACPI_WRITE_COMBINING_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Minimum;
-                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.Memory.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Memory.Length = addr64_data->Address.AddressLength;
                 }
                 RequirementDescriptor++;
                 break;
@@ -1646,9 +1683,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Type = CmResourceTypeBusNumber;
                     RequirementDescriptor->ShareDisposition = CmResourceShareShared;
                     RequirementDescriptor->Flags = 0;
-                    RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Minimum;
-                    RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.BusNumber.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.BusNumber.Length = addr64_data->Address.AddressLength;
                 }
                 else if (addr64_data->ResourceType == ACPI_IO_RANGE)
                 {
@@ -1657,9 +1694,9 @@ Bus_PDO_QueryResourceRequirements(
                     RequirementDescriptor->Flags = CM_RESOURCE_PORT_IO;
                     if (addr64_data->Decode == ACPI_POS_DECODE)
                         RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE;
-                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Minimum;
-                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.Port.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Port.Length = addr64_data->Address.AddressLength;
                 }
                 else
                 {
@@ -1676,9 +1713,9 @@ Bus_PDO_QueryResourceRequirements(
                         case ACPI_WRITE_COMBINING_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_COMBINEDWRITE; break;
                         case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break;
                     }
-                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Minimum;
-                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1;
-                    RequirementDescriptor->u.Memory.Length = addr64_data->AddressLength;
+                    RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Address.Minimum;
+                    RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Address.Maximum + addr64_data->Address.AddressLength - 1;
+                    RequirementDescriptor->u.Memory.Length = addr64_data->Address.AddressLength;
                 }
                 RequirementDescriptor++;
                 break;
@@ -1744,7 +1781,7 @@ Bus_PDO_QueryResourceRequirements(
         }
         resource = ACPI_NEXT_RESOURCE(resource);
     }
-    ExFreePoolWithTag(Buffer.Pointer, 'IPCA');
+    ExFreePoolWithTag(Buffer.Pointer, 'BpcA');
 
     Irp->IoStatus.Information = (ULONG_PTR)RequirementsList;
 
@@ -1809,10 +1846,9 @@ Return Value:
             ASSERTMSG("Someone above is handling TargetDeviceRelation", !deviceRelations);
         }
 
-        deviceRelations = (PDEVICE_RELATIONS)
-                ExAllocatePoolWithTag (PagedPool,
-                                        sizeof(DEVICE_RELATIONS),
-                                        'IPCA');
+        deviceRelations = ExAllocatePoolWithTag(PagedPool,
+                                                sizeof(DEVICE_RELATIONS),
+                                                'IpcA');
         if (!deviceRelations) {
                 status = STATUS_INSUFFICIENT_RESOURCES;
                 break;
@@ -1871,8 +1907,9 @@ Return Value:
 
     PAGED_CODE ();
 
-    busInfo = ExAllocatePoolWithTag (PagedPool, sizeof(PNP_BUS_INFORMATION),
-                                        'IPCA');
+    busInfo = ExAllocatePoolWithTag(PagedPool,
+                                    sizeof(PNP_BUS_INFORMATION),
+                                    'IpcA');
 
     if (busInfo == NULL) {
       return STATUS_INSUFFICIENT_RESOURCES;