@@ -177,7 +177,8 @@ static int dma_flags(struct pnp_dev *dev, int type, int bus_master,
177
177
}
178
178
179
179
static void pnpacpi_parse_allocated_ioresource (struct pnp_dev * dev , u64 start ,
180
- u64 len , int io_decode )
180
+ u64 len , int io_decode ,
181
+ int window )
181
182
{
182
183
int flags = 0 ;
183
184
u64 end = start + len - 1 ;
@@ -186,6 +187,8 @@ static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev, u64 start,
186
187
flags |= IORESOURCE_IO_16BIT_ADDR ;
187
188
if (len == 0 || end >= 0x10003 )
188
189
flags |= IORESOURCE_DISABLED ;
190
+ if (window )
191
+ flags |= IORESOURCE_WINDOW ;
189
192
190
193
pnp_add_io_resource (dev , start , end , flags );
191
194
}
@@ -247,7 +250,7 @@ static void pnpacpi_parse_allocated_vendor(struct pnp_dev *dev,
247
250
248
251
static void pnpacpi_parse_allocated_memresource (struct pnp_dev * dev ,
249
252
u64 start , u64 len ,
250
- int write_protect )
253
+ int write_protect , int window )
251
254
{
252
255
int flags = 0 ;
253
256
u64 end = start + len - 1 ;
@@ -256,6 +259,8 @@ static void pnpacpi_parse_allocated_memresource(struct pnp_dev *dev,
256
259
flags |= IORESOURCE_DISABLED ;
257
260
if (write_protect == ACPI_READ_WRITE_MEMORY )
258
261
flags |= IORESOURCE_MEM_WRITEABLE ;
262
+ if (window )
263
+ flags |= IORESOURCE_WINDOW ;
259
264
260
265
pnp_add_mem_resource (dev , start , end , flags );
261
266
}
@@ -265,6 +270,7 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
265
270
{
266
271
struct acpi_resource_address64 addr , * p = & addr ;
267
272
acpi_status status ;
273
+ int window ;
268
274
269
275
status = acpi_resource_to_address64 (res , p );
270
276
if (!ACPI_SUCCESS (status )) {
@@ -273,37 +279,36 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
273
279
return ;
274
280
}
275
281
276
- if (p -> producer_consumer == ACPI_PRODUCER )
277
- return ;
282
+ window = (p -> producer_consumer == ACPI_PRODUCER ) ? 1 : 0 ;
278
283
279
284
if (p -> resource_type == ACPI_MEMORY_RANGE )
280
285
pnpacpi_parse_allocated_memresource (dev ,
281
286
p -> minimum , p -> address_length ,
282
- p -> info .mem .write_protect );
287
+ p -> info .mem .write_protect , window );
283
288
else if (p -> resource_type == ACPI_IO_RANGE )
284
289
pnpacpi_parse_allocated_ioresource (dev ,
285
290
p -> minimum , p -> address_length ,
286
291
p -> granularity == 0xfff ? ACPI_DECODE_10 :
287
- ACPI_DECODE_16 );
292
+ ACPI_DECODE_16 , window );
288
293
}
289
294
290
295
static void pnpacpi_parse_allocated_ext_address_space (struct pnp_dev * dev ,
291
296
struct acpi_resource * res )
292
297
{
293
298
struct acpi_resource_extended_address64 * p = & res -> data .ext_address64 ;
299
+ int window ;
294
300
295
- if (p -> producer_consumer == ACPI_PRODUCER )
296
- return ;
301
+ window = (p -> producer_consumer == ACPI_PRODUCER ) ? 1 : 0 ;
297
302
298
303
if (p -> resource_type == ACPI_MEMORY_RANGE )
299
304
pnpacpi_parse_allocated_memresource (dev ,
300
305
p -> minimum , p -> address_length ,
301
- p -> info .mem .write_protect );
306
+ p -> info .mem .write_protect , window );
302
307
else if (p -> resource_type == ACPI_IO_RANGE )
303
308
pnpacpi_parse_allocated_ioresource (dev ,
304
309
p -> minimum , p -> address_length ,
305
310
p -> granularity == 0xfff ? ACPI_DECODE_10 :
306
- ACPI_DECODE_16 );
311
+ ACPI_DECODE_16 , window );
307
312
}
308
313
309
314
static acpi_status pnpacpi_allocated_resource (struct acpi_resource * res ,
@@ -368,7 +373,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
368
373
pnpacpi_parse_allocated_ioresource (dev ,
369
374
io -> minimum ,
370
375
io -> address_length ,
371
- io -> io_decode );
376
+ io -> io_decode , 0 );
372
377
break ;
373
378
374
379
case ACPI_RESOURCE_TYPE_START_DEPENDENT :
@@ -380,7 +385,7 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
380
385
pnpacpi_parse_allocated_ioresource (dev ,
381
386
fixed_io -> address ,
382
387
fixed_io -> address_length ,
383
- ACPI_DECODE_10 );
388
+ ACPI_DECODE_10 , 0 );
384
389
break ;
385
390
386
391
case ACPI_RESOURCE_TYPE_VENDOR :
@@ -396,21 +401,21 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
396
401
pnpacpi_parse_allocated_memresource (dev ,
397
402
memory24 -> minimum ,
398
403
memory24 -> address_length ,
399
- memory24 -> write_protect );
404
+ memory24 -> write_protect , 0 );
400
405
break ;
401
406
case ACPI_RESOURCE_TYPE_MEMORY32 :
402
407
memory32 = & res -> data .memory32 ;
403
408
pnpacpi_parse_allocated_memresource (dev ,
404
409
memory32 -> minimum ,
405
410
memory32 -> address_length ,
406
- memory32 -> write_protect );
411
+ memory32 -> write_protect , 0 );
407
412
break ;
408
413
case ACPI_RESOURCE_TYPE_FIXED_MEMORY32 :
409
414
fixed_memory32 = & res -> data .fixed_memory32 ;
410
415
pnpacpi_parse_allocated_memresource (dev ,
411
416
fixed_memory32 -> address ,
412
417
fixed_memory32 -> address_length ,
413
- fixed_memory32 -> write_protect );
418
+ fixed_memory32 -> write_protect , 0 );
414
419
break ;
415
420
case ACPI_RESOURCE_TYPE_ADDRESS16 :
416
421
case ACPI_RESOURCE_TYPE_ADDRESS32 :
0 commit comments