memory: add backward compatibility for old mmio registration
This eases the transition to the new API. Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									627a0e90dc
								
							
						
					
					
						commit
						74901c3bd0
					
				
							
								
								
									
										10
									
								
								memory.c
								
								
								
								
							
							
						
						
									
										10
									
								
								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;
 | 
			
		||||
| 
						 | 
				
			
			@ -506,6 +507,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;
 | 
			
		||||
| 
						 | 
				
			
			@ -542,6 +547,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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								memory.h
								
								
								
								
							
							
						
						
									
										10
									
								
								memory.h
								
								
								
								
							| 
						 | 
				
			
			@ -28,6 +28,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.
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +37,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
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -85,6 +91,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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue