| |
| |
| |
| |
| |
| |
| |
| |
| #include <linux/linkage.h> |
| #include <linux/init.h> |
| #include <asm/asm-offsets.h> |
| #include <asm/page_types.h> |
| |
| <------>__INIT |
| SYM_FUNC_START(efi_call_svam) |
| <------>push %ebp |
| <------>movl %esp, %ebp |
| <------>push %ebx |
| |
| <------>push 16(%esp) |
| <------>push 16(%esp) |
| <------>push %ecx |
| <------>push %edx |
| <------>movl %eax, %ebx |
| |
| <------> |
| <------> * Switch to the flat mapped alias of this routine, by jumping to the |
| <------> * address of label '1' after subtracting PAGE_OFFSET from it. |
| <------> */ |
| <------>movl $1f, %edx |
| <------>subl $__PAGE_OFFSET, %edx |
| <------>jmp *%edx |
| 1: |
| |
| <------> |
| <------>movl %cr0, %edx |
| <------>andl $0x7fffffff, %edx |
| <------>movl %edx, %cr0 |
| |
| <------> |
| <------>subl $__PAGE_OFFSET, %esp |
| |
| <------> |
| <------>movl (%eax), %eax |
| <------>call *EFI_svam(%eax) |
| |
| <------> |
| <------>movl (%ebx), %ecx |
| <------>movl 36(%esp), %edx |
| <------>movl %ecx, (%edx) |
| |
| <------> |
| <------>movl %cr0, %edx |
| <------>orl $0x80000000, %edx |
| <------>movl %edx, %cr0 |
| |
| <------>movl 16(%esp), %ebx |
| <------>leave |
| <------>ret |
| SYM_FUNC_END(efi_call_svam) |
| |
| |