Pull acpi-produce-consume into release branch
This commit is contained in:
Коммит
9472d8ce14
|
@ -168,6 +168,29 @@ add_io_space (struct acpi_resource_address64 *addr)
|
||||||
return IO_SPACE_BASE(i);
|
return IO_SPACE_BASE(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static acpi_status __devinit resource_to_window(struct acpi_resource *resource,
|
||||||
|
struct acpi_resource_address64 *addr)
|
||||||
|
{
|
||||||
|
acpi_status status;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We're only interested in _CRS descriptors that are
|
||||||
|
* - address space descriptors for memory or I/O space
|
||||||
|
* - non-zero size
|
||||||
|
* - producers, i.e., the address space is routed downstream,
|
||||||
|
* not consumed by the bridge itself
|
||||||
|
*/
|
||||||
|
status = acpi_resource_to_address64(resource, addr);
|
||||||
|
if (ACPI_SUCCESS(status) &&
|
||||||
|
(addr->resource_type == ACPI_MEMORY_RANGE ||
|
||||||
|
addr->resource_type == ACPI_IO_RANGE) &&
|
||||||
|
addr->address_length &&
|
||||||
|
addr->producer_consumer == ACPI_PRODUCER)
|
||||||
|
return AE_OK;
|
||||||
|
|
||||||
|
return AE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
static acpi_status __devinit
|
static acpi_status __devinit
|
||||||
count_window (struct acpi_resource *resource, void *data)
|
count_window (struct acpi_resource *resource, void *data)
|
||||||
{
|
{
|
||||||
|
@ -175,11 +198,9 @@ count_window (struct acpi_resource *resource, void *data)
|
||||||
struct acpi_resource_address64 addr;
|
struct acpi_resource_address64 addr;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
|
||||||
status = acpi_resource_to_address64(resource, &addr);
|
status = resource_to_window(resource, &addr);
|
||||||
if (ACPI_SUCCESS(status))
|
if (ACPI_SUCCESS(status))
|
||||||
if (addr.resource_type == ACPI_MEMORY_RANGE ||
|
(*windows)++;
|
||||||
addr.resource_type == ACPI_IO_RANGE)
|
|
||||||
(*windows)++;
|
|
||||||
|
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
@ -198,13 +219,11 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
|
||||||
unsigned long flags, offset = 0;
|
unsigned long flags, offset = 0;
|
||||||
struct resource *root;
|
struct resource *root;
|
||||||
|
|
||||||
status = acpi_resource_to_address64(res, &addr);
|
/* Return AE_OK for non-window resources to keep scanning for more */
|
||||||
|
status = resource_to_window(res, &addr);
|
||||||
if (!ACPI_SUCCESS(status))
|
if (!ACPI_SUCCESS(status))
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
|
|
||||||
if (!addr.address_length)
|
|
||||||
return AE_OK;
|
|
||||||
|
|
||||||
if (addr.resource_type == ACPI_MEMORY_RANGE) {
|
if (addr.resource_type == ACPI_MEMORY_RANGE) {
|
||||||
flags = IORESOURCE_MEM;
|
flags = IORESOURCE_MEM;
|
||||||
root = &iomem_resource;
|
root = &iomem_resource;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче