/* Get current resources */
Buffer.Length = 0;
AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
- if (!ACPI_SUCCESS(AcpiStatus))
+ if ((!ACPI_SUCCESS(AcpiStatus) && AcpiStatus != AE_BUFFER_OVERFLOW) ||
+ Buffer.Length == 0)
{
- return STATUS_SUCCESS;
+ return Irp->IoStatus.Status;
}
- if (Buffer.Length > 0)
+
+ Buffer.Pointer = ExAllocatePool(PagedPool, Buffer.Length);
+ if (!Buffer.Pointer)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
+ if (!ACPI_SUCCESS(AcpiStatus))
{
- Buffer.Pointer = ExAllocatePool(PagedPool, Buffer.Length);
- if (!Buffer.Pointer)
- {
- ASSERT(FALSE);
- }
- AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
- if (!ACPI_SUCCESS(AcpiStatus))
- {
- ASSERT(FALSE);
- }
- }
+ DPRINT1("AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
+ ASSERT(FALSE);
+ return STATUS_UNSUCCESSFUL;
+ }
resource= Buffer.Pointer;
/* Count number of resources */
/* Get current resources */
Buffer.Length = 0;
AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
- if (!ACPI_SUCCESS(AcpiStatus))
+ if ((!ACPI_SUCCESS(AcpiStatus) && AcpiStatus != AE_BUFFER_OVERFLOW) ||
+ Buffer.Length == 0)
{
- return STATUS_SUCCESS;
+ return Irp->IoStatus.Status;
}
- if (Buffer.Length > 0)
+
+ Buffer.Pointer = ExAllocatePool(PagedPool, Buffer.Length);
+ if (!Buffer.Pointer)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
+ if (!ACPI_SUCCESS(AcpiStatus))
{
- Buffer.Pointer = ExAllocatePool(PagedPool, Buffer.Length);
- if (!Buffer.Pointer)
- {
- ASSERT(FALSE);
- }
- AcpiStatus = AcpiGetCurrentResources(DeviceData->AcpiHandle, &Buffer);
- if (!ACPI_SUCCESS(AcpiStatus))
- {
- ASSERT(FALSE);
- }
- }
+ DPRINT1("AcpiGetCurrentResources #2 failed (0x%x)\n", AcpiStatus);
+ ASSERT(FALSE);
+ return STATUS_UNSUCCESSFUL;
+ }
resource= Buffer.Pointer;
/* Count number of resources */