-COMMAND_HANDLER(arm920t_handle_cp15i_command)
-{
- int retval;
- struct target *target = get_current_target(CMD_CTX);
- struct arm920t_common *arm920t = target_to_arm920(target);
-
- retval = arm920t_verify_pointer(CMD_CTX, arm920t);
- if (retval != ERROR_OK)
- return retval;
-
-
- if (target->state != TARGET_HALTED)
- {
- command_print(CMD_CTX, "target must be stopped for "
- "\"%s\" command", CMD_NAME);
- return ERROR_OK;
- }
-
- /* one argument, read a register.
- * two arguments, write it.
- */
- if (CMD_ARGC >= 1)
- {
- uint32_t opcode;
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], opcode);
-
- if (CMD_ARGC == 1)
- {
- uint32_t value;
- retval = arm920t_read_cp15_interpreted(target,
- opcode, 0x0, &value);
- if (retval != ERROR_OK)
- {
- command_print(CMD_CTX,
- "couldn't execute %8.8" PRIx32,
- opcode);
- /* REVISIT why lie? "return retval"? */
- return ERROR_OK;
- }
-
- command_print(CMD_CTX, "%8.8" PRIx32 ": %8.8" PRIx32,
- opcode, value);
- }
- else if (CMD_ARGC == 2)
- {
- uint32_t value;
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
- retval = arm920t_write_cp15_interpreted(target,
- opcode, value, 0);
- if (retval != ERROR_OK)
- {
- command_print(CMD_CTX,
- "couldn't execute %8.8" PRIx32,
- opcode);
- /* REVISIT why lie? "return retval"? */
- return ERROR_OK;
- }
- command_print(CMD_CTX, "%8.8" PRIx32 ": %8.8" PRIx32,
- opcode, value);
- }
- else if (CMD_ARGC == 3)
- {
- uint32_t value;
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
- uint32_t address;
- COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], address);
- retval = arm920t_write_cp15_interpreted(target,
- opcode, value, address);
- if (retval != ERROR_OK)
- {
- command_print(CMD_CTX,
- "couldn't execute %8.8" PRIx32, opcode);
- /* REVISIT why lie? "return retval"? */
- return ERROR_OK;
- }
- command_print(CMD_CTX, "%8.8" PRIx32 ": %8.8" PRIx32
- " %8.8" PRIx32, opcode, value, address);
- }
- }
- else
- {
- command_print(CMD_CTX,
- "usage: arm920t cp15i <opcode> [value] [address]");
- }
-
- return ERROR_OK;
-}
-