]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/IndustryStandard/ArmStdSmc.h
ArmPkg: Apply uncrustify changes
[mirror_edk2.git] / ArmPkg / Include / IndustryStandard / ArmStdSmc.h
CommitLineData
9a9dd4e8
OM
1/** @file\r
2*\r
9e7621c0 3* Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR>\r
542bc11a 4* Copyright (c) 2012-2017, ARM Limited. All rights reserved.\r
9a9dd4e8 5*\r
4059386c 6* SPDX-License-Identifier: BSD-2-Clause-Patent\r
9a9dd4e8 7*\r
9e7621c0
RC
8* @par Revision Reference:\r
9* - SMC Calling Convention version 1.2\r
10* (https://developer.arm.com/documentation/den0028/c/?lang=en)\r
9a9dd4e8
OM
11**/\r
12\r
cc15a619
PG
13#ifndef ARM_STD_SMC_H_\r
14#define ARM_STD_SMC_H_\r
9a9dd4e8
OM
15\r
16/*\r
17 * SMC function IDs for Standard Service queries\r
18 */\r
19\r
429309e0
MK
20#define ARM_SMC_ID_STD_CALL_COUNT 0x8400ff00\r
21#define ARM_SMC_ID_STD_UID 0x8400ff01\r
9a9dd4e8 22/* 0x8400ff02 is reserved */\r
429309e0 23#define ARM_SMC_ID_STD_REVISION 0x8400ff03\r
9a9dd4e8
OM
24\r
25/*\r
26 * The 'Standard Service Call UID' is supposed to return the Standard\r
27 * Service UUID. This is a 128-bit value.\r
28 */\r
429309e0
MK
29#define ARM_SMC_STD_UUID0 0x108d905b\r
30#define ARM_SMC_STD_UUID1 0x47e8f863\r
31#define ARM_SMC_STD_UUID2 0xfbc02dae\r
32#define ARM_SMC_STD_UUID3 0xe2f64156\r
9a9dd4e8
OM
33\r
34/*\r
35 * ARM Standard Service Calls revision numbers\r
36 * The current revision is: 0.1\r
37 */\r
429309e0
MK
38#define ARM_SMC_STD_REVISION_MAJOR 0x0\r
39#define ARM_SMC_STD_REVISION_MINOR 0x1\r
9a9dd4e8 40\r
542bc11a
SV
41/*\r
42 * Management Mode (MM) calls cover a subset of the Standard Service Call range.\r
43 * The list below is not exhaustive.\r
44 */\r
429309e0
MK
45#define ARM_SMC_ID_MM_VERSION_AARCH32 0x84000040\r
46#define ARM_SMC_ID_MM_VERSION_AARCH64 0xC4000040\r
542bc11a
SV
47\r
48// Request service from secure standalone MM environment\r
429309e0
MK
49#define ARM_SMC_ID_MM_COMMUNICATE_AARCH32 0x84000041\r
50#define ARM_SMC_ID_MM_COMMUNICATE_AARCH64 0xC4000041\r
542bc11a 51\r
03e19e6b
EC
52/* Generic ID when using AArch32 or AArch64 execution state */\r
53#ifdef MDE_CPU_AARCH64\r
429309e0 54#define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH64\r
03e19e6b
EC
55#endif\r
56#ifdef MDE_CPU_ARM\r
429309e0 57#define ARM_SMC_ID_MM_COMMUNICATE ARM_SMC_ID_MM_COMMUNICATE_AARCH32\r
03e19e6b
EC
58#endif\r
59\r
542bc11a 60/* MM return error codes */\r
429309e0
MK
61#define ARM_SMC_MM_RET_SUCCESS 0\r
62#define ARM_SMC_MM_RET_NOT_SUPPORTED -1\r
63#define ARM_SMC_MM_RET_INVALID_PARAMS -2\r
64#define ARM_SMC_MM_RET_DENIED -3\r
65#define ARM_SMC_MM_RET_NO_MEMORY -4\r
542bc11a 66\r
9e7621c0 67// ARM Architecture Calls\r
429309e0
MK
68#define SMCCC_VERSION 0x80000000\r
69#define SMCCC_ARCH_FEATURES 0x80000001\r
70#define SMCCC_ARCH_SOC_ID 0x80000002\r
71#define SMCCC_ARCH_WORKAROUND_1 0x80008000\r
72#define SMCCC_ARCH_WORKAROUND_2 0x80007FFF\r
9e7621c0
RC
73\r
74#define SMC_ARCH_CALL_SUCCESS 0\r
429309e0
MK
75#define SMC_ARCH_CALL_NOT_SUPPORTED -1\r
76#define SMC_ARCH_CALL_NOT_REQUIRED -2\r
77#define SMC_ARCH_CALL_INVALID_PARAMETER -3\r
9e7621c0 78\r
9a9dd4e8
OM
79/*\r
80 * Power State Coordination Interface (PSCI) calls cover a subset of the\r
81 * Standard Service Call range.\r
82 * The list below is not exhaustive.\r
83 */\r
84#define ARM_SMC_ID_PSCI_VERSION 0x84000000\r
85#define ARM_SMC_ID_PSCI_CPU_SUSPEND_AARCH64 0xc4000001\r
86#define ARM_SMC_ID_PSCI_CPU_SUSPEND_AARCH32 0x84000001\r
87#define ARM_SMC_ID_PSCI_CPU_OFF 0x84000002\r
88#define ARM_SMC_ID_PSCI_CPU_ON_AARCH64 0xc4000003\r
89#define ARM_SMC_ID_PSCI_CPU_ON_AARCH32 0x84000003\r
90#define ARM_SMC_ID_PSCI_AFFINITY_INFO_AARCH64 0xc4000004\r
91#define ARM_SMC_ID_PSCI_AFFINITY_INFO_AARCH32 0x84000004\r
92#define ARM_SMC_ID_PSCI_MIGRATE_AARCH64 0xc4000005\r
93#define ARM_SMC_ID_PSCI_MIGRATE_AARCH32 0x84000005\r
ae9bc057
AB
94#define ARM_SMC_ID_PSCI_SYSTEM_OFF 0x84000008\r
95#define ARM_SMC_ID_PSCI_SYSTEM_RESET 0x84000009\r
9a9dd4e8
OM
96\r
97/* The current PSCI version is: 0.2 */\r
98#define ARM_SMC_PSCI_VERSION_MAJOR 0\r
99#define ARM_SMC_PSCI_VERSION_MINOR 2\r
100#define ARM_SMC_PSCI_VERSION \\r
101 ((ARM_SMC_PSCI_VERSION_MAJOR << 16) | ARM_SMC_PSCI_VERSION_MINOR)\r
102\r
103/* PSCI return error codes */\r
429309e0
MK
104#define ARM_SMC_PSCI_RET_SUCCESS 0\r
105#define ARM_SMC_PSCI_RET_NOT_SUPPORTED -1\r
106#define ARM_SMC_PSCI_RET_INVALID_PARAMS -2\r
107#define ARM_SMC_PSCI_RET_DENIED -3\r
108#define ARM_SMC_PSCI_RET_ALREADY_ON -4\r
109#define ARM_SMC_PSCI_RET_ON_PENDING -5\r
110#define ARM_SMC_PSCI_RET_INTERN_FAIL -6\r
111#define ARM_SMC_PSCI_RET_NOT_PRESENT -7\r
112#define ARM_SMC_PSCI_RET_DISABLED -8\r
9a9dd4e8
OM
113\r
114#define ARM_SMC_PSCI_TARGET_CPU32(Aff2, Aff1, Aff0) \\r
115 ((((Aff2) & 0xFF) << 16) | (((Aff1) & 0xFF) << 8) | ((Aff0) & 0xFF))\r
116\r
117#define ARM_SMC_PSCI_TARGET_CPU64(Aff3, Aff2, Aff1, Aff0) \\r
118 ((((Aff3) & 0xFFULL) << 32) | (((Aff2) & 0xFF) << 16) | (((Aff1) & 0xFF) << 8) | ((Aff0) & 0xFF))\r
119\r
120#define ARM_SMC_PSCI_TARGET_GET_AFF0(TargetId) ((TargetId) & 0xFF)\r
121#define ARM_SMC_PSCI_TARGET_GET_AFF1(TargetId) (((TargetId) >> 8) & 0xFF)\r
122\r
429309e0
MK
123#define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_0 0\r
124#define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_1 1\r
125#define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_2 2\r
126#define ARM_SMC_ID_PSCI_AFFINITY_LEVEL_3 3\r
9a9dd4e8
OM
127\r
128#define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON 0\r
129#define ARM_SMC_ID_PSCI_AFFINITY_INFO_OFF 1\r
130#define ARM_SMC_ID_PSCI_AFFINITY_INFO_ON_PENDING 2\r
131\r
d65b78f1
SG
132/*\r
133 * SMC function IDs for Trusted OS Service queries\r
134 */\r
429309e0
MK
135#define ARM_SMC_ID_TOS_CALL_COUNT 0xbf00ff00\r
136#define ARM_SMC_ID_TOS_UID 0xbf00ff01\r
d65b78f1 137/* 0xbf00ff02 is reserved */\r
429309e0 138#define ARM_SMC_ID_TOS_REVISION 0xbf00ff03\r
d65b78f1 139\r
cc15a619 140#endif // ARM_STD_SMC_H_\r