return arm920t_init_arch_info(target, arm920t, target->tap);
}
+static void arm920t_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm920t_common *arm920t = target_to_arm920(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm920t);
+}
+
COMMAND_HANDLER(arm920t_handle_read_cache_command)
{
int retval = ERROR_OK;
.commands = arm920t_command_handlers,
.target_create = arm920t_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm920t_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
return ERROR_OK;
}
+static void arm946e_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm946e_common *arm946e = target_to_arm946(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm946e);
+}
+
static int arm946e_verify_pointer(struct command_invocation *cmd,
struct arm946e_common *arm946e)
{
.commands = arm946e_command_handlers,
.target_create = arm946e_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm946e_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
return arm966e_init_arch_info(target, arm966e, target->tap);
}
+static void arm966e_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm966e_common *arm966e = target_to_arm966(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm966e);
+}
+
static int arm966e_verify_pointer(struct command_invocation *cmd,
struct arm966e_common *arm966e)
{
.commands = arm966e_command_handlers,
.target_create = arm966e_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm966e_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
return ERROR_OK;
}
+void arm9tdmi_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm7_9);
+}
+
COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
{
struct target *target = get_current_target(CMD_CTX);
.commands = arm9tdmi_command_handlers,
.target_create = arm9tdmi_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm9tdmi_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
int arm9tdmi_init_target(struct command_context *cmd_ctx,
struct target *target);
+void arm9tdmi_deinit_target(struct target *target);
int arm9tdmi_init_arch_info(struct target *target,
struct arm7_9_common *arm7_9, struct jtag_tap *tap);
extern const struct command_registration arm9tdmi_command_handlers[];
return fa526_init_arch_info(target, arm920t, target->tap);
}
+static void fa526_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm920t_common *arm920t = target_to_arm920(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm920t);
+}
+
/** Holds methods for FA526 targets. */
struct target_type fa526_target = {
.name = "fa526",
.commands = arm920t_command_handlers,
.target_create = fa526_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = fa526_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
return ERROR_OK;
}
+static void feroceon_deinit_target(struct target *target)
+{
+ arm9tdmi_deinit_target(target);
+}
+
static void feroceon_common_setup(struct target *target)
{
struct arm *arm = target->arch_info;
.commands = arm926ejs_command_handlers,
.target_create = feroceon_target_create,
.init_target = feroceon_init_target,
+ .deinit_target = feroceon_deinit_target,
.examine = feroceon_examine,
};