qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

hw/i2c/core: Add i2c_try_create_slave() and i2c_realize_and_unref()

Extract i2c_try_create_slave() and i2c_realize_and_unref()
from i2c_create_slave().
We can now set properties on a I2CSlave before it is realized.

This is in line with the recent qdev/QOM changes merged
in commit 6675a653d2e.

Reviewed-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Tested-by: Cédric Le Goater <clg@kaod.org>
Message-id: 20200623072723.6324-2-f4bug@amsat.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

authored by

Philippe Mathieu-Daudé and committed by
Peter Maydell
d88c42ff 888b2b03

+18 -2
+16 -2
hw/i2c/core.c
··· 267 267 } 268 268 }; 269 269 270 - DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr) 270 + DeviceState *i2c_try_create_slave(const char *name, uint8_t addr) 271 271 { 272 272 DeviceState *dev; 273 273 274 274 dev = qdev_new(name); 275 275 qdev_prop_set_uint8(dev, "address", addr); 276 - qdev_realize_and_unref(dev, &bus->qbus, &error_fatal); 276 + return dev; 277 + } 278 + 279 + bool i2c_realize_and_unref(DeviceState *dev, I2CBus *bus, Error **errp) 280 + { 281 + return qdev_realize_and_unref(dev, &bus->qbus, errp); 282 + } 283 + 284 + DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr) 285 + { 286 + DeviceState *dev; 287 + 288 + dev = i2c_try_create_slave(name, addr); 289 + i2c_realize_and_unref(dev, bus, &error_fatal); 290 + 277 291 return dev; 278 292 } 279 293
+2
include/hw/i2c/i2c.h
··· 80 80 uint8_t i2c_recv(I2CBus *bus); 81 81 82 82 DeviceState *i2c_create_slave(I2CBus *bus, const char *name, uint8_t addr); 83 + DeviceState *i2c_try_create_slave(const char *name, uint8_t addr); 84 + bool i2c_realize_and_unref(DeviceState *dev, I2CBus *bus, Error **errp); 83 85 84 86 /* lm832x.c */ 85 87 void lm832x_key_event(DeviceState *dev, int key, int state);