[gPXE-devel] Help: UNDI call failed on Lenovo T400 laptop.

fujin huang ahsslah at gmail.com
Tue Dec 28 22:18:59 EST 2010


Hi there:

           any thoughts on this? expecting to get your guidiance...[?]

Thanks,

Jason
2010/12/28 fujin huang <ahsslah at gmail.com>

> Hi Michael:
>      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 Intel 82567LM,  and
> below is the main work flow of the test procedure:
> .1, Set up PXE tftp server , DHCP server and the file path of the
> loader(the loader is built as a COM32 program)
>  2, Enable "Boot from Lan" option in T400's BIOS
>  3, The loader will be download to T400 through PXE, and its logic is:
>        a. Relocate loader itself and prepare the C running environment.
> (this is done by assembly code, and will switch real mode to protect mode)
>        b. Get system memory map by int 15 call(0xe820), then  hook int
> 15 to hide the loader and initilize the heap;
>        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.
>        d. Issue the first undi function call PXENV_GET_INFORMATION to get
> NIC's configuration.
>        e. Do other UNDI call tests.
>
>    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.
>
> 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.
>
> 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.
>
>
> Any help will be highly appreciated!
>
> Thanks,
>
> Jason
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://etherboot.org/pipermail/gpxe-devel/attachments/20101229/631f4bcd/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 96 bytes
Desc: not available
Url : http://etherboot.org/pipermail/gpxe-devel/attachments/20101229/631f4bcd/attachment.gif 


More information about the gPXE-devel mailing list