From: minyard@acm.org
To: qemu-devel@nongnu.org, "Dr . David Alan Gilbert" <dgilbert@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
Corey Minyard <minyard@acm.org>,
Peter Maydell <peter.maydell@linaro.org>,
Corey Minyard <cminyard@mvista.com>
Subject: [Qemu-devel] [PATCH v4 14/19] i2c:smbus_slave: Add an SMBus vmstate structure
Date: Mon, 28 Jan 2019 11:54:53 -0600 [thread overview]
Message-ID: <20190128175458.27255-15-minyard@acm.org> (raw)
In-Reply-To: <20190128175458.27255-1-minyard@acm.org>
From: Corey Minyard <cminyard@mvista.com>
There is no vmstate handling for SMBus, so no device sitting on SMBus
can have a state transfer that works reliably. So add it.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
hw/i2c/smbus_slave.c | 18 ++++++++++++++++++
include/hw/i2c/smbus_slave.h | 24 +++++++++++++++++++++---
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/hw/i2c/smbus_slave.c b/hw/i2c/smbus_slave.c
index 5b3046f6a3..9a2d314d1a 100644
--- a/hw/i2c/smbus_slave.c
+++ b/hw/i2c/smbus_slave.c
@@ -201,6 +201,24 @@ static void smbus_device_class_init(ObjectClass *klass, void *data)
sc->send = smbus_i2c_send;
}
+bool smbus_vmstate_needed(SMBusDevice *dev)
+{
+ return dev->mode != SMBUS_IDLE;
+}
+
+const VMStateDescription vmstate_smbus_device = {
+ .name = TYPE_SMBUS_DEVICE,
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_I2C_SLAVE(i2c, SMBusDevice),
+ VMSTATE_INT32(mode, SMBusDevice),
+ VMSTATE_INT32(data_len, SMBusDevice),
+ VMSTATE_UINT8_ARRAY(data_buf, SMBusDevice, SMBUS_DATA_MAX_LEN),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static const TypeInfo smbus_device_type_info = {
.name = TYPE_SMBUS_DEVICE,
.parent = TYPE_I2C_SLAVE,
diff --git a/include/hw/i2c/smbus_slave.h b/include/hw/i2c/smbus_slave.h
index 79050fb92d..ebe068304e 100644
--- a/include/hw/i2c/smbus_slave.h
+++ b/include/hw/i2c/smbus_slave.h
@@ -69,14 +69,32 @@ typedef struct SMBusDeviceClass
uint8_t (*receive_byte)(SMBusDevice *dev);
} SMBusDeviceClass;
+#define SMBUS_DATA_MAX_LEN 34 /* command + len + 32 bytes of data. */
+
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. */
+ int32_t mode;
+ int32_t data_len;
+ uint8_t data_buf[SMBUS_DATA_MAX_LEN];
};
+extern const VMStateDescription vmstate_smbus_device;
+
+#define VMSTATE_SMBUS_DEVICE(_field, _state) { \
+ .name = (stringify(_field)), \
+ .size = sizeof(SMBusDevice), \
+ .vmsd = &vmstate_smbus_device, \
+ .flags = VMS_STRUCT, \
+ .offset = vmstate_offset_value(_state, _field, SMBusDevice), \
+}
+
+/*
+ * Users should call this in their .needed functions to know if the
+ * SMBus slave data needs to be transferred.
+ */
+bool smbus_vmstate_needed(SMBusDevice *dev);
+
#endif
--
2.17.1
next prev parent reply other threads:[~2019-01-28 18:01 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-28 17:54 [Qemu-devel] [PATCH v4 00/19] Fix/add vmstate handling in some I2C code minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 01/19] i2c: Split smbus into parts minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 02/19] i2c: have I2C receive operation return uint8_t minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 03/19] arm:i2c: Don't mask return from i2c_recv() minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 04/19] i2c: Don't check return value " minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 05/19] i2c:smbus: Correct the working of quick commands minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 06/19] i2c:smbus: Simplify write operation minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 07/19] i2c:smbus: Simplify read handling minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 08/19] i2c:smbus_eeprom: Get rid of the quick command minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 09/19] i2c:smbus: Make white space in switch statements consistent minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 10/19] boards.h: Ignore migration for SMBus devices on older machines minyard
2019-01-28 18:08 ` Eduardo Habkost
2019-01-28 18:22 ` Corey Minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 11/19] i2c:pm_smbus: Fix pm_smbus handling of I2C block read minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 12/19] migration: Add a VMSTATE_BOOL_TEST() macro minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 13/19] i2c:pm_smbus: Fix state transfer minyard
2019-01-28 17:54 ` minyard [this message]
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 15/19] i2c:smbus_eeprom: Add normal type name and cast to smbus_eeprom.c minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 16/19] i2c:smbus_eeprom: Add a size constant for the smbus_eeprom size minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 17/19] i2c:smbus_eeprom: Add vmstate handling to the smbus eeprom minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 18/19] i2c:smbus_eeprom: Add a reset function to smbus_eeprom minyard
2019-01-28 17:54 ` [Qemu-devel] [PATCH v4 19/19] i2c: Verify that the count passed in to smbus_eeprom_init() is valid minyard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190128175458.27255-15-minyard@acm.org \
--to=minyard@acm.org \
--cc=cminyard@mvista.com \
--cc=dgilbert@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.