<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">&lt;<a href="mailto:ahsslah@gmail.com">ahsslah@gmail.com</a>&gt;</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&#39;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 &quot;Boot from Lan&quot; option in T400&#39;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&#39;s UNDI stack by searching &quot;PXENV+&quot; and &quot;!PXE&quot; 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&#39;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&#39;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&#39;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&#39;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>