blob: 93f176109f36a254fc3d8c4c2ab2452b287a115e [file] [log] [blame]
Doug Horn1427b6a2018-12-11 13:19:16 -08001// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Adam Barth57eacf52020-11-04 00:38:09 +00005#ifndef SYSROOT_ZIRCON_SYSCALLS_SMC_H_
6#define SYSROOT_ZIRCON_SYSCALLS_SMC_H_
Doug Horn1427b6a2018-12-11 13:19:16 -08007
8#include <zircon/types.h>
9
10__BEGIN_CDECLS
11
Adam Barth57eacf52020-11-04 00:38:09 +000012// Silicon Partner.
13#define ARM_SMC_SERVICE_CALL_NUM_SIP_SERVICE_BASE 0x02
14#define ARM_SMC_SERVICE_CALL_NUM_SIP_SERVICE_LENGTH 0x01
Doug Horn1427b6a2018-12-11 13:19:16 -080015#define ARM_SMC_SERVICE_CALL_NUM_TRUSTED_OS_BASE 0x32
16#define ARM_SMC_SERVICE_CALL_NUM_TRUSTED_OS_LENGTH 0xE
17#define ARM_SMC_SERVICE_CALL_NUM_MAX 0x3F
18#define ARM_SMC_SERVICE_CALL_NUM_MASK 0x3F
19#define ARM_SMC_SERVICE_CALL_NUM_SHIFT 24
20#define ARM_SMC_GET_SERVICE_CALL_NUM_FROM_FUNC_ID(func_id) \
Adam Barth57eacf52020-11-04 00:38:09 +000021 (((func_id) >> ARM_SMC_SERVICE_CALL_NUM_SHIFT) & ARM_SMC_SERVICE_CALL_NUM_MASK)
Doug Horn1427b6a2018-12-11 13:19:16 -080022
23typedef struct zx_smc_parameters {
Adam Barth57eacf52020-11-04 00:38:09 +000024 uint32_t func_id;
25 uint8_t padding1[4];
26 uint64_t arg1;
27 uint64_t arg2;
28 uint64_t arg3;
29 uint64_t arg4;
30 uint64_t arg5;
31 uint64_t arg6;
32 uint16_t client_id;
33 uint16_t secure_os_id;
34 uint8_t padding2[4];
Doug Horn1427b6a2018-12-11 13:19:16 -080035} zx_smc_parameters_t;
36
37typedef struct zx_smc_result {
Adam Barth57eacf52020-11-04 00:38:09 +000038 uint64_t arg0;
39 uint64_t arg1;
40 uint64_t arg2;
41 uint64_t arg3;
42 uint64_t arg6; // at least one implementation uses it as a way to return session_id.
Doug Horn1427b6a2018-12-11 13:19:16 -080043} zx_smc_result_t;
44
45__END_CDECLS
Adam Barth57eacf52020-11-04 00:38:09 +000046
47#endif // SYSROOT_ZIRCON_SYSCALLS_SMC_H_