+
+static const struct command_registration xscale_exec_command_handlers[] = {
+ {
+ .name = "cache_info",
+ .handler = xscale_handle_cache_info_command,
+ .mode = COMMAND_EXEC,
+ .help = "display information about CPU caches",
+ },
+ {
+ .name = "mmu",
+ .handler = xscale_handle_mmu_command,
+ .mode = COMMAND_EXEC,
+ .help = "enable or disable the MMU",
+ .usage = "['enable'|'disable']",
+ },
+ {
+ .name = "icache",
+ .handler = xscale_handle_idcache_command,
+ .mode = COMMAND_EXEC,
+ .help = "display ICache state, optionally enabling or "
+ "disabling it",
+ .usage = "['enable'|'disable']",
+ },
+ {
+ .name = "dcache",
+ .handler = xscale_handle_idcache_command,
+ .mode = COMMAND_EXEC,
+ .help = "display DCache state, optionally enabling or "
+ "disabling it",
+ .usage = "['enable'|'disable']",
+ },
+ {
+ .name = "vector_catch",
+ .handler = xscale_handle_vector_catch_command,
+ .mode = COMMAND_EXEC,
+ .help = "set or display 8-bit mask of vectors "
+ "that should trigger debug entry",
+ .usage = "[mask]",
+ },
+ {
+ .name = "vector_table",
+ .handler = xscale_handle_vector_table_command,
+ .mode = COMMAND_EXEC,
+ .help = "set vector table entry in mini-ICache, "
+ "or display current tables",
+ .usage = "[('high'|'low') index code]",
+ },
+ {
+ .name = "trace_buffer",
+ .handler = xscale_handle_trace_buffer_command,
+ .mode = COMMAND_EXEC,
+ .help = "display trace buffer status, enable or disable "
+ "tracing, and optionally reconfigure trace mode",
+ .usage = "['enable'|'disable' ['fill' number|'wrap']]",
+ },
+ {
+ .name = "dump_trace",
+ .handler = xscale_handle_dump_trace_command,
+ .mode = COMMAND_EXEC,
+ .help = "dump content of trace buffer to file",
+ .usage = "filename",
+ },
+ {
+ .name = "analyze_trace",
+ .handler = xscale_handle_analyze_trace_buffer_command,
+ .mode = COMMAND_EXEC,
+ .help = "analyze content of trace buffer",
+ .usage = "",
+ },
+ {
+ .name = "trace_image",
+ .handler = xscale_handle_trace_image_command,
+ .mode = COMMAND_EXEC,
+ .help = "load image from file to address (default 0)",
+ .usage = "filename [offset [filetype]]",
+ },
+ {
+ .name = "cp15",
+ .handler = xscale_handle_cp15,
+ .mode = COMMAND_EXEC,
+ .help = "Read or write coprocessor 15 register.",
+ .usage = "register [value]",
+ },
+ COMMAND_REGISTRATION_DONE
+};
+static const struct command_registration xscale_any_command_handlers[] = {
+ {
+ .name = "debug_handler",
+ .handler = xscale_handle_debug_handler_command,
+ .mode = COMMAND_ANY,
+ .help = "Change address used for debug handler.",
+ .usage = "target address",
+ },
+ {
+ .name = "cache_clean_address",
+ .handler = xscale_handle_cache_clean_address_command,
+ .mode = COMMAND_ANY,
+ .help = "Change address used for cleaning data cache.",
+ .usage = "address",
+ },
+ {
+ .chain = xscale_exec_command_handlers,
+ },
+ COMMAND_REGISTRATION_DONE
+};
+static const struct command_registration xscale_command_handlers[] = {
+ {
+ .chain = arm_command_handlers,
+ },
+ {
+ .name = "xscale",
+ .mode = COMMAND_ANY,
+ .help = "xscale command group",
+ .chain = xscale_any_command_handlers,
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
+struct target_type xscale_target =
+{
+ .name = "xscale",
+
+ .poll = xscale_poll,
+ .arch_state = xscale_arch_state,
+
+ .target_request_data = NULL,
+
+ .halt = xscale_halt,
+ .resume = xscale_resume,
+ .step = xscale_step,
+
+ .assert_reset = xscale_assert_reset,
+ .deassert_reset = xscale_deassert_reset,
+ .soft_reset_halt = NULL,
+
+ /* REVISIT on some cores, allow exporting iwmmxt registers ... */
+ .get_gdb_reg_list = arm_get_gdb_reg_list,
+
+ .read_memory = xscale_read_memory,
+ .read_phys_memory = xscale_read_phys_memory,
+ .write_memory = xscale_write_memory,
+ .write_phys_memory = xscale_write_phys_memory,
+ .bulk_write_memory = xscale_bulk_write_memory,
+
+ .checksum_memory = arm_checksum_memory,
+ .blank_check_memory = arm_blank_check_memory,
+
+ .run_algorithm = armv4_5_run_algorithm,
+
+ .add_breakpoint = xscale_add_breakpoint,
+ .remove_breakpoint = xscale_remove_breakpoint,
+ .add_watchpoint = xscale_add_watchpoint,
+ .remove_watchpoint = xscale_remove_watchpoint,
+
+ .commands = xscale_command_handlers,
+ .target_create = xscale_target_create,
+ .init_target = xscale_init_target,
+
+ .virt2phys = xscale_virt2phys,
+ .mmu = xscale_mmu
+};