qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 10/23] memory: add backward compatibility for ol


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 10/23] memory: add backward compatibility for old mmio registration
Date: Mon, 25 Jul 2011 14:02:50 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10

On 07/25/2011 09:02 AM, Avi Kivity wrote:
This eases the transition to the new API.

Signed-off-by: Avi Kivity<address@hidden>

Reviewed-by: Anthony Liguori <address@hidden>

Regards,

Anthony Liguori

---
  memory.c |   10 ++++++++++
  memory.h |   10 ++++++++++
  2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/memory.c b/memory.c
index bb04952..e4446a0 100644
--- a/memory.c
+++ b/memory.c
@@ -14,6 +14,7 @@
  #include "memory.h"
  #include "exec-memory.h"
  #include "ioport.h"
+#include "bitops.h"
  #include<assert.h>

  typedef struct AddrRange AddrRange;
@@ -499,6 +500,10 @@ static uint32_t memory_region_read_thunk_n(void *_mr,
          return -1U; /* FIXME: better signalling */
      }

+    if (!mr->ops->read) {
+        return mr->ops->old_mmio.read[bitops_ffsl(size)](mr->opaque, addr);
+    }
+
      /* FIXME: support unaligned access */

      access_size_min = mr->ops->impl.min_access_size;
@@ -535,6 +540,11 @@ static void memory_region_write_thunk_n(void *_mr,
          return; /* FIXME: better signalling */
      }

+    if (!mr->ops->write) {
+        mr->ops->old_mmio.write[bitops_ffsl(size)](mr->opaque, addr, data);
+        return;
+    }
+
      /* FIXME: support unaligned access */

      access_size_min = mr->ops->impl.min_access_size;
diff --git a/memory.h b/memory.h
index f026eae..4624946 100644
--- a/memory.h
+++ b/memory.h
@@ -15,6 +15,7 @@
  typedef struct MemoryRegionOps MemoryRegionOps;
  typedef struct MemoryRegion MemoryRegion;
  typedef struct MemoryRegionPortio MemoryRegionPortio;
+typedef struct MemoryRegionMmio MemoryRegionMmio;

  /* Must match *_DIRTY_FLAGS in cpu-all.h.  To be replaced with dynamic
   * registration.
@@ -23,6 +24,11 @@ typedef struct MemoryRegionPortio MemoryRegionPortio;
  #define DIRTY_MEMORY_CODE      1
  #define DIRTY_MEMORY_MIGRATION 3

+struct MemoryRegionMmio {
+    CPUReadMemoryFunc *read[3];
+    CPUWriteMemoryFunc *write[3];
+};
+
  /*
   * Memory region callbacks
   */
@@ -72,6 +78,10 @@ struct MemoryRegionOps {
       * backwards compatibility with old portio registration
       */
      const MemoryRegionPortio *old_portio;
+    /* If .read and .write are not present, old_mmio may be used for
+     * backwards compatibility with old mmio registration
+     */
+    const MemoryRegionMmio old_mmio;
  };

  typedef struct CoalescedMemoryRange CoalescedMemoryRange;




reply via email to

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