#include <target/target.h>
#include <jtag/aice/aice_interface.h>
#include <jtag/aice/aice_transport.h>
+#include <string.h>
/* */
-static int jim_newtap_expected_id(Jim_Nvp *n, Jim_GetOptInfo *goi,
- struct jtag_tap *pTap)
+static int jim_newtap_expected_id(struct jim_nvp *n, struct jim_getopt_info *goi,
+ struct jtag_tap *tap)
{
jim_wide w;
- int e = Jim_GetOpt_Wide(goi, &w);
+ int e = jim_getopt_wide(goi, &w);
if (e != JIM_OK) {
Jim_SetResultFormatted(goi->interp, "option: %s bad parameter",
n->name);
return e;
}
- unsigned expected_len = sizeof(uint32_t) * pTap->expected_ids_cnt;
+ unsigned expected_len = sizeof(uint32_t) * tap->expected_ids_cnt;
uint32_t *new_expected_ids = malloc(expected_len + sizeof(uint32_t));
- if (new_expected_ids == NULL) {
+ if (!new_expected_ids) {
Jim_SetResultFormatted(goi->interp, "no memory");
return JIM_ERR;
}
- memcpy(new_expected_ids, pTap->expected_ids, expected_len);
+ assert(tap->expected_ids);
+ memcpy(new_expected_ids, tap->expected_ids, expected_len);
- new_expected_ids[pTap->expected_ids_cnt] = w;
+ new_expected_ids[tap->expected_ids_cnt] = w;
- free(pTap->expected_ids);
- pTap->expected_ids = new_expected_ids;
- pTap->expected_ids_cnt++;
+ free(tap->expected_ids);
+ tap->expected_ids = new_expected_ids;
+ tap->expected_ids_cnt++;
return JIM_OK;
}
#define NTAP_OPT_EXPECTED_ID 0
/* */
-static int jim_aice_newtap_cmd(Jim_GetOptInfo *goi)
+static int jim_aice_newtap_cmd(struct jim_getopt_info *goi)
{
- struct jtag_tap *pTap;
+ struct jtag_tap *tap;
int x;
int e;
- Jim_Nvp *n;
+ struct jim_nvp *n;
char *cp;
- const Jim_Nvp opts[] = {
+ const struct jim_nvp opts[] = {
{.name = "-expected-id", .value = NTAP_OPT_EXPECTED_ID},
{.name = NULL, .value = -1},
};
- pTap = calloc(1, sizeof(struct jtag_tap));
- if (!pTap) {
+ tap = calloc(1, sizeof(struct jtag_tap));
+ if (!tap) {
Jim_SetResultFormatted(goi->interp, "no memory");
return JIM_ERR;
}
if (goi->argc < 3) {
Jim_SetResultFormatted(goi->interp,
"Missing CHIP TAP OPTIONS ....");
- free(pTap);
+ free(tap);
return JIM_ERR;
}
const char *tmp;
- Jim_GetOpt_String(goi, &tmp, NULL);
- pTap->chip = strdup(tmp);
+ jim_getopt_string(goi, &tmp, NULL);
+ tap->chip = strdup(tmp);
- Jim_GetOpt_String(goi, &tmp, NULL);
- pTap->tapname = strdup(tmp);
+ jim_getopt_string(goi, &tmp, NULL);
+ tap->tapname = strdup(tmp);
/* name + dot + name + null */
- x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
+ x = strlen(tap->chip) + 1 + strlen(tap->tapname) + 1;
cp = malloc(x);
- sprintf(cp, "%s.%s", pTap->chip, pTap->tapname);
- pTap->dotted_name = cp;
+ sprintf(cp, "%s.%s", tap->chip, tap->tapname);
+ tap->dotted_name = cp;
LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
- pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
+ tap->chip, tap->tapname, tap->dotted_name, goi->argc);
while (goi->argc) {
- e = Jim_GetOpt_Nvp(goi, opts, &n);
+ e = jim_getopt_nvp(goi, opts, &n);
if (e != JIM_OK) {
- Jim_GetOpt_NvpUnknown(goi, opts, 0);
+ jim_getopt_nvp_unknown(goi, opts, 0);
free(cp);
- free(pTap);
+ free(tap);
return e;
}
LOG_DEBUG("Processing option: %s", n->name);
switch (n->value) {
case NTAP_OPT_EXPECTED_ID:
- e = jim_newtap_expected_id(n, goi, pTap);
- if (JIM_OK != e) {
+ e = jim_newtap_expected_id(n, goi, tap);
+ if (e != JIM_OK) {
free(cp);
- free(pTap);
+ free(tap);
return e;
}
break;
} /* while (goi->argc) */
/* default is enabled-after-reset */
- pTap->enabled = !pTap->disabled_after_reset;
+ tap->enabled = !tap->disabled_after_reset;
- jtag_tap_init(pTap);
+ jtag_tap_init(tap);
return JIM_OK;
}
/* */
static int jim_aice_newtap(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
{
- Jim_GetOptInfo goi;
- Jim_GetOpt_Setup(&goi, interp, argc - 1, argv + 1);
+ struct jim_getopt_info goi;
+ jim_getopt_setup(&goi, interp, argc - 1, argv + 1);
return jim_aice_newtap_cmd(&goi);
}
return jtag_init(CMD_CTX);
}
+COMMAND_HANDLER(handle_scan_chain_command)
+{
+ struct jtag_tap *tap;
+ char expected_id[12];
+
+ aice_scan_jtag_chain();
+ tap = jtag_all_taps();
+ command_print(CMD,
+ " TapName Enabled IdCode Expected IrLen IrCap IrMask");
+ command_print(CMD,
+ "-- ------------------- -------- ---------- ---------- ----- ----- ------");
+
+ while (tap) {
+ uint32_t expected, expected_mask, ii;
+
+ snprintf(expected_id, sizeof(expected_id), "0x%08x",
+ (unsigned)((tap->expected_ids_cnt > 0)
+ ? tap->expected_ids[0]
+ : 0));
+ if (tap->ignore_version)
+ expected_id[2] = '*';
+
+ expected = buf_get_u32(tap->expected, 0, tap->ir_length);
+ expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
+
+ command_print(CMD,
+ "%2d %-18s %c 0x%08x %s %5d 0x%02x 0x%02x",
+ tap->abs_chain_position,
+ tap->dotted_name,
+ tap->enabled ? 'Y' : 'n',
+ (unsigned int)(tap->idcode),
+ expected_id,
+ (unsigned int)(tap->ir_length),
+ (unsigned int)(expected),
+ (unsigned int)(expected_mask));
+
+ for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
+ snprintf(expected_id, sizeof(expected_id), "0x%08x",
+ (unsigned) tap->expected_ids[ii]);
+ if (tap->ignore_version)
+ expected_id[2] = '*';
+
+ command_print(CMD,
+ " %s",
+ expected_id);
+ }
+
+ tap = tap->next_tap;
+ }
+
+ return ERROR_OK;
+}
+
static int jim_aice_arp_init(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
{
LOG_DEBUG("No implement: jim_aice_arp_init");
static int jim_aice_arp_init_reset(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
{
int e = ERROR_OK;
- Jim_GetOptInfo goi;
- Jim_GetOpt_Setup(&goi, interp, argc - 1, argv + 1);
+ struct jim_getopt_info goi;
+ jim_getopt_setup(&goi, interp, argc - 1, argv + 1);
if (goi.argc != 0) {
Jim_WrongNumArgs(goi.interp, 1, goi.argv - 1, "(no params)");
return JIM_ERR;
e = aice_init_reset(context);
if (e != ERROR_OK) {
- Jim_Obj *eObj = Jim_NewIntObj(goi.interp, e);
- Jim_SetResultFormatted(goi.interp, "error: %#s", eObj);
- Jim_FreeNewObj(goi.interp, eObj);
+ Jim_Obj *obj = Jim_NewIntObj(goi.interp, e);
+ Jim_SetResultFormatted(goi.interp, "error: %#s", obj);
return JIM_ERR;
}
return JIM_OK;
static int jim_aice_names(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
- Jim_GetOptInfo goi;
- Jim_GetOpt_Setup(&goi, interp, argc - 1, argv + 1);
+ struct jim_getopt_info goi;
+ jim_getopt_setup(&goi, interp, argc - 1, argv + 1);
if (goi.argc != 0) {
Jim_WrongNumArgs(goi.interp, 1, goi.argv, "Too many parameters");
return JIM_ERR;
},
{
.name = "configure",
- .mode = COMMAND_EXEC,
+ .mode = COMMAND_ANY,
.jim_handler = jim_jtag_configure,
.help = "Provide a Tcl handler for the specified "
"TAP event.",
.jim_handler = jim_aice_names,
.help = "Returns list of all JTAG tap names.",
},
+ {
+ .name = "scan_chain",
+ .handler = handle_scan_chain_command,
+ .mode = COMMAND_ANY,
+ .help = "print current scan chain configuration",
+ .usage = ""
+ },
COMMAND_REGISTRATION_DONE
};
/* */
static int aice_transport_register_commands(struct command_context *cmd_ctx)
{
- return register_commands(cmd_ctx, NULL,
- aice_transport_command_handlers);
+ return register_commands(cmd_ctx, NULL, aice_transport_command_handlers);
}
/* */
{
transport_register(&aice_jtag_transport);
}
-