Unfortunately not much work was done today due to two exams for college. I continued with the ring init functions and also took a look at the freebsd driver. It can be confusing to decide which steps are required and which steps can be omitted while still having the card function reliably. Taking a look at the simpler freebsd driver can save a lot of confusion.
Pushed ring init code to iret. I also started working on the tg3_transmit() function. This didn't result in much code, as luckily more code than expected could be removed from the linux driver.
Pushed the tg3_transmit() code to iret. Today I tested the open and transmit code. My test machine locks up or reboots after open() is called(sometimes), and I was trying to find the cause of this bug. I'm probably messing up some pointer and/or DMA addresses, but haven't found out which one yet.
I continued debugging the crash/reboot issue today. Unfortunately I don't have any equipment for a serial console in my apartment in Vienna, and I can't make out the text before the machine reboots on any of my test machines. I have to insert code to deliberately freeze/hang the machine after every line of debugging output and test gPXE, which makes this a slow and tedious task. Unfortunately I haven't found the bug so far.
After an exam today I finally got home where I could test gPXE with a serial console. This made debugging a lot easier, and I located the bug to be an uninitialized field in the private driver structure( tp→dma_rwctrl). I started porting the function to initialize this field. Hopefully we won't discover much more bugs.