diff options
author | Stefan Weil <weil@mail.berlios.de> | 2010-03-02 22:37:57 +0100 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2010-03-03 13:44:20 +0200 |
commit | 3d0f4b9bb5da7d999afef3bc4b434f7f504a9899 (patch) | |
tree | 402b0512d941878eb8e6f06d1e793b9b21d81a4b /hw/eepro100.c | |
parent | ec1d02d8de08ceda59b8a6e7a74ec1ae42a40ee6 (diff) |
eepro100: New function for reading command block
Move code which reads the command block to the
new function read_cb. The patch also fixes some
endianess issues related to the command block
and moves declarations of local variables to
the beginning of the block.
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/eepro100.c')
-rw-r--r-- | hw/eepro100.c | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/hw/eepro100.c b/hw/eepro100.c index f5aa3068a4..e10ce62426 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -798,6 +798,16 @@ static void dump_statistics(EEPRO100State * s) //~ missing("CU dump statistical counters"); } +static void read_cb(EEPRO100State *s) +{ + cpu_physical_memory_read(s->cb_address, (uint8_t *) &s->tx, sizeof(s->tx)); + s->tx.status = le16_to_cpu(s->tx.status); + s->tx.command = le16_to_cpu(s->tx.command); + s->tx.link = le32_to_cpu(s->tx.link); + s->tx.tbd_array_addr = le32_to_cpu(s->tx.tbd_array_addr); + s->tx.tcb_bytes = le16_to_cpu(s->tx.tcb_bytes); +} + static void tx_command(EEPRO100State *s) { uint32_t tbd_array = le32_to_cpu(s->tx.tbd_array_addr); @@ -901,21 +911,25 @@ static void set_multicast_list(EEPRO100State *s) static void action_command(EEPRO100State *s) { for (;;) { - s->cb_address = s->cu_base + s->cu_offset; - cpu_physical_memory_read(s->cb_address, (uint8_t *)&s->tx, sizeof(s->tx)); - uint16_t command = le16_to_cpu(s->tx.command); - s->tx.status = le16_to_cpu(s->tx.status); - logout("val=(cu start), status=0x%04x, command=0x%04x, link=0x%08x\n", - s->tx.status, command, s->tx.link); - bool bit_el = ((command & COMMAND_EL) != 0); - bool bit_s = ((command & COMMAND_S) != 0); - bool bit_i = ((command & COMMAND_I) != 0); - bool bit_nc = ((command & COMMAND_NC) != 0); + bool bit_el; + bool bit_s; + bool bit_i; + bool bit_nc; bool success = true; - //~ bool bit_sf = ((command & COMMAND_SF) != 0); - uint16_t cmd = command & COMMAND_CMD; - s->cu_offset = le32_to_cpu(s->tx.link); - switch (cmd) { + s->cb_address = s->cu_base + s->cu_offset; + read_cb(s); + bit_el = ((s->tx.command & COMMAND_EL) != 0); + bit_s = ((s->tx.command & COMMAND_S) != 0); + bit_i = ((s->tx.command & COMMAND_I) != 0); + bit_nc = ((s->tx.command & COMMAND_NC) != 0); +#if 0 + bool bit_sf = ((s->tx.command & COMMAND_SF) != 0); +#endif + s->cu_offset = s->tx.link; + TRACE(OTHER, + logout("val=(cu start), status=0x%04x, command=0x%04x, link=0x%08x\n", + s->tx.status, s->tx.command, s->tx.link)); + switch (s->tx.command & COMMAND_CMD) { case CmdNOp: /* Do nothing. */ break; |