intwrap grub_pxe_scan
This commit is contained in:
parent
65936631e4
commit
1b8cb8573b
3 changed files with 53 additions and 69 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue