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

Cache object: 95a368d928953fd9535b55038c619930


[ 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.