This is an old revision of the document!
===== Week 5 [ Mon 21 Jun 2010 - Sun 27 Jun 2010 ] ===== ==== Day 1 [ Mon 21 Jun 2010 ] ==== Git commit: [[http://git.etherboot.org/?p=people/andreif/gpxe.git;a=commit;h=0906919af2982e3f285287035c210e101fafd783|0906919af2982e3f285287035c210e101fafd783]] Today I continued with my work on the forcedeth driver. Eventually I reached a point where I really needed the registers mapped. At this point, I was really confused since I saw that most of the drivers simply got ioaddr as the base address or used ioremap to get a memory mapped BAR. The Linux driver can't do this since some models have different register sizes (i guess this is the total size of all registers). So, it has to search all the BARs and select the one which describes the largest memory area. I had to go a bit more low-level to do this, and use some pci_* routines. With stefanha's help I did manage to do it eventually. I spent most of the time reading up on the PCI specification and studying to see if other drivers have this problem. There is the ''via-velocity'' driver which has a similar problem and implements its own ''pci_resource_flags routine''. Perhaps this should be moved to a common header somewhere. Tomorrow I'll finish .probe and do the first tests on the NIC I have :) ==== Day 2 [ Tue 22 Jun 2010 ] ==== Git commit: [[http://git.etherboot.org/?p=people/andreif/gpxe.git;a=commit;h=57da3ac719c5a15cf772dfa2cc5bf93cf6434eb5|57da3ac719c5a15cf772dfa2cc5bf93cf6434eb5]] Well, I guess one should not count his chickens before they hatch. The .probe routine branched into a lot of other routines, some of which were not that easy to understand. There is yet another routine I have to implement ''phy_init'' which I'll get to tomorrow. In other news, I posted my r8169 patch today. ==== Day 3 [ Wed 23 Jun 2010 ] ==== Git commit: [[http://git.etherboot.org/?p=people/andreif/gpxe.git;a=commit;h=a344aefa7cc02caa32aa4bb85f23748f7673d676|a344aefa7cc02caa32aa4bb85f23748f7673d676]] Finally the implementations are done. I managed to finish both .probe and .remove today, along with some auxiliary routines they used. There is a surprising amount of code involved, mostly due to small vendor-specific tweaks. I'll post a description tomorrow regarding the registers I've used so far, and what I have learned about the NICs. The code will have to be cleaned, I have some routines a gazillion lines long. Everything's ready for the first test tomorrow.