1 #include <linux/ioctl.h>
8 #define TO_CEIL(x,a) ( ((x) + ((a)-1)) & ~((a)-1) )
9 #define TO_FLOOR(x,a) ( (x) & ~((a)-1) )
10 #define TO_MASK(x,a) ( (x) & (a) )
12 #define DUNUM_MAPPING(value) (((value)-1)&0x3)
24 //===========================================================================================
29 #define MAX_JPEG_COMPONENT 4
30 #define MAX_NUM_SCAN 32
32 #define D_MAX_JPEG_HW_COMP 3
33 //#define D_MAX_JPEG_HUFF_TBL 4
34 #define D_MAX_JPEG_QTBL 4
35 #define D_MAX_JPEG_HW_QTBL 2
36 #define D_MAX_JPEG_BLOCK_NUM 10
37 #define D_HUFF_LOOKAHEAD_BITS 6 /* # of bits of lookahead */
40 #define D_JPEG_DRAM_ALIGN_MASK 0xf
41 #define D_JPEG_DRAM_ALIGN_SIZE (D_JPEG_DRAM_ALIGN_MASK + 1)
43 #define D_JPEG_BASELINE 0
44 #define D_JPEG_DC_REFINE 1
45 #define D_JPEG_AC_FIRST 2
46 #define D_JPEG_AC_REFINE 3
47 #define D_JPEG_DC_FIRST 4
49 /* global data check flags */
50 #define D_FLAG_NONE (0)
52 #define D_GLOB_PROGRESSIVE (1 << 0)
53 #define D_GLOB_NCOMP (1 << 1)
54 #define D_GLOB_BLK_W (1 << 2)
55 #define D_GLOB_BLK_H (1 << 3)
56 #define D_GLOB_PIC_W (1 << 4)
57 #define D_GLOB_PIC_H (1 << 5)
58 #define D_GLOB_DCHUFF (1 << 6) /* no need */
59 #define D_GLOB_ACHUFF (1 << 7) /* no need */
60 #define D_GLOB_NZBUFF (1 << 8) /* no need */
61 #define D_GLOB_QTBL (1 << 9) /* no need */
62 #define D_GLOB_RESTART (1 << 10)
63 /* scan data check flags */
64 #define D_SCAN_DATASTART (1 << 0)
65 #define D_SCAN_NCOMP (1 << 1)
66 #define D_SCAN_COMPIN (1 << 2)
67 #define D_SCAN_COMPQ (1 << 3)
68 #define D_SCAN_BLKDC (1 << 4)
69 #define D_SCAN_BLKAC (1 << 5)
70 #define D_SCAN_ALAH (1 << 6)
71 #define D_SCAN_SESS (1 << 7)
72 #define D_SCAN_LAST (1 << 8)
73 #define D_SCAN_ROWSTART (1 << 9)
74 #define D_SCAN_ROWEND (1 << 10)
75 #define D_SCAN_DCHUFF (1 << 11)
76 #define D_SCAN_ACHUFF (1 << 12)
77 #define D_SCAN_QTBL (1 << 13)
78 #define D_SCAN_NZBUFF (1 << 14)
79 /* mcu row check flags */
80 #define D_ROW_CURR (1 << 0)
81 #define D_ROW_OUTBUF (1 << 1)
82 #define D_ROW_OUTBUFSIZE (1 << 2)
84 #define D_MCU_OUTADDR (1 << 0)
85 #define D_MCU_COEFADDR (1 << 1)
86 /* misc check flags */
87 #define D_MISC_ADDR_X (1 << 0)
88 #define D_MISC_ADDR_Y (1 << 1)
91 #define M_JPEG_INTERFACE_START() \
92 int i4Ret = (int)E_HWJPG_OK;
94 #define M_JPEG_INTERFACE_END() \
101 #define JPEG_ENC_DST_ADDR_OFFSET_MASK (0x0f)
107 typedef enum _ENUM_JPEG_RET_CODE_T
113 E_JPG_ERR_NOT_INITED
,
114 E_JPG_ERR_ALREADY
, //5
116 E_JPG_ERR_NOT_JPEG_IMAGE
,
117 E_JPG_ERR_NOT_A_MARKER
,
120 E_JPG_ERR_UNSUPPORT_SOF
, //10
122 E_JPG_ERR_INVALID_SOF
,
123 E_JPG_ERR_SOS_BEFORE_SOF
,
124 E_JPG_ERR_INVALID_SOS
,
125 E_JPG_ERR_INVALID_DHT
, //15
126 E_JPG_ERR_INVALID_DRI
,
127 E_JPG_ERR_MULTI_APP1
,
128 E_JPG_ERR_INVALID_APP0
,
129 E_JPG_ERR_INVALID_APP1
,
130 E_JPG_ERR_PARSE_FAILED
, //20
131 E_JPG_ERR_NOT_PARSED
,
134 E_JPG_ERR_ALLOC_PARSER
,
135 E_JPG_ERR_ALLOC_DECODER
,
136 E_JPG_ERR_ALLOC_MEM
, //25
137 E_JPG_ERR_ALLOC_FLOW
,
142 E_JPG_ERR_DISPLAY_ADDR
, //30
143 E_JPG_ERR_INVALID_COMPONENT
//code sync
152 E_HWJPG_ERR_FETCH_TIMEOIT
= E_JPG_ERR_LAST
+ 1,
155 E_HWJPG_ERR_QTBL_INDEX
,
156 E_HWJPG_ERR_QTBL_NUM
,
161 E_HWJPG_ERR_COMP_RANGE
,
162 E_HWJPG_ERR_TBL_RANGE
,
167 E_HWJPG_ERR_NULL_SCAN
,
169 E_HWJPG_ERR_GLOB_NOT_READY
,
170 E_HWJPG_ERR_SCAN_NOT_READY
,
171 E_HWJPG_ERR_ROW_NOT_READY
,
172 E_HWJPG_ERR_MCU_NOT_READY
,
173 E_HWJPG_ERR_MISC_NOT_READY
,
174 E_HWJPG_ERR_HUFF_ADDR
,
182 JDEC_HAL_DEC_MODE_NONE
,
183 JDEC_HAL_DEC_MODE_BASELINE_PIC
, ///< Jpeg baseline picture, decode whole picture
184 JDEC_HAL_DEC_MODE_BASELINE_MCU
, ///< Jpeg baseline picture, decode MCU row
185 JDEC_HAL_DEC_MODE_BASELINE_MCU_ROW
, ///< Jpeg baseline picture, decode MCU
186 JDEC_HAL_DEC_MODE_BASELINE_VIDEO_OUTPUT
,
187 JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_MULTI_COLLECT
, ///< Jpeg progressive picture, decode MCU milti-collect
188 JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ENHANCE
, ///< Jpeg progressive picture, decode MCU enhance decoding
189 JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_MULTI_COLLECT
, ///Jpeg progressive MCU-Row Mode
190 JDEC_HAL_DEC_MODE_PROGRESSIVE_MCU_ROW_ENHANCE
,
191 JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_MULTI_COLLECT
,
192 JDEC_HAL_DEC_MODE_PROGRESSIVE_SCAN_ENHANCE
196 typedef enum _JpegDecFormat
198 E_JPG_UNKNOWN_FORMAT
,
200 E_JPG_EX_SEQ_HUFFMAN
,
201 E_JPG_PROGRESSIVE_HUFFMAN
,
202 E_JPG_EX_SEQ_ARITHMETIC
,
203 E_JPG_PROGRESSIVE_ARITHMETIC
,
204 E_JPG_LOSSLESS_HUFFMAN
,
205 E_JPG_DIFFERENTIAL_SEQ_HUFFMAN
,
206 E_JPG_DIFF_PROG_HUFFMAN
,
207 E_JPG_DIFF_LLESS_HUFFMAN
,
208 E_JPG_RESERVED_FOR_EXTENSIONS
,
209 E_JPG_LOSSLESS_ARITHMETIC
,
210 E_JPG_DIFF_SEQ_ARITHMETIC
,
211 E_JPG_DIFF_PROG_ARITHMETIC
,
212 E_JPG_UNSUPPORT_FORMAT
216 /* component info in SOF marker */
217 typedef struct _JpegDecSOFComp
219 unsigned char u1CompId
;
220 unsigned char u1HSampFactor
;
221 unsigned char u1VSampFactor
;
222 unsigned char u1QuantTblNo
;
225 typedef struct _JpegDecSOS
227 unsigned int u4ScanPass
; /* scan pass */
228 unsigned char u1CompInScan
;
229 unsigned char au1CompNoList
[MAX_JPEG_COMPONENT
];
230 unsigned char au1DcId
[MAX_JPEG_COMPONENT
];
231 unsigned char au1AcId
[MAX_JPEG_COMPONENT
];
232 unsigned char u1Ss
, u1Se
, u1Ah
, u1Al
, u1AhAl
; /* OT: NO USE */
233 unsigned char* pu1ScanTableStart
;
234 unsigned char* pu1ScanDataStart
;
238 /* raw de-huffman table */
241 unsigned char au1Bits
[17];
242 unsigned char au1HuffVal
[256];
248 typedef struct _JpegDecSOF
250 int fgSOF
; /* indicate that already have an SOF marker */
251 JpegDecFormat eJpegFormat
;
252 unsigned char u1DataPrecision
;
253 unsigned short u2ImageHeight
;
254 unsigned short u2ImageWidth
;
255 unsigned char u1NumComponents
;
256 unsigned char au1MapId2Index
[256];
257 JpegDecSOFComp arSofComp
[MAX_JPEG_COMPONENT
];
265 unsigned int u4NumDcTbl
;
266 unsigned int u4NumAcTbl
;
267 unsigned int fgDcTblLoaded
; /* bit mask for loaded dc table */
268 unsigned int fgAcTblLoaded
; /* bit mask for loaded ac table */
269 JpegDecDhtHuffTbl arDcTbl
[4];
270 JpegDecDhtHuffTbl arAcTbl
[4];
277 although we leave 2bytes * 64 space here,
278 if q table precision is 8bits, we use only
279 first half (1x64) of this table
281 unsigned char aau1Qtbl
[4][128];
282 unsigned int afgPrec
[4];
283 unsigned char u1NumQ
;
288 /* new types for flw2 (wired) */
291 void *pvFreePoint
; /* OT: NO USE */
292 unsigned int u4Width
; /* OT: NO USE */
293 unsigned int u4Height
; /* OT: NO USE */
294 unsigned int u4McuNumInRow
; /* OT: NO USE */
295 unsigned int u4McuRows
; /* OT: NO USE */
296 unsigned int u4TotalMcuNum
; /* OT: NO USE */
297 unsigned int aau4SampleFactor
[3][2]; /* OT: NO USE */
298 unsigned int au4CompBlock
[3]; /* OT: NO USE */
299 unsigned int au4MaxFactor
[2]; /* OT: NO USE */
300 unsigned int outputBuffer0
[3];
301 unsigned int outputBuffer1
[3]; /* nouse in full frame mode, only use in PauseResume/DirectCouple mode */
302 unsigned int au1CoffBuffer
[3]; /* OT: NO USE */
303 int fgProgScan
; /* OT: NO USE */
305 unsigned int apvNzBuffer
[3]; /* OT: NO USE */
311 //// jpeg decode mode
312 typedef enum _JpegDecMode
315 JPEG_DEC_MODE_FRAME
, ///< Jpeg baseline picture, decode whole picture
316 JPEG_DEC_MODE_DC_LINK
, ///< Jpeg baseline picture, decode whole picture
317 JPEG_DEC_MODE_MCU_ROW
///< Jpeg baseline picture, decode MCU row
321 //// JPEG Decoder Structure
326 unsigned int decodeMode
; //OK
327 unsigned int reg_OpMode
; //OK
328 unsigned int regDecDumpEn
;
329 unsigned int totalMCU
; //OK
330 unsigned int comp0_DU
;
332 unsigned int membershipList
; //OK /* { GRAY, gmcEn, DU9, DU8,..., DU1, DU0} */
334 /* for BRZ (0): 1, (1): 1/2, (2): 1/4, (3): 1/8 */
335 unsigned char lumaHorDecimate
; //OK
336 unsigned char lumaVerDecimate
; //OK
337 unsigned char cbcrHorDecimate
; //OK
338 unsigned char cbcrVerDecimate
; //OK
340 unsigned int srcStreamAddrBase
; //OK
341 unsigned int srcStreamSize
; //OK
342 unsigned int srcStreamAddrWritePtr
; //OK
344 unsigned int outputBuffer0
[3]; //OK
345 unsigned int outputBuffer1
[3]; //OK /* nouse in full frame mode, only use in PauseResume/DirectCouple mode */
348 // JPEG component information
349 unsigned int componentNum
; //OK
350 unsigned int componentID
[3]; //OK ///< Ci
351 unsigned int hSamplingFactor
[3]; //OK ///< Hi
352 unsigned int vSamplingFactor
[3]; //OK ///< Vi
353 unsigned int qTableSelector
[3]; //OK ///< Tqi (OT: need this field?)
355 unsigned int dma_McuInGroup
; //OK
356 unsigned int dma_GroupNum
; //OK
357 unsigned int dma_LastMcuNum
; //OK
358 unsigned int gmcEn
; //OK
361 //unsigned int totalMcuRows; //OK ///< number of MCU column in the JPEG file
363 unsigned int compImgStride
[D_MAX_JPEG_HW_COMP
]; //OK // hSamplingFactor[n] * 8 * mcuPerRow (byte pitch of a component)
364 unsigned int compMemStride
[D_MAX_JPEG_HW_COMP
]; //OK
365 unsigned int compTileBufStride
[D_MAX_JPEG_HW_COMP
]; // hSamplingFactor[n] * 8 * mcuPerRow (byte pitch of a component)
369 unsigned int mcuPerRow
; //OK //move to HAL ///< number of MCU row in the JPEG file
370 unsigned int pauseRow_en
; //OK
371 unsigned int pauseRowCnt
; //move to HAL
372 unsigned int pauseMCU
; //OK
373 unsigned int tileBufRowNum
; //move to HAL
374 unsigned int buffer_Y_PA
; //move to HAL
375 unsigned int buffer_Cb_PA
; //move to HAL
376 unsigned int buffer_Cr_PA
; //move to HAL
377 unsigned int buffer_Y_row_size
; //move to HAL
378 unsigned int buffer_C_row_size
; //move to HAL
381 //unsigned int compDU[3]; //OK ///< (required by HW decoder) number of DU for each component
382 //unsigned int duPerMCURow[3]; //OK ///< (required by HW decoder) DU per MCU row for each component (MT6589_NOUSE)
383 //unsigned int dummyDU[3]; //OK ///< (required by HW decoder) number of dummy DU for each component (MT6589_NOUSE)
384 //unsigned int samplingFormat; //OK /// how many format?
397 unsigned int decRowBuf
[3]; //OK
398 unsigned int pauseMCU
; //OK
401 }JPEG_DEC_CONFIG_ROW
;
411 unsigned int srcStreamAddrBase
;
412 unsigned int srcStreamSize
;
413 unsigned int srcStreamAddrWritePtr
;
415 unsigned int outputBuffer0
[3];
416 unsigned int outputBuffer1
[3]; /* nouse in full frame mode, only use in PauseResume/DirectCouple mode */
418 unsigned int mcuPerRow
; ///< number of MCU row in the JPEG file
419 unsigned int totalMcuRows
; ///< number of MCU column in the JPEG file
421 unsigned int compDU
[3]; ///< (required by HW decoder) number of DU for each component
422 unsigned int duPerMCURow
[3]; ///< (required by HW decoder) DU per MCU row for each component (MT6589_NOUSE)
423 unsigned int dummyDU
[3]; ///< (required by HW decoder) number of dummy DU for each component (MT6589_NOUSE)
425 unsigned int samplingFormat
; /// how many format?
427 // JPEG component information
428 unsigned int componentNum
;
429 unsigned int componentID
[3]; ///< Ci
430 unsigned int hSamplingFactor
[3]; ///< Hi
431 unsigned int vSamplingFactor
[3]; ///< Vi
432 unsigned int qTableSelector
[3]; ///< Tqi (OT: need this field?)
434 /*********************************************************************************/
437 unsigned int totalMCU
;
438 unsigned char blkNumInMCU
; //total drv no use
440 unsigned char u1MaxHorSample
, u1MaxVerSample
; // widest, highest
441 unsigned int u4PicWidth
, u4PicHeight
; // picture width and height
442 unsigned int compImgStride
[D_MAX_JPEG_HW_COMP
]; // hSamplingFactor[n] * 8 * mcuPerRow (byte pitch of a component)
443 unsigned int compTileBufStride
[D_MAX_JPEG_HW_COMP
]; // hSamplingFactor[n] * 8 * mcuPerRow (byte pitch of a component)
444 unsigned int au4PicWidthInBuf
[D_MAX_JPEG_HW_COMP
];
447 // use only in look ahead table
448 unsigned char au1MemberShip
[D_MAX_JPEG_BLOCK_NUM
]; // DU mapping to components
449 unsigned char aau1Qtbl
[D_MAX_JPEG_QTBL
][128]; // q tables in stream
450 unsigned int u4RestartInterval
;
453 unsigned char u1NumCompsInCurrScan
; // number of components in current scan
454 int afgCompInScan
[D_MAX_JPEG_HW_COMP
+ 1];
455 //unsigned char qTableSelector[D_MAX_JPEG_HW_COMP];
456 unsigned char au1BlkDc
[D_MAX_JPEG_BLOCK_NUM
];
457 unsigned char au1BlkAc
[D_MAX_JPEG_BLOCK_NUM
];
458 unsigned char u1Se
; /* OT: NO USE */
459 unsigned char u1Ss
; /* OT: NO USE */
461 /* current mcu row */
462 unsigned int u4CurrMcuRow
;
463 unsigned int u4ModTotalRows
;
466 /* for single component in p scan */
467 unsigned char u1FirstCompInScan
;
470 unsigned char lumaHorDecimate
; //(0): 1, (1): 1/2, (2): 1/4, (3): 1/8
471 unsigned char lumaVerDecimate
;
472 unsigned char cbcrHorDecimate
;
473 unsigned char cbcrVerDecimate
;
474 unsigned int srcColorFormat
;
475 unsigned int dstColorFormat
;
476 unsigned int u4isColorConv
;
477 unsigned int u4ds_width
[3] ;
478 unsigned int u4ds_height
[3] ;
480 unsigned int decodeMode
;
481 unsigned int gdmaBypassEn
;
482 unsigned int regDecDumpEn
;
484 unsigned int pauseRow_en
;
485 unsigned int pauseRowCnt
;
486 unsigned int tileBufRowNum
;
487 unsigned int buffer_Y_PA
;
488 unsigned int buffer_Cb_PA
;
489 unsigned int buffer_Cr_PA
;
490 unsigned int buffer_Y_row_size
;
491 unsigned int buffer_C_row_size
;
497 unsigned int *pChksum
;
518 //==========================================================================================
521 // JPEG Encoder Structure
525 unsigned int dstBufferAddr
;
526 unsigned int dstBufferSize
;
528 unsigned int encWidth
; //HW directly fill to header
529 unsigned int encHeight
; //HW directly fill to header
531 unsigned char enableEXIF
;
532 unsigned char allocBuffer
;
533 //unsigned char enableSyncReset; //not use in mt6589
535 unsigned int encQuality
;
536 unsigned int encFormat
;
539 unsigned int disableGMC
; //TBD: not support
540 unsigned int restartInterval
;
541 unsigned int srcBufferAddr
; // YUV420: Luma
542 unsigned int srcChromaAddr
;
543 unsigned int imgStride
;
544 unsigned int memStride
;
545 unsigned int totalEncDU
;
546 unsigned int dstBufAddrOffset
;
547 unsigned int dstBufAddrOffsetMask
;
558 unsigned int *fileSize
;
559 unsigned int *result
;
560 unsigned int *cycleCount
;
565 unsigned long startAddr
;//In :
567 unsigned long result
;// 0 : out of pmem range, 1 : inside pmem range, 2 : partially overlap with pmem range
570 //====================================================================================
576 unsigned int *pFileSize
;
577 unsigned int *pResult
;
578 unsigned int *pCycleCount
;
589 // unsigned int srcBufferAddr; // YUV420: Luma
590 // unsigned int srcChromaAddr;
591 // unsigned int dstBufferAddr;
592 // unsigned int dstBufferSize;
594 // unsigned int srcWidth;
595 // unsigned int srcHeight;
597 // unsigned char enableEXIF;
598 // unsigned char disableGMC; //not support
600 // unsigned int restartInterval;
601 // unsigned int quality;
602 // unsigned int yuvFormat;
608 //======================================================================================
616 #define JPEG_IOCTL_MAGIC 'x'
619 #define JPEG_DEC_IOCTL_INIT _IO (JPEG_IOCTL_MAGIC, 1)
620 //#define JPEG_DEC_IOCTL_CONFIG _IOW (JPEG_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN)
621 #define JPEG_DEC_IOCTL_START _IO (JPEG_IOCTL_MAGIC, 3)
622 #define JPEG_DEC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 6, JPEG_DEC_DRV_OUT)
623 #define JPEG_DEC_IOCTL_DEINIT _IO (JPEG_IOCTL_MAGIC, 8)
624 //#define JPEG_DEC_IOCTL_RESUME _IOW(JPEG_IOCTL_MAGIC, 4, JPEG_DEC_RESUME_IN)
625 //#define JPEG_DEC_IOCTL_RANGE _IOWR(JPEG_IOCTL_MAGIC, 5, JPEG_DEC_RANGE_IN)
626 //#define JPEG_DEC_IOCTL_COPY _IOWR(JPEG_IOCTL_MAGIC, 7, int)
629 ///////////////////// JPEG DEC IOCTL /////////////////////////////////////
630 #define JPEG_DEC_IOCTL_INIT _IO (JPEG_IOCTL_MAGIC, 1)
631 #define JPEG_DEC_IOCTL_CONFIG _IOW (JPEG_IOCTL_MAGIC, 2, JPEG_DEC_DRV_IN)
632 #define JPEG_DEC_IOCTL_FLOW _IOW (JPEG_IOCTL_MAGIC, 3, JpegDrvDecFlow)
633 #define JPEG_DEC_IOCTL_START _IO (JPEG_IOCTL_MAGIC, 4)
634 #define JPEG_DEC_IOCTL_WAIT _IOWR (JPEG_IOCTL_MAGIC, 5, JPEG_DEC_DRV_OUT)
635 #define JPEG_DEC_IOCTL_DEINIT _IO (JPEG_IOCTL_MAGIC, 6)
637 #define JPEG_DEC_IOCTL_RESET _IO (JPEG_IOCTL_MAGIC, 7)
638 #define JPEG_DEC_IOCTL_CHKSUM _IOWR (JPEG_IOCTL_MAGIC, 8, JpegDrvDecResult)
639 #define JPEG_DEC_IOCTL_BREAK _IO (JPEG_IOCTL_MAGIC, 9)
640 #define JPEG_DEC_IOCTL_RW_REG _IO (JPEG_IOCTL_MAGIC, 10)
641 #define JPEG_DEC_IOCTL_RESUME _IOW (JPEG_IOCTL_MAGIC, 11, JPEG_DEC_CONFIG_ROW)
643 #define JPEG_DEC_IOCTL_DUMP_REG _IO (JPEG_IOCTL_MAGIC, 30)
644 //#define JPEG_DEC_IOCTL_MAN_GDMA _IOW (JPEG_IOCTL_MAGIC, 31, unsigned char)
648 ///////////////////// JPEG ENC IOCTL /////////////////////////////////////
651 #define JPEG_ENC_IOCTL_INIT _IO (JPEG_IOCTL_MAGIC, 11)
652 #define JPEG_ENC_IOCTL_CONFIG _IOW (JPEG_IOCTL_MAGIC, 12, JPEG_ENC_DRV_IN)
653 #define JPEG_ENC_IOCTL_WAIT _IOWR(JPEG_IOCTL_MAGIC, 13, JPEG_ENC_DRV_OUT)
654 #define JPEG_ENC_IOCTL_DEINIT _IO (JPEG_IOCTL_MAGIC, 14)
655 #define JPEG_ENC_IOCTL_START _IO (JPEG_IOCTL_MAGIC, 15)
658 #define JPEG_ENC_IOCTL_WARM_RESET _IO(JPEG_IOCTL_MAGIC, 20)
659 #define JPEG_ENC_IOCTL_DUMP_REG _IO(JPEG_IOCTL_MAGIC, 21)
660 #define JPEG_ENC_IOCTL_RW_REG _IO(JPEG_IOCTL_MAGIC, 22)