diff --git a/src/target/target.c b/src/target/target.c index 26607c578..5b37ef03b 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -1502,6 +1502,25 @@ void target_free_all_working_areas(struct target *target) target_free_all_working_areas_restore(target, 1); } +/* Find the largest number of bytes that can be allocated */ +uint32_t target_get_working_area_avail(struct target *target) +{ + struct working_area *c = target->working_areas; + uint32_t max_size = 0; + + if (c == NULL) + return target->working_area_size; + + while (c) { + if (c->free && max_size < c->size) + max_size = c->size; + + c = c->next; + } + + return max_size; +} + int target_arch_state(struct target *target) { int retval; diff --git a/src/target/target.h b/src/target/target.h index 680f8c32b..a5ab3bddc 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -540,6 +540,7 @@ int target_alloc_working_area_try(struct target *target, uint32_t size, struct working_area **area); int target_free_working_area(struct target *target, struct working_area *area); void target_free_all_working_areas(struct target *target); +uint32_t target_get_working_area_avail(struct target *target); extern struct target *all_targets;