Source
447
447
return __walk_iomem_res_desc(start, end, flags, IORES_DESC_NONE, true,
448
448
arg, func);
449
449
}
450
450
451
451
#if !defined(CONFIG_ARCH_HAS_WALK_MEMORY)
452
452
453
453
/*
454
454
* This function calls the @func callback against all memory ranges of type
455
455
* System RAM which are marked as IORESOURCE_SYSTEM_RAM and IORESOUCE_BUSY.
456
456
* It is to be used only for System RAM.
457
+
*
458
+
* This will find System RAM ranges that are children of top-level resources
459
+
* in addition to top-level System RAM resources.
457
460
*/
458
461
int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
459
462
void *arg, int (*func)(unsigned long, unsigned long, void *))
460
463
{
461
464
resource_size_t start, end;
462
465
unsigned long flags;
463
466
struct resource res;
464
467
unsigned long pfn, end_pfn;
465
468
int ret = -EINVAL;
466
469
467
470
start = (u64) start_pfn << PAGE_SHIFT;
468
471
end = ((u64)(start_pfn + nr_pages) << PAGE_SHIFT) - 1;
469
472
flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
470
473
while (start < end &&
471
474
!find_next_iomem_res(start, end, flags, IORES_DESC_NONE,
472
-
true, &res)) {
475
+
false, &res)) {
473
476
pfn = (res.start + PAGE_SIZE - 1) >> PAGE_SHIFT;
474
477
end_pfn = (res.end + 1) >> PAGE_SHIFT;
475
478
if (end_pfn > pfn)
476
479
ret = (*func)(pfn, end_pfn - pfn, arg);
477
480
if (ret)
478
481
break;
479
482
start = res.end + 1;
480
483
}
481
484
return ret;
482
485
}