qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/6] target/tricore: Add read and write semihosting calls


From: Richard Henderson
Subject: Re: [PATCH 2/6] target/tricore: Add read and write semihosting calls
Date: Sun, 15 Oct 2023 16:48:02 -0700
User-agent: Mozilla Thunderbird

On 10/15/23 13:59, Bastian Koppelmann wrote:
Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
---
  target/tricore/tricore-semi.c | 52 +++++++++++++++++++++++++++++++++++
  1 file changed, 52 insertions(+)

diff --git a/target/tricore/tricore-semi.c b/target/tricore/tricore-semi.c
index 27e1bdc59d..ccbeae4bc0 100644
--- a/target/tricore/tricore-semi.c
+++ b/target/tricore/tricore-semi.c
@@ -164,6 +164,52 @@ static void tricore_vio_set_result(CPUTriCoreState *env, 
int retval,
      env->gpr_d[12] = tricore_vio_errno_h2g(host_errno);
  }
+static void tricore_vio_readwrite(CPUTriCoreState *env, bool is_write)
+{
+    CPUState *cs = env_cpu(env);
+    hwaddr paddr, sz;
+    uint32_t page_left, io_sz, vaddr;
+    size_t count;
+    ssize_t ret = 0;
+
+    int fd = env->gpr_d[4];
+    vaddr  = env->gpr_a[4];
+    count = env->gpr_d[5];
+
+    while (count > 0) {
+        paddr = cpu_get_phys_page_debug(cs, vaddr);
+        page_left = TARGET_PAGE_SIZE - (vaddr & (TARGET_PAGE_SIZE - 1));
+        io_sz = page_left < count ? page_left : count;
+        sz = io_sz;
+        void *buf = cpu_physical_memory_map(paddr, &sz, true);
+
+        if (buf) {
+            vaddr += io_sz;
+            count -= io_sz;
+            ret = is_write ?
+                write(fd, buf, io_sz) :
+                read(fd, buf, io_sz);

You should be able to use "semihosting/syscalls.h".
Compare m68k-semi.c.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]