The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/amd64/amd64/efirt_support.S

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2018 The FreeBSD Foundation
    5  *
    6  * This software was developed by Konstantin Belousov <kib@FreeBSD.org>
    7  * under sponsorship from the FreeBSD Foundation.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   28  * SUCH DAMAGE.
   29  *
   30  * $FreeBSD$
   31  */
   32 
   33 #include <machine/asmacros.h>
   34 
   35 #include "assym.inc"
   36 
   37         .text
   38 ENTRY(efi_rt_arch_call)
   39         pushq   %rbp
   40         movq    %rsp, %rbp
   41 
   42         movq    %rbx, EC_RBX(%rdi)
   43         movq    %rsp, EC_RSP(%rdi)
   44         movq    %rbp, EC_RBP(%rdi)
   45         movq    %r12, EC_R12(%rdi)
   46         movq    %r13, EC_R13(%rdi)
   47         movq    %r14, EC_R14(%rdi)
   48         movq    %r15, EC_R15(%rdi)
   49         pushfq
   50         popq    %rax
   51         movq    %rax, EC_RFLAGS(%rdi)
   52         movq    PCPU(CURTHREAD), %rax
   53         movq    %rdi, TD_MD+MD_EFIRT_TMP(%rax)
   54         movq    PCPU(CURPCB), %rsi
   55 
   56         movl    EC_ARGCNT(%rdi), %ecx
   57         movl    %ecx, %ebx
   58         movl    $4, %eax
   59         cmpl    %eax, %ecx
   60         cmovbl  %eax, %ecx
   61         shll    $3, %ecx
   62         subq    %rcx, %rsp
   63 
   64         cmpl    $0, %ebx
   65         jz      1f
   66         movq    EC_ARG1(%rdi), %rcx
   67         decl    %ebx
   68         jz      1f
   69         movq    EC_ARG2(%rdi), %rdx
   70         decl    %ebx
   71         jz      1f
   72         movq    EC_ARG3(%rdi), %r8
   73         decl    %ebx
   74         jz      1f
   75         movq    EC_ARG4(%rdi), %r9
   76         decl    %ebx
   77         jz      1f
   78         movq    EC_ARG5(%rdi), %rax
   79         movq    %rax, 4*8(%rsp)
   80         decl    %ebx
   81         jz      1f
   82         movq    $efi_rt_panic_str, %rdi
   83         call    panic
   84 1:      movq    EC_FPTR(%rdi), %rax
   85         movq    $efi_rt_fault, PCB_ONFAULT(%rsi)
   86         callq   *%rax
   87 
   88         movq    PCPU(CURTHREAD), %rbx
   89         movq    TD_MD+MD_EFIRT_TMP(%rbx), %rdi
   90         movq    %rax, EC_EFI_STATUS(%rdi)
   91         movq    PCPU(CURPCB), %rsi
   92         xorl    %eax, %eax
   93         movq    %rax, PCB_ONFAULT(%rsi)
   94 
   95 efi_rt_arch_call_tail:
   96         movq    EC_R15(%rdi), %r15
   97         movq    EC_R14(%rdi), %r14
   98         movq    EC_R13(%rdi), %r13
   99         movq    EC_R12(%rdi), %r12
  100         movq    EC_RBP(%rdi), %rbp
  101         movq    EC_RSP(%rdi), %rsp
  102         movq    EC_RBX(%rdi), %rbx
  103         pushq   EC_RFLAGS(%rdi)
  104         popfq
  105 
  106         popq    %rbp
  107         ret
  108 END(efi_rt_arch_call)
  109 
  110 ENTRY(efi_rt_fault)
  111         xorl    %eax, %eax
  112         movq    PCPU(CURPCB), %rsi
  113         movq    %rax, PCB_ONFAULT(%rsi)
  114         movl    $EFAULT, %eax
  115         movq    PCPU(CURTHREAD), %rbx
  116         movq    TD_MD+MD_EFIRT_TMP(%rbx), %rdi
  117         jmp     efi_rt_arch_call_tail
  118 END(efi_rt_fault)
  119 
  120 efi_rt_panic_str:       .asciz  "efi_rt_arch_call: too many args"

Cache object: d80187a834e21d6772f09ec375a695da


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.