Revision 1431b6a1 hw/qdev.c

b/hw/qdev.c
32 32

  
33 33
struct DeviceProperty {
34 34
    const char *name;
35
    DevicePropType type;
35 36
    union {
36 37
        uint64_t i;
37 38
        void *ptr;
......
119 120
    free(dev);
120 121
}
121 122

  
122
static DeviceProperty *create_prop(DeviceState *dev, const char *name)
123
static DeviceProperty *create_prop(DeviceState *dev, const char *name,
124
                                   DevicePropType type)
123 125
{
124 126
    DeviceProperty *prop;
125 127

  
126 128
    /* TODO: Check for duplicate properties.  */
127 129
    prop = qemu_mallocz(sizeof(*prop));
128 130
    prop->name = qemu_strdup(name);
131
    prop->type = type;
129 132
    prop->next = dev->props;
130 133
    dev->props = prop;
131 134

  
......
136 139
{
137 140
    DeviceProperty *prop;
138 141

  
139
    prop = create_prop(dev, name);
142
    prop = create_prop(dev, name, PROP_TYPE_INT);
140 143
    prop->value.i = value;
141 144
}
142 145

  
146
void qdev_set_prop_dev(DeviceState *dev, const char *name, DeviceState *value)
147
{
148
    DeviceProperty *prop;
149

  
150
    prop = create_prop(dev, name, PROP_TYPE_DEV);
151
    prop->value.ptr = value;
152
}
153

  
143 154
void qdev_set_prop_ptr(DeviceState *dev, const char *name, void *value)
144 155
{
145 156
    DeviceProperty *prop;
146 157

  
147
    prop = create_prop(dev, name);
158
    prop = create_prop(dev, name, PROP_TYPE_INT);
148 159
    prop->value.ptr = value;
149 160
}
150 161

  
......
173 184
    return dev->parent_bus;
174 185
}
175 186

  
176
static DeviceProperty *find_prop(DeviceState *dev, const char *name)
187
static DeviceProperty *find_prop(DeviceState *dev, const char *name,
188
                                 DevicePropType type)
177 189
{
178 190
    DeviceProperty *prop;
179 191

  
180 192
    for (prop = dev->props; prop; prop = prop->next) {
181 193
        if (strcmp(prop->name, name) == 0) {
194
            assert (prop->type == type);
182 195
            return prop;
183 196
        }
184 197
    }
......
189 202
{
190 203
    DeviceProperty *prop;
191 204

  
192
    prop = find_prop(dev, name);
193
    if (!prop)
205
    prop = find_prop(dev, name, PROP_TYPE_INT);
206
    if (!prop) {
194 207
        return def;
208
    }
195 209

  
196 210
    return prop->value.i;
197 211
}
......
200 214
{
201 215
    DeviceProperty *prop;
202 216

  
203
    prop = find_prop(dev, name);
217
    prop = find_prop(dev, name, PROP_TYPE_PTR);
204 218
    assert(prop);
205 219
    return prop->value.ptr;
206 220
}
207 221

  
222
DeviceState *qdev_get_prop_dev(DeviceState *dev, const char *name)
223
{
224
    DeviceProperty *prop;
225

  
226
    prop = find_prop(dev, name, PROP_TYPE_DEV);
227
    if (!prop) {
228
        return NULL;
229
    }
230
    return prop->value.ptr;
231
}
232

  
208 233
void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n)
209 234
{
210 235
    assert(dev->num_gpio_in == 0);

Also available in: Unified diff