[Pdbg] [PATCH 1/5] adu: Convert __adu_{get, put}mem_blocksize to adu functions

Amitay Isaacs amitay at ozlabs.org
Mon Jan 7 15:30:16 AEDT 2019


This will help add a generic read/write methods for adu class.

Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 libpdbg/adu.c | 76 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 53 insertions(+), 23 deletions(-)

diff --git a/libpdbg/adu.c b/libpdbg/adu.c
index 5cb1373..b2e80ee 100644
--- a/libpdbg/adu.c
+++ b/libpdbg/adu.c
@@ -110,17 +110,13 @@ uint8_t blog2(uint8_t x)
 	}
 }
 
-static int __adu_getmem_blocksize(struct pdbg_target *adu_target, uint64_t start_addr,
-				  uint8_t *output, uint64_t size, uint8_t block_size, bool ci)
+static int adu_read(struct adu *adu, uint64_t start_addr, uint8_t *output,
+		    uint64_t size, uint8_t block_size, bool ci)
 {
-	struct adu *adu;
 	uint8_t *output0;
 	int rc = 0;
 	uint64_t addr0, addr;
 
-	assert(!strcmp(adu_target->class, "adu"));
-	adu = target_to_adu(adu_target);
-
 	output0 = output;
 
 	/* Align start address to block_sized boundary */
@@ -164,41 +160,55 @@ static int __adu_getmem_blocksize(struct pdbg_target *adu_target, uint64_t start
 int adu_getmem(struct pdbg_target *adu_target, uint64_t start_addr,
 	       uint8_t *output, uint64_t size)
 {
-	return __adu_getmem_blocksize(adu_target, start_addr, output,
-				      size, 8, false);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_read(adu, start_addr, output, size, 8, false);
 }
 
 int adu_getmem_ci(struct pdbg_target *adu_target, uint64_t start_addr,
 		  uint8_t *output, uint64_t size)
 {
-	return __adu_getmem_blocksize(adu_target, start_addr, output,
-			    size, 8, true);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_read(adu, start_addr, output, size, 8, true);
 }
 
 int adu_getmem_io(struct pdbg_target *adu_target, uint64_t start_addr,
 		  uint8_t *output, uint64_t size, uint8_t blocksize)
 {
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
 	/* There is no equivalent for cachable memory as blocksize
 	 * does not apply to cachable reads */
-	return __adu_getmem_blocksize(adu_target, start_addr, output,
-				      size, blocksize, true);
+	return adu_read(adu, start_addr, output, size, blocksize, true);
 }
 
 int __adu_getmem(struct pdbg_target *adu_target, uint64_t start_addr,
 		 uint8_t *output, uint64_t size, bool ci)
 {
-	return __adu_getmem_blocksize(adu_target, start_addr, output,
-				      size, 8, ci);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_read(adu, start_addr, output, size, 8, ci);
 }
-static int __adu_putmem_blocksize(struct pdbg_target *adu_target, uint64_t start_addr,
-				  uint8_t *input, uint64_t size, uint8_t block_size, bool ci)
+
+static int adu_write(struct adu *adu, uint64_t start_addr, uint8_t *input,
+		     uint64_t size, uint8_t block_size, bool ci)
 {
-	struct adu *adu;
 	int rc = 0, tsize;
 	uint64_t addr, data, end_addr;
 
-	assert(!strcmp(adu_target->class, "adu"));
-	adu = target_to_adu(adu_target);
 	end_addr = start_addr + size;
 	for (addr = start_addr; addr < end_addr; addr += tsize, input += tsize) {
 		if ((addr % block_size) || (addr + block_size > end_addr)) {
@@ -231,25 +241,45 @@ static int __adu_putmem_blocksize(struct pdbg_target *adu_target, uint64_t start
 int adu_putmem(struct pdbg_target *adu_target, uint64_t start_addr,
 	       uint8_t *input, uint64_t size)
 {
-	return __adu_putmem_blocksize(adu_target, start_addr, input, size, 8, false);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_write(adu, start_addr, input, size, 8, false);
 }
 
 int adu_putmem_ci(struct pdbg_target *adu_target, uint64_t start_addr,
 		  uint8_t *input, uint64_t size)
 {
-	return __adu_putmem_blocksize(adu_target, start_addr, input, size, 8, true);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_write(adu, start_addr, input, size, 8, true);
 }
 
 int adu_putmem_io(struct pdbg_target *adu_target, uint64_t start_addr,
 		  uint8_t *input, uint64_t size, uint8_t block_size)
 {
-	return __adu_putmem_blocksize(adu_target, start_addr, input, size, block_size, true);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_write(adu, start_addr, input, size, block_size, true);
 }
 
 int __adu_putmem(struct pdbg_target *adu_target, uint64_t start_addr,
 		 uint8_t *input, uint64_t size, bool ci)
 {
-	return __adu_putmem_blocksize(adu_target, start_addr, input, size, 8, ci);
+	struct adu *adu;
+
+	assert(!strcmp(adu_target->class, "adu"));
+	adu = target_to_adu(adu_target);
+
+	return adu_write(adu, start_addr, input, size, 8, ci);
 }
 
 static int adu_lock(struct adu *adu)
-- 
2.20.1



More information about the Pdbg mailing list