diff options
author | Anthony Liguori | 2011-12-05 03:39:20 +0100 |
---|---|---|
committer | Anthony Liguori | 2012-01-27 17:50:47 +0100 |
commit | b5ea932781954355a9880e2744722cd05cc496f9 (patch) | |
tree | f47482844578c1dffdae93dc3ec103a101097a71 /hw/smbus.h | |
parent | i2c: rename i2c_slave -> I2CSlave (diff) | |
download | qemu-b5ea932781954355a9880e2744722cd05cc496f9.tar.gz qemu-b5ea932781954355a9880e2744722cd05cc496f9.tar.xz qemu-b5ea932781954355a9880e2744722cd05cc496f9.zip |
i2c: smbus: convert to QEMU Object Model
This converts two types because smbus is implemented as a subclass of i2c. It's
extremely difficult to convert these two independently.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/smbus.h')
-rw-r--r-- | hw/smbus.h | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/hw/smbus.h b/hw/smbus.h index 2f2d49e29e..90fadee56e 100644 --- a/hw/smbus.h +++ b/hw/smbus.h @@ -1,3 +1,6 @@ +#ifndef QEMU_SMBUS_H +#define QEMU_SMBUS_H + /* * QEMU SMBus API * @@ -24,19 +27,17 @@ #include "i2c.h" -struct SMBusDevice { - /* The SMBus protocol is implemented on top of I2C. */ - I2CSlave i2c; - - /* Remaining fields for internal use only. */ - int mode; - int data_len; - uint8_t data_buf[34]; /* command + len + 32 bytes of data. */ - uint8_t command; -}; +#define TYPE_SMBUS_DEVICE "smbus-device" +#define SMBUS_DEVICE(obj) \ + OBJECT_CHECK(SMBusDevice, (obj), TYPE_SMBUS_DEVICE) +#define SMBUS_DEVICE_CLASS(klass) \ + OBJECT_CLASS_CHECK(SMBusDeviceClass, (klass), TYPE_SMBUS_DEVICE) +#define SMBUS_DEVICE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(SMBusDeviceClass, (obj), TYPE_SMBUS_DEVICE) -typedef struct { - I2CSlaveInfo i2c; +typedef struct SMBusDeviceClass +{ + I2CSlaveClass parent_class; int (*init)(SMBusDevice *dev); void (*quick_cmd)(SMBusDevice *dev, uint8_t read); void (*send_byte)(SMBusDevice *dev, uint8_t val); @@ -51,9 +52,20 @@ typedef struct { byte at a time. The device is responsible for adding the length byte on block reads. */ uint8_t (*read_data)(SMBusDevice *dev, uint8_t cmd, int n); -} SMBusDeviceInfo; +} SMBusDeviceClass; -void smbus_register_device(SMBusDeviceInfo *info); +struct SMBusDevice { + /* The SMBus protocol is implemented on top of I2C. */ + I2CSlave i2c; + + /* Remaining fields for internal use only. */ + int mode; + int data_len; + uint8_t data_buf[34]; /* command + len + 32 bytes of data. */ + uint8_t command; +}; + +void smbus_register_device(DeviceInfo *info); /* Master device commands. */ void smbus_quick_command(i2c_bus *bus, uint8_t addr, int read); @@ -69,3 +81,5 @@ void smbus_write_block(i2c_bus *bus, uint8_t addr, uint8_t command, uint8_t *dat void smbus_eeprom_init(i2c_bus *smbus, int nb_eeprom, const uint8_t *eeprom_spd, int size); + +#endif |