Merge branch 'master' of git://git.denx.de/u-boot
[platform/kernel/u-boot.git] / include / tee.h
index b86dbec..44e9cd4 100644 (file)
@@ -6,6 +6,9 @@
 #ifndef __TEE_H
 #define __TEE_H
 
+#include <linux/bitops.h>
+#include <linux/list.h>
+
 #define TEE_UUID_LEN           16
 
 #define TEE_GEN_CAP_GP          BIT(0) /* GlobalPlatform compliant TEE */
@@ -34,6 +37,7 @@
  * struct tee_version_data::gen_caps
  */
 #define TEE_SUCCESS                    0x00000000
+#define TEE_ERROR_STORAGE_NOT_AVAILABLE        0xf0100003
 #define TEE_ERROR_GENERIC              0xffff0000
 #define TEE_ERROR_BAD_PARAMETERS       0xffff0006
 #define TEE_ERROR_ITEM_NOT_FOUND       0xffff0008
 #define TEE_ERROR_COMMUNICATION                0xffff000e
 #define TEE_ERROR_SECURITY             0xffff000f
 #define TEE_ERROR_OUT_OF_MEMORY                0xffff000c
+#define TEE_ERROR_OVERFLOW              0xffff300f
 #define TEE_ERROR_TARGET_DEAD          0xffff3024
+#define TEE_ERROR_STORAGE_NO_SPACE      0xffff3041
 
 #define TEE_ORIGIN_COMMS               0x00000002
 #define TEE_ORIGIN_TEE                 0x00000003
 #define TEE_ORIGIN_TRUSTED_APP         0x00000004
 
 struct udevice;
+
+/**
+ * struct tee_optee_ta_uuid - OP-TEE Trusted Application (TA) UUID format
+ *
+ * Used to identify an OP-TEE TA and define suitable to initialize structs
+ * of this format is distributed with the interface of the TA. The
+ * individual fields of this struct doesn't have any special meaning in
+ * OP-TEE. See RFC4122 for details on the format.
+ */
+struct tee_optee_ta_uuid {
+       u32 time_low;
+       u16 time_mid;
+       u16 time_hi_and_version;
+       u8 clock_seq_and_node[8];
+};
+
 /**
  * struct tee_shm - memory shared with the TEE
  * @dev:       The TEE device
@@ -285,11 +307,22 @@ bool tee_shm_is_registered(struct tee_shm *shm, struct udevice *dev);
  * Returns a probed TEE device of the first TEE device matched by the
  * match() callback or NULL.
  */
+#if CONFIG_IS_ENABLED(TEE)
 struct udevice *tee_find_device(struct udevice *start,
                                int (*match)(struct tee_version_data *vers,
                                             const void *data),
                                const void *data,
                                struct tee_version_data *vers);
+#else
+static inline struct udevice *tee_find_device(struct udevice *start,
+                                             int (*match)(struct tee_version_data *vers,
+                                                          const void *data),
+                                             const void *data,
+                                             struct tee_version_data *vers)
+{
+       return NULL;
+}
+#endif
 
 /**
  * tee_get_version() - Query capabilities of TEE device
@@ -333,4 +366,32 @@ int tee_close_session(struct udevice *dev, u32 session);
 int tee_invoke_func(struct udevice *dev, struct tee_invoke_arg *arg,
                    uint num_param, struct tee_param *param);
 
+/**
+ * tee_optee_ta_uuid_from_octets() - Converts to struct tee_optee_ta_uuid
+ * @d: Destination struct
+ * @s: Source UUID octets
+ *
+ * Conversion to a struct tee_optee_ta_uuid represantion from binary octet
+ * representation.
+ */
+void tee_optee_ta_uuid_from_octets(struct tee_optee_ta_uuid *d,
+                                  const u8 s[TEE_UUID_LEN]);
+
+/**
+ * tee_optee_ta_uuid_to_octets() - Converts from struct tee_optee_ta_uuid
+ * @d: Destination UUID octets
+ * @s: Source struct
+ *
+ * Conversion from a struct tee_optee_ta_uuid represantion to binary octet
+ * representation.
+ */
+void tee_optee_ta_uuid_to_octets(u8 d[TEE_UUID_LEN],
+                                const struct tee_optee_ta_uuid *s);
+
+/**
+ * tee_flush_all_shm_dcache() - Flush data cache for all shared memories
+ * @dev:       The TEE device
+ */
+void tee_flush_all_shm_dcache(struct udevice *dev);
+
 #endif /* __TEE_H */