Clean up the core JTAG TAP APIs:
- Move jtag_tap_name to same location as other TAP functions; export it. - Factor new jtag_tap_add() from jim_newtap_cmd(); appends TAP to global list. - Move static chain position counter to global; use in jtag_NumTotalTaps(). - Use jtag_AllTaps for reading tap list, instead of accessing global directly. git-svn-id: svn://svn.berlios.de/openocd/trunk@2055 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
82a5f6ff3e
commit
d3d02f4789
|
@ -63,7 +63,15 @@ const Jim_Nvp nvp_jtag_tap_event[] = {
|
||||||
int jtag_trst = 0;
|
int jtag_trst = 0;
|
||||||
int jtag_srst = 0;
|
int jtag_srst = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List all TAPs that have been created.
|
||||||
|
*/
|
||||||
static jtag_tap_t *jtag_all_taps = NULL;
|
static jtag_tap_t *jtag_all_taps = NULL;
|
||||||
|
/**
|
||||||
|
* The number of TAPs in the jtag_all_taps list, used to track the
|
||||||
|
* assigned chain position to new TAPs
|
||||||
|
*/
|
||||||
|
static int jtag_num_taps = 0;
|
||||||
|
|
||||||
enum reset_types jtag_reset_config = RESET_NONE;
|
enum reset_types jtag_reset_config = RESET_NONE;
|
||||||
tap_state_t cmd_queue_end_state = TAP_RESET;
|
tap_state_t cmd_queue_end_state = TAP_RESET;
|
||||||
|
@ -235,16 +243,7 @@ jtag_tap_t *jtag_AllTaps(void)
|
||||||
|
|
||||||
int jtag_NumTotalTaps(void)
|
int jtag_NumTotalTaps(void)
|
||||||
{
|
{
|
||||||
jtag_tap_t *t;
|
return jtag_num_taps;
|
||||||
int n;
|
|
||||||
|
|
||||||
n = 0;
|
|
||||||
t = jtag_AllTaps();
|
|
||||||
while(t){
|
|
||||||
n++;
|
|
||||||
t = t->next_tap;
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int jtag_NumEnabledTaps(void)
|
int jtag_NumEnabledTaps(void)
|
||||||
|
@ -263,6 +262,17 @@ int jtag_NumEnabledTaps(void)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Append a new TAP to the chain of all taps.
|
||||||
|
static void jtag_tap_add(struct jtag_tap_s *t)
|
||||||
|
{
|
||||||
|
t->abs_chain_position = jtag_num_taps++;
|
||||||
|
|
||||||
|
jtag_tap_t **tap = &jtag_all_taps;
|
||||||
|
while(*tap != NULL)
|
||||||
|
tap = &(*tap)->next_tap;
|
||||||
|
*tap = t;
|
||||||
|
}
|
||||||
|
|
||||||
jtag_tap_t *jtag_TapByString( const char *s )
|
jtag_tap_t *jtag_TapByString( const char *s )
|
||||||
{
|
{
|
||||||
jtag_tap_t *t;
|
jtag_tap_t *t;
|
||||||
|
@ -324,6 +334,12 @@ jtag_tap_t * jtag_TapByAbsPosition( int n )
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *jtag_tap_name(const jtag_tap_t *tap)
|
||||||
|
{
|
||||||
|
return (tap == NULL) ? "(unknown)" : tap->dotted_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
|
int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
|
||||||
{
|
{
|
||||||
jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
|
jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
|
||||||
|
@ -798,11 +814,6 @@ void jtag_add_sleep(u32 us)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *jtag_tap_name(const jtag_tap_t *tap)
|
|
||||||
{
|
|
||||||
return (tap == NULL) ? "(unknown)" : tap->dotted_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits)
|
int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits)
|
||||||
{
|
{
|
||||||
int retval = ERROR_OK;
|
int retval = ERROR_OK;
|
||||||
|
@ -1262,7 +1273,6 @@ static int jtag_tap_configure_cmd( Jim_GetOptInfo *goi, jtag_tap_t * tap)
|
||||||
static int jim_newtap_cmd( Jim_GetOptInfo *goi )
|
static int jim_newtap_cmd( Jim_GetOptInfo *goi )
|
||||||
{
|
{
|
||||||
jtag_tap_t *pTap;
|
jtag_tap_t *pTap;
|
||||||
jtag_tap_t **ppTap;
|
|
||||||
jim_wide w;
|
jim_wide w;
|
||||||
int x;
|
int x;
|
||||||
int e;
|
int e;
|
||||||
|
@ -1429,21 +1439,12 @@ static int jim_newtap_cmd( Jim_GetOptInfo *goi )
|
||||||
|
|
||||||
jtag_register_event_callback(jtag_reset_callback, pTap );
|
jtag_register_event_callback(jtag_reset_callback, pTap );
|
||||||
|
|
||||||
ppTap = &(jtag_all_taps);
|
jtag_tap_add(pTap);
|
||||||
while( (*ppTap) != NULL ){
|
|
||||||
ppTap = &((*ppTap)->next_tap);
|
LOG_DEBUG("Created Tap: %s @ abs position %d, "
|
||||||
}
|
"irlen %d, capture: 0x%x mask: 0x%x", pTap->dotted_name,
|
||||||
*ppTap = pTap;
|
pTap->abs_chain_position, pTap->ir_length,
|
||||||
{
|
pTap->ir_capture_value, pTap->ir_capture_mask);
|
||||||
static int n_taps = 0;
|
|
||||||
pTap->abs_chain_position = n_taps++;
|
|
||||||
}
|
|
||||||
LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
|
|
||||||
(*ppTap)->dotted_name,
|
|
||||||
(*ppTap)->abs_chain_position,
|
|
||||||
(*ppTap)->ir_length,
|
|
||||||
(*ppTap)->ir_capture_value,
|
|
||||||
(*ppTap)->ir_capture_mask );
|
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -1914,7 +1915,7 @@ static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
{
|
{
|
||||||
jtag_tap_t *tap;
|
jtag_tap_t *tap;
|
||||||
|
|
||||||
tap = jtag_all_taps;
|
tap = jtag_AllTaps();
|
||||||
command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
|
command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
|
||||||
command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
|
command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,7 @@ struct jtag_tap_s
|
||||||
jtag_tap_t* next_tap;
|
jtag_tap_t* next_tap;
|
||||||
};
|
};
|
||||||
extern jtag_tap_t* jtag_AllTaps(void);
|
extern jtag_tap_t* jtag_AllTaps(void);
|
||||||
|
extern const char *jtag_tap_name(const jtag_tap_t *tap);
|
||||||
extern jtag_tap_t* jtag_TapByPosition(int n);
|
extern jtag_tap_t* jtag_TapByPosition(int n);
|
||||||
extern jtag_tap_t* jtag_TapByString(const char* dotted_name);
|
extern jtag_tap_t* jtag_TapByString(const char* dotted_name);
|
||||||
extern jtag_tap_t* jtag_TapByJimObj(Jim_Interp* interp, Jim_Obj* obj);
|
extern jtag_tap_t* jtag_TapByJimObj(Jim_Interp* interp, Jim_Obj* obj);
|
||||||
|
|
Loading…
Reference in New Issue