Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
soc:2009:oremanj:journal:week11 [2009/08/07 19:39]
rwcr
soc:2009:oremanj:journal:week11 [2009/08/08 12:15] (current)
rwcr
Line 118: Line 118:
 [linker] Add mechanism for subsystem-dependent configuration options]] [linker] Add mechanism for subsystem-dependent configuration options]]
   * On branch **ath5k** in staging:   * On branch **ath5k** in staging:
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=9512ea70ce18e185d247e245201a31a4e2e798fc|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=9eeb6a04e914b1687b63924b4236e1e6abb08270|
 [802.11] Enhance support for driver PHY differences]] [802.11] Enhance support for driver PHY differences]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=cc938ee7c676b91bbadad3f08638f10a704dd2bc|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=9babe5842ad054b703fc57b15e75546a38e362b4|
 [802.11] Set channels early on to avoid tuning to an undefined channel]] [802.11] Set channels early on to avoid tuning to an undefined channel]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=43d6bc871bbdd2258815e67b4d398922b7f73952|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=d84586bf362af20972bcb2fec9af9df980d81fbf|
 [802.11] Fix maximum packet length]] [802.11] Fix maximum packet length]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=da292ec3b2789a4f3c59dfaf1156d479aac222e7|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=e572f57d6ecb969c0521965fd9887a7cd41c4e19|
 [802.11] Fix memory leak on unsuccessful probes]] [802.11] Fix memory leak on unsuccessful probes]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=7f34c1e7ab7cf498febe6ada5fd3891c52d59a4c|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=12e12ecc4c6f115d7d20cd74e2afcbee74c404fd|
 [legal] Add MIT licence declaration]] [legal] Add MIT licence declaration]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=0e5b32e4d3971e7b3e624f0b0f2927f8a3b816d9|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=739a9e76613fac83a1ff0196f96ac78e70b36164|
 [ath5k] Add support for non-802.11n Atheros wireless NICs]] [ath5k] Add support for non-802.11n Atheros wireless NICs]]
-    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=e9942ca44fa11eb5f675a72db51b9bbc45fb3e1e|+    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=1dac2e8491b0c7a73f0a1bb2b9517f32dda15cbd|
 [rom] Allow ROM images to have uncompressed size greater than 128k]] [rom] Allow ROM images to have uncompressed size greater than 128k]]
 +
 +==== Friday, 8 August ====
 +I discovered that my test system'​s video card takes up 55k after it initializes,​ meaning my 90k gPXE ROM would cause an option ROM overflow. Seems my test system'​s BIOS doesn'​t handle this gracefully. That's one mystery solved, though it doesn'​t make my e1000 any less bricked...
 +
 +On Michael'​s suggestion, I implemented a generic means for placing variables in base memory, in much the manner of ''​_''''​_data16''​ for pcbios builds (it actually uses ''​_''''​_data16''​ if it can). On EFI it places the variables in a special section that is relocated into a freshly allocated bit of base memory at init time. This is used by the FireWire debug code to place its portal structure low, where the debugging host can scan for it. It's a much nicer mechanism than the ''​umalloc_low()''​ of my original implementation.
 +
 +With that, the firewire branch is (again) ready to be reviewed:
 +  * On branch **firewire** in staging:
 +    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=21c48d156f23bbb802334ef4c0f6d8138bac091a|
 +[basemem] Add facility for placing variables in base memory]]
 +    * [[http://​git.etherboot.org/?​p=gpxe-staging.git;​a=commit;​h=7f0ab72f3826e019835fae713398d85821e7440b|
 +[fwdebug] Add generic FireWire debugging interface]]
 +
 +I spent a while cleaning up my 802.11 crypto changes, and have created a branch for them and the iwmgmt commands using the new ''​config_//​subsystem//​.o''​ mechanism for object-dependent configuration:​
 +  * On branch **wireless-pretty** in my personal repository:
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=85f81110f6f0d72e5cc85e83bc87b458f7162866|
 +[802.11] Add core support for detecting and using encrypted networks]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=435a44c6ef4347c7ede8c2749bfeaecb0d7e1ad9|
 +[iwmgmt] Add wireless management commands and text for common errors]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=51b17ad4f41a8395999db7090ac37043d6f22d6a|
 +[digest] Add generic CRC32 function]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=fc1b8a22e169d0701d254af53315f88ae93991c4|
 +[cipher] Add the ARC4 stream cipher]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=be7fb2860acd4b594f1ec747ed5e8917a0a3999e|
 +[digest] Add HMAC-SHA1 based pseudorandom function and PBKDF2]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=acfde649a0864309247c6ca0da4149740c54bd5f|
 +[crypto] Add parentheses around len argument in blocksize assert]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=5db4c2ac9b8ad571355b367a6846beb61f93af53|
 +[crypto] Make AES context size and algorithm structure externally available]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=79dc6c2845b0c93bebd59f5865d098e5a436af12|
 +[crypto] Add AES key-wrap mode (RFC 3394)]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=bf09bf67df2f1f15e7ae1e70cd44f7c99a12d111|
 +[crypto] Add a placeholder for a proper random number generator]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=97c4eedca8437e34a7f09139c1ff1b3db35d9135|
 +[eapol] Add basic support for 802.1X EAP over LANs]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=eb227c549824e95ffe8be0e78749b2b14d362c97|
 +[802.11] Add support for WEP-protected networks]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=a7f151439ab414c877e229c4c19f9508221661b1|
 +[wpa] Add general support for WPA-protected 802.11 networks]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=f13249ce3397929469c3983af8289cf447ea3f8c|
 +[wpa] Add pre-shared key frontend (WPA "​Personal"​ with just a passphrase)]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=f2eb1cb5d62517021dc10c75ab464f57dccc228d|
 +[wpa] Add TKIP backend (legacy RC4-based cryptosystem)]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=80fa41ea472eadc928a20663ca2b75cae6e33076|
 +[wpa] Add CCMP backend (new AES-based cryptosystem)]]
 +
 +I've separated out my EAP code (WPA Enterprise) into a different branch. It's currently useless without any EAP authentication methods implemented,​ but the structure is there if someone (perhaps me at a later date) wants to implement some.
 +  * On branch **eap** in my personal repository:
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=4ce9a93fcb813e96a787a444d63c571c4c2c0719|
 +[eap] Add basic support for the 802.1X Extensible Authentication Protocol]]
 +    * [[http://​git.etherboot.org/?​p=people/​oremanj/​gpxe.git;​a=commit;​h=23c3bd939b47564875afe5119cabf5e5f9afa929|
 +[wpa] Add EAP frontend (WPA "​Enterprise"​ using an authentication server)]]
 +
 +==== Saturday, 8 August ====
 +Meeting today, the majority of which was spent discussing an idea I had for loading large ROMs in crowded option ROM environments:​ have a small ROM stub that loads the rest of the ROM to an area not subject to the 128k option ROM limit. There are several ways of implementing this:
 +  * My initial idea: program the PCI ROM BAR to map the full ROM to an area in high memory. This has some serious practical issues of the "where do you put it?" variety, because one would need to walk both the e820 memory map and the PCI bus to find an area not used by RAM or any other memory-mapped I/O device in the system. And there are some devices, such as the APICs, that don't show up in either.
 +    * On the other hand, it may be safe to do this by looking for a sufficiently PCI memory BAR mapping (e.g. video card), disabling that mapping while we access the ROM, and reenabling it later - bears trying, at least.
 +  * Michael'​s idea: use the NVS subsystem to access the flash directly, scan for a gPXE image embedded within it, expose it via int13h, and boot it. The only practical issue here is the fact that most supported NICs don't have an NVS driver. The result may also be rather larger than accessing the PCI BARs, but tiny code that doesn'​t work is useless.
 +This will be an interesting project to hack on over the next week. :-)
 +
 +Things left to do this summer:
 +  * Make sure all relevant commits described on this page get merged or fixed to be mergeable;
 +  * Clean up the **firmware** branch to use new linker macros, and push to staging;
 +  * Document, document, document!
 +  * With remaining time, work on some of the dangling threads:
 +    * Flash stub
 +    * EAP
 +    * Something else?
 +

QR Code
QR Code soc:2009:oremanj:journal:week11 (generated for current page)