On 12/20/2011 02:01 AM, Peter Maydell wrote:
Implement save/load for the LAN9118.

Signed-off-by: Peter Maydell<peter.mayd...@linaro.org>
---
Does anybody have a nicer solution to the "can't put an enum in a
VMStateDescription" problem?

  hw/lan9118.c |  126 +++++++++++++++++++++++++++++++++++++++++++++++-----------
  1 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 {
  };
Hi Peter, I have a small question. Wouldn't it be better to use uint32_t for variables that actually have positive values only? That would make code easier to understand. For example in this state

  typedef struct {
-    enum tx_state state;
+    /* state is a tx_state but we can't put enums in VMStateDescriptions. */
+    uint32_t state;
      uint32_t cmd_a;
      uint32_t cmd_b;
-    int buffer_size;
-    int offset;
-    int pad;
-    int fifo_used;
-    int len;
+    int32_t buffer_size;
+    int32_t offset;
+    int32_t pad;
+    int32_t fifo_used;
+    int32_t len;
      uint8_t data[2048];
  } LAN9118Packet;
all member variables (except maybe buffer_size) can have positive values only. buffer_size is probably positive-only too because this code

            while (n--) {
                s->txp->data[s->txp->len] = val & 0xff;
                s->txp->len++;
                val >>= 8;
                s->txp->buffer_size--;
            }
looks wrong (I haven't dug dip into it though) and must be
            ...
            while (s->txp->buffer_size && (n--)) {
            ...

--
Mitsyanko Igor
ASWG, Moscow R&D center, Samsung Electronics
email: i.mitsya...@samsung.com

Reply via email to