aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2015-01-26 03:58:56 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-01-26 10:09:56 -0500
commita45de93eb10ae44446aec2c73d722562ab46092a (patch)
treedf3cdda47c765c1273c5eb4241d8f3c17b4c215b
parente044d8f92f79db167bb7f9dfd0f317e3238d82d1 (diff)
ACPICA: Resources: Provide common part for struct acpi_resource_address structures.
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@linutronix.de> Original-by: Jiang Liu <jiang.liu@linux.intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--arch/ia64/kernel/acpi-ext.c6
-rw-r--r--arch/ia64/pci/pci.c14
-rw-r--r--arch/x86/pci/acpi.c26
-rw-r--r--arch/x86/pci/mmconfig-shared.c6
-rw-r--r--drivers/acpi/acpi_memhotplug.c8
-rw-r--r--drivers/acpi/acpica/rsaddr.c9
-rw-r--r--drivers/acpi/acpica/rsdumpinfo.c59
-rw-r--r--drivers/acpi/acpica/rsxface.c10
-rw-r--r--drivers/acpi/pci_root.c6
-rw-r--r--drivers/acpi/resource.c24
-rw-r--r--drivers/char/hpet.c4
-rw-r--r--drivers/hv/vmbus_drv.c4
-rw-r--r--drivers/pnp/pnpacpi/rsparser.c16
-rw-r--r--drivers/xen/xen-acpi-memhotplug.c8
-rw-r--r--include/acpi/acrestyp.h40
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)
69 status = acpi_resource_to_address64(resource, &addr); 69 status = acpi_resource_to_address64(resource, &addr);
70 if (ACPI_SUCCESS(status) && 70 if (ACPI_SUCCESS(status) &&
71 addr.resource_type == ACPI_MEMORY_RANGE && 71 addr.resource_type == ACPI_MEMORY_RANGE &&
72 addr.address_length && 72 addr.address.address_length &&
73 addr.producer_consumer == ACPI_CONSUMER) { 73 addr.producer_consumer == ACPI_CONSUMER) {
74 space->base = addr.minimum; 74 space->base = addr.address.minimum;
75 space->length = addr.address_length; 75 space->length = addr.address.address_length;
76 return AE_CTRL_TERMINATE; 76 return AE_CTRL_TERMINATE;
77 } 77 }
78 return AE_OK; /* keep looking */ 78 return AE_OK; /* keep looking */
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 291a582777cf..46920aaa7e9e 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,
188 188
189 name = (char *)(iospace + 1); 189 name = (char *)(iospace + 1);
190 190
191 min = addr->minimum; 191 min = addr->address.minimum;
192 max = min + addr->address_length - 1; 192 max = min + addr->address.address_length - 1;
193 if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION) 193 if (addr->info.io.translation_type == ACPI_SPARSE_TRANSLATION)
194 sparse = 1; 194 sparse = 1;
195 195
196 space_nr = new_space(addr->translation_offset, sparse); 196 space_nr = new_space(addr->address.translation_offset, sparse);
197 if (space_nr == ~0) 197 if (space_nr == ~0)
198 goto free_resource; 198 goto free_resource;
199 199
@@ -247,7 +247,7 @@ static acpi_status resource_to_window(struct acpi_resource *resource,
247 if (ACPI_SUCCESS(status) && 247 if (ACPI_SUCCESS(status) &&
248 (addr->resource_type == ACPI_MEMORY_RANGE || 248 (addr->resource_type == ACPI_MEMORY_RANGE ||
249 addr->resource_type == ACPI_IO_RANGE) && 249 addr->resource_type == ACPI_IO_RANGE) &&
250 addr->address_length && 250 addr->address.address_length &&
251 addr->producer_consumer == ACPI_PRODUCER) 251 addr->producer_consumer == ACPI_PRODUCER)
252 return AE_OK; 252 return AE_OK;
253 253
@@ -284,7 +284,7 @@ static acpi_status add_window(struct acpi_resource *res, void *data)
284 if (addr.resource_type == ACPI_MEMORY_RANGE) { 284 if (addr.resource_type == ACPI_MEMORY_RANGE) {
285 flags = IORESOURCE_MEM; 285 flags = IORESOURCE_MEM;
286 root = &iomem_resource; 286 root = &iomem_resource;
287 offset = addr.translation_offset; 287 offset = addr.address.translation_offset;
288 } else if (addr.resource_type == ACPI_IO_RANGE) { 288 } else if (addr.resource_type == ACPI_IO_RANGE) {
289 flags = IORESOURCE_IO; 289 flags = IORESOURCE_IO;
290 root = &ioport_resource; 290 root = &ioport_resource;
@@ -297,8 +297,8 @@ static acpi_status add_window(struct acpi_resource *res, void *data)
297 resource = &info->res[info->res_num]; 297 resource = &info->res[info->res_num];
298 resource->name = info->name; 298 resource->name = info->name;
299 resource->flags = flags; 299 resource->flags = flags;
300 resource->start = addr.minimum + offset; 300 resource->start = addr.address.minimum + offset;
301 resource->end = resource->start + addr.address_length - 1; 301 resource->end = resource->start + addr.address.address_length - 1;
302 info->res_offset[info->res_num] = offset; 302 info->res_offset[info->res_num] = offset;
303 303
304 if (insert_resource(root, resource)) { 304 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,
231 case ACPI_RESOURCE_TYPE_MEMORY24: 231 case ACPI_RESOURCE_TYPE_MEMORY24:
232 memory24 = &resource->data.memory24; 232 memory24 = &resource->data.memory24;
233 addr->resource_type = ACPI_MEMORY_RANGE; 233 addr->resource_type = ACPI_MEMORY_RANGE;
234 addr->minimum = memory24->minimum; 234 addr->address.minimum = memory24->minimum;
235 addr->address_length = memory24->address_length; 235 addr->address.address_length = memory24->address_length;
236 addr->maximum = addr->minimum + addr->address_length - 1; 236 addr->address.maximum = addr->address.minimum + addr->address.address_length - 1;
237 return AE_OK; 237 return AE_OK;
238 case ACPI_RESOURCE_TYPE_MEMORY32: 238 case ACPI_RESOURCE_TYPE_MEMORY32:
239 memory32 = &resource->data.memory32; 239 memory32 = &resource->data.memory32;
240 addr->resource_type = ACPI_MEMORY_RANGE; 240 addr->resource_type = ACPI_MEMORY_RANGE;
241 addr->minimum = memory32->minimum; 241 addr->address.minimum = memory32->minimum;
242 addr->address_length = memory32->address_length; 242 addr->address.address_length = memory32->address_length;
243 addr->maximum = addr->minimum + addr->address_length - 1; 243 addr->address.maximum = addr->address.minimum + addr->address.address_length - 1;
244 return AE_OK; 244 return AE_OK;
245 case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: 245 case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
246 fixed_memory32 = &resource->data.fixed_memory32; 246 fixed_memory32 = &resource->data.fixed_memory32;
247 addr->resource_type = ACPI_MEMORY_RANGE; 247 addr->resource_type = ACPI_MEMORY_RANGE;
248 addr->minimum = fixed_memory32->address; 248 addr->address.minimum = fixed_memory32->address;
249 addr->address_length = fixed_memory32->address_length; 249 addr->address.address_length = fixed_memory32->address_length;
250 addr->maximum = addr->minimum + addr->address_length - 1; 250 addr->address.maximum = addr->address.minimum + addr->address.address_length - 1;
251 return AE_OK; 251 return AE_OK;
252 case ACPI_RESOURCE_TYPE_ADDRESS16: 252 case ACPI_RESOURCE_TYPE_ADDRESS16:
253 case ACPI_RESOURCE_TYPE_ADDRESS32: 253 case ACPI_RESOURCE_TYPE_ADDRESS32:
@@ -256,7 +256,7 @@ static acpi_status resource_to_addr(struct acpi_resource *resource,
256 if (ACPI_SUCCESS(status) && 256 if (ACPI_SUCCESS(status) &&
257 (addr->resource_type == ACPI_MEMORY_RANGE || 257 (addr->resource_type == ACPI_MEMORY_RANGE ||
258 addr->resource_type == ACPI_IO_RANGE) && 258 addr->resource_type == ACPI_IO_RANGE) &&
259 addr->address_length > 0) { 259 addr->address.address_length > 0) {
260 return AE_OK; 260 return AE_OK;
261 } 261 }
262 break; 262 break;
@@ -298,8 +298,8 @@ static acpi_status setup_resource(struct acpi_resource *acpi_res, void *data)
298 } else 298 } else
299 return AE_OK; 299 return AE_OK;
300 300
301 start = addr.minimum + addr.translation_offset; 301 start = addr.address.minimum + addr.address.translation_offset;
302 orig_end = end = addr.maximum + addr.translation_offset; 302 orig_end = end = addr.address.maximum + addr.address.translation_offset;
303 303
304 /* Exclude non-addressable range or non-addressable portion of range */ 304 /* Exclude non-addressable range or non-addressable portion of range */
305 end = min(end, (u64)iomem_resource.end); 305 end = min(end, (u64)iomem_resource.end);
@@ -320,7 +320,7 @@ static acpi_status setup_resource(struct acpi_resource *acpi_res, void *data)
320 res->flags = flags; 320 res->flags = flags;
321 res->start = start; 321 res->start = start;
322 res->end = end; 322 res->end = end;
323 info->res_offset[info->res_num] = addr.translation_offset; 323 info->res_offset[info->res_num] = addr.address.translation_offset;
324 info->res_num++; 324 info->res_num++;
325 325
326 if (!pci_use_crs) 326 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)
397 397
398 status = acpi_resource_to_address64(res, &address); 398 status = acpi_resource_to_address64(res, &address);
399 if (ACPI_FAILURE(status) || 399 if (ACPI_FAILURE(status) ||
400 (address.address_length <= 0) || 400 (address.address.address_length <= 0) ||
401 (address.resource_type != ACPI_MEMORY_RANGE)) 401 (address.resource_type != ACPI_MEMORY_RANGE))
402 return AE_OK; 402 return AE_OK;
403 403
404 if ((mcfg_res->start >= address.minimum) && 404 if ((mcfg_res->start >= address.address.minimum) &&
405 (mcfg_res->end < (address.minimum + address.address_length))) { 405 (mcfg_res->end < (address.address.minimum + address.address.address_length))) {
406 mcfg_res->flags = 1; 406 mcfg_res->flags = 1;
407 return AE_CTRL_TERMINATE; 407 return AE_CTRL_TERMINATE;
408 } 408 }
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)
101 /* Can we combine the resource range information? */ 101 /* Can we combine the resource range information? */
102 if ((info->caching == address64.info.mem.caching) && 102 if ((info->caching == address64.info.mem.caching) &&
103 (info->write_protect == address64.info.mem.write_protect) && 103 (info->write_protect == address64.info.mem.write_protect) &&
104 (info->start_addr + info->length == address64.minimum)) { 104 (info->start_addr + info->length == address64.address.minimum)) {
105 info->length += address64.address_length; 105 info->length += address64.address.address_length;
106 return AE_OK; 106 return AE_OK;
107 } 107 }
108 } 108 }
@@ -114,8 +114,8 @@ acpi_memory_get_resource(struct acpi_resource *resource, void *context)
114 INIT_LIST_HEAD(&new->list); 114 INIT_LIST_HEAD(&new->list);
115 new->caching = address64.info.mem.caching; 115 new->caching = address64.info.mem.caching;
116 new->write_protect = address64.info.mem.write_protect; 116 new->write_protect = address64.info.mem.write_protect;
117 new->start_addr = address64.minimum; 117 new->start_addr = address64.address.minimum;
118 new->length = address64.address_length; 118 new->length = address64.address.address_length;
119 list_add_tail(&new->list, &mem_device->res_list); 119 list_add_tail(&new->list, &mem_device->res_list);
120 120
121 return AE_OK; 121 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] = {
74 * Address Translation Offset 74 * Address Translation Offset
75 * Address Length 75 * Address Length
76 */ 76 */
77 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.address16.granularity), 77 {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.address16.address.granularity),
78 AML_OFFSET(address16.granularity), 78 AML_OFFSET(address16.granularity),
79 5}, 79 5},
80 80
@@ -112,7 +112,7 @@ struct acpi_rsconvert_info acpi_rs_convert_address32[5] = {
112 * Address Translation Offset 112 * Address Translation Offset
113 * Address Length 113 * Address Length
114 */ 114 */
115 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.address32.granularity), 115 {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.address32.address.granularity),
116 AML_OFFSET(address32.granularity), 116 AML_OFFSET(address32.granularity),
117 5}, 117 5},
118 118
@@ -150,7 +150,7 @@ struct acpi_rsconvert_info acpi_rs_convert_address64[5] = {
150 * Address Translation Offset 150 * Address Translation Offset
151 * Address Length 151 * Address Length
152 */ 152 */
153 {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.address64.granularity), 153 {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.address64.address.granularity),
154 AML_OFFSET(address64.granularity), 154 AML_OFFSET(address64.granularity),
155 5}, 155 5},
156 156
@@ -194,7 +194,8 @@ struct acpi_rsconvert_info acpi_rs_convert_ext_address64[5] = {
194 * Address Length 194 * Address Length
195 * Type-Specific Attribute 195 * Type-Specific Attribute
196 */ 196 */
197 {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.ext_address64.granularity), 197 {ACPI_RSC_MOVE64,
198 ACPI_RS_OFFSET(data.ext_address64.address.granularity),
198 AML_OFFSET(ext_address64.granularity), 199 AML_OFFSET(ext_address64.granularity),
199 6} 200 6}
200}; 201};
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] = {
183 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16), 183 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16),
184 "16-Bit WORD Address Space", NULL}, 184 "16-Bit WORD Address Space", NULL},
185 {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 185 {ACPI_RSD_ADDRESS, 0, NULL, NULL},
186 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.granularity), "Granularity", 186 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address.granularity),
187 NULL}, 187 "Granularity", NULL},
188 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.minimum), "Address Minimum", 188 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address.minimum),
189 NULL}, 189 "Address Minimum", NULL},
190 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.maximum), "Address Maximum", 190 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address.maximum),
191 NULL}, 191 "Address Maximum", NULL},
192 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.translation_offset), 192 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address.translation_offset),
193 "Translation Offset", NULL}, 193 "Translation Offset", NULL},
194 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address_length), 194 {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address.address_length),
195 "Address Length", NULL}, 195 "Address Length", NULL},
196 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL} 196 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL}
197}; 197};
@@ -200,15 +200,15 @@ struct acpi_rsdump_info acpi_rs_dump_address32[8] = {
200 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32), 200 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32),
201 "32-Bit DWORD Address Space", NULL}, 201 "32-Bit DWORD Address Space", NULL},
202 {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 202 {ACPI_RSD_ADDRESS, 0, NULL, NULL},
203 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.granularity), "Granularity", 203 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address.granularity),
204 NULL}, 204 "Granularity", NULL},
205 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.minimum), "Address Minimum", 205 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address.minimum),
206 NULL}, 206 "Address Minimum", NULL},
207 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.maximum), "Address Maximum", 207 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address.maximum),
208 NULL}, 208 "Address Maximum", NULL},
209 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.translation_offset), 209 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address.translation_offset),
210 "Translation Offset", NULL}, 210 "Translation Offset", NULL},
211 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address_length), 211 {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address.address_length),
212 "Address Length", NULL}, 212 "Address Length", NULL},
213 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL} 213 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL}
214}; 214};
@@ -217,15 +217,15 @@ struct acpi_rsdump_info acpi_rs_dump_address64[8] = {
217 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64), 217 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64),
218 "64-Bit QWORD Address Space", NULL}, 218 "64-Bit QWORD Address Space", NULL},
219 {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 219 {ACPI_RSD_ADDRESS, 0, NULL, NULL},
220 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.granularity), "Granularity", 220 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address.granularity),
221 NULL}, 221 "Granularity", NULL},
222 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.minimum), "Address Minimum", 222 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address.minimum),
223 NULL}, 223 "Address Minimum", NULL},
224 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.maximum), "Address Maximum", 224 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address.maximum),
225 NULL}, 225 "Address Maximum", NULL},
226 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.translation_offset), 226 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address.translation_offset),
227 "Translation Offset", NULL}, 227 "Translation Offset", NULL},
228 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address_length), 228 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address.address_length),
229 "Address Length", NULL}, 229 "Address Length", NULL},
230 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL} 230 {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL}
231}; 231};
@@ -234,15 +234,16 @@ struct acpi_rsdump_info acpi_rs_dump_ext_address64[8] = {
234 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64), 234 {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64),
235 "64-Bit Extended Address Space", NULL}, 235 "64-Bit Extended Address Space", NULL},
236 {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 236 {ACPI_RSD_ADDRESS, 0, NULL, NULL},
237 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.granularity), 237 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address.granularity),
238 "Granularity", NULL}, 238 "Granularity", NULL},
239 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.minimum), 239 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address.minimum),
240 "Address Minimum", NULL}, 240 "Address Minimum", NULL},
241 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.maximum), 241 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address.maximum),
242 "Address Maximum", NULL}, 242 "Address Maximum", NULL},
243 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.translation_offset), 243 {ACPI_RSD_UINT64,
244 ACPI_RSD_OFFSET(ext_address64.address.translation_offset),
244 "Translation Offset", NULL}, 245 "Translation Offset", NULL},
245 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address_length), 246 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address.address_length),
246 "Address Length", NULL}, 247 "Address Length", NULL},
247 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.type_specific), 248 {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.type_specific),
248 "Type-Specific Attribute", NULL} 249 "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")
60 ACPI_COPY_FIELD(out, in, min_address_fixed); \ 60 ACPI_COPY_FIELD(out, in, min_address_fixed); \
61 ACPI_COPY_FIELD(out, in, max_address_fixed); \ 61 ACPI_COPY_FIELD(out, in, max_address_fixed); \
62 ACPI_COPY_FIELD(out, in, info); \ 62 ACPI_COPY_FIELD(out, in, info); \
63 ACPI_COPY_FIELD(out, in, granularity); \ 63 ACPI_COPY_FIELD(out, in, address.granularity); \
64 ACPI_COPY_FIELD(out, in, minimum); \ 64 ACPI_COPY_FIELD(out, in, address.minimum); \
65 ACPI_COPY_FIELD(out, in, maximum); \ 65 ACPI_COPY_FIELD(out, in, address.maximum); \
66 ACPI_COPY_FIELD(out, in, translation_offset); \ 66 ACPI_COPY_FIELD(out, in, address.translation_offset); \
67 ACPI_COPY_FIELD(out, in, address_length); \ 67 ACPI_COPY_FIELD(out, in, address.address_length); \
68 ACPI_COPY_FIELD(out, in, resource_source); 68 ACPI_COPY_FIELD(out, in, resource_source);
69/* Local prototypes */ 69/* Local prototypes */
70static acpi_status 70static 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)
112 if (ACPI_FAILURE(status)) 112 if (ACPI_FAILURE(status))
113 return AE_OK; 113 return AE_OK;
114 114
115 if ((address.address_length > 0) && 115 if ((address.address.address_length > 0) &&
116 (address.resource_type == ACPI_BUS_NUMBER_RANGE)) { 116 (address.resource_type == ACPI_BUS_NUMBER_RANGE)) {
117 res->start = address.minimum; 117 res->start = address.address.minimum;
118 res->end = address.minimum + address.address_length - 1; 118 res->end = address.address.minimum + address.address.address_length - 1;
119 } 119 }
120 120
121 return AE_OK; 121 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,
202 if (ACPI_FAILURE(status)) 202 if (ACPI_FAILURE(status))
203 return false; 203 return false;
204 204
205 res->start = addr.minimum; 205 res->start = addr.address.minimum;
206 res->end = addr.maximum; 206 res->end = addr.address.maximum;
207 window = addr.producer_consumer == ACPI_PRODUCER; 207 window = addr.producer_consumer == ACPI_PRODUCER;
208 208
209 switch(addr.resource_type) { 209 switch(addr.resource_type) {
210 case ACPI_MEMORY_RANGE: 210 case ACPI_MEMORY_RANGE:
211 len = addr.maximum - addr.minimum + 1; 211 len = addr.address.maximum - addr.address.minimum + 1;
212 res->flags = acpi_dev_memresource_flags(len, 212 res->flags = acpi_dev_memresource_flags(len,
213 addr.info.mem.write_protect, 213 addr.info.mem.write_protect,
214 window); 214 window);
215 break; 215 break;
216 case ACPI_IO_RANGE: 216 case ACPI_IO_RANGE:
217 io_decode = addr.granularity == 0xfff ? 217 io_decode = addr.address.granularity == 0xfff ?
218 ACPI_DECODE_10 : ACPI_DECODE_16; 218 ACPI_DECODE_10 : ACPI_DECODE_16;
219 res->flags = acpi_dev_ioresource_flags(addr.minimum, 219 res->flags = acpi_dev_ioresource_flags(addr.address.minimum,
220 addr.maximum, 220 addr.address.maximum,
221 io_decode, window); 221 io_decode, window);
222 break; 222 break;
223 case ACPI_BUS_NUMBER_RANGE: 223 case ACPI_BUS_NUMBER_RANGE:
@@ -253,22 +253,22 @@ bool acpi_dev_resource_ext_address_space(struct acpi_resource *ares,
253 253
254 ext_addr = &ares->data.ext_address64; 254 ext_addr = &ares->data.ext_address64;
255 255
256 res->start = ext_addr->minimum; 256 res->start = ext_addr->address.minimum;
257 res->end = ext_addr->maximum; 257 res->end = ext_addr->address.maximum;
258 window = ext_addr->producer_consumer == ACPI_PRODUCER; 258 window = ext_addr->producer_consumer == ACPI_PRODUCER;
259 259
260 switch(ext_addr->resource_type) { 260 switch(ext_addr->resource_type) {
261 case ACPI_MEMORY_RANGE: 261 case ACPI_MEMORY_RANGE:
262 len = ext_addr->maximum - ext_addr->minimum + 1; 262 len = ext_addr->address.maximum - ext_addr->address.minimum + 1;
263 res->flags = acpi_dev_memresource_flags(len, 263 res->flags = acpi_dev_memresource_flags(len,
264 ext_addr->info.mem.write_protect, 264 ext_addr->info.mem.write_protect,
265 window); 265 window);
266 break; 266 break;
267 case ACPI_IO_RANGE: 267 case ACPI_IO_RANGE:
268 io_decode = ext_addr->granularity == 0xfff ? 268 io_decode = ext_addr->address.granularity == 0xfff ?
269 ACPI_DECODE_10 : ACPI_DECODE_16; 269 ACPI_DECODE_10 : ACPI_DECODE_16;
270 res->flags = acpi_dev_ioresource_flags(ext_addr->minimum, 270 res->flags = acpi_dev_ioresource_flags(ext_addr->address.minimum,
271 ext_addr->maximum, 271 ext_addr->address.maximum,
272 io_decode, window); 272 io_decode, window);
273 break; 273 break;
274 case ACPI_BUS_NUMBER_RANGE: 274 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)
976 status = acpi_resource_to_address64(res, &addr); 976 status = acpi_resource_to_address64(res, &addr);
977 977
978 if (ACPI_SUCCESS(status)) { 978 if (ACPI_SUCCESS(status)) {
979 hdp->hd_phys_address = addr.minimum; 979 hdp->hd_phys_address = addr.address.minimum;
980 hdp->hd_address = ioremap(addr.minimum, addr.address_length); 980 hdp->hd_address = ioremap(addr.address.minimum, addr.address.address_length);
981 981
982 if (hpet_is_known(hdp)) { 982 if (hpet_is_known(hdp)) {
983 iounmap(hdp->hd_address); 983 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)
861 break; 861 break;
862 862
863 case ACPI_RESOURCE_TYPE_ADDRESS64: 863 case ACPI_RESOURCE_TYPE_ADDRESS64:
864 hyperv_mmio.start = res->data.address64.minimum; 864 hyperv_mmio.start = res->data.address64.address.minimum;
865 hyperv_mmio.end = res->data.address64.maximum; 865 hyperv_mmio.end = res->data.address64.address.maximum;
866 break; 866 break;
867 } 867 }
868 868
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,
410 if (p->resource_type == ACPI_MEMORY_RANGE) { 410 if (p->resource_type == ACPI_MEMORY_RANGE) {
411 if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY) 411 if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY)
412 flags = IORESOURCE_MEM_WRITEABLE; 412 flags = IORESOURCE_MEM_WRITEABLE;
413 pnp_register_mem_resource(dev, option_flags, p->minimum, 413 pnp_register_mem_resource(dev, option_flags, p->address.minimum,
414 p->minimum, 0, p->address_length, 414 p->address.minimum, 0, p->address.address_length,
415 flags); 415 flags);
416 } else if (p->resource_type == ACPI_IO_RANGE) 416 } else if (p->resource_type == ACPI_IO_RANGE)
417 pnp_register_port_resource(dev, option_flags, p->minimum, 417 pnp_register_port_resource(dev, option_flags, p->address.minimum,
418 p->minimum, 0, p->address_length, 418 p->address.minimum, 0, p->address.address_length,
419 IORESOURCE_IO_FIXED); 419 IORESOURCE_IO_FIXED);
420} 420}
421 421
@@ -429,12 +429,12 @@ static __init void pnpacpi_parse_ext_address_option(struct pnp_dev *dev,
429 if (p->resource_type == ACPI_MEMORY_RANGE) { 429 if (p->resource_type == ACPI_MEMORY_RANGE) {
430 if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY) 430 if (p->info.mem.write_protect == ACPI_READ_WRITE_MEMORY)
431 flags = IORESOURCE_MEM_WRITEABLE; 431 flags = IORESOURCE_MEM_WRITEABLE;
432 pnp_register_mem_resource(dev, option_flags, p->minimum, 432 pnp_register_mem_resource(dev, option_flags, p->address.minimum,
433 p->minimum, 0, p->address_length, 433 p->address.minimum, 0, p->address.address_length,
434 flags); 434 flags);
435 } else if (p->resource_type == ACPI_IO_RANGE) 435 } else if (p->resource_type == ACPI_IO_RANGE)
436 pnp_register_port_resource(dev, option_flags, p->minimum, 436 pnp_register_port_resource(dev, option_flags, p->address.minimum,
437 p->minimum, 0, p->address_length, 437 p->address.minimum, 0, p->address.address_length,
438 IORESOURCE_IO_FIXED); 438 IORESOURCE_IO_FIXED);
439} 439}
440 440
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)
117 list_for_each_entry(info, &mem_device->res_list, list) { 117 list_for_each_entry(info, &mem_device->res_list, list) {
118 if ((info->caching == address64.info.mem.caching) && 118 if ((info->caching == address64.info.mem.caching) &&
119 (info->write_protect == address64.info.mem.write_protect) && 119 (info->write_protect == address64.info.mem.write_protect) &&
120 (info->start_addr + info->length == address64.minimum)) { 120 (info->start_addr + info->length == address64.address.minimum)) {
121 info->length += address64.address_length; 121 info->length += address64.address.address_length;
122 return AE_OK; 122 return AE_OK;
123 } 123 }
124 } 124 }
@@ -130,8 +130,8 @@ acpi_memory_get_resource(struct acpi_resource *resource, void *context)
130 INIT_LIST_HEAD(&new->list); 130 INIT_LIST_HEAD(&new->list);
131 new->caching = address64.info.mem.caching; 131 new->caching = address64.info.mem.caching;
132 new->write_protect = address64.info.mem.write_protect; 132 new->write_protect = address64.info.mem.write_protect;
133 new->start_addr = address64.minimum; 133 new->start_addr = address64.address.minimum;
134 new->length = address64.address_length; 134 new->length = address64.address.address_length;
135 list_add_tail(&new->list, &mem_device->res_list); 135 list_add_tail(&new->list, &mem_device->res_list);
136 136
137 return AE_OK; 137 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 {
305 u8 max_address_fixed; \ 305 u8 max_address_fixed; \
306 union acpi_resource_attribute info; 306 union acpi_resource_attribute info;
307 307
308struct acpi_resource_address { 308struct acpi_address16_attribute {
309ACPI_RESOURCE_ADDRESS_COMMON}; 309 u16 granularity;
310
311struct acpi_resource_address16 {
312 ACPI_RESOURCE_ADDRESS_COMMON u16 granularity;
313 u16 minimum; 310 u16 minimum;
314 u16 maximum; 311 u16 maximum;
315 u16 translation_offset; 312 u16 translation_offset;
316 u16 address_length; 313 u16 address_length;
317 struct acpi_resource_source resource_source;
318}; 314};
319 315
320struct acpi_resource_address32 { 316struct acpi_address32_attribute {
321 ACPI_RESOURCE_ADDRESS_COMMON u32 granularity; 317 u32 granularity;
322 u32 minimum; 318 u32 minimum;
323 u32 maximum; 319 u32 maximum;
324 u32 translation_offset; 320 u32 translation_offset;
325 u32 address_length; 321 u32 address_length;
326 struct acpi_resource_source resource_source;
327}; 322};
328 323
329struct acpi_resource_address64 { 324struct acpi_address64_attribute {
330 ACPI_RESOURCE_ADDRESS_COMMON u64 granularity; 325 u64 granularity;
331 u64 minimum; 326 u64 minimum;
332 u64 maximum; 327 u64 maximum;
333 u64 translation_offset; 328 u64 translation_offset;
334 u64 address_length; 329 u64 address_length;
330};
331
332struct acpi_resource_address {
333ACPI_RESOURCE_ADDRESS_COMMON};
334
335struct acpi_resource_address16 {
336 ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address16_attribute address;
337 struct acpi_resource_source resource_source;
338};
339
340struct acpi_resource_address32 {
341 ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address32_attribute address;
342 struct acpi_resource_source resource_source;
343};
344
345struct acpi_resource_address64 {
346 ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address64_attribute address;
335 struct acpi_resource_source resource_source; 347 struct acpi_resource_source resource_source;
336}; 348};
337 349
338struct acpi_resource_extended_address64 { 350struct acpi_resource_extended_address64 {
339 ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID; 351 ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID;
340 u64 granularity; 352 struct acpi_address64_attribute address;
341 u64 minimum;
342 u64 maximum;
343 u64 translation_offset;
344 u64 address_length;
345 u64 type_specific; 353 u64 type_specific;
346}; 354};
347 355