X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Ftarget.c;h=670b4ba8b5921e3230e48cddc34ab5562fd82fd7;hp=5a7ac3bc7e613a8a13960c52b1247fab8bcfcb28;hb=8b994145b849c40b0a195c3fb332b9770b2f9097;hpb=16c77cf3cac6e568813bbf88af7a6e3c32f5fbc6 diff --git a/src/target/target.c b/src/target/target.c index 5a7ac3bc7e..670b4ba8b5 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -2,7 +2,7 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * - * Copyright (C) 2007,2008 Øyvind Harboe * + * Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * Copyright (C) 2008, Duane Ellis * @@ -70,7 +70,7 @@ static int handle_fast_load_command(struct command_context_s *cmd_ctx, char *cmd static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv); -static int jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv); +static int jim_target(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv); static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv); @@ -82,6 +82,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 fa526_target; extern target_type_t feroceon_target; extern target_type_t xscale_target; extern target_type_t cortexm3_target; @@ -98,6 +99,7 @@ target_type_t *target_types[] = &arm720t_target, &arm966e_target, &arm926ejs_target, + &fa526_target, &feroceon_target, &xscale_target, &cortexm3_target, @@ -137,12 +139,12 @@ const Jim_Nvp nvp_error_target[] = { { .value = -1, .name = NULL } }; -const char *target_strerror_safe( int err ) +const char *target_strerror_safe(int err) { const Jim_Nvp *n; - n = Jim_Nvp_value2name_simple( nvp_error_target, err ); - if( n->name == NULL ){ + n = Jim_Nvp_value2name_simple(nvp_error_target, err); + if (n->name == NULL) { return "unknown"; } else { return n->name; @@ -235,6 +237,18 @@ const Jim_Nvp nvp_reset_modes[] = { { .name = NULL , .value = -1 }, }; +const char * +target_state_name( target_t *t ) +{ + const char *cp; + cp = Jim_Nvp_value2name_simple(nvp_target_state, t->state)->name; + if( !cp ){ + LOG_ERROR("Invalid target state: %d", (int)(t->state)); + cp = "(*BUG*unknown*BUG*)"; + } + return cp; +} + static int max_target_number(void) { target_t *t; @@ -242,9 +256,9 @@ static int max_target_number(void) x = -1; t = all_targets; - while( t ){ - if( x < t->target_number ){ - x = (t->target_number)+1; + while (t) { + if (x < t->target_number) { + x = (t->target_number) + 1; } t = t->next; } @@ -260,19 +274,19 @@ static int new_target_number(void) /* number is 0 based */ x = -1; t = all_targets; - while(t){ - if( x < t->target_number ){ + while (t) { + if (x < t->target_number) { x = t->target_number; } t = t->next; } - return x+1; + return x + 1; } -static int target_continous_poll = 1; +static int target_continuous_poll = 1; -/* read a u32 from a buffer in target memory endianness */ -u32 target_buffer_get_u32(target_t *target, const u8 *buffer) +/* read a uint32_t from a buffer in target memory endianness */ +uint32_t target_buffer_get_u32(target_t *target, const uint8_t *buffer) { if (target->endianness == TARGET_LITTLE_ENDIAN) return le_to_h_u32(buffer); @@ -280,8 +294,8 @@ u32 target_buffer_get_u32(target_t *target, const u8 *buffer) return be_to_h_u32(buffer); } -/* read a u16 from a buffer in target memory endianness */ -u16 target_buffer_get_u16(target_t *target, const u8 *buffer) +/* read a uint16_t from a buffer in target memory endianness */ +uint16_t target_buffer_get_u16(target_t *target, const uint8_t *buffer) { if (target->endianness == TARGET_LITTLE_ENDIAN) return le_to_h_u16(buffer); @@ -289,14 +303,14 @@ u16 target_buffer_get_u16(target_t *target, const u8 *buffer) return be_to_h_u16(buffer); } -/* read a u8 from a buffer in target memory endianness */ -u8 target_buffer_get_u8(target_t *target, const u8 *buffer) +/* read a uint8_t from a buffer in target memory endianness */ +uint8_t target_buffer_get_u8(target_t *target, const uint8_t *buffer) { return *buffer & 0x0ff; } -/* write a u32 to a buffer in target memory endianness */ -void target_buffer_set_u32(target_t *target, u8 *buffer, u32 value) +/* write a uint32_t to a buffer in target memory endianness */ +void target_buffer_set_u32(target_t *target, uint8_t *buffer, uint32_t value) { if (target->endianness == TARGET_LITTLE_ENDIAN) h_u32_to_le(buffer, value); @@ -304,8 +318,8 @@ void target_buffer_set_u32(target_t *target, u8 *buffer, u32 value) h_u32_to_be(buffer, value); } -/* write a u16 to a buffer in target memory endianness */ -void target_buffer_set_u16(target_t *target, u8 *buffer, u16 value) +/* write a uint16_t to a buffer in target memory endianness */ +void target_buffer_set_u16(target_t *target, uint8_t *buffer, uint16_t value) { if (target->endianness == TARGET_LITTLE_ENDIAN) h_u16_to_le(buffer, value); @@ -313,8 +327,8 @@ void target_buffer_set_u16(target_t *target, u8 *buffer, u16 value) h_u16_to_be(buffer, value); } -/* write a u8 to a buffer in target memory endianness */ -void target_buffer_set_u8(target_t *target, u8 *buffer, u8 value) +/* write a uint8_t to a buffer in target memory endianness */ +void target_buffer_set_u8(target_t *target, uint8_t *buffer, uint8_t value) { *buffer = value; } @@ -350,8 +364,8 @@ static target_t *get_target_by_num(int num) { target_t *target = all_targets; - while (target){ - if( target->target_number == num ){ + while (target) { + if (target->target_number == num) { return target; } target = target->next; @@ -400,7 +414,7 @@ int target_halt(struct target_s *target) return target->type->halt(target); } -int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution) +int target_resume(struct target_s *target, int current, uint32_t address, int handle_breakpoints, int debug_execution) { int retval; @@ -426,8 +440,8 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo char buf[100]; int retval; Jim_Nvp *n; - n = Jim_Nvp_value2name_simple( nvp_reset_modes, reset_mode ); - if( n->name == NULL ){ + n = Jim_Nvp_value2name_simple(nvp_reset_modes, reset_mode); + if (n->name == NULL) { LOG_ERROR("invalid reset mode"); return ERROR_FAIL; } @@ -436,15 +450,15 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo * more predictable, i.e. dr/irscan & pathmove in events will * not have JTAG operations injected into the middle of a sequence. */ - int save_poll = target_continous_poll; - target_continous_poll = 0; + int save_poll = target_continuous_poll; + target_continuous_poll = 0; - sprintf( buf, "ocd_process_reset %s", n->name ); - retval = Jim_Eval( interp, buf ); + sprintf(buf, "ocd_process_reset %s", n->name); + retval = Jim_Eval(interp, buf); - target_continous_poll = save_poll; + target_continuous_poll = save_poll; - if(retval != JIM_OK) { + if (retval != JIM_OK) { Jim_PrintErrorMessage(interp); return ERROR_FAIL; } @@ -455,7 +469,7 @@ int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mo return retval; } -static int default_virt2phys(struct target_s *target, u32 virtual, u32 *physical) +static int default_virt2phys(struct target_s *target, uint32_t virtual, uint32_t *physical) { *physical = virtual; return ERROR_OK; @@ -478,7 +492,19 @@ int target_examine_one(struct target_s *target) return target->type->examine(target); } -/* Targets that correctly implement init+examine, i.e. +static int jtag_enable_callback(enum jtag_event event, void *priv) +{ + target_t *target = priv; + + if (event != JTAG_TAP_EVENT_ENABLE || !target->tap->enabled) + return ERROR_OK; + + jtag_unregister_event_callback(jtag_enable_callback, target); + return target_examine_one(target); +} + + +/* Targets that correctly implement init + examine, i.e. * no communication with target during init: * * XScale @@ -490,8 +516,12 @@ int target_examine(void) for (target = all_targets; target; target = target->next) { - if (!target->tap->enabled) + /* defer examination, but don't skip it */ + if (!target->tap->enabled) { + jtag_register_event_callback(jtag_enable_callback, + target); continue; + } if ((retval = target_examine_one(target)) != ERROR_OK) return retval; } @@ -502,7 +532,7 @@ const char *target_get_name(struct target_s *target) return target->type->name; } -static int target_write_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer) +static int target_write_memory_imp(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { if (!target_was_examined(target)) { @@ -512,7 +542,7 @@ static int target_write_memory_imp(struct target_s *target, u32 address, u32 siz return target->type->write_memory_imp(target, address, size, count, buffer); } -static int target_read_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer) +static int target_read_memory_imp(struct target_s *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { if (!target_was_examined(target)) { @@ -532,7 +562,7 @@ static int target_soft_reset_halt_imp(struct target_s *target) return target->type->soft_reset_halt_imp(target); } -static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info) +static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info) { if (!target_was_examined(target)) { @@ -543,18 +573,18 @@ static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, } int target_read_memory(struct target_s *target, - u32 address, u32 size, u32 count, u8 *buffer) + uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { return target->type->read_memory(target, address, size, count, buffer); } int target_write_memory(struct target_s *target, - u32 address, u32 size, u32 count, u8 *buffer) + uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer) { return target->type->write_memory(target, address, size, count, buffer); } int target_bulk_write_memory(struct target_s *target, - u32 address, u32 count, u8 *buffer) + uint32_t address, uint32_t count, uint8_t *buffer) { return target->type->bulk_write_memory(target, address, count, buffer); } @@ -587,7 +617,7 @@ int target_get_gdb_reg_list(struct target_s *target, return target->type->get_gdb_reg_list(target, reg_list, reg_list_size); } int target_step(struct target_s *target, - int current, u32 address, int handle_breakpoints) + int current, uint32_t address, int handle_breakpoints) { return target->type->step(target, current, address, handle_breakpoints); } @@ -596,7 +626,7 @@ int target_step(struct target_s *target, int target_run_algorithm(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, - u32 entry_point, u32 exit_point, + uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info) { return target->type->run_algorithm(target, @@ -667,9 +697,9 @@ int target_init(struct command_context_s *cmd_ctx) if (all_targets) { - if((retval = target_register_user_commands(cmd_ctx)) != ERROR_OK) + if ((retval = target_register_user_commands(cmd_ctx)) != ERROR_OK) return retval; - if((retval = target_register_timer_callback(handle_target, 100, 1, NULL)) != ERROR_OK) + if ((retval = target_register_timer_callback(handle_target, 100, 1, NULL)) != ERROR_OK) return retval; } @@ -805,9 +835,9 @@ int target_call_event_callbacks(target_t *target, enum target_event event) LOG_DEBUG("target event %i (%s)", event, - Jim_Nvp_value2name_simple( nvp_target_event, event )->name ); + Jim_Nvp_value2name_simple(nvp_target_event, event)->name); - target_handle_event( target, event ); + target_handle_event(target, event); while (callback) { @@ -888,7 +918,7 @@ int target_call_timer_callbacks_now(void) return target_call_timer_callbacks_check_time(0); } -int target_alloc_working_area(struct target_s *target, u32 size, working_area_t **area) +int target_alloc_working_area(struct target_s *target, uint32_t size, working_area_t **area) { working_area_t *c = target->working_areas; working_area_t *new_wa = NULL; @@ -916,8 +946,8 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t /* only allocate multiples of 4 byte */ if (size % 4) { - LOG_ERROR("BUG: code tried to allocate unaligned number of bytes, padding"); - size = CEIL(size, 4); + LOG_ERROR("BUG: code tried to allocate unaligned number of bytes (0x%08x), padding", ((unsigned)(size))); + size = (size + 3) & (~3); } /* see if there's already a matching working area */ @@ -935,8 +965,8 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t if (!new_wa) { working_area_t **p = &target->working_areas; - u32 first_free = target->working_area; - u32 free_size = target->working_area_size; + uint32_t first_free = target->working_area; + uint32_t free_size = target->working_area_size; LOG_DEBUG("allocating new working area"); @@ -951,7 +981,8 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t if (free_size < size) { - LOG_WARNING("not enough working area available(requested %d, free %d)", size, free_size); + LOG_WARNING("not enough working area available(requested %u, free %u)", + (unsigned)(size), (unsigned)(free_size)); return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; } @@ -964,7 +995,7 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t { int retval; new_wa->backup = malloc(new_wa->size); - if((retval = target_read_memory(target, new_wa->address, 4, new_wa->size / 4, new_wa->backup)) != ERROR_OK) + if ((retval = target_read_memory(target, new_wa->address, 4, new_wa->size / 4, new_wa->backup)) != ERROR_OK) { free(new_wa->backup); free(new_wa); @@ -995,10 +1026,10 @@ int target_free_working_area_restore(struct target_s *target, working_area_t *ar if (area->free) return ERROR_OK; - if (restore&&target->backup_working_area) + if (restore && target->backup_working_area) { int retval; - if((retval = target_write_memory(target, area->address, 4, area->size / 4, area->backup)) != ERROR_OK) + if ((retval = target_write_memory(target, area->address, 4, area->size / 4, area->backup)) != ERROR_OK) return retval; } @@ -1052,7 +1083,7 @@ int target_register_commands(struct command_context_s *cmd_ctx) - register_jim(cmd_ctx, "target", jim_target, "configure target" ); + register_jim(cmd_ctx, "target", jim_target, "configure target"); return ERROR_OK; } @@ -1060,19 +1091,18 @@ int target_register_commands(struct command_context_s *cmd_ctx) int target_arch_state(struct target_s *target) { int retval; - if (target==NULL) + if (target == NULL) { LOG_USER("No target has been configured"); return ERROR_OK; } - LOG_USER("target state: %s", - Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name); + LOG_USER("target state: %s", target_state_name( target )); - if (target->state!=TARGET_HALTED) + if (target->state != TARGET_HALTED) return ERROR_OK; - retval=target->type->arch_state(target); + retval = target->type->arch_state(target); return retval; } @@ -1080,10 +1110,11 @@ int target_arch_state(struct target_s *target) * mode respectively, otherwise data is handled as quickly as * possible */ -int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer) +int target_write_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer) { int retval; - LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size, address); + LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", + (int)size, (unsigned)address); if (!target_was_examined(target)) { @@ -1098,7 +1129,9 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff if ((address + size - 1) < address) { /* GDB can request this when e.g. PC is 0xfffffffc*/ - LOG_ERROR("address+size wrapped(0x%08x, 0x%08x)", address, size); + LOG_ERROR("address + size wrapped(0x%08x, 0x%08x)", + (unsigned)address, + (unsigned)size); return ERROR_FAIL; } @@ -1110,7 +1143,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff /* handle unaligned head bytes */ if (address % 4) { - u32 unaligned = 4 - (address % 4); + uint32_t unaligned = 4 - (address % 4); if (unaligned > size) unaligned = size; @@ -1159,10 +1192,11 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff * mode respectively, otherwise data is handled as quickly as * possible */ -int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer) +int target_read_buffer(struct target_s *target, uint32_t address, uint32_t size, uint8_t *buffer) { int retval; - LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size, address); + LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", + (int)size, (unsigned)address); if (!target_was_examined(target)) { @@ -1177,7 +1211,9 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe if ((address + size - 1) < address) { /* GDB can request this when e.g. PC is 0xfffffffc*/ - LOG_ERROR("address+size wrapped(0x%08x, 0x%08x)", address, size); + LOG_ERROR("address + size wrapped(0x%08" PRIx32 ", 0x%08" PRIx32 ")", + address, + size); return ERROR_FAIL; } @@ -1189,7 +1225,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe /* handle unaligned head bytes */ if (address % 4) { - u32 unaligned = 4 - (address % 4); + uint32_t unaligned = 4 - (address % 4); if (unaligned > size) unaligned = size; @@ -1225,12 +1261,12 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe return ERROR_OK; } -int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* crc) +int target_checksum_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t* crc) { - u8 *buffer; + uint8_t *buffer; int retval; - u32 i; - u32 checksum = 0; + uint32_t i; + uint32_t checksum = 0; if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); @@ -1243,7 +1279,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* buffer = malloc(size); if (buffer == NULL) { - LOG_ERROR("error allocating buffer for section (%d bytes)", size); + LOG_ERROR("error allocating buffer for section (%d bytes)", (int)size); return ERROR_INVALID_ARGUMENTS; } retval = target_read_buffer(target, address, size, buffer); @@ -1254,14 +1290,14 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* } /* convert to target endianess */ - for (i = 0; i < (size/sizeof(u32)); i++) + for (i = 0; i < (size/sizeof(uint32_t)); i++) { - u32 target_data; - target_data = target_buffer_get_u32(target, &buffer[i*sizeof(u32)]); - target_buffer_set_u32(target, &buffer[i*sizeof(u32)], target_data); + uint32_t target_data; + target_data = target_buffer_get_u32(target, &buffer[i*sizeof(uint32_t)]); + target_buffer_set_u32(target, &buffer[i*sizeof(uint32_t)], target_data); } - retval = image_calculate_checksum( buffer, size, &checksum ); + retval = image_calculate_checksum(buffer, size, &checksum); free(buffer); } @@ -1270,7 +1306,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* return retval; } -int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u32* blank) +int target_blank_check_memory(struct target_s *target, uint32_t address, uint32_t size, uint32_t* blank) { int retval; if (!target_was_examined(target)) @@ -1287,9 +1323,9 @@ int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u3 return retval; } -int target_read_u32(struct target_s *target, u32 address, u32 *value) +int target_read_u32(struct target_s *target, uint32_t address, uint32_t *value) { - u8 value_buf[4]; + uint8_t value_buf[4]; if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); @@ -1301,20 +1337,23 @@ int target_read_u32(struct target_s *target, u32 address, u32 *value) if (retval == ERROR_OK) { *value = target_buffer_get_u32(target, value_buf); - LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%8.8" PRIx32 "", + address, + *value); } else { *value = 0x0; - LOG_DEBUG("address: 0x%8.8x failed", address); + LOG_DEBUG("address: 0x%8.8" PRIx32 " failed", + address); } return retval; } -int target_read_u16(struct target_s *target, u32 address, u16 *value) +int target_read_u16(struct target_s *target, uint32_t address, uint16_t *value) { - u8 value_buf[2]; + uint8_t value_buf[2]; if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); @@ -1326,18 +1365,21 @@ int target_read_u16(struct target_s *target, u32 address, u16 *value) if (retval == ERROR_OK) { *value = target_buffer_get_u16(target, value_buf); - LOG_DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%4.4x", + address, + *value); } else { *value = 0x0; - LOG_DEBUG("address: 0x%8.8x failed", address); + LOG_DEBUG("address: 0x%8.8" PRIx32 " failed", + address); } return retval; } -int target_read_u8(struct target_s *target, u32 address, u8 *value) +int target_read_u8(struct target_s *target, uint32_t address, uint8_t *value) { int retval = target_read_memory(target, address, 1, 1, value); if (!target_was_examined(target)) @@ -1348,28 +1390,33 @@ int target_read_u8(struct target_s *target, u32 address, u8 *value) if (retval == ERROR_OK) { - LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%2.2x", + address, + *value); } else { *value = 0x0; - LOG_DEBUG("address: 0x%8.8x failed", address); + LOG_DEBUG("address: 0x%8.8" PRIx32 " failed", + address); } return retval; } -int target_write_u32(struct target_s *target, u32 address, u32 value) +int target_write_u32(struct target_s *target, uint32_t address, uint32_t value) { int retval; - u8 value_buf[4]; + uint8_t value_buf[4]; if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } - LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%8.8" PRIx32 "", + address, + value); target_buffer_set_u32(target, value_buf, value); if ((retval = target_write_memory(target, address, 4, 1, value_buf)) != ERROR_OK) @@ -1380,17 +1427,19 @@ int target_write_u32(struct target_s *target, u32 address, u32 value) return retval; } -int target_write_u16(struct target_s *target, u32 address, u16 value) +int target_write_u16(struct target_s *target, uint32_t address, uint16_t value) { int retval; - u8 value_buf[2]; + uint8_t value_buf[2]; if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } - LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%8.8x", + address, + value); target_buffer_set_u16(target, value_buf, value); if ((retval = target_write_memory(target, address, 2, 1, value_buf)) != ERROR_OK) @@ -1401,7 +1450,7 @@ int target_write_u16(struct target_s *target, u32 address, u16 value) return retval; } -int target_write_u8(struct target_s *target, u32 address, u8 value) +int target_write_u8(struct target_s *target, uint32_t address, uint8_t value) { int retval; if (!target_was_examined(target)) @@ -1410,7 +1459,8 @@ int target_write_u8(struct target_s *target, u32 address, u8 value) return ERROR_FAIL; } - LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value); + LOG_DEBUG("address: 0x%8.8" PRIx32 ", value: 0x%2.2x", + address, value); if ((retval = target_write_memory(target, address, 1, 1, &value)) != ERROR_OK) { @@ -1427,8 +1477,8 @@ int target_register_user_commands(struct command_context_s *cmd_ctx) /* script procedures */ register_command(cmd_ctx, NULL, "profile", handle_profile_command, COMMAND_EXEC, "profiling samples the CPU PC"); - register_jim(cmd_ctx, "ocd_mem2array", jim_mem2array, "read memory and return as a TCL array for script processing
"); - register_jim(cmd_ctx, "ocd_array2mem", jim_array2mem, "convert a TCL array to memory locations and write the values
"); + register_jim(cmd_ctx, "ocd_mem2array", jim_mem2array, "read memory and return as a TCL array for script processing
"); + register_jim(cmd_ctx, "ocd_array2mem", jim_array2mem, "convert a TCL array to memory locations and write the values
"); register_command(cmd_ctx, NULL, "fast_load_image", handle_fast_load_image_command, COMMAND_ANY, "same args as load_image, image stored in memory - mainly for profiling purposes"); @@ -1444,7 +1494,7 @@ int target_register_user_commands(struct command_context_s *cmd_ctx) register_command(cmd_ctx, NULL, "halt", handle_halt_command, COMMAND_EXEC, "halt target"); register_command(cmd_ctx, NULL, "resume", handle_resume_command, COMMAND_EXEC, "resume target [addr]"); register_command(cmd_ctx, NULL, "step", handle_step_command, COMMAND_EXEC, "step one instruction from current PC or [addr]"); - register_command(cmd_ctx, NULL, "reset", handle_reset_command, COMMAND_EXEC, "reset target [run|halt|init] - default is run"); + register_command(cmd_ctx, NULL, "reset", handle_reset_command, COMMAND_EXEC, "reset target [run | halt | init] - default is run"); register_command(cmd_ctx, NULL, "soft_reset_halt", handle_soft_reset_halt_command, COMMAND_EXEC, "halt the target and do a soft reset"); register_command(cmd_ctx, NULL, "mdw", handle_md_command, COMMAND_EXEC, "display memory words [count]"); @@ -1465,9 +1515,9 @@ int target_register_user_commands(struct command_context_s *cmd_ctx) register_command(cmd_ctx, NULL, "verify_image", handle_verify_image_command, COMMAND_EXEC, "verify_image [offset] [type]"); register_command(cmd_ctx, NULL, "test_image", handle_test_image_command, COMMAND_EXEC, "test_image [offset] [type]"); - if((retval = target_request_register_commands(cmd_ctx)) != ERROR_OK) + if ((retval = target_request_register_commands(cmd_ctx)) != ERROR_OK) return retval; - if((retval = trace_register_commands(cmd_ctx)) != ERROR_OK) + if ((retval = trace_register_commands(cmd_ctx)) != ERROR_OK) return retval; return retval; @@ -1481,7 +1531,7 @@ static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, { target = get_target(args[0]); if (target == NULL) { - command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] ); + command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0]); goto DumpTargets; } if (!target->tap->enabled) { @@ -1505,8 +1555,7 @@ DumpTargets: char marker = ' '; if (target->tap->enabled) - state = Jim_Nvp_value2name_simple(nvp_target_state, - target->state)->name; + state = target_state_name( target ); else state = "tap-disabled"; @@ -1545,7 +1594,7 @@ static int sense_handler(void) static int prevPowerdropout = 0; int retval; - if ((retval=jtag_power_dropout(&powerDropout))!=ERROR_OK) + if ((retval = jtag_power_dropout(&powerDropout)) != ERROR_OK) return retval; int powerRestored; @@ -1564,7 +1613,7 @@ static int sense_handler(void) lastPower = current; } - if ((retval=jtag_srst_asserted(&srstAsserted))!=ERROR_OK) + if ((retval = jtag_srst_asserted(&srstAsserted)) != ERROR_OK) return retval; int srstDeasserted; @@ -1615,22 +1664,22 @@ int handle_target(void *priv) int did_something = 0; if (runSrstAsserted) { - Jim_Eval( interp, "srst_asserted"); + Jim_Eval(interp, "srst_asserted"); did_something = 1; } if (runSrstDeasserted) { - Jim_Eval( interp, "srst_deasserted"); + Jim_Eval(interp, "srst_deasserted"); did_something = 1; } if (runPowerDropout) { - Jim_Eval( interp, "power_dropout"); + Jim_Eval(interp, "power_dropout"); did_something = 1; } if (runPowerRestore) { - Jim_Eval( interp, "power_restore"); + Jim_Eval(interp, "power_restore"); did_something = 1; } @@ -1642,28 +1691,31 @@ int handle_target(void *priv) /* clear action flags */ - runSrstAsserted=0; - runSrstDeasserted=0; - runPowerRestore=0; - runPowerDropout=0; + runSrstAsserted = 0; + runSrstDeasserted = 0; + runPowerRestore = 0; + runPowerDropout = 0; recursive = 0; } - target_t *target = all_targets; - - while (target) + /* Poll targets for state changes unless that's globally disabled. + * Skip targets that are currently disabled. + */ + for (target_t *target = all_targets; + target_continuous_poll && target; + target = target->next) { + if (!target->tap->enabled) + continue; /* only poll target if we've got power and srst isn't asserted */ - if (target_continous_poll&&!powerDropout&&!srstAsserted) + if (!powerDropout && !srstAsserted) { /* polling may fail silently until the target has been examined */ - if((retval = target_poll(target)) != ERROR_OK) + if ((retval = target_poll(target)) != ERROR_OK) return retval; } - - target = target->next; } return retval; @@ -1686,13 +1738,19 @@ static int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char reg_cache_t *cache = target->reg_cache; count = 0; - while(cache) + while (cache) { int i; for (i = 0; i < cache->num_regs; i++) { value = buf_to_str(cache->reg_list[i].value, cache->reg_list[i].size, 16); - command_print(cmd_ctx, "(%i) %s (/%i): 0x%s (dirty: %i, valid: %i)", count++, cache->reg_list[i].name, cache->reg_list[i].size, value, cache->reg_list[i].dirty, cache->reg_list[i].valid); + command_print(cmd_ctx, "(%i) %s (/%i): 0x%s (dirty: %i, valid: %i)", + count++, + cache->reg_list[i].name, + (int)(cache->reg_list[i].size), + value, + cache->reg_list[i].dirty, + cache->reg_list[i].valid); free(value); } cache = cache->next; @@ -1711,7 +1769,7 @@ static int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char reg_cache_t *cache = target->reg_cache; count = 0; - while(cache) + while (cache) { int i; for (i = 0; i < cache->num_regs; i++) @@ -1755,7 +1813,7 @@ static int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char arch_type->get(reg); } value = buf_to_str(reg->value, reg->size, 16); - command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, reg->size, value); + command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value); free(value); return ERROR_OK; } @@ -1763,14 +1821,14 @@ static int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char /* set register value */ if (argc == 2) { - u8 *buf = malloc(CEIL(reg->size, 8)); + uint8_t *buf = malloc(CEIL(reg->size, 8)); str_to_buf(args[1], strlen(args[1]), buf, reg->size, 0); reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type); arch_type->set(reg, buf); value = buf_to_str(reg->value, reg->size, 16); - command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, reg->size, value); + command_print(cmd_ctx, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value); free(value); free(buf); @@ -1791,22 +1849,27 @@ static int handle_poll_command(struct command_context_s *cmd_ctx, char *cmd, cha if (argc == 0) { command_print(cmd_ctx, "background polling: %s", - target_continous_poll ? "on" : "off"); + target_continuous_poll ? "on" : "off"); + command_print(cmd_ctx, "TAP: %s (%s)", + target->tap->dotted_name, + target->tap->enabled ? "enabled" : "disabled"); + if (!target->tap->enabled) + return ERROR_OK; if ((retval = target_poll(target)) != ERROR_OK) return retval; if ((retval = target_arch_state(target)) != ERROR_OK) return retval; } - else if (argc==1) + else if (argc == 1) { if (strcmp(args[0], "on") == 0) { - target_continous_poll = 1; + target_continuous_poll = 1; } else if (strcmp(args[0], "off") == 0) { - target_continous_poll = 0; + target_continuous_poll = 0; } else { @@ -1851,12 +1914,12 @@ static int handle_wait_halt_command(struct command_context_s *cmd_ctx, char *cmd int target_wait_state(target_t *target, enum target_state state, int ms) { int retval; - long long then=0, cur; - int once=1; + long long then = 0, cur; + int once = 1; for (;;) { - if ((retval=target_poll(target))!=ERROR_OK) + if ((retval = target_poll(target)) != ERROR_OK) return retval; if (target->state == state) { @@ -1865,18 +1928,18 @@ int target_wait_state(target_t *target, enum target_state state, int ms) cur = timeval_ms(); if (once) { - once=0; + once = 0; then = timeval_ms(); LOG_DEBUG("waiting for target %s...", Jim_Nvp_value2name_simple(nvp_target_state,state)->name); } - if (cur-then>500) + if (cur-then > 500) { keep_alive(); } - if ((cur-then)>ms) + if ((cur-then) > ms) { LOG_ERROR("timed out while waiting for target %s", Jim_Nvp_value2name_simple(nvp_target_state,state)->name); @@ -1929,8 +1992,8 @@ static int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, ch if (argc == 1) { const Jim_Nvp *n; - n = Jim_Nvp_name2value_simple( nvp_reset_modes, args[0] ); - if( (n->name == NULL) || (n->value == RESET_UNKNOWN) ){ + n = Jim_Nvp_name2value_simple(nvp_reset_modes, args[0]); + if ((n->name == NULL) || (n->value == RESET_UNKNOWN)) { return ERROR_COMMAND_SYNTAX_ERROR; } reset_mode = n->value; @@ -1943,6 +2006,7 @@ static int handle_reset_command(struct command_context_s *cmd_ctx, char *cmd, ch static int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { + int current = 1; if (argc > 1) return ERROR_COMMAND_SYNTAX_ERROR; @@ -1952,15 +2016,16 @@ static int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, c /* with no args, resume from current pc, addr = 0, * with one arguments, addr = args[0], * handle breakpoints, not debugging */ - u32 addr = 0; + uint32_t addr = 0; if (argc == 1) { int retval = parse_u32(args[0], &addr); if (ERROR_OK != retval) return retval; + current = 0; } - return target_resume(target, 0, addr, 1, 0); + return target_resume(target, current, addr, 1, 0); } static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) @@ -1973,21 +2038,24 @@ static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, cha /* with no args, step from current pc, addr = 0, * with one argument addr = args[0], * handle breakpoints, debugging */ - u32 addr = 0; + uint32_t addr = 0; + int current_pc = 1; if (argc == 1) { int retval = parse_u32(args[0], &addr); if (ERROR_OK != retval) return retval; + current_pc = 0; } target_t *target = get_current_target(cmd_ctx); - return target->type->step(target, 0, addr, 1); + + return target->type->step(target, current_pc, addr, 1); } static void handle_md_output(struct command_context_s *cmd_ctx, - struct target_s *target, u32 address, unsigned size, - unsigned count, const u8 *buffer) + struct target_s *target, uint32_t address, unsigned size, + unsigned count, const uint8_t *buffer) { const unsigned line_bytecnt = 32; unsigned line_modulo = line_bytecnt / size; @@ -2011,11 +2079,12 @@ static void handle_md_output(struct command_context_s *cmd_ctx, { output_len += snprintf(output + output_len, sizeof(output) - output_len, - "0x%8.8x: ", address + (i*size)); + "0x%8.8x: ", + (unsigned)(address + (i*size))); } - u32 value=0; - const u8 *value_ptr = buffer + i * size; + uint32_t value = 0; + const uint8_t *value_ptr = buffer + i * size; switch (size) { case 4: value = target_buffer_get_u32(target, value_ptr); break; case 2: value = target_buffer_get_u16(target, value_ptr); break; @@ -2046,7 +2115,7 @@ static int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char default: return ERROR_COMMAND_SYNTAX_ERROR; } - u32 address; + uint32_t address; int retval = parse_u32(args[0], &address); if (ERROR_OK != retval) return retval; @@ -2059,7 +2128,7 @@ static int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char return retval; } - u8 *buffer = calloc(count, size); + uint8_t *buffer = calloc(count, size); target_t *target = get_current_target(cmd_ctx); retval = target_read_memory(target, @@ -2077,12 +2146,12 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char if ((argc < 2) || (argc > 3)) return ERROR_COMMAND_SYNTAX_ERROR; - u32 address; + uint32_t address; int retval = parse_u32(args[0], &address); if (ERROR_OK != retval) return retval; - u32 value; + uint32_t value; retval = parse_u32(args[1], &value); if (ERROR_OK != retval) return retval; @@ -2097,7 +2166,7 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char target_t *target = get_current_target(cmd_ctx); unsigned wordsize; - u8 value_buf[4]; + uint8_t value_buf[4]; switch (cmd[2]) { case 'w': @@ -2128,66 +2197,70 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char } -static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +static int parse_load_image_command_args(char **args, int argc, + image_t *image, uint32_t *min_address, uint32_t *max_address) { - u8 *buffer; - u32 buf_cnt; - u32 image_size; - u32 min_address=0; - u32 max_address=0xffffffff; - int i; - int retval, retvaltemp; - - image_t image; - - duration_t duration; - char *duration_text; - - target_t *target = get_current_target(cmd_ctx); - - if ((argc < 1)||(argc > 5)) - { + if (argc < 1 || argc > 5) return ERROR_COMMAND_SYNTAX_ERROR; - } - /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */ + /* a base address isn't always necessary, + * default to 0x0 (i.e. don't relocate) */ if (argc >= 2) { - u32 addr; - retval = parse_u32(args[1], &addr); + uint32_t addr; + int retval = parse_u32(args[1], &addr); if (ERROR_OK != retval) return ERROR_COMMAND_SYNTAX_ERROR; - image.base_address = addr; - image.base_address_set = 1; + image->base_address = addr; + image->base_address_set = 1; } else - { - image.base_address_set = 0; - } + image->base_address_set = 0; + image->start_address_set = 0; - image.start_address_set = 0; - - if (argc>=4) + if (argc >= 4) { - retval = parse_u32(args[3], &min_address); + int retval = parse_u32(args[3], min_address); if (ERROR_OK != retval) return ERROR_COMMAND_SYNTAX_ERROR; } - if (argc>=5) + if (argc == 5) { - retval = parse_u32(args[4], &max_address); + int retval = parse_u32(args[4], max_address); if (ERROR_OK != retval) return ERROR_COMMAND_SYNTAX_ERROR; // use size (given) to find max (required) - max_address += min_address; + *max_address += *min_address; } - if (min_address>max_address) - { + if (*min_address > *max_address) return ERROR_COMMAND_SYNTAX_ERROR; - } + return ERROR_OK; +} + +static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + uint8_t *buffer; + uint32_t buf_cnt; + uint32_t image_size; + uint32_t min_address = 0; + uint32_t max_address = 0xffffffff; + int i; + int retvaltemp; + + image_t image; + + duration_t duration; + char *duration_text; + + int retval = parse_load_image_command_args(args, argc, + &image, &min_address, &max_address); + if (ERROR_OK != retval) + return retval; + + target_t *target = get_current_target(cmd_ctx); duration_start_measure(&duration); if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK) @@ -2202,7 +2275,9 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm buffer = malloc(image.sections[i].size); if (buffer == NULL) { - command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size); + command_print(cmd_ctx, + "error allocating buffer for section (%d bytes)", + (int)(image.sections[i].size)); break; } @@ -2212,47 +2287,51 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm break; } - u32 offset=0; - u32 length=buf_cnt; + uint32_t offset = 0; + uint32_t length = buf_cnt; /* DANGER!!! beware of unsigned comparision here!!! */ - if ((image.sections[i].base_address+buf_cnt>=min_address)&& - (image.sections[i].base_address= min_address)&& + (image.sections[i].base_address < max_address)) { - if (image.sections[i].base_addressmax_address) + if (image.sections[i].base_address + buf_cnt > max_address) { - length-=(image.sections[i].base_address+buf_cnt)-max_address; + length -= (image.sections[i].base_address + buf_cnt)-max_address; } - if ((retval = target_write_buffer(target, image.sections[i].base_address+offset, length, buffer+offset)) != ERROR_OK) + if ((retval = target_write_buffer(target, image.sections[i].base_address + offset, length, buffer + offset)) != ERROR_OK) { free(buffer); break; } image_size += length; - command_print(cmd_ctx, "%u byte written at address 0x%8.8x", length, image.sections[i].base_address+offset); + command_print(cmd_ctx, "%u byte written at address 0x%8.8" PRIx32 "", + (unsigned int)length, + image.sections[i].base_address + offset); } free(buffer); } - if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) + if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { image_close(&image); return retvaltemp; } - if (retval==ERROR_OK) + if (retval == ERROR_OK) { - command_print(cmd_ctx, "downloaded %u byte in %s", image_size, duration_text); + command_print(cmd_ctx, "downloaded %u byte in %s", + (unsigned int)image_size, + duration_text); } free(duration_text); @@ -2266,7 +2345,7 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm { fileio_t fileio; - u8 buffer[560]; + uint8_t buffer[560]; int retvaltemp; duration_t duration; @@ -2280,12 +2359,12 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm return ERROR_OK; } - u32 address; + uint32_t address; int retval = parse_u32(args[1], &address); if (ERROR_OK != retval) return retval; - u32 size; + uint32_t size; retval = parse_u32(args[2], &size); if (ERROR_OK != retval) return retval; @@ -2299,8 +2378,8 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm while (size > 0) { - u32 size_written; - u32 this_run_size = (size > 560) ? 560 : size; + uint32_t size_written; + uint32_t this_run_size = (size > 560) ? 560 : size; retval = target_read_buffer(target, address, this_run_size, buffer); if (retval != ERROR_OK) @@ -2318,13 +2397,13 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm address += this_run_size; } - if((retvaltemp = fileio_close(&fileio)) != ERROR_OK) + if ((retvaltemp = fileio_close(&fileio)) != ERROR_OK) return retvaltemp; - if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) + if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) return retvaltemp; - if (retval==ERROR_OK) + if (retval == ERROR_OK) { command_print(cmd_ctx, "dumped %lld byte in %s", fileio.size, duration_text); @@ -2336,13 +2415,13 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm static int handle_verify_image_command_internal(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, int verify) { - u8 *buffer; - u32 buf_cnt; - u32 image_size; + uint8_t *buffer; + uint32_t buf_cnt; + uint32_t image_size; int i; int retval, retvaltemp; - u32 checksum = 0; - u32 mem_checksum = 0; + uint32_t checksum = 0; + uint32_t mem_checksum = 0; image_t image; @@ -2366,7 +2445,7 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct if (argc >= 2) { - u32 addr; + uint32_t addr; retval = parse_u32(args[1], &addr); if (ERROR_OK != retval) return ERROR_COMMAND_SYNTAX_ERROR; @@ -2381,19 +2460,21 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct image.start_address_set = 0; - if ((retval=image_open(&image, args[0], (argc == 3) ? args[2] : NULL)) != ERROR_OK) + if ((retval = image_open(&image, args[0], (argc == 3) ? args[2] : NULL)) != ERROR_OK) { return retval; } image_size = 0x0; - retval=ERROR_OK; + retval = ERROR_OK; for (i = 0; i < image.num_sections; i++) { buffer = malloc(image.sections[i].size); if (buffer == NULL) { - command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size); + command_print(cmd_ctx, + "error allocating buffer for section (%d bytes)", + (int)(image.sections[i].size)); break; } if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK) @@ -2405,23 +2486,23 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct if (verify) { /* calculate checksum of image */ - image_calculate_checksum( buffer, buf_cnt, &checksum ); + image_calculate_checksum(buffer, buf_cnt, &checksum); retval = target_checksum_memory(target, image.sections[i].base_address, buf_cnt, &mem_checksum); - if( retval != ERROR_OK ) + if (retval != ERROR_OK) { free(buffer); break; } - if( checksum != mem_checksum ) + if (checksum != mem_checksum) { /* failed crc checksum, fall back to a binary compare */ - u8 *data; + uint8_t *data; command_print(cmd_ctx, "checksum mismatch - attempting binary compare"); - data = (u8*)malloc(buf_cnt); + data = (uint8_t*)malloc(buf_cnt); /* Can we use 32bit word accesses? */ int size = 1; @@ -2434,18 +2515,22 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct retval = target_read_memory(target, image.sections[i].base_address, size, count, data); if (retval == ERROR_OK) { - u32 t; + uint32_t t; for (t = 0; t < buf_cnt; t++) { if (data[t] != buffer[t]) { - command_print(cmd_ctx, "Verify operation failed address 0x%08x. Was 0x%02x instead of 0x%02x\n", t + image.sections[i].base_address, data[t], buffer[t]); + command_print(cmd_ctx, + "Verify operation failed address 0x%08x. Was 0x%02x instead of 0x%02x\n", + (unsigned)(t + image.sections[i].base_address), + data[t], + buffer[t]); free(data); free(buffer); - retval=ERROR_FAIL; + retval = ERROR_FAIL; goto done; } - if ((t%16384)==0) + if ((t%16384) == 0) { keep_alive(); } @@ -2456,7 +2541,9 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct } } else { - command_print(cmd_ctx, "address 0x%08x length 0x%08x", image.sections[i].base_address, buf_cnt); + command_print(cmd_ctx, "address 0x%08" PRIx32 " length 0x%08" PRIx32 "", + image.sections[i].base_address, + buf_cnt); } free(buffer); @@ -2464,15 +2551,17 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct } done: - if((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) + if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { image_close(&image); return retvaltemp; } - if (retval==ERROR_OK) + if (retval == ERROR_OK) { - command_print(cmd_ctx, "verified %u bytes in %s", image_size, duration_text); + command_print(cmd_ctx, "verified %u bytes in %s", + (unsigned int)image_size, + duration_text); } free(duration_text); @@ -2501,15 +2590,17 @@ static int handle_bp_command_list(struct command_context_s *cmd_ctx) { char* buf = buf_to_str(breakpoint->orig_instr, breakpoint->length, 16); - command_print(cmd_ctx, "0x%8.8x, 0x%x, %i, 0x%s", - breakpoint->address, breakpoint->length, + command_print(cmd_ctx, "0x%8.8" PRIx32 ", 0x%x, %i, 0x%s", + breakpoint->address, + breakpoint->length, breakpoint->set, buf); free(buf); } else { - command_print(cmd_ctx, "0x%8.8x, 0x%x, %i", - breakpoint->address, breakpoint->length, breakpoint->set); + command_print(cmd_ctx, "0x%8.8" PRIx32 ", 0x%x, %i", + breakpoint->address, + breakpoint->length, breakpoint->set); } breakpoint = breakpoint->next; @@ -2518,12 +2609,12 @@ static int handle_bp_command_list(struct command_context_s *cmd_ctx) } static int handle_bp_command_set(struct command_context_s *cmd_ctx, - u32 addr, u32 length, int hw) + uint32_t addr, uint32_t length, int hw) { target_t *target = get_current_target(cmd_ctx); int retval = breakpoint_add(target, addr, length, hw); if (ERROR_OK == retval) - command_print(cmd_ctx, "breakpoint set at 0x%8.8x", addr); + command_print(cmd_ctx, "breakpoint set at 0x%8.8" PRIx32 "", addr); else LOG_ERROR("Failure setting breakpoint"); return retval; @@ -2541,8 +2632,15 @@ static int handle_bp_command(struct command_context_s *cmd_ctx, return ERROR_COMMAND_SYNTAX_ERROR; } - u32 addr = strtoul(args[0], NULL, 0); - u32 length = strtoul(args[1], NULL, 0); + uint32_t addr; + int retval = parse_u32(args[0], &addr); + if (ERROR_OK != retval) + return retval; + + uint32_t length; + retval = parse_u32(args[1], &length); + if (ERROR_OK != retval) + return retval; int hw = BKPT_SOFT; if (argc == 3) @@ -2558,10 +2656,16 @@ static int handle_bp_command(struct command_context_s *cmd_ctx, static int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - target_t *target = get_current_target(cmd_ctx); + if (argc != 1) + return ERROR_COMMAND_SYNTAX_ERROR; - if (argc > 0) - breakpoint_remove(target, strtoul(args[0], NULL, 0)); + uint32_t addr; + int retval = parse_u32(args[0], &addr); + if (ERROR_OK != retval) + return retval; + + target_t *target = get_current_target(cmd_ctx); + breakpoint_remove(target, addr); return ERROR_OK; } @@ -2569,7 +2673,6 @@ static int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char static int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { target_t *target = get_current_target(cmd_ctx); - int retval; if (argc == 0) { @@ -2577,55 +2680,74 @@ static int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char while (watchpoint) { - command_print(cmd_ctx, "address: 0x%8.8x, len: 0x%8.8x, r/w/a: %i, value: 0x%8.8x, mask: 0x%8.8x", watchpoint->address, watchpoint->length, watchpoint->rw, watchpoint->value, watchpoint->mask); + command_print(cmd_ctx, + "address: 0x%8.8" PRIx32 ", len: 0x%8.8x, r/w/a: %i, value: 0x%8.8" PRIx32 ", mask: 0x%8.8" PRIx32 "", + watchpoint->address, + watchpoint->length, + (int)(watchpoint->rw), + watchpoint->value, + watchpoint->mask); watchpoint = watchpoint->next; } + return ERROR_OK; } - else if (argc >= 2) - { - enum watchpoint_rw type = WPT_ACCESS; - u32 data_value = 0x0; - u32 data_mask = 0xffffffff; - if (argc >= 3) - { - switch(args[2][0]) - { - case 'r': - type = WPT_READ; - break; - case 'w': - type = WPT_WRITE; - break; - case 'a': - type = WPT_ACCESS; - break; - default: - command_print(cmd_ctx, "usage: wp
[r/w/a] [value] [mask]"); - return ERROR_OK; - } - } - if (argc >= 4) - { - data_value = strtoul(args[3], NULL, 0); - } - if (argc >= 5) - { - data_mask = strtoul(args[4], NULL, 0); - } + enum watchpoint_rw type = WPT_ACCESS; + uint32_t addr = 0; + uint32_t length = 0; + uint32_t data_value = 0x0; + uint32_t data_mask = 0xffffffff; + int retval; - if ((retval = watchpoint_add(target, strtoul(args[0], NULL, 0), - strtoul(args[1], NULL, 0), type, data_value, data_mask)) != ERROR_OK) + switch (argc) + { + case 5: + retval = parse_u32(args[4], &data_mask); + if (ERROR_OK != retval) + return retval; + // fall through + case 4: + retval = parse_u32(args[3], &data_value); + if (ERROR_OK != retval) + return retval; + // fall through + case 3: + switch (args[2][0]) { - LOG_ERROR("Failure setting breakpoints"); + case 'r': + type = WPT_READ; + break; + case 'w': + type = WPT_WRITE; + break; + case 'a': + type = WPT_ACCESS; + break; + default: + LOG_ERROR("invalid watchpoint mode ('%c')", args[2][0]); + return ERROR_COMMAND_SYNTAX_ERROR; } - } - else - { + // fall through + case 2: + retval = parse_u32(args[1], &length); + if (ERROR_OK != retval) + return retval; + retval = parse_u32(args[0], &addr); + if (ERROR_OK != retval) + return retval; + break; + + default: command_print(cmd_ctx, "usage: wp
[r/w/a] [value] [mask]"); + return ERROR_COMMAND_SYNTAX_ERROR; } - return ERROR_OK; + retval = watchpoint_add(target, addr, length, type, + data_value, data_mask); + if (ERROR_OK != retval) + LOG_ERROR("Failure setting watchpoints"); + + return retval; } static int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) @@ -2633,8 +2755,13 @@ static int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char if (argc != 1) return ERROR_COMMAND_SYNTAX_ERROR; + uint32_t addr; + int retval = parse_u32(args[0], &addr); + if (ERROR_OK != retval) + return retval; + target_t *target = get_current_target(cmd_ctx); - watchpoint_remove(target, strtoul(args[0], NULL, 0)); + watchpoint_remove(target, addr); return ERROR_OK; } @@ -2652,13 +2779,16 @@ static int handle_virt2phys_command(command_context_t *cmd_ctx, if (argc != 1) return ERROR_COMMAND_SYNTAX_ERROR; - target_t *target = get_current_target(cmd_ctx); - u32 va = strtoul(args[0], NULL, 0); - u32 pa; + uint32_t va; + int retval = parse_u32(args[0], &va); + if (ERROR_OK != retval) + return retval; + uint32_t pa; - int retval = target->type->virt2phys(target, va, &pa); + target_t *target = get_current_target(cmd_ctx); + retval = target->type->virt2phys(target, va, &pa); if (retval == ERROR_OK) - command_print(cmd_ctx, "Physical address 0x%08x", pa); + command_print(cmd_ctx, "Physical address 0x%08" PRIx32 "", pa); return retval; } @@ -2673,9 +2803,9 @@ static void writeData(FILE *f, const void *data, size_t len) static void writeLong(FILE *f, int l) { int i; - for (i=0; i<4; i++) + for (i = 0; i < 4; i++) { - char c=(l>>(i*8))&0xff; + char c = (l >> (i*8))&0xff; writeData(f, &c, 1); } @@ -2687,11 +2817,11 @@ static void writeString(FILE *f, char *s) } /* Dump a gmon.out histogram file. */ -static void writeGmon(u32 *samples, u32 sampleNum, char *filename) +static void writeGmon(uint32_t *samples, uint32_t sampleNum, char *filename) { - u32 i; - FILE *f=fopen(filename, "w"); - if (f==NULL) + uint32_t i; + FILE *f = fopen(filename, "w"); + if (f == NULL) return; writeString(f, "gmon"); writeLong(f, 0x00000001); /* Version */ @@ -2699,46 +2829,46 @@ static void writeGmon(u32 *samples, u32 sampleNum, char *filename) writeLong(f, 0); /* padding */ writeLong(f, 0); /* padding */ - u8 zero = 0; /* GMON_TAG_TIME_HIST */ + uint8_t zero = 0; /* GMON_TAG_TIME_HIST */ writeData(f, &zero, 1); /* figure out bucket size */ - u32 min=samples[0]; - u32 max=samples[0]; - for (i=0; isamples[i]) + if (min > samples[i]) { - min=samples[i]; + min = samples[i]; } - if (max maxBuckets) { - length=maxBuckets; + length = maxBuckets; } - int *buckets=malloc(sizeof(int)*length); - if (buckets==NULL) + int *buckets = malloc(sizeof(int)*length); + if (buckets == NULL) { fclose(f); return; } memset(buckets, 0, sizeof(int)*length); - for (i=0; i65535) + val = buckets[i]; + if (val > 65535) { - val=65535; + val = 65535; } data[i*2]=val&0xff; - data[i*2+1]=(val>>8)&0xff; + data[i*2 + 1]=(val >> 8)&0xff; } free(buckets); writeData(f, data, length * 2); @@ -2786,26 +2916,25 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, struct timeval timeout, now; gettimeofday(&timeout, NULL); - if (argc!=2) + if (argc != 2) { return ERROR_COMMAND_SYNTAX_ERROR; } - char *end; - timeval_add_time(&timeout, strtoul(args[0], &end, 0), 0); - if (*end) - { - return ERROR_OK; - } + unsigned offset; + int retval = parse_uint(args[0], &offset); + if (ERROR_OK != retval) + return retval; + + timeval_add_time(&timeout, offset, 0); command_print(cmd_ctx, "Starting profiling. Halting and resuming the target as often as we can..."); - static const int maxSample=10000; - u32 *samples=malloc(sizeof(u32)*maxSample); - if (samples==NULL) + static const int maxSample = 10000; + uint32_t *samples = malloc(sizeof(uint32_t)*maxSample); + if (samples == NULL) return ERROR_OK; - int numSamples=0; - int retval=ERROR_OK; + int numSamples = 0; /* hopefully it is safe to cache! We want to stop/restart as quickly as possible. */ reg_t *reg = register_get_by_name(target->reg_cache, "pc", 1); @@ -2814,7 +2943,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, target_poll(target); if (target->state == TARGET_HALTED) { - u32 t=*((u32 *)reg->value); + uint32_t t=*((uint32_t *)reg->value); samples[numSamples++]=t; retval = target_resume(target, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */ target_poll(target); @@ -2822,7 +2951,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, } else if (target->state == TARGET_RUNNING) { /* We want to quickly sample the PC. */ - if((retval = target_halt(target)) != ERROR_OK) + if ((retval = target_halt(target)) != ERROR_OK) { free(samples); return retval; @@ -2830,19 +2959,19 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, } else { command_print(cmd_ctx, "Target not halted or running"); - retval=ERROR_OK; + retval = ERROR_OK; break; } - if (retval!=ERROR_OK) + if (retval != ERROR_OK) { break; } gettimeofday(&now, NULL); - if ((numSamples>=maxSample) || ((now.tv_sec >= timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec))) + if ((numSamples >= maxSample) || ((now.tv_sec >= timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec))) { command_print(cmd_ctx, "Profiling completed. %d samples.", numSamples); - if((retval = target_poll(target)) != ERROR_OK) + if ((retval = target_poll(target)) != ERROR_OK) { free(samples); return retval; @@ -2851,7 +2980,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, { target_resume(target, 1, 0, 0, 0); /* current pc, addr = 0, do not handle breakpoints, not debugging */ } - if((retval = target_poll(target)) != ERROR_OK) + if ((retval = target_poll(target)) != ERROR_OK) { free(samples); return retval; @@ -2866,7 +2995,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd, return ERROR_OK; } -static int new_int_array_element(Jim_Interp * interp, const char *varname, int idx, u32 val) +static int new_int_array_element(Jim_Interp * interp, const char *varname, int idx, uint32_t val) { char *namebuf; Jim_Obj *nameObjPtr, *valObjPtr; @@ -2912,21 +3041,21 @@ static int jim_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return JIM_ERR; } - return target_mem2array(interp, target, argc-1, argv+1); + return target_mem2array(interp, target, argc-1, argv + 1); } static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv) { long l; - u32 width; + uint32_t width; int len; - u32 addr; - u32 count; - u32 v; + uint32_t addr; + uint32_t count; + uint32_t v; const char *varname; - u8 buffer[4096]; + uint8_t buffer[4096]; int n, e, retval; - u32 i; + uint32_t i; /* argv[1] = name of array to receive the data * argv[2] = desired width @@ -2968,7 +3097,7 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_ break; default: Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - Jim_AppendStrings( interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL ); + Jim_AppendStrings(interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL); return JIM_ERR; } if (len == 0) { @@ -2995,7 +3124,9 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_ } else { char buf[100]; Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - sprintf(buf, "mem2array address: 0x%08x is not aligned for %d byte reads", addr, width); + sprintf(buf, "mem2array address: 0x%08" PRIx32 " is not aligned for %" PRId32 " byte reads", + addr, + width); Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL); return JIM_ERR; } @@ -3014,10 +3145,13 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_ count = (sizeof(buffer)/width); } - retval = target_read_memory( target, addr, width, count, buffer ); + retval = target_read_memory(target, addr, width, count, buffer); if (retval != ERROR_OK) { /* BOO !*/ - LOG_ERROR("mem2array: Read @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); + LOG_ERROR("mem2array: Read @ 0x%08x, w=%d, cnt=%d, failed", + (unsigned int)addr, + (int)width, + (int)count); Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: cannot read memory", NULL); e = JIM_ERR; @@ -3047,7 +3181,7 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_ return JIM_OK; } -static int get_int_array_element(Jim_Interp * interp, const char *varname, int idx, u32 *val) +static int get_int_array_element(Jim_Interp * interp, const char *varname, int idx, uint32_t *val) { char *namebuf; Jim_Obj *nameObjPtr, *valObjPtr; @@ -3084,31 +3218,31 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv) target_t *target; context = Jim_GetAssocData(interp, "context"); - if (context == NULL){ + if (context == NULL) { LOG_ERROR("array2mem: no command context"); return JIM_ERR; } target = get_current_target(context); - if (target == NULL){ + if (target == NULL) { LOG_ERROR("array2mem: no current target"); return JIM_ERR; } - return target_array2mem( interp,target, argc-1, argv+1 ); + return target_array2mem(interp,target, argc-1, argv + 1); } static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv) { long l; - u32 width; + uint32_t width; int len; - u32 addr; - u32 count; - u32 v; + uint32_t addr; + uint32_t count; + uint32_t v; const char *varname; - u8 buffer[4096]; + uint8_t buffer[4096]; int n, e, retval; - u32 i; + uint32_t i; /* argv[1] = name of array to get the data * argv[2] = desired width @@ -3150,7 +3284,7 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_ break; default: Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - Jim_AppendStrings( interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL ); + Jim_AppendStrings(interp, Jim_GetResult(interp), "Invalid width param, must be 8/16/32", NULL); return JIM_ERR; } if (len == 0) { @@ -3177,7 +3311,9 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_ } else { char buf[100]; Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - sprintf(buf, "array2mem address: 0x%08x is not aligned for %d byte reads", addr, width); + sprintf(buf, "array2mem address: 0x%08x is not aligned for %d byte reads", + (unsigned int)addr, + (int)width); Jim_AppendStrings(interp, Jim_GetResult(interp), buf , NULL); return JIM_ERR; } @@ -3216,7 +3352,10 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_ retval = target_write_memory(target, addr, width, count, buffer); if (retval != ERROR_OK) { /* BOO !*/ - LOG_ERROR("array2mem: Write @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); + LOG_ERROR("array2mem: Write @ 0x%08x, w=%d, cnt=%d, failed", + (unsigned int)addr, + (int)width, + (int)count); Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); Jim_AppendStrings(interp, Jim_GetResult(interp), "array2mem: cannot read memory", NULL); e = JIM_ERR; @@ -3229,22 +3368,22 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_ return JIM_OK; } -void target_all_handle_event( enum target_event e ) +void target_all_handle_event(enum target_event e) { target_t *target; - LOG_DEBUG( "**all*targets: event: %d, %s", - e, - Jim_Nvp_value2name_simple( nvp_target_event, e )->name ); + LOG_DEBUG("**all*targets: event: %d, %s", + (int)e, + Jim_Nvp_value2name_simple(nvp_target_event, e)->name); target = all_targets; - while (target){ - target_handle_event( target, e ); + while (target) { + target_handle_event(target, e); target = target->next; } } -void target_handle_event( target_t *target, enum target_event e ) +void target_handle_event(target_t *target, enum target_event e) { target_event_action_t *teap; int done; @@ -3252,27 +3391,27 @@ void target_handle_event( target_t *target, enum target_event e ) teap = target->event_action; done = 0; - while( teap ){ - if( teap->event == e ){ + while (teap) { + if (teap->event == e) { done = 1; - LOG_DEBUG( "target: (%d) %s (%s) event: %d (%s) action: %s\n", + LOG_DEBUG("target: (%d) %s (%s) event: %d (%s) action: %s", target->target_number, target->cmd_name, target_get_name(target), e, - Jim_Nvp_value2name_simple( nvp_target_event, e )->name, - Jim_GetString( teap->body, NULL ) ); - if (Jim_EvalObj( interp, teap->body )!=JIM_OK) + Jim_Nvp_value2name_simple(nvp_target_event, e)->name, + Jim_GetString(teap->body, NULL)); + if (Jim_EvalObj(interp, teap->body) != JIM_OK) { Jim_PrintErrorMessage(interp); } } teap = teap->next; } - if( !done ){ - LOG_DEBUG( "event: %d %s - no action", + if (!done) { + LOG_DEBUG("event: %d %s - no action", e, - Jim_Nvp_value2name_simple( nvp_target_event, e )->name ); + Jim_Nvp_value2name_simple(nvp_target_event, e)->name); } } @@ -3302,7 +3441,7 @@ static Jim_Nvp nvp_config_opts[] = { { .name = NULL, .value = -1 } }; -static int target_configure( Jim_GetOptInfo *goi, target_t *target ) +static int target_configure(Jim_GetOptInfo *goi, target_t *target) { Jim_Nvp *n; Jim_Obj *o; @@ -3311,64 +3450,64 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) int e; /* parse config or cget options ... */ - while( goi->argc > 0 ){ - Jim_SetEmptyResult( goi->interp ); - /* Jim_GetOpt_Debug( goi ); */ + while (goi->argc > 0) { + Jim_SetEmptyResult(goi->interp); + /* Jim_GetOpt_Debug(goi); */ - if( target->type->target_jim_configure ){ + if (target->type->target_jim_configure) { /* target defines a configure function */ /* target gets first dibs on parameters */ - e = (*(target->type->target_jim_configure))( target, goi ); - if( e == JIM_OK ){ + e = (*(target->type->target_jim_configure))(target, goi); + if (e == JIM_OK) { /* more? */ continue; } - if( e == JIM_ERR ){ + if (e == JIM_ERR) { /* An error */ return e; } /* otherwise we 'continue' below */ } - e = Jim_GetOpt_Nvp( goi, nvp_config_opts, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( goi, nvp_config_opts, 0 ); + e = Jim_GetOpt_Nvp(goi, nvp_config_opts, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(goi, nvp_config_opts, 0); return e; } - switch( n->value ){ + switch (n->value) { case TCFG_TYPE: /* not setable */ - if( goi->isconfigure ){ - Jim_SetResult_sprintf( goi->interp, "not setable: %s", n->name ); + if (goi->isconfigure) { + Jim_SetResult_sprintf(goi->interp, "not setable: %s", n->name); return JIM_ERR; } else { no_params: - if( goi->argc != 0 ){ - Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "NO PARAMS"); + if (goi->argc != 0) { + Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "NO PARAMS"); return JIM_ERR; } } - Jim_SetResultString( goi->interp, target_get_name(target), -1 ); + Jim_SetResultString(goi->interp, target_get_name(target), -1); /* loop for more */ break; case TCFG_EVENT: - if( goi->argc == 0 ){ - Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ..."); + if (goi->argc == 0) { + Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ..."); return JIM_ERR; } - e = Jim_GetOpt_Nvp( goi, nvp_target_event, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( goi, nvp_target_event, 1 ); + e = Jim_GetOpt_Nvp(goi, nvp_target_event, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(goi, nvp_target_event, 1); return e; } - if( goi->isconfigure ){ - if( goi->argc != 1 ){ - Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?"); + if (goi->isconfigure) { + if (goi->argc != 1) { + Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?"); return JIM_ERR; } } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?"); return JIM_ERR; } @@ -3379,24 +3518,24 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) teap = target->event_action; /* replace existing? */ - while( teap ){ - if( teap->event == (enum target_event)n->value ){ + while (teap) { + if (teap->event == (enum target_event)n->value) { break; } teap = teap->next; } - if( goi->isconfigure ){ - if( teap == NULL ){ + if (goi->isconfigure) { + if (teap == NULL) { /* create new */ - teap = calloc( 1, sizeof(*teap) ); + teap = calloc(1, sizeof(*teap)); } teap->event = n->value; - Jim_GetOpt_Obj( goi, &o ); - if( teap->body ){ - Jim_DecrRefCount( interp, teap->body ); + Jim_GetOpt_Obj(goi, &o); + if (teap->body) { + Jim_DecrRefCount(interp, teap->body); } - teap->body = Jim_DuplicateObj( goi->interp, o ); + teap->body = Jim_DuplicateObj(goi->interp, o); /* * FIXME: * Tcl/TK - "tk events" have a nice feature. @@ -3407,7 +3546,7 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) * The idea is: %N - target number * The idea is: %E - event name. */ - Jim_IncrRefCount( teap->body ); + Jim_IncrRefCount(teap->body); /* add to head of event list */ teap->next = target->event_action; @@ -3415,10 +3554,10 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) Jim_SetEmptyResult(goi->interp); } else { /* get */ - if( teap == NULL ){ - Jim_SetEmptyResult( goi->interp ); + if (teap == NULL) { + Jim_SetEmptyResult(goi->interp); } else { - Jim_SetResult( goi->interp, Jim_DuplicateObj( goi->interp, teap->body ) ); + Jim_SetResult(goi->interp, Jim_DuplicateObj(goi->interp, teap->body)); } } } @@ -3426,67 +3565,67 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) break; case TCFG_WORK_AREA_VIRT: - if( goi->isconfigure ){ + if (goi->isconfigure) { target_free_all_working_areas(target); - e = Jim_GetOpt_Wide( goi, &w ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(goi, &w); + if (e != JIM_OK) { return e; } target->working_area_virt = w; } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_virt ) ); + Jim_SetResult(interp, Jim_NewIntObj(goi->interp, target->working_area_virt)); /* loop for more */ break; case TCFG_WORK_AREA_PHYS: - if( goi->isconfigure ){ + if (goi->isconfigure) { target_free_all_working_areas(target); - e = Jim_GetOpt_Wide( goi, &w ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(goi, &w); + if (e != JIM_OK) { return e; } target->working_area_phys = w; } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_phys ) ); + Jim_SetResult(interp, Jim_NewIntObj(goi->interp, target->working_area_phys)); /* loop for more */ break; case TCFG_WORK_AREA_SIZE: - if( goi->isconfigure ){ + if (goi->isconfigure) { target_free_all_working_areas(target); - e = Jim_GetOpt_Wide( goi, &w ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(goi, &w); + if (e != JIM_OK) { return e; } target->working_area_size = w; } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_size ) ); + Jim_SetResult(interp, Jim_NewIntObj(goi->interp, target->working_area_size)); /* loop for more */ break; case TCFG_WORK_AREA_BACKUP: - if( goi->isconfigure ){ + if (goi->isconfigure) { target_free_all_working_areas(target); - e = Jim_GetOpt_Wide( goi, &w ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(goi, &w); + if (e != JIM_OK) { return e; } /* make this exactly 1 or 0 */ target->backup_working_area = (!!w); } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } @@ -3495,73 +3634,73 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) break; case TCFG_ENDIAN: - if( goi->isconfigure ){ - e = Jim_GetOpt_Nvp( goi, nvp_target_endian, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( goi, nvp_target_endian, 1 ); + if (goi->isconfigure) { + e = Jim_GetOpt_Nvp(goi, nvp_target_endian, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(goi, nvp_target_endian, 1); return e; } target->endianness = n->value; } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - n = Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness ); - if( n->name == NULL ){ + n = Jim_Nvp_value2name_simple(nvp_target_endian, target->endianness); + if (n->name == NULL) { target->endianness = TARGET_LITTLE_ENDIAN; - n = Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness ); + n = Jim_Nvp_value2name_simple(nvp_target_endian, target->endianness); } - Jim_SetResultString( goi->interp, n->name, -1 ); + Jim_SetResultString(goi->interp, n->name, -1); /* loop for more */ break; case TCFG_VARIANT: - if( goi->isconfigure ){ - if( goi->argc < 1 ){ - Jim_SetResult_sprintf( goi->interp, + if (goi->isconfigure) { + if (goi->argc < 1) { + Jim_SetResult_sprintf(goi->interp, "%s ?STRING?", - n->name ); + n->name); return JIM_ERR; } - if( target->variant ){ + if (target->variant) { free((void *)(target->variant)); } - e = Jim_GetOpt_String( goi, &cp, NULL ); + e = Jim_GetOpt_String(goi, &cp, NULL); target->variant = strdup(cp); } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - Jim_SetResultString( goi->interp, target->variant,-1 ); + Jim_SetResultString(goi->interp, target->variant,-1); /* loop for more */ break; case TCFG_CHAIN_POSITION: - if( goi->isconfigure ){ + if (goi->isconfigure) { Jim_Obj *o; jtag_tap_t *tap; target_free_all_working_areas(target); - e = Jim_GetOpt_Obj( goi, &o ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Obj(goi, &o); + if (e != JIM_OK) { return e; } - tap = jtag_tap_by_jim_obj( goi->interp, o ); - if( tap == NULL ){ + tap = jtag_tap_by_jim_obj(goi->interp, o); + if (tap == NULL) { return JIM_ERR; } /* make this exactly 1 or 0 */ target->tap = tap; } else { - if( goi->argc != 0 ){ + if (goi->argc != 0) { goto no_params; } } - Jim_SetResultString( interp, target->tap->dotted_name, -1 ); + Jim_SetResultString(interp, target->tap->dotted_name, -1); /* loop for more e*/ break; } - } /* while( goi->argc ) */ + } /* while (goi->argc) */ /* done - we return */ @@ -3569,12 +3708,12 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) } /** this is the 'tcl' handler for the target specific command */ -static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) +static int tcl_target_func(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { Jim_GetOptInfo goi; jim_wide a,b,c; int x,y,z; - u8 target_buf[32]; + uint8_t target_buf[32]; Jim_Nvp *n; target_t *target; struct command_context_s *cmd_ctx; @@ -3623,36 +3762,36 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) }; /* go past the "command" */ - Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 ); + Jim_GetOpt_Setup(&goi, interp, argc-1, argv + 1); - target = Jim_CmdPrivData( goi.interp ); + target = Jim_CmdPrivData(goi.interp); cmd_ctx = Jim_GetAssocData(goi.interp, "context"); /* commands here are in an NVP table */ - e = Jim_GetOpt_Nvp( &goi, target_options, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( &goi, target_options, 0 ); + e = Jim_GetOpt_Nvp(&goi, target_options, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(&goi, target_options, 0); return e; } /* Assume blank result */ - Jim_SetEmptyResult( goi.interp ); + Jim_SetEmptyResult(goi.interp); - switch( n->value ){ + switch (n->value) { case TS_CMD_CONFIGURE: - if( goi.argc < 2 ){ - Jim_WrongNumArgs( goi.interp, goi.argc, goi.argv, "missing: -option VALUE ..."); + if (goi.argc < 2) { + Jim_WrongNumArgs(goi.interp, goi.argc, goi.argv, "missing: -option VALUE ..."); return JIM_ERR; } goi.isconfigure = 1; - return target_configure( &goi, target ); + return target_configure(&goi, target); case TS_CMD_CGET: // some things take params - if( goi.argc < 1 ){ - Jim_WrongNumArgs( goi.interp, 0, goi.argv, "missing: ?-option?"); + if (goi.argc < 1) { + Jim_WrongNumArgs(goi.interp, 0, goi.argv, "missing: ?-option?"); return JIM_ERR; } goi.isconfigure = 0; - return target_configure( &goi, target ); + return target_configure(&goi, target); break; case TS_CMD_MWW: case TS_CMD_MWH: @@ -3663,50 +3802,50 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) * argv[3] = optional count. */ - if( (goi.argc == 3) || (goi.argc == 4) ){ + if ((goi.argc == 2) || (goi.argc == 3)) { /* all is well */ } else { mwx_error: - Jim_SetResult_sprintf( goi.interp, "expected: %s ADDR DATA [COUNT]", n->name ); + Jim_SetResult_sprintf(goi.interp, "expected: %s ADDR DATA [COUNT]", n->name); return JIM_ERR; } - e = Jim_GetOpt_Wide( &goi, &a ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &a); + if (e != JIM_OK) { goto mwx_error; } - e = Jim_GetOpt_Wide( &goi, &b ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &b); + if (e != JIM_OK) { goto mwx_error; } - if( goi.argc ){ - e = Jim_GetOpt_Wide( &goi, &c ); - if( e != JIM_OK ){ + if (goi.argc == 3) { + e = Jim_GetOpt_Wide(&goi, &c); + if (e != JIM_OK) { goto mwx_error; } } else { c = 1; } - switch( n->value ){ + switch (n->value) { case TS_CMD_MWW: - target_buffer_set_u32( target, target_buf, b ); + target_buffer_set_u32(target, target_buf, b); b = 4; break; case TS_CMD_MWH: - target_buffer_set_u16( target, target_buf, b ); + target_buffer_set_u16(target, target_buf, b); b = 2; break; case TS_CMD_MWB: - target_buffer_set_u8( target, target_buf, b ); + target_buffer_set_u8(target, target_buf, b); b = 1; break; } - for( x = 0 ; x < c ; x++ ){ - e = target_write_memory( target, a, b, 1, target_buf ); - if( e != ERROR_OK ){ - Jim_SetResult_sprintf( interp, "Error writing @ 0x%08x: %d\n", (int)(a), e ); + for (x = 0 ; x < c ; x++) { + e = target_write_memory(target, a, b, 1, target_buf); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(interp, "Error writing @ 0x%08x: %d\n", (int)(a), e); return JIM_ERR; } /* b = width */ @@ -3723,24 +3862,24 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) * argv[1] = address * argv[2] = optional count */ - if( (goi.argc == 2) || (goi.argc == 3) ){ - Jim_SetResult_sprintf( goi.interp, "expected: %s ADDR [COUNT]", n->name ); + if ((goi.argc == 2) || (goi.argc == 3)) { + Jim_SetResult_sprintf(goi.interp, "expected: %s ADDR [COUNT]", n->name); return JIM_ERR; } - e = Jim_GetOpt_Wide( &goi, &a ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &a); + if (e != JIM_OK) { return JIM_ERR; } - if( goi.argc ){ - e = Jim_GetOpt_Wide( &goi, &c ); - if( e != JIM_OK ){ + if (goi.argc) { + e = Jim_GetOpt_Wide(&goi, &c); + if (e != JIM_OK) { return JIM_ERR; } } else { c = 1; } b = 1; /* shut up gcc */ - switch( n->value ){ + switch (n->value) { case TS_CMD_MDW: b = 4; break; @@ -3755,52 +3894,52 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) /* convert to "bytes" */ c = c * b; /* count is now in 'BYTES' */ - while( c > 0 ){ + while (c > 0) { y = c; - if( y > 16 ){ + if (y > 16) { y = 16; } - e = target_read_memory( target, a, b, y / b, target_buf ); - if( e != ERROR_OK ){ - Jim_SetResult_sprintf( interp, "error reading target @ 0x%08lx", (int)(a) ); + e = target_read_memory(target, a, b, y / b, target_buf); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(interp, "error reading target @ 0x%08lx", (int)(a)); return JIM_ERR; } - Jim_fprintf( interp, interp->cookie_stdout, "0x%08x ", (int)(a) ); - switch( b ){ + Jim_fprintf(interp, interp->cookie_stdout, "0x%08x ", (int)(a)); + switch (b) { case 4: - for( x = 0 ; (x < 16) && (x < y) ; x += 4 ){ - z = target_buffer_get_u32( target, &(target_buf[ x * 4 ]) ); - Jim_fprintf( interp, interp->cookie_stdout, "%08x ", (int)(z) ); + for (x = 0 ; (x < 16) && (x < y) ; x += 4) { + z = target_buffer_get_u32(target, &(target_buf[ x * 4 ])); + Jim_fprintf(interp, interp->cookie_stdout, "%08x ", (int)(z)); } - for( ; (x < 16) ; x += 4 ){ - Jim_fprintf( interp, interp->cookie_stdout, " " ); + for (; (x < 16) ; x += 4) { + Jim_fprintf(interp, interp->cookie_stdout, " "); } break; case 2: - for( x = 0 ; (x < 16) && (x < y) ; x += 2 ){ - z = target_buffer_get_u16( target, &(target_buf[ x * 2 ]) ); - Jim_fprintf( interp, interp->cookie_stdout, "%04x ", (int)(z) ); + for (x = 0 ; (x < 16) && (x < y) ; x += 2) { + z = target_buffer_get_u16(target, &(target_buf[ x * 2 ])); + Jim_fprintf(interp, interp->cookie_stdout, "%04x ", (int)(z)); } - for( ; (x < 16) ; x += 2 ){ - Jim_fprintf( interp, interp->cookie_stdout, " " ); + for (; (x < 16) ; x += 2) { + Jim_fprintf(interp, interp->cookie_stdout, " "); } break; case 1: default: - for( x = 0 ; (x < 16) && (x < y) ; x += 1 ){ - z = target_buffer_get_u8( target, &(target_buf[ x * 4 ]) ); - Jim_fprintf( interp, interp->cookie_stdout, "%02x ", (int)(z) ); + for (x = 0 ; (x < 16) && (x < y) ; x += 1) { + z = target_buffer_get_u8(target, &(target_buf[ x * 4 ])); + Jim_fprintf(interp, interp->cookie_stdout, "%02x ", (int)(z)); } - for( ; (x < 16) ; x += 1 ){ - Jim_fprintf( interp, interp->cookie_stdout, " " ); + for (; (x < 16) ; x += 1) { + Jim_fprintf(interp, interp->cookie_stdout, " "); } break; } /* ascii-ify the bytes */ - for( x = 0 ; x < y ; x++ ){ - if( (target_buf[x] >= 0x20) && - (target_buf[x] <= 0x7e) ){ + for (x = 0 ; x < y ; x++) { + if ((target_buf[x] >= 0x20) && + (target_buf[x] <= 0x7e)) { /* good */ } else { /* smack it */ @@ -3808,70 +3947,70 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) } } /* space pad */ - while( x < 16 ){ + while (x < 16) { target_buf[x] = ' '; x++; } /* terminate */ target_buf[16] = 0; /* print - with a newline */ - Jim_fprintf( interp, interp->cookie_stdout, "%s\n", target_buf ); + Jim_fprintf(interp, interp->cookie_stdout, "%s\n", target_buf); /* NEXT... */ c -= 16; a += 16; } return JIM_OK; case TS_CMD_MEM2ARRAY: - return target_mem2array( goi.interp, target, goi.argc, goi.argv ); + return target_mem2array(goi.interp, target, goi.argc, goi.argv); break; case TS_CMD_ARRAY2MEM: - return target_array2mem( goi.interp, target, goi.argc, goi.argv ); + return target_array2mem(goi.interp, target, goi.argc, goi.argv); break; case TS_CMD_EXAMINE: - if( goi.argc ){ - Jim_WrongNumArgs( goi.interp, 2, argv, "[no parameters]"); + if (goi.argc) { + Jim_WrongNumArgs(goi.interp, 2, argv, "[no parameters]"); return JIM_ERR; } if (!target->tap->enabled) goto err_tap_disabled; - e = target->type->examine( target ); - if( e != ERROR_OK ){ - Jim_SetResult_sprintf( interp, "examine-fails: %d", e ); + e = target->type->examine(target); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(interp, "examine-fails: %d", e); return JIM_ERR; } return JIM_OK; case TS_CMD_POLL: - if( goi.argc ){ - Jim_WrongNumArgs( goi.interp, 2, argv, "[no parameters]"); + if (goi.argc) { + Jim_WrongNumArgs(goi.interp, 2, argv, "[no parameters]"); return JIM_ERR; } if (!target->tap->enabled) goto err_tap_disabled; - if( !(target_was_examined(target)) ){ + if (!(target_was_examined(target))) { e = ERROR_TARGET_NOT_EXAMINED; } else { - e = target->type->poll( target ); + e = target->type->poll(target); } - if( e != ERROR_OK ){ - Jim_SetResult_sprintf( interp, "poll-fails: %d", e ); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(interp, "poll-fails: %d", e); return JIM_ERR; } else { return JIM_OK; } break; case TS_CMD_RESET: - if( goi.argc != 2 ){ - Jim_WrongNumArgs( interp, 2, argv, "t|f|assert|deassert BOOL"); + if (goi.argc != 2) { + Jim_WrongNumArgs(interp, 2, argv, "t | f|assert | deassert BOOL"); return JIM_ERR; } - e = Jim_GetOpt_Nvp( &goi, nvp_assert, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( &goi, nvp_assert, 1 ); + e = Jim_GetOpt_Nvp(&goi, nvp_assert, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(&goi, nvp_assert, 1); return e; } /* the halt or not param */ - e = Jim_GetOpt_Wide( &goi, &a); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &a); + if (e != JIM_OK) { return e; } if (!target->tap->enabled) @@ -3882,45 +4021,45 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) target_free_all_working_areas_restore(target, 0); /* do the assert */ - if( n->value == NVP_ASSERT ){ - target->type->assert_reset( target ); + if (n->value == NVP_ASSERT) { + target->type->assert_reset(target); } else { - target->type->deassert_reset( target ); + target->type->deassert_reset(target); } return JIM_OK; case TS_CMD_HALT: - if( goi.argc ){ - Jim_WrongNumArgs( goi.interp, 0, argv, "halt [no parameters]"); + if (goi.argc) { + Jim_WrongNumArgs(goi.interp, 0, argv, "halt [no parameters]"); return JIM_ERR; } if (!target->tap->enabled) goto err_tap_disabled; - target->type->halt( target ); + target->type->halt(target); return JIM_OK; case TS_CMD_WAITSTATE: /* params: statename timeoutmsecs */ - if( goi.argc != 2 ){ - Jim_SetResult_sprintf( goi.interp, "%s STATENAME TIMEOUTMSECS", n->name ); + if (goi.argc != 2) { + Jim_SetResult_sprintf(goi.interp, "%s STATENAME TIMEOUTMSECS", n->name); return JIM_ERR; } - e = Jim_GetOpt_Nvp( &goi, nvp_target_state, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( &goi, nvp_target_state,1 ); + e = Jim_GetOpt_Nvp(&goi, nvp_target_state, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(&goi, nvp_target_state,1); return e; } - e = Jim_GetOpt_Wide( &goi, &a ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &a); + if (e != JIM_OK) { return e; } if (!target->tap->enabled) goto err_tap_disabled; - e = target_wait_state( target, n->value, a ); - if( e != ERROR_OK ){ - Jim_SetResult_sprintf( goi.interp, + e = target_wait_state(target, n->value, a); + if (e != ERROR_OK) { + Jim_SetResult_sprintf(goi.interp, "target: %s wait %s fails (%d) %s", target->cmd_name, n->name, - e, target_strerror_safe(e) ); + e, target_strerror_safe(e)); return JIM_ERR; } else { return JIM_OK; @@ -3932,40 +4071,41 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) { target_event_action_t *teap; teap = target->event_action; - command_print( cmd_ctx, "Event actions for target (%d) %s\n", + command_print(cmd_ctx, "Event actions for target (%d) %s\n", target->target_number, - target->cmd_name ); - command_print( cmd_ctx, "%-25s | Body", "Event"); - command_print( cmd_ctx, "------------------------- | ----------------------------------------"); - while( teap ){ - command_print( cmd_ctx, + target->cmd_name); + command_print(cmd_ctx, "%-25s | Body", "Event"); + command_print(cmd_ctx, "------------------------- | ----------------------------------------"); + while (teap) { + command_print(cmd_ctx, "%-25s | %s", - Jim_Nvp_value2name_simple( nvp_target_event, teap->event )->name, - Jim_GetString( teap->body, NULL ) ); + Jim_Nvp_value2name_simple(nvp_target_event, teap->event)->name, + Jim_GetString(teap->body, NULL)); teap = teap->next; } - command_print( cmd_ctx, "***END***"); + command_print(cmd_ctx, "***END***"); return JIM_OK; } case TS_CMD_CURSTATE: - if( goi.argc != 0 ){ - Jim_WrongNumArgs( goi.interp, 0, argv, "[no parameters]"); + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 0, argv, "[no parameters]"); return JIM_ERR; } - Jim_SetResultString( goi.interp, - Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name,-1); + Jim_SetResultString(goi.interp, + target_state_name( target ), + -1); return JIM_OK; case TS_CMD_INVOKE_EVENT: - if( goi.argc != 1 ){ - Jim_SetResult_sprintf( goi.interp, "%s ?EVENTNAME?",n->name); + if (goi.argc != 1) { + Jim_SetResult_sprintf(goi.interp, "%s ?EVENTNAME?",n->name); return JIM_ERR; } - e = Jim_GetOpt_Nvp( &goi, nvp_target_event, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( &goi, nvp_target_event, 1 ); + e = Jim_GetOpt_Nvp(&goi, nvp_target_event, &n); + if (e != JIM_OK) { + Jim_GetOpt_NvpUnknown(&goi, nvp_target_event, 1); return e; } - target_handle_event( target, n->value ); + target_handle_event(target, n->value); return JIM_OK; } return JIM_ERR; @@ -3975,7 +4115,7 @@ err_tap_disabled: return JIM_ERR; } -static int target_create( Jim_GetOptInfo *goi ) +static int target_create(Jim_GetOptInfo *goi) { Jim_Obj *new_cmd; Jim_Cmd *cmd; @@ -3987,44 +4127,44 @@ static int target_create( Jim_GetOptInfo *goi ) struct command_context_s *cmd_ctx; cmd_ctx = Jim_GetAssocData(goi->interp, "context"); - if( goi->argc < 3 ){ - Jim_WrongNumArgs( goi->interp, 1, goi->argv, "?name? ?type? ..options..."); + if (goi->argc < 3) { + Jim_WrongNumArgs(goi->interp, 1, goi->argv, "?name? ?type? ..options..."); return JIM_ERR; } /* COMMAND */ - Jim_GetOpt_Obj( goi, &new_cmd ); + Jim_GetOpt_Obj(goi, &new_cmd); /* does this command exist? */ - cmd = Jim_GetCommand( goi->interp, new_cmd, JIM_ERRMSG ); - if( cmd ){ - cp = Jim_GetString( new_cmd, NULL ); + cmd = Jim_GetCommand(goi->interp, new_cmd, JIM_ERRMSG); + if (cmd) { + cp = Jim_GetString(new_cmd, NULL); Jim_SetResult_sprintf(goi->interp, "Command/target: %s Exists", cp); return JIM_ERR; } /* TYPE */ - e = Jim_GetOpt_String( goi, &cp2, NULL ); + e = Jim_GetOpt_String(goi, &cp2, NULL); cp = cp2; /* now does target type exist */ - for( x = 0 ; target_types[x] ; x++ ){ - if( 0 == strcmp( cp, target_types[x]->name ) ){ + for (x = 0 ; target_types[x] ; x++) { + if (0 == strcmp(cp, target_types[x]->name)) { /* found */ break; } } - if( target_types[x] == NULL ){ - Jim_SetResult_sprintf( goi->interp, "Unknown target type %s, try one of ", cp ); - for( x = 0 ; target_types[x] ; x++ ){ - if( target_types[x+1] ){ - Jim_AppendStrings( goi->interp, + if (target_types[x] == NULL) { + Jim_SetResult_sprintf(goi->interp, "Unknown target type %s, try one of ", cp); + for (x = 0 ; target_types[x] ; x++) { + if (target_types[x + 1]) { + Jim_AppendStrings(goi->interp, Jim_GetResult(goi->interp), target_types[x]->name, ", ", NULL); } else { - Jim_AppendStrings( goi->interp, + Jim_AppendStrings(goi->interp, Jim_GetResult(goi->interp), " or ", - target_types[x]->name,NULL ); + target_types[x]->name,NULL); } } return JIM_ERR; @@ -4038,7 +4178,7 @@ static int target_create( Jim_GetOptInfo *goi ) /* allocate memory for each unique target type */ target->type = (target_type_t*)calloc(1,sizeof(target_type_t)); - memcpy( target->type, target_types[x], sizeof(target_type_t)); + memcpy(target->type, target_types[x], sizeof(target_type_t)); /* will be set by "-endian" */ target->endianness = TARGET_ENDIAN_UNKNOWN; @@ -4075,21 +4215,21 @@ static int target_create( Jim_GetOptInfo *goi ) /* Do the rest as "configure" options */ goi->isconfigure = 1; - e = target_configure( goi, target); + e = target_configure(goi, target); if (target->tap == NULL) { - Jim_SetResultString( interp, "-chain-position required when creating target", -1); - e=JIM_ERR; + Jim_SetResultString(interp, "-chain-position required when creating target", -1); + e = JIM_ERR; } - if( e != JIM_OK ){ - free( target->type ); - free( target ); + if (e != JIM_OK) { + free(target->type); + free(target); return e; } - if( target->endianness == TARGET_ENDIAN_UNKNOWN ){ + if (target->endianness == TARGET_ENDIAN_UNKNOWN) { /* default endian to little if not specified */ target->endianness = TARGET_LITTLE_ENDIAN; } @@ -4099,38 +4239,38 @@ static int target_create( Jim_GetOptInfo *goi ) target->variant = strdup(""); /* create the target specific commands */ - if( target->type->register_commands ){ - (*(target->type->register_commands))( cmd_ctx ); + if (target->type->register_commands) { + (*(target->type->register_commands))(cmd_ctx); } - if( target->type->target_create ){ - (*(target->type->target_create))( target, goi->interp ); + if (target->type->target_create) { + (*(target->type->target_create))(target, goi->interp); } /* append to end of list */ { target_t **tpp; tpp = &(all_targets); - while( *tpp ){ - tpp = &( (*tpp)->next ); + while (*tpp) { + tpp = &((*tpp)->next); } *tpp = target; } - cp = Jim_GetString( new_cmd, NULL ); + cp = Jim_GetString(new_cmd, NULL); target->cmd_name = strdup(cp); /* now - create the new target name command */ - e = Jim_CreateCommand( goi->interp, + e = Jim_CreateCommand(goi->interp, /* name */ cp, tcl_target_func, /* C function */ target, /* private data */ - NULL ); /* no del proc */ + NULL); /* no del proc */ return e; } -static int jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) +static int jim_target(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int x,r,e; jim_wide w; @@ -4155,91 +4295,91 @@ static int jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) LOG_DEBUG("Target command params:"); LOG_DEBUG("%s", Jim_Debug_ArgvString(interp, argc, argv)); - cmd_ctx = Jim_GetAssocData( interp, "context" ); + cmd_ctx = Jim_GetAssocData(interp, "context"); - Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 ); + Jim_GetOpt_Setup(&goi, interp, argc-1, argv + 1); - if( goi.argc == 0 ){ + if (goi.argc == 0) { Jim_WrongNumArgs(interp, 1, argv, "missing: command ..."); return JIM_ERR; } - /* Jim_GetOpt_Debug( &goi ); */ - r = Jim_GetOpt_Enum( &goi, target_cmds, &x ); - if( r != JIM_OK ){ + /* Jim_GetOpt_Debug(&goi); */ + r = Jim_GetOpt_Enum(&goi, target_cmds, &x); + if (r != JIM_OK) { return r; } - switch(x){ + switch (x) { default: Jim_Panic(goi.interp,"Why am I here?"); return JIM_ERR; case TG_CMD_CURRENT: - if( goi.argc != 0 ){ - Jim_WrongNumArgs( goi.interp, 1, goi.argv, "Too many parameters"); + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 1, goi.argv, "Too many parameters"); return JIM_ERR; } - Jim_SetResultString( goi.interp, get_current_target( cmd_ctx )->cmd_name, -1 ); + Jim_SetResultString(goi.interp, get_current_target(cmd_ctx)->cmd_name, -1); return JIM_OK; case TG_CMD_TYPES: - if( goi.argc != 0 ){ - Jim_WrongNumArgs( goi.interp, 1, goi.argv, "Too many parameters" ); + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 1, goi.argv, "Too many parameters"); return JIM_ERR; } - Jim_SetResult( goi.interp, Jim_NewListObj( goi.interp, NULL, 0 ) ); - for( x = 0 ; target_types[x] ; x++ ){ - Jim_ListAppendElement( goi.interp, + Jim_SetResult(goi.interp, Jim_NewListObj(goi.interp, NULL, 0)); + for (x = 0 ; target_types[x] ; x++) { + Jim_ListAppendElement(goi.interp, Jim_GetResult(goi.interp), - Jim_NewStringObj( goi.interp, target_types[x]->name, -1 ) ); + Jim_NewStringObj(goi.interp, target_types[x]->name, -1)); } return JIM_OK; case TG_CMD_NAMES: - if( goi.argc != 0 ){ - Jim_WrongNumArgs( goi.interp, 1, goi.argv, "Too many parameters" ); + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 1, goi.argv, "Too many parameters"); return JIM_ERR; } - Jim_SetResult( goi.interp, Jim_NewListObj( goi.interp, NULL, 0 ) ); + Jim_SetResult(goi.interp, Jim_NewListObj(goi.interp, NULL, 0)); target = all_targets; - while( target ){ - Jim_ListAppendElement( goi.interp, + while (target) { + Jim_ListAppendElement(goi.interp, Jim_GetResult(goi.interp), - Jim_NewStringObj( goi.interp, target->cmd_name, -1 ) ); + Jim_NewStringObj(goi.interp, target->cmd_name, -1)); target = target->next; } return JIM_OK; case TG_CMD_CREATE: - if( goi.argc < 3 ){ - Jim_WrongNumArgs( goi.interp, goi.argc, goi.argv, "?name ... config options ..."); + if (goi.argc < 3) { + Jim_WrongNumArgs(goi.interp, goi.argc, goi.argv, "?name ... config options ..."); return JIM_ERR; } - return target_create( &goi ); + return target_create(&goi); break; case TG_CMD_NUMBER: - if( goi.argc != 1 ){ - Jim_SetResult_sprintf( goi.interp, "expected: target number ?NUMBER?"); + if (goi.argc != 1) { + Jim_SetResult_sprintf(goi.interp, "expected: target number ?NUMBER?"); return JIM_ERR; } - e = Jim_GetOpt_Wide( &goi, &w ); - if( e != JIM_OK ){ + e = Jim_GetOpt_Wide(&goi, &w); + if (e != JIM_OK) { return JIM_ERR; } { target_t *t; t = get_target_by_num(w); - if( t == NULL ){ - Jim_SetResult_sprintf( goi.interp,"Target: number %d does not exist", (int)(w)); + if (t == NULL) { + Jim_SetResult_sprintf(goi.interp,"Target: number %d does not exist", (int)(w)); return JIM_ERR; } - Jim_SetResultString( goi.interp, t->cmd_name, -1 ); + Jim_SetResultString(goi.interp, t->cmd_name, -1); return JIM_OK; } case TG_CMD_COUNT: - if( goi.argc != 0 ){ - Jim_WrongNumArgs( goi.interp, 0, goi.argv, ""); + if (goi.argc != 0) { + Jim_WrongNumArgs(goi.interp, 0, goi.argv, ""); return JIM_ERR; } - Jim_SetResult( goi.interp, - Jim_NewIntObj( goi.interp, max_target_number())); + Jim_SetResult(goi.interp, + Jim_NewIntObj(goi.interp, max_target_number())); return JIM_OK; } @@ -4249,8 +4389,8 @@ static int jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) struct FastLoad { - u32 address; - u8 *data; + uint32_t address; + uint8_t *data; int length; }; @@ -4260,16 +4400,16 @@ static struct FastLoad *fastload; static void free_fastload(void) { - if (fastload!=NULL) + if (fastload != NULL) { int i; - for (i=0; i 5)) - { - return ERROR_COMMAND_SYNTAX_ERROR; - } - - /* a base address isn't always necessary, default to 0x0 (i.e. don't relocate) */ - if (argc >= 2) - { - image.base_address_set = 1; - image.base_address = strtoul(args[1], NULL, 0); - } - else - { - image.base_address_set = 0; - } - - - image.start_address_set = 0; - - if (argc>=4) - { - min_address=strtoul(args[3], NULL, 0); - } - if (argc>=5) - { - max_address=strtoul(args[4], NULL, 0)+min_address; - } - - if (min_address>max_address) - { - return ERROR_COMMAND_SYNTAX_ERROR; - } + int retval = parse_load_image_command_args(args, argc, + &image, &min_address, &max_address); + if (ERROR_OK != retval) + return retval; duration_start_measure(&duration); @@ -4333,9 +4444,9 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha image_size = 0x0; retval = ERROR_OK; - fastload_num=image.num_sections; - fastload=(struct FastLoad *)malloc(sizeof(struct FastLoad)*image.num_sections); - if (fastload==NULL) + fastload_num = image.num_sections; + fastload = (struct FastLoad *)malloc(sizeof(struct FastLoad)*image.num_sections); + if (fastload == NULL) { image_close(&image); return ERROR_FAIL; @@ -4346,7 +4457,8 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha buffer = malloc(image.sections[i].size); if (buffer == NULL) { - command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", image.sections[i].size); + command_print(cmd_ctx, "error allocating buffer for section (%d bytes)", + (int)(image.sections[i].size)); break; } @@ -4356,55 +4468,57 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha break; } - u32 offset=0; - u32 length=buf_cnt; + uint32_t offset = 0; + uint32_t length = buf_cnt; /* DANGER!!! beware of unsigned comparision here!!! */ - if ((image.sections[i].base_address+buf_cnt>=min_address)&& - (image.sections[i].base_address= min_address)&& + (image.sections[i].base_address < max_address)) { - if (image.sections[i].base_addressmax_address) + if (image.sections[i].base_address + buf_cnt > max_address) { - length-=(image.sections[i].base_address+buf_cnt)-max_address; + length -= (image.sections[i].base_address + buf_cnt)-max_address; } - fastload[i].address=image.sections[i].base_address+offset; - fastload[i].data=malloc(length); - if (fastload[i].data==NULL) + fastload[i].address = image.sections[i].base_address + offset; + fastload[i].data = malloc(length); + if (fastload[i].data == NULL) { free(buffer); break; } - memcpy(fastload[i].data, buffer+offset, length); - fastload[i].length=length; + memcpy(fastload[i].data, buffer + offset, length); + fastload[i].length = length; image_size += length; - command_print(cmd_ctx, "%u byte written at address 0x%8.8x", length, image.sections[i].base_address+offset); + command_print(cmd_ctx, "%u byte written at address 0x%8.8x", + (unsigned int)length, + ((unsigned int)(image.sections[i].base_address + offset))); } free(buffer); } duration_stop_measure(&duration, &duration_text); - if (retval==ERROR_OK) + if (retval == ERROR_OK) { - command_print(cmd_ctx, "Loaded %u bytes in %s", image_size, duration_text); + command_print(cmd_ctx, "Loaded %u bytes in %s", (unsigned int)image_size, duration_text); command_print(cmd_ctx, "NB!!! image has not been loaded to target, issue a subsequent 'fast_load' to do so."); } free(duration_text); image_close(&image); - if (retval!=ERROR_OK) + if (retval != ERROR_OK) { free_fastload(); } @@ -4414,28 +4528,38 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha static int handle_fast_load_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - if (argc>0) + if (argc > 0) return ERROR_COMMAND_SYNTAX_ERROR; - if (fastload==NULL) + if (fastload == NULL) { LOG_ERROR("No image in memory"); return ERROR_FAIL; } int i; - int ms=timeval_ms(); - int size=0; - int retval=ERROR_OK; - for (i=0; i