12
12
extern PropertyInfo qdev_prop_uint32;
13
13
extern PropertyInfo qdev_prop_int32;
14
14
extern PropertyInfo qdev_prop_uint64;
15
extern PropertyInfo qdev_prop_hex8;
16
extern PropertyInfo qdev_prop_hex32;
17
extern PropertyInfo qdev_prop_hex64;
18
15
extern PropertyInfo qdev_prop_size;
19
16
extern PropertyInfo qdev_prop_string;
20
17
extern PropertyInfo qdev_prop_chr;
111
109
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t)
112
110
#define DEFINE_PROP_UINT64(_n, _s, _f, _d) \
113
111
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t)
114
#define DEFINE_PROP_HEX8(_n, _s, _f, _d) \
115
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex8, uint8_t)
116
#define DEFINE_PROP_HEX32(_n, _s, _f, _d) \
117
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t)
118
#define DEFINE_PROP_HEX64(_n, _s, _f, _d) \
119
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t)
120
112
#define DEFINE_PROP_SIZE(_n, _s, _f, _d) \
121
113
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_size, uint64_t)
122
114
#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
123
115
DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
118
* Please avoid pointer properties. If you must use them, you must
119
* cover them in their device's class init function as follows:
121
* - If the property must be set, the device cannot be used with
122
* device_add, so add code like this:
123
* |* Reason: pointer property "NAME-OF-YOUR-PROP" *|
124
* DeviceClass *dc = DEVICE_CLASS(class);
125
* dc->cannot_instantiate_with_device_add_yet = true;
127
* - If the property may safely remain null, document it like this:
129
* * Note: pointer property "interrupt_vector" may remain null, thus
130
* * no need for dc->cannot_instantiate_with_device_add_yet = true;
125
133
#define DEFINE_PROP_PTR(_n, _s, _f) \
126
134
DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*)
127
136
#define DEFINE_PROP_CHR(_n, _s, _f) \
128
137
DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*)
129
138
#define DEFINE_PROP_STRING(_n, _s, _f) \
134
143
DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, NICPeers)
135
144
#define DEFINE_PROP_DRIVE(_n, _s, _f) \
136
145
DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
146
#define DEFINE_PROP_IOTHREAD(_n, _s, _f) \
147
DEFINE_PROP(_n, _s, _f, qdev_prop_iothread, IOThread *)
137
148
#define DEFINE_PROP_MACADDR(_n, _s, _f) \
138
149
DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
139
150
#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
152
163
/* Set properties between creation and init. */
153
164
void *qdev_get_prop_ptr(DeviceState *dev, Property *prop);
154
void qdev_prop_parse(DeviceState *dev, const char *name, const char *value,
156
165
void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value);
157
166
void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value);
158
167
void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value);
196
205
void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
209
* qdev_prop_allow_set_link_before_realize:
211
* Set the #Error object if an attempt is made to set the link after realize.
212
* This function should be used as the check() argument to
213
* object_property_add_link().
215
void qdev_prop_allow_set_link_before_realize(Object *obj, const char *name,
216
Object *val, Error **errp);