Revision aa941b94 hw/pxa2xx_dma.c
b/hw/pxa2xx_dma.c | ||
---|---|---|
430 | 430 |
pxa2xx_dma_write |
431 | 431 |
}; |
432 | 432 |
|
433 |
static void pxa2xx_dma_save(QEMUFile *f, void *opaque) |
|
434 |
{ |
|
435 |
struct pxa2xx_dma_state_s *s = (struct pxa2xx_dma_state_s *) opaque; |
|
436 |
int i; |
|
437 |
|
|
438 |
qemu_put_be32(f, s->channels); |
|
439 |
|
|
440 |
qemu_put_be32s(f, &s->stopintr); |
|
441 |
qemu_put_be32s(f, &s->eorintr); |
|
442 |
qemu_put_be32s(f, &s->rasintr); |
|
443 |
qemu_put_be32s(f, &s->startintr); |
|
444 |
qemu_put_be32s(f, &s->endintr); |
|
445 |
qemu_put_be32s(f, &s->align); |
|
446 |
qemu_put_be32s(f, &s->pio); |
|
447 |
|
|
448 |
qemu_put_buffer(f, s->req, PXA2XX_DMA_NUM_REQUESTS); |
|
449 |
for (i = 0; i < s->channels; i ++) { |
|
450 |
qemu_put_betl(f, s->chan[i].descr); |
|
451 |
qemu_put_betl(f, s->chan[i].src); |
|
452 |
qemu_put_betl(f, s->chan[i].dest); |
|
453 |
qemu_put_be32s(f, &s->chan[i].cmd); |
|
454 |
qemu_put_be32s(f, &s->chan[i].state); |
|
455 |
qemu_put_be32(f, s->chan[i].request); |
|
456 |
}; |
|
457 |
} |
|
458 |
|
|
459 |
static int pxa2xx_dma_load(QEMUFile *f, void *opaque, int version_id) |
|
460 |
{ |
|
461 |
struct pxa2xx_dma_state_s *s = (struct pxa2xx_dma_state_s *) opaque; |
|
462 |
int i; |
|
463 |
|
|
464 |
if (qemu_get_be32(f) != s->channels) |
|
465 |
return -EINVAL; |
|
466 |
|
|
467 |
qemu_get_be32s(f, &s->stopintr); |
|
468 |
qemu_get_be32s(f, &s->eorintr); |
|
469 |
qemu_get_be32s(f, &s->rasintr); |
|
470 |
qemu_get_be32s(f, &s->startintr); |
|
471 |
qemu_get_be32s(f, &s->endintr); |
|
472 |
qemu_get_be32s(f, &s->align); |
|
473 |
qemu_get_be32s(f, &s->pio); |
|
474 |
|
|
475 |
qemu_get_buffer(f, s->req, PXA2XX_DMA_NUM_REQUESTS); |
|
476 |
for (i = 0; i < s->channels; i ++) { |
|
477 |
s->chan[i].descr = qemu_get_betl(f); |
|
478 |
s->chan[i].src = qemu_get_betl(f); |
|
479 |
s->chan[i].dest = qemu_get_betl(f); |
|
480 |
qemu_get_be32s(f, &s->chan[i].cmd); |
|
481 |
qemu_get_be32s(f, &s->chan[i].state); |
|
482 |
s->chan[i].request = qemu_get_be32(f); |
|
483 |
}; |
|
484 |
|
|
485 |
return 0; |
|
486 |
} |
|
487 |
|
|
433 | 488 |
static struct pxa2xx_dma_state_s *pxa2xx_dma_init(target_phys_addr_t base, |
434 | 489 |
qemu_irq irq, int channels) |
435 | 490 |
{ |
... | ... | |
455 | 510 |
pxa2xx_dma_writefn, s); |
456 | 511 |
cpu_register_physical_memory(base, 0x0000ffff, iomemtype); |
457 | 512 |
|
513 |
register_savevm("pxa2xx_dma", 0, 0, pxa2xx_dma_save, pxa2xx_dma_load, s); |
|
514 |
|
|
458 | 515 |
return s; |
459 | 516 |
} |
460 | 517 |
|
Also available in: Unified diff