Merge remote-tracking branch 'remotes/bonzini/memory' into staging
* remotes/bonzini/memory: qdev: correctly send DEVICE_DELETED for recursively-deleted devices memory: do not give a name to the internal exec.c regions memory: MemoryRegion: Add size property memory: MemoryRegion: Add may-overlap and priority props memory: MemoryRegion: Add container and addr props memory: MemoryRegion: replace owner field with QOM parent memory: MemoryRegion: QOMify memory: MemoryRegion: use /machine as default owner libqtest: escape strings in QMP commands, fix leak qom: object: Ignore refs/unrefs of NULL qom: object: remove parent pointer when unparenting mc146818rtc: add "rtc-time" link to "/machine/rtc" qom: allow creating an alias of a child<> property qom: add a generic mechanism to resolve paths qom: add object_property_add_alias() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
c26f3a0a6d
13 changed files with 445 additions and 93 deletions
|
|
@ -32,10 +32,15 @@
|
|||
#include "qemu/int128.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define MAX_PHYS_ADDR_SPACE_BITS 62
|
||||
#define MAX_PHYS_ADDR (((hwaddr)1 << MAX_PHYS_ADDR_SPACE_BITS) - 1)
|
||||
|
||||
#define TYPE_MEMORY_REGION "qemu:memory-region"
|
||||
#define MEMORY_REGION(obj) \
|
||||
OBJECT_CHECK(MemoryRegion, (obj), TYPE_MEMORY_REGION)
|
||||
|
||||
typedef struct MemoryRegionOps MemoryRegionOps;
|
||||
typedef struct MemoryRegionMmio MemoryRegionMmio;
|
||||
|
||||
|
|
@ -131,11 +136,11 @@ typedef struct CoalescedMemoryRange CoalescedMemoryRange;
|
|||
typedef struct MemoryRegionIoeventfd MemoryRegionIoeventfd;
|
||||
|
||||
struct MemoryRegion {
|
||||
Object parent_obj;
|
||||
/* All fields are private - violators will be prosecuted */
|
||||
const MemoryRegionOps *ops;
|
||||
const MemoryRegionIOMMUOps *iommu_ops;
|
||||
void *opaque;
|
||||
struct Object *owner;
|
||||
MemoryRegion *container;
|
||||
Int128 size;
|
||||
hwaddr addr;
|
||||
|
|
@ -152,7 +157,7 @@ struct MemoryRegion {
|
|||
bool flush_coalesced_mmio;
|
||||
MemoryRegion *alias;
|
||||
hwaddr alias_offset;
|
||||
int priority;
|
||||
int32_t priority;
|
||||
bool may_overlap;
|
||||
QTAILQ_HEAD(subregions, MemoryRegion) subregions;
|
||||
QTAILQ_ENTRY(MemoryRegion) subregions_link;
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ struct DeviceState {
|
|||
|
||||
const char *id;
|
||||
bool realized;
|
||||
bool pending_deleted_event;
|
||||
QemuOpts *opts;
|
||||
int hotplugged;
|
||||
BusState *parent_bus;
|
||||
|
|
|
|||
|
|
@ -303,6 +303,25 @@ typedef void (ObjectPropertyAccessor)(Object *obj,
|
|||
const char *name,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* ObjectPropertyResolve:
|
||||
* @obj: the object that owns the property
|
||||
* @opaque: the opaque registered with the property
|
||||
* @part: the name of the property
|
||||
*
|
||||
* Resolves the #Object corresponding to property @part.
|
||||
*
|
||||
* The returned object can also be used as a starting point
|
||||
* to resolve a relative path starting with "@part".
|
||||
*
|
||||
* Returns: If @path is the path that led to @obj, the function
|
||||
* returns the #Object corresponding to "@path/@part".
|
||||
* If "@path/@part" is not a valid object path, it returns #NULL.
|
||||
*/
|
||||
typedef Object *(ObjectPropertyResolve)(Object *obj,
|
||||
void *opaque,
|
||||
const char *part);
|
||||
|
||||
/**
|
||||
* ObjectPropertyRelease:
|
||||
* @obj: the object that owns the property
|
||||
|
|
@ -321,6 +340,7 @@ typedef struct ObjectProperty
|
|||
gchar *type;
|
||||
ObjectPropertyAccessor *get;
|
||||
ObjectPropertyAccessor *set;
|
||||
ObjectPropertyResolve *resolve;
|
||||
ObjectPropertyRelease *release;
|
||||
void *opaque;
|
||||
|
||||
|
|
@ -787,12 +807,16 @@ void object_unref(Object *obj);
|
|||
* destruction. This may be NULL.
|
||||
* @opaque: an opaque pointer to pass to the callbacks for the property
|
||||
* @errp: returns an error if this function fails
|
||||
*
|
||||
* Returns: The #ObjectProperty; this can be used to set the @resolve
|
||||
* callback for child and link properties.
|
||||
*/
|
||||
void object_property_add(Object *obj, const char *name, const char *type,
|
||||
ObjectPropertyAccessor *get,
|
||||
ObjectPropertyAccessor *set,
|
||||
ObjectPropertyRelease *release,
|
||||
void *opaque, Error **errp);
|
||||
ObjectProperty *object_property_add(Object *obj, const char *name,
|
||||
const char *type,
|
||||
ObjectPropertyAccessor *get,
|
||||
ObjectPropertyAccessor *set,
|
||||
ObjectPropertyRelease *release,
|
||||
void *opaque, Error **errp);
|
||||
|
||||
void object_property_del(Object *obj, const char *name, Error **errp);
|
||||
|
||||
|
|
@ -1230,6 +1254,26 @@ void object_property_add_uint32_ptr(Object *obj, const char *name,
|
|||
void object_property_add_uint64_ptr(Object *obj, const char *name,
|
||||
const uint64_t *v, Error **Errp);
|
||||
|
||||
/**
|
||||
* object_property_add_alias:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @target_obj: the object to forward property access to
|
||||
* @target_name: the name of the property on the forwarded object
|
||||
* @errp: if an error occurs, a pointer to an area to store the error
|
||||
*
|
||||
* Add an alias for a property on an object. This function will add a property
|
||||
* of the same type as the forwarded property.
|
||||
*
|
||||
* The caller must ensure that <code>@target_obj</code> stays alive as long as
|
||||
* this property exists. In the case of a child object or an alias on the same
|
||||
* object this will be the case. For aliases to other objects the caller is
|
||||
* responsible for taking a reference.
|
||||
*/
|
||||
void object_property_add_alias(Object *obj, const char *name,
|
||||
Object *target_obj, const char *target_name,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_child_foreach:
|
||||
* @obj: the object whose children will be navigated
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue