xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v2/drv/jpd_ex/drvJPD.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// @file   drvJPD.h
98*53ee8cc1Swenshuai.xi /// @brief  JPD Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #ifndef _DRV_JPD_H_
103*53ee8cc1Swenshuai.xi #define _DRV_JPD_H_
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #include "jpeg_def.h"
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi #ifdef __cplusplus
109*53ee8cc1Swenshuai.xi extern "C"
110*53ee8cc1Swenshuai.xi {
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi //  Macro and Define
115*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
116*53ee8cc1Swenshuai.xi #define MSIF_JPD_LIB_CODE                     {'J','P','D','_'}                 ///<Lib code
117*53ee8cc1Swenshuai.xi #define MSIF_JPD_LIBVER                       {'0','1'}                         ///<LIB version
118*53ee8cc1Swenshuai.xi #define MSIF_JPD_BUILDNUM                     {'0','4'}                         ///<Build Number
119*53ee8cc1Swenshuai.xi #define MSIF_JPD_CHANGELIST                   {'0','0','6','1','6','2','3','3'} ///<P4 ChangeList Number
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
123*53ee8cc1Swenshuai.xi /// @brief \b JPD_DRV_VERSION : JPEG Version
124*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
125*53ee8cc1Swenshuai.xi #define JPD_DRV_VERSION                 /* Character String for DRV/API version             */  \
126*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF'                                           */  \
127*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00'                                             */  \
128*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000                                           */  \
129*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000                                           */  \
130*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                                                                  \
131*53ee8cc1Swenshuai.xi     MSIF_CPU,                                                                                   \
132*53ee8cc1Swenshuai.xi     MSIF_JPD_LIB_CODE,                  /* IP__                                             */  \
133*53ee8cc1Swenshuai.xi     MSIF_JPD_LIBVER,                    /* 0.0 ~ Z.Z                                        */  \
134*53ee8cc1Swenshuai.xi     MSIF_JPD_BUILDNUM,                  /* 00 ~ 99                                          */  \
135*53ee8cc1Swenshuai.xi     MSIF_JPD_CHANGELIST,                /* CL#                                              */  \
136*53ee8cc1Swenshuai.xi     MSIF_OS
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi #if 0
139*53ee8cc1Swenshuai.xi #if defined (__aeon__)
140*53ee8cc1Swenshuai.xi #define AEON_NON_CACHE_MASK  0x80000000
141*53ee8cc1Swenshuai.xi #elif defined (MSOS_TYPE_LINUX)
142*53ee8cc1Swenshuai.xi #define AEON_NON_CACHE_MASK  0x0
143*53ee8cc1Swenshuai.xi #else
144*53ee8cc1Swenshuai.xi #define AEON_NON_CACHE_MASK  0xA0000000
145*53ee8cc1Swenshuai.xi #endif
146*53ee8cc1Swenshuai.xi #endif
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi #define JPD_BIT(_bit_)      (1<<(_bit_))
149*53ee8cc1Swenshuai.xi #define JPD_BITMASK(_bits_) (JPD_BIT(((1)?_bits_)+1)-JPD_BIT(((0)?_bits_)))
150*53ee8cc1Swenshuai.xi #define JPD_OFFSET(x)       ((x)<<1)
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi /*****************Config Flag*********************/
153*53ee8cc1Swenshuai.xi //S-Config
154*53ee8cc1Swenshuai.xi #if 1//defined(CHIP_T3) || defined(CHIP_T4) || defined(CHIP_T7) || defined(CHIP_JANUS) || defined(CHIP_U4) || defined(CHIP_T8)  || defined(CHIP_T9) || defined(CHIP_J2)
155*53ee8cc1Swenshuai.xi #define JPD_PSAVE_EN                JPD_BIT(14)
156*53ee8cc1Swenshuai.xi #endif
157*53ee8cc1Swenshuai.xi //#define JPD_SWRST_S4              JPD_BIT(12) // Eris
158*53ee8cc1Swenshuai.xi //#define JPD_SWRST_S4L             JPD_BIT(13) // Titania
159*53ee8cc1Swenshuai.xi #define JPD_SWRST                   JPD_BIT(13) // T1/T2/T3
160*53ee8cc1Swenshuai.xi #define JPD_ROI_EN                  JPD_BIT(11)
161*53ee8cc1Swenshuai.xi #define JPD_SVLD                    JPD_BIT(10)
162*53ee8cc1Swenshuai.xi #define JPD_SUVQ                    JPD_BIT(9)
163*53ee8cc1Swenshuai.xi #define JPD_TBL_RDY                 JPD_BIT(8)
164*53ee8cc1Swenshuai.xi #define JPD_DEC_EN                  JPD_BIT(7)
165*53ee8cc1Swenshuai.xi #define JPD_RST_EN                  JPD_BIT(6)
166*53ee8cc1Swenshuai.xi #define JPD_UV                      JPD_BIT(3)
167*53ee8cc1Swenshuai.xi #define JPD_Y_VSF1                  (0<<2)
168*53ee8cc1Swenshuai.xi #define JPD_Y_VSF2                  JPD_BIT(2)
169*53ee8cc1Swenshuai.xi #define JPD_Y_HSF1                  0x01
170*53ee8cc1Swenshuai.xi #define JPD_Y_HSF2                  0x02
171*53ee8cc1Swenshuai.xi #define JPD_Y_HSF4                  0x03
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi //M-Config
174*53ee8cc1Swenshuai.xi #define JPD_H_VLD                   JPD_BIT(1)
175*53ee8cc1Swenshuai.xi #define JPD_L_VLD                   JPD_BIT(0)
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi //**********************JPD Spare Reg, For ECO usage**********************//
178*53ee8cc1Swenshuai.xi //Enable Redundant stuffing byte X'FF' skipping. (T4,JANUS,T7,U4,T8,T9,...)
179*53ee8cc1Swenshuai.xi /*
180*53ee8cc1Swenshuai.xi [0]: 20091214_fix0: skipping of stuffing byte X'FF' preceding restart marker; 1: fix enabled, 0: fix disabled
181*53ee8cc1Swenshuai.xi [1]: 20091214_fix1: toleration of restart marker index dis-order; 1: fix enabled, 0: fix disabled
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi [3]: reg_20100303_last: fix the problem of jpd will not alert jd2mi_last after miu_reset; 1: enable, 0: disable
184*53ee8cc1Swenshuai.xi [4]: reg_20100303_last_power_save: fix the problem of jpd will not alert jd2mi_last in power saving mode; 1: enable, 0: disable
185*53ee8cc1Swenshuai.xi [5]: reg_20100325_last_done_z : fix the problem of last_done_z; 1: enable, 0: disable
186*53ee8cc1Swenshuai.xi [6]: reg_20101101 : fix the problem of output data lost when clk_miu is far slower than clk_jpd. 1: enable, 0: disable (A1~)
187*53ee8cc1Swenshuai.xi */
188*53ee8cc1Swenshuai.xi #define JPD_RST_STUFF_BYTE_HANDLE       JPD_BIT(0) | JPD_BIT(1) | JPD_BIT(3) | JPD_BIT(4) | JPD_BIT(5) | JPD_BIT(6) | JPD_BIT(7)
189*53ee8cc1Swenshuai.xi #if (JPD_SUPPORT_3_HUFFMAN_TABLE==true)
190*53ee8cc1Swenshuai.xi //Enable JPD 3 Huffman table support
191*53ee8cc1Swenshuai.xi #define JPD_3_HUFFMAN_TABLE_SUPPORT     JPD_BIT(2)
192*53ee8cc1Swenshuai.xi #endif
193*53ee8cc1Swenshuai.xi //************************************************************************//
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
196*53ee8cc1Swenshuai.xi //  Type and Structure
197*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
198*53ee8cc1Swenshuai.xi 
199*53ee8cc1Swenshuai.xi typedef enum
200*53ee8cc1Swenshuai.xi {
201*53ee8cc1Swenshuai.xi     E_HVD_FW_INPUT_SOURCE_NONE,       ///< No input fw.
202*53ee8cc1Swenshuai.xi     E_HVD_FW_INPUT_SOURCE_DRAM,       ///< input source from DRAM.
203*53ee8cc1Swenshuai.xi     E_HVD_FW_INPUT_SOURCE_FLASH,      ///< input source from FLASH.
204*53ee8cc1Swenshuai.xi } HVD_FWInputSourceType;
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi // Chip Define
207*53ee8cc1Swenshuai.xi typedef enum
208*53ee8cc1Swenshuai.xi {
209*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_NONE = 0,
210*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_U3,
211*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_T3,
212*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_T4,
213*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_JANUS,
214*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_U4,
215*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_T8,
216*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_T9,
217*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_T13,
218*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_A1,
219*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_A6,
220*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_A7,
221*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_AMETHYST,
222*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_EAGLE,
223*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_J2,
224*53ee8cc1Swenshuai.xi     E_MJPEG_MSTAR_CHIP_EMERALD,
225*53ee8cc1Swenshuai.xi } MJPEG_MSTAR_CHIP_ID;
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi // JPD event
228*53ee8cc1Swenshuai.xi typedef enum
229*53ee8cc1Swenshuai.xi {
230*53ee8cc1Swenshuai.xi     E_JPD_EVENT_DEC_DONE    = 0x01
231*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_ECS_ERROR   = 0x02
232*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_IS_ERROR    = 0x04
233*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_RST_ERROR   = 0x08
234*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_MRBL_DONE   = 0x10
235*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_MRBH_DONE   = 0x20
236*53ee8cc1Swenshuai.xi #if (JPD_SUPPORT_AUTO_PROTECT==true)
237*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_MWB_FULL    = 0x40
238*53ee8cc1Swenshuai.xi #endif
239*53ee8cc1Swenshuai.xi   , E_JPD_EVENT_ERROR_MASK  = 0x0E
240*53ee8cc1Swenshuai.xi } JPD_Event;
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi // JPD Downscale Ratio
244*53ee8cc1Swenshuai.xi // Bellows are 1, 1/2, 1/4 and 1/8 in order
245*53ee8cc1Swenshuai.xi typedef enum
246*53ee8cc1Swenshuai.xi {
247*53ee8cc1Swenshuai.xi     E_JPD_DOWNSCALE_ORG     = 0x00
248*53ee8cc1Swenshuai.xi   , E_JPD_DOWNSCALE_HALF    = 0x01
249*53ee8cc1Swenshuai.xi   , E_JPD_DOWNSCALE_FOURTH  = 0x02
250*53ee8cc1Swenshuai.xi   , E_JPD_DOWNSCALE_EIGHTH  = 0x03
251*53ee8cc1Swenshuai.xi } JPD_DownScale;
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi // Mimic fwJPD_if.h
254*53ee8cc1Swenshuai.xi typedef enum
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi     // Invalid cmd
257*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_INVALID = 0xffffffffUL,
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_GO                             = 0x00, // Start to show
260*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_START_ADDR      = 0x01, // Set frame buffer address
261*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_UNIT_SIZE       = 0x02, // Set frame buffer size
262*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_TOTAL_NUM       = 0x03, // Set total number of frame buffer
263*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_IDX             = 0x04, // Set frame buffer index
264*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_IDX_READY       = 0x05, // Set frame buffer index ready for display
265*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_WIDTH                      = 0x06, // Set frame width
266*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_HEIGHT                     = 0x07, // Set frame height
267*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_PITCH                      = 0x08, // Set pitch
268*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_ID_L                 = 0x09, // Set frame ID_L
269*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_ID_H                 = 0x0A, // Set frame ID_H
270*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_TIMESTAMP                  = 0x0B, // Set Time Stamp
271*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAMERATE                  = 0x0C, // Set FrameRate
272*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAMERATE_BASE             = 0x0D, // Set FrameRate Base
273*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_FRAME_BUFF_IDX_VALID       = 0x0E, // Set frame buffer index available
274*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_CHIP_ID                    = 0x0F, // Set frame buffer index available
275*53ee8cc1Swenshuai.xi 
276*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_PLAY                           = 0x20, // Play
277*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_PAUSE                          = 0x21, // Pause
278*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_RESUME                         = 0x22, // Resume
279*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_STEP_PLAY                      = 0x23, // Step play
280*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_SPEED_TYPE                 = 0x24, // Set play speed type: default, fast, slow
281*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_SPEED                      = 0x25, // Set play speed
282*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_FLUSH_DISP_QUEUE               = 0X26, // Flush display queue
283*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_FREEZE_DISP                    = 0x27, // Freeze display
284*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_ENABLE_AVSYNC                  = 0x28, // Enable AV sync
285*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_AVSYNC_DELAY               = 0x29, // Set AV sync delay
286*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_AVSYNC_TOLERENCE           = 0x2A, // Set AV sync tolerence
287*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_PTS_BASE                   = 0x2B, // Set PTS base
288*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_STC_BASE                   = 0x2C, // Set STC base
289*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_BLUE_SCREEN                = 0x2D, // Set Blue Screen
290*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_PUSH_QUEUE_PARA_SETTING        = 0x2E,
291*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_SET_DISPLAY_OUTSIDE_MODE       = 0x2F,
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_GET_NEXT_FREE_FRAME_BUFF_IDX   = 0x40, // Get next free frame buffer index
294*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_COMPENSATE_PTS                 = 0x41, // Ask firmware to compensate PTS
295*53ee8cc1Swenshuai.xi 
296*53ee8cc1Swenshuai.xi     // Display Command Queue
297*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_ENABLE_DISP_CMD_QUEUE          = 0x80, // Enable Display Command Queue
298*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_PUSH_DISP_CMD                  = 0x81, // Push Display Command
299*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_GET_DISP_CMD_Q_VACANCY         = 0x82, // Check if the display command queue full or not
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_STEP_PLAY_DONE              = 0xFF, //
302*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_DISP_FINISH                 = 0xFE, //
303*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_PLAYING                     = 0xFC, //
304*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_DISPLAY_QUEUE_FULL          = 0xFB, //
305*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_AVSYNC_ON                   = 0xFA, //
306*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_REACH_AVSYNC                = 0xF9, //
307*53ee8cc1Swenshuai.xi     E_MJPEG_CMD_IS_FLUSH_DONE                  = 0xF8, // Check if flush done
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi } MJPEG_User_Cmd;
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi // JPD debug level enum
312*53ee8cc1Swenshuai.xi typedef enum
313*53ee8cc1Swenshuai.xi {
314*53ee8cc1Swenshuai.xi     E_JPD_DEBUG_DRV_NONE = 0x0
315*53ee8cc1Swenshuai.xi   , E_JPD_DEBUG_DRV_MSG  = 0x02
316*53ee8cc1Swenshuai.xi   , E_JPD_DEBUG_DRV_ERR  = 0x08
317*53ee8cc1Swenshuai.xi } JPD_DrvDbgLevel;
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi typedef enum
320*53ee8cc1Swenshuai.xi {
321*53ee8cc1Swenshuai.xi     E_JPD_FAILED        = 0
322*53ee8cc1Swenshuai.xi   , E_JPD_OK            = 1
323*53ee8cc1Swenshuai.xi   , E_JPD_INVALID_PARAM = 2
324*53ee8cc1Swenshuai.xi } JPD_Return;
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi /// frame information
327*53ee8cc1Swenshuai.xi typedef struct
328*53ee8cc1Swenshuai.xi {
329*53ee8cc1Swenshuai.xi     MS_PHYADDR u32LumaAddr;     /// frame buffer base + the start offset of current displayed luma data. Unit: byte.
330*53ee8cc1Swenshuai.xi     MS_PHYADDR u32ChromaAddr;   /// frame buffer base + the start offset of current displayed chroma data. Unit: byte.
331*53ee8cc1Swenshuai.xi     MS_U32 u32TimeStamp;        /// Time stamp(DTS, PTS) of current displayed frame. Unit: ms (todo: 90khz)
332*53ee8cc1Swenshuai.xi     MS_U32 u32ID_L;              /// low part of ID number
333*53ee8cc1Swenshuai.xi     MS_U32 u32ID_H;              /// high part of ID number
334*53ee8cc1Swenshuai.xi     MS_U16 u16Pitch;             /// pitch
335*53ee8cc1Swenshuai.xi     MS_U16 u16Width;             /// width
336*53ee8cc1Swenshuai.xi     MS_U16 u16Height;            /// hight
337*53ee8cc1Swenshuai.xi     MS_U32 eFrameType;///< Frame type: I, P, B frame
338*53ee8cc1Swenshuai.xi } MJPEG_DRV_FrameInfo;
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi typedef enum
341*53ee8cc1Swenshuai.xi {
342*53ee8cc1Swenshuai.xi     E_MJPEG_DRV_STREAM_NONE = 0,
343*53ee8cc1Swenshuai.xi     E_MJPEG_DRV_MAIN_STREAM,
344*53ee8cc1Swenshuai.xi     E_MJPEG_DRV_SUB_STREAM
345*53ee8cc1Swenshuai.xi } MJPEG_DRV_StreamType;
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi typedef enum
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi     E_JPD_JPD1,
350*53ee8cc1Swenshuai.xi     E_JPD_JPD2,
351*53ee8cc1Swenshuai.xi     E_JPD_JPD_TOTAL       // Do not remove this one
352*53ee8cc1Swenshuai.xi } JPD_Number;
353*53ee8cc1Swenshuai.xi 
354*53ee8cc1Swenshuai.xi // JPD Interrupt Register Function
355*53ee8cc1Swenshuai.xi typedef void (*JPD_IsrFuncCb)(void);
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
358*53ee8cc1Swenshuai.xi // Structure for buffer
359*53ee8cc1Swenshuai.xi typedef struct
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi     MS_PHYADDR u32ThumbnailBufAddr;
362*53ee8cc1Swenshuai.xi     MS_U32 u32ThumbnailBufSize;
363*53ee8cc1Swenshuai.xi     MS_U32 u32ThumbnailBufOffset;
364*53ee8cc1Swenshuai.xi     MS_PHYADDR u32MRCBufAddr; // MRC buffer address
365*53ee8cc1Swenshuai.xi     MS_U32 u32MRCBufSize; // MRC buffer size
366*53ee8cc1Swenshuai.xi     MS_U32 u32MRCBufOffset; // MRC access byte address offset in MRC buffer relative to MRC start address
367*53ee8cc1Swenshuai.xi     MS_PHYADDR u32MWCBufAddr; // MWC buffer address
368*53ee8cc1Swenshuai.xi     MS_U16 u16MWCBufLineNum; // MWC Line number
369*53ee8cc1Swenshuai.xi     MS_BOOL bProgressive;
370*53ee8cc1Swenshuai.xi     MS_BOOL bThumbnailAccessMode;
371*53ee8cc1Swenshuai.xi } JPD_BufCfg;
372*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
373*53ee8cc1Swenshuai.xi // Structure for Grpinf of Table IndirectAccess
374*53ee8cc1Swenshuai.xi typedef struct
375*53ee8cc1Swenshuai.xi {
376*53ee8cc1Swenshuai.xi     MS_U8 *u8DcLumaSymbol;
377*53ee8cc1Swenshuai.xi     MS_U16 *u16DcLumaCode;
378*53ee8cc1Swenshuai.xi     MS_U8 *u8DcChromaSymbol;
379*53ee8cc1Swenshuai.xi     MS_U16 *u16DcChromaCode;
380*53ee8cc1Swenshuai.xi     MS_U8 *u8DcChroma2Symbol;
381*53ee8cc1Swenshuai.xi     MS_U16 *u16DcChroma2Code;
382*53ee8cc1Swenshuai.xi     MS_U8 *u8AcLumaSymbol;
383*53ee8cc1Swenshuai.xi     MS_U16 *u16AcLumaCode;
384*53ee8cc1Swenshuai.xi     MS_U8 *u8AcChromaSymbol;
385*53ee8cc1Swenshuai.xi     MS_U16 *u16AcChromaCode;
386*53ee8cc1Swenshuai.xi     MS_U8 *u8AcChroma2Symbol;
387*53ee8cc1Swenshuai.xi     MS_U16 *u16AcChroma2Code;
388*53ee8cc1Swenshuai.xi     MS_BOOL DHT;
389*53ee8cc1Swenshuai.xi     MS_BOOL bUVHuffman;
390*53ee8cc1Swenshuai.xi } JPD_Grpinf;
391*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
392*53ee8cc1Swenshuai.xi // Structure for Symidx of Table Indirect Access
393*53ee8cc1Swenshuai.xi typedef struct
394*53ee8cc1Swenshuai.xi {
395*53ee8cc1Swenshuai.xi     MS_U8 *u8DcLumaHuffVal;
396*53ee8cc1Swenshuai.xi     MS_U8 *u8DcChromaHuffVal;
397*53ee8cc1Swenshuai.xi     MS_U8 *u8DcChroma2HuffVal;
398*53ee8cc1Swenshuai.xi     MS_U8 *u8AcLumaHuffVal;
399*53ee8cc1Swenshuai.xi     MS_U8 *u8AcChromaHuffVal;
400*53ee8cc1Swenshuai.xi     MS_U8 *u8AcChroma2HuffVal;
401*53ee8cc1Swenshuai.xi     MS_BOOL DHT;
402*53ee8cc1Swenshuai.xi     MS_BOOL bUVHuffman;
403*53ee8cc1Swenshuai.xi } JPD_Symidx;
404*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
405*53ee8cc1Swenshuai.xi // Structure for Quantization Table
406*53ee8cc1Swenshuai.xi typedef struct
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi     MS_U16 s16Value[64];
409*53ee8cc1Swenshuai.xi     MS_BOOL bValid;
410*53ee8cc1Swenshuai.xi } JPD_QuanTbl;
411*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
412*53ee8cc1Swenshuai.xi // Structure for IQtbl of Table Indirect Access
413*53ee8cc1Swenshuai.xi typedef struct
414*53ee8cc1Swenshuai.xi {
415*53ee8cc1Swenshuai.xi     MS_U8 *u8CompQuant;
416*53ee8cc1Swenshuai.xi     JPD_QuanTbl *QuantTables;
417*53ee8cc1Swenshuai.xi     MS_U8 u8CompNum;
418*53ee8cc1Swenshuai.xi     MS_BOOL DQT;
419*53ee8cc1Swenshuai.xi } JPD_IQTbl;
420*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
421*53ee8cc1Swenshuai.xi // Structure for JPD capability
422*53ee8cc1Swenshuai.xi typedef struct
423*53ee8cc1Swenshuai.xi {
424*53ee8cc1Swenshuai.xi     MS_BOOL bBaseline;
425*53ee8cc1Swenshuai.xi     MS_BOOL bProgressive;
426*53ee8cc1Swenshuai.xi     MS_BOOL bMJPEG;
427*53ee8cc1Swenshuai.xi } JPD_Cap;
428*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
429*53ee8cc1Swenshuai.xi // Structure for JPD Information
430*53ee8cc1Swenshuai.xi typedef struct
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi     MS_U8* pu8HalVer;
433*53ee8cc1Swenshuai.xi     MS_U8* pu8FwVer;
434*53ee8cc1Swenshuai.xi     JPD_Cap stCap;
435*53ee8cc1Swenshuai.xi } JPD_Info;
436*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
437*53ee8cc1Swenshuai.xi // Structure for JPD Status
438*53ee8cc1Swenshuai.xi typedef struct
439*53ee8cc1Swenshuai.xi {
440*53ee8cc1Swenshuai.xi     MS_U32  u32CurMRCAddr;
441*53ee8cc1Swenshuai.xi     MS_U16  u16CurVidx;
442*53ee8cc1Swenshuai.xi     MS_U16  u16CurRow;
443*53ee8cc1Swenshuai.xi     MS_U16  u16CurCol;
444*53ee8cc1Swenshuai.xi     MS_BOOL bIsBusy;
445*53ee8cc1Swenshuai.xi     MS_BOOL bIsrEnable;
446*53ee8cc1Swenshuai.xi } JPD_Status;
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
449*53ee8cc1Swenshuai.xi //  Function and Variable
450*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
451*53ee8cc1Swenshuai.xi //void MDrv_JPD_Initialize(MS_U8 u8ChipType);
452*53ee8cc1Swenshuai.xi void MDrv_JPD_InitBuf(JPD_BufCfg in);
453*53ee8cc1Swenshuai.xi //void MDrv_JPD_Reset(void);
454*53ee8cc1Swenshuai.xi //void MDrv_JPD_SW_Pause_Reset(void);
455*53ee8cc1Swenshuai.xi void MDrv_JPD_Rst(void);
456*53ee8cc1Swenshuai.xi void MDrv_JPD_Rst_SVLD(void);
457*53ee8cc1Swenshuai.xi //MS_U16 MDrv_JPD_GetSWResetMask(void);
458*53ee8cc1Swenshuai.xi //void MDrv_JPD_SetReadBuffer(MS_U32 u32BufAddr, MS_U32 u32BufSize);
459*53ee8cc1Swenshuai.xi //void MDrv_JPD_SetMRCStartAddr(MS_U32 u32ByteOffset);
460*53ee8cc1Swenshuai.xi //void MDrv_JPD_SetOutputFrameBuffer(MS_U32 u32BufAddr);
461*53ee8cc1Swenshuai.xi void MDrv_JPD_SetPicDimension(MS_U16 u16Width, MS_U16 u16Height);
462*53ee8cc1Swenshuai.xi //MS_U16 MDrv_JPD_ReadJPDStatus(void);
463*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_GetEventFlag(void);
464*53ee8cc1Swenshuai.xi //void MDrv_JPD_ClearJPDStatus(MS_U16 status_bit);
465*53ee8cc1Swenshuai.xi void MDrv_JPD_SetEventFlag(MS_U16 u16Value);
466*53ee8cc1Swenshuai.xi void MDrv_JPD_SetROI(MS_U16 start_x, MS_U16 start_y, MS_U16 width, MS_U16 height);
467*53ee8cc1Swenshuai.xi //void MDrv_JPD_SetClock(MS_U8 on);
468*53ee8cc1Swenshuai.xi void MDrv_JPD_PowerOn(void);
469*53ee8cc1Swenshuai.xi void MDrv_JPD_PowerOff(void);
470*53ee8cc1Swenshuai.xi #if 0 // unused function
471*53ee8cc1Swenshuai.xi MS_U32 MDrv_JPD_ReadCurrentMRCAddr(void);
472*53ee8cc1Swenshuai.xi #endif
473*53ee8cc1Swenshuai.xi void MDrv_JPD_SetRSTIntv(MS_U16 u16Value);
474*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_GetCurVidx(void);
475*53ee8cc1Swenshuai.xi 
476*53ee8cc1Swenshuai.xi void MDrv_JPD_WriteGrpinf(JPD_Grpinf in);
477*53ee8cc1Swenshuai.xi void MDrv_JPD_WriteSymidx(JPD_Symidx in);
478*53ee8cc1Swenshuai.xi void MDrv_JPD_WriteIQTbl(JPD_IQTbl in);
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi void MDrv_JPD_Set_M_Config(MS_U16 u16Value);
481*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_Get_M_Config(void);
482*53ee8cc1Swenshuai.xi void MDrv_JPD_Set_S_Config(MS_U16 u16Value);
483*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_Get_S_Config(void);
484*53ee8cc1Swenshuai.xi void MDrv_JPD_SetDbgLevel(MS_U8 u8DbgLevel);
485*53ee8cc1Swenshuai.xi void MDrv_JPD_GetInfo(JPD_Info *pJPD_Info);
486*53ee8cc1Swenshuai.xi JPD_Status* MDrv_JPD_GetStatus(void);
487*53ee8cc1Swenshuai.xi MS_BOOL MDrv_JPD_GetLibVer(const MSIF_Version **ppVersion);
488*53ee8cc1Swenshuai.xi 
489*53ee8cc1Swenshuai.xi MS_BOOL MDrv_JPD_EnableISR(JPD_IsrFuncCb IsrCb);
490*53ee8cc1Swenshuai.xi MS_BOOL MDrv_JPD_DisableISR(void);
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi MS_U32 MDrv_JPD_GetCurMRCAddr(void);
493*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_GetCurRow(void);
494*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_GetCurCol(void);
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi #if (JPD_SUPPORT_AUTO_PROTECT==true)
497*53ee8cc1Swenshuai.xi void MDrv_JPD_SetAutoProtect(MS_BOOL enable);
498*53ee8cc1Swenshuai.xi void MDrv_JPD_SetWPENEndAddr(MS_PHYADDR u32ByteOffset);
499*53ee8cc1Swenshuai.xi #else
500*53ee8cc1Swenshuai.xi #if 1//defined(CHIP_T3) || defined(CHIP_T4) || defined(CHIP_T7) || defined(CHIP_JANUS) || defined(CHIP_U4) || defined(CHIP_T8)  || defined(CHIP_T9) || defined(CHIP_J2)
501*53ee8cc1Swenshuai.xi void MDrv_JPD_SetWriteProtect(MS_BOOL enable);
502*53ee8cc1Swenshuai.xi #endif
503*53ee8cc1Swenshuai.xi #endif
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi void MDrv_JPD_SetSpare(MS_U16 u16Value);
506*53ee8cc1Swenshuai.xi MS_U16 MDrv_JPD_GetSpare(void);
507*53ee8cc1Swenshuai.xi void MDrv_JPD_PrintGTable(void);
508*53ee8cc1Swenshuai.xi void MDrv_JPD_PrintHTable(void);
509*53ee8cc1Swenshuai.xi void MDrv_JPD_PrintQTable(void);
510*53ee8cc1Swenshuai.xi void MDrv_JPD_Debug(void);
511*53ee8cc1Swenshuai.xi 
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi #ifdef __cplusplus
514*53ee8cc1Swenshuai.xi }
515*53ee8cc1Swenshuai.xi #endif
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi #endif // _DRV_JPD_H_
518*53ee8cc1Swenshuai.xi 
519