mirror of https://github.com/ipxe/ipxe.git
[pxe] Set %ax to zero on entry to PXE NBP
This is not strictly an entry requirement, but it does mean that a PXE NBP returning without setting %ax will appear to have returned success.pull/1/head
parent
6a3f5d6db7
commit
784d3f336e
|
@ -433,23 +433,24 @@ void pxe_init_structures ( void ) {
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int pxe_start_nbp ( void ) {
|
int pxe_start_nbp ( void ) {
|
||||||
int discard_b, discard_c, discard_d;
|
int discard_b, discard_c, discard_d, discard_D;
|
||||||
uint16_t rc;
|
uint16_t rc;
|
||||||
|
|
||||||
/* Far call to PXE NBP */
|
/* Far call to PXE NBP */
|
||||||
__asm__ __volatile__ ( REAL_CODE ( "pushw %%cx\n\t"
|
__asm__ __volatile__ ( REAL_CODE ( "movw %%cx, %%es\n\t"
|
||||||
"pushw %%ax\n\t"
|
"pushw %%es\n\t"
|
||||||
"movw %%cx, %%es\n\t"
|
"pushw %%di\n\t"
|
||||||
"sti\n\t"
|
"sti\n\t"
|
||||||
"lcall $0, $0x7c00\n\t"
|
"lcall $0, $0x7c00\n\t"
|
||||||
"addw $4, %%sp\n\t" )
|
"addw $4, %%sp\n\t" )
|
||||||
: "=a" ( rc ), "=b" ( discard_b ),
|
: "=a" ( rc ), "=b" ( discard_b ),
|
||||||
"=c" ( discard_c ), "=d" ( discard_d )
|
"=c" ( discard_c ), "=d" ( discard_d ),
|
||||||
: "a" ( __from_text16 ( &ppxe ) ),
|
"=D" ( discard_D )
|
||||||
"b" ( __from_text16 ( &pxenv ) ),
|
: "a" ( 0 ), "b" ( __from_text16 ( &pxenv ) ),
|
||||||
"c" ( rm_cs ),
|
"c" ( rm_cs ),
|
||||||
"d" ( virt_to_phys ( &pxenv ) )
|
"d" ( virt_to_phys ( &pxenv ) ),
|
||||||
: "esi", "edi", "ebp", "memory" );
|
"D" ( __from_text16 ( &ppxe ) )
|
||||||
|
: "esi", "ebp", "memory" );
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue