That function basically exists in the xsvf.c file, so some factoring may 
be possible.

Here is a copy of my current work:


> Single stepping is broken in ARM11 w/parport interface(and
> others). I'm working on adding a jtag_add_statemove() fn
> that will sit on top of jtag_add_pathmove() that is probably
> necessary to implement more robust ARM11 support.
>
>
>   


/**
 * Function xsvf_add_statemove
 * moves from the current state to the goal \a state. This needs
 * to be handled according to the xsvf spec, which has nothing
 * to do with the JTAG spec or OpenOCD as such.
 *
 * Implemented via jtag_add_pathmove().
 */
static void xsvf_add_statemove(tap_state_t goal_state)
{
    tap_state_t moves[8];
    tap_state_t cur_state = cmd_queue_cur_state;
    int i;

    int tms_bits  = tap_get_tms_path(cur_state, goal_state);
    int    tms_count = tap_get_tms_path_len(cur_state, goal_state);

    LOG_DEBUG( "cur_state=%s goal_state=%s tms_bits=%02x tms_count=%d",
        tap_state_name(cur_state), tap_state_name(goal_state),
        tms_bits, tms_count );

    assert( (unsigned) tms_count < DIM(moves) );

    if (goal_state != TAP_RESET  &&  goal_state==cur_state)
        return;

    if( cur_state==TAP_RESET )
    {
        jtag_add_tlr();
        return;
    }


    for (i=0;   i<tms_count;   i++, tms_bits>>=1)
    {
        bool bit = tms_bits & 1;

        cur_state = tap_state_transition(cur_state, bit);
        moves[i] = cur_state;
    }

    jtag_add_pathmove(tms_count, moves);
}


_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to