sgx_call.h 1008 字节
Newer Older
1 2 3 4 5 6 7 8
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright(c) 2016-19 Intel Corporation.
 */

#ifndef SGX_CALL_H
#define SGX_CALL_H

9
#define ECALL_MAGIC		0
10 11
#define ECALL_REPORT		1
#define MAX_ECALLS		2
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

#define EEXIT			4

#define INIT_MAGIC		0xdeadfacedeadbeefUL

#ifndef __ASSEMBLER__

#define SGX_ENTER_1_ARG(ecall_num, tcs, a0) \
	({      \
		int __ret; \
		asm volatile( \
			"mov %1, %%r10\n\t" \
			"mov %2, %%r11\n\t" \
			"call sgx_ecall\n\t" \
			: "=a" (__ret) \
			: "r" ((uint64_t)ecall_num), "r" (tcs), \
			  "D" (a0) \
			: "r10", "r11" \
		); \
		__ret; \
	})

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#define SGX_ENTER_3_ARGS(ecall_num, tcs, a0, a1, a2) \
	({	\
		int __ret; \
		asm volatile( \
			"mov %1, %%r10\n\t" \
			"mov %2, %%r11\n\t" \
			"call sgx_ecall\n\t" \
			: "=a" (__ret) \
			: "r" ((uint64_t)ecall_num), "r" (tcs), \
			  "D" (a0), "S" (a1), "d" (a2) \
			: "r10", "r11" \
		); \
		__ret; \
	})

49 50 51 52 53 54 55
#define ENCLU			".byte 0x0f, 0x01, 0xd7"

#else

#define ENCLU			.byte 0x0f, 0x01, 0xd7

#endif
56 57

#endif /* SGX_CALL_H */