Some RX ring code reworking. Code simplified and functions moved from tg3_hw.c to the more appropriate tg3_main.c.
Little coding today. Most of the time was spent verifying that we do things correctly by reading the datasheet, linux driver and etherboot driver. Added a missing function that sets thresholds for RX indications.
Again more work on the RX ring handling, which is now implemented in a way I think it should work. I discovered some sort of memory corruption issue that freezes gPXE on all test machines when certain packets are received, and tried to debug this issue.
Debugging obscure freeze issue. I found out that the card doesn't freeze if I set the data length field to 0 in the rx descriptor. It freezes if I use the expected value(1536 bytes). It also freezes on packet RX if I don't allocate any io_buffers and leave the DMA addresses to 0, when the length field is 1536. This happens if I connect the test machine to my development workstation, and do a DHCP request on the _workstation_, so gPXE receives a DHCP request. I did this as a test and gPXE freezes as soon as the packets leave the wire on the workstation. It does neither freeze, nor properly receive packets when connected to a real DHCP server that responds with a DHCP offer through a switch.