jpeg_drv.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. #include <linux/ioctl.h>
  2. #ifdef CONFIG_COMPAT
  3. /* 32-64 bit conversion */
  4. #include <linux/fs.h>
  5. #include <linux/compat.h>
  6. #endif
  7. #ifndef CONFIG_MTK_CLKMGR
  8. #include <linux/clk.h>
  9. #endif /* !defined(CONFIG_MTK_LEGACY) */
  10. #ifndef __JPEG_DRV_H__
  11. #define __JPEG_DRV_H__
  12. #define TO_CEIL(x, a) (((x) + ((a)-1)) & ~((a)-1))
  13. #define TO_FLOOR(x, a) ((x) & ~((a)-1))
  14. #define TO_MASK(x, a) ((x) & (a))
  15. #define DUNUM_MAPPING(value) (((value)-1)&0x3)
  16. /* ============================================================================ */
  17. #define MAX_JPEG_COMPONENT 4
  18. #define MAX_NUM_SCAN 32
  19. #define D_MAX_JPEG_HW_COMP 3
  20. /* #define D_MAX_JPEG_HUFF_TBL 4 */
  21. #define D_MAX_JPEG_QTBL 4
  22. #define D_MAX_JPEG_HW_QTBL 2
  23. #define D_MAX_JPEG_BLOCK_NUM 10
  24. #define D_HUFF_LOOKAHEAD_BITS 6 /* # of bits of lookahead */
  25. #define D_DCTSIZE 8
  26. #define D_JPEG_DRAM_ALIGN_MASK 0xf
  27. #define D_JPEG_DRAM_ALIGN_SIZE (D_JPEG_DRAM_ALIGN_MASK + 1)
  28. #define D_JPEG_BASELINE 0
  29. #define D_JPEG_DC_REFINE 1
  30. #define D_JPEG_AC_FIRST 2
  31. #define D_JPEG_AC_REFINE 3
  32. #define D_JPEG_DC_FIRST 4
  33. /* global data check flags */
  34. #define D_FLAG_NONE (0)
  35. #define D_GLOB_PROGRESSIVE (1 << 0)
  36. #define D_GLOB_NCOMP (1 << 1)
  37. #define D_GLOB_BLK_W (1 << 2)
  38. #define D_GLOB_BLK_H (1 << 3)
  39. #define D_GLOB_PIC_W (1 << 4)
  40. #define D_GLOB_PIC_H (1 << 5)
  41. #define D_GLOB_DCHUFF (1 << 6) /* no need */
  42. #define D_GLOB_ACHUFF (1 << 7) /* no need */
  43. #define D_GLOB_NZBUFF (1 << 8) /* no need */
  44. #define D_GLOB_QTBL (1 << 9) /* no need */
  45. #define D_GLOB_RESTART (1 << 10)
  46. /* scan data check flags */
  47. #define D_SCAN_DATASTART (1 << 0)
  48. #define D_SCAN_NCOMP (1 << 1)
  49. #define D_SCAN_COMPIN (1 << 2)
  50. #define D_SCAN_COMPQ (1 << 3)
  51. #define D_SCAN_BLKDC (1 << 4)
  52. #define D_SCAN_BLKAC (1 << 5)
  53. #define D_SCAN_ALAH (1 << 6)
  54. #define D_SCAN_SESS (1 << 7)
  55. #define D_SCAN_LAST (1 << 8)
  56. #define D_SCAN_ROWSTART (1 << 9)
  57. #define D_SCAN_ROWEND (1 << 10)
  58. #define D_SCAN_DCHUFF (1 << 11)
  59. #define D_SCAN_ACHUFF (1 << 12)
  60. #define D_SCAN_QTBL (1 << 13)
  61. #define D_SCAN_NZBUFF (1 << 14)
  62. /* mcu row check flags */
  63. #define D_ROW_CURR (1 << 0)
  64. #define D_ROW_OUTBUF (1 << 1)
  65. #define D_ROW_OUTBUFSIZE (1 << 2)
  66. /* mcu check flags */
  67. #define D_MCU_OUTADDR (1 << 0)
  68. #define D_MCU_COEFADDR (1 << 1)
  69. /* misc check flags */
  70. #define D_MISC_ADDR_X (1 << 0)
  71. #define D_MISC_ADDR_Y (1 << 1)
  72. #define HORI 0
  73. #define VERT 1
  74. #define JPEG_ENC_DST_ADDR_OFFSET_MASK (0x0f)
  75. /* #ifdef CONFIG_OF */
  76. typedef struct JpegDeviceStruct {
  77. struct device *pDev;
  78. long encRegBaseVA; /* considering 64 bit kernel, use long */
  79. long decRegBaseVA;
  80. uint32_t encIrqId;
  81. uint32_t decIrqId;
  82. } JpegDeviceStruct;
  83. const long jpeg_dev_get_encoder_base_VA(void);
  84. const long jpeg_dev_get_decoder_base_VA(void);
  85. /* #endif */
  86. #ifndef CONFIG_MTK_CLKMGR
  87. typedef struct JpegClk {
  88. struct clk *clk_disp_mtcmos;
  89. struct clk *clk_venc_mtcmos;
  90. struct clk *clk_disp_smi;
  91. struct clk *clk_venc_larb;
  92. struct clk *clk_venc_jpgEnc;
  93. struct clk *clk_venc_jpgDec;
  94. } JpegClk;
  95. #endif /* !defined(CONFIG_MTK_LEGACY) */
  96. typedef enum _ENUM_JPEG_RET_CODE_T {
  97. E_JPG_OK,
  98. E_JPG_ERR_NONFATAL,
  99. E_JPG_ERR_FATAL,
  100. E_JPG_ERR_PARAM,
  101. E_JPG_ERR_NOT_INITED,
  102. E_JPG_ERR_ALREADY, /* 5 */
  103. /* markers */
  104. E_JPG_ERR_NOT_JPEG_IMAGE,
  105. E_JPG_ERR_NOT_A_MARKER,
  106. E_JPG_ERR_PASS_END,
  107. E_JPG_ERR_MULTI_SOI,
  108. E_JPG_ERR_UNSUPPORT_SOF, /* 10 */
  109. E_JPG_ERR_MULTI_SOF,
  110. E_JPG_ERR_INVALID_SOF,
  111. E_JPG_ERR_SOS_BEFORE_SOF,
  112. E_JPG_ERR_INVALID_SOS,
  113. E_JPG_ERR_INVALID_DHT, /* 15 */
  114. E_JPG_ERR_INVALID_DRI,
  115. E_JPG_ERR_MULTI_APP1,
  116. E_JPG_ERR_INVALID_APP0,
  117. E_JPG_ERR_INVALID_APP1,
  118. E_JPG_ERR_PARSE_FAILED, /* 20 */
  119. E_JPG_ERR_NOT_PARSED,
  120. E_JPG_ERR_MULTI_EOI,
  121. /* instances */
  122. E_JPG_ERR_ALLOC_PARSER,
  123. E_JPG_ERR_ALLOC_DECODER,
  124. E_JPG_ERR_ALLOC_MEM, /* 25 */
  125. E_JPG_ERR_ALLOC_FLOW,
  126. /* general */
  127. E_JPG_ERR_UNSUPPORT,
  128. E_JPG_ERR_GENERAL,
  129. E_JPG_ERR_LAST,
  130. E_JPG_ERR_DISPLAY_ADDR, /* 30 */
  131. E_JPG_ERR_INVALID_COMPONENT /* code sync */
  132. } JpegDecRetCode;
  133. typedef enum {
  134. E_HWJPG_OK = 0,
  135. E_HWJPG_BUSY,
  136. E_HWJPG_ERR_FETCH_TIMEOIT = E_JPG_ERR_LAST + 1,
  137. E_HWJPG_ERR_SET_BS,
  138. E_HWJPG_ERR_LOAD_Q,
  139. E_HWJPG_ERR_QTBL_INDEX,
  140. E_HWJPG_ERR_QTBL_NUM,
  141. E_HWJPG_ERR_PARAM,
  142. E_HWJPG_ERR_TIMEOUT,
  143. E_HWJPG_ERR_COMP_RANGE,
  144. E_HWJPG_ERR_TBL_RANGE,
  145. E_HWJPG_ERR_BLOCK,
  146. E_HWJPG_ERR_SIZE,
  147. E_HWJPG_ERR_OUTBUF,
  148. E_HWJPG_ERR_NULL_SCAN,
  149. E_HWJPG_ERR_GLOB_NOT_READY,
  150. E_HWJPG_ERR_SCAN_NOT_READY,
  151. E_HWJPG_ERR_ROW_NOT_READY,
  152. E_HWJPG_ERR_MCU_NOT_READY,
  153. E_HWJPG_ERR_MISC_NOT_READY,
  154. E_HWJPG_ERR_HUFF_ADDR,
  155. /* last */
  156. E_HWJPG_ERR_GENERAL
  157. } JpegDrvDecRetCode;
  158. typedef enum {
  159. JDEC_HAL_DEC_MODE_NONE,
  160. JDEC_HAL_DEC_MODE_BASELINE_PIC, /* /< Jpeg baseline picture, decode whole picture */
  161. JDEC_HAL_DEC_MODE_BASELINE_MCU, /* /< Jpeg baseline picture, decode MCU row */
  162. JDEC_HAL_DEC_MODE_BASELINE_MCU_ROW, /* /< Jpeg baseline picture, decode MCU */
  163. JDEC_HAL_DEC_MODE_BASELINE_VIDEO_OUTPUT,
  164. JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_MULTI_COLLECT, /* /< Jpeg progressive picture, decode MCU milti-collect */
  165. JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ENHANCE, /* /< Jpeg progressive picture, decode MCU enhance decoding */
  166. JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_MULTI_COLLECT, /* /Jpeg progressive MCU-Row Mode */
  167. JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_ENHANCE,
  168. JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_MULTI_COLLECT,
  169. JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_ENHANCE
  170. } JpegDrvDecMode;
  171. /* jpeg format */
  172. typedef enum _JpegDecFormat {
  173. E_JPG_UNKNOWN_FORMAT,
  174. E_JPG_BASELINE,
  175. E_JPG_EX_SEQ_HUFFMAN,
  176. E_JPG_PROGRESSIVE_HUFFMAN,
  177. E_JPG_EX_SEQ_ARITHMETIC,
  178. E_JPG_PROGRESSIVE_ARITHMETIC,
  179. E_JPG_LOSSLESS_HUFFMAN,
  180. E_JPG_DIFFERENTIAL_SEQ_HUFFMAN,
  181. E_JPG_DIFF_PROG_HUFFMAN,
  182. E_JPG_DIFF_LLESS_HUFFMAN,
  183. E_JPG_RESERVED_FOR_EXTENSIONS,
  184. E_JPG_LOSSLESS_ARITHMETIC,
  185. E_JPG_DIFF_SEQ_ARITHMETIC,
  186. E_JPG_DIFF_PROG_ARITHMETIC,
  187. E_JPG_UNSUPPORT_FORMAT
  188. } JpegDecFormat;
  189. /* // jpeg decode mode */
  190. typedef enum _JpegDecMode {
  191. JPEG_DEC_MODE_NONE,
  192. JPEG_DEC_MODE_FRAME, /* /< Jpeg baseline picture, decode whole picture */
  193. JPEG_DEC_MODE_DC_LINK, /* /< Jpeg baseline picture, decode whole picture */
  194. JPEG_DEC_MODE_MCU_ROW /* /< Jpeg baseline picture, decode MCU row */
  195. } JpegDecMode;
  196. /* component info in SOF marker */
  197. typedef struct _JpegDecSOFComp {
  198. unsigned char u1CompId;
  199. unsigned char u1HSampFactor;
  200. unsigned char u1VSampFactor;
  201. unsigned char u1QuantTblNo;
  202. } JpegDecSOFComp;
  203. typedef struct _JpegDecSOS {
  204. unsigned int u4ScanPass; /* scan pass */
  205. unsigned char u1CompInScan;
  206. unsigned char au1CompNoList[MAX_JPEG_COMPONENT];
  207. unsigned char au1DcId[MAX_JPEG_COMPONENT];
  208. unsigned char au1AcId[MAX_JPEG_COMPONENT];
  209. unsigned char u1Ss, u1Se, u1Ah, u1Al, u1AhAl; /* OT: NO USE */
  210. unsigned char *pu1ScanTableStart;
  211. unsigned char *pu1ScanDataStart;
  212. } JpegDecSOS;
  213. /* raw de-huffman table */
  214. typedef struct {
  215. unsigned char au1Bits[17];
  216. unsigned char au1HuffVal[256];
  217. } JpegDecDhtHuffTbl;
  218. /* SOF data */
  219. typedef struct _JpegDecSOF {
  220. int fgSOF; /* indicate that already have an SOF marker */
  221. JpegDecFormat eJpegFormat;
  222. unsigned char u1DataPrecision;
  223. unsigned short u2ImageHeight;
  224. unsigned short u2ImageWidth;
  225. unsigned char u1NumComponents;
  226. unsigned char au1MapId2Index[256];
  227. JpegDecSOFComp arSofComp[MAX_JPEG_COMPONENT];
  228. } JpegDecSOF;
  229. /* DHT data */
  230. typedef struct {
  231. unsigned int u4NumDcTbl;
  232. unsigned int u4NumAcTbl;
  233. unsigned int fgDcTblLoaded; /* bit mask for loaded dc table */
  234. unsigned int fgAcTblLoaded; /* bit mask for loaded ac table */
  235. JpegDecDhtHuffTbl arDcTbl[4];
  236. JpegDecDhtHuffTbl arAcTbl[4];
  237. } JpegDecDHT;
  238. typedef /* DQT data */
  239. struct {
  240. /*
  241. although we leave 2bytes * 64 space here,
  242. if q table precision is 8bits, we use only
  243. first half (1x64) of this table
  244. */
  245. unsigned char aau1Qtbl[4][128];
  246. unsigned int afgPrec[4];
  247. unsigned char u1NumQ;
  248. unsigned int fgDQT;
  249. } JpegDecDQT;
  250. /* new types for flw2 (wired) */
  251. typedef struct {
  252. void *pvFreePoint; /* OT: NO USE */
  253. unsigned int u4Width; /* OT: NO USE */
  254. unsigned int u4Height; /* OT: NO USE */
  255. unsigned int u4McuNumInRow; /* OT: NO USE */
  256. unsigned int u4McuRows; /* OT: NO USE */
  257. unsigned int u4TotalMcuNum; /* OT: NO USE */
  258. unsigned int aau4SampleFactor[3][2]; /* OT: NO USE */
  259. unsigned int au4CompBlock[3]; /* OT: NO USE */
  260. unsigned int au4MaxFactor[2]; /* OT: NO USE */
  261. unsigned int outputBuffer0[3];
  262. unsigned int outputBuffer1[3]; /* nouse in full frame mode, only use in PauseResume/DirectCouple mode */
  263. unsigned int au1CoffBuffer[3]; /* OT: NO USE */
  264. int fgProgScan; /* OT: NO USE */
  265. /* temp buffers */
  266. unsigned int apvNzBuffer[3]; /* OT: NO USE */
  267. } JpegDrvDecFlow;
  268. /* // JPEG Decoder Structure */
  269. typedef struct {
  270. /* common */
  271. unsigned int decodeMode; /* OK */
  272. unsigned int reg_OpMode; /* OK */
  273. unsigned int regDecDumpEn;
  274. unsigned int totalMCU; /* OK */
  275. unsigned int comp0_DU;
  276. unsigned int membershipList; /* OK { GRAY, gmcEn, DU9, DU8,..., DU1, DU0} */
  277. /* for BRZ (0): 1, (1): 1/2, (2): 1/4, (3): 1/8 */
  278. unsigned char lumaHorDecimate; /* OK */
  279. unsigned char lumaVerDecimate; /* OK */
  280. unsigned char cbcrHorDecimate; /* OK */
  281. unsigned char cbcrVerDecimate; /* OK */
  282. unsigned int srcStreamAddrBase; /* OK */
  283. unsigned int srcStreamSize; /* OK */
  284. unsigned int srcStreamAddrWritePtr; /* OK */
  285. unsigned int outputBuffer0[3]; /* OK */
  286. unsigned int outputBuffer1[3]; /*OK only use in PauseResume/DirectCouple mode */
  287. /* JPEG component information */
  288. unsigned int componentNum; /* OK */
  289. unsigned int componentID[3]; /* OK ///< Ci */
  290. unsigned int hSamplingFactor[3]; /* OK ///< Hi */
  291. unsigned int vSamplingFactor[3]; /* OK ///< Vi */
  292. unsigned int qTableSelector[3]; /* OK ///< Tqi (OT: need this field?) */
  293. unsigned int dma_McuInGroup; /* OK */
  294. unsigned int dma_GroupNum; /* OK */
  295. unsigned int dma_LastMcuNum; /* OK */
  296. unsigned int gmcEn; /* OK */
  297. /* unsigned int totalMcuRows; //OK ///< number of MCU column in the JPEG file */
  298. unsigned int compImgStride[D_MAX_JPEG_HW_COMP]; /* hSamplingFactor[n] * 8 * mcuPerRow */
  299. unsigned int compMemStride[D_MAX_JPEG_HW_COMP]; /* OK */
  300. unsigned int compTileBufStride[D_MAX_JPEG_HW_COMP]; /* hSamplingFactor[n] * 8 * mcuPerRow */
  301. unsigned int mcuPerRow; /* OK //move to HAL ///< number of MCU row in the JPEG file */
  302. unsigned int pauseRow_en; /* OK */
  303. unsigned int pauseRowCnt; /* move to HAL */
  304. unsigned int pauseMCU; /* OK */
  305. unsigned int tileBufRowNum; /* move to HAL */
  306. unsigned int buffer_Y_PA; /* move to HAL */
  307. unsigned int buffer_Cb_PA; /* move to HAL */
  308. unsigned int buffer_Cr_PA; /* move to HAL */
  309. unsigned int buffer_Y_row_size; /* move to HAL */
  310. unsigned int buffer_C_row_size; /* move to HAL */
  311. /* unsigned int compDU[3]; //OK (required by HW decoder) number of DU for each component */
  312. /* unsigned int duPerMCURow[3]; //OK (required by HW decoder) DU per MCU row for each component */
  313. /* unsigned int dummyDU[3]; //OK (required by HW decoder) number of dummy DU for each component */
  314. /* unsigned int samplingFormat; //OK /// how many format? */
  315. } JPEG_DEC_DRV_IN;
  316. typedef struct {
  317. long timeout;
  318. unsigned int *result;
  319. } JPEG_DEC_DRV_OUT;
  320. typedef struct {
  321. unsigned int decRowBuf[3]; /* OK */
  322. unsigned int pauseMCU; /* OK */
  323. } JPEG_DEC_CONFIG_ROW;
  324. typedef struct {
  325. unsigned int goNum;
  326. unsigned int pauseMCUidx[64];
  327. unsigned int decRowBuf0[64];
  328. unsigned int decRowBuf1[64];
  329. unsigned int decRowBuf2[64];
  330. } JPEG_DEC_CONFIG_CMDQ;
  331. typedef struct {
  332. /* from mt6575 */
  333. unsigned int srcStreamAddrBase;
  334. unsigned int srcStreamSize;
  335. unsigned int srcStreamAddrWritePtr;
  336. unsigned int outputBuffer0[3];
  337. unsigned int outputBuffer1[3]; /* nouse in full frame mode, only use in PauseResume/DirectCouple mode */
  338. unsigned int mcuPerRow; /* /< number of MCU row in the JPEG file */
  339. unsigned int totalMcuRows; /* /< number of MCU column in the JPEG file */
  340. unsigned int compDU[3]; /* /< (required by HW decoder) number of DU for each component */
  341. unsigned int duPerMCURow[3]; /* /< (required by HW decoder) DU per MCU row for each component */
  342. unsigned int dummyDU[3]; /* /< (required by HW decoder) number of dummy DU for each component */
  343. unsigned int samplingFormat; /* / how many format? */
  344. /* JPEG component information */
  345. unsigned int componentNum;
  346. unsigned int componentID[3]; /* /< Ci */
  347. unsigned int hSamplingFactor[3]; /* /< Hi */
  348. unsigned int vSamplingFactor[3]; /* /< Vi */
  349. unsigned int qTableSelector[3]; /* /< Tqi (OT: need this field?) */
  350. /*********************************************************************************/
  351. /* common */
  352. unsigned int totalMCU;
  353. unsigned char blkNumInMCU; /* total drv no use */
  354. unsigned char u1MaxHorSample, u1MaxVerSample; /* widest, highest */
  355. unsigned int u4PicWidth, u4PicHeight; /* picture width and height */
  356. unsigned int compImgStride[D_MAX_JPEG_HW_COMP]; /* hSamplingFactor[n] * 8 * mcuPerRow */
  357. unsigned int compTileBufStride[D_MAX_JPEG_HW_COMP]; /* hSamplingFactor[n] * 8 * mcuPerRow */
  358. unsigned int au4PicWidthInBuf[D_MAX_JPEG_HW_COMP];
  359. /* use only in look ahead table */
  360. unsigned char au1MemberShip[D_MAX_JPEG_BLOCK_NUM]; /* DU mapping to components */
  361. unsigned char aau1Qtbl[D_MAX_JPEG_QTBL][128]; /* q tables in stream */
  362. unsigned int u4RestartInterval;
  363. /* current scan */
  364. unsigned char u1NumCompsInCurrScan; /* number of components in current scan */
  365. int afgCompInScan[D_MAX_JPEG_HW_COMP + 1];
  366. /* unsigned char qTableSelector[D_MAX_JPEG_HW_COMP]; */
  367. unsigned char au1BlkDc[D_MAX_JPEG_BLOCK_NUM];
  368. unsigned char au1BlkAc[D_MAX_JPEG_BLOCK_NUM];
  369. unsigned char u1Se; /* OT: NO USE */
  370. unsigned char u1Ss; /* OT: NO USE */
  371. /* current mcu row */
  372. unsigned int u4CurrMcuRow;
  373. unsigned int u4ModTotalRows;
  374. /* for single component in p scan */
  375. unsigned char u1FirstCompInScan;
  376. /* for BRZ */
  377. unsigned char lumaHorDecimate; /* (0): 1, (1): 1/2, (2): 1/4, (3): 1/8 */
  378. unsigned char lumaVerDecimate;
  379. unsigned char cbcrHorDecimate;
  380. unsigned char cbcrVerDecimate;
  381. unsigned int srcColorFormat;
  382. unsigned int dstColorFormat;
  383. unsigned int u4isColorConv;
  384. unsigned int u4ds_width[3];
  385. unsigned int u4ds_height[3];
  386. unsigned int decodeMode;
  387. unsigned int gdmaBypassEn;
  388. unsigned int regDecDumpEn;
  389. unsigned int pauseRow_en;
  390. unsigned int pauseRowCnt;
  391. unsigned int tileBufRowNum;
  392. unsigned int buffer_Y_PA;
  393. unsigned int buffer_Cb_PA;
  394. unsigned int buffer_Cr_PA;
  395. unsigned int buffer_Y_row_size;
  396. unsigned int buffer_C_row_size;
  397. } JpegDrvDecConfig;
  398. typedef struct {
  399. unsigned int *pChksum;
  400. } JpegDrvDecResult;
  401. /* ==================================================================================== */
  402. /* JPEG Encoder Structure */
  403. typedef struct {
  404. unsigned int dstBufferAddr;
  405. unsigned int dstBufferSize;
  406. unsigned int encWidth; /* HW directly fill to header */
  407. unsigned int encHeight; /* HW directly fill to header */
  408. unsigned char enableEXIF;
  409. unsigned char allocBuffer;
  410. /* unsigned char enableSyncReset; */
  411. unsigned int encQuality;
  412. unsigned int encFormat;
  413. /* extend in mt6589 */
  414. unsigned int disableGMC; /* TBD: not support */
  415. unsigned int restartInterval;
  416. unsigned int srcBufferAddr; /* YUV420: Luma */
  417. unsigned int srcChromaAddr;
  418. unsigned int imgStride;
  419. unsigned int memStride;
  420. unsigned int totalEncDU;
  421. unsigned int dstBufAddrOffset;
  422. unsigned int dstBufAddrOffsetMask;
  423. } JPEG_ENC_DRV_IN;
  424. typedef struct {
  425. long timeout;
  426. unsigned int *fileSize;
  427. unsigned int *result;
  428. unsigned int *cycleCount;
  429. } JPEG_ENC_DRV_OUT;
  430. typedef struct {
  431. unsigned long startAddr; /* In : */
  432. unsigned long size;
  433. unsigned long result;
  434. } JPEG_PMEM_RANGE;
  435. #ifdef CONFIG_COMPAT
  436. typedef struct {
  437. compat_long_t timeout;
  438. compat_uptr_t result;
  439. } compat_JPEG_DEC_DRV_OUT;
  440. typedef struct {
  441. compat_uptr_t pChksum;
  442. } compat_JpegDrvDecResult;
  443. typedef struct {
  444. compat_long_t timeout;
  445. compat_uptr_t fileSize;
  446. compat_uptr_t result;
  447. compat_uptr_t cycleCount;
  448. } compat_JPEG_ENC_DRV_OUT;
  449. #endif
  450. /* typedef struct */
  451. /* { */
  452. /* unsigned int srcBufferAddr; YUV420: Luma */
  453. /* unsigned int srcChromaAddr; */
  454. /* unsigned int dstBufferAddr; */
  455. /* unsigned int dstBufferSize; */
  456. /* */
  457. /* unsigned int srcWidth; */
  458. /* unsigned int srcHeight; */
  459. /* */
  460. /* unsigned char enableEXIF; */
  461. /* unsigned char disableGMC; not support */
  462. /* */
  463. /* unsigned int restartInterval; */
  464. /* unsigned int quality; */
  465. /* unsigned int yuvFormat; */
  466. /* */
  467. /* } JpegDrvEncParam; */
  468. /* ====================================================================================== */
  469. #define JPEG_IOCTL_MAGIC 'x'
  470. #if 0
  471. #define JPEG_DEC_IOCTL_INIT _IO(JPEG_IOCTL_MAGIC, 1)
  472. /* #define JPEG_DEC_IOCTL_CONFIG _IOW (JPEG_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN) */
  473. #define JPEG_DEC_IOCTL_START _IO(JPEG_IOCTL_MAGIC, 3)
  474. #define JPEG_DEC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 6, JPEG_DEC_DRV_OUT)
  475. #define JPEG_DEC_IOCTL_DEINIT _IO(JPEG_IOCTL_MAGIC, 8)
  476. /* #define JPEG_DEC_IOCTL_RESUME _IOW(JPEG_IOCTL_MAGIC, 4, JPEG_DEC_RESUME_IN) */
  477. /* #define JPEG_DEC_IOCTL_RANGE _IOWR(JPEG_IOCTL_MAGIC, 5, JPEG_DEC_RANGE_IN) */
  478. /* #define JPEG_DEC_IOCTL_COPY _IOWR(JPEG_IOCTL_MAGIC, 7, int) */
  479. #endif
  480. /* /////////////////// JPEG DEC IOCTL ///////////////////////////////////// */
  481. #define JPEG_DEC_IOCTL_INIT _IO(JPEG_IOCTL_MAGIC, 1)
  482. #define JPEG_DEC_IOCTL_CONFIG _IOW(JPEG_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN)
  483. #define JPEG_DEC_IOCTL_FLOW _IOW(JPEG_IOCTL_MAGIC, 3, JpegDrvDecFlow)
  484. #define JPEG_DEC_IOCTL_START _IO(JPEG_IOCTL_MAGIC, 4)
  485. #define JPEG_DEC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 5, JPEG_DEC_DRV_OUT)
  486. #define JPEG_DEC_IOCTL_DEINIT _IO(JPEG_IOCTL_MAGIC, 6)
  487. #define JPEG_DEC_IOCTL_RESET _IO(JPEG_IOCTL_MAGIC, 7)
  488. #define JPEG_DEC_IOCTL_CHKSUM _IOWR(JPEG_IOCTL_MAGIC, 8, JpegDrvDecResult)
  489. #define JPEG_DEC_IOCTL_BREAK _IO(JPEG_IOCTL_MAGIC, 9)
  490. #define JPEG_DEC_IOCTL_RW_REG _IO(JPEG_IOCTL_MAGIC, 10)
  491. #define JPEG_DEC_IOCTL_RESUME _IOW(JPEG_IOCTL_MAGIC, 11, JPEG_DEC_CONFIG_ROW)
  492. #define JPEG_DEC_IOCTL_FLUSH_CMDQ _IOW(JPEG_IOCTL_MAGIC, 17, JPEG_DEC_CONFIG_CMDQ)
  493. #define JPEG_DEC_IOCTL_DUMP_REG _IO(JPEG_IOCTL_MAGIC, 30)
  494. /* #define JPEG_DEC_IOCTL_MAN_GDMA _IOW (JPEG_IOCTL_MAGIC, 31, unsigned char) */
  495. /* /////////////////// JPEG ENC IOCTL ///////////////////////////////////// */
  496. #define JPEG_ENC_IOCTL_INIT _IO(JPEG_IOCTL_MAGIC, 11)
  497. #define JPEG_ENC_IOCTL_CONFIG _IOW(JPEG_IOCTL_MAGIC, 12, JPEG_ENC_DRV_IN)
  498. #define JPEG_ENC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 13, JPEG_ENC_DRV_OUT)
  499. #define JPEG_ENC_IOCTL_DEINIT _IO(JPEG_IOCTL_MAGIC, 14)
  500. #define JPEG_ENC_IOCTL_START _IO(JPEG_IOCTL_MAGIC, 15)
  501. #define JPEG_ENC_IOCTL_WARM_RESET _IO(JPEG_IOCTL_MAGIC, 20)
  502. #define JPEG_ENC_IOCTL_DUMP_REG _IO(JPEG_IOCTL_MAGIC, 21)
  503. #define JPEG_ENC_IOCTL_RW_REG _IO(JPEG_IOCTL_MAGIC, 22)
  504. #ifdef CONFIG_COMPAT
  505. #define COMPAT_JPEG_DEC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 5, compat_JPEG_DEC_DRV_OUT)
  506. #define COMPAT_JPEG_DEC_IOCTL_CHKSUM _IOWR(JPEG_IOCTL_MAGIC, 8, compat_JpegDrvDecResult)
  507. #define COMPAT_JPEG_ENC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 13, compat_JPEG_ENC_DRV_OUT)
  508. #endif
  509. #endif