X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fdriver.c;h=3bce5d5755a183c9f59ca5fa1d94fa1b993a9ae3;hb=d70d9634bf6ab73ec4f2ac1e77012785770b460a;hp=1e9af54b8fe9031451976efd6c9a96d8738552d2;hpb=53d605e12c3765aeedabf2bfe0c5cc338dc95d5a;p=openocd.git diff --git a/src/jtag/driver.c b/src/jtag/driver.c index 1e9af54b8f..3bce5d5755 100644 --- a/src/jtag/driver.c +++ b/src/jtag/driver.c @@ -418,7 +418,7 @@ int interface_jtag_add_runtest(int num_cycles, tap_state_t state) return ERROR_OK; } -int interface_jtag_add_clocks( int num_cycles ) +int interface_jtag_add_clocks(int num_cycles) { /* allocate memory for a new list member */ jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t)); @@ -467,35 +467,40 @@ int interface_jtag_add_sleep(uint32_t us) /* add callback to end of queue */ void interface_jtag_add_callback4(jtag_callback_t callback, jtag_callback_data_t data0, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3) { - struct jtag_callback_entry *entry=cmd_queue_alloc(sizeof(struct jtag_callback_entry)); + struct jtag_callback_entry *entry = cmd_queue_alloc(sizeof(struct jtag_callback_entry)); - entry->next=NULL; - entry->callback=callback; - entry->data0=data0; - entry->data1=data1; - entry->data2=data2; - entry->data3=data3; + entry->next = NULL; + entry->callback = callback; + entry->data0 = data0; + entry->data1 = data1; + entry->data2 = data2; + entry->data3 = data3; - if (jtag_callback_queue_head==NULL) + if (jtag_callback_queue_head == NULL) { - jtag_callback_queue_head=entry; - jtag_callback_queue_tail=entry; + jtag_callback_queue_head = entry; + jtag_callback_queue_tail = entry; } else { - jtag_callback_queue_tail->next=entry; - jtag_callback_queue_tail=entry; + jtag_callback_queue_tail->next = entry; + jtag_callback_queue_tail = entry; } } int interface_jtag_execute_queue(void) { + static int reentry = 0; + + assert(reentry==0); + reentry++; + int retval = default_interface_jtag_execute_queue(); if (retval == ERROR_OK) { struct jtag_callback_entry *entry; - for (entry=jtag_callback_queue_head; entry != NULL; entry=entry->next) + for (entry = jtag_callback_queue_head; entry != NULL; entry = entry->next) { - retval=entry->callback(entry->data0, entry->data1, entry->data2, entry->data3); + retval = entry->callback(entry->data0, entry->data1, entry->data2, entry->data3); if (retval != ERROR_OK) break; } @@ -504,6 +509,8 @@ int interface_jtag_execute_queue(void) jtag_command_queue_reset(); jtag_callback_queue_reset(); + reentry--; + return retval; }