ARMv8: Allow SiP service extensions on top of PSCI code
[platform/kernel/u-boot.git] / arch / arm / include / asm / secure.h
index d23044a..50582c9 100644 (file)
@@ -6,6 +6,37 @@
 #define __secure __attribute__ ((section ("._secure.text")))
 #define __secure_data __attribute__ ((section ("._secure.data")))
 
+#ifndef __ASSEMBLY__
+
+typedef struct secure_svc_tbl {
+       u32     id;
+#ifdef CONFIG_ARMV8_PSCI
+       u8      pad[4];
+#endif
+       void    *func;
+} secure_svc_tbl_t;
+
+/*
+ * Macro to declare a SiP function service in '_secure_svc_tbl_entries' section
+ */
+#define DECLARE_SECURE_SVC(_name, _id, _fn) \
+       static const secure_svc_tbl_t __secure_svc_ ## _name \
+               __attribute__((used, section("._secure_svc_tbl_entries"))) \
+                        = { \
+                               .id = _id, \
+                               .func = _fn }
+
+#else
+
+#ifdef CONFIG_ARMV8_PSCI
+#define SECURE_SVC_TBL_OFFSET          16
+#else
+#define SECURE_SVC_TBL_OFFSET          8
+
+#endif
+
+#endif /* __ASSEMBLY__ */
+
 #if defined(CONFIG_ARMV7_SECURE_BASE) || defined(CONFIG_ARMV8_SECURE_BASE)
 /*
  * Warning, horror ahead.