hw_fence_drv_priv.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef __HW_FENCE_DRV_INTERNAL_H
  6. #define __HW_FENCE_DRV_INTERNAL_H
  7. #include <linux/kernel.h>
  8. #include <linux/device.h>
  9. #include <linux/types.h>
  10. #include <linux/dma-mapping.h>
  11. #include <linux/soc/qcom/msm_hw_fence.h>
  12. #include <linux/dma-fence-array.h>
  13. #include <linux/slab.h>
  14. /* Add define only for platforms that support IPCC in dpu-hw */
  15. #define HW_DPU_IPCC 1
  16. /* max u64 to indicate invalid fence */
  17. #define HW_FENCE_INVALID_PARENT_FENCE (~0ULL)
  18. /* hash algorithm constants */
  19. #define HW_FENCE_HASH_A_MULT 4969 /* a multiplier for Hash algorithm */
  20. #define HW_FENCE_HASH_C_MULT 907 /* c multiplier for Hash algorithm */
  21. /* number of queues per type (i.e. ctrl or client queues) */
  22. #define HW_FENCE_CTRL_QUEUES 2 /* Rx and Tx Queues */
  23. #define HW_FENCE_CLIENT_QUEUES 2 /* Rx and Tx Queues */
  24. /* hfi headers calculation */
  25. #define HW_FENCE_HFI_TABLE_HEADER_SIZE (sizeof(struct msm_hw_fence_hfi_queue_table_header))
  26. #define HW_FENCE_HFI_QUEUE_HEADER_SIZE (sizeof(struct msm_hw_fence_hfi_queue_header))
  27. #define HW_FENCE_HFI_CTRL_HEADERS_SIZE (HW_FENCE_HFI_TABLE_HEADER_SIZE + \
  28. (HW_FENCE_HFI_QUEUE_HEADER_SIZE * HW_FENCE_CTRL_QUEUES))
  29. #define HW_FENCE_HFI_CLIENT_HEADERS_SIZE (HW_FENCE_HFI_TABLE_HEADER_SIZE + \
  30. (HW_FENCE_HFI_QUEUE_HEADER_SIZE * HW_FENCE_CLIENT_QUEUES))
  31. /*
  32. * Max Payload size is the bigest size of the message that we can have in the CTRL queue
  33. * in this case the max message is calculated like following, using 32-bits elements:
  34. * 1 header + 1 msg-type + 1 client_id + 2 hash + 1 error
  35. */
  36. #define HW_FENCE_CTRL_QUEUE_MAX_PAYLOAD_SIZE ((1 + 1 + 1 + 2 + 1) * sizeof(u32))
  37. #define HW_FENCE_CTRL_QUEUE_PAYLOAD HW_FENCE_CTRL_QUEUE_MAX_PAYLOAD_SIZE
  38. #define HW_FENCE_CLIENT_QUEUE_PAYLOAD (sizeof(struct msm_hw_fence_queue_payload))
  39. /* Locks area for all the clients */
  40. #define HW_FENCE_MEM_LOCKS_SIZE (sizeof(u64) * (HW_FENCE_CLIENT_MAX - 1))
  41. #define HW_FENCE_TX_QUEUE 1
  42. #define HW_FENCE_RX_QUEUE 2
  43. /* ClientID for the internal join fence, this is used by the framework when creating a join-fence */
  44. #define HW_FENCE_JOIN_FENCE_CLIENT_ID (~(u32)0)
  45. /**
  46. * msm hw fence flags:
  47. * MSM_HW_FENCE_FLAG_SIGNAL - Flag set when the hw-fence is signaled
  48. */
  49. #define MSM_HW_FENCE_FLAG_SIGNAL BIT(0)
  50. /**
  51. * MSM_HW_FENCE_MAX_JOIN_PARENTS:
  52. * Maximum number of parents that a fence can have for a join-fence
  53. */
  54. #define MSM_HW_FENCE_MAX_JOIN_PARENTS 3
  55. /**
  56. * HW_FENCE_PAYLOAD_REV:
  57. * Payload version with major and minor version information
  58. */
  59. #define HW_FENCE_PAYLOAD_REV(major, minor) (major << 8 | (minor & 0xFF))
  60. enum hw_fence_lookup_ops {
  61. HW_FENCE_LOOKUP_OP_CREATE = 0x1,
  62. HW_FENCE_LOOKUP_OP_DESTROY,
  63. HW_FENCE_LOOKUP_OP_CREATE_JOIN,
  64. HW_FENCE_LOOKUP_OP_FIND_FENCE
  65. };
  66. /**
  67. * enum hw_fence_loopback_id - Enum with the clients having a loopback signal (i.e AP to AP signal).
  68. * HW_FENCE_LOOPBACK_DPU_CTL_0: dpu client 0. Used in platforms with no dpu-ipc.
  69. * HW_FENCE_LOOPBACK_DPU_CTL_1: dpu client 1. Used in platforms with no dpu-ipc.
  70. * HW_FENCE_LOOPBACK_DPU_CTL_2: dpu client 2. Used in platforms with no dpu-ipc.
  71. * HW_FENCE_LOOPBACK_DPU_CTL_3: dpu client 3. Used in platforms with no dpu-ipc.
  72. * HW_FENCE_LOOPBACK_DPU_CTL_4: dpu client 4. Used in platforms with no dpu-ipc.
  73. * HW_FENCE_LOOPBACK_DPU_CTL_5: dpu client 5. Used in platforms with no dpu-ipc.
  74. * HW_FENCE_LOOPBACK_DPU_CTX_0: gfx client 0. Used in platforms with no gmu support.
  75. * HW_FENCE_LOOPBACK_VAL_0: debug validation client 0.
  76. * HW_FENCE_LOOPBACK_VAL_1: debug validation client 1.
  77. * HW_FENCE_LOOPBACK_VAL_2: debug validation client 2.
  78. * HW_FENCE_LOOPBACK_VAL_3: debug validation client 3.
  79. * HW_FENCE_LOOPBACK_VAL_4: debug validation client 4.
  80. * HW_FENCE_LOOPBACK_VAL_5: debug validation client 5.
  81. * HW_FENCE_LOOPBACK_VAL_6: debug validation client 6.
  82. */
  83. enum hw_fence_loopback_id {
  84. HW_FENCE_LOOPBACK_DPU_CTL_0,
  85. HW_FENCE_LOOPBACK_DPU_CTL_1,
  86. HW_FENCE_LOOPBACK_DPU_CTL_2,
  87. HW_FENCE_LOOPBACK_DPU_CTL_3,
  88. HW_FENCE_LOOPBACK_DPU_CTL_4,
  89. HW_FENCE_LOOPBACK_DPU_CTL_5,
  90. HW_FENCE_LOOPBACK_GFX_CTX_0,
  91. #if IS_ENABLED(CONFIG_DEBUG_FS)
  92. HW_FENCE_LOOPBACK_VAL_0,
  93. HW_FENCE_LOOPBACK_VAL_1,
  94. HW_FENCE_LOOPBACK_VAL_2,
  95. HW_FENCE_LOOPBACK_VAL_3,
  96. HW_FENCE_LOOPBACK_VAL_4,
  97. HW_FENCE_LOOPBACK_VAL_5,
  98. HW_FENCE_LOOPBACK_VAL_6,
  99. #endif /* CONFIG_DEBUG_FS */
  100. HW_FENCE_LOOPBACK_MAX,
  101. };
  102. #define HW_FENCE_MAX_DPU_LOOPBACK_CLIENTS (HW_FENCE_LOOPBACK_DPU_CTL_5 + 1)
  103. /**
  104. * enum hw_fence_client_data_id - Enum with the clients having client_data, an optional
  105. * parameter passed from the waiting client and returned
  106. * to it upon fence signaling
  107. * @HW_FENCE_CLIENT_DATA_ID_CTX0: GFX Client.
  108. * @HW_FENCE_CLIENT_DATA_ID_IPE: IPE Client.
  109. * @HW_FENCE_CLIENT_DATA_ID_VPU: VPU Client.
  110. * @HW_FENCE_CLIENT_DATA_ID_VAL0: Debug validation client 0.
  111. * @HW_FENCE_CLIENT_DATA_ID_VAL1: Debug validation client 1.
  112. * @HW_FENCE_MAX_CLIENTS_WITH_DATA: Max number of clients with data, also indicates an
  113. * invalid hw_fence_client_data_id
  114. */
  115. enum hw_fence_client_data_id {
  116. HW_FENCE_CLIENT_DATA_ID_CTX0,
  117. HW_FENCE_CLIENT_DATA_ID_IPE,
  118. HW_FENCE_CLIENT_DATA_ID_VPU,
  119. HW_FENCE_CLIENT_DATA_ID_VAL0,
  120. HW_FENCE_CLIENT_DATA_ID_VAL1,
  121. HW_FENCE_MAX_CLIENTS_WITH_DATA,
  122. };
  123. /**
  124. * struct msm_hw_fence_queue - Structure holding the data of the hw fence queues.
  125. * @va_queue: pointer to the virtual address of the queue elements
  126. * @q_size_bytes: size of the queue
  127. * @va_header: pointer to the hfi header virtual address
  128. * @pa_queue: physical address of the queue
  129. */
  130. struct msm_hw_fence_queue {
  131. void *va_queue;
  132. u32 q_size_bytes;
  133. void *va_header;
  134. phys_addr_t pa_queue;
  135. };
  136. /**
  137. * enum payload_type - Enum with the queue payload types.
  138. */
  139. enum payload_type {
  140. HW_FENCE_PAYLOAD_TYPE_1 = 1
  141. };
  142. /**
  143. * struct msm_hw_fence_client - Structure holding the per-Client allocated resources.
  144. * @client_id: id of the client
  145. * @mem_descriptor: hfi header memory descriptor
  146. * @queues: queues descriptor
  147. * @ipc_signal_id: id of the signal to be triggered for this client
  148. * @ipc_client_vid: virtual id of the ipc client for this hw fence driver client
  149. * @ipc_client_pid: physical id of the ipc client for this hw fence driver client
  150. * @update_rxq: bool to indicate if client uses rx-queue
  151. * @send_ipc: bool to indicate if client requires ipc interrupt for already signaled fences
  152. * @wait_queue: wait queue for the validation clients
  153. * @val_signal: doorbell flag to signal the validation clients in the wait queue
  154. */
  155. struct msm_hw_fence_client {
  156. enum hw_fence_client_id client_id;
  157. struct msm_hw_fence_mem_addr mem_descriptor;
  158. struct msm_hw_fence_queue queues[HW_FENCE_CLIENT_QUEUES];
  159. int ipc_signal_id;
  160. int ipc_client_vid;
  161. int ipc_client_pid;
  162. bool update_rxq;
  163. bool send_ipc;
  164. #if IS_ENABLED(CONFIG_DEBUG_FS)
  165. wait_queue_head_t wait_queue;
  166. atomic_t val_signal;
  167. #endif /* CONFIG_DEBUG_FS */
  168. };
  169. /**
  170. * struct msm_hw_fence_mem_data - Structure holding internal memory attributes
  171. *
  172. * @attrs: attributes for the memory allocation
  173. */
  174. struct msm_hw_fence_mem_data {
  175. unsigned long attrs;
  176. };
  177. /**
  178. * struct msm_hw_fence_dbg_data - Structure holding debugfs data
  179. *
  180. * @root: debugfs root
  181. * @entry_rd: flag to indicate if debugfs dumps a single line or table
  182. * @context_rd: debugfs setting to indicate which context id to dump
  183. * @seqno_rd: debugfs setting to indicate which seqno to dump
  184. * @hw_fence_sim_release_delay: delay in micro seconds for the debugfs node that simulates the
  185. * hw-fences behavior, to release the hw-fences
  186. * @create_hw_fences: boolean to continuosly create hw-fences within debugfs
  187. * @clients_list: list of debug clients registered
  188. * @clients_list_lock: lock to synchronize access to the clients list
  189. */
  190. struct msm_hw_fence_dbg_data {
  191. struct dentry *root;
  192. bool entry_rd;
  193. u64 context_rd;
  194. u64 seqno_rd;
  195. u32 hw_fence_sim_release_delay;
  196. bool create_hw_fences;
  197. struct list_head clients_list;
  198. struct mutex clients_list_lock;
  199. };
  200. /**
  201. * struct hw_fence_driver_data - Structure holding internal hw-fence driver data
  202. *
  203. * @dev: device driver pointer
  204. * @resources_ready: value set by driver at end of probe, once all resources are ready
  205. * @hw_fence_table_entries: total number of hw-fences in the global table
  206. * @hw_fence_mem_fences_table_size: hw-fences global table total size
  207. * @hw_fence_queue_entries: total number of entries that can be available in the queue
  208. * @hw_fence_ctrl_queue_size: size of the ctrl queue for the payload
  209. * @hw_fence_mem_ctrl_queues_size: total size of ctrl queues, including: header + rxq + txq
  210. * @hw_fence_client_queue_size: size of the client queue for the payload
  211. * @hw_fence_mem_clients_queues_size: total size of client queues, including: header + rxq + txq
  212. * @hw_fences_tbl: pointer to the hw-fences table
  213. * @hw_fences_tbl_cnt: number of elements in the hw-fence table
  214. * @client_lock_tbl: pointer to the per-client locks table
  215. * @client_lock_tbl_cnt: number of elements in the locks table
  216. * @hw_fences_mem_desc: memory descriptor for the hw-fence table
  217. * @clients_locks_mem_desc: memory descriptor for the locks table
  218. * @ctrl_queue_mem_desc: memory descriptor for the ctrl queues
  219. * @ctrl_queues: pointer to the ctrl queues
  220. * @io_mem_base: pointer to the carved-out io memory
  221. * @res: resources for the carved out memory
  222. * @size: size of the carved-out memory
  223. * @label: label for the carved-out memory (this is used by SVM to find the memory)
  224. * @peer_name: peer name for this carved-out memory
  225. * @rm_nb: hyp resource manager notifier
  226. * @memparcel: memparcel for the allocated memory
  227. * @db_label: doorbell label
  228. * @rx_dbl: handle to the Rx doorbell
  229. * @debugfs_data: debugfs info
  230. * @ipcc_reg_base: base for ipcc regs mapping
  231. * @ipcc_io_mem: base for the ipcc io mem map
  232. * @ipcc_size: size of the ipcc io mem mapping
  233. * @protocol_id: ipcc protocol id used by this driver
  234. * @ipcc_client_vid: ipcc client virtual-id for this driver
  235. * @ipcc_client_pid: ipcc client physical-id for this driver
  236. * @ipc_clients_table: table with the ipcc mapping for each client of this driver
  237. * @qtime_reg_base: qtimer register base address
  238. * @qtime_io_mem: qtimer io mem map
  239. * @qtime_size: qtimer io mem map size
  240. * @ctl_start_ptr: pointer to the ctl_start registers of the display hw (platforms with no dpu-ipc)
  241. * @ctl_start_size: size of the ctl_start registers of the display hw (platforms with no dpu-ipc)
  242. * @client_id_mask: bitmask for tracking registered client_ids
  243. * @clients_register_lock: lock to synchronize clients registration and deregistration
  244. * @msm_hw_fence_client: table with the handles of the registered clients
  245. * @vm_ready: flag to indicate if vm has been initialized
  246. * @ipcc_dpu_initialized: flag to indicate if dpu hw is initialized
  247. */
  248. struct hw_fence_driver_data {
  249. struct device *dev;
  250. bool resources_ready;
  251. /* Table & Queues info */
  252. u32 hw_fence_table_entries;
  253. u32 hw_fence_mem_fences_table_size;
  254. u32 hw_fence_queue_entries;
  255. /* ctrl queues */
  256. u32 hw_fence_ctrl_queue_size;
  257. u32 hw_fence_mem_ctrl_queues_size;
  258. /* client queues */
  259. u32 hw_fence_client_queue_size;
  260. u32 hw_fence_mem_clients_queues_size;
  261. /* HW Fences Table VA */
  262. struct msm_hw_fence *hw_fences_tbl;
  263. u32 hw_fences_tbl_cnt;
  264. /* Table with a Per-Client Lock */
  265. u64 *client_lock_tbl;
  266. u32 client_lock_tbl_cnt;
  267. /* Memory Descriptors */
  268. struct msm_hw_fence_mem_addr hw_fences_mem_desc;
  269. struct msm_hw_fence_mem_addr clients_locks_mem_desc;
  270. struct msm_hw_fence_mem_addr ctrl_queue_mem_desc;
  271. struct msm_hw_fence_queue ctrl_queues[HW_FENCE_CTRL_QUEUES];
  272. /* carved out memory */
  273. void __iomem *io_mem_base;
  274. struct resource res;
  275. size_t size;
  276. u32 label;
  277. u32 peer_name;
  278. struct notifier_block rm_nb;
  279. u32 memparcel;
  280. /* doorbell */
  281. u32 db_label;
  282. /* VM virq */
  283. void *rx_dbl;
  284. /* debugfs */
  285. struct msm_hw_fence_dbg_data debugfs_data;
  286. /* ipcc regs */
  287. phys_addr_t ipcc_reg_base;
  288. void __iomem *ipcc_io_mem;
  289. uint32_t ipcc_size;
  290. u32 protocol_id;
  291. u32 ipcc_client_vid;
  292. u32 ipcc_client_pid;
  293. /* table with mapping of ipc client for each hw-fence client */
  294. struct hw_fence_client_ipc_map *ipc_clients_table;
  295. /* qtime reg */
  296. phys_addr_t qtime_reg_base;
  297. void __iomem *qtime_io_mem;
  298. uint32_t qtime_size;
  299. /* base address for dpu ctl start regs */
  300. void *ctl_start_ptr[HW_FENCE_MAX_DPU_LOOPBACK_CLIENTS];
  301. uint32_t ctl_start_size[HW_FENCE_MAX_DPU_LOOPBACK_CLIENTS];
  302. /* synchronize client_ids registration and deregistration */
  303. struct mutex clients_register_lock;
  304. /* table with registered client handles */
  305. struct msm_hw_fence_client *clients[HW_FENCE_CLIENT_MAX];
  306. bool vm_ready;
  307. #ifdef HW_DPU_IPCC
  308. /* state variables */
  309. bool ipcc_dpu_initialized;
  310. #endif /* HW_DPU_IPCC */
  311. };
  312. /**
  313. * struct msm_hw_fence_queue_payload - hardware fence clients queues payload.
  314. * @size: size of queue payload
  315. * @type: type of queue payload
  316. * @version: version of queue payload. High eight bits are for major and lower eight
  317. * bits are for minor version
  318. * @ctxt_id: context id of the dma fence
  319. * @seqno: sequence number of the dma fence
  320. * @hash: fence hash
  321. * @flags: see MSM_HW_FENCE_FLAG_* flags descriptions
  322. * @client_data: data passed from and returned to waiting client upon fence signaling
  323. * @error: error code for this fence, fence controller receives this
  324. * error from the signaling client through the tx queue and
  325. * propagates the error to the waiting client through rx queue
  326. * @timestamp_lo: low 32-bits of qtime of when the payload is written into the queue
  327. * @timestamp_hi: high 32-bits of qtime of when the payload is written into the queue
  328. */
  329. struct msm_hw_fence_queue_payload {
  330. u32 size;
  331. u16 type;
  332. u16 version;
  333. u64 ctxt_id;
  334. u64 seqno;
  335. u64 hash;
  336. u64 flags;
  337. u64 client_data;
  338. u32 error;
  339. u32 timestamp_lo;
  340. u32 timestamp_hi;
  341. u32 reserve;
  342. };
  343. /**
  344. * struct msm_hw_fence - structure holding each hw fence data.
  345. * @valid: field updated when a hw-fence is reserved. True if hw-fence is in use
  346. * @error: field to hold a hw-fence error
  347. * @ctx_id: context id
  348. * @seq_id: sequence id
  349. * @wait_client_mask: bitmask holding the waiting-clients of the fence
  350. * @fence_allocator: field to indicate the client_id that reserved the fence
  351. * @fence_signal-client:
  352. * @lock: this field is required to share information between the Driver & Driver ||
  353. * Driver & FenceCTL. Needs to be 64-bit atomic inter-processor lock.
  354. * @flags: field to indicate the state of the fence
  355. * @parent_list: list of indexes with the parents for a child-fence in a join-fence
  356. * @parent_cnt: total number of parents for a child-fence in a join-fence
  357. * @pending_child_cnt: children refcount for a parent-fence in a join-fence. Access must be atomic
  358. * or locked
  359. * @fence_create_time: debug info with the create time timestamp
  360. * @fence_trigger_time: debug info with the trigger time timestamp
  361. * @fence_wait_time: debug info with the register-for-wait timestamp
  362. * @debug_refcount: refcount used for debugging
  363. * @client_data: array of data optionally passed from and returned to clients waiting on the fence
  364. * during fence signaling
  365. */
  366. struct msm_hw_fence {
  367. u32 valid;
  368. u32 error;
  369. u64 ctx_id;
  370. u64 seq_id;
  371. u64 wait_client_mask;
  372. u32 fence_allocator;
  373. u32 fence_signal_client;
  374. u64 lock; /* Datatype must be 64-bit. */
  375. u64 flags;
  376. u64 parent_list[MSM_HW_FENCE_MAX_JOIN_PARENTS];
  377. u32 parents_cnt;
  378. u32 pending_child_cnt;
  379. u64 fence_create_time;
  380. u64 fence_trigger_time;
  381. u64 fence_wait_time;
  382. u64 debug_refcount;
  383. u64 client_data[HW_FENCE_MAX_CLIENTS_WITH_DATA];
  384. };
  385. int hw_fence_init(struct hw_fence_driver_data *drv_data);
  386. int hw_fence_alloc_client_resources(struct hw_fence_driver_data *drv_data,
  387. struct msm_hw_fence_client *hw_fence_client,
  388. struct msm_hw_fence_mem_addr *mem_descriptor);
  389. int hw_fence_init_controller_signal(struct hw_fence_driver_data *drv_data,
  390. struct msm_hw_fence_client *hw_fence_client);
  391. int hw_fence_init_controller_resources(struct msm_hw_fence_client *hw_fence_client);
  392. void hw_fence_cleanup_client(struct hw_fence_driver_data *drv_data,
  393. struct msm_hw_fence_client *hw_fence_client);
  394. int hw_fence_create(struct hw_fence_driver_data *drv_data,
  395. struct msm_hw_fence_client *hw_fence_client,
  396. u64 context, u64 seqno, u64 *hash);
  397. int hw_fence_destroy(struct hw_fence_driver_data *drv_data,
  398. struct msm_hw_fence_client *hw_fence_client,
  399. u64 context, u64 seqno);
  400. int hw_fence_destroy_with_hash(struct hw_fence_driver_data *drv_data,
  401. struct msm_hw_fence_client *hw_fence_client, u64 hash);
  402. int hw_fence_process_fence_array(struct hw_fence_driver_data *drv_data,
  403. struct msm_hw_fence_client *hw_fence_client,
  404. struct dma_fence_array *array, u64 *hash_join_fence, u64 client_data);
  405. int hw_fence_process_fence(struct hw_fence_driver_data *drv_data,
  406. struct msm_hw_fence_client *hw_fence_client, struct dma_fence *fence, u64 *hash,
  407. u64 client_data);
  408. int hw_fence_update_queue(struct hw_fence_driver_data *drv_data,
  409. struct msm_hw_fence_client *hw_fence_client, u64 ctxt_id, u64 seqno, u64 hash,
  410. u64 flags, u64 client_data, u32 error, int queue_type);
  411. inline u64 hw_fence_get_qtime(struct hw_fence_driver_data *drv_data);
  412. int hw_fence_read_queue(struct msm_hw_fence_client *hw_fence_client,
  413. struct msm_hw_fence_queue_payload *payload, int queue_type);
  414. int hw_fence_register_wait_client(struct hw_fence_driver_data *drv_data,
  415. struct dma_fence *fence, struct msm_hw_fence_client *hw_fence_client, u64 context,
  416. u64 seqno, u64 *hash, u64 client_data);
  417. struct msm_hw_fence *msm_hw_fence_find(struct hw_fence_driver_data *drv_data,
  418. struct msm_hw_fence_client *hw_fence_client,
  419. u64 context, u64 seqno, u64 *hash);
  420. enum hw_fence_client_data_id hw_fence_get_client_data_id(enum hw_fence_client_id client_id);
  421. #endif /* __HW_FENCE_DRV_INTERNAL_H */