1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Function calling ABI conversion from Linux to EFI for x86_64 4 * 5 * Copyright (C) 2007 Intel Corp 6 * Bibo Mao <bibo.mao@intel.com> 7 * Huang Ying <ying.huang@intel.com> 8 */ 9 10#include <linux/linkage.h> 11#include <asm/segment.h> 12#include <asm/msr.h> 13#include <asm/processor-flags.h> 14#include <asm/page_types.h> 15 16#define SAVE_XMM \ 17 mov %rsp, %rax; \ 18 subq $0x70, %rsp; \ 19 and $~0xf, %rsp; \ 20 mov %rax, (%rsp); \ 21 mov %cr0, %rax; \ 22 clts; \ 23 mov %rax, 0x8(%rsp); \ 24 movaps %xmm0, 0x60(%rsp); \ 25 movaps %xmm1, 0x50(%rsp); \ 26 movaps %xmm2, 0x40(%rsp); \ 27 movaps %xmm3, 0x30(%rsp); \ 28 movaps %xmm4, 0x20(%rsp); \ 29 movaps %xmm5, 0x10(%rsp) 30 31#define RESTORE_XMM \ 32 movaps 0x60(%rsp), %xmm0; \ 33 movaps 0x50(%rsp), %xmm1; \ 34 movaps 0x40(%rsp), %xmm2; \ 35 movaps 0x30(%rsp), %xmm3; \ 36 movaps 0x20(%rsp), %xmm4; \ 37 movaps 0x10(%rsp), %xmm5; \ 38 mov 0x8(%rsp), %rsi; \ 39 mov %rsi, %cr0; \ 40 mov (%rsp), %rsp 41 42ENTRY(efi_call) 43 pushq %rbp 44 movq %rsp, %rbp 45 SAVE_XMM 46 mov 16(%rbp), %rax 47 subq $48, %rsp 48 mov %r9, 32(%rsp) 49 mov %rax, 40(%rsp) 50 mov %r8, %r9 51 mov %rcx, %r8 52 mov %rsi, %rcx 53 call *%rdi 54 addq $48, %rsp 55 RESTORE_XMM 56 popq %rbp 57 ret 58ENDPROC(efi_call) 59