Merge branch 'asoc-4.17' into asoc-4.18 n810 dependencies
[linux-2.6-block.git] / arch / arm64 / kernel / efi-rt-wrapper.S
CommitLineData
7e611e7d
AB
1/*
2 * Copyright (C) 2018 Linaro Ltd <ard.biesheuvel@linaro.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/linkage.h>
10
11ENTRY(__efi_rt_asm_wrapper)
12 stp x29, x30, [sp, #-32]!
13 mov x29, sp
14
15 /*
16 * Register x18 is designated as the 'platform' register by the AAPCS,
17 * which means firmware running at the same exception level as the OS
18 * (such as UEFI) should never touch it.
19 */
20 stp x1, x18, [sp, #16]
21
22 /*
23 * We are lucky enough that no EFI runtime services take more than
24 * 5 arguments, so all are passed in registers rather than via the
25 * stack.
26 */
27 mov x8, x0
28 mov x0, x2
29 mov x1, x3
30 mov x2, x4
31 mov x3, x5
32 mov x4, x6
33 blr x8
34
35 ldp x1, x2, [sp, #16]
36 cmp x2, x18
37 ldp x29, x30, [sp], #32
38 b.ne 0f
39 ret
400: b efi_handle_corrupted_x18 // tail call
41ENDPROC(__efi_rt_asm_wrapper)