diff options
Diffstat (limited to 'common/resource.c')
-rw-r--r-- | common/resource.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/common/resource.c b/common/resource.c index ff4318a0d7..f96cb94b50 100644 --- a/common/resource.c +++ b/common/resource.c @@ -102,6 +102,28 @@ int release_region(struct resource *res) return 0; } + +/* + * merge two adjacent sibling regions. + */ +int __merge_regions(const char *name, + struct resource *resa, struct resource *resb) +{ + if (!resource_adjacent(resa, resb)) + return -EINVAL; + + if (resa->start < resb->start) + resa->end = resb->end; + else + resa->start = resb->start; + + free((char *)resa->name); + resa->name = xstrdup(name); + release_region(resb); + + return 0; +} + /* The root resource for the whole memory-mapped io space */ struct resource iomem_resource = { .start = 0, |