stfmod_isp_dc.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /**
  2. ******************************************************************************
  3. * @file stfmod_isp_dc.h
  4. * @author StarFive Isp Team
  5. * @version V1.0
  6. * @date 05/26/2020
  7. * @brief
  8. ******************************************************************************
  9. * @copy
  10. *
  11. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * Copyright (C) 2019 - 2022 StarFive Technology Co., Ltd.
  19. */
  20. #ifndef __STFMOD_ISP_DC_H__
  21. #define __STFMOD_ISP_DC_H__
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #include "stf_include.h"
  26. #include "ci/ci_api_structs.h"
  27. #include "registers/stf_isp_dc_rdma.h"
  28. #include "stflib_isp_pipeline.h"
  29. /* defective pixel correction module parameters structure */
  30. //-----------------------------------------------------------------------------
  31. // Define initial values
  32. #define ISP_DEF_DC_BUFFER_ADDRESS (0x68400000) /** Point to defective pixel correction parameters buffer. */
  33. #if 0
  34. #define ISP_DEF_DC_FILENAME "dc_data.bin" /** DC calibration data filename. */
  35. #else
  36. #define ISP_DEF_DC_FILENAME "" /** DC calibration data filename. */
  37. #endif
  38. #define ISP_DEF_DC_AXI_ID (0) /** ID of AXI bus for DC buffer read. */
  39. #pragma pack(push, 1)
  40. typedef enum _EN_DC_UPDATE {
  41. EN_DC_UPDATE_NONE = 0x00,
  42. EN_DC_UPDATE_AXI_ID = 0x01,
  43. EN_DC_UPDATE_DC_BUF = 0x02,
  44. EN_DC_UPDATE_ALL_WO_BUF_INFO = (EN_DC_UPDATE_AXI_ID),
  45. EN_DC_UPDATE_ALL = (EN_DC_UPDATE_AXI_ID
  46. | EN_DC_UPDATE_DC_BUF
  47. ),
  48. } EN_DC_UPDATE, *PEN_DC_UPDATE;
  49. typedef union _ST_DC_CLBRT_INFO {
  50. STF_U32 u32ClbrtInfo;
  51. struct {
  52. STF_U32 u14HPos:14; /** Horizontal position */
  53. STF_U32 u2Mode:2; /** Calibration mode,
  54. * 0 : none.
  55. * 1 : left mode.
  56. * 2 : right mode.
  57. * 3 : average mode.
  58. */
  59. STF_U32 u14VPos:14; /** Vertical position */
  60. STF_U32 u2Rsvd30:2; /** Reserved. */
  61. };
  62. } ST_DC_CLBRT_INFO, *PST_DC_CLBRT_INFO;
  63. typedef struct _ST_MOD_DC_SETTING {
  64. //-------------------------------------------------------------------------
  65. // This section parameters value is assign from setting file.
  66. STF_BOOL8 bEnable; /** Enable/Disable DC module. */
  67. STF_CHAR szDcFilename[256]; /** Filename of parameters of defective pixel correction. */
  68. } ST_MOD_DC_SETTING, *PST_MOD_DC_SETTING;
  69. typedef struct _ST_MOD_DC_INFO {
  70. STF_U8 u8AxiId; /** ID of AXI bus for DC buffer read. */
  71. } ST_MOD_DC_INFO, *PST_MOD_DC_INFO;
  72. typedef struct _ST_DC_PARAM {
  73. ST_MOD_DC_SETTING stSetting; /** Module DC setting file parameters. */
  74. //-------------------------------------------------------------------------
  75. // This section parameters is internal using.
  76. ST_MOD_DC_INFO stInfo; /** Module DC output information parameters. */
  77. STF_BOOL8 bSetup; /** Flag set if the module setup has been completed. */
  78. STF_BOOL8 bUpdate; /** Enable/Disable program DC module register. */
  79. STF_U32 u32UpdateRequest; /** Flag to indicate that this module update has been requested. */
  80. #if 0
  81. STF_U32 u32RetDcBufAddr; /** Hardware return defective pixel correction parameters buffer address. (Read Only) */
  82. #endif
  83. STF_U32 *pu32DcBuf; /** Defective pixel correction parameters buffer. */
  84. #if defined(VIRTUAL_IO_MAPPING)
  85. CI_MEM_PARAM stDcMem; /** Defective pixel correction parameters buffer. */
  86. #endif //VIRTUAL_IO_MAPPING
  87. } ST_DC_PARAM, *PST_DC_PARAM;
  88. #define ST_MOD_DC_SETTING_LEN (sizeof(ST_MOD_DC_SETTING))
  89. #define ST_MOD_DC_INFO_LEN (sizeof(ST_MOD_DC_INFO))
  90. #define ST_MOD_DC_GET_PARAM_LEN (ST_MOD_DC_SETTING_LEN + ST_MOD_DC_INFO_LEN)
  91. #define ST_MOD_DC_SET_PARAM_LEN (ST_MOD_DC_SETTING_LEN)
  92. //#if defined(VIRTUAL_IO_MAPPING)
  93. //#define ST_DC_PARAM_SIZE (sizeof(ST_DC_PARAM) - sizeof(STF_U32 *) - sizeof(CI_MEM_PARAM))
  94. //#else
  95. //#define ST_DC_PARAM_SIZE (sizeof(ST_DC_PARAM) - sizeof(STF_U32 *))
  96. //#endif //VIRTUAL_IO_MAPPING
  97. #define ST_DC_PARAM_SIZE (sizeof(ST_DC_PARAM))
  98. #define ST_DC_PARAM_LEN (ST_DC_PARAM_SIZE)
  99. typedef struct _ST_ISP_MOD_DC {
  100. #if defined(VIRTUAL_IO_MAPPING)
  101. STF_VOID *pPipeline; /** Pointer to Pipeline. */
  102. #endif //VIRTUAL_IO_MAPPING
  103. STF_VOID *pIspCtx; /** Pointer to ISP context. */
  104. STF_U32 u32Id; /** Module ID. */
  105. STF_CHAR szName[16]; /** Module Name. */
  106. CI_MEM_PARAM *pstDcRdmaBuf; /** DC's DMA buffer pointer for RDMA. */
  107. #if defined(SUPPORT_MULTI_ISP)
  108. ST_ISP_DC_RDMA *pstIspDcRdma; /** DC's RDMA structure pointer that include ISP index.*/
  109. #endif //SUPPORT_MULTI_ISP
  110. ST_DC_RDMA *pstDcRdma; /** DC's RDMA structure pointer.*/
  111. ST_DC_PARAM *pstDcParam; /** DC's parameters structure pointer. */
  112. STF_BOOL8 bRegistered; /** Module register in pipeline. */
  113. STF_S32 (*Init)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  114. STF_S32 (*LoadBinParam)(STF_VOID *pIspCtx, STF_U8 *pu8ParamBuf, STF_U16 u16ParamSize);
  115. STF_S32 (*LoadBinClbrt)(STF_VOID *pIspCtx);
  116. STF_S32 (*Enable)(STF_VOID *pIspCtx, STF_BOOL8 bEnable);
  117. STF_BOOL8 (*IsEnable)(STF_VOID *pIspCtx);
  118. STF_S32 (*Update)(STF_VOID *pIspCtx, STF_BOOL8 bUpdate);
  119. STF_BOOL8 (*IsUpdate)(STF_VOID *pIspCtx);
  120. STF_S32 (*Registered)(STF_VOID *pIspCtx, STF_BOOL8 bRegistered);
  121. STF_BOOL8 (*IsRegistered)(STF_VOID *pIspCtx);
  122. STF_S32 (*UpdateReg)(STF_VOID *pIspCtx);
  123. STF_S32 (*SetReg)(STF_VOID *pIspCtx);
  124. STF_S32 (*SetNext)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  125. STF_S32 (*FreeResource)(STF_VOID *pIspCtx);
  126. STF_S32 (*GetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 *pu16ParamSize);
  127. STF_S32 (*SetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 u16ParamSize);
  128. } ST_ISP_MOD_DC, *PST_ISP_MOD_DC;
  129. #pragma pack(pop)
  130. /* defective pixel correction module parameters interface */
  131. //-----------------------------------------------------------------------------
  132. extern
  133. STF_S32 STFMOD_ISP_DC_InitRdma(
  134. ST_DC_RDMA *pstDcRdma,
  135. ST_DC_PARAM *pstDcParam,
  136. STF_U32 *pNextRdma
  137. );
  138. extern
  139. STF_S32 STFMOD_ISP_DC_UpdateRdma(
  140. ST_DC_RDMA *pstDcRdma,
  141. ST_DC_PARAM *pstDcParam
  142. );
  143. extern
  144. STF_S32 STFMOD_ISP_DC_UpdateBufferAddress(
  145. ST_DC_RDMA *pstDcRdma,
  146. ST_DC_PARAM *pstDcParam
  147. );
  148. extern
  149. STF_S32 STFMOD_ISP_DC_UpdateAxiId(
  150. ST_DC_RDMA *pstDcRdma,
  151. ST_DC_PARAM *pstDcParam
  152. );
  153. extern
  154. STF_S32 STFMOD_ISP_DC_SetNextRdma(
  155. ST_DC_RDMA *pstDcRdma,
  156. STF_U32 *pNextRdma
  157. );
  158. //-----------------------------------------------------------------------------
  159. extern
  160. STF_S32 STFMOD_ISP_DC_SetEnable(
  161. ST_ISP_MOD_DC *pstModDc,
  162. STF_BOOL8 bEnable
  163. );
  164. extern
  165. STF_S32 STFMOD_ISP_DC_SetUpdate(
  166. ST_ISP_MOD_DC *pstModDc,
  167. STF_BOOL8 bUpdate
  168. );
  169. extern
  170. STF_S32 STFMOD_ISP_DC_SetDcFilename(
  171. ST_ISP_MOD_DC *pstModDc,
  172. STF_CHAR *pszDcFilename
  173. );
  174. extern
  175. STF_S32 STFMOD_ISP_DC_SetDcBuffer(
  176. ST_ISP_MOD_DC *pstModDc,
  177. STF_U32 *pu32DcBuf
  178. );
  179. extern
  180. STF_S32 STFMOD_ISP_DC_SetAxiId(
  181. ST_ISP_MOD_DC *pstModDc,
  182. STF_U8 u8AxiId
  183. );
  184. extern
  185. STF_S32 STFMOD_ISP_DC_LoadDcCalibrationFile(
  186. ST_ISP_MOD_DC *pstModDc
  187. );
  188. extern
  189. STF_S32 STFMOD_ISP_DC_GetDcBufffer(
  190. ST_ISP_MOD_DC *pstModDc,
  191. STF_U32 **ppu32DcBuf
  192. );
  193. #if 0
  194. extern
  195. STF_S32 STFMOD_ISP_DC_GetRetBufAddr(
  196. ST_ISP_MOD_DC *pstModDc,
  197. STF_U32 *pu32RetDcBufAddr
  198. );
  199. #endif
  200. //-----------------------------------------------------------------------------
  201. extern
  202. STF_S32 STFMOD_ISP_DC_Init(
  203. STF_VOID *pIspCtx,
  204. STF_U32 *pNextRdma
  205. );
  206. extern
  207. STF_S32 STFMOD_ISP_DC_LoadBinParam(
  208. STF_VOID *pIspCtx,
  209. STF_U8 *pu8ParamBuf,
  210. STF_U16 u16ParamSize
  211. );
  212. extern
  213. STF_S32 STFMOD_ISP_DC_LoadBinClbrt(
  214. STF_VOID *pIspCtx
  215. );
  216. extern
  217. STF_S32 STFMOD_ISP_DC_Enable(
  218. STF_VOID *pIspCtx,
  219. STF_BOOL8 bEnable
  220. );
  221. extern
  222. STF_BOOL8 STFMOD_ISP_DC_IsEnable(
  223. STF_VOID *pIspCtx
  224. );
  225. extern
  226. STF_S32 STFMOD_ISP_DC_Update(
  227. STF_VOID *pIspCtx,
  228. STF_BOOL8 bUpdate
  229. );
  230. extern
  231. STF_BOOL8 STFMOD_ISP_DC_IsUpdate(
  232. STF_VOID *pIspCtx
  233. );
  234. extern
  235. STF_S32 STFMOD_ISP_DC_Registered(
  236. STF_VOID *pIspCtx,
  237. STF_BOOL8 bRegistered
  238. );
  239. extern
  240. STF_BOOL8 STFMOD_ISP_DC_IsRegistered(
  241. STF_VOID *pIspCtx
  242. );
  243. extern
  244. STF_S32 STFMOD_ISP_DC_UpdateReg(
  245. STF_VOID *pIspCtx
  246. );
  247. extern
  248. STF_S32 STFMOD_ISP_DC_SetReg(
  249. STF_VOID *pIspCtx
  250. );
  251. extern
  252. STF_S32 STFMOD_ISP_DC_SetNext(
  253. STF_VOID *pIspCtx,
  254. STF_U32 *pNextRdma
  255. );
  256. extern
  257. STF_S32 STFMOD_ISP_DC_FreeResource(
  258. STF_VOID *pIspCtx
  259. );
  260. extern
  261. STF_S32 STFMOD_ISP_DC_GetIqParam(
  262. STF_VOID *pIspCtx,
  263. STF_VOID *pParamBuf,
  264. STF_U16 *pu16ParamSize
  265. );
  266. extern
  267. STF_S32 STFMOD_ISP_DC_SetIqParam(
  268. STF_VOID *pIspCtx,
  269. STF_VOID *pParamBuf,
  270. STF_U16 u16ParamSize
  271. );
  272. //-----------------------------------------------------------------------------
  273. extern
  274. STF_S32 STFMOD_ISP_DC_Create(
  275. STF_VOID *pPipeline
  276. );
  277. extern
  278. STF_S32 STFMOD_ISP_DC_Destroy(
  279. STF_VOID *pPipeline
  280. );
  281. //-----------------------------------------------------------------------------
  282. #ifdef __cplusplus
  283. }
  284. #endif
  285. #endif //__STFMOD_ISP_DC_H__