]> git.sur5r.net Git - openocd/commitdiff
jtag: make caller always allocate buffer
authorØyvind Harboe <oyvind.harboe@zylin.com>
Tue, 13 Dec 2011 22:44:34 +0000 (23:44 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Tue, 20 Dec 2011 16:57:34 +0000 (16:57 +0000)
simplifies the API and there is only one remaining user at this point.

Is the implementation busted where the check does not actually happen
now?

Change-Id: I776a43766f5576a08df320f6fe41a2750d101bde
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Reviewed-on: http://openocd.zylin.com/264
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/core.c
src/jtag/jtag.h
src/jtag/minidriver/minidriver_imp.h

index 3090dddd2aaebf96764e08b3dcaaab9027e05a34..529e9bcd1b3b87f39fa1d9b0d54ef9a324c12158 100644 (file)
@@ -417,12 +417,8 @@ static void jtag_add_scan_check(struct jtag_tap *active, void (*jtag_add_scan)(s
        for (int i = 0; i < in_num_fields; i++)
        {
                struct scan_field *field = &in_fields[i];
-               field->allocated = 0;
-               field->modified = 0;
-               if (field->check_value || field->in_value)
-                       continue;
-               interface_jtag_add_scan_check_alloc(field);
-               field->modified = 1;
+               /* caller must provide in_buffer if needed for callback */
+               assert((field->check_value == NULL) || (field->in_value != NULL));
        }
 
        jtag_add_scan(active, in_num_fields, in_fields, state);
@@ -437,14 +433,6 @@ static void jtag_add_scan_check(struct jtag_tap *active, void (*jtag_add_scan)(s
                                (jtag_callback_data_t)in_fields[i].check_mask,
                                (jtag_callback_data_t)in_fields[i].num_bits);
                }
-               if (in_fields[i].allocated)
-               {
-                       free(in_fields[i].in_value);
-               }
-               if (in_fields[i].modified)
-               {
-                       in_fields[i].in_value = NULL;
-               }
        }
 }
 
index 1476150366099491e510571746334c5073b11f51..f4b89a7ffeaf1845ba00cacb088e214ece886851 100644 (file)
@@ -105,8 +105,6 @@ extern tap_state_t cmd_queue_cur_state;
  *
  * In addition, this structure includes a value and mask that is used by
  * jtag_add_dr_scan_check() to validate the value that was scanned out.
- *
- * The allocated, modified, and intmp fields are internal work space.
  */
 struct scan_field {
        /// The number of bits this field specifies (up to 32)
@@ -120,13 +118,6 @@ struct scan_field {
        uint8_t* check_value;
        /// The mask to go with check_value
        uint8_t* check_mask;
-
-       /// in_value has been allocated for the queue
-       int allocated;
-       /// Indicates we modified the in_value.
-       int modified;
-       /// temporary storage for performing value checks synchronously
-       uint8_t intmp[4];
 };
 
 struct jtag_tap {
index b6cdbead5468e4a6e78a3618cb3a75ce0931d555..98d87fe7eb74aa06c8d8e6673bfc60071207c442 100644 (file)
 
 #include <jtag/jtag_minidriver.h>
 
-static inline void interface_jtag_alloc_in_value32(struct scan_field *field)
-{
-       field->in_value = field->intmp;
-}
-
-static inline void interface_jtag_add_scan_check_alloc(struct scan_field *field)
-{
-       /* We're executing this synchronously, so try to use local storage. */
-       if (field->num_bits > 32)
-       {
-               unsigned num_bytes = DIV_ROUND_UP(field->num_bits, 8);
-               field->in_value = (uint8_t *)malloc(num_bytes);
-               field->allocated = 1;
-       }
-       else
-               field->in_value = field->intmp;
-}
-
 static inline void jtag_add_dr_out(struct jtag_tap* tap,
                int num_fields, const int* num_bits, const uint32_t* value,
                tap_state_t end_state)