> @@ -44,6 +45,10 @@ typedef struct { > uint8_t int_level; > uint8_t int_mask; > MemoryRegion mmio; > + > + /* MDIO bus and the attached phy */ > + struct qemu_mdio mdio_bus; > + struct qemu_phy phy; > } smc91c111_state; > > static const VMStateDescription vmstate_smc91c111 = { > @@ -71,6 +76,8 @@ static const VMStateDescription vmstate_smc91c111 = { > VMSTATE_BUFFER_UNSAFE(data, smc91c111_state, 0, NUM_PACKETS * > 2048), VMSTATE_UINT8(int_level, smc91c111_state), > VMSTATE_UINT8(int_mask, smc91c111_state), > + VMSTATE_MDIO(mdio_bus, smc91c111_state), > + VMSTATE_MDIO_PHY(phy, smc91c111_state), > VMSTATE_END_OF_LIST() > } > };
> @@ -754,6 +768,9 @@ static int smc91c111_init1(SysBusDevice *dev) > s->nic = qemu_new_nic(&net_smc91c111_info, &s->conf, > object_get_typename(OBJECT(dev)), dev->qdev.id, > s); qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a); > + > + tdk_init(&s->phy); > + mdio_attach(&s->mdio_bus, &s->phy, 0); > /* ??? Save/restore. */ > return 0; > } There's no reason for smc91c111_state to contain the PHY state. For devices with an off-chip PHY we have no way of knowing which phy is used, or what state is required. The PHY should be a device in its own right, and know how to save/restore itself. smc91c111_init1 should create the PHY, attach it to the MDIO bus, then forget about it. Paul