diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-10-27 14:02:16 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-11-05 09:53:31 +0100 |
commit | d269122f91efaf2f745424c215fabb758b7e7ea0 (patch) | |
tree | 7e692e954a34ca07243ff9d9fc06db186f8c9fd1 /src/target/target.c | |
parent | 972924b2ad4bb7da34e331d4854b5f3d3e9e7260 (diff) | |
download | openocd_libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.gz openocd_libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.bz2 openocd_libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.tar.xz openocd_libswd-d269122f91efaf2f745424c215fabb758b7e7ea0.zip |
target: add target->type->has_mmu fn.
improve default target->read/write_phys_memory, produce
more sensible error messages if the mmu interface
functions have not been implemented yet vs. will
not be implemented(e.g. cortex m3).
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/target/target.c')
-rw-r--r-- | src/target/target.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/target/target.c b/src/target/target.c index 5cf70118..2a66fcf1 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -496,7 +496,13 @@ static int default_virt2phys(struct target_s *target, uint32_t virtual, uint32_t static int default_mmu(struct target_s *target, int *enabled) { - *enabled = 0; + LOG_ERROR("Not implemented."); + return ERROR_FAIL; +} + +static int default_has_mmu(struct target_s *target, bool *has_mmu) +{ + *has_mmu = true; return ERROR_OK; } @@ -743,14 +749,32 @@ int target_mcr(struct target_s *target, int cpnum, uint32_t op1, uint32_t op2, u static int default_read_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { - LOG_ERROR("Not implemented"); - return ERROR_FAIL; + int retval; + bool mmu; + retval = target->type->has_mmu(target, &mmu); + if (retval != ERROR_OK) + return retval; + if (mmu) + { + LOG_ERROR("Not implemented"); + return ERROR_FAIL; + } + return target_read_memory(target, address, size, count, buffer); } static int default_write_phys_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { - LOG_ERROR("Not implemented"); - return ERROR_FAIL; + int retval; + bool mmu; + retval = target->type->has_mmu(target, &mmu); + if (retval != ERROR_OK) + return retval; + if (mmu) + { + LOG_ERROR("Not implemented"); + return ERROR_FAIL; + } + return target_write_memory(target, address, size, count, buffer); } @@ -816,6 +840,10 @@ int target_init(struct command_context_s *cmd_ctx) { target->type->mmu = default_mmu; } + if (target->type->has_mmu == NULL) + { + target->type->has_mmu = default_has_mmu; + } target = target->next; } |