|
@@ -569,3 +569,58 @@ int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list,
|
|
|
return c.count;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(acpi_dev_get_resources);
|
|
|
+
|
|
|
+/**
|
|
|
+ * acpi_dev_filter_resource_type - Filter ACPI resource according to resource
|
|
|
+ * types
|
|
|
+ * @ares: Input ACPI resource object.
|
|
|
+ * @types: Valid resource types of IORESOURCE_XXX
|
|
|
+ *
|
|
|
+ * This is a hepler function to support acpi_dev_get_resources(), which filters
|
|
|
+ * ACPI resource objects according to resource types.
|
|
|
+ */
|
|
|
+int acpi_dev_filter_resource_type(struct acpi_resource *ares,
|
|
|
+ unsigned long types)
|
|
|
+{
|
|
|
+ unsigned long type = 0;
|
|
|
+
|
|
|
+ switch (ares->type) {
|
|
|
+ case ACPI_RESOURCE_TYPE_MEMORY24:
|
|
|
+ case ACPI_RESOURCE_TYPE_MEMORY32:
|
|
|
+ case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
|
|
|
+ type = IORESOURCE_MEM;
|
|
|
+ break;
|
|
|
+ case ACPI_RESOURCE_TYPE_IO:
|
|
|
+ case ACPI_RESOURCE_TYPE_FIXED_IO:
|
|
|
+ type = IORESOURCE_IO;
|
|
|
+ break;
|
|
|
+ case ACPI_RESOURCE_TYPE_IRQ:
|
|
|
+ case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
|
|
|
+ type = IORESOURCE_IRQ;
|
|
|
+ break;
|
|
|
+ case ACPI_RESOURCE_TYPE_DMA:
|
|
|
+ case ACPI_RESOURCE_TYPE_FIXED_DMA:
|
|
|
+ type = IORESOURCE_DMA;
|
|
|
+ break;
|
|
|
+ case ACPI_RESOURCE_TYPE_GENERIC_REGISTER:
|
|
|
+ type = IORESOURCE_REG;
|
|
|
+ break;
|
|
|
+ case ACPI_RESOURCE_TYPE_ADDRESS16:
|
|
|
+ case ACPI_RESOURCE_TYPE_ADDRESS32:
|
|
|
+ case ACPI_RESOURCE_TYPE_ADDRESS64:
|
|
|
+ case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
|
|
|
+ if (ares->data.address.resource_type == ACPI_MEMORY_RANGE)
|
|
|
+ type = IORESOURCE_MEM;
|
|
|
+ else if (ares->data.address.resource_type == ACPI_IO_RANGE)
|
|
|
+ type = IORESOURCE_IO;
|
|
|
+ else if (ares->data.address.resource_type ==
|
|
|
+ ACPI_BUS_NUMBER_RANGE)
|
|
|
+ type = IORESOURCE_BUS;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (type & types) ? 0 : 1;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(acpi_dev_filter_resource_type);
|