1 // SPDX-License-Identifier: GPL-2.0-or-later
3 /***************************************************************************
4 * Copyright (C) 2013-2015,2019-2020 Synopsys, Inc. *
5 * Frank Dols <frank.dols@synopsys.com> *
6 * Mischa Jonker <mischa.jonker@synopsys.com> *
7 * Anton Kolesov <anton.kolesov@synopsys.com> *
8 * Evgeniy Didin <didin@synopsys.com> *
9 ***************************************************************************/
16 #include <helper/nvp.h>
18 /* --------------------------------------------------------------------------
20 * ARC targets expose command interface.
21 * It can be accessed via GDB through the (gdb) monitor command.
23 * ------------------------------------------------------------------------- */
27 CFG_ADD_REG_TYPE_FLAG
,
28 CFG_ADD_REG_TYPE_STRUCT
,
30 /* Add flags register data type */
31 enum add_reg_type_flags
{
32 CFG_ADD_REG_TYPE_FLAGS_NAME
,
33 CFG_ADD_REG_TYPE_FLAGS_FLAG
,
36 static const struct nvp nvp_add_reg_type_flags_opts
[] = {
37 { .name
= "-name", .value
= CFG_ADD_REG_TYPE_FLAGS_NAME
},
38 { .name
= "-flag", .value
= CFG_ADD_REG_TYPE_FLAGS_FLAG
},
39 { .name
= NULL
, .value
= -1 }
42 /* Helper function to check if all field required for register
44 static const char *validate_register(const struct arc_reg_desc
* const reg
, bool arch_num_set
)
46 /* Check that required fields are set */
48 return "-name option is required";
49 if (!reg
->gdb_xml_feature
)
50 return "-feature option is required";
52 return "-num option is required";
53 if (reg
->is_bcr
&& reg
->is_core
)
54 return "Register cannot be both -core and -bcr.";
58 static COMMAND_HELPER(arc_handle_add_reg_type_flags_ops
, struct arc_reg_data_type
*type
)
60 struct reg_data_type_flags_field
*fields
= type
->reg_type_flags_field
;
61 struct arc_reg_bitfield
*bitfields
= type
->bitfields
;
62 struct reg_data_type_flags
*flags
= &type
->data_type_flags
;
63 unsigned int cur_field
= 0;
66 const struct nvp
*n
= nvp_name2value(nvp_add_reg_type_flags_opts
, CMD_ARGV
[0]);
70 case CFG_ADD_REG_TYPE_FLAGS_NAME
:
72 return ERROR_COMMAND_ARGUMENT_INVALID
;
74 const char *name
= CMD_ARGV
[0];
78 if (strlen(name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
79 command_print(CMD
, "Reg type name is too big.");
80 return ERROR_COMMAND_ARGUMENT_INVALID
;
83 strcpy((void *)type
->data_type
.id
, name
);
86 case CFG_ADD_REG_TYPE_FLAGS_FLAG
:
88 return ERROR_COMMAND_ARGUMENT_INVALID
;
91 const char *field_name
= CMD_ARGV
[0];
92 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], val
);
95 bitfields
[cur_field
].bitfield
.start
= val
;
96 bitfields
[cur_field
].bitfield
.end
= val
;
98 if (strlen(field_name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
99 command_print(CMD
, "Reg type field_name is too big.");
100 return ERROR_COMMAND_ARGUMENT_INVALID
;
103 fields
[cur_field
].name
= bitfields
[cur_field
].name
;
104 strcpy(bitfields
[cur_field
].name
, field_name
);
106 fields
[cur_field
].bitfield
= &bitfields
[cur_field
].bitfield
;
108 fields
[cur_field
- 1].next
= &fields
[cur_field
];
110 flags
->fields
= fields
;
116 nvp_unknown_command_print(CMD
, nvp_add_reg_type_flags_opts
, NULL
, CMD_ARGV
[-1]);
117 return ERROR_COMMAND_ARGUMENT_INVALID
;
121 if (!type
->data_type
.id
) {
122 command_print(CMD
, "-name is a required option");
123 return ERROR_COMMAND_ARGUMENT_INVALID
;
129 COMMAND_HANDLER(arc_handle_add_reg_type_flags
)
135 struct target
*target
= get_current_target(CMD_CTX
);
137 command_print(CMD
, "No current target");
141 /* Check if the amount of arguments is not zero */
143 return ERROR_COMMAND_SYNTAX_ERROR
;
145 /* Estimate number of registers as (argc - 2)/3 as each -flag option has 2
146 * arguments while -name is required. */
147 unsigned int fields_sz
= (CMD_ARGC
- 2) / 3;
149 /* The maximum amount of bitfields is 32 */
150 if (fields_sz
> 32) {
151 command_print(CMD
, "The amount of bitfields exceed 32");
152 return ERROR_COMMAND_ARGUMENT_INVALID
;
155 struct arc_reg_data_type
*type
= calloc(1, sizeof(*type
));
156 struct reg_data_type_flags_field
*fields
= calloc(fields_sz
, sizeof(*fields
));
157 struct arc_reg_bitfield
*bitfields
= calloc(fields_sz
, sizeof(*bitfields
));
158 if (!type
|| !fields
|| !bitfields
) {
159 LOG_ERROR("Out of memory");
163 struct reg_data_type_flags
*flags
= &type
->data_type_flags
;
164 type
->reg_type_flags_field
= fields
;
166 /* Initialize type */
167 type
->bitfields
= bitfields
;
168 type
->data_type
.id
= type
->data_type_id
;
169 type
->data_type
.type
= REG_TYPE_ARCH_DEFINED
;
170 type
->data_type
.type_class
= REG_TYPE_CLASS_FLAGS
;
171 type
->data_type
.reg_type_flags
= flags
;
172 flags
->size
= 4; /* For now ARC has only 32-bit registers */
174 retval
= CALL_COMMAND_HANDLER(arc_handle_add_reg_type_flags_ops
, type
);
175 if (retval
!= ERROR_OK
)
178 arc_reg_data_type_add(target
, type
);
180 LOG_DEBUG("added flags type {name=%s}", type
->data_type
.id
);
192 /* Add struct register data type */
193 enum add_reg_type_struct
{
194 CFG_ADD_REG_TYPE_STRUCT_NAME
,
195 CFG_ADD_REG_TYPE_STRUCT_BITFIELD
,
198 static const struct nvp nvp_add_reg_type_struct_opts
[] = {
199 { .name
= "-name", .value
= CFG_ADD_REG_TYPE_STRUCT_NAME
},
200 { .name
= "-bitfield", .value
= CFG_ADD_REG_TYPE_STRUCT_BITFIELD
},
201 { .name
= NULL
, .value
= -1 }
204 COMMAND_HANDLER(arc_handle_set_aux_reg
)
207 return ERROR_COMMAND_SYNTAX_ERROR
;
209 struct target
*target
= get_current_target(CMD_CTX
);
211 command_print(CMD
, "No current target");
215 /* Register number */
217 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
221 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
223 struct arc_common
*arc
= target_to_arc(target
);
226 CHECK_RETVAL(arc_jtag_write_aux_reg_one(&arc
->jtag_info
, regnum
, value
));
231 COMMAND_HANDLER(arc_handle_get_aux_reg
)
234 return ERROR_COMMAND_SYNTAX_ERROR
;
236 struct target
*target
= get_current_target(CMD_CTX
);
238 command_print(CMD
, "No current target");
242 /* Register number */
244 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
246 struct arc_common
*arc
= target_to_arc(target
);
250 CHECK_RETVAL(arc_jtag_read_aux_reg_one(&arc
->jtag_info
, regnum
, &value
));
252 command_print(CMD
, "0x%" PRIx32
, value
);
257 COMMAND_HANDLER(arc_handle_get_core_reg
)
260 return ERROR_COMMAND_SYNTAX_ERROR
;
262 struct target
*target
= get_current_target(CMD_CTX
);
264 command_print(CMD
, "No current target");
268 /* Register number */
270 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
271 if (regnum
> CORE_REG_MAX_NUMBER
|| regnum
== ARC_R61
|| regnum
== ARC_R62
) {
272 command_print(CMD
, "Core register number %i "
273 "is invalid. Must less then 64 and not 61 and 62.", regnum
);
274 return ERROR_COMMAND_ARGUMENT_INVALID
;
277 struct arc_common
*arc
= target_to_arc(target
);
282 CHECK_RETVAL(arc_jtag_read_core_reg_one(&arc
->jtag_info
, regnum
, &value
));
284 command_print(CMD
, "0x%" PRIx32
, value
);
289 COMMAND_HANDLER(arc_handle_set_core_reg
)
292 return ERROR_COMMAND_SYNTAX_ERROR
;
294 struct target
*target
= get_current_target(CMD_CTX
);
296 command_print(CMD
, "No current target");
300 /* Register number */
302 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], regnum
);
303 if (regnum
> CORE_REG_MAX_NUMBER
|| regnum
== ARC_R61
|| regnum
== ARC_R62
) {
304 command_print(CMD
, "Core register number %i "
305 "is invalid. Must less then 64 and not 61 and 62.", regnum
);
306 return ERROR_COMMAND_ARGUMENT_INVALID
;
311 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], value
);
313 struct arc_common
*arc
= target_to_arc(target
);
316 CHECK_RETVAL(arc_jtag_write_core_reg_one(&arc
->jtag_info
, regnum
, value
));
321 static const struct command_registration arc_jtag_command_group
[] = {
323 .name
= "get-aux-reg",
324 .handler
= arc_handle_get_aux_reg
,
325 .mode
= COMMAND_EXEC
,
326 .help
= "Get AUX register by number. This command does a "
327 "raw JTAG request that bypasses OpenOCD register cache "
328 "and thus is unsafe and can have unexpected consequences. "
329 "Use at your own risk.",
333 .name
= "set-aux-reg",
334 .handler
= arc_handle_set_aux_reg
,
335 .mode
= COMMAND_EXEC
,
336 .help
= "Set AUX register by number. This command does a "
337 "raw JTAG request that bypasses OpenOCD register cache "
338 "and thus is unsafe and can have unexpected consequences. "
339 "Use at your own risk.",
340 .usage
= "<regnum> <value>"
343 .name
= "get-core-reg",
344 .handler
= arc_handle_get_core_reg
,
345 .mode
= COMMAND_EXEC
,
346 .help
= "Get/Set core register by number. This command does a "
347 "raw JTAG request that bypasses OpenOCD register cache "
348 "and thus is unsafe and can have unexpected consequences. "
349 "Use at your own risk.",
350 .usage
= "<regnum> [<value>]"
353 .name
= "set-core-reg",
354 .handler
= arc_handle_set_core_reg
,
355 .mode
= COMMAND_EXEC
,
356 .help
= "Get/Set core register by number. This command does a "
357 "raw JTAG request that bypasses OpenOCD register cache "
358 "and thus is unsafe and can have unexpected consequences. "
359 "Use at your own risk.",
360 .usage
= "<regnum> [<value>]"
362 COMMAND_REGISTRATION_DONE
366 /* This function supports only bitfields. */
367 static COMMAND_HELPER(arc_handle_add_reg_type_struct_opts
, struct arc_reg_data_type
*type
)
369 struct reg_data_type_struct_field
*fields
= type
->reg_type_struct_field
;
370 struct arc_reg_bitfield
*bitfields
= type
->bitfields
;
371 struct reg_data_type_struct
*struct_type
= &type
->data_type_struct
;
372 unsigned int cur_field
= 0;
375 const struct nvp
*n
= nvp_name2value(nvp_add_reg_type_struct_opts
, CMD_ARGV
[0]);
379 case CFG_ADD_REG_TYPE_STRUCT_NAME
:
381 return ERROR_COMMAND_ARGUMENT_INVALID
;
383 const char *name
= CMD_ARGV
[0];
387 if (strlen(name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
388 command_print(CMD
, "Reg type name is too big.");
389 return ERROR_COMMAND_ARGUMENT_INVALID
;
392 strcpy((void *)type
->data_type
.id
, name
);
395 case CFG_ADD_REG_TYPE_STRUCT_BITFIELD
:
397 return ERROR_COMMAND_ARGUMENT_INVALID
;
399 uint32_t start_pos
, end_pos
;
400 const char *field_name
= CMD_ARGV
[0];
401 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], start_pos
);
402 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[2], end_pos
);
405 bitfields
[cur_field
].bitfield
.start
= start_pos
;
406 bitfields
[cur_field
].bitfield
.end
= end_pos
;
407 bitfields
[cur_field
].bitfield
.type
= REG_TYPE_INT
;
409 if (strlen(field_name
) >= REG_TYPE_MAX_NAME_LENGTH
) {
410 command_print(CMD
, "Reg type field_name is too big.");
411 return ERROR_COMMAND_ARGUMENT_INVALID
;
414 fields
[cur_field
].name
= bitfields
[cur_field
].name
;
415 strcpy(bitfields
[cur_field
].name
, field_name
);
417 fields
[cur_field
].bitfield
= &bitfields
[cur_field
].bitfield
;
418 fields
[cur_field
].use_bitfields
= true;
420 fields
[cur_field
- 1].next
= &fields
[cur_field
];
422 struct_type
->fields
= fields
;
429 nvp_unknown_command_print(CMD
, nvp_add_reg_type_struct_opts
, NULL
, CMD_ARGV
[-1]);
430 return ERROR_COMMAND_ARGUMENT_INVALID
;
434 if (!type
->data_type
.id
) {
435 command_print(CMD
, "-name is a required option");
436 return ERROR_COMMAND_ARGUMENT_INVALID
;
442 COMMAND_HANDLER(arc_handle_add_reg_type_struct
)
448 struct target
*target
= get_current_target(CMD_CTX
);
450 command_print(CMD
, "No current target");
454 /* Check if the amount of arguments is not zero */
456 return ERROR_COMMAND_SYNTAX_ERROR
;
458 /* Estimate number of registers as (argc - 2)/4 as each -bitfield option has 3
459 * arguments while -name is required. */
460 unsigned int fields_sz
= (CMD_ARGC
- 2) / 4;
462 /* The maximum amount of bitfields is 32 */
463 if (fields_sz
> 32) {
464 command_print(CMD
, "The amount of bitfields exceed 32");
465 return ERROR_COMMAND_ARGUMENT_INVALID
;
468 struct arc_reg_data_type
*type
= calloc(1, sizeof(*type
));
469 struct reg_data_type_struct_field
*fields
= calloc(fields_sz
, sizeof(*fields
));
470 struct arc_reg_bitfield
*bitfields
= calloc(fields_sz
, sizeof(*bitfields
));
471 if (!type
|| !fields
|| !bitfields
) {
472 LOG_ERROR("Out of memory");
476 struct reg_data_type_struct
*struct_type
= &type
->data_type_struct
;
477 type
->reg_type_struct_field
= fields
;
479 /* Initialize type */
480 type
->data_type
.id
= type
->data_type_id
;
481 type
->bitfields
= bitfields
;
482 type
->data_type
.type
= REG_TYPE_ARCH_DEFINED
;
483 type
->data_type
.type_class
= REG_TYPE_CLASS_STRUCT
;
484 type
->data_type
.reg_type_struct
= struct_type
;
485 struct_type
->size
= 4; /* For now ARC has only 32-bit registers */
487 retval
= CALL_COMMAND_HANDLER(arc_handle_add_reg_type_struct_opts
, type
);
488 if (retval
!= ERROR_OK
)
491 arc_reg_data_type_add(target
, type
);
493 LOG_DEBUG("added struct type {name=%s}", type
->data_type
.id
);
508 CFG_ADD_REG_ARCH_NUM
,
511 CFG_ADD_REG_GDB_FEATURE
,
516 static const struct nvp opts_nvp_add_reg
[] = {
517 { .name
= "-name", .value
= CFG_ADD_REG_NAME
},
518 { .name
= "-num", .value
= CFG_ADD_REG_ARCH_NUM
},
519 { .name
= "-core", .value
= CFG_ADD_REG_IS_CORE
},
520 { .name
= "-bcr", .value
= CFG_ADD_REG_IS_BCR
},
521 { .name
= "-feature", .value
= CFG_ADD_REG_GDB_FEATURE
},
522 { .name
= "-type", .value
= CFG_ADD_REG_TYPE
},
523 { .name
= "-g", .value
= CFG_ADD_REG_GENERAL
},
524 { .name
= NULL
, .value
= -1 }
527 void free_reg_desc(struct arc_reg_desc
*r
)
530 free(r
->gdb_xml_feature
);
534 static COMMAND_HELPER(arc_handle_add_reg_do
, struct arc_reg_desc
*reg
)
536 /* There is no architecture number that we could treat as invalid, so
537 * separate variable required to ensure that arch num has been set. */
538 bool arch_num_set
= false;
539 const char *type_name
= "int"; /* Default type */
541 /* At least we need to specify 4 parameters: name, number and gdb_feature,
542 * which means there should be 6 arguments. Also there can be additional parameters
543 * "-type <type>", "-g" and "-core" or "-bcr" which makes maximum 10 parameters. */
544 if (CMD_ARGC
< 6 || CMD_ARGC
> 10)
545 return ERROR_COMMAND_SYNTAX_ERROR
;
549 const struct nvp
*n
= nvp_name2value(opts_nvp_add_reg
, CMD_ARGV
[0]);
553 case CFG_ADD_REG_NAME
:
555 return ERROR_COMMAND_ARGUMENT_INVALID
;
557 reg
->name
= strdup(CMD_ARGV
[0]);
559 LOG_ERROR("Out of memory");
567 case CFG_ADD_REG_IS_CORE
:
571 case CFG_ADD_REG_IS_BCR
:
575 case CFG_ADD_REG_ARCH_NUM
:
577 return ERROR_COMMAND_ARGUMENT_INVALID
;
579 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], reg
->arch_num
);
586 case CFG_ADD_REG_GDB_FEATURE
:
588 return ERROR_COMMAND_ARGUMENT_INVALID
;
590 reg
->gdb_xml_feature
= strdup(CMD_ARGV
[0]);
591 if (!reg
->gdb_xml_feature
) {
592 LOG_ERROR("Out of memory");
600 case CFG_ADD_REG_TYPE
:
602 return ERROR_COMMAND_ARGUMENT_INVALID
;
604 type_name
= CMD_ARGV
[0];
609 case CFG_ADD_REG_GENERAL
:
610 reg
->is_general
= true;
614 nvp_unknown_command_print(CMD
, opts_nvp_add_reg
, NULL
, CMD_ARGV
[-1]);
615 return ERROR_COMMAND_ARGUMENT_INVALID
;
619 /* Check that required fields are set */
620 const char * const errmsg
= validate_register(reg
, arch_num_set
);
622 command_print(CMD
, "%s", errmsg
);
623 return ERROR_COMMAND_ARGUMENT_INVALID
;
626 /* Add new register */
627 struct target
*target
= get_current_target(CMD_CTX
);
629 command_print(CMD
, "No current target");
633 reg
->target
= target
;
635 int retval
= arc_reg_add(target
, reg
, type_name
, strlen(type_name
));
636 if (retval
== ERROR_ARC_REGTYPE_NOT_FOUND
) {
638 "Cannot find type `%s' for register `%s'.",
639 type_name
, reg
->name
);
646 COMMAND_HANDLER(arc_handle_add_reg
)
648 struct arc_reg_desc
*reg
= calloc(1, sizeof(*reg
));
650 LOG_ERROR("Out of memory");
654 int retval
= CALL_COMMAND_HANDLER(arc_handle_add_reg_do
, reg
);
655 if (retval
!= ERROR_OK
) {
663 /* arc set-reg-exists ($reg_name)+
664 * Accepts any amount of register names - will set them as existing in a loop.*/
665 COMMAND_HANDLER(arc_set_reg_exists
)
667 struct target
* const target
= get_current_target(CMD_CTX
);
669 command_print(CMD
, "Unable to get current target.");
674 command_print(CMD
, "At least one register name must be specified.");
675 return ERROR_COMMAND_SYNTAX_ERROR
;
678 for (unsigned int i
= 0; i
< CMD_ARGC
; i
++) {
679 const char * const reg_name
= CMD_ARGV
[i
];
680 struct reg
* const r
= arc_reg_get_by_name(target
->reg_cache
, reg_name
, true);
683 command_print(CMD
, "Register `%s' is not found.", reg_name
);
684 return ERROR_COMMAND_ARGUMENT_INVALID
;
693 /* arc reg-field ($reg_name) ($reg_field)
694 * Reads struct type register field */
695 COMMAND_HANDLER(arc_handle_get_reg_field
)
698 return ERROR_COMMAND_SYNTAX_ERROR
;
700 struct target
*target
= get_current_target(CMD_CTX
);
702 command_print(CMD
, "No current target");
706 const char *reg_name
= CMD_ARGV
[0];
707 const char *field_name
= CMD_ARGV
[1];
709 int retval
= arc_reg_get_field(target
, reg_name
, field_name
, &value
);
714 case ERROR_ARC_REGISTER_NOT_FOUND
:
716 "Register `%s' has not been found.", reg_name
);
717 return ERROR_COMMAND_ARGUMENT_INVALID
;
718 case ERROR_ARC_REGISTER_IS_NOT_STRUCT
:
720 "Register `%s' must have 'struct' type.", reg_name
);
721 return ERROR_COMMAND_ARGUMENT_INVALID
;
722 case ERROR_ARC_REGISTER_FIELD_NOT_FOUND
:
724 "Field `%s' has not been found in register `%s'.",
725 field_name
, reg_name
);
726 return ERROR_COMMAND_ARGUMENT_INVALID
;
727 case ERROR_ARC_FIELD_IS_NOT_BITFIELD
:
729 "Field `%s' is not a 'bitfield' field in a structure.",
731 return ERROR_COMMAND_ARGUMENT_INVALID
;
733 /* Pass through other errors. */
737 command_print(CMD
, "0x%" PRIx32
, value
);
742 COMMAND_HANDLER(arc_l1_cache_disable_auto_cmd
)
746 struct arc_common
*arc
= target_to_arc(get_current_target(CMD_CTX
));
747 retval
= CALL_COMMAND_HANDLER(handle_command_parse_bool
,
748 &value
, "target has caches enabled");
749 arc
->has_l2cache
= value
;
750 arc
->has_dcache
= value
;
751 arc
->has_icache
= value
;
755 COMMAND_HANDLER(arc_l2_cache_disable_auto_cmd
)
757 struct arc_common
*arc
= target_to_arc(get_current_target(CMD_CTX
));
758 return CALL_COMMAND_HANDLER(handle_command_parse_bool
,
759 &arc
->has_l2cache
, "target has l2 cache enabled");
762 COMMAND_HANDLER(arc_handle_actionpoints_num
)
767 return ERROR_COMMAND_SYNTAX_ERROR
;
769 struct target
*target
= get_current_target(CMD_CTX
);
771 command_print(CMD
, "No current target");
775 struct arc_common
*arc
= target_to_arc(target
);
776 /* It is not possible to pass &arc->actionpoints_num directly to
777 * handle_command_parse_uint, because this value should be valid during
778 * "actionpoint reset, initiated by arc_set_actionpoints_num. */
779 uint32_t ap_num
= arc
->actionpoints_num
;
782 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[0], ap_num
);
783 int e
= arc_set_actionpoints_num(target
, ap_num
);
786 "Failed to set number of actionpoints");
791 command_print(CMD
, "%" PRIu32
, ap_num
);
796 /* ----- Exported target commands ------------------------------------------ */
798 static const struct command_registration arc_l2_cache_group_handlers
[] = {
801 .handler
= arc_l2_cache_disable_auto_cmd
,
804 .help
= "Disable or enable L2",
806 COMMAND_REGISTRATION_DONE
809 static const struct command_registration arc_cache_group_handlers
[] = {
812 .handler
= arc_l1_cache_disable_auto_cmd
,
814 .help
= "Disable or enable L1",
820 .help
= "L2 cache command group",
822 .chain
= arc_l2_cache_group_handlers
,
824 COMMAND_REGISTRATION_DONE
828 static const struct command_registration arc_core_command_handlers
[] = {
830 .name
= "add-reg-type-flags",
831 .handler
= arc_handle_add_reg_type_flags
,
832 .mode
= COMMAND_CONFIG
,
833 .usage
= "-name <string> -flag <name> <position> "
834 "[-flag <name> <position>]...",
835 .help
= "Add new 'flags' register data type. Only single bit flags "
836 "are supported. Type name is global. Bitsize of register is fixed "
840 .name
= "add-reg-type-struct",
841 .handler
= arc_handle_add_reg_type_struct
,
842 .mode
= COMMAND_CONFIG
,
843 .usage
= "-name <string> -bitfield <name> <start> <end> "
844 "[-bitfield <name> <start> <end>]...",
845 .help
= "Add new 'struct' register data type. Only bit-fields are "
846 "supported so far, which means that for each bitfield start and end "
847 "position bits must be specified. GDB also support type-fields, "
848 "where common type can be used instead. Type name is global. Bitsize of "
849 "register is fixed at 32 bits.",
853 .handler
= arc_handle_add_reg
,
854 .mode
= COMMAND_CONFIG
,
855 .usage
= "-name <string> -num <int> -feature <string> [-gdbnum <int>] "
856 "[-core|-bcr] [-type <type_name>] [-g]",
857 .help
= "Add new register. Name, architectural number and feature name "
858 "are required options. GDB regnum will default to previous register "
859 "(gdbnum + 1) and shouldn't be specified in most cases. Type "
860 "defaults to default GDB 'int'.",
863 .name
= "set-reg-exists",
864 .handler
= arc_set_reg_exists
,
866 .usage
= "<register-name> [<register-name>]...",
867 .help
= "Set that register exists. Accepts multiple register names as "
871 .name
= "get-reg-field",
872 .handler
= arc_handle_get_reg_field
,
874 .usage
= "<regname> <field_name>",
875 .help
= "Returns value of field in a register with 'struct' type.",
880 .help
= "ARC JTAG specific commands",
882 .chain
= arc_jtag_command_group
,
887 .help
= "cache command group",
889 .chain
= arc_cache_group_handlers
,
892 .name
= "num-actionpoints",
893 .handler
= arc_handle_actionpoints_num
,
895 .usage
= "[<unsigned integer>]",
896 .help
= "Prints or sets amount of actionpoints in the processor.",
898 COMMAND_REGISTRATION_DONE
901 const struct command_registration arc_monitor_command_handlers
[] = {
905 .help
= "ARC monitor command group",
907 .chain
= arc_core_command_handlers
,
909 COMMAND_REGISTRATION_DONE