Today I continued porting functions required for tg3_init_one() and its helper functions. In the process I also removed codepaths for some register access workarounds; we simply use the slower workaround functions in gPXE to save space. Some initialization for LED control was removed, while other parts were only adapted to work with gPXE instead of linux API functions. There is still some work to do to get tg3_init_one() finished but hopefully it won't take too long.
Continued porting with some PHY init functions, including functions to access the PHY register, to probe the PHY and to detect the PHY ID.
Added the rest of the PHY functions. Hopefully we can reduce the code for the PHY init. Might have a look at the freebsd driver again, which seems to achieve the same thing with much fewer code.
Ported the nvram access, chip reset, firmware communication, mac address reading/programming and all the other functions that were missing for tg3_init_one(). This is the first version that compiles without any errors and the first version that can be sensible tested on real hardware. After a small fixup of the PHY probe/init functions the driver succeeded in reading the MAC address and registering the network device.
Started porting the hardware reset/init functions that we will need in tg3_open(). Hopefully tg3_reset_hw() doesn't turn out to be too long in gPXE, as the linux function is almost 1000 LoC.