kernel_samsung_a34x-permissive/drivers/misc/mediatek/jpeg/v2/jpeg_drv.h
2024-04-28 15:51:13 +02:00

735 lines
19 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#include <linux/ioctl.h>
#include <linux/notifier.h>
#include "jpeg_ion.h"
#ifdef CONFIG_COMPAT
/* 32-64 bit conversion */
#include <linux/fs.h>
#include <linux/compat.h>
#endif
#ifndef CONFIG_MTK_CLKMGR
#include <linux/clk.h>
#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