qseecom.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2017, 2019, 2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _QSEECOM_H_
  7. #define _QSEECOM_H_
  8. #pragma message("Warning: This header file will be deprecated in future")
  9. #include <linux/types.h>
  10. #include <linux/ioctl.h>
  11. #define MAX_ION_FD 4
  12. #define MAX_APP_NAME_SIZE 64
  13. #define QSEECOM_HASH_SIZE 32
  14. #define ICE_KEY_SIZE 32
  15. #define ICE_SALT_SIZE 32
  16. /*
  17. * struct qseecom_ion_fd_info - ion fd handle data information
  18. * @fd - ion handle to some memory allocated in user space
  19. * @cmd_buf_offset - command buffer offset
  20. */
  21. struct qseecom_ion_fd_info {
  22. __s32 fd;
  23. __u32 cmd_buf_offset;
  24. };
  25. enum qseecom_key_management_usage_type {
  26. QSEOS_KM_USAGE_DISK_ENCRYPTION = 0x01,
  27. QSEOS_KM_USAGE_FILE_ENCRYPTION = 0x02,
  28. QSEOS_KM_USAGE_UFS_ICE_DISK_ENCRYPTION = 0x03,
  29. QSEOS_KM_USAGE_SDCC_ICE_DISK_ENCRYPTION = 0x04,
  30. QSEOS_KM_USAGE_MAX
  31. };
  32. struct qseecom_create_key_req {
  33. unsigned char hash32[QSEECOM_HASH_SIZE];
  34. enum qseecom_key_management_usage_type usage;
  35. };
  36. struct qseecom_wipe_key_req {
  37. enum qseecom_key_management_usage_type usage;
  38. int wipe_key_flag;/* 1->remove key from storage(alone with clear key) */
  39. /* 0->do not remove from storage (clear key) */
  40. };
  41. struct qseecom_update_key_userinfo_req {
  42. unsigned char current_hash32[QSEECOM_HASH_SIZE];
  43. unsigned char new_hash32[QSEECOM_HASH_SIZE];
  44. enum qseecom_key_management_usage_type usage;
  45. };
  46. #define SHA256_DIGEST_LENGTH (256/8)
  47. /*
  48. * struct qseecom_save_partition_hash_req
  49. * @partition_id - partition id.
  50. * @hash[SHA256_DIGEST_LENGTH] - sha256 digest.
  51. */
  52. struct qseecom_save_partition_hash_req {
  53. int partition_id; /* in */
  54. char digest[SHA256_DIGEST_LENGTH]; /* in */
  55. };
  56. /*
  57. * struct qseecom_is_es_activated_req
  58. * @is_activated - 1=true , 0=false
  59. */
  60. struct qseecom_is_es_activated_req {
  61. int is_activated; /* out */
  62. };
  63. /*
  64. * struct qseecom_mdtp_cipher_dip_req
  65. * @in_buf - input buffer
  66. * @in_buf_size - input buffer size
  67. * @out_buf - output buffer
  68. * @out_buf_size - output buffer size
  69. * @direction - 0=encrypt, 1=decrypt
  70. */
  71. struct qseecom_mdtp_cipher_dip_req {
  72. __u8 *in_buf;
  73. __u32 in_buf_size;
  74. __u8 *out_buf;
  75. __u32 out_buf_size;
  76. __u32 direction;
  77. };
  78. struct qseecom_qteec_req {
  79. void *req_ptr;
  80. __u32 req_len;
  81. void *resp_ptr;
  82. __u32 resp_len;
  83. };
  84. struct qseecom_qteec_modfd_req {
  85. void *req_ptr;
  86. __u32 req_len;
  87. void *resp_ptr;
  88. __u32 resp_len;
  89. struct qseecom_ion_fd_info ifd_data[MAX_ION_FD];
  90. };
  91. #define MAX_CE_PIPE_PAIR_PER_UNIT 3
  92. struct qseecom_ce_pipe_entry {
  93. int valid;
  94. unsigned int ce_num;
  95. unsigned int ce_pipe_pair;
  96. };
  97. struct qseecom_ice_data_t {
  98. int flag;
  99. };
  100. #define MAX_CE_INFO_HANDLE_SIZE 32
  101. struct qseecom_ce_info_req {
  102. unsigned char handle[MAX_CE_INFO_HANDLE_SIZE];
  103. unsigned int usage;
  104. unsigned int unit_num;
  105. unsigned int num_ce_pipe_entries;
  106. struct qseecom_ce_pipe_entry ce_pipe_entry[MAX_CE_PIPE_PAIR_PER_UNIT];
  107. };
  108. struct qseecom_ice_key_data_t {
  109. __u8 key[ICE_KEY_SIZE];
  110. __u32 key_len;
  111. __u8 salt[ICE_SALT_SIZE];
  112. __u32 salt_len;
  113. };
  114. struct file;
  115. #define QSEECOM_IOC_MAGIC 0x97
  116. #define QSEECOM_IOCTL_CREATE_KEY_REQ \
  117. _IOWR(QSEECOM_IOC_MAGIC, 17, struct qseecom_create_key_req)
  118. #define QSEECOM_IOCTL_WIPE_KEY_REQ \
  119. _IOWR(QSEECOM_IOC_MAGIC, 18, struct qseecom_wipe_key_req)
  120. #define QSEECOM_IOCTL_SAVE_PARTITION_HASH_REQ \
  121. _IOWR(QSEECOM_IOC_MAGIC, 19, struct qseecom_save_partition_hash_req)
  122. #define QSEECOM_IOCTL_IS_ES_ACTIVATED_REQ \
  123. _IOWR(QSEECOM_IOC_MAGIC, 20, struct qseecom_is_es_activated_req)
  124. #define QSEECOM_IOCTL_UPDATE_KEY_USER_INFO_REQ \
  125. _IOWR(QSEECOM_IOC_MAGIC, 24, struct qseecom_update_key_userinfo_req)
  126. #define QSEECOM_QTEEC_IOCTL_OPEN_SESSION_REQ \
  127. _IOWR(QSEECOM_IOC_MAGIC, 30, struct qseecom_qteec_modfd_req)
  128. #define QSEECOM_QTEEC_IOCTL_CLOSE_SESSION_REQ \
  129. _IOWR(QSEECOM_IOC_MAGIC, 31, struct qseecom_qteec_req)
  130. #define QSEECOM_QTEEC_IOCTL_INVOKE_MODFD_CMD_REQ \
  131. _IOWR(QSEECOM_IOC_MAGIC, 32, struct qseecom_qteec_modfd_req)
  132. #define QSEECOM_QTEEC_IOCTL_REQUEST_CANCELLATION_REQ \
  133. _IOWR(QSEECOM_IOC_MAGIC, 33, struct qseecom_qteec_modfd_req)
  134. #define QSEECOM_IOCTL_MDTP_CIPHER_DIP_REQ \
  135. _IOWR(QSEECOM_IOC_MAGIC, 34, struct qseecom_mdtp_cipher_dip_req)
  136. #define QSEECOM_IOCTL_GET_CE_PIPE_INFO \
  137. _IOWR(QSEECOM_IOC_MAGIC, 40, struct qseecom_ce_info_req)
  138. #define QSEECOM_IOCTL_FREE_CE_PIPE_INFO \
  139. _IOWR(QSEECOM_IOC_MAGIC, 41, struct qseecom_ce_info_req)
  140. #define QSEECOM_IOCTL_QUERY_CE_PIPE_INFO \
  141. _IOWR(QSEECOM_IOC_MAGIC, 42, struct qseecom_ce_info_req)
  142. #define QSEECOM_IOCTL_SET_ICE_INFO \
  143. _IOWR(QSEECOM_IOC_MAGIC, 43, struct qseecom_ice_data_t)
  144. #define QSEECOM_IOCTL_FBE_CLEAR_KEY \
  145. _IOWR(QSEECOM_IOC_MAGIC, 44, struct qseecom_ice_key_data_t)
  146. #endif /* _QSEECOM_H_ */