summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorMathias K <kesmtp@freenet.de>2011-02-02 17:38:38 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2011-02-03 12:23:55 +0100
commitb0bdc4e2f2b4fd31ae3b0ebf47765e88c4c37556 (patch)
treef0d7ba0d2d7fd04707ef3d06b6b3ffbe97fb8e81 /src/target
parentaaf145c42201496007e0fc9168d9738cb0237717 (diff)
downloadopenocd+libswd-b0bdc4e2f2b4fd31ae3b0ebf47765e88c4c37556.tar.gz
openocd+libswd-b0bdc4e2f2b4fd31ae3b0ebf47765e88c4c37556.tar.bz2
openocd+libswd-b0bdc4e2f2b4fd31ae3b0ebf47765e88c4c37556.tar.xz
openocd+libswd-b0bdc4e2f2b4fd31ae3b0ebf47765e88c4c37556.zip
24bit buffer support
Hello, this patch add 24bit support to the target buffer functions and little/big endian functions. Regards, Mathias
Diffstat (limited to 'src/target')
-rw-r--r--src/target/target.c18
-rw-r--r--src/target/target.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/src/target/target.c b/src/target/target.c
index 66aa6bf7..3a6c6bb4 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -280,6 +280,15 @@ uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer)
return be_to_h_u32(buffer);
}
+/* read a uint24_t from a buffer in target memory endianness */
+uint32_t target_buffer_get_u24(struct target *target, const uint8_t *buffer)
+{
+ if (target->endianness == TARGET_LITTLE_ENDIAN)
+ return le_to_h_u24(buffer);
+ else
+ return be_to_h_u24(buffer);
+}
+
/* read a uint16_t from a buffer in target memory endianness */
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer)
{
@@ -304,6 +313,15 @@ void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t valu
h_u32_to_be(buffer, value);
}
+/* write a uint24_t to a buffer in target memory endianness */
+void target_buffer_set_u24(struct target *target, uint8_t *buffer, uint32_t value)
+{
+ if (target->endianness == TARGET_LITTLE_ENDIAN)
+ h_u24_to_le(buffer, value);
+ else
+ h_u24_to_be(buffer, value);
+}
+
/* write a uint16_t to a buffer in target memory endianness */
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value)
{
diff --git a/src/target/target.h b/src/target/target.h
index 2c6f4cd5..2bf96689 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -479,8 +479,10 @@ void target_free_all_working_areas(struct target *target);
extern struct target *all_targets;
uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer);
+uint32_t target_buffer_get_u24(struct target *target, const uint8_t *buffer);
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer);
void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t value);
+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);
int target_read_u32(struct target *target, uint32_t address, uint32_t *value);