msm_vidc_inst.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _MSM_VIDC_INST_H_
  7. #define _MSM_VIDC_INST_H_
  8. #include "msm_vidc_internal.h"
  9. #include "msm_vidc_memory.h"
  10. #include "msm_vidc_state.h"
  11. #include "hfi_property.h"
  12. struct msm_vidc_inst;
  13. #define call_session_op(c, op, ...) \
  14. (((c) && (c)->session_ops && (c)->session_ops->op) ? \
  15. ((c)->session_ops->op(__VA_ARGS__)) : 0)
  16. struct msm_vidc_session_ops {
  17. u64 (*calc_freq)(struct msm_vidc_inst *inst, u32 data_size);
  18. int (*calc_bw)(struct msm_vidc_inst *inst,
  19. struct vidc_bus_vote_data *vote_data);
  20. int (*decide_work_route)(struct msm_vidc_inst *inst);
  21. int (*decide_work_mode)(struct msm_vidc_inst *inst);
  22. int (*decide_quality_mode)(struct msm_vidc_inst *inst);
  23. int (*buffer_size)(struct msm_vidc_inst *inst, enum msm_vidc_buffer_type type);
  24. int (*min_count)(struct msm_vidc_inst *inst, enum msm_vidc_buffer_type type);
  25. int (*extra_count)(struct msm_vidc_inst *inst, enum msm_vidc_buffer_type type);
  26. int (*ring_buf_count)(struct msm_vidc_inst *inst, u32 data_size);
  27. };
  28. struct msm_vidc_mem_list_info {
  29. struct msm_vidc_mem_list bin;
  30. struct msm_vidc_mem_list arp;
  31. struct msm_vidc_mem_list comv;
  32. struct msm_vidc_mem_list non_comv;
  33. struct msm_vidc_mem_list line;
  34. struct msm_vidc_mem_list dpb;
  35. struct msm_vidc_mem_list persist;
  36. struct msm_vidc_mem_list vpss;
  37. struct msm_vidc_mem_list partial_data;
  38. };
  39. struct msm_vidc_buffers_info {
  40. struct msm_vidc_buffers input;
  41. struct msm_vidc_buffers output;
  42. struct msm_vidc_buffers read_only;
  43. struct msm_vidc_buffers input_meta;
  44. struct msm_vidc_buffers output_meta;
  45. struct msm_vidc_buffers bin;
  46. struct msm_vidc_buffers arp;
  47. struct msm_vidc_buffers comv;
  48. struct msm_vidc_buffers non_comv;
  49. struct msm_vidc_buffers line;
  50. struct msm_vidc_buffers dpb;
  51. struct msm_vidc_buffers persist;
  52. struct msm_vidc_buffers vpss;
  53. struct msm_vidc_buffers partial_data;
  54. };
  55. struct buf_queue {
  56. struct vb2_queue *vb2q;
  57. };
  58. struct msm_vidc_inst {
  59. struct list_head list;
  60. struct mutex lock;
  61. struct mutex ctx_q_lock;
  62. struct mutex client_lock;
  63. enum msm_vidc_state state;
  64. int (*event_handle)(struct msm_vidc_inst *inst,
  65. enum msm_vidc_event event,
  66. void *data);
  67. enum msm_vidc_sub_state sub_state;
  68. char sub_state_name[MAX_NAME_LENGTH];
  69. enum msm_vidc_domain_type domain;
  70. enum msm_vidc_codec_type codec;
  71. void *core;
  72. struct kref kref;
  73. u32 session_id;
  74. u8 debug_str[24];
  75. void *packet;
  76. u32 packet_size;
  77. struct v4l2_format fmts[MAX_PORT];
  78. struct v4l2_ctrl_handler ctrl_handler;
  79. struct v4l2_fh fh;
  80. struct v4l2_m2m_dev *m2m_dev;
  81. struct v4l2_m2m_ctx *m2m_ctx;
  82. u32 num_ctrls;
  83. enum hfi_rate_control hfi_rc_type;
  84. enum hfi_layer_encoding_type hfi_layer_type;
  85. bool request;
  86. struct buf_queue bufq[MAX_PORT];
  87. struct msm_vidc_rectangle crop;
  88. struct msm_vidc_rectangle compose;
  89. struct msm_vidc_power power;
  90. struct vidc_bus_vote_data bus_data;
  91. struct msm_memory_pool pool[MSM_MEM_POOL_MAX];
  92. struct msm_vidc_buffers_info buffers;
  93. struct msm_vidc_mem_list_info mem_info;
  94. struct msm_vidc_timestamps timestamps;
  95. struct msm_vidc_timestamps ts_reorder; /* struct msm_vidc_timestamp */
  96. struct msm_vidc_subscription_params subcr_params[MAX_PORT];
  97. struct msm_vidc_hfi_frame_info hfi_frame_info;
  98. struct msm_vidc_decode_batch decode_batch;
  99. struct msm_vidc_decode_vpp_delay decode_vpp_delay;
  100. struct msm_vidc_session_idle session_idle;
  101. struct delayed_work stats_work;
  102. struct work_struct stability_work;
  103. struct msm_vidc_stability stability;
  104. struct workqueue_struct *workq;
  105. struct list_head enc_input_crs;
  106. struct list_head dmabuf_tracker; /* struct msm_memory_dmabuf */
  107. struct list_head input_timer_list; /* struct msm_vidc_input_timer */
  108. struct list_head caps_list;
  109. struct list_head children_list; /* struct msm_vidc_inst_cap_entry */
  110. struct list_head firmware_list; /* struct msm_vidc_inst_cap_entry */
  111. struct list_head pending_pkts; /* struct hfi_pending_packet */
  112. struct list_head fence_list; /* struct msm_vidc_fence */
  113. struct list_head buffer_stats_list; /* struct msm_vidc_buffer_stats */
  114. bool once_per_session_set;
  115. bool ipsc_properties_set;
  116. bool opsc_properties_set;
  117. bool caps_list_prepared;
  118. struct dentry *debugfs_root;
  119. struct msm_vidc_debug debug;
  120. struct debug_buf_count debug_count;
  121. struct msm_vidc_statistics stats;
  122. struct msm_vidc_inst_cap capabilities[INST_CAP_MAX + 1];
  123. struct completion completions[MAX_SIGNAL];
  124. struct msm_vidc_fence_context fence_context;
  125. bool active;
  126. u64 last_qbuf_time_ns;
  127. u64 initial_time_us;
  128. u32 max_input_data_size;
  129. u32 dpb_list_payload[MAX_DPB_LIST_ARRAY_SIZE];
  130. bool input_dpb_list_enabled;
  131. bool output_dpb_list_enabled;
  132. u32 auto_framerate;
  133. u32 max_rate;
  134. bool has_bframe;
  135. bool ir_enabled;
  136. u32 adjust_priority;
  137. bool iframe;
  138. u32 fw_min_count;
  139. };
  140. #endif // _MSM_VIDC_INST_H_