diff options
author | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-02 05:47:00 +0000 |
---|---|---|
committer | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-02 05:47:00 +0000 |
commit | 6ef5a622af24a3644c1ebd5cf690bd5c38e6d8a3 (patch) | |
tree | a2e63f4e975e676f99efdcb4e477dbab9a442c89 /src | |
parent | 76bd16e9e343b3ac10245a9b76c032b10596bd6d (diff) | |
download | openocd+libswd-6ef5a622af24a3644c1ebd5cf690bd5c38e6d8a3.tar.gz openocd+libswd-6ef5a622af24a3644c1ebd5cf690bd5c38e6d8a3.tar.bz2 openocd+libswd-6ef5a622af24a3644c1ebd5cf690bd5c38e6d8a3.tar.xz openocd+libswd-6ef5a622af24a3644c1ebd5cf690bd5c38e6d8a3.zip |
Clean up jtag command queue handling:
- Rename last_command_pointer as next_command_pointer, because this variable
stores the address where jtag_queue_command() will store a command pointer.
- Make that variable static, since it is only used internally in jtag.c.
- Remove superfluous accessor for that now-static variable.
- Deobfuscate use of variables in jtag_command_queue.
- Add jtag_command_queue_reset helper function.
- Use it in interface_jtag_execute_queue.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1992 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/jtag.c | 49 |
1 files changed, 17 insertions, 32 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index 64a168cb..d55888ca 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -91,7 +91,7 @@ static struct jtag_callback_entry *jtag_callback_queue_tail = NULL; jtag_command_t *jtag_command_queue = NULL; -jtag_command_t **last_command_pointer = &jtag_command_queue; +static jtag_command_t **next_command_pointer = &jtag_command_queue; static jtag_tap_t *jtag_all_taps = NULL; enum reset_types jtag_reset_config = RESET_NONE; @@ -423,40 +423,20 @@ int jtag_call_event_callbacks(enum jtag_event event) return ERROR_OK; } -/* returns a pointer to the pointer of the last command in queue - * this may be a pointer to the root pointer (jtag_command_queue) - * or to the next member of the last but one command - */ -jtag_command_t** jtag_get_last_command_p(void) -{ -/* jtag_command_t *cmd = jtag_command_queue; - - if (cmd) - while (cmd->next) - cmd = cmd->next; - else - return &jtag_command_queue; - - return &cmd->next;*/ - - return last_command_pointer; -} - - void jtag_queue_command(jtag_command_t * cmd) { - jtag_command_t **last_cmd; - - last_cmd = jtag_get_last_command_p(); + // this command goes on the end, so ensure the queue terminates + cmd->next = NULL; + jtag_command_t **last_cmd = next_command_pointer; + assert(NULL != last_cmd); + assert(NULL == *last_cmd); *last_cmd = cmd; - (*last_cmd)->next = NULL; - - last_command_pointer = &((*last_cmd)->next); + // store location where the next command pointer will be stored + next_command_pointer = &cmd->next; } - void* cmd_queue_alloc(size_t size) { cmd_queue_page_t **p_page = &cmd_queue_pages; @@ -533,6 +513,14 @@ void cmd_queue_free(void) cmd_queue_pages = NULL; } +void jtag_command_queue_reset(void) +{ + cmd_queue_free(); + + jtag_command_queue = NULL; + next_command_pointer = &jtag_command_queue; +} + /** * Copy a scan_field_t for insertion into the queue. * @@ -1595,13 +1583,10 @@ int interface_jtag_execute_queue(void) } } - cmd_queue_free(); - jtag_callback_queue_head = NULL; jtag_callback_queue_tail = NULL; - jtag_command_queue = NULL; - last_command_pointer = &jtag_command_queue; + jtag_command_queue_reset(); return retval; } |