Revision 23e39294 hw/stellaris_enet.c
b/hw/stellaris_enet.c | ||
---|---|---|
326 | 326 |
s->tx_frame_len = -1; |
327 | 327 |
} |
328 | 328 |
|
329 |
static void stellaris_enet_save(QEMUFile *f, void *opaque) |
|
330 |
{ |
|
331 |
stellaris_enet_state *s = (stellaris_enet_state *)opaque; |
|
332 |
int i; |
|
333 |
|
|
334 |
qemu_put_be32(f, s->ris); |
|
335 |
qemu_put_be32(f, s->im); |
|
336 |
qemu_put_be32(f, s->rctl); |
|
337 |
qemu_put_be32(f, s->tctl); |
|
338 |
qemu_put_be32(f, s->thr); |
|
339 |
qemu_put_be32(f, s->mctl); |
|
340 |
qemu_put_be32(f, s->mdv); |
|
341 |
qemu_put_be32(f, s->mtxd); |
|
342 |
qemu_put_be32(f, s->mrxd); |
|
343 |
qemu_put_be32(f, s->np); |
|
344 |
qemu_put_be32(f, s->tx_frame_len); |
|
345 |
qemu_put_be32(f, s->tx_fifo_len); |
|
346 |
qemu_put_buffer(f, s->tx_fifo, sizeof(s->tx_fifo)); |
|
347 |
for (i = 0; i < 31; i++) { |
|
348 |
qemu_put_be32(f, s->rx[i].len); |
|
349 |
qemu_put_buffer(f, s->rx[i].data, sizeof(s->rx[i].data)); |
|
350 |
|
|
351 |
} |
|
352 |
qemu_put_be32(f, s->next_packet); |
|
353 |
qemu_put_be32(f, s->rx_fifo - s->rx[s->next_packet].data); |
|
354 |
qemu_put_be32(f, s->rx_fifo_len); |
|
355 |
} |
|
356 |
|
|
357 |
static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id) |
|
358 |
{ |
|
359 |
stellaris_enet_state *s = (stellaris_enet_state *)opaque; |
|
360 |
int i; |
|
361 |
|
|
362 |
if (version_id != 1) |
|
363 |
return -EINVAL; |
|
364 |
|
|
365 |
s->ris = qemu_get_be32(f); |
|
366 |
s->im = qemu_get_be32(f); |
|
367 |
s->rctl = qemu_get_be32(f); |
|
368 |
s->tctl = qemu_get_be32(f); |
|
369 |
s->thr = qemu_get_be32(f); |
|
370 |
s->mctl = qemu_get_be32(f); |
|
371 |
s->mdv = qemu_get_be32(f); |
|
372 |
s->mtxd = qemu_get_be32(f); |
|
373 |
s->mrxd = qemu_get_be32(f); |
|
374 |
s->np = qemu_get_be32(f); |
|
375 |
s->tx_frame_len = qemu_get_be32(f); |
|
376 |
s->tx_fifo_len = qemu_get_be32(f); |
|
377 |
qemu_get_buffer(f, s->tx_fifo, sizeof(s->tx_fifo)); |
|
378 |
for (i = 0; i < 31; i++) { |
|
379 |
s->rx[i].len = qemu_get_be32(f); |
|
380 |
qemu_get_buffer(f, s->rx[i].data, sizeof(s->rx[i].data)); |
|
381 |
|
|
382 |
} |
|
383 |
s->next_packet = qemu_get_be32(f); |
|
384 |
s->rx_fifo = s->rx[s->next_packet].data + qemu_get_be32(f); |
|
385 |
s->rx_fifo_len = qemu_get_be32(f); |
|
386 |
|
|
387 |
return 0; |
|
388 |
} |
|
389 |
|
|
329 | 390 |
void stellaris_enet_init(NICInfo *nd, uint32_t base, qemu_irq irq) |
330 | 391 |
{ |
331 | 392 |
stellaris_enet_state *s; |
... | ... | |
344 | 405 |
stellaris_enet_can_receive, s); |
345 | 406 |
|
346 | 407 |
stellaris_enet_reset(s); |
408 |
register_savevm("stellaris_enet", -1, 1, |
|
409 |
stellaris_enet_save, stellaris_enet_load, s); |
|
347 | 410 |
} |
Also available in: Unified diff