X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/db98496bb0100861213549d77942b4e5434a7535..983fe7c4ac262f56d38a143b1efab1e4afb77a52:/l4/pkg/l4re/util/include/region_mapping_svr diff --git a/l4/pkg/l4re/util/include/region_mapping_svr b/l4/pkg/l4re/util/include/region_mapping_svr index 683608482..a496a6b36 100644 --- a/l4/pkg/l4re/util/include/region_mapping_svr +++ b/l4/pkg/l4re/util/include/region_mapping_svr @@ -152,6 +152,53 @@ int region_map_server(RM *rm, IOS &ios) return L4_EOK; } + case Rm_::Get_regions: + { + l4_addr_t addr; + ios >> addr; + typename RM::Node r; + int num = 0; + while ((r = rm->lower_bound(Region(addr, addr +1)))) + { + Rm::Region x; + x.start = r->first.start(); + x.end = r->first.end(); + x.offset = r->second.offset(); + + if (!ios.put(x)) + break; + + num++; + if (x.end >= rm->max_addr()) + break; + addr = x.end + 1; + } + + return num; + } + case Rm_::Get_areas: + { + l4_addr_t addr; + ios >> addr; + typename RM::Node r; + int num = 0; + while ((r = rm->lower_bound_area(Region(addr, addr +1)))) + { + Rm::Area x; + x.start = r->first.start(); + x.end = r->first.end(); + + if (!ios.put(x)) + break; + + num++; + if (x.end >= rm->max_addr()) + break; + addr = x.end + 1; + } + + return num; + } default: return -L4_ENOSYS; }