[syslinux] comboot+PXE stack

H. Peter Anvin hpa at zytor.com
Mon Nov 29 12:20:29 PST 2004


Pawel Oleksik wrote:
> On Tue, Nov 23, 2004 at 06:24:26PM -0800, H. Peter Anvin wrote:
> 
>>3. INT 22h, AX=0009h does this; this is in many ways simpler than calling 
>>the PXE stack directly, because you don't have to worry about the fact that 
>>different PXE versions have different calling conventions.
> 
> 
> OK, I give up. I have no real experiences with asm. So, I want to
> GET_CACHED_INFO. I have proper buffer 
> 
> BOOTPLAYER lbuf;
> 
> and structure
> 
> struct {
>     PXENV_STATUS Status;
>     UINT16 PacketType; /*1-discover, 2-ack, 3-cached reply*/
>     UINT16 BufferSize;
>     char * Buffer;      /* SEGOFF16 Buffer; ??? */
>     UINT16 BufferLimit;
>   } PXE_INFO = {3,sizeof(lbuf),&lbuf,0};
> 
> 
> So now, I should call INT 22:
> 
> asm volatile("int $0x22" : "=a" (eax) 
>                : "a" (0x0009), "b" (0x0071), .... );
> 
> 
> Firstly: how to put in ES:DI the address of PXE_INFO?
> Secondly: is PXE_INFO properly filled up?
> 

No, that's not how you do it from com32.  You have to fill out a 
structure of type com32sys_t (defined in <com32.h>) and then invoke 
__intcall(0x22, &ireg, &oreg) where ireg is input registers and oreg is 
output registers (can be NULL).

For the IP address you probably care more about the ACK (2) than cached 
reply (3), since the latter might come from the standalone PXE server as 
opposed to the DHCP server.

	-hpa




More information about the Syslinux mailing list