15
15
#include "hw/qdev-properties.h"
16
16
#include "hw/qdev-properties-system.h"
17
17
#include "sysemu/block-backend.h"
18
+ #include "migration/vmstate.h"
18
19
#include "qom/object.h"
19
20
20
21
/* #define DEBUG_AT24C */
@@ -149,18 +150,8 @@ static void at24c_eeprom_realize(DeviceState *dev, Error **errp)
149
150
}
150
151
151
152
ee -> mem = g_malloc0 (ee -> rsize );
152
- }
153
-
154
- static
155
- void at24c_eeprom_reset (DeviceState * state )
156
- {
157
- EEPROMState * ee = AT24C_EE (state );
158
153
159
- ee -> changed = false;
160
- ee -> cur = 0 ;
161
- ee -> haveaddr = 0 ;
162
- // WTF.. I disabled this because real EEPROMS do not erase themselves on reset. ~VintagePC
163
- // memset(ee->mem, 0, ee->rsize);
154
+ memset (ee -> mem , 0 , ee -> rsize );
164
155
165
156
if (ee -> blk ) {
166
157
int len = blk_pread (ee -> blk , 0 , ee -> mem , ee -> rsize );
@@ -173,6 +164,35 @@ void at24c_eeprom_reset(DeviceState *state)
173
164
}
174
165
}
175
166
167
+ static
168
+ void at24c_eeprom_reset (DeviceState * state )
169
+ {
170
+ EEPROMState * ee = AT24C_EE (state );
171
+
172
+ ee -> changed = false;
173
+ ee -> cur = 0 ;
174
+ ee -> haveaddr = 0 ;
175
+ // WTF.. I disabled this because real EEPROMS do not erase themselves on reset. ~VintagePC
176
+ }
177
+
178
+ static const VMStateDescription vmstate_eeprom_at24c = {
179
+ .name = TYPE_AT24C_EE ,
180
+ .version_id = 1 ,
181
+ .minimum_version_id = 1 ,
182
+ // .post_load = at24c_eeprom_post_load,
183
+ .fields = (VMStateField []) {
184
+ VMSTATE_I2C_SLAVE (parent_obj , EEPROMState ),
185
+ VMSTATE_UINT16 (cur , EEPROMState ),
186
+ VMSTATE_UINT32 (rsize , EEPROMState ),
187
+ VMSTATE_BOOL (writable , EEPROMState ),
188
+ VMSTATE_BOOL (changed , EEPROMState ),
189
+ VMSTATE_UINT8 (haveaddr , EEPROMState ),
190
+ VMSTATE_VARRAY_UINT32 (mem , EEPROMState , rsize , 0 ,
191
+ vmstate_info_uint8 , uint8_t ),
192
+ VMSTATE_END_OF_LIST ()
193
+ }
194
+ };
195
+
176
196
static Property at24c_eeprom_props [] = {
177
197
DEFINE_PROP_UINT32 ("rom-size" , EEPROMState , rsize , 0 ),
178
198
DEFINE_PROP_BOOL ("writable" , EEPROMState , writable , true),
@@ -190,6 +210,7 @@ void at24c_eeprom_class_init(ObjectClass *klass, void *data)
190
210
k -> event = & at24c_eeprom_event ;
191
211
k -> recv = & at24c_eeprom_recv ;
192
212
k -> send = & at24c_eeprom_send ;
213
+ dc -> vmsd = & vmstate_eeprom_at24c ;
193
214
194
215
device_class_set_props (dc , at24c_eeprom_props );
195
216
dc -> reset = at24c_eeprom_reset ;
0 commit comments