cam_isp.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef __UAPI_CAM_ISP_H__
  6. #define __UAPI_CAM_ISP_H__
  7. #include <camera/media/cam_defs.h>
  8. #include <camera/media/cam_isp_vfe.h>
  9. #include <camera/media/cam_isp_ife.h>
  10. #include <camera/media/cam_isp_sfe.h>
  11. #include <camera/media/cam_cpas.h>
  12. /* ISP driver name */
  13. #define CAM_ISP_DEV_NAME "cam-isp"
  14. /* HW type */
  15. #define CAM_ISP_HW_BASE 0
  16. #define CAM_ISP_HW_CSID 1
  17. #define CAM_ISP_HW_VFE 2
  18. #define CAM_ISP_HW_IFE 3
  19. #define CAM_ISP_HW_ISPIF 4
  20. #define CAM_ISP_HW_IFE_LITE 5
  21. #define CAM_ISP_HW_CSID_LITE 6
  22. #define CAM_ISP_HW_SFE 7
  23. #define CAM_ISP_HW_MAX 8
  24. /* Color Pattern */
  25. #define CAM_ISP_PATTERN_BAYER_RGRGRG 0
  26. #define CAM_ISP_PATTERN_BAYER_GRGRGR 1
  27. #define CAM_ISP_PATTERN_BAYER_BGBGBG 2
  28. #define CAM_ISP_PATTERN_BAYER_GBGBGB 3
  29. #define CAM_ISP_PATTERN_YUV_YCBYCR 4
  30. #define CAM_ISP_PATTERN_YUV_YCRYCB 5
  31. #define CAM_ISP_PATTERN_YUV_CBYCRY 6
  32. #define CAM_ISP_PATTERN_YUV_CRYCBY 7
  33. #define CAM_ISP_PATTERN_MAX 8
  34. /* Usage Type */
  35. #define CAM_ISP_RES_USAGE_SINGLE 0
  36. #define CAM_ISP_RES_USAGE_DUAL 1
  37. #define CAM_ISP_RES_USAGE_MAX 2
  38. /* Resource ID */
  39. #define CAM_ISP_RES_ID_PORT 0
  40. #define CAM_ISP_RES_ID_CLK 1
  41. #define CAM_ISP_RES_ID_MAX 2
  42. /* Resource Type - Type of resource for the resource id
  43. * defined in cam_isp_vfe.h, cam_isp_ife.h
  44. */
  45. /* Lane Type in input resource for Port */
  46. #define CAM_ISP_LANE_TYPE_DPHY 0
  47. #define CAM_ISP_LANE_TYPE_CPHY 1
  48. #define CAM_ISP_LANE_TYPE_MAX 2
  49. /* ISP Resurce Composite Group ID */
  50. #define CAM_ISP_RES_COMP_GROUP_NONE 0
  51. #define CAM_ISP_RES_COMP_GROUP_ID_0 1
  52. #define CAM_ISP_RES_COMP_GROUP_ID_1 2
  53. #define CAM_ISP_RES_COMP_GROUP_ID_2 3
  54. #define CAM_ISP_RES_COMP_GROUP_ID_3 4
  55. #define CAM_ISP_RES_COMP_GROUP_ID_4 5
  56. #define CAM_ISP_RES_COMP_GROUP_ID_5 6
  57. #define CAM_ISP_RES_COMP_GROUP_ID_MAX 6
  58. /* ISP packet opcode for ISP */
  59. #define CAM_ISP_PACKET_OP_BASE 0
  60. #define CAM_ISP_PACKET_INIT_DEV 1
  61. #define CAM_ISP_PACKET_UPDATE_DEV 2
  62. #define CAM_ISP_PACKET_OP_MAX 3
  63. /* ISP packet meta_data type for command buffer */
  64. #define CAM_ISP_PACKET_META_BASE 0
  65. #define CAM_ISP_PACKET_META_LEFT 1
  66. #define CAM_ISP_PACKET_META_RIGHT 2
  67. #define CAM_ISP_PACKET_META_COMMON 3
  68. #define CAM_ISP_PACKET_META_DMI_LEFT 4
  69. #define CAM_ISP_PACKET_META_DMI_RIGHT 5
  70. #define CAM_ISP_PACKET_META_DMI_COMMON 6
  71. #define CAM_ISP_PACKET_META_CLOCK 7
  72. #define CAM_ISP_PACKET_META_CSID 8
  73. #define CAM_ISP_PACKET_META_DUAL_CONFIG 9
  74. #define CAM_ISP_PACKET_META_GENERIC_BLOB_LEFT 10
  75. #define CAM_ISP_PACKET_META_GENERIC_BLOB_RIGHT 11
  76. #define CAM_ISP_PACKET_META_GENERIC_BLOB_COMMON 12
  77. #define CAM_ISP_PACKET_META_REG_DUMP_PER_REQUEST 13
  78. #define CAM_ISP_PACKET_META_REG_DUMP_ON_FLUSH 14
  79. #define CAM_ISP_PACKET_META_REG_DUMP_ON_ERROR 15
  80. #define CAM_ISP_PACKET_META_CSID_LEFT 16
  81. #define CAM_ISP_PACKET_META_CSID_RIGHT 17
  82. #define CAM_ISP_PACKET_META_CSID_COMMON 18
  83. /* SFE packet meta_data type for command buffer */
  84. #define CAM_ISP_SFE_PACKET_META_LEFT 0x15
  85. #define CAM_ISP_SFE_PACKET_META_RIGHT 0x16
  86. #define CAM_ISP_SFE_PACKET_META_COMMON 0x17
  87. #define CAM_ISP_SFE_PACKET_META_DUAL_CONFIG 0x18
  88. /* DSP mode */
  89. #define CAM_ISP_DSP_MODE_NONE 0
  90. #define CAM_ISP_DSP_MODE_ONE_WAY 1
  91. #define CAM_ISP_DSP_MODE_ROUND 2
  92. /* ISP Generic Cmd Buffer Blob types */
  93. #define CAM_ISP_GENERIC_BLOB_TYPE_HFR_CONFIG 0
  94. #define CAM_ISP_GENERIC_BLOB_TYPE_CLOCK_CONFIG 1
  95. #define CAM_ISP_GENERIC_BLOB_TYPE_BW_CONFIG 2
  96. #define CAM_ISP_GENERIC_BLOB_TYPE_UBWC_CONFIG 3
  97. #define CAM_ISP_GENERIC_BLOB_TYPE_CSID_CLOCK_CONFIG 4
  98. #define CAM_ISP_GENERIC_BLOB_TYPE_FE_CONFIG 5
  99. #define CAM_ISP_GENERIC_BLOB_TYPE_UBWC_CONFIG_V2 6
  100. #define CAM_ISP_GENERIC_BLOB_TYPE_IFE_CORE_CONFIG 7
  101. #define CAM_ISP_GENERIC_BLOB_TYPE_VFE_OUT_CONFIG 8
  102. #define CAM_ISP_GENERIC_BLOB_TYPE_BW_CONFIG_V2 9
  103. #define CAM_ISP_GENERIC_BLOB_TYPE_SENSOR_DIMENSION_CONFIG 11
  104. #define CAM_ISP_GENERIC_BLOB_TYPE_CSID_QCFA_CONFIG 12
  105. #define CAM_ISP_GENERIC_BLOB_TYPE_SENSOR_BLANKING_CONFIG 13
  106. #define CAM_ISP_GENERIC_BLOB_TYPE_TPG_CORE_CONFIG 14
  107. #define CAM_ISP_GENERIC_BLOB_TYPE_DYNAMIC_MODE_SWITCH 15
  108. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_CLOCK_CONFIG 21
  109. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_CORE_CONFIG 22
  110. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_OUT_CONFIG 23
  111. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_HFR_CONFIG 24
  112. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_FE_CONFIG 25
  113. #define CAM_ISP_GENERIC_BLOB_TYPE_SFE_SCRATCH_BUF_CFG 26
  114. #define CAM_ISP_VC_DT_CFG 4
  115. #define CAM_ISP_IFE0_HW 0x1
  116. #define CAM_ISP_IFE1_HW 0x2
  117. #define CAM_ISP_IFE0_LITE_HW 0x4
  118. #define CAM_ISP_IFE1_LITE_HW 0x8
  119. #define CAM_ISP_IFE2_LITE_HW 0x10
  120. #define CAM_ISP_IFE3_LITE_HW 0x20
  121. #define CAM_ISP_IFE4_LITE_HW 0x40
  122. #define CAM_ISP_IFE2_HW 0x100
  123. #define CAM_ISP_SFE0_HW 0x1000
  124. #define CAM_ISP_SFE1_HW 0x2000
  125. #define CAM_ISP_PXL_PATH 0x1
  126. #define CAM_ISP_PPP_PATH 0x2
  127. #define CAM_ISP_LCR_PATH 0x4
  128. #define CAM_ISP_RDI0_PATH 0x8
  129. #define CAM_ISP_RDI1_PATH 0x10
  130. #define CAM_ISP_RDI2_PATH 0x20
  131. #define CAM_ISP_RDI3_PATH 0x40
  132. /* Per Path Usage Data */
  133. #define CAM_ISP_USAGE_INVALID 0
  134. #define CAM_ISP_USAGE_LEFT_PX 1
  135. #define CAM_ISP_USAGE_RIGHT_PX 2
  136. #define CAM_ISP_USAGE_RDI 3
  137. #define CAM_ISP_USAGE_SFE_LEFT 4
  138. #define CAM_ISP_USAGE_SFE_RIGHT 5
  139. #define CAM_ISP_USAGE_SFE_RDI 6
  140. /* Acquire with custom hw */
  141. #define CAM_ISP_ACQ_CUSTOM_NONE 0
  142. #define CAM_ISP_ACQ_CUSTOM_PRIMARY 1
  143. #define CAM_ISP_ACQ_CUSTOM_SECONDARY 2
  144. #define CAM_IFE_CSID_RDI_MAX 5
  145. /* Feature Flag indicators */
  146. #define CAM_ISP_PARAM_FETCH_SECURITY_MODE BIT(0)
  147. #define CAM_ISP_CAN_USE_LITE_MODE BIT(1)
  148. #define CAM_ISP_DYNAMIC_SENOR_SWITCH_EN BIT(2)
  149. #define CAM_ISP_SFE_BINNED_EPOCH_CFG_ENABLE BIT(3)
  150. #define CAM_ISP_EPD_SUPPORT BIT(4)
  151. /* ISP core cfg flag params */
  152. #define CAM_ISP_PARAM_CORE_CFG_HDR_MUX_SEL BIT(0)
  153. #define CAM_ISP_PARAM_CORE_CFG_PP_FORMAT BIT(16)
  154. /* Query devices */
  155. /**
  156. * struct cam_isp_dev_cap_info - A cap info for particular hw type
  157. *
  158. * @hw_type: Hardware type for the cap info
  159. * @num_hw: Number of HW of type @hw_type
  160. * @hw_version: Hardware version
  161. *
  162. */
  163. struct cam_isp_dev_cap_info {
  164. __u32 hw_type;
  165. __u32 num_hw;
  166. struct cam_hw_version hw_version;
  167. };
  168. /**
  169. * struct cam_isp_query_cap_cmd - ISP query device capability payload
  170. *
  171. * @device_iommu: returned iommu handles for device
  172. * @cdm_iommu: returned iommu handles for cdm
  173. * @num_dev: returned number of device capabilities
  174. * @reserved: reserved field for alignment
  175. * @dev_caps: returned device capability array
  176. *
  177. */
  178. struct cam_isp_query_cap_cmd {
  179. struct cam_iommu_handle device_iommu;
  180. struct cam_iommu_handle cdm_iommu;
  181. __s32 num_dev;
  182. __u32 reserved;
  183. struct cam_isp_dev_cap_info dev_caps[CAM_ISP_HW_MAX];
  184. };
  185. /* Acquire Device */
  186. /**
  187. * struct cam_isp_out_port_info - An output port resource info
  188. *
  189. * @res_type: output resource type defined in file
  190. * cam_isp_vfe.h or cam_isp_ife.h
  191. * @format: output format of the resource
  192. * @wdith: output width in pixels
  193. * @height: output height in lines
  194. * @comp_grp_id: composite group id for the resource.
  195. * @split_point: split point in pixels for the dual VFE.
  196. * @secure_mode: flag to tell if output should be run in secure
  197. * mode or not. See cam_defs.h for definition
  198. * @reserved: reserved field for alignment
  199. *
  200. */
  201. struct cam_isp_out_port_info {
  202. __u32 res_type;
  203. __u32 format;
  204. __u32 width;
  205. __u32 height;
  206. __u32 comp_grp_id;
  207. __u32 split_point;
  208. __u32 secure_mode;
  209. __u32 reserved;
  210. };
  211. /**
  212. * struct cam_isp_out_port_info_v2 - An output port resource info
  213. *
  214. * @res_type: output resource type defined in file
  215. * cam_isp_vfe.h or cam_isp_ife.h
  216. * @format: output format of the resource
  217. * @wdith: output width in pixels
  218. * @height: output height in lines
  219. * @comp_grp_id: composite group id for the resource.
  220. * @split_point: split point in pixels for the dual VFE.
  221. * @secure_mode: flag to tell if output should be run in secure
  222. * mode or not. See cam_defs.h for definition
  223. * @wm_mode: WM mode
  224. * @out_port_res1: Output reserved field
  225. * @out_port_res2: Output reserved field
  226. *
  227. */
  228. struct cam_isp_out_port_info_v2 {
  229. __u32 res_type;
  230. __u32 format;
  231. __u32 width;
  232. __u32 height;
  233. __u32 comp_grp_id;
  234. __u32 split_point;
  235. __u32 secure_mode;
  236. __u32 wm_mode;
  237. __u32 out_port_res1;
  238. __u32 out_port_res2;
  239. };
  240. /**
  241. * struct cam_isp_in_port_info - An input port resource info
  242. *
  243. * @res_type: input resource type define in file
  244. * cam_isp_vfe.h or cam_isp_ife.h
  245. * @lane_type: lane type: c-phy or d-phy.
  246. * @lane_num: active lane number
  247. * @lane_cfg: lane configurations: 4 bits per lane
  248. * @vc: input virtual channel number
  249. * @dt: input data type number
  250. * @format: input format
  251. * @test_pattern: test pattern for the testgen
  252. * @usage_type: whether dual vfe is required
  253. * @left_start: left input start offset in pixels
  254. * @left_stop: left input stop offset in pixels
  255. * @left_width: left input width in pixels
  256. * @right_start: right input start offset in pixels.
  257. * Only for Dual VFE
  258. * @right_stop: right input stop offset in pixels.
  259. * Only for Dual VFE
  260. * @right_width: right input width in pixels.
  261. * Only for dual VFE
  262. * @line_start: top of the line number
  263. * @line_stop: bottome of the line number
  264. * @height: input height in lines
  265. * @pixel_clk; sensor output clock
  266. * @batch_size: batch size for HFR mode
  267. * @dsp_mode: DSP stream mode (Defines as CAM_ISP_DSP_MODE_*)
  268. * @hbi_cnt: HBI count for the camif input
  269. * @reserved: Reserved field for alignment
  270. * @num_out_res: number of the output resource associated
  271. * @data: payload that contains the output resources
  272. *
  273. */
  274. struct cam_isp_in_port_info {
  275. __u32 res_type;
  276. __u32 lane_type;
  277. __u32 lane_num;
  278. __u32 lane_cfg;
  279. __u32 vc;
  280. __u32 dt;
  281. __u32 format;
  282. __u32 test_pattern;
  283. __u32 usage_type;
  284. __u32 left_start;
  285. __u32 left_stop;
  286. __u32 left_width;
  287. __u32 right_start;
  288. __u32 right_stop;
  289. __u32 right_width;
  290. __u32 line_start;
  291. __u32 line_stop;
  292. __u32 height;
  293. __u32 pixel_clk;
  294. __u32 batch_size;
  295. __u32 dsp_mode;
  296. __u32 hbi_cnt;
  297. __u32 reserved;
  298. __u32 num_out_res;
  299. struct cam_isp_out_port_info data[1];
  300. };
  301. /**
  302. * struct cam_isp_in_port_info_v2 - An input port resource info
  303. *
  304. * @res_type: input resource type define in file
  305. * cam_isp_vfe.h or cam_isp_ife.h
  306. * @lane_type: lane type: c-phy or d-phy.
  307. * @lane_num: active lane number
  308. * @lane_cfg: lane configurations: 4 bits per lane
  309. * @vc: input virtual channel number
  310. * @dt: input data type number
  311. * @num_valid_vc_dt: valid vc and dt in array
  312. * @format: input format
  313. * @test_pattern: test pattern for the testgen
  314. * @usage_type: whether dual vfe is required
  315. * @left_start: left input start offset in pixels
  316. * @left_stop: left input stop offset in pixels
  317. * @left_width: left input width in pixels
  318. * @right_start: right input start offset in pixels.
  319. * Only for Dual VFE
  320. * @right_stop: right input stop offset in pixels.
  321. * only for Dual VFE
  322. * @right_width: right input width in pixels.
  323. * only for dual VFE
  324. * @line_start: top of the line number
  325. * @line_stop: bottome of the line number
  326. * @height: input height in lines
  327. * @pixel_clk; sensor output clock
  328. * @batch_size: batch size for HFR mode
  329. * @dsp_mode: DSP stream mode (Defines as CAM_ISP_DSP_MODE_*)
  330. * @hbi_cnt: HBI count for the camif input
  331. * @cust_node: if any custom HW block is present before IFE
  332. * @num_out_res: number of the output resource associated
  333. * @horizontal_bin: Horizontal Binning info
  334. * @qcfa_bin: Quadra Binning info
  335. * @sfe_in_path_type: SFE input path type
  336. * 0:15 - refer to cam_isp_sfe.h for SFE paths
  337. * 16:31 - Corresponding IFE i/p path type
  338. * Example:((CAM_ISP_PXL_PATH << 16) |
  339. * CAM_ISP_SFE_INLINE_PIX)
  340. * This will acquire SFE inline IPP and IFE IPP
  341. * PPP is an exception CSID PPP -> IFE PPP
  342. * @feature_flag: See the macros defined under feature flag above
  343. * @ife_res_1: payload for future use.
  344. * @ife_res_2: payload for future use.
  345. * @data: payload that contains the output resources
  346. *
  347. */
  348. struct cam_isp_in_port_info_v2 {
  349. __u32 res_type;
  350. __u32 lane_type;
  351. __u32 lane_num;
  352. __u32 lane_cfg;
  353. __u32 vc[CAM_ISP_VC_DT_CFG];
  354. __u32 dt[CAM_ISP_VC_DT_CFG];
  355. __u32 num_valid_vc_dt;
  356. __u32 format;
  357. __u32 test_pattern;
  358. __u32 usage_type;
  359. __u32 left_start;
  360. __u32 left_stop;
  361. __u32 left_width;
  362. __u32 right_start;
  363. __u32 right_stop;
  364. __u32 right_width;
  365. __u32 line_start;
  366. __u32 line_stop;
  367. __u32 height;
  368. __u32 pixel_clk;
  369. __u32 batch_size;
  370. __u32 dsp_mode;
  371. __u32 hbi_cnt;
  372. __u32 cust_node;
  373. __u32 num_out_res;
  374. __u32 offline_mode;
  375. __u32 horizontal_bin;
  376. __u32 qcfa_bin;
  377. __u32 sfe_in_path_type;
  378. __u32 feature_flag;
  379. __u32 ife_res_1;
  380. __u32 ife_res_2;
  381. struct cam_isp_out_port_info_v2 data[1];
  382. };
  383. /**
  384. * struct cam_isp_resource - A resource bundle
  385. *
  386. * @resoruce_id: resource id for the resource bundle
  387. * @length: length of the while resource blob
  388. * @handle_type: type of the resource handle
  389. * @reserved: reserved field for alignment
  390. * @res_hdl: resource handle that points to the
  391. * resource array;
  392. *
  393. */
  394. struct cam_isp_resource {
  395. __u32 resource_id;
  396. __u32 length;
  397. __u32 handle_type;
  398. __u32 reserved;
  399. __u64 res_hdl;
  400. };
  401. /**
  402. * struct cam_isp_port_hfr_config - HFR configuration for this port
  403. *
  404. * @resource_type: Resource type
  405. * @subsample_pattern: Subsample pattern. Used in HFR mode. It
  406. * should be consistent with batchSize and
  407. * CAMIF programming.
  408. * @subsample_period: Subsample period. Used in HFR mode. It
  409. * should be consistent with batchSize and
  410. * CAMIF programming.
  411. * @framedrop_pattern: Framedrop pattern
  412. * @framedrop_period: Framedrop period
  413. * @reserved: Reserved for alignment
  414. */
  415. struct cam_isp_port_hfr_config {
  416. __u32 resource_type;
  417. __u32 subsample_pattern;
  418. __u32 subsample_period;
  419. __u32 framedrop_pattern;
  420. __u32 framedrop_period;
  421. __u32 reserved;
  422. } __attribute__((packed));
  423. /**
  424. * struct cam_isp_resource_hfr_config - Resource HFR configuration
  425. *
  426. * @num_ports: Number of ports
  427. * @reserved: Reserved for alignment
  428. * @port_hfr_config: HFR configuration for each IO port
  429. */
  430. struct cam_isp_resource_hfr_config {
  431. __u32 num_ports;
  432. __u32 reserved;
  433. struct cam_isp_port_hfr_config port_hfr_config[1];
  434. } __attribute__((packed));
  435. /**
  436. * struct cam_isp_dual_split_params - dual isp spilt parameters
  437. *
  438. * @split_point: Split point information x, where (0 < x < width)
  439. * left ISP's input ends at x + righ padding and
  440. * Right ISP's input starts at x - left padding
  441. * @right_padding: Padding added past the split point for left
  442. * ISP's input
  443. * @left_padding: Padding added before split point for right
  444. * ISP's input
  445. * @reserved: Reserved filed for alignment
  446. *
  447. */
  448. struct cam_isp_dual_split_params {
  449. __u32 split_point;
  450. __u32 right_padding;
  451. __u32 left_padding;
  452. __u32 reserved;
  453. };
  454. /**
  455. * struct cam_isp_dual_stripe_config - stripe config per bus client
  456. *
  457. * @offset: Start horizontal offset relative to
  458. * output buffer
  459. * In UBWC mode, this value indicates the H_INIT
  460. * value in pixel
  461. * @width: Width of the stripe in bytes
  462. * @tileconfig Ubwc meta tile config. Contain the partial
  463. * tile info
  464. * @port_id: port id of ISP output
  465. *
  466. */
  467. struct cam_isp_dual_stripe_config {
  468. __u32 offset;
  469. __u32 width;
  470. __u32 tileconfig;
  471. __u32 port_id;
  472. };
  473. /**
  474. * struct cam_isp_dual_config - dual isp configuration
  475. *
  476. * @num_ports Number of isp output ports
  477. * @reserved Reserved field for alignment
  478. * @split_params: Inpput split parameters
  479. * @stripes: Stripe information
  480. *
  481. */
  482. struct cam_isp_dual_config {
  483. __u32 num_ports;
  484. __u32 reserved;
  485. struct cam_isp_dual_split_params split_params;
  486. struct cam_isp_dual_stripe_config stripes[1];
  487. } __attribute__((packed));
  488. /**
  489. * struct cam_isp_clock_config - Clock configuration
  490. *
  491. * @usage_type: Usage type (Single/Dual)
  492. * @num_rdi: Number of RDI votes
  493. * @left_pix_hz: Pixel Clock for Left ISP
  494. * @right_pix_hz: Pixel Clock for Right ISP, valid only if Dual
  495. * @rdi_hz: RDI Clock. ISP clock will be max of RDI and
  496. * PIX clocks. For a particular context which ISP
  497. * HW the RDI is allocated to is not known to UMD.
  498. * Hence pass the clock and let KMD decide.
  499. */
  500. struct cam_isp_clock_config {
  501. __u32 usage_type;
  502. __u32 num_rdi;
  503. __u64 left_pix_hz;
  504. __u64 right_pix_hz;
  505. __u64 rdi_hz[1];
  506. } __attribute__((packed));
  507. /**
  508. * struct cam_isp_csid_clock_config - CSID clock configuration
  509. *
  510. * @csid_clock CSID clock
  511. */
  512. struct cam_isp_csid_clock_config {
  513. __u64 csid_clock;
  514. } __attribute__((packed));
  515. /**
  516. * struct cam_isp_csid_qcfa_config - CSID qcfa binning support configuration
  517. *
  518. * @csid_binning CSID binning
  519. */
  520. struct cam_isp_csid_qcfa_config {
  521. __u32 csid_binning;
  522. } __attribute__((packed));
  523. /**
  524. * struct cam_isp_bw_vote - Bandwidth vote information
  525. *
  526. * @resource_id: Resource ID
  527. * @reserved: Reserved field for alignment
  528. * @cam_bw_bps: Bandwidth vote for CAMNOC
  529. * @ext_bw_bps: Bandwidth vote for path-to-DDR after CAMNOC
  530. */
  531. struct cam_isp_bw_vote {
  532. __u32 resource_id;
  533. __u32 reserved;
  534. __u64 cam_bw_bps;
  535. __u64 ext_bw_bps;
  536. } __attribute__((packed));
  537. /**
  538. * struct cam_isp_bw_config - Bandwidth configuration
  539. *
  540. * @usage_type: Usage type (Single/Dual)
  541. * @num_rdi: Number of RDI votes
  542. * @left_pix_vote: Bandwidth vote for left ISP
  543. * @right_pix_vote: Bandwidth vote for right ISP
  544. * @rdi_vote: RDI bandwidth requirements
  545. */
  546. struct cam_isp_bw_config {
  547. __u32 usage_type;
  548. __u32 num_rdi;
  549. struct cam_isp_bw_vote left_pix_vote;
  550. struct cam_isp_bw_vote right_pix_vote;
  551. struct cam_isp_bw_vote rdi_vote[1];
  552. } __attribute__((packed));
  553. /**
  554. * struct cam_isp_bw_config_v2 - Bandwidth configuration
  555. *
  556. * @usage_type: Usage type (Single/Dual)
  557. * @num_paths: Number of axi data paths
  558. * @axi_path Per path vote info
  559. */
  560. struct cam_isp_bw_config_v2 {
  561. __u32 usage_type;
  562. __u32 num_paths;
  563. struct cam_axi_per_path_bw_vote axi_path[1];
  564. } __attribute__((packed));
  565. /**
  566. * struct cam_fe_config - Fetch Engine configuration
  567. *
  568. * @version: fetch engine veriosn
  569. * @min_vbi: require min vbi
  570. * @fs_mode: indicates if fs mode enabled
  571. * @fs_line_sync_en: frame level sync or line level
  572. * sync for fetch engine
  573. * @hbi_count: hbi count
  574. * @fs_sync_enable: indicates if fetch engine working
  575. * wokring in sync with write engine
  576. * @go_cmd_sel: softwrae go_cmd or hw go_cmd
  577. * @client_enable: enable read engine
  578. * @source_addr: adrress of buffer to read from
  579. * @width: buffer width
  580. * @height: buffer height
  581. * @stride: buffer stride (here equal to width)
  582. * @format: format of image in buffer
  583. * @unpacker_cfg: unpacker config type
  584. * @latency_buf_size: latency buffer for read engine
  585. */
  586. struct cam_fe_config {
  587. __u64 version;
  588. __u32 min_vbi;
  589. __u32 fs_mode;
  590. __u32 fs_line_sync_en;
  591. __u32 hbi_count;
  592. __u32 fs_sync_enable;
  593. __u32 go_cmd_sel;
  594. __u32 client_enable;
  595. __u32 source_addr;
  596. __u32 width;
  597. __u32 height;
  598. __u32 stride;
  599. __u32 format;
  600. __u32 unpacker_cfg;
  601. __u32 latency_buf_size;
  602. } __attribute__((packed));
  603. /**
  604. * struct cam_isp_sensor_path_dimension
  605. *
  606. * @width expected width
  607. * @height expected height
  608. * @measure_enabled flag to indicate if pixel measurement is to be enabled
  609. */
  610. struct cam_isp_sensor_dimension {
  611. __u32 width;
  612. __u32 height;
  613. __u32 measure_enabled;
  614. } __attribute__((packed));
  615. /**
  616. * struct cam_isp_sensor_blanking_config
  617. *
  618. * @hbi HBI value
  619. * @vbi VBI value
  620. */
  621. struct cam_isp_sensor_blanking_config {
  622. __u32 hbi;
  623. __u32 vbi;
  624. } __attribute__((packed));
  625. /**
  626. * struct cam_isp_sensor_config - Sensor Dimension configuration
  627. *
  628. * @ppp_path: expected ppp path configuration
  629. * @ipp_path: expected ipp path configuration
  630. * @rdi_path: expected rdi path configuration
  631. * @hbi: HBI value
  632. * @vbi: VBI value
  633. */
  634. struct cam_isp_sensor_config {
  635. struct cam_isp_sensor_dimension ppp_path;
  636. struct cam_isp_sensor_dimension ipp_path;
  637. struct cam_isp_sensor_dimension rdi_path[CAM_IFE_CSID_RDI_MAX];
  638. __u32 hbi;
  639. __u32 vbi;
  640. } __attribute__((packed));
  641. /**
  642. * struct cam_isp_core_config - ISP core registers configuration
  643. *
  644. * @version: Version info
  645. * @vid_ds16_r2pd: Enables Y and C merging PD output for video DS16
  646. * @vid_ds4_r2pd: Enables Y and C merging PD output for video DS4
  647. * @disp_ds16_r2pd: Enables Y and C merging PD output for disp DS16
  648. * @disp_ds4_r2pd: Enables Y and C merging PD output for disp DS4
  649. * @dsp_streaming_tap_point: This selects source for DSP streaming interface
  650. * @ihist_src_sel: Selects input for IHIST module
  651. * @hdr_be_src_sel: Selects input for HDR BE module
  652. * @hdr_bhist_src_sel: Selects input for HDR BHIST module
  653. * @input_mux_sel_pdaf: Selects input for PDAF
  654. * @input_mux_sel_pp: Selects input for Pixel Pipe
  655. * @core_cfg_flag: Core config flag to set HDR mux/PP
  656. * input format type
  657. */
  658. struct cam_isp_core_config {
  659. __u32 version;
  660. __u32 vid_ds16_r2pd;
  661. __u32 vid_ds4_r2pd;
  662. __u32 disp_ds16_r2pd;
  663. __u32 disp_ds4_r2pd;
  664. __u32 dsp_streaming_tap_point;
  665. __u32 ihist_src_sel;
  666. __u32 hdr_be_src_sel;
  667. __u32 hdr_bhist_src_sel;
  668. __u32 input_mux_sel_pdaf;
  669. __u32 input_mux_sel_pp;
  670. __u32 core_cfg_flag;
  671. } __attribute__((packed));
  672. /**
  673. * struct cam_isp_sfe_core_config - SFE core registers configuration
  674. *
  675. * @version : Version info
  676. * @mode_sel : Selects core for sHDR/non-sHDR mode
  677. * @ops_mode_cfg : Selects core if is inline/offline mode
  678. * @fs_mode_cfg : Selects output in fast shutter mode
  679. * @sfe_params : SFE params for future use
  680. */
  681. struct cam_isp_sfe_core_config {
  682. __u32 version;
  683. __u32 mode_sel;
  684. __u32 ops_mode_cfg;
  685. __u32 fs_mode_cfg;
  686. __u32 sfe_params[6];
  687. } __attribute__((packed));
  688. /**
  689. * struct cam_isp_sfe_scratch_buf_info - Scratch buf info
  690. *
  691. * @mem_handle : Scratch buffer handle
  692. * @offset : Offset to the buffer
  693. * @width : Width in pixels
  694. * @height : Height in pixels
  695. * @stride : Stride in pixels
  696. * @slice_height : Slice height in lines
  697. * @resource_type : rsrc type
  698. * @scratch_buf_params : for future use
  699. */
  700. struct cam_isp_sfe_scratch_buf_info {
  701. __s32 mem_handle;
  702. __u32 offset;
  703. __u32 width;
  704. __u32 height;
  705. __u32 stride;
  706. __u32 slice_height;
  707. __u32 resource_type;
  708. __u32 scratch_buf_params[5];
  709. };
  710. /**
  711. * struct cam_isp_sfe_init_scratch_buf_config - SFE init buffer cfg
  712. * Provides scratch buffer info for SFE ports
  713. * as part of INIT packet
  714. *
  715. * @num_ports : Number of ports
  716. * @reserved : reserved
  717. * @port_scratch_cfg : scratch buffer info
  718. */
  719. struct cam_isp_sfe_init_scratch_buf_config {
  720. __u32 num_ports;
  721. __u32 reserved;
  722. struct cam_isp_sfe_scratch_buf_info port_scratch_cfg[1];
  723. };
  724. /**
  725. * struct cam_isp_tpg_core_config - TPG core registers configuration
  726. *
  727. * @version : Version info
  728. * @vc_dt_pattern_id : TPG pattern - SparsePD, sHDR etc.
  729. * @qcfa_en : Selects qcfa in color bar
  730. * @pix_pattern : Pix pattern color bar cfg
  731. * @tpg_params : TPG params for future use
  732. */
  733. struct cam_isp_tpg_core_config {
  734. __u32 version;
  735. __u32 vc_dt_pattern_id;
  736. __u32 qcfa_en;
  737. __u32 pix_pattern;
  738. __u32 tpg_params[6];
  739. } __attribute__((packed));
  740. /**
  741. * struct cam_isp_acquire_hw_info - ISP acquire HW params
  742. *
  743. * @common_info_version : Version of common info struct used
  744. * @common_info_size : Size of common info struct used
  745. * @common_info_offset : Offset of common info from start of data
  746. * @num_inputs : Number of inputs
  747. * @input_info_version : Version of input info struct used
  748. * @input_info_size : Size of input info struct used
  749. * @input_info_offset : Offset of input info from start of data
  750. * @data : Start of data region
  751. */
  752. struct cam_isp_acquire_hw_info {
  753. __u16 common_info_version;
  754. __u16 common_info_size;
  755. __u32 common_info_offset;
  756. __u32 num_inputs;
  757. __u32 input_info_version;
  758. __u32 input_info_size;
  759. __u32 input_info_offset;
  760. __u64 data;
  761. };
  762. /**
  763. * struct cam_isp_vfe_wm_config - VFE write master config per port
  764. *
  765. * @port_type : Unique ID of output port
  766. * @wm_mode : Write master mode
  767. * 0x0 - Line based mode
  768. * 0x1 - Frame based mode
  769. * 0x2 - Index based mode, valid for BAF only
  770. * @h_init : Horizontal starting coordinate in pixels. Must be a
  771. * multiple of 3 for TP10 format
  772. * @height : Height in pixels
  773. * @width : Width in pixels
  774. * @virtual_frame_en : Enabling virtual frame will prevent actual request from
  775. * being sent to NOC
  776. * @stride : Write master stride
  777. * @offset : Write master offset
  778. * @addr_reuse_en : Enabling addr-reuse will write output to the same addr
  779. * after the last addr that was read from FIFO.
  780. * @reserved_2 : Reserved field for Write master config
  781. * @reserved_3 : Reserved field for Write master config
  782. * @reserved_4 : Reserved field for Write master config
  783. */
  784. struct cam_isp_vfe_wm_config {
  785. __u32 port_type;
  786. __u32 wm_mode;
  787. __u32 h_init;
  788. __u32 height;
  789. __u32 width;
  790. __u32 virtual_frame_en;
  791. __u32 stride;
  792. __u32 offset;
  793. __u32 addr_reuse_en;
  794. __u32 reserved_2;
  795. __u32 reserved_3;
  796. __u32 reserved_4;
  797. };
  798. /**
  799. * struct cam_isp_vfe_out_config - VFE write master config
  800. *
  801. * @num_ports : Number of ports
  802. * @reserved : Reserved field
  803. * @wm_config : VFE out config
  804. */
  805. struct cam_isp_vfe_out_config {
  806. __u32 num_ports;
  807. __u32 reserved;
  808. struct cam_isp_vfe_wm_config wm_config[1];
  809. };
  810. /**
  811. * struct cam_isp_mode_switch_info - Dynamic mode switch info
  812. *
  813. * @mup : MUP for incoming VC of next frame
  814. * @num_expoures : Number of exposures
  815. * @reserved : Reserved
  816. */
  817. struct cam_isp_mode_switch_info{
  818. __u32 mup;
  819. __u32 num_expoures;
  820. __u32 reserved;
  821. } __attribute__((packed));
  822. #define CAM_ISP_ACQUIRE_COMMON_VER0 0x1000
  823. #define CAM_ISP_ACQUIRE_COMMON_SIZE_VER0 0x0
  824. #define CAM_ISP_ACQUIRE_INPUT_VER0 0x2000
  825. #define CAM_ISP_ACQUIRE_INPUT_SIZE_VER0 sizeof(struct cam_isp_in_port_info)
  826. #define CAM_ISP_ACQUIRE_OUT_VER0 0x3000
  827. #define CAM_ISP_ACQUIRE_OUT_SIZE_VER0 sizeof(struct cam_isp_out_port_info)
  828. #endif /* __UAPI_CAM_ISP_H__ */