Revision aa941b94 hw/nand.c
b/hw/nand.c | ||
---|---|---|
273 | 273 |
} |
274 | 274 |
} |
275 | 275 |
|
276 |
static void nand_save(QEMUFile *f, void *opaque) |
|
277 |
{ |
|
278 |
struct nand_flash_s *s = (struct nand_flash_s *) opaque; |
|
279 |
qemu_put_byte(f, s->cle); |
|
280 |
qemu_put_byte(f, s->ale); |
|
281 |
qemu_put_byte(f, s->ce); |
|
282 |
qemu_put_byte(f, s->wp); |
|
283 |
qemu_put_byte(f, s->gnd); |
|
284 |
qemu_put_buffer(f, s->io, sizeof(s->io)); |
|
285 |
qemu_put_be32(f, s->ioaddr - s->io); |
|
286 |
qemu_put_be32(f, s->iolen); |
|
287 |
|
|
288 |
qemu_put_be32s(f, &s->cmd); |
|
289 |
qemu_put_be32s(f, &s->addr); |
|
290 |
qemu_put_be32(f, s->addrlen); |
|
291 |
qemu_put_be32(f, s->status); |
|
292 |
qemu_put_be32(f, s->offset); |
|
293 |
/* XXX: do we want to save s->storage too? */ |
|
294 |
} |
|
295 |
|
|
296 |
static int nand_load(QEMUFile *f, void *opaque, int version_id) |
|
297 |
{ |
|
298 |
struct nand_flash_s *s = (struct nand_flash_s *) opaque; |
|
299 |
s->cle = qemu_get_byte(f); |
|
300 |
s->ale = qemu_get_byte(f); |
|
301 |
s->ce = qemu_get_byte(f); |
|
302 |
s->wp = qemu_get_byte(f); |
|
303 |
s->gnd = qemu_get_byte(f); |
|
304 |
qemu_get_buffer(f, s->io, sizeof(s->io)); |
|
305 |
s->ioaddr = s->io + qemu_get_be32(f); |
|
306 |
s->iolen = qemu_get_be32(f); |
|
307 |
if (s->ioaddr >= s->io + sizeof(s->io) || s->ioaddr < s->io) |
|
308 |
return -EINVAL; |
|
309 |
|
|
310 |
qemu_get_be32s(f, &s->cmd); |
|
311 |
qemu_get_be32s(f, &s->addr); |
|
312 |
s->addrlen = qemu_get_be32(f); |
|
313 |
s->status = qemu_get_be32(f); |
|
314 |
s->offset = qemu_get_be32(f); |
|
315 |
return 0; |
|
316 |
} |
|
317 |
|
|
318 |
static int nand_iid = 0; |
|
319 |
|
|
276 | 320 |
/* |
277 | 321 |
* Chip inputs are CLE, ALE, CE, WP, GND and eight I/O pins. Chip |
278 | 322 |
* outputs are R/B and eight I/O pins. |
... | ... | |
443 | 487 |
if (pagesize) |
444 | 488 |
s->storage = (uint8_t *) memset(qemu_malloc(s->pages * pagesize), |
445 | 489 |
0xff, s->pages * pagesize); |
490 |
|
|
491 |
register_savevm("nand", nand_iid ++, 0, nand_save, nand_load, s); |
|
492 |
|
|
446 | 493 |
return s; |
447 | 494 |
} |
448 | 495 |
|
Also available in: Unified diff