aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Mahr <stefan.mahr@sphairon.com>2011-08-10 22:34:41 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2011-08-12 12:00:42 +0200
commit28f088dc661d4c0e50c60876a5d6eec13d144c0c (patch)
tree4a02fa3926fbef4693ae5d8d14797e338c512891
parent85cf298667fbb64ebffed4a1db57223535a888c9 (diff)
downloadriscv-openocd-28f088dc661d4c0e50c60876a5d6eec13d144c0c.zip
riscv-openocd-28f088dc661d4c0e50c60876a5d6eec13d144c0c.tar.gz
riscv-openocd-28f088dc661d4c0e50c60876a5d6eec13d144c0c.tar.bz2
target: add helper functions to get/set u16 or u32 array from/to buffer
-rw-r--r--src/target/target.c32
-rw-r--r--src/target/target.h5
2 files changed, 37 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 0343156..b71d839 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -348,6 +348,38 @@ static void target_buffer_set_u8(struct target *target, uint8_t *buffer, uint8_t
*buffer = value;
}
+/* write a uint32_t array to a buffer in target memory endianness */
+void target_buffer_get_u32_array(struct target *target, const uint8_t *buffer, uint32_t count, uint32_t *dstbuf)
+{
+ uint32_t i;
+ for(i = 0; i < count; i ++)
+ dstbuf[i] = target_buffer_get_u32(target,&buffer[i*4]);
+}
+
+/* write a uint16_t array to a buffer in target memory endianness */
+void target_buffer_get_u16_array(struct target *target, const uint8_t *buffer, uint32_t count, uint16_t *dstbuf)
+{
+ uint32_t i;
+ for(i = 0; i < count; i ++)
+ dstbuf[i] = target_buffer_get_u16(target,&buffer[i*2]);
+}
+
+/* write a uint32_t array to a buffer in target memory endianness */
+void target_buffer_set_u32_array(struct target *target, uint8_t *buffer, uint32_t count, uint32_t *srcbuf)
+{
+ uint32_t i;
+ for(i = 0; i < count; i ++)
+ target_buffer_set_u32(target,&buffer[i*4],srcbuf[i]);
+}
+
+/* write a uint16_t array to a buffer in target memory endianness */
+void target_buffer_set_u16_array(struct target *target, uint8_t *buffer, uint32_t count, uint16_t *srcbuf)
+{
+ uint32_t i;
+ for(i = 0; i < count; i ++)
+ target_buffer_set_u16(target,&buffer[i*2],srcbuf[i]);
+}
+
/* return a pointer to a configured target; id is name or number */
struct target *get_target(const char *id)
{
diff --git a/src/target/target.h b/src/target/target.h
index 74f74de..1b5730f 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -524,6 +524,11 @@ void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t valu
void target_buffer_set_u24(struct target *target, uint8_t *buffer, uint32_t value);
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value);
+void target_buffer_get_u32_array(struct target *target, const uint8_t *buffer, uint32_t count, uint32_t *dstbuf);
+void target_buffer_get_u16_array(struct target *target, const uint8_t *buffer, uint32_t count, uint16_t *dstbuf);
+void target_buffer_set_u32_array(struct target *target, uint8_t *buffer, uint32_t count, uint32_t *srcbuf);
+void target_buffer_set_u16_array(struct target *target, uint8_t *buffer, uint32_t count, uint16_t *srcbuf);
+
int target_read_u32(struct target *target, uint32_t address, uint32_t *value);
int target_read_u16(struct target *target, uint32_t address, uint16_t *value);
int target_read_u8(struct target *target, uint32_t address, uint8_t *value);