teei_id.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #ifndef __TEEI_ID_H_
  2. #define __TEEI_ID_H_
  3. #include <asm/cacheflush.h>
  4. #define SMC_ENOMEM 7
  5. #define SMC_EOPNOTSUPP 6
  6. #define SMC_EINVAL_ADDR 5
  7. #define SMC_EINVAL_ARG 4
  8. #define SMC_ERROR 3
  9. #define SMC_INTERRUPTED 2
  10. #define SMC_PENDING 1
  11. #define SMC_SUCCESS 0
  12. /**
  13. * @brief Encoding data type
  14. */
  15. enum teei_enc_data_type {
  16. TEEI_ENC_INVALID_TYPE = 0,
  17. TEEI_ENC_UINT32,
  18. TEEI_ENC_ARRAY,
  19. TEEI_MEM_REF,
  20. TEEI_SECURE_MEM_REF
  21. };
  22. /**
  23. * @brief Command ID's for global service
  24. */
  25. enum _global_cmd_id {
  26. TEEI_GLOBAL_CMD_ID_INVALID = 0x0,
  27. TEEI_GLOBAL_CMD_ID_BOOT_ACK,
  28. /* add by lodovico */
  29. TEEI_GLOBAL_CMD_ID_INIT_CONTEXT,
  30. /* add end */
  31. TEEI_GLOBAL_CMD_ID_OPEN_SESSION,
  32. TEEI_GLOBAL_CMD_ID_CLOSE_SESSION,
  33. TEEI_GLOBAL_CMD_ID_RESUME_ASYNC_TASK,
  34. TEEI_GLOBAL_CMD_ID_UNKNOWN = 0x7FFFFFFE,
  35. TEEI_GLOBAL_CMD_ID_MAX = 0x7FFFFFFF
  36. };
  37. /* add by lodovico */
  38. /* void printff(); */
  39. #if 1
  40. int service_smc_call(u32 teei_cmd_type, u32 dev_file_id, u32 svc_id,
  41. u32 cmd_id, u32 context, u32 enc_id,
  42. const void *cmd_buf,
  43. size_t cmd_len,
  44. void *resp_buf,
  45. size_t resp_len,
  46. const void *meta_data,
  47. int *ret_resp_len,
  48. void *wq,
  49. void *arg_lock, int *error_code);
  50. #endif
  51. enum teei_cmd_type {
  52. TEEI_CMD_TYPE_INVALID = 0x0,
  53. TEEI_CMD_TYPE_SOCKET_INIT,
  54. TEEI_CMD_TYPE_INITILIZE_CONTEXT,
  55. TEEI_CMD_TYPE_FINALIZE_CONTEXT,
  56. TEEI_CMD_TYPE_OPEN_SESSION,
  57. TEEI_CMD_TYPE_CLOSE_SESSION,
  58. TEEI_CMD_TYPE_INVOKE_COMMAND,
  59. TEEI_CMD_TYPE_UNKNOWN = 0x7FFFFFFE,
  60. TEEI_CMD_TYPE_MAX = 0x7FFFFFFF
  61. };
  62. #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
  63. #define Cache_line_size 32
  64. /****************************************************************
  65. * @brief:
  66. * Flush_Dcache_By_Area
  67. * @param:
  68. * start - mva start
  69. * end - mva end
  70. * @return:
  71. * ***************************************************************/
  72. static inline void Flush_Dcache_By_Area(unsigned long start, unsigned long end)
  73. {
  74. #if 0
  75. __asm__ __volatile__ ("dsb" : : : "memory"); /* dsb */
  76. __asm__ __volatile__ (
  77. "1: mcr p15, 0, %[i], c7, c14, 1\n" /* Clean and Invalidate Data Cache Line (using MVA) Register */
  78. " add %[i], %[i], %[clsz]\n"
  79. " cmp %[i], %[end]\n"
  80. " blo 1b\n"
  81. :
  82. [i] "=&r" (start)
  83. : "0" ((unsigned long)start & ~(Cache_line_size - 1)),
  84. [end] "r" (end),
  85. [clsz] "i" (Cache_line_size)
  86. : "memory");
  87. asm volatile ("mcr p15, 0, %0, c7, c5, 0" : : "r" (0) : "memory"); /* invalidate btc */
  88. __asm__ __volatile__ ("dsb" : : : "memory"); /* dsb */
  89. #endif
  90. __flush_dcache_area(start, (end - start));
  91. }
  92. /******************************************************************
  93. * @brief:
  94. * Invalidate_Dcache_By_Area
  95. * @param:
  96. * start - mva start
  97. * end - mva end
  98. * @return:
  99. * *****************************************************************/
  100. static inline void Invalidate_Dcache_By_Area(unsigned long start, unsigned long end)
  101. {
  102. #if 0
  103. __asm__ __volatile__ ("dsb" : : : "memory"); /* dsb */
  104. __asm__ __volatile__ (
  105. "1: mcr p15, 0, %[i], c7, c6, 1\n" /* Invalidate Data Cache Line (using MVA) Register */
  106. " add %[i], %[i], %[clsz]\n"
  107. " cmp %[i], %[end]\n"
  108. " blo 1b\n"
  109. :
  110. [i] "=&r" (start)
  111. : "0" ((unsigned long)start & (~(Cache_line_size - 1))),
  112. [end] "r" (end),
  113. [clsz] "i" (Cache_line_size)
  114. : "memory");
  115. asm volatile ("mcr p15, 0, %0, c7, c5, 0" : : "r" (0) : "memory"); /* invalidate btc */
  116. __asm__ __volatile__ ("dsb" : : : "memory"); /* dsb */
  117. #endif
  118. #if 0
  119. __asm__ volatile(
  120. "mrs x3, ctr_el0\n\t"
  121. "lsr x3, x3, #16\n\t"
  122. "and x3, x3, #0xf\n\t"
  123. "mov x2, #4\n\t"
  124. "lsl x2, x2, x3\n\t"
  125. "sub x3, x2, #1\n\t"
  126. "bic %[start], %[start], x3\n\t"
  127. "1: dc ivac, %[start]\n\t" /* invalidate D line / unified line */
  128. "add %[start],%[start] , x2\n\t"
  129. "cmp %[start], %[end]\n\t"
  130. "b.lo 1b\n\t"
  131. "dsb sy\n\t"
  132. : :
  133. [start] "r" (start),
  134. [end] "r" (end)
  135. : "memory");
  136. #endif
  137. }
  138. /* add end */
  139. #endif /* __OPEN_OTZ_ID_H_ */