From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rl72u-0005UO-M8 for qemu-devel@nongnu.org; Wed, 11 Jan 2012 17:53:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rl72t-0000CT-0P for qemu-devel@nongnu.org; Wed, 11 Jan 2012 17:53:28 -0500 Received: from mail-qw0-f52.google.com ([209.85.216.52]:38711) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rl72s-0000C8-Rm for qemu-devel@nongnu.org; Wed, 11 Jan 2012 17:53:26 -0500 Received: by qafl39 with SMTP id l39so770682qaf.4 for ; Wed, 11 Jan 2012 14:53:26 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: <1324332111-29059-1-git-send-email-peter.maydell@linaro.org> Date: Wed, 11 Jan 2012 22:53:26 +0000 Message-ID: From: Peter Maydell Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] hw/lan9118: Add save/load support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: patches@linaro.org On consideration, unless somebody wishes to: (a) commit this (b) object I'm going to put it in the next arm-devs pullreq I do. This is reasonably justifiable since the only boards using lan9118 are the ARM realview and vexpress devboard models. -- PMM On 10 January 2012 16:55, Peter Maydell wrote: > Ping^2 (slightly early but there's another patch on list which will > conflict so we ought to get one committed at least) > > thanks > -- PMM > > On 4 January 2012 10:41, Peter Maydell wrote: >> Ping? >> >> -- PMM >> >> On 19 December 2011 22:01, Peter Maydell wrot= e: >>> Implement save/load for the LAN9118. >>> >>> Signed-off-by: Peter Maydell >>> --- >>> Does anybody have a nicer solution to the "can't put an enum in a >>> VMStateDescription" problem? >>> >>> =C2=A0hw/lan9118.c | =C2=A0126 ++++++++++++++++++++++++++++++++++++++++= +++++++----------- >>> =C2=A01 files changed, 103 insertions(+), 23 deletions(-) >>> >>> diff --git a/hw/lan9118.c b/hw/lan9118.c >>> index 7e64c5d..6542a26 100644 >>> --- a/hw/lan9118.c >>> +++ b/hw/lan9118.c >>> @@ -136,17 +136,36 @@ enum tx_state { >>> =C2=A0}; >>> >>> =C2=A0typedef struct { >>> - =C2=A0 =C2=A0enum tx_state state; >>> + =C2=A0 =C2=A0/* state is a tx_state but we can't put enums in VMState= Descriptions. */ >>> + =C2=A0 =C2=A0uint32_t state; >>> =C2=A0 =C2=A0 uint32_t cmd_a; >>> =C2=A0 =C2=A0 uint32_t cmd_b; >>> - =C2=A0 =C2=A0int buffer_size; >>> - =C2=A0 =C2=A0int offset; >>> - =C2=A0 =C2=A0int pad; >>> - =C2=A0 =C2=A0int fifo_used; >>> - =C2=A0 =C2=A0int len; >>> + =C2=A0 =C2=A0int32_t buffer_size; >>> + =C2=A0 =C2=A0int32_t offset; >>> + =C2=A0 =C2=A0int32_t pad; >>> + =C2=A0 =C2=A0int32_t fifo_used; >>> + =C2=A0 =C2=A0int32_t len; >>> =C2=A0 =C2=A0 uint8_t data[2048]; >>> =C2=A0} LAN9118Packet; >>> >>> +static const VMStateDescription vmstate_lan9118_packet =3D { >>> + =C2=A0 =C2=A0.name =3D "lan9118_packet", >>> + =C2=A0 =C2=A0.version_id =3D 1, >>> + =C2=A0 =C2=A0.minimum_version_id =3D 1, >>> + =C2=A0 =C2=A0.fields =3D (VMStateField[]) { >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(state, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(cmd_a, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(cmd_b, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(buffer_size, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(offset, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(pad, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(fifo_used, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(len, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT8_ARRAY(data, LAN9118Packet, 2= 048), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_END_OF_LIST() >>> + =C2=A0 =C2=A0} >>> +}; >>> + >>> =C2=A0typedef struct { >>> =C2=A0 =C2=A0 SysBusDevice busdev; >>> =C2=A0 =C2=A0 NICState *nic; >>> @@ -186,34 +205,95 @@ typedef struct { >>> =C2=A0 =C2=A0 uint32_t phy_int; >>> =C2=A0 =C2=A0 uint32_t phy_int_mask; >>> >>> - =C2=A0 =C2=A0int eeprom_writable; >>> + =C2=A0 =C2=A0int32_t eeprom_writable; >>> =C2=A0 =C2=A0 uint8_t eeprom[128]; >>> >>> - =C2=A0 =C2=A0int tx_fifo_size; >>> + =C2=A0 =C2=A0int32_t tx_fifo_size; >>> =C2=A0 =C2=A0 LAN9118Packet *txp; >>> =C2=A0 =C2=A0 LAN9118Packet tx_packet; >>> >>> - =C2=A0 =C2=A0int tx_status_fifo_used; >>> - =C2=A0 =C2=A0int tx_status_fifo_head; >>> + =C2=A0 =C2=A0int32_t tx_status_fifo_used; >>> + =C2=A0 =C2=A0int32_t tx_status_fifo_head; >>> =C2=A0 =C2=A0 uint32_t tx_status_fifo[512]; >>> >>> - =C2=A0 =C2=A0int rx_status_fifo_size; >>> - =C2=A0 =C2=A0int rx_status_fifo_used; >>> - =C2=A0 =C2=A0int rx_status_fifo_head; >>> + =C2=A0 =C2=A0int32_t rx_status_fifo_size; >>> + =C2=A0 =C2=A0int32_t rx_status_fifo_used; >>> + =C2=A0 =C2=A0int32_t rx_status_fifo_head; >>> =C2=A0 =C2=A0 uint32_t rx_status_fifo[896]; >>> - =C2=A0 =C2=A0int rx_fifo_size; >>> - =C2=A0 =C2=A0int rx_fifo_used; >>> - =C2=A0 =C2=A0int rx_fifo_head; >>> + =C2=A0 =C2=A0int32_t rx_fifo_size; >>> + =C2=A0 =C2=A0int32_t rx_fifo_used; >>> + =C2=A0 =C2=A0int32_t rx_fifo_head; >>> =C2=A0 =C2=A0 uint32_t rx_fifo[3360]; >>> - =C2=A0 =C2=A0int rx_packet_size_head; >>> - =C2=A0 =C2=A0int rx_packet_size_tail; >>> - =C2=A0 =C2=A0int rx_packet_size[1024]; >>> + =C2=A0 =C2=A0int32_t rx_packet_size_head; >>> + =C2=A0 =C2=A0int32_t rx_packet_size_tail; >>> + =C2=A0 =C2=A0int32_t rx_packet_size[1024]; >>> >>> - =C2=A0 =C2=A0int rxp_offset; >>> - =C2=A0 =C2=A0int rxp_size; >>> - =C2=A0 =C2=A0int rxp_pad; >>> + =C2=A0 =C2=A0int32_t rxp_offset; >>> + =C2=A0 =C2=A0int32_t rxp_size; >>> + =C2=A0 =C2=A0int32_t rxp_pad; >>> =C2=A0} lan9118_state; >>> >>> +static const VMStateDescription vmstate_lan9118 =3D { >>> + =C2=A0 =C2=A0.name =3D "lan9118", >>> + =C2=A0 =C2=A0.version_id =3D 1, >>> + =C2=A0 =C2=A0.minimum_version_id =3D 1, >>> + =C2=A0 =C2=A0.fields =3D (VMStateField[]) { >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_PTIMER(timer, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(irq_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(int_sts, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(int_en, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(fifo_int, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(rx_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(tx_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(hw_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(pmt_ctrl, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(gpio_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(gpt_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(word_swap, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(free_timer_start, lan9118_s= tate), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_cmd, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_data, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(afc_cfg, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(e2p_cmd, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(e2p_data, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_cr, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_hashh, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_hashl, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_mii_acc, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_mii_data, lan9118_state= ), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(mac_flow, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(phy_status, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(phy_control, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(phy_advertise, lan9118_stat= e), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(phy_int, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32(phy_int_mask, lan9118_state= ), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(eeprom_writable, lan9118_sta= te), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT8_ARRAY(eeprom, lan9118_state,= 128), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(tx_fifo_size, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0/* txp always points at tx_packet so need = not be saved */ >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_STRUCT(tx_packet, lan9118_state, 0= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 vmstate_lan9118_packet, LAN9118Packet), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(tx_status_fifo_used, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(tx_status_fifo_head, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32_ARRAY(tx_status_fifo, lan91= 18_state, 512), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_status_fifo_size, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_status_fifo_used, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_status_fifo_head, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32_ARRAY(rx_status_fifo, lan91= 18_state, 896), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_fifo_size, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_fifo_used, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_fifo_head, lan9118_state)= , >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT32_ARRAY(rx_fifo, lan9118_stat= e, 3360), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_packet_size_head, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rx_packet_size_tail, lan9118= _state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32_ARRAY(rx_packet_size, lan911= 8_state, 1024), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rxp_offset, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rxp_size, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_INT32(rxp_pad, lan9118_state), >>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_END_OF_LIST() >>> + =C2=A0 =C2=A0} >>> +}; >>> + >>> =C2=A0static void lan9118_update(lan9118_state *s) >>> =C2=A0{ >>> =C2=A0 =C2=A0 int level; >>> @@ -1151,7 +1231,6 @@ static int lan9118_init1(SysBusDevice *dev) >>> =C2=A0 =C2=A0 ptimer_set_freq(s->timer, 10000); >>> =C2=A0 =C2=A0 ptimer_set_limit(s->timer, 0xffff, 1); >>> >>> - =C2=A0 =C2=A0/* ??? Save/restore. =C2=A0*/ >>> =C2=A0 =C2=A0 return 0; >>> =C2=A0} >>> >>> @@ -1160,6 +1239,7 @@ static SysBusDeviceInfo lan9118_info =3D { >>> =C2=A0 =C2=A0 .qdev.name =C2=A0=3D "lan9118", >>> =C2=A0 =C2=A0 .qdev.size =C2=A0=3D sizeof(lan9118_state), >>> =C2=A0 =C2=A0 .qdev.reset =3D lan9118_reset, >>> + =C2=A0 =C2=A0.qdev.vmsd =3D &vmstate_lan9118, >>> =C2=A0 =C2=A0 .qdev.props =3D (Property[]) { >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 DEFINE_NIC_PROPERTIES(lan9118_state, conf), >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 DEFINE_PROP_END_OF_LIST(), >>> -- >>> 1.7.5.4 --=20 123456789012345678901234567890123456789012345678901234567890123456789012345= 67890 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 1 =C2=A0 =C2=A0 =C2=A0 =C2=A0 2 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 3 =C2=A0 =C2=A0 =C2=A0 =C2=A0 4 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 5 =C2=A0 =C2=A0 =C2=A0 =C2=A0 6 =C2=A0 =C2=A0 =C2=A0 =C2=A0 7 =C2=A0= =C2=A0 =C2=A0 =C2=A0 8