intwrap grub_pxe_scan

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-04-04 15:49:06 +02:00
parent 65936631e4
commit 1b8cb8573b
3 changed files with 53 additions and 69 deletions

View file

@ -1434,65 +1434,8 @@ FUNCTION(grub_get_rtc)
popl %ebp
ret
pxe_rm_entry:
.long 0
/*
* struct grub_pxenv *grub_pxe_scan (void);
*/
FUNCTION(grub_pxe_scan)
pushl %ebp
pushl %ebx
xorl %ebx, %ebx
xorl %ecx, %ecx
call prot_to_real
.code16
pushw %es
movw $0x5650, %ax
int $0x1A
cmpw $0x564E, %ax
jnz 1f
cmpl $0x4E455850, %es:(%bx) /* PXEN(V+) */
jnz 1f
cmpw $0x201, %es:6(%bx) /* API version */
jb 1f
lesw %es:0x28(%bx), %bx /* !PXE structure */
cmpl $0x45585021, %es:(%bx) /* !PXE */
jnz 1f
movw %es, %cx
jmp 2f
1:
xorw %bx, %bx
xorw %cx, %cx
2:
popw %es
DATA32 call real_to_prot
.code32
xorl %eax, %eax
leal (%eax, %ecx, 4), %ecx
leal (%ebx, %ecx, 4), %eax /* eax = ecx * 16 + ebx */
orl %eax, %eax
jz 1f
movl 0x10(%eax), %ecx
movl %ecx, pxe_rm_entry
1:
popl %ebx
popl %ebp
ret
/*
* int grub_pxe_call (int func, void* data);
* int grub_pxe_call (int func, void* data, grub_uint32_t pxe_rm_entry);
*/
FUNCTION(grub_pxe_call)
pushl %ebp
@ -1501,13 +1444,13 @@ FUNCTION(grub_pxe_call)
pushl %edi
pushl %ebx
movl %ecx, %ebx
movl %eax, %ecx
movl %edx, %eax
andl $0xF, %eax
shrl $4, %edx
shll $16, %edx
addl %eax, %edx
movl pxe_rm_entry, %ebx
call prot_to_real
.code16