<div>Hi there:</div>
<div><br> any thoughts on this? expecting to get your guidiance...<img style="MARGIN: 0px 0.2ex; VERTICAL-ALIGN: middle" src="cid:330@goomoji.gmail" width="12" height="12" goomoji="330"></div>
<div> </div>
<div>Thanks,</div>
<div> </div>
<div>Jason<br></div>
<div class="gmail_quote">2010/12/28 fujin huang <span dir="ltr"><<a href="mailto:ahsslah@gmail.com">ahsslah@gmail.com</a>></span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>Hi Michael:</div>
<div> I am a new babie to etherboot/gpxe, in order to better understanding the source codes, i have learned to write a simple loader to test UNDI driver calls of the native NIC's option rom. However, i have encounter a very strange issue on Lenovo T400 laptop whose NIC is <font color="#cc0000">Intel</font> 82567LM, and below is the main work flow of the test procedure:</div>
<div>.1, Set up PXE tftp server , DHCP server and the file path of the loader(the loader is built as a COM32 program)</div>
<div> 2, Enable "Boot from Lan" option in T400's BIOS</div>
<div> 3, The loader will be download to T400 through PXE, and its logic is:</div>
<div> a. Relocate loader itself and prepare the C running environment. (this is done by assembly code, and will switch real mode to protect mode)</div>
<div> b. Get system memory map by int 15 call(0xe820), then hook int 15 to hide the loader and initilize the heap;</div>
<div> c. Search option rom's UNDI stack by searching "PXENV+" and "!PXE" keywords in memory range 0x10000 to 0xA0000, and save the undi entry point if found.</div>
<div> d. Issue the first undi function call PXENV_GET_INFORMATION to get NIC's configuration. </div>
<div> e. Do other UNDI call tests.</div>
<div> </div>
<div> An error code 0x6a, which is PXENV_STATUS_UNDI_INVALID_STATE, has returned in step d. I have tried other UNDI function calls, they all returned 0x6a. It's quite wield since that the loader works well on my desktop whose NIC is Intel Pro 1000 GT Desktop NIC and the UNDI function call always be excuted succussfully.</div>
<div> </div>
<div>i have tried Gpxe and found it works on T400, after studied the source codes i noticed that Gpxe has implemented all UNDI APIs itself and hasn't reused any API provided by Option rom or BIOS. Also I have checked the source code of Etherboot, and found there is a ensure_ready() / ensure_pxe_state() macro before every UNDI API call, and a PXENV_STATUS_UNDI_INVALID_STATE error code will be returned if these check functions.</div>
<div> </div>
<div>Could you please give some hint on why and when a PXENV_STATUS_UNDI_INVALID_STATE are returned when issue a native UNDI API call provided by BIOS/Option rom? Native BIOS/Option rom's undi driver APIs should always ready for other programs.</div>
<div> </div>
<div> </div>
<div>Any help will be highly appreciated!</div>
<div> </div>
<div>Thanks,</div>
<div> </div>
<div>Jason</div></blockquote></div><br>