Пример #1
0
static int
set_pld_driver (urj_chain_t *chain, urj_part_t *part)
{
    int i;
    uint32_t idcode;

    pld_driver = NULL;
    pld.chain = chain;
    pld.part = part;

    for (i = 0; urj_pld_drivers[i] != NULL; i++)
    {
        if (urj_pld_drivers[i]->detect (&pld) == URJ_STATUS_OK)
        {
            pld_driver = urj_pld_drivers[i];
            return URJ_STATUS_OK;
        }
    }

    idcode = urj_tap_register_get_value (part->id);
    urj_log (URJ_LOG_LEVEL_ERROR,
             _("No PLD driver for device with ID %08x\n"),
             idcode);

    urj_error_set (URJ_ERROR_UNSUPPORTED, _("PLD not supported"));

    return URJ_STATUS_FAIL;
}
Пример #2
0
static uint32_t dsu_readIR(urj_chain_t *chain)
{
  urj_tap_capture_ir(chain);
  wir = urj_tap_register_fill(wir, 1);
  urj_tap_shift_register(chain, wir, dsurir, URJ_CHAIN_EXITMODE_IDLE);
  return urj_tap_register_get_value(dsurir);
}
Пример #3
0
uint64_t
emudat_value (urj_tap_register_t *r)
{
    uint64_t value;

    value = urj_tap_register_get_value (r);
    value >>= (r->len - 32);

    return value;
}
Пример #4
0
static uint64_t dsu_readDR(urj_chain_t *chain, int size, uint64_t wdata)
{
  urj_tap_register_t *rwr = urj_tap_register_alloc(size);
  urj_tap_register_t *rrd = urj_tap_register_fill(urj_tap_register_alloc(size), 0);
  uint64_t rdata;
  urj_tap_register_set_value(rwr, wdata);
  urj_tap_capture_dr(chain);
  urj_tap_shift_register(chain, rwr, rrd, URJ_CHAIN_EXITMODE_IDLE);
  rdata = urj_tap_register_get_value(rrd);
  urj_tap_register_free(rwr);
  urj_tap_register_free(rrd);
  return rdata;
}
Пример #5
0
uint32_t
part_emupc_get (urj_chain_t *chain, int n, int save)
{
    urj_part_t *part;
    urj_tap_register_t *r;

    assert (n >= 0 && n < chain->parts->len);

    part_scan_select (chain, n, EMUPC_SCAN);

    urj_tap_chain_shift_data_registers_mode (chain, 1, 1, URJ_CHAIN_EXITMODE_UPDATE);

    part = chain->parts->parts[n];
    r = part->active_instruction->data_register->out;
    BFIN_PART_EMUPC (part) = urj_tap_register_get_value (r);
    if (save)
        BFIN_PART_EMUPC_ORIG (part) = BFIN_PART_EMUPC (part);

    return BFIN_PART_EMUPC (part);
}
Пример #6
0
static uint16_t
bfin_dbgstat_value (urj_part_t *part)
{
    return urj_tap_register_get_value (part->active_instruction->data_register->out);
}
Пример #7
0
static int
cmd_dr_run (urj_chain_t *chain, char *params[])
{
    int dir = 1;
    urj_part_t *part;
    urj_tap_register_t *r;
    urj_data_register_t *dr;
    urj_part_instruction_t *active_ir;

    if (urj_cmd_params (params) < 1 || urj_cmd_params (params) > 2)
    {
        urj_error_set (URJ_ERROR_SYNTAX,
                       "%s: #parameters should be >= 1 and <= 2, not %d",
                       params[0], urj_cmd_params (params));
        return URJ_STATUS_FAIL;
    }

    if (urj_cmd_test_cable (chain) != URJ_STATUS_OK)
        return URJ_STATUS_FAIL;

    part = urj_tap_chain_active_part (chain);
    if (part == NULL)
        return URJ_STATUS_FAIL;

    active_ir = part->active_instruction;
    if (active_ir == NULL)
    {
        urj_error_set (URJ_ERROR_ILLEGAL_STATE,
                       _("%s: part without active instruction"), "dr");
        return URJ_STATUS_FAIL;
    }
    dr = active_ir->data_register;
    if (dr == NULL)
    {
        urj_error_set (URJ_ERROR_ILLEGAL_STATE,
                       _("%s: instruction without active data register"), "dr");
        return URJ_STATUS_FAIL;
    }

    if (params[1])
    {
        if (strcasecmp (params[1], "in") == 0)
            dir = 0;
        else if (strcasecmp (params[1], "out") == 0)
            dir = 1;
        else
        {
            int ret = urj_tap_register_set_string (dr->in, params[1]);
            if (ret != URJ_STATUS_OK)
                return ret;
            dir = 0;
        }
    }

    if (dir)
        r = dr->out;
    else
        r = dr->in;
    urj_log (URJ_LOG_LEVEL_NORMAL, "%s (0x%0*" PRIX64 ")\n",
             urj_tap_register_get_string (r), r->len / 4,
             urj_tap_register_get_value (r));

    return URJ_STATUS_OK;
}