326
323
s->tx_frame_len = -1;
326
static void stellaris_enet_save(QEMUFile *f, void *opaque)
328
stellaris_enet_state *s = (stellaris_enet_state *)opaque;
331
qemu_put_be32(f, s->ris);
332
qemu_put_be32(f, s->im);
333
qemu_put_be32(f, s->rctl);
334
qemu_put_be32(f, s->tctl);
335
qemu_put_be32(f, s->thr);
336
qemu_put_be32(f, s->mctl);
337
qemu_put_be32(f, s->mdv);
338
qemu_put_be32(f, s->mtxd);
339
qemu_put_be32(f, s->mrxd);
340
qemu_put_be32(f, s->np);
341
qemu_put_be32(f, s->tx_frame_len);
342
qemu_put_be32(f, s->tx_fifo_len);
343
qemu_put_buffer(f, s->tx_fifo, sizeof(s->tx_fifo));
344
for (i = 0; i < 31; i++) {
345
qemu_put_be32(f, s->rx[i].len);
346
qemu_put_buffer(f, s->rx[i].data, sizeof(s->rx[i].data));
349
qemu_put_be32(f, s->next_packet);
350
qemu_put_be32(f, s->rx_fifo - s->rx[s->next_packet].data);
351
qemu_put_be32(f, s->rx_fifo_len);
354
static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id)
356
stellaris_enet_state *s = (stellaris_enet_state *)opaque;
362
s->ris = qemu_get_be32(f);
363
s->im = qemu_get_be32(f);
364
s->rctl = qemu_get_be32(f);
365
s->tctl = qemu_get_be32(f);
366
s->thr = qemu_get_be32(f);
367
s->mctl = qemu_get_be32(f);
368
s->mdv = qemu_get_be32(f);
369
s->mtxd = qemu_get_be32(f);
370
s->mrxd = qemu_get_be32(f);
371
s->np = qemu_get_be32(f);
372
s->tx_frame_len = qemu_get_be32(f);
373
s->tx_fifo_len = qemu_get_be32(f);
374
qemu_get_buffer(f, s->tx_fifo, sizeof(s->tx_fifo));
375
for (i = 0; i < 31; i++) {
376
s->rx[i].len = qemu_get_be32(f);
377
qemu_get_buffer(f, s->rx[i].data, sizeof(s->rx[i].data));
380
s->next_packet = qemu_get_be32(f);
381
s->rx_fifo = s->rx[s->next_packet].data + qemu_get_be32(f);
382
s->rx_fifo_len = qemu_get_be32(f);
329
387
void stellaris_enet_init(NICInfo *nd, uint32_t base, qemu_irq irq)
331
389
stellaris_enet_state *s;
392
qemu_check_nic_model(nd, "stellaris");
334
394
s = (stellaris_enet_state *)qemu_mallocz(sizeof(stellaris_enet_state));
335
395
iomemtype = cpu_register_io_memory(0, stellaris_enet_readfn,
336
396
stellaris_enet_writefn, s);
337
397
cpu_register_physical_memory(base, 0x00001000, iomemtype);
340
399
memcpy(s->macaddr, nd->macaddr, 6);
343
s->vc = qemu_new_vlan_client(nd->vlan, stellaris_enet_receive,
344
stellaris_enet_can_receive, s);
402
s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
403
stellaris_enet_receive, stellaris_enet_can_receive, s);
404
qemu_format_nic_info_str(s->vc, s->macaddr);
346
407
stellaris_enet_reset(s);
408
register_savevm("stellaris_enet", -1, 1,
409
stellaris_enet_save, stellaris_enet_load, s);