[syslinux] PXE stack access via com32
jesse barker
jessebarker5 at yahoo.com
Fri Jan 5 18:18:49 PST 2007
Hi,
I've checked the archives for my issue, and while there is relevant discussion, the problem the original poster was asking about didn't seem to have been resolved then either (~2 years ago). At any rate, basically what I'm trying to do is send (possibly receive) UDP packets via the PXE stack using the com32 API (using version 3.11 of syslinux). I have followed both the comboot API doc and the aforementioned thread; however they disagree on which registers are used for which bits of data in the setup for __intcall(). According to the comboot doc, to call the PXE stack's 'get cached info' function:
Input: AX 0009h
BX PXE function number
ES:DI PXE data buffer
Output: AX PXE return status code
or, in com32 terms (the PXE call argument struct has been copied into the
bounce buffer and the buffer field of the PXE call argument struct is setup to
point into the bounce buffer as well):
inputRegs.es = SEG(__com32.cs_bounce);
inputRegs.edi.w[0] = OFFS(__com32.cs_bounce);
inputRegs.eax.w[0] = 0x0009; /* call PXE stack */
inputRegs.ebx.w[0] = 0x0071; /* PXENV_GET_CACHED_INFO opcode */
__intcall(0x22, &inputRegs, &outputRegs);
However, when setup this way, 'outputRegs.eax.w[0]' contains 'PXENV_EXIT_FAILURE' (and the status field of the PXE call argument struct indicates failure as well). The instructions from the previous thread on this topic are contrary to that documentation and indicate something more
like (not sure about the PXE opcode being in edi, of course, but that wasn't specified in the thread):
inputRegs.es = SEG(__com32.cs_bounce);
inputRegs.ebx.w[0] = OFFS(__com32.cs_bounce);
inputRegs.eax.w[0] = 0x0009; /* call PXE stack */
inputRegs.edi.w[0] = 0x0071; /* PXENV_GET_CACHED_INFO opcode */
__intcall(0x22, &inputRegs, &outputRegs);
In this case, the call claims to succeed (eax contains 'PXENV_EXIT_SUCCESS' and the status field of the argument struct claims 'PXENV_STATUS_SUCCESS'), however the buffer that would receive the cached info (the BOOTPLAYER struct) seems to have all 0's.
Has anyone successfully called the PXE stack from com32 (or, at least, can anyone help)?
Thanks in advance,
Jesse
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Syslinux
mailing list