This defines new QOM object - IOMMUMemoryRegion - with MemoryRegion as a parent. This moves IOMMU-related fields from MR to IOMMU MR. However to avoid dymanic QOM casting in fast path (address_space_translate, etc), this adds an @is_iommu boolean flag to MR and provides new helper to do simple cast to IOMMU MR - memory_region_get_iommu. The flag is set in the instance init callback. This defines memory_region_is_iommu as memory_region_get_iommu()!=NULL. This switches MemoryRegion to IOMMUMemoryRegion in most places except the ones where MemoryRegion may be an alias. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20170711035620.4232-2-aik@ozlabs.ru> Acked-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			105 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef QEMU_TYPEDEFS_H
 | 
						|
#define QEMU_TYPEDEFS_H
 | 
						|
 | 
						|
/* A load of opaque types so that device init declarations don't have to
 | 
						|
   pull in all the real definitions.  */
 | 
						|
 | 
						|
/* Please keep this list in alphabetical order */
 | 
						|
typedef struct AdapterInfo AdapterInfo;
 | 
						|
typedef struct AddressSpace AddressSpace;
 | 
						|
typedef struct AioContext AioContext;
 | 
						|
typedef struct AllwinnerAHCIState AllwinnerAHCIState;
 | 
						|
typedef struct AudioState AudioState;
 | 
						|
typedef struct BdrvDirtyBitmap BdrvDirtyBitmap;
 | 
						|
typedef struct BdrvDirtyBitmapIter BdrvDirtyBitmapIter;
 | 
						|
typedef struct BlockBackend BlockBackend;
 | 
						|
typedef struct BlockBackendRootState BlockBackendRootState;
 | 
						|
typedef struct BlockDriverState BlockDriverState;
 | 
						|
typedef struct BusClass BusClass;
 | 
						|
typedef struct BusState BusState;
 | 
						|
typedef struct Chardev Chardev;
 | 
						|
typedef struct CompatProperty CompatProperty;
 | 
						|
typedef struct CPUAddressSpace CPUAddressSpace;
 | 
						|
typedef struct CPUState CPUState;
 | 
						|
typedef struct DeviceListener DeviceListener;
 | 
						|
typedef struct DeviceState DeviceState;
 | 
						|
typedef struct DirtyBitmapSnapshot DirtyBitmapSnapshot;
 | 
						|
typedef struct DisplayChangeListener DisplayChangeListener;
 | 
						|
typedef struct DisplayState DisplayState;
 | 
						|
typedef struct DisplaySurface DisplaySurface;
 | 
						|
typedef struct DriveInfo DriveInfo;
 | 
						|
typedef struct Error Error;
 | 
						|
typedef struct EventNotifier EventNotifier;
 | 
						|
typedef struct FWCfgIoState FWCfgIoState;
 | 
						|
typedef struct FWCfgMemState FWCfgMemState;
 | 
						|
typedef struct FWCfgState FWCfgState;
 | 
						|
typedef struct HCIInfo HCIInfo;
 | 
						|
typedef struct I2CBus I2CBus;
 | 
						|
typedef struct I2SCodec I2SCodec;
 | 
						|
typedef struct ISABus ISABus;
 | 
						|
typedef struct ISADevice ISADevice;
 | 
						|
typedef struct IsaDma IsaDma;
 | 
						|
typedef struct MACAddr MACAddr;
 | 
						|
typedef struct MachineClass MachineClass;
 | 
						|
typedef struct MachineState MachineState;
 | 
						|
typedef struct MemoryListener MemoryListener;
 | 
						|
typedef struct MemoryMappingList MemoryMappingList;
 | 
						|
typedef struct MemoryRegion MemoryRegion;
 | 
						|
typedef struct IOMMUMemoryRegion IOMMUMemoryRegion;
 | 
						|
typedef struct MemoryRegionCache MemoryRegionCache;
 | 
						|
typedef struct MemoryRegionSection MemoryRegionSection;
 | 
						|
typedef struct MigrationIncomingState MigrationIncomingState;
 | 
						|
typedef struct MigrationState MigrationState;
 | 
						|
typedef struct Monitor Monitor;
 | 
						|
typedef struct MonitorDef MonitorDef;
 | 
						|
typedef struct MouseTransformInfo MouseTransformInfo;
 | 
						|
typedef struct MSIMessage MSIMessage;
 | 
						|
typedef struct NetClientState NetClientState;
 | 
						|
typedef struct NetFilterState NetFilterState;
 | 
						|
typedef struct NICInfo NICInfo;
 | 
						|
typedef struct PcGuestInfo PcGuestInfo;
 | 
						|
typedef struct PCIBridge PCIBridge;
 | 
						|
typedef struct PCIBus PCIBus;
 | 
						|
typedef struct PCIDevice PCIDevice;
 | 
						|
typedef struct PCIEAERErr PCIEAERErr;
 | 
						|
typedef struct PCIEAERLog PCIEAERLog;
 | 
						|
typedef struct PCIEAERMsg PCIEAERMsg;
 | 
						|
typedef struct PCIEPort PCIEPort;
 | 
						|
typedef struct PCIESlot PCIESlot;
 | 
						|
typedef struct PCIExpressDevice PCIExpressDevice;
 | 
						|
typedef struct PCIExpressHost PCIExpressHost;
 | 
						|
typedef struct PCIHostDeviceAddress PCIHostDeviceAddress;
 | 
						|
typedef struct PCIHostState PCIHostState;
 | 
						|
typedef struct PCMachineClass PCMachineClass;
 | 
						|
typedef struct PCMachineState PCMachineState;
 | 
						|
typedef struct PCMCIACardState PCMCIACardState;
 | 
						|
typedef struct PixelFormat PixelFormat;
 | 
						|
typedef struct PostcopyDiscardState PostcopyDiscardState;
 | 
						|
typedef struct Property Property;
 | 
						|
typedef struct PropertyInfo PropertyInfo;
 | 
						|
typedef struct PS2State PS2State;
 | 
						|
typedef struct QEMUBH QEMUBH;
 | 
						|
typedef struct QemuConsole QemuConsole;
 | 
						|
typedef struct QEMUFile QEMUFile;
 | 
						|
typedef struct QemuOpt QemuOpt;
 | 
						|
typedef struct QemuOpts QemuOpts;
 | 
						|
typedef struct QemuOptsList QemuOptsList;
 | 
						|
typedef struct QEMUSGList QEMUSGList;
 | 
						|
typedef struct QEMUTimer QEMUTimer;
 | 
						|
typedef struct QEMUTimerListGroup QEMUTimerListGroup;
 | 
						|
typedef struct QObject QObject;
 | 
						|
typedef struct RAMBlock RAMBlock;
 | 
						|
typedef struct Range Range;
 | 
						|
typedef struct SerialState SerialState;
 | 
						|
typedef struct SHPCDevice SHPCDevice;
 | 
						|
typedef struct SMBusDevice SMBusDevice;
 | 
						|
typedef struct SSIBus SSIBus;
 | 
						|
typedef struct uWireSlave uWireSlave;
 | 
						|
typedef struct VirtIODevice VirtIODevice;
 | 
						|
typedef struct Visitor Visitor;
 | 
						|
typedef struct node_info NodeInfo;
 | 
						|
typedef void SaveStateHandler(QEMUFile *f, void *opaque);
 | 
						|
typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
 | 
						|
 | 
						|
#endif /* QEMU_TYPEDEFS_H */
 |