> -----Original Message----- > From: Jiang Liu [mailto:jiang.liu@xxxxxxxxxxxxxxx] > Sent: Wednesday, February 4, 2015 9:44 PM > To: Rafael J. Wysocki; Thomas Gleixner; Bjorn Helgaas; Yinghai Lu; Borislav > Petkov; Lv Zheng; Tony Luck; Fenghua Yu; Ingo Molnar; H. Peter Anvin; > x86@xxxxxxxxxx; Len Brown; Robert Moore; Clemens Ladisch; Arnd > Bergmann; Greg Kroah-Hartman; KY Srinivasan; Haiyang Zhang; Konrad > Rzeszutek Wilk; Boris Ostrovsky; David Vrabel > Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-pci@xxxxxxxxxxxxxxx; linux- > acpi@xxxxxxxxxxxxxxx; Jiang Liu; linux-ia64@xxxxxxxxxxxxxxx; > devel@xxxxxxxxxx; devel@xxxxxxxxxxxxxxxxxxxxxx; xen- > devel@xxxxxxxxxxxxxxxxxxxx > Subject: [Patch v4 01/23] ACPICA: Resources: Provide common part for struct > acpi_resource_address structures. > > From: Lv Zheng <lv.zheng@xxxxxxxxx> > > struct acpi_resource_address and struct > acpi_resource_extended_address64 share substracts just at different > offsets. To unify the parsing functions, OSPMs like Linux need a new > ACPI_ADDRESS64_ATTRIBUTE as their substructs, so they can extract the > shared data. > > This patch also synchronizes the structure changes to the Linux kernel. > The usages are searched by matching the following keywords: > 1. acpi_resource_address > 2. acpi_resource_extended_address > 3. ACPI_RESOURCE_TYPE_ADDRESS > 4. ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS > And we found and fixed the usages in the following files: > arch/ia64/kernel/acpi-ext.c > arch/ia64/pci/pci.c > arch/x86/pci/acpi.c > arch/x86/pci/mmconfig-shared.c > drivers/xen/xen-acpi-memhotplug.c > drivers/acpi/acpi_memhotplug.c > drivers/acpi/pci_root.c > drivers/acpi/resource.c > drivers/char/hpet.c > drivers/pnp/pnpacpi/rsparser.c > drivers/hv/vmbus_drv.c > > Build tests are passed with defconfig/allnoconfig/allyesconfig and > defconfig+CONFIG_ACPI=n. > > Original-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Original-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> > Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx> > Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx> Hyper-V parts: Acked-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > --- > arch/ia64/kernel/acpi-ext.c | 6 ++-- > arch/ia64/pci/pci.c | 14 ++++----- > arch/x86/pci/acpi.c | 26 ++++++++-------- > arch/x86/pci/mmconfig-shared.c | 6 ++-- > drivers/acpi/acpi_memhotplug.c | 8 ++--- > drivers/acpi/acpica/rsaddr.c | 9 +++--- > drivers/acpi/acpica/rsdumpinfo.c | 59 +++++++++++++++++++-------------- > ---- > drivers/acpi/acpica/rsxface.c | 10 +++---- > drivers/acpi/pci_root.c | 6 ++-- > drivers/acpi/resource.c | 24 +++++++-------- > drivers/char/hpet.c | 4 +-- > drivers/hv/vmbus_drv.c | 4 +-- > drivers/pnp/pnpacpi/rsparser.c | 16 +++++----- > drivers/xen/xen-acpi-memhotplug.c | 8 ++--- > include/acpi/acrestyp.h | 40 +++++++++++++++---------- > 15 files changed, 125 insertions(+), 115 deletions(-) > > diff --git a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c index > 8b9318d311a0..bd09bf74f187 100644 > --- a/arch/ia64/kernel/acpi-ext.c > +++ b/arch/ia64/kernel/acpi-ext.c > @@ -69,10 +69,10 @@ static acpi_status find_csr_space(struct acpi_resource > *resource, void *data) > status = acpi_resource_to_address64(resource, &addr); > if (ACPI_SUCCESS(status) && > addr.resource_type == ACPI_MEMORY_RANGE && > - addr.address_length && > + addr.address.address_length && > addr.producer_consumer == ACPI_CONSUMER) { > - space->base = addr.minimum; > - space->length = addr.address_length; > + space->base = addr.address.minimum; > + space->length = addr.address.address_length; > return AE_CTRL_TERMINATE; > } > return AE_OK; /* keep looking */ > diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index > 900cc93e5409..48cc65705db4 100644 > --- a/arch/ia64/pci/pci.c > +++ b/arch/ia64/pci/pci.c > @@ -188,12 +188,12 @@ static u64 add_io_space(struct pci_root_info *info, > > name = (char *)(iospace + 1); > > - min = addr->minimum; > - max = min + addr->address_length - 1; > + min = addr->address.minimum; > + max = min + addr->address.address_length - 1; > if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION) > sparse = 1; > > - space_nr = new_space(addr->translation_offset, sparse); > + space_nr = new_space(addr->address.translation_offset, sparse); > if (space_nr == ~0) > goto free_resource; > > @@ -247,7 +247,7 @@ static acpi_status resource_to_window(struct > acpi_resource *resource, > if (ACPI_SUCCESS(status) && > (addr->resource_type == ACPI_MEMORY_RANGE || > addr->resource_type == ACPI_IO_RANGE) && > - addr->address_length && > + addr->address.address_length && > addr->producer_consumer == ACPI_PRODUCER) > return AE_OK; > > @@ -284,7 +284,7 @@ static acpi_status add_window(struct acpi_resource > *res, void *data) > if (addr.resource_type == ACPI_MEMORY_RANGE) { > flags = IORESOURCE_MEM; > root = &iomem_resource; > - offset = addr.translation_offset; > + offset = addr.address.translation_offset; > } else if (addr.resource_type == ACPI_IO_RANGE) { > flags = IORESOURCE_IO; > root = &ioport_resource; > @@ -297,8 +297,8 @@ static acpi_status add_window(struct acpi_resource > *res, void *data) > resource = &info->res[info->res_num]; > resource->name = info->name; > resource->flags = flags; > - resource->start = addr.minimum + offset; > - resource->end = resource->start + addr.address_length - 1; > + resource->start = addr.address.minimum + offset; > + resource->end = resource->start + addr.address.address_length - 1; > info->res_offset[info->res_num] = offset; > > if (insert_resource(root, resource)) { diff --git a/arch/x86/pci/acpi.c > b/arch/x86/pci/acpi.c index cfd1b132b8e3..bb98afd0591e 100644 > --- a/arch/x86/pci/acpi.c > +++ b/arch/x86/pci/acpi.c > @@ -231,23 +231,23 @@ static acpi_status resource_to_addr(struct > acpi_resource *resource, > case ACPI_RESOURCE_TYPE_MEMORY24: > memory24 = &resource->data.memory24; > addr->resource_type = ACPI_MEMORY_RANGE; > - addr->minimum = memory24->minimum; > - addr->address_length = memory24->address_length; > - addr->maximum = addr->minimum + addr->address_length - > 1; > + addr->address.minimum = memory24->minimum; > + addr->address.address_length = memory24- > >address_length; > + addr->address.maximum = addr->address.minimum + > +addr->address.address_length - 1; > return AE_OK; > case ACPI_RESOURCE_TYPE_MEMORY32: > memory32 = &resource->data.memory32; > addr->resource_type = ACPI_MEMORY_RANGE; > - addr->minimum = memory32->minimum; > - addr->address_length = memory32->address_length; > - addr->maximum = addr->minimum + addr->address_length - > 1; > + addr->address.minimum = memory32->minimum; > + addr->address.address_length = memory32- > >address_length; > + addr->address.maximum = addr->address.minimum + > +addr->address.address_length - 1; > return AE_OK; > case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: > fixed_memory32 = &resource->data.fixed_memory32; > addr->resource_type = ACPI_MEMORY_RANGE; > - addr->minimum = fixed_memory32->address; > - addr->address_length = fixed_memory32->address_length; > - addr->maximum = addr->minimum + addr->address_length - > 1; > + addr->address.minimum = fixed_memory32->address; > + addr->address.address_length = fixed_memory32- > >address_length; > + addr->address.maximum = addr->address.minimum + > +addr->address.address_length - 1; > return AE_OK; > case ACPI_RESOURCE_TYPE_ADDRESS16: > case ACPI_RESOURCE_TYPE_ADDRESS32: > @@ -256,7 +256,7 @@ static acpi_status resource_to_addr(struct > acpi_resource *resource, > if (ACPI_SUCCESS(status) && > (addr->resource_type == ACPI_MEMORY_RANGE || > addr->resource_type == ACPI_IO_RANGE) && > - addr->address_length > 0) { > + addr->address.address_length > 0) { > return AE_OK; > } > break; > @@ -298,8 +298,8 @@ static acpi_status setup_resource(struct > acpi_resource *acpi_res, void *data) > } else > return AE_OK; > > - start = addr.minimum + addr.translation_offset; > - orig_end = end = addr.maximum + addr.translation_offset; > + start = addr.address.minimum + addr.address.translation_offset; > + orig_end = end = addr.address.maximum + > +addr.address.translation_offset; > > /* Exclude non-addressable range or non-addressable portion of > range */ > end = min(end, (u64)iomem_resource.end); @@ -320,7 +320,7 @@ > static acpi_status setup_resource(struct acpi_resource *acpi_res, void > *data) > res->flags = flags; > res->start = start; > res->end = end; > - info->res_offset[info->res_num] = addr.translation_offset; > + info->res_offset[info->res_num] = addr.address.translation_offset; > info->res_num++; > > if (!pci_use_crs) > diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig- > shared.c index 326198a4434e..5a8dceac3094 100644 > --- a/arch/x86/pci/mmconfig-shared.c > +++ b/arch/x86/pci/mmconfig-shared.c > @@ -397,12 +397,12 @@ static acpi_status check_mcfg_resource(struct > acpi_resource *res, void *data) > > status = acpi_resource_to_address64(res, &address); > if (ACPI_FAILURE(status) || > - (address.address_length <= 0) || > + (address.address.address_length <= 0) || > (address.resource_type != ACPI_MEMORY_RANGE)) > return AE_OK; > > - if ((mcfg_res->start >= address.minimum) && > - (mcfg_res->end < (address.minimum + address.address_length))) > { > + if ((mcfg_res->start >= address.address.minimum) && > + (mcfg_res->end < (address.address.minimum + > +address.address.address_length))) { > mcfg_res->flags = 1; > return AE_CTRL_TERMINATE; > } > diff --git a/drivers/acpi/acpi_memhotplug.c > b/drivers/acpi/acpi_memhotplug.c index 23e2319ead41..ee28f4d15625 > 100644 > --- a/drivers/acpi/acpi_memhotplug.c > +++ b/drivers/acpi/acpi_memhotplug.c > @@ -101,8 +101,8 @@ acpi_memory_get_resource(struct acpi_resource > *resource, void *context) > /* Can we combine the resource range information? */ > if ((info->caching == address64.info.mem.caching) && > (info->write_protect == > address64.info.mem.write_protect) && > - (info->start_addr + info->length == address64.minimum)) { > - info->length += address64.address_length; > + (info->start_addr + info->length == > address64.address.minimum)) { > + info->length += address64.address.address_length; > return AE_OK; > } > } > @@ -114,8 +114,8 @@ acpi_memory_get_resource(struct acpi_resource > *resource, void *context) > INIT_LIST_HEAD(&new->list); > new->caching = address64.info.mem.caching; > new->write_protect = address64.info.mem.write_protect; > - new->start_addr = address64.minimum; > - new->length = address64.address_length; > + new->start_addr = address64.address.minimum; > + new->length = address64.address.address_length; > list_add_tail(&new->list, &mem_device->res_list); > > return AE_OK; > diff --git a/drivers/acpi/acpica/rsaddr.c b/drivers/acpi/acpica/rsaddr.c index > 916fd095ff34..94a3a057042c 100644 > --- a/drivers/acpi/acpica/rsaddr.c > +++ b/drivers/acpi/acpica/rsaddr.c > @@ -74,7 +74,7 @@ struct acpi_rsconvert_info > acpi_rs_convert_address16[5] = { > * Address Translation Offset > * Address Length > */ > - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.address16.granularity), > + {ACPI_RSC_MOVE16, > ACPI_RS_OFFSET(data.address16.address.granularity), > AML_OFFSET(address16.granularity), > 5}, > > @@ -112,7 +112,7 @@ struct acpi_rsconvert_info > acpi_rs_convert_address32[5] = { > * Address Translation Offset > * Address Length > */ > - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.address32.granularity), > + {ACPI_RSC_MOVE32, > ACPI_RS_OFFSET(data.address32.address.granularity), > AML_OFFSET(address32.granularity), > 5}, > > @@ -150,7 +150,7 @@ struct acpi_rsconvert_info > acpi_rs_convert_address64[5] = { > * Address Translation Offset > * Address Length > */ > - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.address64.granularity), > + {ACPI_RSC_MOVE64, > ACPI_RS_OFFSET(data.address64.address.granularity), > AML_OFFSET(address64.granularity), > 5}, > > @@ -194,7 +194,8 @@ struct acpi_rsconvert_info > acpi_rs_convert_ext_address64[5] = { > * Address Length > * Type-Specific Attribute > */ > - {ACPI_RSC_MOVE64, > ACPI_RS_OFFSET(data.ext_address64.granularity), > + {ACPI_RSC_MOVE64, > + ACPI_RS_OFFSET(data.ext_address64.address.granularity), > AML_OFFSET(ext_address64.granularity), > 6} > }; > diff --git a/drivers/acpi/acpica/rsdumpinfo.c > b/drivers/acpi/acpica/rsdumpinfo.c > index 2f9332d5c973..6ba7ad5faa9c 100644 > --- a/drivers/acpi/acpica/rsdumpinfo.c > +++ b/drivers/acpi/acpica/rsdumpinfo.c > @@ -183,15 +183,15 @@ struct acpi_rsdump_info > acpi_rs_dump_address16[8] = { > {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16), > "16-Bit WORD Address Space", NULL}, > {ACPI_RSD_ADDRESS, 0, NULL, NULL}, > - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.granularity), > "Granularity", > - NULL}, > - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.minimum), > "Address Minimum", > - NULL}, > - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.maximum), > "Address Maximum", > - NULL}, > - {ACPI_RSD_UINT16, > ACPI_RSD_OFFSET(address16.translation_offset), > + {ACPI_RSD_UINT16, > ACPI_RSD_OFFSET(address16.address.granularity), > + "Granularity", NULL}, > + {ACPI_RSD_UINT16, > ACPI_RSD_OFFSET(address16.address.minimum), > + "Address Minimum", NULL}, > + {ACPI_RSD_UINT16, > ACPI_RSD_OFFSET(address16.address.maximum), > + "Address Maximum", NULL}, > + {ACPI_RSD_UINT16, > +ACPI_RSD_OFFSET(address16.address.translation_offset), > "Translation Offset", NULL}, > - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address_length), > + {ACPI_RSD_UINT16, > ACPI_RSD_OFFSET(address16.address.address_length), > "Address Length", NULL}, > {ACPI_RSD_SOURCE, > ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL} }; @@ -200,15 > +200,15 @@ struct acpi_rsdump_info acpi_rs_dump_address32[8] = { > {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32), > "32-Bit DWORD Address Space", NULL}, > {ACPI_RSD_ADDRESS, 0, NULL, NULL}, > - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.granularity), > "Granularity", > - NULL}, > - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.minimum), > "Address Minimum", > - NULL}, > - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.maximum), > "Address Maximum", > - NULL}, > - {ACPI_RSD_UINT32, > ACPI_RSD_OFFSET(address32.translation_offset), > + {ACPI_RSD_UINT32, > ACPI_RSD_OFFSET(address32.address.granularity), > + "Granularity", NULL}, > + {ACPI_RSD_UINT32, > ACPI_RSD_OFFSET(address32.address.minimum), > + "Address Minimum", NULL}, > + {ACPI_RSD_UINT32, > ACPI_RSD_OFFSET(address32.address.maximum), > + "Address Maximum", NULL}, > + {ACPI_RSD_UINT32, > +ACPI_RSD_OFFSET(address32.address.translation_offset), > "Translation Offset", NULL}, > - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address_length), > + {ACPI_RSD_UINT32, > ACPI_RSD_OFFSET(address32.address.address_length), > "Address Length", NULL}, > {ACPI_RSD_SOURCE, > ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL} }; @@ -217,15 > +217,15 @@ struct acpi_rsdump_info acpi_rs_dump_address64[8] = { > {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64), > "64-Bit QWORD Address Space", NULL}, > {ACPI_RSD_ADDRESS, 0, NULL, NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.granularity), > "Granularity", > - NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.minimum), > "Address Minimum", > - NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.maximum), > "Address Maximum", > - NULL}, > - {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(address64.translation_offset), > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(address64.address.granularity), > + "Granularity", NULL}, > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(address64.address.minimum), > + "Address Minimum", NULL}, > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(address64.address.maximum), > + "Address Maximum", NULL}, > + {ACPI_RSD_UINT64, > +ACPI_RSD_OFFSET(address64.address.translation_offset), > "Translation Offset", NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address_length), > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(address64.address.address_length), > "Address Length", NULL}, > {ACPI_RSD_SOURCE, > ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL} }; @@ -234,15 > +234,16 @@ struct acpi_rsdump_info acpi_rs_dump_ext_address64[8] = { > {ACPI_RSD_TITLE, > ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64), > "64-Bit Extended Address Space", NULL}, > {ACPI_RSD_ADDRESS, 0, NULL, NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.granularity), > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.address.granularity), > "Granularity", NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.minimum), > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.address.minimum), > "Address Minimum", NULL}, > - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.maximum), > + {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.address.maximum), > "Address Maximum", NULL}, > - {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.translation_offset), > + {ACPI_RSD_UINT64, > + ACPI_RSD_OFFSET(ext_address64.address.translation_offset), > "Translation Offset", NULL}, > - {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.address_length), > + {ACPI_RSD_UINT64, > +ACPI_RSD_OFFSET(ext_address64.address.address_length), > "Address Length", NULL}, > {ACPI_RSD_UINT64, > ACPI_RSD_OFFSET(ext_address64.type_specific), > "Type-Specific Attribute", NULL} > diff --git a/drivers/acpi/acpica/rsxface.c b/drivers/acpi/acpica/rsxface.c index > 877ab9202133..295287891174 100644 > --- a/drivers/acpi/acpica/rsxface.c > +++ b/drivers/acpi/acpica/rsxface.c > @@ -60,11 +60,11 @@ ACPI_MODULE_NAME("rsxface") > ACPI_COPY_FIELD(out, in, min_address_fixed); \ > ACPI_COPY_FIELD(out, in, max_address_fixed); \ > ACPI_COPY_FIELD(out, in, info); \ > - ACPI_COPY_FIELD(out, in, granularity); \ > - ACPI_COPY_FIELD(out, in, minimum); \ > - ACPI_COPY_FIELD(out, in, maximum); \ > - ACPI_COPY_FIELD(out, in, translation_offset); \ > - ACPI_COPY_FIELD(out, in, address_length); \ > + ACPI_COPY_FIELD(out, in, address.granularity); \ > + ACPI_COPY_FIELD(out, in, address.minimum); \ > + ACPI_COPY_FIELD(out, in, address.maximum); \ > + ACPI_COPY_FIELD(out, in, address.translation_offset); \ > + ACPI_COPY_FIELD(out, in, address.address_length); \ > ACPI_COPY_FIELD(out, in, resource_source); > /* Local prototypes */ > static acpi_status > diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index > c6bcb8c719d8..e53e0f659204 100644 > --- a/drivers/acpi/pci_root.c > +++ b/drivers/acpi/pci_root.c > @@ -112,10 +112,10 @@ get_root_bridge_busnr_callback(struct > acpi_resource *resource, void *data) > if (ACPI_FAILURE(status)) > return AE_OK; > > - if ((address.address_length > 0) && > + if ((address.address.address_length > 0) && > (address.resource_type == ACPI_BUS_NUMBER_RANGE)) { > - res->start = address.minimum; > - res->end = address.minimum + address.address_length - 1; > + res->start = address.address.minimum; > + res->end = address.address.minimum + > address.address.address_length - > +1; > } > > return AE_OK; > diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c index > 782a0d15c25f..d0a4d90c6bcc 100644 > --- a/drivers/acpi/resource.c > +++ b/drivers/acpi/resource.c > @@ -202,22 +202,22 @@ bool acpi_dev_resource_address_space(struct > acpi_resource *ares, > if (ACPI_FAILURE(status)) > return false; > > - res->start = addr.minimum; > - res->end = addr.maximum; > + res->start = addr.address.minimum; > + res->end = addr.address.maximum; > window = addr.producer_consumer == ACPI_PRODUCER; > > switch(addr.resource_type) { > case ACPI_MEMORY_RANGE: > - len = addr.maximum - addr.minimum + 1; > + len = addr.address.maximum - addr.address.minimum + 1; > res->flags = acpi_dev_memresource_flags(len, > > addr.info.mem.write_protect, > window); > break; > case ACPI_IO_RANGE: > - io_decode = addr.granularity == 0xfff ? > + io_decode = addr.address.granularity == 0xfff ? > ACPI_DECODE_10 : ACPI_DECODE_16; > - res->flags = acpi_dev_ioresource_flags(addr.minimum, > - addr.maximum, > + res->flags = > acpi_dev_ioresource_flags(addr.address.minimum, > + addr.address.maximum, > io_decode, window); > break; > case ACPI_BUS_NUMBER_RANGE: > @@ -253,22 +253,22 @@ bool acpi_dev_resource_ext_address_space(struct > acpi_resource *ares, > > ext_addr = &ares->data.ext_address64; > > - res->start = ext_addr->minimum; > - res->end = ext_addr->maximum; > + res->start = ext_addr->address.minimum; > + res->end = ext_addr->address.maximum; > window = ext_addr->producer_consumer == ACPI_PRODUCER; > > switch(ext_addr->resource_type) { > case ACPI_MEMORY_RANGE: > - len = ext_addr->maximum - ext_addr->minimum + 1; > + len = ext_addr->address.maximum - ext_addr- > >address.minimum + 1; > res->flags = acpi_dev_memresource_flags(len, > ext_addr->info.mem.write_protect, > window); > break; > case ACPI_IO_RANGE: > - io_decode = ext_addr->granularity == 0xfff ? > + io_decode = ext_addr->address.granularity == 0xfff ? > ACPI_DECODE_10 : ACPI_DECODE_16; > - res->flags = acpi_dev_ioresource_flags(ext_addr->minimum, > - ext_addr->maximum, > + res->flags = acpi_dev_ioresource_flags(ext_addr- > >address.minimum, > + ext_addr- > >address.maximum, > io_decode, window); > break; > case ACPI_BUS_NUMBER_RANGE: > diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index > d5d4cd82b9f7..5c0baa9ffc64 100644 > --- a/drivers/char/hpet.c > +++ b/drivers/char/hpet.c > @@ -976,8 +976,8 @@ static acpi_status hpet_resources(struct > acpi_resource *res, void *data) > status = acpi_resource_to_address64(res, &addr); > > if (ACPI_SUCCESS(status)) { > - hdp->hd_phys_address = addr.minimum; > - hdp->hd_address = ioremap(addr.minimum, > addr.address_length); > + hdp->hd_phys_address = addr.address.minimum; > + hdp->hd_address = ioremap(addr.address.minimum, > +addr.address.address_length); > > if (hpet_is_known(hdp)) { > iounmap(hdp->hd_address); > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index > 4d6b26979fbd..bb3725b672cf 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -861,8 +861,8 @@ static acpi_status vmbus_walk_resources(struct > acpi_resource *res, void *ctx) > break; > > case ACPI_RESOURCE_TYPE_ADDRESS64: > - hyperv_mmio.start = res->data.address64.minimum; > - hyperv_mmio.end = res->data.address64.maximum; > + hyperv_mmio.start = res- > >data.address64.address.minimum; > + hyperv_mmio.end = res->data.address64.address.maximum; > break; > } > > diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c > index 66977ebf13b3..2d9bc789af0f 100644 > --- a/drivers/pnp/pnpacpi/rsparser.c > +++ b/drivers/pnp/pnpacpi/rsparser.c > @@ -410,12 +410,12 @@ static __init void > pnpacpi_parse_address_option(struct pnp_dev *dev, > if (p->resource_type == ACPI_MEMORY_RANGE) { > if (p->info.mem.write_protect == > ACPI_READ_WRITE_MEMORY) > flags = IORESOURCE_MEM_WRITEABLE; > - pnp_register_mem_resource(dev, option_flags, p- > >minimum, > - p->minimum, 0, p->address_length, > + pnp_register_mem_resource(dev, option_flags, p- > >address.minimum, > + p->address.minimum, 0, p- > >address.address_length, > flags); > } else if (p->resource_type == ACPI_IO_RANGE) > - pnp_register_port_resource(dev, option_flags, p- > >minimum, > - p->minimum, 0, p->address_length, > + pnp_register_port_resource(dev, option_flags, p- > >address.minimum, > + p->address.minimum, 0, p- > >address.address_length, > IORESOURCE_IO_FIXED); > } > > @@ -429,12 +429,12 @@ static __init void > pnpacpi_parse_ext_address_option(struct pnp_dev *dev, > if (p->resource_type == ACPI_MEMORY_RANGE) { > if (p->info.mem.write_protect == > ACPI_READ_WRITE_MEMORY) > flags = IORESOURCE_MEM_WRITEABLE; > - pnp_register_mem_resource(dev, option_flags, p- > >minimum, > - p->minimum, 0, p->address_length, > + pnp_register_mem_resource(dev, option_flags, p- > >address.minimum, > + p->address.minimum, 0, p- > >address.address_length, > flags); > } else if (p->resource_type == ACPI_IO_RANGE) > - pnp_register_port_resource(dev, option_flags, p- > >minimum, > - p->minimum, 0, p->address_length, > + pnp_register_port_resource(dev, option_flags, p- > >address.minimum, > + p->address.minimum, 0, p- > >address.address_length, > IORESOURCE_IO_FIXED); > } > > diff --git a/drivers/xen/xen-acpi-memhotplug.c b/drivers/xen/xen-acpi- > memhotplug.c > index 34e40b733f9a..4fc886cd5586 100644 > --- a/drivers/xen/xen-acpi-memhotplug.c > +++ b/drivers/xen/xen-acpi-memhotplug.c > @@ -117,8 +117,8 @@ acpi_memory_get_resource(struct acpi_resource > *resource, void *context) > list_for_each_entry(info, &mem_device->res_list, list) { > if ((info->caching == address64.info.mem.caching) && > (info->write_protect == > address64.info.mem.write_protect) && > - (info->start_addr + info->length == address64.minimum)) { > - info->length += address64.address_length; > + (info->start_addr + info->length == > address64.address.minimum)) { > + info->length += address64.address.address_length; > return AE_OK; > } > } > @@ -130,8 +130,8 @@ acpi_memory_get_resource(struct acpi_resource > *resource, void *context) > INIT_LIST_HEAD(&new->list); > new->caching = address64.info.mem.caching; > new->write_protect = address64.info.mem.write_protect; > - new->start_addr = address64.minimum; > - new->length = address64.address_length; > + new->start_addr = address64.address.minimum; > + new->length = address64.address.address_length; > list_add_tail(&new->list, &mem_device->res_list); > > return AE_OK; > diff --git a/include/acpi/acrestyp.h b/include/acpi/acrestyp.h index > eb760ca0b2e0..0b75e01212c7 100644 > --- a/include/acpi/acrestyp.h > +++ b/include/acpi/acrestyp.h > @@ -305,43 +305,51 @@ struct acpi_resource_source { > u8 max_address_fixed; \ > union acpi_resource_attribute info; > > -struct acpi_resource_address { > -ACPI_RESOURCE_ADDRESS_COMMON}; > - > -struct acpi_resource_address16 { > - ACPI_RESOURCE_ADDRESS_COMMON u16 granularity; > +struct acpi_address16_attribute { > + u16 granularity; > u16 minimum; > u16 maximum; > u16 translation_offset; > u16 address_length; > - struct acpi_resource_source resource_source; > }; > > -struct acpi_resource_address32 { > - ACPI_RESOURCE_ADDRESS_COMMON u32 granularity; > +struct acpi_address32_attribute { > + u32 granularity; > u32 minimum; > u32 maximum; > u32 translation_offset; > u32 address_length; > - struct acpi_resource_source resource_source; > }; > > -struct acpi_resource_address64 { > - ACPI_RESOURCE_ADDRESS_COMMON u64 granularity; > +struct acpi_address64_attribute { > + u64 granularity; > u64 minimum; > u64 maximum; > u64 translation_offset; > u64 address_length; > +}; > + > +struct acpi_resource_address { > +ACPI_RESOURCE_ADDRESS_COMMON}; > + > +struct acpi_resource_address16 { > + ACPI_RESOURCE_ADDRESS_COMMON struct > acpi_address16_attribute address; > + struct acpi_resource_source resource_source; }; > + > +struct acpi_resource_address32 { > + ACPI_RESOURCE_ADDRESS_COMMON struct > acpi_address32_attribute address; > + struct acpi_resource_source resource_source; }; > + > +struct acpi_resource_address64 { > + ACPI_RESOURCE_ADDRESS_COMMON struct > acpi_address64_attribute address; > struct acpi_resource_source resource_source; }; > > struct acpi_resource_extended_address64 { > ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID; > - u64 granularity; > - u64 minimum; > - u64 maximum; > - u64 translation_offset; > - u64 address_length; > + struct acpi_address64_attribute address; > u64 type_specific; > }; > > -- > 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html