Browse Source

target: add function to get number of bytes available in working area

This is a much cleaner solution to the problem of allocating as much
working area as possible than what is currently being done in most/all flash
drivers (which is: try an arbitrary sized chunk, if it fails, pick a smaller
number, rinse and repeat).

Use this function to find out how much working area is available, limit or
restrict that amount at will and then simply allocate it.

Change-Id: Ib7d5d0b7485aed3e0a4fad60c1bedb7dfd16146f
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/446
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
tags/v0.6.0-rc1
Andreas Fritiofson 12 years ago
committed by Spencer Oliver
parent
commit
2eb564b756
2 changed files with 20 additions and 0 deletions
  1. +19
    -0
      src/target/target.c
  2. +1
    -0
      src/target/target.h

+ 19
- 0
src/target/target.c View File

@@ -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;


+ 1
- 0
src/target/target.h View File

@@ -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;



Loading…
Cancel
Save