/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2020 MediaTek Inc. */ #include #include #include "jpeg_ion.h" #ifdef CONFIG_COMPAT /* 32-64 bit conversion */ #include #include #endif #ifndef CONFIG_MTK_CLKMGR #include #endif /* !defined(CONFIG_MTK_LEGACY) */ #ifndef __JPEG_DRV_H__ #define __JPEG_DRV_H__ #define TO_CEIL(x, a) (((x) + ((a)-1)) & ~((a)-1)) #define TO_FLOOR(x, a) ((x) & ~((a)-1)) #define TO_MASK(x, a) ((x) & (a)) #define DUNUM_MAPPING(value) (((value)-1)&0x3) /* ============================ */ #define MAX_JPEG_COMPONENT 4 #define MAX_NUM_SCAN 32 #define D_MAX_JPEG_HW_COMP 3 /* #define D_MAX_JPEG_HUFF_TBL 4 */ #define D_MAX_JPEG_QTBL 4 #define D_MAX_JPEG_HW_QTBL 2 #define D_MAX_JPEG_BLOCK_NUM 10 #define D_HUFF_LOOKAHEAD_BITS 6 /* # of bits of lookahead */ #define D_DCTSIZE 8 #define D_JPEG_DRAM_ALIGN_MASK 0xf #define D_JPEG_DRAM_ALIGN_SIZE (D_JPEG_DRAM_ALIGN_MASK + 1) #define D_JPEG_BASELINE 0 #define D_JPEG_DC_REFINE 1 #define D_JPEG_AC_FIRST 2 #define D_JPEG_AC_REFINE 3 #define D_JPEG_DC_FIRST 4 /* global data check flags */ #define D_FLAG_NONE (0) #define D_GLOB_PROGRESSIVE (1 << 0) #define D_GLOB_NCOMP (1 << 1) #define D_GLOB_BLK_W (1 << 2) #define D_GLOB_BLK_H (1 << 3) #define D_GLOB_PIC_W (1 << 4) #define D_GLOB_PIC_H (1 << 5) #define D_GLOB_DCHUFF (1 << 6) /* no need */ #define D_GLOB_ACHUFF (1 << 7) /* no need */ #define D_GLOB_NZBUFF (1 << 8) /* no need */ #define D_GLOB_QTBL (1 << 9) /* no need */ #define D_GLOB_RESTART (1 << 10) /* scan data check flags */ #define D_SCAN_DATASTART (1 << 0) #define D_SCAN_NCOMP (1 << 1) #define D_SCAN_COMPIN (1 << 2) #define D_SCAN_COMPQ (1 << 3) #define D_SCAN_BLKDC (1 << 4) #define D_SCAN_BLKAC (1 << 5) #define D_SCAN_ALAH (1 << 6) #define D_SCAN_SESS (1 << 7) #define D_SCAN_LAST (1 << 8) #define D_SCAN_ROWSTART (1 << 9) #define D_SCAN_ROWEND (1 << 10) #define D_SCAN_DCHUFF (1 << 11) #define D_SCAN_ACHUFF (1 << 12) #define D_SCAN_QTBL (1 << 13) #define D_SCAN_NZBUFF (1 << 14) /* mcu row check flags */ #define D_ROW_CURR (1 << 0) #define D_ROW_OUTBUF (1 << 1) #define D_ROW_OUTBUFSIZE (1 << 2) /* mcu check flags */ #define D_MCU_OUTADDR (1 << 0) #define D_MCU_COEFADDR (1 << 1) /* misc check flags */ #define D_MISC_ADDR_X (1 << 0) #define D_MISC_ADDR_Y (1 << 1) #define HORI 0 #define VERT 1 #define JPEG_ENC_DST_ADDR_OFFSET_MASK (0x0f) #define HW_CORE_NUMBER 3 #if defined(PLATFORM_MT6785) #define ENABLE_MMQOS 1 #else #define ENABLE_MMQOS 0 #endif /* #ifdef CONFIG_OF */ struct JpegDeviceStruct { struct device *pDev; long encRegBaseVA; /* considering 64 bit kernel, use long */ long decRegBaseVA; long hybriddecRegBaseVA[HW_CORE_NUMBER]; uint32_t encIrqId; uint32_t decIrqId; uint32_t hybriddecIrqId[HW_CORE_NUMBER]; struct device *larbjpeg; struct notifier_block pm_notifier; bool is_suspending; bool is_dec_started[HW_CORE_NUMBER]; }; const long jpeg_dev_get_encoder_base_VA(void); const long jpeg_dev_get_decoder_base_VA(void); const long jpeg_dev_get_hybrid_decoder_base_VA(int id); const int jpeg_dev_get_hybrid_decoder_id(unsigned int pa); /* #endif */ #ifndef CONFIG_MTK_CLKMGR struct JpegClk { struct clk *clk_smi_common; #ifdef JPEG_DRV_MT6799 struct clk *clk_mm_larb7; struct clk *clk_gals_m0_2x; struct clk *clk_gals_m1_2x; struct clk *clk_upsz0; struct clk *clk_upsz1; struct clk *clk_fifo0; struct clk *clk_fifo1; struct clk *clk_smi_common_2x; #endif struct clk *clk_scp_sys_mm0; struct clk *clk_scp_sys_ven; struct clk *clk_venc_larb; struct clk *clk_venc_jpgEnc; struct clk *clk_venc_jpgDec; struct clk *clk_venc_jpgDec_c1; struct clk *clk_venc_c1_jpgDec; }; #endif /* !defined(CONFIG_MTK_LEGACY) */ enum JpegDecRetCode { E_JPG_OK, E_JPG_ERR_NONFATAL, E_JPG_ERR_FATAL, E_JPG_ERR_PARAM, E_JPG_ERR_NOT_INITED, E_JPG_ERR_ALREADY, /* 5 */ /* markers */ E_JPG_ERR_NOT_JPEG_IMAGE, E_JPG_ERR_NOT_A_MARKER, E_JPG_ERR_PASS_END, E_JPG_ERR_MULTI_SOI, E_JPG_ERR_UNSUPPORT_SOF, /* 10 */ E_JPG_ERR_MULTI_SOF, E_JPG_ERR_INVALID_SOF, E_JPG_ERR_SOS_BEFORE_SOF, E_JPG_ERR_INVALID_SOS, E_JPG_ERR_INVALID_DHT, /* 15 */ E_JPG_ERR_INVALID_DRI, E_JPG_ERR_MULTI_APP1, E_JPG_ERR_INVALID_APP0, E_JPG_ERR_INVALID_APP1, E_JPG_ERR_PARSE_FAILED, /* 20 */ E_JPG_ERR_NOT_PARSED, E_JPG_ERR_MULTI_EOI, /* instances */ E_JPG_ERR_ALLOC_PARSER, E_JPG_ERR_ALLOC_DECODER, E_JPG_ERR_ALLOC_MEM, /* 25 */ E_JPG_ERR_ALLOC_FLOW, /* general */ E_JPG_ERR_UNSUPPORT, E_JPG_ERR_GENERAL, E_JPG_ERR_LAST, E_JPG_ERR_DISPLAY_ADDR, /* 30 */ E_JPG_ERR_INVALID_COMPONENT /* code sync */ }; enum JpegDrvDecRetCode { E_HWJPG_OK = 0, E_HWJPG_BUSY, E_HWJPG_ERR_FETCH_TIMEOIT = E_JPG_ERR_LAST + 1, E_HWJPG_ERR_SET_BS, E_HWJPG_ERR_LOAD_Q, E_HWJPG_ERR_QTBL_INDEX, E_HWJPG_ERR_QTBL_NUM, E_HWJPG_ERR_PARAM, E_HWJPG_ERR_TIMEOUT, E_HWJPG_ERR_COMP_RANGE, E_HWJPG_ERR_TBL_RANGE, E_HWJPG_ERR_BLOCK, E_HWJPG_ERR_SIZE, E_HWJPG_ERR_OUTBUF, E_HWJPG_ERR_NULL_SCAN, E_HWJPG_ERR_GLOB_NOT_READY, E_HWJPG_ERR_SCAN_NOT_READY, E_HWJPG_ERR_ROW_NOT_READY, E_HWJPG_ERR_MCU_NOT_READY, E_HWJPG_ERR_MISC_NOT_READY, E_HWJPG_ERR_HUFF_ADDR, /* last */ E_HWJPG_ERR_GENERAL }; enum JpegDrvDecMode { JDEC_HAL_DEC_MODE_NONE, /* /< Jpeg baseline picture, decode whole picture */ JDEC_HAL_DEC_MODE_BASELINE_PIC, /* /< Jpeg baseline picture, decode MCU row */ JDEC_HAL_DEC_MODE_BASELINE_MCU, /* /< Jpeg baseline picture, decode MCU */ JDEC_HAL_DEC_MODE_BASELINE_MCU_ROW, JDEC_HAL_DEC_MODE_BASELINE_VIDEO_OUTPUT, /* /< Jpeg progressive picture, decode MCU milti-collect */ JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_MULTI_COLLECT, /* /< Jpeg progressive picture, decode MCU enhance decoding */ JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ENHANCE, /* /Jpeg progressive MCU-Row Mode */ JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_MULTI_COLLECT, JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_ENHANCE, JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_MULTI_COLLECT, JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_ENHANCE }; /* jpeg format */ enum JpegDecFormat { E_JPG_UNKNOWN_FORMAT, E_JPG_BASELINE, E_JPG_EX_SEQ_HUFFMAN, E_JPG_PROGRESSIVE_HUFFMAN, E_JPG_EX_SEQ_ARITHMETIC, E_JPG_PROGRESSIVE_ARITHMETIC, E_JPG_LOSSLESS_HUFFMAN, E_JPG_DIFFERENTIAL_SEQ_HUFFMAN, E_JPG_DIFF_PROG_HUFFMAN, E_JPG_DIFF_LLESS_HUFFMAN, E_JPG_RESERVED_FOR_EXTENSIONS, E_JPG_LOSSLESS_ARITHMETIC, E_JPG_DIFF_SEQ_ARITHMETIC, E_JPG_DIFF_PROG_ARITHMETIC, E_JPG_UNSUPPORT_FORMAT }; /* // jpeg decode mode */ enum JpegDecMode { JPEG_DEC_MODE_NONE, /* /< Jpeg baseline picture, decode whole picture */ JPEG_DEC_MODE_FRAME, /* /< Jpeg baseline picture, decode whole picture */ JPEG_DEC_MODE_DC_LINK, /* /< Jpeg baseline picture, decode MCU row */ JPEG_DEC_MODE_MCU_ROW }; /* component info in SOF marker */ struct JpegDecSOFComp { unsigned char u1CompId; unsigned char u1HSampFactor; unsigned char u1VSampFactor; unsigned char u1QuantTblNo; }; struct JpegDecSOS { unsigned int u4ScanPass; /* scan pass */ unsigned char u1CompInScan; unsigned char au1CompNoList[MAX_JPEG_COMPONENT]; unsigned char au1DcId[MAX_JPEG_COMPONENT]; unsigned char au1AcId[MAX_JPEG_COMPONENT]; unsigned char u1Ss, u1Se, u1Ah, u1Al, u1AhAl; /* OT: NO USE */ unsigned char *pu1ScanTableStart; unsigned char *pu1ScanDataStart; }; /* raw de-huffman table */ struct JpegDecDhtHuffTbl { unsigned char au1Bits[17]; unsigned char au1HuffVal[256]; }; /* SOF data */ struct JpegDecSOF { int fgSOF; /* indicate that already have an SOF marker */ enum JpegDecFormat eJpegFormat; unsigned char u1DataPrecision; unsigned short u2ImageHeight; unsigned short u2ImageWidth; unsigned char u1NumComponents; unsigned char au1MapId2Index[256]; struct JpegDecSOFComp arSofComp[MAX_JPEG_COMPONENT]; }; /* DHT data */ struct JpegDecDHT { unsigned int u4NumDcTbl; unsigned int u4NumAcTbl; unsigned int fgDcTblLoaded; /* bit mask for loaded dc table */ unsigned int fgAcTblLoaded; /* bit mask for loaded ac table */ struct JpegDecDhtHuffTbl arDcTbl[4]; struct JpegDecDhtHuffTbl arAcTbl[4]; }; /* DQT data */ struct JpegDecDQT { /* although we leave 2bytes mul 64 space here, */ /* if q table precision is 8bits, we use only */ /* first half (1x64) of this table */ unsigned char aau1Qtbl[4][128]; unsigned int afgPrec[4]; unsigned char u1NumQ; unsigned int fgDQT; }; /* new types for flw2 (wired) */ struct JpegDrvDecFlow { void *pvFreePoint; /* OT: NO USE */ unsigned int u4Width; /* OT: NO USE */ unsigned int u4Height; /* OT: NO USE */ unsigned int u4McuNumInRow; /* OT: NO USE */ unsigned int u4McuRows; /* OT: NO USE */ unsigned int u4TotalMcuNum; /* OT: NO USE */ unsigned int aau4SampleFactor[3][2]; /* OT: NO USE */ unsigned int au4CompBlock[3]; /* OT: NO USE */ unsigned int au4MaxFactor[2]; /* OT: NO USE */ unsigned int outputBuffer0[3]; /* nouse in full frame mode, only use */ /* in PauseResume/DirectCouple mode */ unsigned int outputBuffer1[3]; unsigned int au1CoffBuffer[3]; /* OT: NO USE */ int fgProgScan; /* OT: NO USE */ /* temp buffers */ unsigned int apvNzBuffer[3]; /* OT: NO USE */ }; /* // JPEG Decoder Structure */ struct JPEG_DEC_DRV_IN { /* common */ unsigned int decodeMode; /* OK */ unsigned int reg_OpMode; /* OK */ unsigned int regDecDumpEn; unsigned int totalMCU; /* OK */ unsigned int comp0_DU; /* OK { GRAY, gmcEn, DU9, DU8,..., DU1, DU0} */ unsigned int membershipList; /* for BRZ (0): 1, (1): 1/2, (2): 1/4, (3): 1/8 */ unsigned char lumaHorDecimate; /* OK */ unsigned char lumaVerDecimate; /* OK */ unsigned char cbcrHorDecimate; /* OK */ unsigned char cbcrVerDecimate; /* OK */ unsigned int srcStreamAddrBase; /* OK */ unsigned int srcStreamSize; /* OK */ unsigned int srcStreamAddrWritePtr; /* OK */ unsigned int outputBuffer0[3]; /* OK */ /*OK only use in PauseResume/DirectCouple mode */ unsigned int outputBuffer1[3]; /* JPEG component information */ unsigned int componentNum; /* OK */ unsigned int componentID[3]; /* OK ///< Ci */ unsigned int hSamplingFactor[3]; /* OK ///< Hi */ unsigned int vSamplingFactor[3]; /* OK ///< Vi */ /* OK ///< Tqi (OT: need this field?) */ unsigned int qTableSelector[3]; unsigned int dma_McuInGroup; /* OK */ unsigned int dma_GroupNum; /* OK */ unsigned int dma_LastMcuNum; /* OK */ unsigned int gmcEn; /* OK */ /*OK ///< number of MCU column in the JPEG file */ /* unsigned int totalMcuRows; */ /* hSamplingFactor[n] * 8 * mcuPerRow */ unsigned int compImgStride[D_MAX_JPEG_HW_COMP]; unsigned int compMemStride[D_MAX_JPEG_HW_COMP]; /* OK */ /* hSamplingFactor[n] * 8 * mcuPerRow */ unsigned int compTileBufStride[D_MAX_JPEG_HW_COMP]; /* OK //move to HAL ///< number of MCU row in the JPEG file */ unsigned int mcuPerRow; unsigned int pauseRow_en; /* OK */ unsigned int pauseRowCnt; /* move to HAL */ unsigned int pauseMCU; /* OK */ unsigned int tileBufRowNum; /* move to HAL */ unsigned int buffer_Y_PA; /* move to HAL */ unsigned int buffer_Cb_PA; /* move to HAL */ unsigned int buffer_Cr_PA; /* move to HAL */ unsigned int buffer_Y_row_size; /* move to HAL */ unsigned int buffer_C_row_size; /* move to HAL */ /*OK (required by HW decoder) number of DU for each component */ /* unsigned int compDU[3]; */ /*OK (required by HW decoder) DU per MCU row for each component */ /* unsigned int duPerMCURow[3]; */ /*OK (required by HW decoder) number of dummy DU for each component */ /* unsigned int dummyDU[3]; */ /*OK /// how many format? */ /* unsigned int samplingFormat; */ }; struct JPEG_DEC_DRV_OUT { long timeout; unsigned int *result; }; struct JPEG_DEC_DRV_HYBRID_TASK { long timeout; int *hwid; int *index_buf_fd; unsigned int data[21]; }; struct JPEG_DEC_DRV_HYBRID_P_N_S { int hwid; int *progress_n_status; }; struct JPEG_DEC_CONFIG_ROW { unsigned int decRowBuf[3]; /* OK */ unsigned int pauseMCU; /* OK */ }; struct JPEG_DEC_CONFIG_CMDQ { unsigned int goNum; unsigned int pauseMCUidx[64]; unsigned int decRowBuf0[64]; unsigned int decRowBuf1[64]; unsigned int decRowBuf2[64]; }; struct JpegDrvDecConfig { /* from mt6575 */ unsigned int srcStreamAddrBase; unsigned int srcStreamSize; unsigned int srcStreamAddrWritePtr; unsigned int outputBuffer0[3]; /* nouse in full frame mode, only use */ /*in PauseResume/DirectCouple mode */ unsigned int outputBuffer1[3]; /* /< number of MCU row in the JPEG file */ unsigned int mcuPerRow; /* /< number of MCU column in the JPEG file */ unsigned int totalMcuRows; /* /< (required by HW decoder) number of DU for each component */ unsigned int compDU[3]; /* /< (required by HW decoder) DU per MCU row for each component */ unsigned int duPerMCURow[3]; /* /< (required by HW decoder) number of dummy DU for each component */ unsigned int dummyDU[3]; unsigned int samplingFormat; /* / how many format? */ /* JPEG component information */ unsigned int componentNum; unsigned int componentID[3]; /* /< Ci */ unsigned int hSamplingFactor[3]; /* /< Hi */ unsigned int vSamplingFactor[3]; /* /< Vi */ unsigned int qTableSelector[3]; /* /< Tqi (OT: need this field?) */ /******************************/ /* common */ unsigned int totalMCU; unsigned char blkNumInMCU; /* total drv no use */ /* widest, highest */ unsigned char u1MaxHorSample, u1MaxVerSample; /* picture width and height */ unsigned int u4PicWidth, u4PicHeight; /* hSamplingFactor[n] * 8 * mcuPerRow */ unsigned int compImgStride[D_MAX_JPEG_HW_COMP]; /* hSamplingFactor[n] * 8 * mcuPerRow */ unsigned int compTileBufStride[D_MAX_JPEG_HW_COMP]; unsigned int au4PicWidthInBuf[D_MAX_JPEG_HW_COMP]; /* use only in look ahead table */ /* DU mapping to components */ unsigned char au1MemberShip[D_MAX_JPEG_BLOCK_NUM]; /* q tables in stream */ unsigned char aau1Qtbl[D_MAX_JPEG_QTBL][128]; unsigned int u4RestartInterval; /* current scan */ /* number of components in current scan */ unsigned char u1NumCompsInCurrScan; int afgCompInScan[D_MAX_JPEG_HW_COMP + 1]; /* unsigned char qTableSelector[D_MAX_JPEG_HW_COMP]; */ unsigned char au1BlkDc[D_MAX_JPEG_BLOCK_NUM]; unsigned char au1BlkAc[D_MAX_JPEG_BLOCK_NUM]; unsigned char u1Se; /* OT: NO USE */ unsigned char u1Ss; /* OT: NO USE */ /* current mcu row */ unsigned int u4CurrMcuRow; unsigned int u4ModTotalRows; /* for single component in p scan */ unsigned char u1FirstCompInScan; /* for BRZ */ /* (0): 1, (1): 1/2, (2): 1/4, (3): 1/8 */ unsigned char lumaHorDecimate; unsigned char lumaVerDecimate; unsigned char cbcrHorDecimate; unsigned char cbcrVerDecimate; unsigned int srcColorFormat; unsigned int dstColorFormat; unsigned int u4isColorConv; unsigned int u4ds_width[3]; unsigned int u4ds_height[3]; unsigned int decodeMode; unsigned int gdmaBypassEn; unsigned int regDecDumpEn; unsigned int pauseRow_en; unsigned int pauseRowCnt; unsigned int tileBufRowNum; unsigned int buffer_Y_PA; unsigned int buffer_Cb_PA; unsigned int buffer_Cr_PA; unsigned int buffer_Y_row_size; unsigned int buffer_C_row_size; }; struct JpegDrvDecResult { unsigned int *pChksum; }; /* ========================== */ /* JPEG Encoder Structure */ struct JPEG_ENC_DRV_IN { unsigned int dstBufferAddr; unsigned int dstBufferSize; unsigned int encWidth; /* HW directly fill to header */ unsigned int encHeight; /* HW directly fill to header */ unsigned char enableEXIF; unsigned char allocBuffer; /* unsigned char enableSyncReset; */ unsigned int encQuality; unsigned int encFormat; /* extend in mt6589 */ unsigned int disableGMC; /* TBD: not support */ unsigned int restartInterval; unsigned int srcBufferAddr; /* YUV420: Luma */ unsigned int srcChromaAddr; unsigned int imgStride; unsigned int memStride; unsigned int totalEncDU; unsigned int dstBufAddrOffset; unsigned int dstBufAddrOffsetMask; int srcFd; int srcFd2; int dstFd; unsigned int memHeight; }; struct JPEG_ENC_DRV_OUT { long timeout; unsigned int *fileSize; unsigned int *result; unsigned int *cycleCount; }; struct JPEG_PMEM_RANGE { unsigned long startAddr; /* In : */ unsigned long size; unsigned long result; }; #ifdef CONFIG_COMPAT struct compat_JPEG_DEC_DRV_OUT { compat_long_t timeout; compat_uptr_t result; }; struct compat_JpegDrvDecResult { compat_uptr_t pChksum; }; struct compat_JPEG_ENC_DRV_OUT { compat_long_t timeout; compat_uptr_t fileSize; compat_uptr_t result; compat_uptr_t cycleCount; }; struct compat_JPEG_DEC_DRV_HYBRID_TASK { compat_long_t timeout; compat_uptr_t hwid; compat_uptr_t index_buf_fd; unsigned int data[21]; }; struct compat_JPEG_DEC_DRV_HYBRID_P_N_S { int hwid; compat_uptr_t progress_n_status; }; #endif /* ============================= */ #define JPEG_IOCTL_MAGIC 'x' /* /////////////////// JPEG DEC IOCTL ///////////////////////////////////// */ #define JPEG_DEC_IOCTL_INIT \ _IO(JPEG_IOCTL_MAGIC, 1) #define JPEG_DEC_IOCTL_CONFIG \ _IOW(JPEG_IOCTL_MAGIC, 2, struct JPEG_DEC_DRV_IN) #define JPEG_DEC_IOCTL_FLOW \ _IOW(JPEG_IOCTL_MAGIC, 3, struct JpegDrvDecFlow) #define JPEG_DEC_IOCTL_START \ _IO(JPEG_IOCTL_MAGIC, 4) #define JPEG_DEC_IOCTL_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 5, struct JPEG_DEC_DRV_OUT) #define JPEG_DEC_IOCTL_DEINIT \ _IO(JPEG_IOCTL_MAGIC, 6) #define JPEG_DEC_IOCTL_RESET \ _IO(JPEG_IOCTL_MAGIC, 7) #define JPEG_DEC_IOCTL_CHKSUM \ _IOWR(JPEG_IOCTL_MAGIC, 8, struct JpegDrvDecResult) #define JPEG_DEC_IOCTL_BREAK \ _IO(JPEG_IOCTL_MAGIC, 9) #define JPEG_DEC_IOCTL_RW_REG \ _IO(JPEG_IOCTL_MAGIC, 10) #define JPEG_DEC_IOCTL_RESUME \ _IOW(JPEG_IOCTL_MAGIC, 11, struct JPEG_DEC_CONFIG_ROW) #define JPEG_DEC_IOCTL_FLUSH_CMDQ \ _IOW(JPEG_IOCTL_MAGIC, 17, struct JPEG_DEC_CONFIG_CMDQ) #define JPEG_DEC_IOCTL_DUMP_REG \ _IO(JPEG_IOCTL_MAGIC, 30) #define JPEG_DEC_IOCTL_HYBRID_START \ _IOWR(JPEG_IOCTL_MAGIC, 18, struct JPEG_DEC_DRV_HYBRID_TASK) #define JPEG_DEC_IOCTL_HYBRID_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 19, struct JPEG_DEC_DRV_HYBRID_P_N_S) #define JPEG_DEC_IOCTL_HYBRID_GET_PROGRESS_STATUS \ _IOWR(JPEG_IOCTL_MAGIC, 20, struct JPEG_DEC_DRV_HYBRID_P_N_S) /* /////////////////// JPEG ENC IOCTL ///////////////////////////////////// */ #define JPEG_ENC_IOCTL_INIT \ _IO(JPEG_IOCTL_MAGIC, 11) #define JPEG_ENC_IOCTL_CONFIG \ _IOW(JPEG_IOCTL_MAGIC, 12, struct JPEG_ENC_DRV_IN) #define JPEG_ENC_IOCTL_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 13, struct JPEG_ENC_DRV_OUT) #define JPEG_ENC_IOCTL_DEINIT \ _IO(JPEG_IOCTL_MAGIC, 14) #define JPEG_ENC_IOCTL_START \ _IO(JPEG_IOCTL_MAGIC, 15) #define JPEG_ENC_IOCTL_WARM_RESET \ _IO(JPEG_IOCTL_MAGIC, 20) #define JPEG_ENC_IOCTL_DUMP_REG \ _IO(JPEG_IOCTL_MAGIC, 21) #define JPEG_ENC_IOCTL_RW_REG \ _IO(JPEG_IOCTL_MAGIC, 22) #ifdef CONFIG_COMPAT #define COMPAT_JPEG_DEC_IOCTL_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 5, struct compat_JPEG_DEC_DRV_OUT) #define COMPAT_JPEG_DEC_IOCTL_CHKSUM \ _IOWR(JPEG_IOCTL_MAGIC, 8, struct compat_JpegDrvDecResult) #define COMPAT_JPEG_ENC_IOCTL_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 13, struct compat_JPEG_ENC_DRV_OUT) #define COMPAT_JPEG_DEC_IOCTL_HYBRID_START \ _IOWR(JPEG_IOCTL_MAGIC, 18, struct compat_JPEG_DEC_DRV_HYBRID_TASK) #define COMPAT_JPEG_DEC_IOCTL_HYBRID_WAIT \ _IOWR(JPEG_IOCTL_MAGIC, 19, struct compat_JPEG_DEC_DRV_HYBRID_P_N_S) #define COMPAT_JPEG_DEC_IOCTL_HYBRID_GET_PROGRESS_STATUS \ _IOWR(JPEG_IOCTL_MAGIC, 20, struct compat_JPEG_DEC_DRV_HYBRID_P_N_S) #endif #endif