venus_hfi_queue.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2020-2022, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _VENUS_HFI_QUEUE_H_
  7. #define _VENUS_HFI_QUEUE_H_
  8. #include <linux/types.h>
  9. #include "msm_vidc_internal.h"
  10. #define HFI_MASK_QHDR_TX_TYPE 0xff000000
  11. #define HFI_MASK_QHDR_RX_TYPE 0x00ff0000
  12. #define HFI_MASK_QHDR_PRI_TYPE 0x0000ff00
  13. #define HFI_MASK_QHDR_Q_ID_TYPE 0x000000ff
  14. #define HFI_Q_ID_HOST_TO_CTRL_CMD_Q 0
  15. #define HFI_Q_ID_CTRL_TO_HOST_MSG_Q 1
  16. #define HFI_Q_ID_CTRL_TO_HOST_DEBUG_Q 2
  17. #define HFI_MASK_QHDR_STATUS 0x000000ff
  18. #define VIDC_IFACEQ_NUMQ 3
  19. #define VIDC_IFACEQ_CMDQ_IDX 0
  20. #define VIDC_IFACEQ_MSGQ_IDX 1
  21. #define VIDC_IFACEQ_DBGQ_IDX 2
  22. #define VIDC_IFACEQ_MAX_BUF_COUNT 50
  23. #define VIDC_IFACE_MAX_PARALLEL_CLNTS 16
  24. #define VIDC_IFACEQ_DFLT_QHDR 0x01010000
  25. struct hfi_queue_table_header {
  26. u32 qtbl_version;
  27. u32 qtbl_size;
  28. u32 qtbl_qhdr0_offset;
  29. u32 qtbl_qhdr_size;
  30. u32 qtbl_num_q;
  31. u32 qtbl_num_active_q;
  32. void *device_addr;
  33. char name[256];
  34. };
  35. struct hfi_queue_header {
  36. u32 qhdr_status;
  37. u32 qhdr_start_addr;
  38. u32 qhdr_type;
  39. u32 qhdr_q_size;
  40. u32 qhdr_pkt_size;
  41. u32 qhdr_pkt_drop_cnt;
  42. u32 qhdr_rx_wm;
  43. u32 qhdr_tx_wm;
  44. u32 qhdr_rx_req;
  45. u32 qhdr_tx_req;
  46. u32 qhdr_rx_irq_status;
  47. u32 qhdr_tx_irq_status;
  48. u32 qhdr_read_idx;
  49. u32 qhdr_write_idx;
  50. };
  51. #define VIDC_IFACEQ_TABLE_SIZE (sizeof(struct hfi_queue_table_header) + \
  52. sizeof(struct hfi_queue_header) * VIDC_IFACEQ_NUMQ)
  53. #define VIDC_IFACEQ_QUEUE_SIZE (VIDC_IFACEQ_MAX_PKT_SIZE * \
  54. VIDC_IFACEQ_MAX_BUF_COUNT * VIDC_IFACE_MAX_PARALLEL_CLNTS)
  55. #define VIDC_IFACEQ_GET_QHDR_START_ADDR(ptr, i) \
  56. ((void *)((ptr + sizeof(struct hfi_queue_table_header)) + \
  57. (i * sizeof(struct hfi_queue_header))))
  58. #define QDSS_SIZE 4096
  59. #define SFR_SIZE 4096
  60. #define MMAP_BUF_SIZE 4096
  61. #define QUEUE_SIZE (VIDC_IFACEQ_TABLE_SIZE + \
  62. (VIDC_IFACEQ_QUEUE_SIZE * VIDC_IFACEQ_NUMQ))
  63. #define ALIGNED_QDSS_SIZE ALIGN(QDSS_SIZE, SZ_4K)
  64. #define ALIGNED_SFR_SIZE ALIGN(SFR_SIZE, SZ_4K)
  65. #define ALIGNED_MMAP_BUF_SIZE ALIGN(MMAP_BUF_SIZE, SZ_4K)
  66. #define ALIGNED_QUEUE_SIZE ALIGN(QUEUE_SIZE, SZ_4K)
  67. #define SHARED_QSIZE ALIGN(ALIGNED_SFR_SIZE + ALIGNED_QUEUE_SIZE + \
  68. ALIGNED_QDSS_SIZE + ALIGNED_MMAP_BUF_SIZE, SZ_1M)
  69. #define TOTAL_QSIZE (SHARED_QSIZE - ALIGNED_SFR_SIZE - ALIGNED_QDSS_SIZE - \
  70. ALIGNED_MMAP_BUF_SIZE)
  71. struct msm_vidc_core;
  72. int venus_hfi_queue_cmd_write(struct msm_vidc_core *core, void *pkt);
  73. int venus_hfi_queue_cmd_write_intr(struct msm_vidc_core *core, void *pkt,
  74. bool allow_intr);
  75. int venus_hfi_queue_msg_read(struct msm_vidc_core *core, void *pkt);
  76. int venus_hfi_queue_dbg_read(struct msm_vidc_core *core, void *pkt);
  77. void venus_hfi_queue_deinit(struct msm_vidc_core *core);
  78. int venus_hfi_queue_init(struct msm_vidc_core *core);
  79. int venus_hfi_reset_queue_header(struct msm_vidc_core *core);
  80. #endif