aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pnp')
-rw-r--r--drivers/pnp/pnpacpi/rsparser.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
index 407b4eaddcbf..522d697cff0b 100644
--- a/drivers/pnp/pnpacpi/rsparser.c
+++ b/drivers/pnp/pnpacpi/rsparser.c
@@ -120,7 +120,7 @@ pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, u32 dma)
120 120
121static void 121static void
122pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res, 122pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res,
123 u32 io, u32 len) 123 u64 io, u64 len)
124{ 124{
125 int i = 0; 125 int i = 0;
126 while (!(res->port_resource[i].flags & IORESOURCE_UNSET) && 126 while (!(res->port_resource[i].flags & IORESOURCE_UNSET) &&
@@ -156,6 +156,27 @@ pnpacpi_parse_allocated_memresource(struct pnp_resource_table * res,
156 } 156 }
157} 157}
158 158
159static void
160pnpacpi_parse_allocated_address_space(struct pnp_resource_table *res_table,
161 struct acpi_resource *res)
162{
163 struct acpi_resource_address64 addr, *p = &addr;
164 acpi_status status;
165
166 status = acpi_resource_to_address64(res, p);
167 if (!ACPI_SUCCESS(status)) {
168 pnp_warn("PnPACPI: failed to convert resource type %d",
169 res->type);
170 return;
171 }
172
173 if (p->resource_type == ACPI_MEMORY_RANGE)
174 pnpacpi_parse_allocated_memresource(res_table,
175 p->minimum, p->address_length);
176 else if (p->resource_type == ACPI_IO_RANGE)
177 pnpacpi_parse_allocated_ioresource(res_table,
178 p->minimum, p->address_length);
179}
159 180
160static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res, 181static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
161 void *data) 182 void *data)
@@ -221,19 +242,9 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
221 res->data.fixed_memory32.address_length); 242 res->data.fixed_memory32.address_length);
222 break; 243 break;
223 case ACPI_RESOURCE_TYPE_ADDRESS16: 244 case ACPI_RESOURCE_TYPE_ADDRESS16:
224 pnpacpi_parse_allocated_memresource(res_table,
225 res->data.address16.minimum,
226 res->data.address16.address_length);
227 break;
228 case ACPI_RESOURCE_TYPE_ADDRESS32: 245 case ACPI_RESOURCE_TYPE_ADDRESS32:
229 pnpacpi_parse_allocated_memresource(res_table,
230 res->data.address32.minimum,
231 res->data.address32.address_length);
232 break;
233 case ACPI_RESOURCE_TYPE_ADDRESS64: 246 case ACPI_RESOURCE_TYPE_ADDRESS64:
234 pnpacpi_parse_allocated_memresource(res_table, 247 pnpacpi_parse_allocated_address_space(res_table, res);
235 res->data.address64.minimum,
236 res->data.address64.address_length);
237 break; 248 break;
238 249
239 case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: 250 case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: