m4u_v2.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #ifndef __M4U_V2_H__
  2. #define __M4U_V2_H__
  3. #include <linux/ioctl.h>
  4. #include <linux/fs.h>
  5. #include "m4u_port.h"
  6. #include <linux/scatterlist.h>
  7. typedef int M4U_PORT_ID;
  8. #define M4U_PROT_READ (1<<0) /* buffer can be read by engine */
  9. #define M4U_PROT_WRITE (1<<1) /* buffer can be write by engine */
  10. #define M4U_PROT_CACHE (1<<2) /* buffer access will goto CCI to do cache snoop */
  11. #define M4U_PROT_SHARE (1<<3) /* buffer access will goto CCI, but don't do cache snoop
  12. (just for engines who wants to use CCI bandwidth) */
  13. #define M4U_PROT_SEC (1<<4) /* buffer can only be accessed by secure engine. */
  14. /* public flags */
  15. #define M4U_FLAGS_SEQ_ACCESS (1<<0) /* engine access this buffer in sequncial way. */
  16. #define M4U_FLAGS_FIX_MVA (1<<1) /* fix allocation, we will use mva user specified. */
  17. #define M4U_FLAGS_SEC_SHAREABLE (1<<2) /* the mva will share in SWd */
  18. /* m4u internal flags (DO NOT use them for other purpers) */
  19. #define M4U_FLAGS_MVA_IN_FREE (1<<8) /* this mva is in deallocating. */
  20. typedef enum {
  21. RT_RANGE_HIGH_PRIORITY = 0,
  22. SEQ_RANGE_LOW_PRIORITY = 1
  23. } M4U_RANGE_PRIORITY_ENUM;
  24. /* port related: virtuality, security, distance */
  25. typedef struct _M4U_PORT {
  26. M4U_PORT_ID ePortID; /* hardware port ID, defined in M4U_PORT_ID */
  27. unsigned int Virtuality;
  28. unsigned int Security;
  29. unsigned int domain; /* domain : 0 1 2 3 */
  30. unsigned int Distance;
  31. unsigned int Direction; /* 0:- 1:+ */
  32. } M4U_PORT_STRUCT;
  33. struct m4u_port_array {
  34. #define M4U_PORT_ATTR_EN (1<<0)
  35. #define M4U_PORT_ATTR_VIRTUAL (1<<1)
  36. #define M4U_PORT_ATTR_SEC (1<<2)
  37. unsigned char ports[M4U_PORT_NR];
  38. };
  39. typedef enum {
  40. M4U_CACHE_CLEAN_BY_RANGE,
  41. M4U_CACHE_INVALID_BY_RANGE,
  42. M4U_CACHE_FLUSH_BY_RANGE,
  43. M4U_CACHE_CLEAN_ALL,
  44. M4U_CACHE_INVALID_ALL,
  45. M4U_CACHE_FLUSH_ALL,
  46. } M4U_CACHE_SYNC_ENUM;
  47. typedef enum {
  48. M4U_DMA_MAP_AREA,
  49. M4U_DMA_UNMAP_AREA,
  50. } M4U_DMA_TYPE;
  51. typedef enum {
  52. M4U_DMA_FROM_DEVICE,
  53. M4U_DMA_TO_DEVICE,
  54. M4U_DMA_BIDIRECTIONAL,
  55. } M4U_DMA_DIR;
  56. typedef struct {
  57. /* mutex to protect mvaList */
  58. /* should get this mutex whenever add/delete/interate mvaList */
  59. struct mutex dataMutex;
  60. pid_t open_pid;
  61. pid_t open_tgid;
  62. struct list_head mvaList;
  63. } m4u_client_t;
  64. int m4u_dump_info(int m4u_index);
  65. int m4u_power_on(int m4u_index);
  66. int m4u_power_off(int m4u_index);
  67. int m4u_alloc_mva(m4u_client_t *client, M4U_PORT_ID port,
  68. unsigned long va, struct sg_table *sg_table,
  69. unsigned int size, unsigned int prot, unsigned int flags,
  70. unsigned int *pMva);
  71. int m4u_dealloc_mva(m4u_client_t *client, M4U_PORT_ID port, unsigned int mva);
  72. int m4u_alloc_mva_sg(int eModuleID,
  73. struct sg_table *sg_table,
  74. const unsigned int BufSize,
  75. int security,
  76. int cache_coherent,
  77. unsigned int *pRetMVABuf);
  78. int m4u_dealloc_mva_sg(int eModuleID,
  79. struct sg_table *sg_table,
  80. const unsigned int BufSize,
  81. const unsigned int MVA);
  82. int m4u_config_port(M4U_PORT_STRUCT *pM4uPort);
  83. int m4u_config_port_array(struct m4u_port_array *port_array);
  84. int m4u_monitor_start(int m4u_id);
  85. int m4u_monitor_stop(int m4u_id);
  86. int m4u_cache_sync(m4u_client_t *client, M4U_PORT_ID port,
  87. unsigned long va, unsigned int size, unsigned int mva,
  88. M4U_CACHE_SYNC_ENUM sync_type);
  89. int m4u_mva_map_kernel(unsigned int mva, unsigned int size,
  90. unsigned long *map_va, unsigned int *map_size);
  91. int m4u_mva_unmap_kernel(unsigned int mva, unsigned int size, unsigned long va);
  92. m4u_client_t *m4u_create_client(void);
  93. int m4u_destroy_client(m4u_client_t *client);
  94. int m4u_dump_reg_for_smi_hang_issue(void);
  95. int m4u_display_fake_engine_test(unsigned long ulFakeReadAddr, unsigned long ulFakeWriteAddr);
  96. void m4u_larb_backup(int larb_idx);
  97. void m4u_larb_restore(int larb_idx);
  98. typedef enum m4u_callback_ret {
  99. M4U_CALLBACK_HANDLED,
  100. M4U_CALLBACK_NOT_HANDLED,
  101. } m4u_callback_ret_t;
  102. typedef m4u_callback_ret_t (m4u_reclaim_mva_callback_t)(int alloc_port, unsigned int mva,
  103. unsigned int size, void *data);
  104. int m4u_register_reclaim_callback(int port, m4u_reclaim_mva_callback_t *fn, void *data);
  105. int m4u_unregister_reclaim_callback(int port);
  106. typedef m4u_callback_ret_t (m4u_fault_callback_t)(int port, unsigned int mva, void *data);
  107. int m4u_register_fault_callback(int port, m4u_fault_callback_t *fn, void *data);
  108. int m4u_unregister_fault_callback(int port);
  109. #ifdef CONFIG_PM
  110. extern void mt_irq_set_sens(unsigned int irq, unsigned int sens);
  111. extern void mt_irq_set_polarity(unsigned int irq, unsigned int polarity);
  112. #endif
  113. #ifdef M4U_TEE_SERVICE_ENABLE
  114. extern int gM4U_L2_enable;
  115. #endif
  116. extern void show_pte(struct mm_struct *mm, unsigned long addr);
  117. #ifdef M4U_PROFILE
  118. extern void MMProfileEnable(int enable);
  119. extern void MMProfileStart(int start);
  120. extern MMP_Event M4U_MMP_Events[M4U_MMP_MAX];
  121. #endif
  122. #ifndef M4U_FPGAPORTING
  123. extern void smp_inner_dcache_flush_all(void);
  124. #endif
  125. /* m4u driver internal use --------------------------------------------------- */
  126. /* */
  127. #endif