diff options
author | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-03-28 16:31:55 +0000 |
---|---|---|
committer | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-03-28 16:31:55 +0000 |
commit | 4a5f45e87d593d6911da680cb92ffbc9b43c9486 (patch) | |
tree | d41ddb8594b5fab03c12075cbc4d3888d59ed027 /src/target/target.c | |
parent | 5ed126c4f90948fbf53d186dc4ef49018fb5ecfc (diff) |
- merged XScale branch back into trunk
- fixed some compiler warnigns in amt_jtagaccel.c, bitbang.c, parport.c
- free working area and register stuff if str7x block write algorithm failed
- check PC after exiting a target algorithm in armv4_5.c
git-svn-id: svn://svn.berlios.de/openocd/trunk@135 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target/target.c')
-rw-r--r-- | src/target/target.c | 87 |
1 files changed, 68 insertions, 19 deletions
diff --git a/src/target/target.c b/src/target/target.c index 376fc52f..548ea0c3 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -79,6 +79,7 @@ extern target_type_t arm9tdmi_target; extern target_type_t arm920t_target; extern target_type_t arm966e_target; extern target_type_t arm926ejs_target; +extern target_type_t xscale_target; target_type_t *target_types[] = { @@ -88,6 +89,7 @@ target_type_t *target_types[] = &arm720t_target, &arm966e_target, &arm926ejs_target, + &xscale_target, NULL, }; @@ -727,60 +729,107 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe return ERROR_OK; } -void target_read_u32(struct target_s *target, u32 address, u32 *value) +int target_read_u32(struct target_s *target, u32 address, u32 *value) { u8 value_buf[4]; + + int retval = target->type->read_memory(target, address, 4, 1, value_buf); - target->type->read_memory(target, address, 4, 1, value_buf); + if (retval == ERROR_OK) + { + *value = target_buffer_get_u32(target, value_buf); + DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value); + } + else + { + *value = 0x0; + DEBUG("address: 0x%8.8x failed", address); + } - *value = target_buffer_get_u32(target, value_buf); - - DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value); + return retval; } -void target_read_u16(struct target_s *target, u32 address, u16 *value) +int target_read_u16(struct target_s *target, u32 address, u16 *value) { u8 value_buf[2]; - target->type->read_memory(target, address, 2, 1, value_buf); + int retval = target->type->read_memory(target, address, 2, 1, value_buf); - *value = target_buffer_get_u16(target, value_buf); - - DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value); + if (retval == ERROR_OK) + { + *value = target_buffer_get_u16(target, value_buf); + DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value); + } + else + { + *value = 0x0; + DEBUG("address: 0x%8.8x failed", address); + } + + return retval; } -void target_read_u8(struct target_s *target, u32 address, u8 *value) +int target_read_u8(struct target_s *target, u32 address, u8 *value) { - target->type->read_memory(target, address, 1, 1, value); + int retval = target->type->read_memory(target, address, 1, 1, value); - DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value); + if (retval == ERROR_OK) + { + DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value); + } + else + { + *value = 0x0; + DEBUG("address: 0x%8.8x failed", address); + } + + return retval; } -void target_write_u32(struct target_s *target, u32 address, u32 value) +int target_write_u32(struct target_s *target, u32 address, u32 value) { + int retval; u8 value_buf[4]; DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); target_buffer_set_u32(target, value_buf, value); - target->type->write_memory(target, address, 4, 1, value_buf); + if ((retval = target->type->write_memory(target, address, 4, 1, value_buf)) != ERROR_OK) + { + DEBUG("failed: %i", retval); + } + + return retval; } -void target_write_u16(struct target_s *target, u32 address, u16 value) +int target_write_u16(struct target_s *target, u32 address, u16 value) { + int retval; u8 value_buf[2]; DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); target_buffer_set_u16(target, value_buf, value); - target->type->write_memory(target, address, 2, 1, value_buf); + if ((retval = target->type->write_memory(target, address, 2, 1, value_buf)) != ERROR_OK) + { + DEBUG("failed: %i", retval); + } + + return retval; } -void target_write_u8(struct target_s *target, u32 address, u8 value) +int target_write_u8(struct target_s *target, u32 address, u8 value) { + int retval; + DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value); - target->type->read_memory(target, address, 1, 1, &value); + if ((retval = target->type->read_memory(target, address, 1, 1, &value)) != ERROR_OK) + { + DEBUG("failed: %i", retval); + } + + return retval; } int target_register_user_commands(struct command_context_s *cmd_ctx) |