2013/1/26 Paul Brook p...@codesourcery.com
In order to reduce the processing load of the host CPU, the FTGMAC100
implements TCP, UDP, and IP V4 checksum generation and validation, and
supports VLAN tagging.
I see no evidence of these features in the code.
My bad and yes, the VLAN and checksum offload are not yet implemented.
I simply fotget to remove these description ... :P
but since the checksum offload feature of the real hardware actually
malfunctioned.
(becuase of the alignment issue).
I'll only implement the VLAN tagging feature in the next version.
+static void ftgmac100_read_desc(hwaddr addr, void *desc)
+{
+int i;
+uint32_t *p = desc;
+
+cpu_physical_memory_read(addr, desc, 16);
+
+for (i = 0; i 16; i += 4) {
+*p = le32_to_cpu(*p);
+}
+}
You're relying on the compiler choosing a particular bitfield and structure
layout. Don't do that. Especially when one of the fields is a void*.
Clearly
never been tested on a 64-bit host. void *desc is just plain lazy.
yes, it's my bad. It'll be fixed later
+buf = s-txbuff.buf + s-txbuff.len;
+cpu_physical_memory_read(txd.buf, (uint8_t *)buf, txd.len);
Buffer overflow. In at least two differnt ways.
yes, it's my bad. It'll be fixed later
+if (!(s-maccr MACCR_HT_MULTI_EN)) {
+printf([qemu] ftgmac100_receive: mcst filtered\n);
+return -1;
Looks like stray debug code. Several other occurences.
+case REG_TXPD:
+case REG_HPTXPD:
+qemu_mod_timer(s-qtimer, qemu_get_clock_ns(vm_clock) + 1);
Using a timer here is wrong. Either you should transmit immediately, or
you
should wait for something else to happen. Delaying by 1ns is never the
right
answer.
Paul
yes, it's my bad. I'll try to use mutex later
--
Best wishes,
Kuo-Jung Su