#include <time_support.h>
#include <fileio.h>
+#include <image.h>
int cli_target_callback_event_handler(struct target_s *target, enum target_event event, void *priv);
extern target_type_t arm920t_target;
extern target_type_t arm966e_target;
extern target_type_t arm926ejs_target;
+extern target_type_t xscale_target;
target_type_t *target_types[] =
{
&arm720t_target,
&arm966e_target,
&arm926ejs_target,
+ &xscale_target,
NULL,
};
{
int retval = ERROR_OK;
target_t *target;
-
+
+ /* prepare reset_halt where necessary */
+ target = targets;
+ while (target)
+ {
+ switch (target->reset_mode)
+ {
+ case RESET_HALT:
+ case RESET_INIT:
+ target->type->prepare_reset_halt(target);
+ break;
+ default:
+ break;
+ }
+ target = target->next;
+ }
+
target = targets;
while (target)
{
return ERROR_OK;
}
-void target_read_u32(struct target_s *target, u32 address, u32 *value)
+int target_read_u32(struct target_s *target, u32 address, u32 *value)
{
u8 value_buf[4];
+
+ int retval = target->type->read_memory(target, address, 4, 1, value_buf);
- target->type->read_memory(target, address, 4, 1, value_buf);
+ if (retval == ERROR_OK)
+ {
+ *value = target_buffer_get_u32(target, value_buf);
+ DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value);
+ }
+ else
+ {
+ *value = 0x0;
+ DEBUG("address: 0x%8.8x failed", address);
+ }
- *value = target_buffer_get_u32(target, value_buf);
-
- DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, *value);
+ return retval;
}
-void target_read_u16(struct target_s *target, u32 address, u16 *value)
+int target_read_u16(struct target_s *target, u32 address, u16 *value)
{
u8 value_buf[2];
- target->type->read_memory(target, address, 2, 1, value_buf);
+ int retval = target->type->read_memory(target, address, 2, 1, value_buf);
- *value = target_buffer_get_u16(target, value_buf);
-
- DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value);
+ if (retval == ERROR_OK)
+ {
+ *value = target_buffer_get_u16(target, value_buf);
+ DEBUG("address: 0x%8.8x, value: 0x%4.4x", address, *value);
+ }
+ else
+ {
+ *value = 0x0;
+ DEBUG("address: 0x%8.8x failed", address);
+ }
+
+ return retval;
}
-void target_read_u8(struct target_s *target, u32 address, u8 *value)
+int target_read_u8(struct target_s *target, u32 address, u8 *value)
{
- target->type->read_memory(target, address, 1, 1, value);
+ int retval = target->type->read_memory(target, address, 1, 1, value);
- DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value);
+ if (retval == ERROR_OK)
+ {
+ DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, *value);
+ }
+ else
+ {
+ *value = 0x0;
+ DEBUG("address: 0x%8.8x failed", address);
+ }
+
+ return retval;
}
-void target_write_u32(struct target_s *target, u32 address, u32 value)
+int target_write_u32(struct target_s *target, u32 address, u32 value)
{
+ int retval;
u8 value_buf[4];
DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
target_buffer_set_u32(target, value_buf, value);
- target->type->write_memory(target, address, 4, 1, value_buf);
+ if ((retval = target->type->write_memory(target, address, 4, 1, value_buf)) != ERROR_OK)
+ {
+ DEBUG("failed: %i", retval);
+ }
+
+ return retval;
}
-void target_write_u16(struct target_s *target, u32 address, u16 value)
+int target_write_u16(struct target_s *target, u32 address, u16 value)
{
+ int retval;
u8 value_buf[2];
DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value);
target_buffer_set_u16(target, value_buf, value);
- target->type->write_memory(target, address, 2, 1, value_buf);
+ if ((retval = target->type->write_memory(target, address, 2, 1, value_buf)) != ERROR_OK)
+ {
+ DEBUG("failed: %i", retval);
+ }
+
+ return retval;
}
-void target_write_u8(struct target_s *target, u32 address, u8 value)
+int target_write_u8(struct target_s *target, u32 address, u8 value)
{
+ int retval;
+
DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value);
- target->type->read_memory(target, address, 1, 1, &value);
+ if ((retval = target->type->read_memory(target, address, 1, 1, &value)) != ERROR_OK)
+ {
+ DEBUG("failed: %i", retval);
+ }
+
+ return retval;
}
int target_register_user_commands(struct command_context_s *cmd_ctx)
int count = 0;
char *value;
- DEBUG("");
+ DEBUG("-");
target = get_current_target(cmd_ctx);
int retval;
target_t *target = get_current_target(cmd_ctx);
- DEBUG("");
+ DEBUG("-");
command_print(cmd_ctx, "requesting target halt...");
target_t *target = get_current_target(cmd_ctx);
enum target_reset_mode reset_mode = RESET_RUN;
- DEBUG("");
+ DEBUG("-");
if (argc >= 1)
{
int retval;
target_t *target = get_current_target(cmd_ctx);
- DEBUG("");
+ DEBUG("-");
if (argc == 0)
retval = target->type->resume(target, 1, 0, 1, 0); /* current pc, addr = 0, handle breakpoints, not debugging */
{
target_t *target = get_current_target(cmd_ctx);
- DEBUG("");
+ DEBUG("-");
if (argc == 0)
target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
u32 address;
u8 *buffer;
u32 buf_cnt;
- u32 binary_size;
-
- fileio_t file;
- enum fileio_pri_type pri_type = FILEIO_IMAGE;
- fileio_image_t image_info;
- enum fileio_sec_type sec_type;
+ u32 image_size;
+
+ image_t image;
duration_t duration;
char *duration_text;
return ERROR_OK;
}
- memset(&file, 0, sizeof(fileio_t));
- fileio_identify_image_type(&sec_type, (argc == 3) ? args[2] : NULL);
+ identify_image_type(&image.type, (argc == 3) ? args[2] : NULL);
- image_info.base_address = strtoul(args[1], NULL, 0);
- image_info.has_start_address = 0;
+ image.base_address_set = 1;
+ image.base_address = strtoul(args[1], NULL, 0);
+
+ image.start_address_set = 0;
buffer = malloc(128 * 1024);
duration_start_measure(&duration);
- if (fileio_open(&file, args[0], FILEIO_READ,
- pri_type, &image_info, sec_type) != ERROR_OK)
+ if (image_open(&image, args[0], FILEIO_READ) != ERROR_OK)
{
- command_print(cmd_ctx, "load_image error: %s", file.error_str);
+ command_print(cmd_ctx, "load_image error: %s", image.error_str);
return ERROR_OK;
}
- binary_size = file.size;
- address = image_info.base_address;
- while ((binary_size > 0) &&
- (fileio_read(&file, 128 * 1024, buffer, &buf_cnt) == ERROR_OK))
+ image_size = image.size;
+ address = image.base_address;
+
+ while ((image_size > 0) &&
+ (image_read(&image, 128 * 1024, buffer, &buf_cnt) == ERROR_OK))
{
target_write_buffer(target, address, buf_cnt, buffer);
address += buf_cnt;
- binary_size -= buf_cnt;
+ image_size -= buf_cnt;
}
free(buffer);
duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "downloaded %lli byte in %s", file.size, duration_text);
+ command_print(cmd_ctx, "downloaded %u byte in %s", image.size, duration_text);
free(duration_text);
- fileio_close(&file);
+ image_close(&image);
return ERROR_OK;
int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- fileio_t file;
- fileio_image_t image_info;
+ fileio_t fileio;
u32 address;
u32 size;
return ERROR_OK;
}
- image_info.base_address = address;
- image_info.has_start_address = 0;
-
- if (fileio_open(&file, args[0], FILEIO_WRITE,
- FILEIO_IMAGE, &image_info, FILEIO_PLAIN) != ERROR_OK)
+ if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
{
- command_print(cmd_ctx, "dump_image error: %s", file.error_str);
+ command_print(cmd_ctx, "dump_image error: %s", fileio.error_str);
return ERROR_OK;
}
u32 this_run_size = (size > 560) ? 560 : size;
target->type->read_memory(target, address, 4, this_run_size / 4, buffer);
- fileio_write(&file, this_run_size, buffer, &size_written);
+ fileio_write(&fileio, this_run_size, buffer, &size_written);
size -= this_run_size;
address += this_run_size;
}
- fileio_close(&file);
+ fileio_close(&fileio);
duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "dumped %lli byte in %s", file.size, duration_text);
+ command_print(cmd_ctx, "dumped %lli byte in %s", fileio.size, duration_text);
free(duration_text);
return ERROR_OK;