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