cam_cpas.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef __UAPI_CAM_CPAS_H__
  7. #define __UAPI_CAM_CPAS_H__
  8. #include <media/cam_defs.h>
  9. #define CAM_FAMILY_CAMERA_SS 1
  10. #define CAM_FAMILY_CPAS_SS 2
  11. /* AXI BW Voting Version */
  12. #define CAM_AXI_BW_VOTING_V2 2
  13. /* AXI BW Voting Transaction Type */
  14. #define CAM_AXI_TRANSACTION_READ 0
  15. #define CAM_AXI_TRANSACTION_WRITE 1
  16. /* AXI BW Voting Path Data Type */
  17. #define CAM_AXI_PATH_DATA_IFE_START_OFFSET 0
  18. #define CAM_AXI_PATH_DATA_IFE_LINEAR (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 0)
  19. #define CAM_AXI_PATH_DATA_IFE_VID (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 1)
  20. #define CAM_AXI_PATH_DATA_IFE_DISP (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 2)
  21. #define CAM_AXI_PATH_DATA_IFE_STATS (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 3)
  22. #define CAM_AXI_PATH_DATA_IFE_RDI0 (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 4)
  23. #define CAM_AXI_PATH_DATA_IFE_RDI1 (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 5)
  24. #define CAM_AXI_PATH_DATA_IFE_RDI2 (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 6)
  25. #define CAM_AXI_PATH_DATA_IFE_RDI3 (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 7)
  26. #define CAM_AXI_PATH_DATA_IFE_PDAF (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 8)
  27. #define CAM_AXI_PATH_DATA_IFE_PIXEL_RAW \
  28. (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 9)
  29. #define CAM_AXI_PATH_DATA_IFE_MAX_OFFSET \
  30. (CAM_AXI_PATH_DATA_IFE_START_OFFSET + 31)
  31. #define CAM_AXI_PATH_DATA_IPE_START_OFFSET 32
  32. #define CAM_AXI_PATH_DATA_IPE_RD_IN (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 0)
  33. #define CAM_AXI_PATH_DATA_IPE_RD_REF (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 1)
  34. #define CAM_AXI_PATH_DATA_IPE_WR_VID (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 2)
  35. #define CAM_AXI_PATH_DATA_IPE_WR_DISP (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 3)
  36. #define CAM_AXI_PATH_DATA_IPE_WR_REF (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 4)
  37. #define CAM_AXI_PATH_DATA_IPE_WR_APP (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 5)
  38. #define CAM_AXI_PATH_DATA_IPE_MAX_OFFSET \
  39. (CAM_AXI_PATH_DATA_IPE_START_OFFSET + 31)
  40. #define CAM_AXI_PATH_DATA_OPE_START_OFFSET 64
  41. #define CAM_AXI_PATH_DATA_OPE_RD_IN (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 0)
  42. #define CAM_AXI_PATH_DATA_OPE_RD_REF (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 1)
  43. #define CAM_AXI_PATH_DATA_OPE_WR_VID (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 2)
  44. #define CAM_AXI_PATH_DATA_OPE_WR_DISP (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 3)
  45. #define CAM_AXI_PATH_DATA_OPE_WR_REF (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 4)
  46. #define CAM_AXI_PATH_DATA_OPE_MAX_OFFSET \
  47. (CAM_AXI_PATH_DATA_OPE_START_OFFSET + 31)
  48. #define CAM_AXI_PATH_DATA_SFE_START_OFFSET 96
  49. #define CAM_AXI_PATH_DATA_SFE_NRDI (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 0)
  50. #define CAM_AXI_PATH_DATA_SFE_RDI0 (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 1)
  51. #define CAM_AXI_PATH_DATA_SFE_RDI1 (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 2)
  52. #define CAM_AXI_PATH_DATA_SFE_RDI2 (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 3)
  53. #define CAM_AXI_PATH_DATA_SFE_RDI3 (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 4)
  54. #define CAM_AXI_PATH_DATA_SFE_RDI4 (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 5)
  55. #define CAM_AXI_PATH_DATA_SFE_STATS (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 6)
  56. #define CAM_AXI_PATH_DATA_SFE_MAX_OFFSET \
  57. (CAM_AXI_PATH_DATA_SFE_START_OFFSET + 31)
  58. #define CAM_AXI_PATH_DATA_CRE_START_OFFSET (CAM_AXI_PATH_DATA_SFE_MAX_OFFSET + 1)
  59. #define CAM_AXI_PATH_DATA_CRE_RD_IN (CAM_AXI_PATH_DATA_CRE_START_OFFSET + 0)
  60. #define CAM_AXI_PATH_DATA_CRE_WR_OUT (CAM_AXI_PATH_DATA_CRE_START_OFFSET + 1)
  61. #define CAM_AXI_PATH_DATA_CRE_MAX_OFFSET \
  62. (CAM_AXI_PATH_DATA_CRE_START_OFFSET + 31)
  63. #define CAM_AXI_PATH_DATA_OFE_START_OFFSET (CAM_AXI_PATH_DATA_CRE_MAX_OFFSET + 1)
  64. #define CAM_AXI_PATH_DATA_OFE_RD_EXT (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 0)
  65. #define CAM_AXI_PATH_DATA_OFE_RD_INT_PDI (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 1)
  66. #define CAM_AXI_PATH_DATA_OFE_RD_INT_HDR (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 2)
  67. #define CAM_AXI_PATH_DATA_OFE_WR_VID (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 3)
  68. #define CAM_AXI_PATH_DATA_OFE_WR_DISP (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 4)
  69. #define CAM_AXI_PATH_DATA_OFE_WR_IR (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 5)
  70. #define CAM_AXI_PATH_DATA_OFE_WR_HDR_LTM (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 6)
  71. #define CAM_AXI_PATH_DATA_OFE_WR_DC4 (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 7)
  72. #define CAM_AXI_PATH_DATA_OFE_WR_AI (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 8)
  73. #define CAM_AXI_PATH_DATA_OFE_WR_PDI (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 9)
  74. #define CAM_AXI_PATH_DATA_OFE_WR_IDEALRAW (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 10)
  75. #define CAM_AXI_PATH_DATA_OFE_WR_STATS (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 11)
  76. #define CAM_AXI_PATH_DATA_OFE_MAX_OFFSET \
  77. (CAM_AXI_PATH_DATA_OFE_START_OFFSET + 31)
  78. #define CAM_AXI_PATH_DATA_ALL 256
  79. #define CAM_CPAS_FUSES_MAX 32
  80. #define CAM_CPAS_DOMAIN_ID_MAX 5
  81. /* DRV Vote level */
  82. #define CAM_CPAS_VOTE_LEVEL_HIGH 1
  83. #define CAM_CPAS_VOTE_LEVEL_LOW 2
  84. /* Domain id types */
  85. #define CAM_CPAS_NON_SECURE_DOMAIN 0
  86. #define CAM_CPAS_SECURE_DOMAIN 1
  87. /* sysfs entry of camera subparts info */
  88. #define CAM_SYSFS_SUBPARTS_INFO_FILENAME "subparts_info"
  89. /**
  90. * struct cam_cpas_fuse_value - CPAS fuse value
  91. *
  92. * @fuse_id : Camera fuse identification
  93. * @fuse_val : Camera Fuse Value
  94. */
  95. struct cam_cpas_fuse_value {
  96. __u32 fuse_id;
  97. __u32 fuse_val;
  98. };
  99. /**
  100. * struct cam_cpas_fuse_info - CPAS fuse info
  101. *
  102. * @num_fuses : Number of fuses
  103. * @fuse_val : Array of different fuse info.
  104. */
  105. struct cam_cpas_fuse_info {
  106. __u32 num_fuses;
  107. struct cam_cpas_fuse_value fuse_val[CAM_CPAS_FUSES_MAX];
  108. };
  109. /**
  110. * struct cam_cpas_domain_id_pairing - CPAS domain id mapping
  111. *
  112. * @domain_type : Domain type
  113. * @mapping_id : ID of domain type
  114. */
  115. struct cam_cpas_domain_id_pairing {
  116. __u32 domain_type;
  117. __u32 mapping_id;
  118. __u32 num_valid_params;
  119. __u32 valid_param_mask;
  120. __u32 params[4];
  121. };
  122. /**
  123. * struct cam_cpas_domain_id_caps - CPAS domain id info
  124. *
  125. * @is_supported : If domain id is supported on target
  126. * @num_mapping : Number of domain id types supported, if any
  127. * @entries : Stores mapping between domain type and its ID
  128. * @num_valid_params : Number of valid params
  129. * @valid_param_mask : Valid param mask
  130. * @params : These fields are reserved for future extensions
  131. * to this structure.
  132. */
  133. struct cam_cpas_domain_id_caps {
  134. __u32 is_supported;
  135. __u32 num_mapping;
  136. struct cam_cpas_domain_id_pairing entries[CAM_CPAS_DOMAIN_ID_MAX];
  137. __u32 num_valid_params;
  138. __u32 valid_param_mask;
  139. __u32 params[6];
  140. };
  141. /**
  142. * struct cam_cpas_query_cap - CPAS query device capability payload
  143. *
  144. * @camera_family : Camera family type
  145. * @reserved : Reserved field for alignment
  146. * @camera_version : Camera platform version
  147. * @cpas_version : Camera CPAS version within camera platform
  148. *
  149. */
  150. struct cam_cpas_query_cap {
  151. __u32 camera_family;
  152. __u32 reserved;
  153. struct cam_hw_version camera_version;
  154. struct cam_hw_version cpas_version;
  155. };
  156. /**
  157. * struct cam_cpas_query_cap - CPAS query device capability payload
  158. *
  159. * @camera_family : Camera family type
  160. * @reserved : Reserved field for alignment
  161. * @camera_version : Camera platform version
  162. * @cpas_version : Camera CPAS version within camera platform
  163. * @fuse_info : Camera fuse info
  164. *
  165. */
  166. struct cam_cpas_query_cap_v2 {
  167. __u32 camera_family;
  168. __u32 reserved;
  169. struct cam_hw_version camera_version;
  170. struct cam_hw_version cpas_version;
  171. struct cam_cpas_fuse_info fuse_info;
  172. };
  173. /**
  174. * struct cam_cpas_query_cap - CPAS query device capability payload
  175. *
  176. * @version : Struct version
  177. * @camera_family : Camera family type
  178. * @camera_caps : Camera capability
  179. * @camera_version : Camera platform version
  180. * @cpas_version : Camera CPAS version within camera platform
  181. * @fuse_info : Camera fuse info
  182. * @domain_id_info : Domain id info
  183. * @num_valid_params : Number of valid params
  184. * @valid_param_mask : Valid param mask
  185. * @params : Reserved fields to make this query cap
  186. * extendable in the future
  187. */
  188. struct cam_cpas_query_cap_v3 {
  189. __u32 version;
  190. __u32 camera_family;
  191. __u32 camera_caps;
  192. struct cam_hw_version camera_version;
  193. struct cam_hw_version cpas_version;
  194. struct cam_cpas_fuse_info fuse_info;
  195. struct cam_cpas_domain_id_caps domain_id_info;
  196. __u32 num_valid_params;
  197. __u32 valid_param_mask;
  198. __u32 params[10];
  199. };
  200. /**
  201. * struct cam_axi_per_path_bw_vote_v2 - Per path bandwidth vote information
  202. *
  203. * @usage_data: client usage data (left/right/rdi)
  204. * @transac_type: Transaction type on the path (read/write)
  205. * @path_data_type: Path for which vote is given (video, display, rdi)
  206. * @vote_level: Vote level for this path
  207. * @camnoc_bw: CAMNOC bw for this path
  208. * @mnoc_ab_bw: MNOC AB bw for this path
  209. * @mnoc_ib_bw: MNOC IB bw for this path
  210. * @ddr_ab_bw: DDR AB bw for this path
  211. * @ddr_ib_bw: DDR IB bw for this path
  212. * @num_valid_params: Number of valid params
  213. * @valid_param_mask: Valid param mask
  214. * @params: params
  215. */
  216. struct cam_axi_per_path_bw_vote_v2 {
  217. __u32 usage_data;
  218. __u32 transac_type;
  219. __u32 path_data_type;
  220. __u32 vote_level;
  221. __u64 camnoc_bw;
  222. __u64 mnoc_ab_bw;
  223. __u64 mnoc_ib_bw;
  224. __u64 ddr_ab_bw;
  225. __u64 ddr_ib_bw;
  226. __u32 num_valid_params;
  227. __u32 valid_param_mask;
  228. __u32 params[4];
  229. };
  230. /**
  231. * struct cam_axi_per_path_bw_vote - Per path bandwidth vote information
  232. *
  233. * @usage_data client usage data (left/right/rdi)
  234. * @transac_type Transaction type on the path (read/write)
  235. * @path_data_type Path for which vote is given (video, display, rdi)
  236. * @reserved Reserved for alignment
  237. * @camnoc_bw CAMNOC bw for this path
  238. * @mnoc_ab_bw MNOC AB bw for this path
  239. * @mnoc_ib_bw MNOC IB bw for this path
  240. * @ddr_ab_bw DDR AB bw for this path
  241. * @ddr_ib_bw DDR IB bw for this path
  242. */
  243. struct cam_axi_per_path_bw_vote {
  244. __u32 usage_data;
  245. __u32 transac_type;
  246. __u32 path_data_type;
  247. __u32 reserved;
  248. __u64 camnoc_bw;
  249. __u64 mnoc_ab_bw;
  250. __u64 mnoc_ib_bw;
  251. __u64 ddr_ab_bw;
  252. __u64 ddr_ib_bw;
  253. };
  254. #define CAM_CPAS_CUSTOM_CMD_FD_PORT_CFG 0
  255. /**
  256. * struct cam_cpas_fd_port_config : CPAS custom cmd struct for updating FD
  257. * port config
  258. *
  259. * @is_secure Security mode of the FD port
  260. * @reserved Reserved for alignment
  261. */
  262. struct cam_cpas_fd_port_config {
  263. __u32 is_secure;
  264. __u32 reserved;
  265. };
  266. #endif /* __UAPI_CAM_CPAS_H__ */