aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/target.c19
-rw-r--r--src/target/target.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 26607c57..5b37ef03 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 680f8c32..a5ab3bdd 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;