> I bet that they have been deliberatly avoided in these functions
> because of performance penalities...

So it should go like this?

--- a/src/target/mips_ejtag.c
+++ b/src/target/mips_ejtag.c
@@ -339,10 +339,15 @@ int mips_ejtag_init(struct mips_ejtag *ejtag_info)
        return ERROR_OK;
 }
 
+static __inline__ void mips_le_to_h_u32(jtag_callback_data_t arg)
+{
+  uint8_t *in = (uint8_t *)arg;
+  *((uint32_t *)arg) = le_to_h_u32(in);
+}
+
 int mips_ejtag_fastdata_scan(struct mips_ejtag *ejtag_info, int write_t, 
uint32_t *data)
 {
        struct jtag_tap *tap;
-       uint8_t r[4];
 
        tap = ejtag_info->tap;
        assert(tap != NULL);
@@ -367,15 +372,14 @@ int mips_ejtag_fastdata_scan(struct mips_ejtag 
*ejtag_info, int write_t, ui
        }
        else
        {
-               fields[1].in_value = r;
+               fields[1].in_value = (void *) data;
        }
 
        jtag_add_dr_scan(tap, 2, fields, TAP_IDLE);
 
-       if (!write_t)
-       {
-               *data = buf_get_u32(fields[1].in_value, 0, 32);
-       }
+       if ( (!write_t) && (data) )
+                       jtag_add_callback(mips_le_to_h_u32,
+                               (jtag_callback_data_t) data);
 
        keep_alive();
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to