root/arch/x86/platform/efi/efi_stub_64.S

/* [<][>][^][v][top][bottom][index][help] */
   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 
  42 ENTRY(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
  58 ENDPROC(efi_call)

/* [<][>][^][v][top][bottom][index][help] */