ArmPkg/Include: Add SVC function IDs for Management Mode.
authorSupreeth Venkatesh <supreeth.venkatesh@arm.com>
Wed, 27 Sep 2017 18:58:59 +0000 (19:58 +0100)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 6 Oct 2017 20:58:58 +0000 (21:58 +0100)
SVCs are in the range 0xC4000060 - 0xC400007f.
The functions available to the secure MM partition:
1. Signal completion of MM event handling.
2. Set/Get memory attributes for a memory region at runtime.
3. Get version number of secure partition manager.

Also, it defines memory attributes required for set/get operations.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
ArmPkg/Include/IndustryStandard/ArmMmSvc.h [new file with mode: 0644]

diff --git a/ArmPkg/Include/IndustryStandard/ArmMmSvc.h b/ArmPkg/Include/IndustryStandard/ArmMmSvc.h
new file mode 100644 (file)
index 0000000..4c7b6c3
--- /dev/null
@@ -0,0 +1,43 @@
+/** @file\r
+*\r
+*  Copyright (c) 2012-2017, ARM Limited. All rights reserved.\r
+*\r
+*  This program and the accompanying materials\r
+*  are licensed and made available under the terms and conditions of the BSD License\r
+*  which accompanies this distribution.  The full text of the license may be found at\r
+*  http://opensource.org/licenses/bsd-license.php\r
+*\r
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+*\r
+**/\r
+\r
+#ifndef __ARM_MM_SVC_H__\r
+#define __ARM_MM_SVC_H__\r
+\r
+/*\r
+ * SVC IDs to allow the MM secure partition to initialise itself, handle\r
+ * delegated events and request the Secure partition manager to perform\r
+ * privileged operations on its behalf.\r
+ */\r
+#define ARM_SVC_ID_SPM_VERSION_AARCH64             0xC4000060\r
+#define ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64       0xC4000061\r
+#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64   0xC4000064\r
+#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64   0xC4000065\r
+\r
+#define SET_MEM_ATTR_DATA_PERM_MASK       0x3\r
+#define SET_MEM_ATTR_DATA_PERM_SHIFT        0\r
+#define SET_MEM_ATTR_DATA_PERM_NO_ACCESS    0\r
+#define SET_MEM_ATTR_DATA_PERM_RW           1\r
+#define SET_MEM_ATTR_DATA_PERM_RO           3\r
+\r
+#define SET_MEM_ATTR_CODE_PERM_MASK   0x1\r
+#define SET_MEM_ATTR_CODE_PERM_SHIFT    2\r
+#define SET_MEM_ATTR_CODE_PERM_X        0\r
+#define SET_MEM_ATTR_CODE_PERM_XN       1\r
+\r
+#define SET_MEM_ATTR_MAKE_PERM_REQUEST(d_perm, c_perm)                            \\r
+    ((((c_perm) & SET_MEM_ATTR_CODE_PERM_MASK) << SET_MEM_ATTR_CODE_PERM_SHIFT) | \\r
+    (( (d_perm) & SET_MEM_ATTR_DATA_PERM_MASK) << SET_MEM_ATTR_DATA_PERM_SHIFT))\r
+\r
+#endif\r