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 drvNJPD.c
98*53ee8cc1Swenshuai.xi /// @brief NJPD Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
104*53ee8cc1Swenshuai.xi // Include Files
105*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi // Common Definition
107*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
108*53ee8cc1Swenshuai.xi #include <linux/string.h>
109*53ee8cc1Swenshuai.xi #else
110*53ee8cc1Swenshuai.xi #include <string.h>
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi
113*53ee8cc1Swenshuai.xi #include "MsCommon.h"
114*53ee8cc1Swenshuai.xi #include "MsVersion.h"
115*53ee8cc1Swenshuai.xi #include "MsOS.h"
116*53ee8cc1Swenshuai.xi #include "halCHIP.h"
117*53ee8cc1Swenshuai.xi // Internal Definition
118*53ee8cc1Swenshuai.xi //#include "regCHIP.h"
119*53ee8cc1Swenshuai.xi #include "njpeg_def.h"
120*53ee8cc1Swenshuai.xi #include "osalNJPD.h"
121*53ee8cc1Swenshuai.xi #include "drvNJPD.h"
122*53ee8cc1Swenshuai.xi #include "regNJPD.h"
123*53ee8cc1Swenshuai.xi #include "halNJPD.h"
124*53ee8cc1Swenshuai.xi
125*53ee8cc1Swenshuai.xi #if (defined CONFIG_MLOG)
126*53ee8cc1Swenshuai.xi #include "ULog.h"
127*53ee8cc1Swenshuai.xi #endif
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi // Driver Compiler Options
131*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Local Defines
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi //NJPD driver debug macro
137*53ee8cc1Swenshuai.xi #if (defined CONFIG_MLOG)
138*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_MSG(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_MSG) ULOGI("NJPD", format, ##args);}while(0)
139*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_ERR(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_ERR) ULOGE("NJPD", format, ##args);}while(0)
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi #else
142*53ee8cc1Swenshuai.xi
143*53ee8cc1Swenshuai.xi #ifndef ANDROID
144*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_MSG(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_MSG) printf(format, ##args);}while(0)
145*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_ERR(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_ERR) printf(format, ##args);}while(0)
146*53ee8cc1Swenshuai.xi #else
147*53ee8cc1Swenshuai.xi #define LOG_TAG "DRV_JPD"
148*53ee8cc1Swenshuai.xi #include <cutils/log.h>
149*53ee8cc1Swenshuai.xi #ifndef LOGD
150*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_MSG(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_MSG) ALOGI(format, ##args);}while(0)
151*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_ERR(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_ERR) ALOGE(format, ##args);}while(0)
152*53ee8cc1Swenshuai.xi #else
153*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_MSG(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_MSG) LOGI(format, ##args);}while(0)
154*53ee8cc1Swenshuai.xi #define NJPD_DEBUG_DRV_ERR(format, args...) do{if(u8NJPD_DrvDbgLevel & E_NJPD_DEBUG_DRV_ERR) LOGE(format, ##args);}while(0)
155*53ee8cc1Swenshuai.xi #endif
156*53ee8cc1Swenshuai.xi
157*53ee8cc1Swenshuai.xi #endif
158*53ee8cc1Swenshuai.xi #endif
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi #ifndef UNUSED
161*53ee8cc1Swenshuai.xi #define UNUSED(x) ((x)=(x))
162*53ee8cc1Swenshuai.xi #endif
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi #define ENABLE_FF00FFD_TO_FFFFFFD FALSE
165*53ee8cc1Swenshuai.xi
166*53ee8cc1Swenshuai.xi #if ENABLE_FF00FFD_TO_FFFFFFD
167*53ee8cc1Swenshuai.xi #include "../wdt/drvWDT.h"
168*53ee8cc1Swenshuai.xi #endif
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi #define HVD_FW_MEM_OFFSET 0x100000UL // 1M
171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
172*53ee8cc1Swenshuai.xi // Local Structurs
173*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
174*53ee8cc1Swenshuai.xi
175*53ee8cc1Swenshuai.xi
176*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
177*53ee8cc1Swenshuai.xi // Global Variables
178*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
179*53ee8cc1Swenshuai.xi MS_BOOL gbEnableTurboFWMode = FALSE;
180*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
181*53ee8cc1Swenshuai.xi static MS_BOOL gbCallbackFlag = FALSE;
182*53ee8cc1Swenshuai.xi #endif
183*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
184*53ee8cc1Swenshuai.xi // Local Variables
185*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
186*53ee8cc1Swenshuai.xi static MSIF_Version _drv_jpd_version = {
187*53ee8cc1Swenshuai.xi .DDI = { NJPD_DRV_VERSION },
188*53ee8cc1Swenshuai.xi };
189*53ee8cc1Swenshuai.xi
190*53ee8cc1Swenshuai.xi /* capability */
191*53ee8cc1Swenshuai.xi static NJPD_Cap _stNJPD_Cap = {
192*53ee8cc1Swenshuai.xi TRUE, //support baseline
193*53ee8cc1Swenshuai.xi TRUE, //support progressive
194*53ee8cc1Swenshuai.xi TRUE //support MJPEG
195*53ee8cc1Swenshuai.xi };
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi static NJPD_Status _stNJPD_Status = {
198*53ee8cc1Swenshuai.xi 0, //Current MRC address
199*53ee8cc1Swenshuai.xi 0, //Current decoded Vidx
200*53ee8cc1Swenshuai.xi 0, //Current decoded Row
201*53ee8cc1Swenshuai.xi 0, //Current decoded Col
202*53ee8cc1Swenshuai.xi FALSE, //busy or not
203*53ee8cc1Swenshuai.xi FALSE //Isr is enabled or not
204*53ee8cc1Swenshuai.xi };
205*53ee8cc1Swenshuai.xi
206*53ee8cc1Swenshuai.xi static MS_U8 u8NJPD_DrvDbgLevel = E_NJPD_DEBUG_DRV_NONE;
207*53ee8cc1Swenshuai.xi
208*53ee8cc1Swenshuai.xi
209*53ee8cc1Swenshuai.xi static NJPD_IsrFuncCb _pNJPDIsrCb = NULL;
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi static MS_U32 u32TablePhyAddr[E_NJPD_NJPD_TOTAL];
212*53ee8cc1Swenshuai.xi static MS_BOOL bIs3HuffTbl[E_NJPD_NJPD_TOTAL];
213*53ee8cc1Swenshuai.xi static MS_U8 u8DcLumaCnt[E_NJPD_NJPD_TOTAL];
214*53ee8cc1Swenshuai.xi static MS_U8 u8DcChromaCnt[E_NJPD_NJPD_TOTAL];
215*53ee8cc1Swenshuai.xi static MS_U8 u8DcChroma2Cnt[E_NJPD_NJPD_TOTAL];
216*53ee8cc1Swenshuai.xi static MS_U8 u8AcLumaCnt[E_NJPD_NJPD_TOTAL];
217*53ee8cc1Swenshuai.xi static MS_U8 u8AcChromaCnt[E_NJPD_NJPD_TOTAL];
218*53ee8cc1Swenshuai.xi static MS_U8 u8AcChroma2Cnt[E_NJPD_NJPD_TOTAL];
219*53ee8cc1Swenshuai.xi static JPD_Number eNJPDNum = E_NJPD_NJPD1;
220*53ee8cc1Swenshuai.xi
221*53ee8cc1Swenshuai.xi
222*53ee8cc1Swenshuai.xi static MS_PHY u32MRC0_Start[E_NJPD_NJPD_TOTAL];
223*53ee8cc1Swenshuai.xi static MS_PHY u32MRC0_End[E_NJPD_NJPD_TOTAL];
224*53ee8cc1Swenshuai.xi static MS_PHY u32MRC1_Start[E_NJPD_NJPD_TOTAL];
225*53ee8cc1Swenshuai.xi static MS_PHY u32MRC1_End[E_NJPD_NJPD_TOTAL];
226*53ee8cc1Swenshuai.xi static MS_PHY u32READ_Start[E_NJPD_NJPD_TOTAL];
227*53ee8cc1Swenshuai.xi
228*53ee8cc1Swenshuai.xi
229*53ee8cc1Swenshuai.xi #if 1
230*53ee8cc1Swenshuai.xi // This is for zigzag inverse for njpd
231*53ee8cc1Swenshuai.xi static const MS_U8 _u8Jpeg_zigzag_order[64] =
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi 0, 2, 3, 9, 10, 20, 21, 35,
234*53ee8cc1Swenshuai.xi 1, 4, 8, 11, 19, 22, 34, 36,
235*53ee8cc1Swenshuai.xi 5, 7, 12, 18, 23, 33, 37, 48,
236*53ee8cc1Swenshuai.xi 6, 13, 17, 24, 32, 38, 47, 49,
237*53ee8cc1Swenshuai.xi 14, 16, 25, 31, 39, 46, 50, 57,
238*53ee8cc1Swenshuai.xi 15, 26, 30, 40, 45, 51, 56, 58,
239*53ee8cc1Swenshuai.xi 27, 29, 41, 44, 52, 55, 59, 62,
240*53ee8cc1Swenshuai.xi 28, 42, 43, 53, 54, 60, 61, 63
241*53ee8cc1Swenshuai.xi };
242*53ee8cc1Swenshuai.xi
243*53ee8cc1Swenshuai.xi #else
244*53ee8cc1Swenshuai.xi static const MS_U8 _u8Jpeg_zigzag_order[64] =
245*53ee8cc1Swenshuai.xi {
246*53ee8cc1Swenshuai.xi 0, 1, 5, 6, 14, 15, 27, 28,
247*53ee8cc1Swenshuai.xi 2, 4, 7, 13, 16, 26, 29, 42,
248*53ee8cc1Swenshuai.xi 3, 8, 12, 17, 25, 30, 41, 43,
249*53ee8cc1Swenshuai.xi 9, 11, 18, 24, 31, 40, 44, 53,
250*53ee8cc1Swenshuai.xi 10, 19, 23, 32, 39, 45, 52, 54,
251*53ee8cc1Swenshuai.xi 20, 22, 33, 38, 46, 51, 55, 60,
252*53ee8cc1Swenshuai.xi 21, 34, 37, 47, 50, 56, 59, 61,
253*53ee8cc1Swenshuai.xi 35, 36, 48, 49, 57, 58, 62, 63
254*53ee8cc1Swenshuai.xi };
255*53ee8cc1Swenshuai.xi #endif
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi #if 0
258*53ee8cc1Swenshuai.xi static const MS_U16 g16IQ_TBL[128]=
259*53ee8cc1Swenshuai.xi {
260*53ee8cc1Swenshuai.xi 0x0010,0x000b,0x000a,0x0010,0x0018,0x0028,0x0033,0x003d,
261*53ee8cc1Swenshuai.xi 0x000c,0x000c,0x000e,0x0013,0x001a,0x003a,0x003c,0x0037,
262*53ee8cc1Swenshuai.xi 0x000e,0x000d,0x0010,0x0018,0x0028,0x0039,0x0045,0x0038,
263*53ee8cc1Swenshuai.xi 0x000e,0x0011,0x0016,0x001d,0x0033,0x0057,0x0050,0x003e,
264*53ee8cc1Swenshuai.xi 0x0012,0x0016,0x0025,0x0038,0x0044,0x006d,0x0067,0x004d,
265*53ee8cc1Swenshuai.xi 0x0018,0x0023,0x0037,0x0040,0x0051,0x0068,0x0071,0x005c,
266*53ee8cc1Swenshuai.xi 0x0031,0x0040,0x004e,0x0057,0x0067,0x0079,0x0078,0x0065,
267*53ee8cc1Swenshuai.xi 0x0048,0x005c,0x005f,0x0062,0x0070,0x0064,0x0067,0x0063,
268*53ee8cc1Swenshuai.xi
269*53ee8cc1Swenshuai.xi 0x0011,0x0012,0x0018,0x002f,0x0063,0x0063,0x0063,0x0063,
270*53ee8cc1Swenshuai.xi 0x0012,0x0015,0x001a,0x0042,0x0063,0x0063,0x0063,0x0063,
271*53ee8cc1Swenshuai.xi 0x0018,0x001a,0x0038,0x0063,0x0063,0x0063,0x0063,0x0063,
272*53ee8cc1Swenshuai.xi 0x002f,0x0042,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
273*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
274*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
275*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
276*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063
277*53ee8cc1Swenshuai.xi };
278*53ee8cc1Swenshuai.xi #endif
279*53ee8cc1Swenshuai.xi
280*53ee8cc1Swenshuai.xi static const MS_U16 g16IQ_TBL_NJPD[128]=
281*53ee8cc1Swenshuai.xi {
282*53ee8cc1Swenshuai.xi 0x0010,0x000c,0x000e,0x000e,0x0012,0x0018,0x0031,0x0048,
283*53ee8cc1Swenshuai.xi 0x000b,0x000c,0x000d,0x0011,0x0016,0x0023,0x0040,0x005c,
284*53ee8cc1Swenshuai.xi 0x000a,0x000e,0x0010,0x0016,0x0025,0x0037,0x004e,0x005f,
285*53ee8cc1Swenshuai.xi 0x0010,0x0013,0x0018,0x001d,0x0038,0x0040,0x0057,0x0062,
286*53ee8cc1Swenshuai.xi 0x0018,0x001a,0x0028,0x0033,0x0044,0x0051,0x0067,0x0070,
287*53ee8cc1Swenshuai.xi 0x0028,0x003a,0x0039,0x0057,0x006d,0x0068,0x0079,0x0064,
288*53ee8cc1Swenshuai.xi 0x0033,0x003c,0x0045,0x0050,0x0067,0x0071,0x0078,0x0067,
289*53ee8cc1Swenshuai.xi 0x003d,0x0037,0x0038,0x003e,0x004d,0x005c,0x0065,0x0063,
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi 0x0011,0x0012,0x0018,0x002f,0x0063,0x0063,0x0063,0x0063,
292*53ee8cc1Swenshuai.xi 0x0012,0x0015,0x001a,0x0042,0x0063,0x0063,0x0063,0x0063,
293*53ee8cc1Swenshuai.xi 0x0018,0x001a,0x0038,0x0063,0x0063,0x0063,0x0063,0x0063,
294*53ee8cc1Swenshuai.xi 0x002f,0x0042,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
295*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
296*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
297*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,
298*53ee8cc1Swenshuai.xi 0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063,0x0063
299*53ee8cc1Swenshuai.xi
300*53ee8cc1Swenshuai.xi };
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi
303*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
304*53ee8cc1Swenshuai.xi // Debug Functions
305*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi
308*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
309*53ee8cc1Swenshuai.xi // Local Functions
310*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_NJPD_ISRHandler(MS_U32 IsrNum)311*53ee8cc1Swenshuai.xi static void _NJPD_ISRHandler(MS_U32 IsrNum)
312*53ee8cc1Swenshuai.xi {
313*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("_NJPD_ISRHandler: IsrNum = %td\n", (ptrdiff_t)IsrNum);
314*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
315*53ee8cc1Swenshuai.xi gbCallbackFlag = TRUE;
316*53ee8cc1Swenshuai.xi #else
317*53ee8cc1Swenshuai.xi if(_pNJPDIsrCb)
318*53ee8cc1Swenshuai.xi {
319*53ee8cc1Swenshuai.xi _pNJPDIsrCb();
320*53ee8cc1Swenshuai.xi }
321*53ee8cc1Swenshuai.xi #endif
322*53ee8cc1Swenshuai.xi }
323*53ee8cc1Swenshuai.xi
_NJPD_PrintMem(MS_VIRT u32Addr,MS_U32 u32Size)324*53ee8cc1Swenshuai.xi void _NJPD_PrintMem(MS_VIRT u32Addr, MS_U32 u32Size)
325*53ee8cc1Swenshuai.xi {
326*53ee8cc1Swenshuai.xi MS_U32 u32i;
327*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("===========================================================\n");
328*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print memory addr=0x%tx, size=0x%tx\n", (ptrdiff_t)u32Addr, (ptrdiff_t)u32Size);
329*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("===========================================================\n");
330*53ee8cc1Swenshuai.xi #if 1
331*53ee8cc1Swenshuai.xi for(u32i=0; u32i<u32Size/8+((u32Size%8)? 1:0); u32i++)
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%02x %02x %02x %02x %02x %02x %02x %02x \n",
334*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*8)), *((MS_U8*)(u32Addr+u32i*8+1)), *((MS_U8*)(u32Addr+u32i*8+2)), *((MS_U8*)(u32Addr+u32i*8+3)),
335*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*8+4)), *((MS_U8*)(u32Addr+u32i*8+5)), *((MS_U8*)(u32Addr+u32i*8+6)), *((MS_U8*)(u32Addr+u32i*8+7))
336*53ee8cc1Swenshuai.xi );
337*53ee8cc1Swenshuai.xi }
338*53ee8cc1Swenshuai.xi #else
339*53ee8cc1Swenshuai.xi for(u32i=0; u32i<u32Size/16+((u32Size%16)? 1:0); u32i++)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x \n",
342*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*16)), *((MS_U8*)(u32Addr+u32i*16+1)), *((MS_U8*)(u32Addr+u32i*16+2)), *((MS_U8*)(u32Addr+u32i*16+3)),
343*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*16+4)), *((MS_U8*)(u32Addr+u32i*16+5)), *((MS_U8*)(u32Addr+u32i*16+6)), *((MS_U8*)(u32Addr+u32i*16+7)),
344*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*16+8)), *((MS_U8*)(u32Addr+u32i*16+9)), *((MS_U8*)(u32Addr+u32i*16+10)), *((MS_U8*)(u32Addr+u32i*16+11)),
345*53ee8cc1Swenshuai.xi *((MS_U8*)(u32Addr+u32i*16+12)), *((MS_U8*)(u32Addr+u32i*16+13)), *((MS_U8*)(u32Addr+u32i*16+14)), *((MS_U8*)(u32Addr+u32i*16+15))
346*53ee8cc1Swenshuai.xi );
347*53ee8cc1Swenshuai.xi }
348*53ee8cc1Swenshuai.xi #endif
349*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("===========================================================\n");
350*53ee8cc1Swenshuai.xi }
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
353*53ee8cc1Swenshuai.xi // Global Functions
354*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
355*53ee8cc1Swenshuai.xi
356*53ee8cc1Swenshuai.xi /********************************************************************/
357*53ee8cc1Swenshuai.xi ///Reset NJPD -- Reset must be called before trigger NJPD
358*53ee8cc1Swenshuai.xi ///@param NULL
359*53ee8cc1Swenshuai.xi ///@return none
360*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_Rst(void)361*53ee8cc1Swenshuai.xi void MDrv_NJPD_Rst(void)
362*53ee8cc1Swenshuai.xi {
363*53ee8cc1Swenshuai.xi HAL_NJPD_Rst();
364*53ee8cc1Swenshuai.xi }
365*53ee8cc1Swenshuai.xi
366*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetReadBuffer0(MS_PHY u32BufAddr,MS_U32 u32BufSize)367*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetReadBuffer0(MS_PHY u32BufAddr, MS_U32 u32BufSize)
368*53ee8cc1Swenshuai.xi {
369*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
370*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufAddr, u32BufAddr);
371*53ee8cc1Swenshuai.xi HAL_NJPD_SetMIU(u8MiuSel);
372*53ee8cc1Swenshuai.xi
373*53ee8cc1Swenshuai.xi u32MRC0_Start[eNJPDNum] = u32BufAddr;
374*53ee8cc1Swenshuai.xi
375*53ee8cc1Swenshuai.xi // set start address of read buffer
376*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartLow(u32BufAddr & 0xffffUL);
377*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartHigh(u32BufAddr >> 16);
378*53ee8cc1Swenshuai.xi
379*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] = (( u32BufAddr + u32BufSize ) - 1);
380*53ee8cc1Swenshuai.xi // set end address of read buffer
381*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndLow((( u32BufAddr + u32BufSize ) - 1)& 0xffffUL);
382*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndHigh((( u32BufAddr + u32BufSize ) - 1) >> 16);
383*53ee8cc1Swenshuai.xi
384*53ee8cc1Swenshuai.xi }
385*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetReadBuffer1(MS_PHY u32BufAddr,MS_U32 u32BufSize)386*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetReadBuffer1(MS_PHY u32BufAddr, MS_U32 u32BufSize)
387*53ee8cc1Swenshuai.xi {
388*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
389*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufAddr, u32BufAddr);
390*53ee8cc1Swenshuai.xi HAL_NJPD_SetMIU(u8MiuSel);
391*53ee8cc1Swenshuai.xi
392*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum] = u32BufAddr;
393*53ee8cc1Swenshuai.xi
394*53ee8cc1Swenshuai.xi // set start address of read buffer
395*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartLow(u32BufAddr & 0xffffUL);
396*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartHigh(u32BufAddr >> 16);
397*53ee8cc1Swenshuai.xi
398*53ee8cc1Swenshuai.xi u32MRC1_End[eNJPDNum] = (( u32BufAddr + u32BufSize ) - 1);
399*53ee8cc1Swenshuai.xi // set end address of read buffer
400*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndLow((( u32BufAddr + u32BufSize ) - 1)& 0xffffUL);
401*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndHigh((( u32BufAddr + u32BufSize ) - 1) >> 16);
402*53ee8cc1Swenshuai.xi
403*53ee8cc1Swenshuai.xi }
404*53ee8cc1Swenshuai.xi
405*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetMRCStartAddr(MS_PHY u32ByteOffset)406*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetMRCStartAddr(MS_PHY u32ByteOffset)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
409*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
410*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
411*53ee8cc1Swenshuai.xi
412*53ee8cc1Swenshuai.xi u32READ_Start[eNJPDNum] =u32ByteOffset;
413*53ee8cc1Swenshuai.xi
414*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCStart_Low((u32ByteOffset & 0xffffUL));
415*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCStart_High((u32ByteOffset >> 16));
416*53ee8cc1Swenshuai.xi }
417*53ee8cc1Swenshuai.xi
MDrv_NJPD_GetMWCStartAddr(void)418*53ee8cc1Swenshuai.xi MS_U32 MDrv_NJPD_GetMWCStartAddr(void)
419*53ee8cc1Swenshuai.xi {
420*53ee8cc1Swenshuai.xi MS_U32 u32Addr;
421*53ee8cc1Swenshuai.xi u32Addr = (((MS_U32)HAL_NJPD_GetMWCBuf_StartHigh())<<16 | HAL_NJPD_GetMWCBuf_StartLow());
422*53ee8cc1Swenshuai.xi return u32Addr;
423*53ee8cc1Swenshuai.xi }
424*53ee8cc1Swenshuai.xi
MDrv_NJPD_GetWritePtrAddr(void)425*53ee8cc1Swenshuai.xi MS_U32 MDrv_NJPD_GetWritePtrAddr(void)
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi MS_U32 u32Addr;
428*53ee8cc1Swenshuai.xi u32Addr = (((MS_U32)HAL_NJPD_GetMWCBuf_WritePtrHigh())<<16 | HAL_NJPD_GetMWCBuf_WritePtrLow());
429*53ee8cc1Swenshuai.xi return u32Addr;
430*53ee8cc1Swenshuai.xi }
431*53ee8cc1Swenshuai.xi
432*53ee8cc1Swenshuai.xi #if SUPPORT_HIGH_LOW_REVERSE
MDrv_NJPD_SetReadBuffer_Patch(MS_PHY u32BufAddr,MS_U32 u32BufSize,MS_PHY u32BufStartAddr)433*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_SetReadBuffer_Patch(MS_PHY u32BufAddr, MS_U32 u32BufSize, MS_PHY u32BufStartAddr)
434*53ee8cc1Swenshuai.xi {
435*53ee8cc1Swenshuai.xi MS_BOOL bHighLowReverse = FALSE;
436*53ee8cc1Swenshuai.xi MS_U8 u8i;
437*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
438*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufAddr, u32BufAddr);
439*53ee8cc1Swenshuai.xi HAL_NJPD_SetMIU(u8MiuSel);
440*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufStartAddr, u32BufStartAddr);
441*53ee8cc1Swenshuai.xi
442*53ee8cc1Swenshuai.xi u32READ_Start[eNJPDNum] =u32BufStartAddr;
443*53ee8cc1Swenshuai.xi
444*53ee8cc1Swenshuai.xi MDrv_NJPD_SetMRCStartAddr(u32READ_Start[eNJPDNum]);
445*53ee8cc1Swenshuai.xi if(u32BufStartAddr >= u32BufAddr+u32BufSize/2)
446*53ee8cc1Swenshuai.xi {
447*53ee8cc1Swenshuai.xi bHighLowReverse = TRUE;
448*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum] = u32BufAddr;
449*53ee8cc1Swenshuai.xi u32MRC1_End[eNJPDNum] = (( u32BufAddr + u32BufSize/2 ) - 1);
450*53ee8cc1Swenshuai.xi u32MRC0_Start[eNJPDNum] = u32BufAddr + u32BufSize/2;
451*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] = (( u32BufAddr + u32BufSize ) - 1);
452*53ee8cc1Swenshuai.xi for(u8i=0; u8i<16; u8i++)
453*53ee8cc1Swenshuai.xi {
454*53ee8cc1Swenshuai.xi if((( ( u32MRC1_End[eNJPDNum]/16 - u32READ_Start[eNJPDNum]/16 ) + 1 ) % 16 == 1) ||
455*53ee8cc1Swenshuai.xi (( ( u32MRC1_End[eNJPDNum]/16 - u32MRC1_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) ||
456*53ee8cc1Swenshuai.xi (( ( u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) )
457*53ee8cc1Swenshuai.xi {
458*53ee8cc1Swenshuai.xi u32MRC1_End[eNJPDNum] += 16;
459*53ee8cc1Swenshuai.xi u32MRC0_Start[eNJPDNum]+=16;
460*53ee8cc1Swenshuai.xi }
461*53ee8cc1Swenshuai.xi else
462*53ee8cc1Swenshuai.xi {
463*53ee8cc1Swenshuai.xi break;
464*53ee8cc1Swenshuai.xi }
465*53ee8cc1Swenshuai.xi }
466*53ee8cc1Swenshuai.xi }
467*53ee8cc1Swenshuai.xi else
468*53ee8cc1Swenshuai.xi {
469*53ee8cc1Swenshuai.xi u32MRC0_Start[eNJPDNum] = u32BufAddr;
470*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] = (( u32BufAddr + u32BufSize/2 ) - 1);
471*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum] = u32BufAddr + u32BufSize/2;
472*53ee8cc1Swenshuai.xi u32MRC1_End[eNJPDNum] = (( u32BufAddr + u32BufSize ) - 1);
473*53ee8cc1Swenshuai.xi for(u8i=0; u8i<16; u8i++)
474*53ee8cc1Swenshuai.xi {
475*53ee8cc1Swenshuai.xi if((( ( u32MRC0_End[eNJPDNum]/16 - u32READ_Start[eNJPDNum]/16 ) + 1 ) % 16 == 1) ||
476*53ee8cc1Swenshuai.xi (( ( u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) ||
477*53ee8cc1Swenshuai.xi (( ( u32MRC1_End[eNJPDNum]/16 - u32MRC1_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) )
478*53ee8cc1Swenshuai.xi {
479*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] += 16;
480*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum]+=16;
481*53ee8cc1Swenshuai.xi }
482*53ee8cc1Swenshuai.xi else
483*53ee8cc1Swenshuai.xi {
484*53ee8cc1Swenshuai.xi break;
485*53ee8cc1Swenshuai.xi }
486*53ee8cc1Swenshuai.xi }
487*53ee8cc1Swenshuai.xi }
488*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartLow(u32MRC0_Start[eNJPDNum] & 0xffffUL);
489*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartHigh(u32MRC0_Start[eNJPDNum] >> 16);
490*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndLow(u32MRC0_End[eNJPDNum]& 0xffffUL);
491*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndHigh(u32MRC0_End[eNJPDNum] >> 16);
492*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartLow(u32MRC1_Start[eNJPDNum] & 0xffffUL);
493*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartHigh(u32MRC1_Start[eNJPDNum] >> 16);
494*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndLow(u32MRC1_End[eNJPDNum] & 0xffffUL);
495*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndHigh(u32MRC1_End[eNJPDNum] >> 16);
496*53ee8cc1Swenshuai.xi
497*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("[offset: MRC0: MRC1]=[%ld, %ld, %ld], u8i=%d\n",
498*53ee8cc1Swenshuai.xi (u32READ_Start[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16,
499*53ee8cc1Swenshuai.xi (u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16,
500*53ee8cc1Swenshuai.xi (u32MRC1_End/16 - u32MRC1_Start/16 +1)%16, u8i
501*53ee8cc1Swenshuai.xi );
502*53ee8cc1Swenshuai.xi return bHighLowReverse;
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi #else
MDrv_NJPD_SetReadBuffer_New(MS_PHY u32BufAddr,MS_U32 u32BufSize,MS_PHY u32BufStartAddr)505*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_SetReadBuffer_New(MS_PHY u32BufAddr, MS_U32 u32BufSize, MS_PHY u32BufStartAddr)
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi MS_BOOL bDifferentHL = FALSE;
508*53ee8cc1Swenshuai.xi
509*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
510*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufAddr, u32BufAddr);
511*53ee8cc1Swenshuai.xi HAL_NJPD_SetMIU(u8MiuSel);
512*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufStartAddr, u32BufStartAddr);
513*53ee8cc1Swenshuai.xi
514*53ee8cc1Swenshuai.xi u32READ_Start[eNJPDNum] =u32BufStartAddr;
515*53ee8cc1Swenshuai.xi
516*53ee8cc1Swenshuai.xi
517*53ee8cc1Swenshuai.xi u32MRC0_Start[eNJPDNum] = u32BufAddr;
518*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] = (( u32BufAddr + u32BufSize/2 ) - 1);
519*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum] = u32BufAddr + u32BufSize/2;
520*53ee8cc1Swenshuai.xi u32MRC1_End[eNJPDNum] = (( u32BufAddr + u32BufSize ) - 1);
521*53ee8cc1Swenshuai.xi if(u32READ_Start[eNJPDNum] > u32MRC0_End[eNJPDNum])
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] = u32READ_Start[eNJPDNum] | 0xF;
524*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum] = u32MRC0_End[eNJPDNum] + 1;
525*53ee8cc1Swenshuai.xi bDifferentHL = TRUE;
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi
528*53ee8cc1Swenshuai.xi MDrv_NJPD_SetMRCStartAddr(u32READ_Start[eNJPDNum]);
529*53ee8cc1Swenshuai.xi if(MDrv_NJPD_IsNeedToPatch(E_NJPD_EAGLE_SW_PATCH))
530*53ee8cc1Swenshuai.xi {
531*53ee8cc1Swenshuai.xi MS_U8 u8i;
532*53ee8cc1Swenshuai.xi for(u8i=0; u8i<16; u8i++)
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi if((( ( u32MRC0_End[eNJPDNum]/16 - u32READ_Start[eNJPDNum]/16 ) + 1 ) % 16 == 1) ||
535*53ee8cc1Swenshuai.xi (( ( u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) ||
536*53ee8cc1Swenshuai.xi (( ( u32MRC1_End[eNJPDNum]/16 - u32MRC1_Start[eNJPDNum] /16 ) + 1 ) % 16 == 1) )
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi u32MRC0_End[eNJPDNum] += 16;
539*53ee8cc1Swenshuai.xi u32MRC1_Start[eNJPDNum]+=16;
540*53ee8cc1Swenshuai.xi bDifferentHL = TRUE;
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi else
543*53ee8cc1Swenshuai.xi {
544*53ee8cc1Swenshuai.xi break;
545*53ee8cc1Swenshuai.xi }
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi }
548*53ee8cc1Swenshuai.xi
549*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartLow(u32MRC0_Start[eNJPDNum] & 0xffffUL);
550*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_StartHigh(u32MRC0_Start[eNJPDNum] >> 16);
551*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndLow(u32MRC0_End[eNJPDNum] & 0xffffUL);
552*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf0_EndHigh(u32MRC0_End[eNJPDNum] >> 16);
553*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartLow(u32MRC1_Start[eNJPDNum] & 0xffffUL);
554*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_StartHigh(u32MRC1_Start[eNJPDNum] >> 16);
555*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndLow(u32MRC1_End[eNJPDNum] & 0xffffUL);
556*53ee8cc1Swenshuai.xi HAL_NJPD_SetMRCBuf1_EndHigh(u32MRC1_End[eNJPDNum] >> 16);
557*53ee8cc1Swenshuai.xi
558*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MRC0 start:%tx, MRC0 end:%tx, Offset:%tx\n",
559*53ee8cc1Swenshuai.xi (ptrdiff_t)u32MRC0_Start[eNJPDNum], (ptrdiff_t)u32MRC0_End[eNJPDNum] , (ptrdiff_t)u32READ_Start[eNJPDNum]);
560*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("[offset: MRC0: MRC1]=[%td, %td, %td]\n",
561*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32READ_Start[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16),
562*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16),
563*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32MRC1_End[eNJPDNum]/16 - u32MRC1_Start[eNJPDNum]/16 +1)%16)
564*53ee8cc1Swenshuai.xi );
565*53ee8cc1Swenshuai.xi
566*53ee8cc1Swenshuai.xi
567*53ee8cc1Swenshuai.xi return bDifferentHL;
568*53ee8cc1Swenshuai.xi }
569*53ee8cc1Swenshuai.xi #endif
570*53ee8cc1Swenshuai.xi /******************************************************************************/
571*53ee8cc1Swenshuai.xi ///Set output frame buffer address for NJPD writing NJPEG uncompressed data
572*53ee8cc1Swenshuai.xi ///@param u32BufAddr \b IN Start address for NJPD reading in MRC buffer
573*53ee8cc1Swenshuai.xi ///@return none
574*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_SetOutputFrameBuffer(MS_PHY u32BufAddr,MS_U16 u16LineNum)575*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetOutputFrameBuffer(MS_PHY u32BufAddr, MS_U16 u16LineNum)
576*53ee8cc1Swenshuai.xi {
577*53ee8cc1Swenshuai.xi
578*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
579*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32BufAddr, u32BufAddr);
580*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
581*53ee8cc1Swenshuai.xi
582*53ee8cc1Swenshuai.xi HAL_NJPD_SetMWCBuf_StartLow(u32BufAddr & 0xffffUL);
583*53ee8cc1Swenshuai.xi HAL_NJPD_SetMWCBuf_StartHigh(u32BufAddr >> 16);
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi UNUSED(u16LineNum);
586*53ee8cc1Swenshuai.xi }
587*53ee8cc1Swenshuai.xi
588*53ee8cc1Swenshuai.xi /******************************************************************************/
589*53ee8cc1Swenshuai.xi ///Setting the address of NJPD MRC, MWC buffer
590*53ee8cc1Swenshuai.xi ///@param NJPD_BufCfg \b IN
591*53ee8cc1Swenshuai.xi /// structure {
592*53ee8cc1Swenshuai.xi /// MS_U32 u32ThumbnailBufAddr; \b IN Thumbnail buffer address
593*53ee8cc1Swenshuai.xi /// MS_U32 u32ThumbnailBufSize; \b IN Thumbnail buffer size
594*53ee8cc1Swenshuai.xi /// MS_U32 u32ThumbnailBufOffset; \b IN Access byte address offset in
595*53ee8cc1Swenshuai.xi /// Thumbnail buffer relative to
596*53ee8cc1Swenshuai.xi /// Thumbnail start address
597*53ee8cc1Swenshuai.xi /// MS_U32 u32MRCBufAddr; \b IN MRC buffer address
598*53ee8cc1Swenshuai.xi /// MS_U32 u32MRCBufSize; \b IN MRC buffer size
599*53ee8cc1Swenshuai.xi /// MS_U32 u32MRCBufOffset; \b IN Access byte address offset in MRC buffer
600*53ee8cc1Swenshuai.xi /// relative to MRC start address
601*53ee8cc1Swenshuai.xi /// MS_U32 u32MWCBufAddr; \b IN MWC buffer address
602*53ee8cc1Swenshuai.xi /// MS_BOOL bProgressive;
603*53ee8cc1Swenshuai.xi /// MS_BOOL bThumbnailAccessMode;
604*53ee8cc1Swenshuai.xi /// };
605*53ee8cc1Swenshuai.xi ///@return none
606*53ee8cc1Swenshuai.xi /******************************************************************************/
607*53ee8cc1Swenshuai.xi #if SUPPORT_HIGH_LOW_REVERSE
MDrv_NJPD_InitBuf(NJPD_BufCfg in,MS_BOOL bMJPEG)608*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_InitBuf(NJPD_BufCfg in, MS_BOOL bMJPEG)
609*53ee8cc1Swenshuai.xi {
610*53ee8cc1Swenshuai.xi MS_BOOL bHighLowReverse = FALSE;
611*53ee8cc1Swenshuai.xi if(in.bThumbnailAccessMode)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi if(MDrv_NJPD_IsNeedToPatch(E_NJPD_EAGLE_SW_PATCH))
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi bHighLowReverse = MDrv_NJPD_SetReadBuffer_Patch(in.u32ThumbnailBufAddr, in.u32ThumbnailBufSize, in.u32ThumbnailBufAddr + in.u32ThumbnailBufOffset);
616*53ee8cc1Swenshuai.xi }
617*53ee8cc1Swenshuai.xi else
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi // Set MRC start access byte address
620*53ee8cc1Swenshuai.xi MDrv_NJPD_SetMRCStartAddr(in.u32ThumbnailBufAddr + in.u32ThumbnailBufOffset);
621*53ee8cc1Swenshuai.xi // Set MRC buffer for NJPD
622*53ee8cc1Swenshuai.xi if(in.u32ThumbnailBufOffset < in.u32ThumbnailBufSize/2)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer0(in.u32ThumbnailBufAddr, in.u32ThumbnailBufSize/2);
625*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer1(in.u32ThumbnailBufAddr+in.u32ThumbnailBufSize/2, in.u32ThumbnailBufSize/2);
626*53ee8cc1Swenshuai.xi bHighLowReverse = FALSE;
627*53ee8cc1Swenshuai.xi }
628*53ee8cc1Swenshuai.xi else
629*53ee8cc1Swenshuai.xi {
630*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("Reverse the MRC High/Low buffer\n");
631*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer1(in.u32ThumbnailBufAddr, in.u32ThumbnailBufSize/2);
632*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer0(in.u32ThumbnailBufAddr+in.u32ThumbnailBufSize/2, in.u32ThumbnailBufSize/2);
633*53ee8cc1Swenshuai.xi bHighLowReverse = TRUE;
634*53ee8cc1Swenshuai.xi }
635*53ee8cc1Swenshuai.xi }
636*53ee8cc1Swenshuai.xi }
637*53ee8cc1Swenshuai.xi else
638*53ee8cc1Swenshuai.xi {
639*53ee8cc1Swenshuai.xi if(in.bProgressive)
640*53ee8cc1Swenshuai.xi {
641*53ee8cc1Swenshuai.xi if(MDrv_NJPD_IsNeedToPatch(E_NJPD_EAGLE_SW_PATCH))
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi bHighLowReverse = MDrv_NJPD_SetReadBuffer_Patch(in.u32MRCBufAddr, in.u32MRCBufSize, in.u32MRCBufAddr);
644*53ee8cc1Swenshuai.xi }
645*53ee8cc1Swenshuai.xi else
646*53ee8cc1Swenshuai.xi {
647*53ee8cc1Swenshuai.xi // Set MRC buffer for NJPD
648*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer0(in.u32MRCBufAddr, in.u32MRCBufSize/2);
649*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer1(in.u32MRCBufAddr+in.u32MRCBufSize/2, in.u32MRCBufSize/2);
650*53ee8cc1Swenshuai.xi // Set MRC start access byte address
651*53ee8cc1Swenshuai.xi MDrv_NJPD_SetMRCStartAddr(in.u32MRCBufAddr);
652*53ee8cc1Swenshuai.xi }
653*53ee8cc1Swenshuai.xi }
654*53ee8cc1Swenshuai.xi else
655*53ee8cc1Swenshuai.xi {
656*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%lx, %lx, %lx", in.u32MRCBufAddr, in.u32MRCBufAddr + in.u32MRCBufSize, in.u32MRCBufAddr + in.u32MRCBufOffset);
657*53ee8cc1Swenshuai.xi if(MDrv_NJPD_IsNeedToPatch(E_NJPD_EAGLE_SW_PATCH))
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi bHighLowReverse = MDrv_NJPD_SetReadBuffer_Patch(in.u32MRCBufAddr, in.u32MRCBufSize, in.u32MRCBufAddr + in.u32MRCBufOffset);
660*53ee8cc1Swenshuai.xi }
661*53ee8cc1Swenshuai.xi else
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi // Set MRC start access byte address
664*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("in.u32MRCBufOffset=0x%lx\n", in.u32MRCBufOffset);
665*53ee8cc1Swenshuai.xi MDrv_NJPD_SetMRCStartAddr(in.u32MRCBufAddr + in.u32MRCBufOffset);
666*53ee8cc1Swenshuai.xi // Set MRC buffer for NJPD
667*53ee8cc1Swenshuai.xi if(in.u32MRCBufOffset < in.u32MRCBufSize/2)
668*53ee8cc1Swenshuai.xi {
669*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer0(in.u32MRCBufAddr, in.u32MRCBufSize/2);
670*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer1(in.u32MRCBufAddr+in.u32MRCBufSize/2, in.u32MRCBufSize/2);
671*53ee8cc1Swenshuai.xi bHighLowReverse = FALSE;
672*53ee8cc1Swenshuai.xi }
673*53ee8cc1Swenshuai.xi else
674*53ee8cc1Swenshuai.xi {
675*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("Reverse the MRC High/Low buffer\n");
676*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer1(in.u32MRCBufAddr, in.u32MRCBufSize/2);
677*53ee8cc1Swenshuai.xi MDrv_NJPD_SetReadBuffer0(in.u32MRCBufAddr+in.u32MRCBufSize/2, in.u32MRCBufSize/2);
678*53ee8cc1Swenshuai.xi bHighLowReverse = TRUE;
679*53ee8cc1Swenshuai.xi }
680*53ee8cc1Swenshuai.xi }
681*53ee8cc1Swenshuai.xi }
682*53ee8cc1Swenshuai.xi }
683*53ee8cc1Swenshuai.xi MDrv_NJPD_SetOutputFrameBuffer(in.u32MWCBufAddr, in.u16MWCBufLineNum);
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi // Set the end of MWC buffer for NJPD to save the table
686*53ee8cc1Swenshuai.xi if(bMJPEG==FALSE)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi u32TablePhyAddr[eNJPDNum] = in.u32MWCBufAddr;
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi else
691*53ee8cc1Swenshuai.xi {
692*53ee8cc1Swenshuai.xi u32TablePhyAddr[eNJPDNum] = in.u32ThumbnailBufAddr;
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("u32TablePhyAddr[eNJPDNum]=0x%x, VA=0x%x\n", u32TablePhyAddr[eNJPDNum], MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]));
695*53ee8cc1Swenshuai.xi
696*53ee8cc1Swenshuai.xi return bHighLowReverse;
697*53ee8cc1Swenshuai.xi }
698*53ee8cc1Swenshuai.xi #else
MDrv_NJPD_InitBuf(NJPD_BufCfg in,MS_BOOL bMJPEG)699*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_InitBuf(NJPD_BufCfg in, MS_BOOL bMJPEG)
700*53ee8cc1Swenshuai.xi {
701*53ee8cc1Swenshuai.xi MS_BOOL bDifferentHL = FALSE;
702*53ee8cc1Swenshuai.xi if(in.bThumbnailAccessMode)
703*53ee8cc1Swenshuai.xi {
704*53ee8cc1Swenshuai.xi bDifferentHL = MDrv_NJPD_SetReadBuffer_New(in.u32ThumbnailBufAddr, in.u32ThumbnailBufSize, in.u32ThumbnailBufAddr + in.u32ThumbnailBufOffset);
705*53ee8cc1Swenshuai.xi }
706*53ee8cc1Swenshuai.xi else
707*53ee8cc1Swenshuai.xi {
708*53ee8cc1Swenshuai.xi if(in.bProgressive)
709*53ee8cc1Swenshuai.xi {
710*53ee8cc1Swenshuai.xi bDifferentHL = MDrv_NJPD_SetReadBuffer_New(in.u32MRCBufAddr, in.u32MRCBufSize, in.u32MRCBufAddr);
711*53ee8cc1Swenshuai.xi }
712*53ee8cc1Swenshuai.xi else
713*53ee8cc1Swenshuai.xi {
714*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MRC start:%tx, MRC end:%tx, Offset:%tx\n", (ptrdiff_t)in.u32MRCBufAddr, (ptrdiff_t)(in.u32MRCBufAddr + in.u32MRCBufSize), (ptrdiff_t)(in.u32MRCBufAddr + in.u32MRCBufOffset));
715*53ee8cc1Swenshuai.xi bDifferentHL = MDrv_NJPD_SetReadBuffer_New(in.u32MRCBufAddr, in.u32MRCBufSize, in.u32MRCBufAddr + in.u32MRCBufOffset);
716*53ee8cc1Swenshuai.xi }
717*53ee8cc1Swenshuai.xi }
718*53ee8cc1Swenshuai.xi MDrv_NJPD_SetOutputFrameBuffer(in.u32MWCBufAddr, in.u16MWCBufLineNum);
719*53ee8cc1Swenshuai.xi
720*53ee8cc1Swenshuai.xi // Set the end of MWC buffer for NJPD to save the table
721*53ee8cc1Swenshuai.xi if(bMJPEG==FALSE)
722*53ee8cc1Swenshuai.xi {
723*53ee8cc1Swenshuai.xi u32TablePhyAddr[eNJPDNum] = in.u32MWCBufAddr;
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi else
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi u32TablePhyAddr[eNJPDNum] = in.u32ThumbnailBufAddr;
728*53ee8cc1Swenshuai.xi }
729*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("u32TablePhyAddr[eNJPDNum]=0x%tx, VA=0x%tx\n", (ptrdiff_t)u32TablePhyAddr[eNJPDNum], (ptrdiff_t)MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]));
730*53ee8cc1Swenshuai.xi return bDifferentHL;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi #endif
733*53ee8cc1Swenshuai.xi
734*53ee8cc1Swenshuai.xi /******************************************************************************/
735*53ee8cc1Swenshuai.xi ///Set width and height of picture
736*53ee8cc1Swenshuai.xi ///@param u16Width \b IN picture width
737*53ee8cc1Swenshuai.xi ///@param u16Height \b IN picture height
738*53ee8cc1Swenshuai.xi ///@return none
739*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_SetPicDimension(MS_U16 u16PicWidth,MS_U16 u16PicHeight)740*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetPicDimension(MS_U16 u16PicWidth, MS_U16 u16PicHeight)
741*53ee8cc1Swenshuai.xi {
742*53ee8cc1Swenshuai.xi HAL_NJPD_SetPic_H(( u16PicWidth >> 3 ) );
743*53ee8cc1Swenshuai.xi HAL_NJPD_SetPic_V(( u16PicHeight >> 3 ) );
744*53ee8cc1Swenshuai.xi }
745*53ee8cc1Swenshuai.xi
746*53ee8cc1Swenshuai.xi /******************************************************************************/
747*53ee8cc1Swenshuai.xi ///Get NJPD Event Flag
748*53ee8cc1Swenshuai.xi ///@return EventFlag
749*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_GetEventFlag(void)750*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_GetEventFlag(void)
751*53ee8cc1Swenshuai.xi {
752*53ee8cc1Swenshuai.xi return HAL_NJPD_GetEventFlag();
753*53ee8cc1Swenshuai.xi }
754*53ee8cc1Swenshuai.xi
755*53ee8cc1Swenshuai.xi /******************************************************************************/
756*53ee8cc1Swenshuai.xi ///Set NJPD Event Flag
757*53ee8cc1Swenshuai.xi ///@param u16Value \n IN EventFlag value
758*53ee8cc1Swenshuai.xi ///@return none
759*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_SetEventFlag(MS_U16 u16Value)760*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetEventFlag(MS_U16 u16Value)
761*53ee8cc1Swenshuai.xi {
762*53ee8cc1Swenshuai.xi // clear by write
763*53ee8cc1Swenshuai.xi HAL_NJPD_ClearEventFlag(u16Value);
764*53ee8cc1Swenshuai.xi }
765*53ee8cc1Swenshuai.xi
766*53ee8cc1Swenshuai.xi /******************************************************************************/
767*53ee8cc1Swenshuai.xi ///Set ROI region
768*53ee8cc1Swenshuai.xi ///@param start_x \n IN start X position
769*53ee8cc1Swenshuai.xi ///@param start_y \n IN start Y position
770*53ee8cc1Swenshuai.xi ///@param width \n IN width
771*53ee8cc1Swenshuai.xi ///@param height \n IN height
772*53ee8cc1Swenshuai.xi ///@return none
773*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_SetROI(MS_U16 start_x,MS_U16 start_y,MS_U16 width,MS_U16 height)774*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetROI(MS_U16 start_x, MS_U16 start_y, MS_U16 width, MS_U16 height)
775*53ee8cc1Swenshuai.xi {
776*53ee8cc1Swenshuai.xi // MS_U16 reg_val;
777*53ee8cc1Swenshuai.xi
778*53ee8cc1Swenshuai.xi // reg_val = HAL_NJPD_Get_S_Config();
779*53ee8cc1Swenshuai.xi
780*53ee8cc1Swenshuai.xi HAL_NJPD_SetROI_H(start_x);
781*53ee8cc1Swenshuai.xi HAL_NJPD_SetROI_V(start_y);
782*53ee8cc1Swenshuai.xi HAL_NJPD_SetROIWidth(width);
783*53ee8cc1Swenshuai.xi HAL_NJPD_SetROIHeight(height);
784*53ee8cc1Swenshuai.xi }
785*53ee8cc1Swenshuai.xi
786*53ee8cc1Swenshuai.xi /********************************************************************/
787*53ee8cc1Swenshuai.xi ///Power On NJPD
788*53ee8cc1Swenshuai.xi ///@param NULL
789*53ee8cc1Swenshuai.xi ///@return none
790*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_PowerOn(void)791*53ee8cc1Swenshuai.xi void MDrv_NJPD_PowerOn(void)
792*53ee8cc1Swenshuai.xi {
793*53ee8cc1Swenshuai.xi HAL_NJPD_InitRegBase();
794*53ee8cc1Swenshuai.xi HAL_NJPD_PowerOn();
795*53ee8cc1Swenshuai.xi #if ENABLE_FF00FFD_TO_FFFFFFD
796*53ee8cc1Swenshuai.xi MDrv_WDT_Init((WDT_DbgLv)E_WDT_DBGLV_ERR_ONLY);
797*53ee8cc1Swenshuai.xi MDrv_TIMER_Count(E_TIMER_1, 1);
798*53ee8cc1Swenshuai.xi #endif
799*53ee8cc1Swenshuai.xi _stNJPD_Status.bIsBusy = TRUE;
800*53ee8cc1Swenshuai.xi }
801*53ee8cc1Swenshuai.xi
802*53ee8cc1Swenshuai.xi /********************************************************************/
803*53ee8cc1Swenshuai.xi ///Power Off NJPD
804*53ee8cc1Swenshuai.xi ///@param NULL
805*53ee8cc1Swenshuai.xi ///@return none
806*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_PowerOff(void)807*53ee8cc1Swenshuai.xi void MDrv_NJPD_PowerOff(void)
808*53ee8cc1Swenshuai.xi {
809*53ee8cc1Swenshuai.xi HAL_NJPD_PowerOff();
810*53ee8cc1Swenshuai.xi _stNJPD_Status.bIsBusy = FALSE;
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi
813*53ee8cc1Swenshuai.xi /********************************************************************/
814*53ee8cc1Swenshuai.xi ///Set RSTIntv
815*53ee8cc1Swenshuai.xi ///@param u16Value \n IN register RSTIntv
816*53ee8cc1Swenshuai.xi ///@return none
817*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_SetRSTIntv(MS_U16 u16Value)818*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetRSTIntv(MS_U16 u16Value)
819*53ee8cc1Swenshuai.xi {
820*53ee8cc1Swenshuai.xi HAL_NJPD_SetRSTIntv(u16Value);
821*53ee8cc1Swenshuai.xi }
822*53ee8cc1Swenshuai.xi
823*53ee8cc1Swenshuai.xi /********************************************************************/
824*53ee8cc1Swenshuai.xi ///Get current vertical line index written to memory
825*53ee8cc1Swenshuai.xi ///@return current vertical line index written to memory
826*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetCurVidx(void)827*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_GetCurVidx(void)
828*53ee8cc1Swenshuai.xi {
829*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_ERR("Error!!! Do not support %s() in NJPD!!!!!!!!!!!!!!!!\n", __FUNCTION__);
830*53ee8cc1Swenshuai.xi return 0;
831*53ee8cc1Swenshuai.xi }
832*53ee8cc1Swenshuai.xi
833*53ee8cc1Swenshuai.xi /********************************************************************/
834*53ee8cc1Swenshuai.xi ///Write Grpinf of Table IndirectAccess
835*53ee8cc1Swenshuai.xi ///@param in \b IN structure for Grpinf of Table IndirectAccess
836*53ee8cc1Swenshuai.xi ///@return none
837*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_WriteGrpinf(NJPD_Grpinf in)838*53ee8cc1Swenshuai.xi void MDrv_NJPD_WriteGrpinf(NJPD_Grpinf in)
839*53ee8cc1Swenshuai.xi {
840*53ee8cc1Swenshuai.xi MS_U16 i;
841*53ee8cc1Swenshuai.xi
842*53ee8cc1Swenshuai.xi if (in.DHT)
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi u8DcLumaCnt[eNJPDNum] = in.u8DcLumaCnt;
845*53ee8cc1Swenshuai.xi u8DcChromaCnt[eNJPDNum] = in.u8DcChromaCnt;
846*53ee8cc1Swenshuai.xi u8DcChroma2Cnt[eNJPDNum] = in.u8DcChroma2Cnt;
847*53ee8cc1Swenshuai.xi u8AcLumaCnt[eNJPDNum] = in.u8AcLumaCnt;
848*53ee8cc1Swenshuai.xi u8AcChromaCnt[eNJPDNum] = in.u8AcChromaCnt;
849*53ee8cc1Swenshuai.xi u8AcChroma2Cnt[eNJPDNum] = in.u8AcChroma2Cnt;
850*53ee8cc1Swenshuai.xi //JPEG_memset((void *)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE)), 0, 0x400);
851*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
852*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
853*53ee8cc1Swenshuai.xi {
854*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc luma i=%d, [%02x %04x %02x]\n", i, in.u8DcLumaValid[i], in.u16DcLumaCode[i], in.u8DcLumaSymbol[i]);
855*53ee8cc1Swenshuai.xi }
856*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
857*53ee8cc1Swenshuai.xi {
858*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac luma i=%d, [%02x %04x %02x]\n", i, in.u8AcLumaValid[i], in.u16AcLumaCode[i], in.u8AcLumaSymbol[i]);
859*53ee8cc1Swenshuai.xi }
860*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
861*53ee8cc1Swenshuai.xi {
862*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc chroma i=%d, [%02x %04x %02x]\n", i, in.u8DcChromaValid[i], in.u16DcChromaCode[i], in.u8DcChromaSymbol[i]);
863*53ee8cc1Swenshuai.xi }
864*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
865*53ee8cc1Swenshuai.xi {
866*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac chroma i=%d, [%02x %04x %02x]\n",i , in.u8AcChromaValid[i], in.u16AcChromaCode[i], in.u8AcChromaSymbol[i]);
867*53ee8cc1Swenshuai.xi }
868*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
869*53ee8cc1Swenshuai.xi {
870*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
871*53ee8cc1Swenshuai.xi {
872*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc chroma2 i=%d, [%02x %04x %02x]\n", i, in.u8DcChroma2Valid[i], in.u16DcChroma2Code[i], in.u8DcChroma2Symbol[i]);
873*53ee8cc1Swenshuai.xi }
874*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
875*53ee8cc1Swenshuai.xi {
876*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac chroma2 i=%d, [%02x %04x %02x]\n",i, in.u8AcChroma2Valid[i], in.u16AcChroma2Code[i], in.u8AcChroma2Symbol[i]);
877*53ee8cc1Swenshuai.xi }
878*53ee8cc1Swenshuai.xi }
879*53ee8cc1Swenshuai.xi #else
880*53ee8cc1Swenshuai.xi if(MDrv_NJPD_GetVerificationMode()==E_NJPD01_TABLE_READ_WRITE)
881*53ee8cc1Swenshuai.xi {
882*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
883*53ee8cc1Swenshuai.xi {
884*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc luma i=%d, [%02x %04x %02x]\n", i, in.u8DcLumaValid[i], in.u16DcLumaCode[i], in.u8DcLumaSymbol[i]);
885*53ee8cc1Swenshuai.xi }
886*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac luma i=%d, [%02x %04x %02x]\n", i, in.u8AcLumaValid[i], in.u16AcLumaCode[i], in.u8AcLumaSymbol[i]);
889*53ee8cc1Swenshuai.xi }
890*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc chroma i=%d, [%02x %04x %02x]\n", i, in.u8DcChromaValid[i], in.u16DcChromaCode[i], in.u8DcChromaSymbol[i]);
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
895*53ee8cc1Swenshuai.xi {
896*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac chroma i=%d, [%02x %04x %02x]\n",i , in.u8AcChromaValid[i], in.u16AcChromaCode[i], in.u8AcChromaSymbol[i]);
897*53ee8cc1Swenshuai.xi }
898*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
899*53ee8cc1Swenshuai.xi {
900*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
901*53ee8cc1Swenshuai.xi {
902*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("dc chroma2 i=%d, [%02x %04x %02x]\n", i, in.u8DcChroma2Valid[i], in.u16DcChroma2Code[i], in.u8DcChroma2Symbol[i]);
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi for(i= 1; i<=16; i++)
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("ac chroma2 i=%d, [%02x %04x %02x]\n",i, in.u8AcChroma2Valid[i], in.u16AcChroma2Code[i], in.u8AcChroma2Symbol[i]);
907*53ee8cc1Swenshuai.xi }
908*53ee8cc1Swenshuai.xi }
909*53ee8cc1Swenshuai.xi }
910*53ee8cc1Swenshuai.xi #endif
911*53ee8cc1Swenshuai.xi // DC
912*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi if(in.u8DcLumaValid[i+1])
915*53ee8cc1Swenshuai.xi {
916*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+0)) = in.u8DcLumaSymbol[i+1];
917*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+1)) = in.u16DcLumaCode[i+1]&0xff;
918*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+2)) = (in.u16DcLumaCode[i+1]>>8) &0xff;
919*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+3)) = in.u8DcLumaValid[i+1];
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi else
922*53ee8cc1Swenshuai.xi {
923*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+0)) = in.u8DcLumaSymbol[i+1];
924*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+i*4+3)) = in.u8DcLumaValid[i+1];
925*53ee8cc1Swenshuai.xi }
926*53ee8cc1Swenshuai.xi }
927*53ee8cc1Swenshuai.xi
928*53ee8cc1Swenshuai.xi // AC
929*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi if(in.u8AcLumaValid[i+1])
932*53ee8cc1Swenshuai.xi {
933*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+0)) = ( in.u8AcLumaSymbol[i+1]+in.u8DcLumaCnt);
934*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+1)) = (in.u16AcLumaCode[i+1] & 0xff);
935*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+2)) = ((in.u16AcLumaCode[i+1]>>8) & 0xff);
936*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+3)) = in.u8AcLumaValid[i+1];
937*53ee8cc1Swenshuai.xi }
938*53ee8cc1Swenshuai.xi else
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+0)) = ( in.u8AcLumaSymbol[i+1]+in.u8DcLumaCnt);
941*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+16*4+i*4+3)) = in.u8AcLumaValid[i+1];
942*53ee8cc1Swenshuai.xi }
943*53ee8cc1Swenshuai.xi }
944*53ee8cc1Swenshuai.xi
945*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
946*53ee8cc1Swenshuai.xi {
947*53ee8cc1Swenshuai.xi if(in.u8DcChromaValid[i+1])
948*53ee8cc1Swenshuai.xi {
949*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+0)) = in.u8DcChromaSymbol[i+1];
950*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+1)) = in.u16DcChromaCode[i+1] &0xff;
951*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+2)) = (in.u16DcChromaCode[i+1]>>8)&0xff;
952*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+3)) = in.u8DcChromaValid[i+1];
953*53ee8cc1Swenshuai.xi }
954*53ee8cc1Swenshuai.xi else
955*53ee8cc1Swenshuai.xi {
956*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+0)) = in.u8DcChromaSymbol[i+1];
957*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+32*4+i*4+3)) = in.u8DcChromaValid[i+1];
958*53ee8cc1Swenshuai.xi }
959*53ee8cc1Swenshuai.xi }
960*53ee8cc1Swenshuai.xi
961*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
962*53ee8cc1Swenshuai.xi {
963*53ee8cc1Swenshuai.xi if(in.u8AcChromaValid[i+1])
964*53ee8cc1Swenshuai.xi {
965*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+0)) = ( in.u8AcChromaSymbol[i+1]+in.u8DcChromaCnt);
966*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+1)) = (in.u16AcChromaCode[i+1] & 0xff);
967*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+2)) = ((in.u16AcChromaCode[i+1]>>8) & 0xff);
968*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+3)) = in.u8AcChromaValid[i+1];
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi else
971*53ee8cc1Swenshuai.xi {
972*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+0)) = ( in.u8AcChromaSymbol[i+1]+in.u8DcChromaCnt);
973*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+48*4+i*4+3)) = in.u8AcChromaValid[i+1];
974*53ee8cc1Swenshuai.xi }
975*53ee8cc1Swenshuai.xi }
976*53ee8cc1Swenshuai.xi
977*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
978*53ee8cc1Swenshuai.xi {
979*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi if(in.u8DcChroma2Valid[i+1])
982*53ee8cc1Swenshuai.xi {
983*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+0)) = in.u8DcChroma2Symbol[i+1];
984*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+1)) = in.u16DcChroma2Code[i+1]&0xff;
985*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+2)) = (in.u16DcChroma2Code[i+1]>>8) &0xff;
986*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+3)) = in.u8DcChroma2Valid[i+1];
987*53ee8cc1Swenshuai.xi }
988*53ee8cc1Swenshuai.xi else
989*53ee8cc1Swenshuai.xi {
990*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+0)) = in.u8DcChroma2Symbol[i+1];
991*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+64*4+i*4+3)) = in.u8DcChroma2Valid[i+1];
992*53ee8cc1Swenshuai.xi }
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi
995*53ee8cc1Swenshuai.xi for ( i = 0; i < 16; i++ )
996*53ee8cc1Swenshuai.xi {
997*53ee8cc1Swenshuai.xi if(in.u8AcChroma2Valid[i+1])
998*53ee8cc1Swenshuai.xi {
999*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+0)) = ( in.u8AcChroma2Symbol[i+1]+in.u8DcChroma2Cnt );
1000*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+1)) = in.u16AcChroma2Code[i+1]&0xff;
1001*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+2)) = (in.u16AcChroma2Code[i+1]>>8)&0xff;
1002*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+3)) = in.u8AcChroma2Valid[i+1];
1003*53ee8cc1Swenshuai.xi }
1004*53ee8cc1Swenshuai.xi else
1005*53ee8cc1Swenshuai.xi {
1006*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+0)) = ( in.u8AcChroma2Symbol[i+1]+in.u8DcChroma2Cnt );
1007*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE+80*4+i*4+3)) = in.u8AcChroma2Valid[i+1];
1008*53ee8cc1Swenshuai.xi }
1009*53ee8cc1Swenshuai.xi }
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi }
1012*53ee8cc1Swenshuai.xi
1013*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1014*53ee8cc1Swenshuai.xi MDrv_NJPD_GTable_Reload_Enable(ENABLE);
1015*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1016*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Group table!!!!!!!!!!!!!!!!\n");
1017*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
1018*53ee8cc1Swenshuai.xi {
1019*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 96*4);
1020*53ee8cc1Swenshuai.xi }
1021*53ee8cc1Swenshuai.xi else
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 64*4);
1024*53ee8cc1Swenshuai.xi }
1025*53ee8cc1Swenshuai.xi #else
1026*53ee8cc1Swenshuai.xi if(MDrv_NJPD_GetVerificationMode()==E_NJPD01_TABLE_READ_WRITE)
1027*53ee8cc1Swenshuai.xi {
1028*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Group table!!!!!!!!!!!!!!!!\n");
1029*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
1030*53ee8cc1Swenshuai.xi {
1031*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 96*4);
1032*53ee8cc1Swenshuai.xi }
1033*53ee8cc1Swenshuai.xi else
1034*53ee8cc1Swenshuai.xi {
1035*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 64*4);
1036*53ee8cc1Swenshuai.xi }
1037*53ee8cc1Swenshuai.xi }
1038*53ee8cc1Swenshuai.xi #endif
1039*53ee8cc1Swenshuai.xi MDrv_NJPD_SetGTableStartAddr(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE);
1040*53ee8cc1Swenshuai.xi }
1041*53ee8cc1Swenshuai.xi /********************************************************************/
1042*53ee8cc1Swenshuai.xi ///Write Symidx of Table Indirect Access
1043*53ee8cc1Swenshuai.xi ///@param in \b IN structure for Symidx of Table Indirect Access
1044*53ee8cc1Swenshuai.xi ///@return none
1045*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_WriteSymidx(NJPD_Symidx in)1046*53ee8cc1Swenshuai.xi void MDrv_NJPD_WriteSymidx(NJPD_Symidx in)
1047*53ee8cc1Swenshuai.xi {
1048*53ee8cc1Swenshuai.xi MS_U16 i = 0;
1049*53ee8cc1Swenshuai.xi MS_U16 u16LumaCnt = 0;
1050*53ee8cc1Swenshuai.xi MS_U16 u16ChromaCnt = 0;
1051*53ee8cc1Swenshuai.xi MS_U16 u16Chroma2Cnt = 0;
1052*53ee8cc1Swenshuai.xi MS_U16 u16MaxCnt;
1053*53ee8cc1Swenshuai.xi
1054*53ee8cc1Swenshuai.xi // JPEG_memset((void *)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE)), 0, 0x400);
1055*53ee8cc1Swenshuai.xi if (in.DHT)
1056*53ee8cc1Swenshuai.xi {
1057*53ee8cc1Swenshuai.xi // for ( i = 0; i < 16; i++ )
1058*53ee8cc1Swenshuai.xi for ( i = 0; i < 12; i++ )
1059*53ee8cc1Swenshuai.xi {
1060*53ee8cc1Swenshuai.xi if(i < u8DcLumaCnt[eNJPDNum])
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16LumaCnt*4+0)) = in.u8DcLumaHuffVal[i];
1063*53ee8cc1Swenshuai.xi u16LumaCnt++;
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi if(i < u8DcChromaCnt[eNJPDNum])
1066*53ee8cc1Swenshuai.xi {
1067*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16ChromaCnt*4+1)) = in.u8DcChromaHuffVal[i];
1068*53ee8cc1Swenshuai.xi u16ChromaCnt++;
1069*53ee8cc1Swenshuai.xi }
1070*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum] && i < u8DcChroma2Cnt[eNJPDNum])
1071*53ee8cc1Swenshuai.xi {
1072*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16Chroma2Cnt*4+2)) = in.u8DcChroma2HuffVal[i];
1073*53ee8cc1Swenshuai.xi u16Chroma2Cnt++;
1074*53ee8cc1Swenshuai.xi }
1075*53ee8cc1Swenshuai.xi else if(i < u8DcChromaCnt[eNJPDNum])
1076*53ee8cc1Swenshuai.xi {
1077*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16Chroma2Cnt*4+2)) = in.u8DcChromaHuffVal[i];
1078*53ee8cc1Swenshuai.xi u16Chroma2Cnt++;
1079*53ee8cc1Swenshuai.xi }
1080*53ee8cc1Swenshuai.xi }
1081*53ee8cc1Swenshuai.xi
1082*53ee8cc1Swenshuai.xi // for ( i = 0; i < 240; i++ )
1083*53ee8cc1Swenshuai.xi for ( i = 0; i < 162; i++ )
1084*53ee8cc1Swenshuai.xi {
1085*53ee8cc1Swenshuai.xi if(i < u8AcLumaCnt[eNJPDNum])
1086*53ee8cc1Swenshuai.xi {
1087*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16LumaCnt*4+0)) = in.u8AcLumaHuffVal[i];
1088*53ee8cc1Swenshuai.xi u16LumaCnt++;
1089*53ee8cc1Swenshuai.xi }
1090*53ee8cc1Swenshuai.xi if(i < u8AcChromaCnt[eNJPDNum])
1091*53ee8cc1Swenshuai.xi {
1092*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16ChromaCnt*4+1)) = in.u8AcChromaHuffVal[i];
1093*53ee8cc1Swenshuai.xi u16ChromaCnt++;
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum] && i < u8AcChroma2Cnt[eNJPDNum])
1096*53ee8cc1Swenshuai.xi {
1097*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16Chroma2Cnt*4+2)) = in.u8AcChroma2HuffVal[i];
1098*53ee8cc1Swenshuai.xi u16Chroma2Cnt++;
1099*53ee8cc1Swenshuai.xi }
1100*53ee8cc1Swenshuai.xi else if(i < u8AcChromaCnt[eNJPDNum])
1101*53ee8cc1Swenshuai.xi {
1102*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+u16Chroma2Cnt*4+2)) = in.u8AcChromaHuffVal[i];
1103*53ee8cc1Swenshuai.xi u16Chroma2Cnt++;
1104*53ee8cc1Swenshuai.xi }
1105*53ee8cc1Swenshuai.xi }
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi
1108*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1109*53ee8cc1Swenshuai.xi MDrv_NJPD_HTable_Reload_Enable(ENABLE);
1110*53ee8cc1Swenshuai.xi u16MaxCnt = (u16LumaCnt>u16ChromaCnt)? u16LumaCnt:u16ChromaCnt;
1111*53ee8cc1Swenshuai.xi u16MaxCnt = (u16MaxCnt>u16Chroma2Cnt)? u16MaxCnt:u16Chroma2Cnt;
1112*53ee8cc1Swenshuai.xi u16MaxCnt = ((u16MaxCnt%4)==2 || (u16MaxCnt%4)==3)? u16MaxCnt: ((u16MaxCnt/4)*4+2);
1113*53ee8cc1Swenshuai.xi
1114*53ee8cc1Swenshuai.xi #if 0
1115*53ee8cc1Swenshuai.xi if(u16MaxCnt > u16LumaCnt)
1116*53ee8cc1Swenshuai.xi {
1117*53ee8cc1Swenshuai.xi for(i=u16LumaCnt; i<u16MaxCnt; i++)
1118*53ee8cc1Swenshuai.xi JPEG_memset((void*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+i*4+0)), 0, 1);
1119*53ee8cc1Swenshuai.xi }
1120*53ee8cc1Swenshuai.xi if(u16MaxCnt > u16ChromaCnt)
1121*53ee8cc1Swenshuai.xi {
1122*53ee8cc1Swenshuai.xi for(i=u16ChromaCnt; i<u16MaxCnt; i++)
1123*53ee8cc1Swenshuai.xi JPEG_memset((void*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+i*4+1)), 0, 1);
1124*53ee8cc1Swenshuai.xi }
1125*53ee8cc1Swenshuai.xi if(u16MaxCnt > u16Chroma2Cnt)
1126*53ee8cc1Swenshuai.xi {
1127*53ee8cc1Swenshuai.xi for(i=u16Chroma2Cnt; i<u16MaxCnt; i++)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi JPEG_memset((void*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+i*4+2)), 0, 1);
1130*53ee8cc1Swenshuai.xi JPEG_memset((void*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE+i*4+3)), 0, 1);
1131*53ee8cc1Swenshuai.xi }
1132*53ee8cc1Swenshuai.xi }
1133*53ee8cc1Swenshuai.xi #endif
1134*53ee8cc1Swenshuai.xi
1135*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1136*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Huffman table!!!!!!!!!!!!!!!!\n");
1137*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE), u16MaxCnt*4);
1138*53ee8cc1Swenshuai.xi #else
1139*53ee8cc1Swenshuai.xi if(MDrv_NJPD_GetVerificationMode()==E_NJPD01_TABLE_READ_WRITE)
1140*53ee8cc1Swenshuai.xi {
1141*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Huffman table!!!!!!!!!!!!!!!!\n");
1142*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE), u16MaxCnt*4);
1143*53ee8cc1Swenshuai.xi }
1144*53ee8cc1Swenshuai.xi #endif
1145*53ee8cc1Swenshuai.xi MDrv_NJPD_SetHTableStartAddr(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE);
1146*53ee8cc1Swenshuai.xi
1147*53ee8cc1Swenshuai.xi if(MDrv_NJPD_IsNeedToPatch(E_NJPD_EAGLE_SW_PATCH))
1148*53ee8cc1Swenshuai.xi {
1149*53ee8cc1Swenshuai.xi HAL_NJPD_SetHTableSize(0xff);
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi else
1152*53ee8cc1Swenshuai.xi {
1153*53ee8cc1Swenshuai.xi HAL_NJPD_SetHTableSize(u16MaxCnt);
1154*53ee8cc1Swenshuai.xi }
1155*53ee8cc1Swenshuai.xi
1156*53ee8cc1Swenshuai.xi }
1157*53ee8cc1Swenshuai.xi /********************************************************************/
1158*53ee8cc1Swenshuai.xi ///Write IQtbl of Table Indirect Access
1159*53ee8cc1Swenshuai.xi ///@param in \b IN structure for IQtbl of Table Indirect Access
1160*53ee8cc1Swenshuai.xi ///@return none
1161*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_WriteIQTbl(NJPD_IQTbl in)1162*53ee8cc1Swenshuai.xi void MDrv_NJPD_WriteIQTbl(NJPD_IQTbl in)
1163*53ee8cc1Swenshuai.xi {
1164*53ee8cc1Swenshuai.xi MS_U8 i;
1165*53ee8cc1Swenshuai.xi
1166*53ee8cc1Swenshuai.xi if (in.DQT)
1167*53ee8cc1Swenshuai.xi {
1168*53ee8cc1Swenshuai.xi for(i = 0; i<64; i++)
1169*53ee8cc1Swenshuai.xi {
1170*53ee8cc1Swenshuai.xi if(in.u8CompNum==1)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+0)) = in.QuantTables[in.u8CompQuant[0]].s16Value[_u8Jpeg_zigzag_order[i]] & 0xff;
1173*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+1)) = in.QuantTables[in.u8CompQuant[0]].s16Value[_u8Jpeg_zigzag_order[i]] & 0xff;
1174*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+2)) = in.QuantTables[in.u8CompQuant[0]].s16Value[_u8Jpeg_zigzag_order[i]] & 0xff;
1175*53ee8cc1Swenshuai.xi }
1176*53ee8cc1Swenshuai.xi else if(in.u8CompNum==2)
1177*53ee8cc1Swenshuai.xi {
1178*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+0)) = (in.QuantTables[in.u8CompQuant[0]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1179*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+1)) = (in.QuantTables[in.u8CompQuant[1]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1180*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+2)) = (in.QuantTables[in.u8CompQuant[1]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1181*53ee8cc1Swenshuai.xi }
1182*53ee8cc1Swenshuai.xi else if(in.u8CompNum==3)
1183*53ee8cc1Swenshuai.xi {
1184*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+0)) = (in.QuantTables[in.u8CompQuant[0]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1185*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+1)) = (in.QuantTables[in.u8CompQuant[1]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1186*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+2)) = (in.QuantTables[in.u8CompQuant[2]].s16Value[_u8Jpeg_zigzag_order[i]]) & 0xff;
1187*53ee8cc1Swenshuai.xi }
1188*53ee8cc1Swenshuai.xi }
1189*53ee8cc1Swenshuai.xi }
1190*53ee8cc1Swenshuai.xi else
1191*53ee8cc1Swenshuai.xi {
1192*53ee8cc1Swenshuai.xi MS_U8 u8Value;
1193*53ee8cc1Swenshuai.xi for (i=0; i<64; i++)
1194*53ee8cc1Swenshuai.xi {
1195*53ee8cc1Swenshuai.xi u8Value = g16IQ_TBL_NJPD[i] & 0xff;
1196*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+i*4+0)) = u8Value;
1197*53ee8cc1Swenshuai.xi }
1198*53ee8cc1Swenshuai.xi for (i=64; i<128; i++)
1199*53ee8cc1Swenshuai.xi {
1200*53ee8cc1Swenshuai.xi u8Value = g16IQ_TBL_NJPD[i] & 0xff;
1201*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+(i-64)*4+1)) = u8Value;
1202*53ee8cc1Swenshuai.xi *(MS_U8*)(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE+(i-64)*4+2)) = u8Value;
1203*53ee8cc1Swenshuai.xi }
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi
1206*53ee8cc1Swenshuai.xi if(in.u8CompNum==3)
1207*53ee8cc1Swenshuai.xi {
1208*53ee8cc1Swenshuai.xi MDrv_NJPD_SetDifferentQTable(ENABLE);
1209*53ee8cc1Swenshuai.xi }
1210*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1211*53ee8cc1Swenshuai.xi MDrv_NJPD_QTable_Reload_Enable(ENABLE);
1212*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1213*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Quantization table!!!!!!!!!!!!!!!!\n");
1214*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE), 64*4);
1215*53ee8cc1Swenshuai.xi #else
1216*53ee8cc1Swenshuai.xi if(MDrv_NJPD_GetVerificationMode()==E_NJPD01_TABLE_READ_WRITE)
1217*53ee8cc1Swenshuai.xi {
1218*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Quantization table!!!!!!!!!!!!!!!!\n");
1219*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE), 64*4);
1220*53ee8cc1Swenshuai.xi }
1221*53ee8cc1Swenshuai.xi #endif
1222*53ee8cc1Swenshuai.xi MDrv_NJPD_SetQTableStartAddr(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE);
1223*53ee8cc1Swenshuai.xi }
1224*53ee8cc1Swenshuai.xi
MDrv_NJPD_TableRead(void)1225*53ee8cc1Swenshuai.xi void MDrv_NJPD_TableRead(void)
1226*53ee8cc1Swenshuai.xi {
1227*53ee8cc1Swenshuai.xi MS_U16 u16Value =0;
1228*53ee8cc1Swenshuai.xi MS_U8 u8Table;
1229*53ee8cc1Swenshuai.xi MS_U16 u16Addr;
1230*53ee8cc1Swenshuai.xi MS_U8 u8TableCnt;
1231*53ee8cc1Swenshuai.xi MS_U16 u16RIUValue = HAL_NJPD_GetRIUInterface();
1232*53ee8cc1Swenshuai.xi
1233*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting02(HAL_NJPD_Get_GlobalSetting02() & ~NJPD_TBC_MODE);
1234*53ee8cc1Swenshuai.xi
1235*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n%s(), read h table start================\n", __FUNCTION__);
1236*53ee8cc1Swenshuai.xi u8Table = 0; // 2'b00: h table, 2'b01: g table, 2'b10: q table
1237*53ee8cc1Swenshuai.xi u8TableCnt = HAL_NJPD_GetHTableSize();
1238*53ee8cc1Swenshuai.xi for(u16Addr=0; u16Addr<u8TableCnt; u16Addr++)
1239*53ee8cc1Swenshuai.xi {
1240*53ee8cc1Swenshuai.xi u16Value =NJPD_JPD_TBC_TABLE_READ | ((u8Table & 0x3)<<1 & NJPD_JPD_TBC_SEL) | u16Addr<<8;
1241*53ee8cc1Swenshuai.xi HAL_NJPD_SetRIUInterface(u16Value);
1242*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg_2(NJPD_TBC_EN);
1243*53ee8cc1Swenshuai.xi while(1)
1244*53ee8cc1Swenshuai.xi {
1245*53ee8cc1Swenshuai.xi if(HAL_NJPD_GetRIUInterface() & NJPD_JPD_TBC_TABLE_READ)
1246*53ee8cc1Swenshuai.xi {
1247*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%02x %02x %02x %02x ",
1248*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_L()&0xff,
1249*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_L()&0xff00) >>8,
1250*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_H()&0xff,
1251*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_H()&0xff00) >>8
1252*53ee8cc1Swenshuai.xi );
1253*53ee8cc1Swenshuai.xi if(u16Addr%2==1)
1254*53ee8cc1Swenshuai.xi {
1255*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n");
1256*53ee8cc1Swenshuai.xi }
1257*53ee8cc1Swenshuai.xi break;
1258*53ee8cc1Swenshuai.xi }
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi }
1261*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s(), read h table end ================\n", __FUNCTION__);
1262*53ee8cc1Swenshuai.xi
1263*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n%s(), read g table start================\n", __FUNCTION__);
1264*53ee8cc1Swenshuai.xi u8Table = 1; // 2'b00: h table, 2'b01: g table, 2'b10: q table
1265*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
1266*53ee8cc1Swenshuai.xi {
1267*53ee8cc1Swenshuai.xi u8TableCnt = 96;
1268*53ee8cc1Swenshuai.xi }
1269*53ee8cc1Swenshuai.xi else
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi u8TableCnt = 64;
1272*53ee8cc1Swenshuai.xi }
1273*53ee8cc1Swenshuai.xi
1274*53ee8cc1Swenshuai.xi for(u16Addr=0; u16Addr<u8TableCnt; u16Addr++)
1275*53ee8cc1Swenshuai.xi {
1276*53ee8cc1Swenshuai.xi u16Value =NJPD_JPD_TBC_TABLE_READ | ((u8Table & 0x3)<<1 & NJPD_JPD_TBC_SEL) | u16Addr<<8;
1277*53ee8cc1Swenshuai.xi HAL_NJPD_SetRIUInterface(u16Value);
1278*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg_2(NJPD_TBC_EN);
1279*53ee8cc1Swenshuai.xi while(1)
1280*53ee8cc1Swenshuai.xi {
1281*53ee8cc1Swenshuai.xi if(HAL_NJPD_GetRIUInterface() & NJPD_JPD_TBC_TABLE_READ)
1282*53ee8cc1Swenshuai.xi {
1283*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%02x %02x %02x %02x ",
1284*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_L()&0xff,
1285*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_L()&0xff00) >>8,
1286*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_H()&0xff,
1287*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_H()&0xff00) >>8
1288*53ee8cc1Swenshuai.xi );
1289*53ee8cc1Swenshuai.xi if(u16Addr%2==1)
1290*53ee8cc1Swenshuai.xi {
1291*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n");
1292*53ee8cc1Swenshuai.xi }
1293*53ee8cc1Swenshuai.xi break;
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi }
1296*53ee8cc1Swenshuai.xi }
1297*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s(), read g table end ================\n", __FUNCTION__);
1298*53ee8cc1Swenshuai.xi
1299*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n%s(), read q table start================\n", __FUNCTION__);
1300*53ee8cc1Swenshuai.xi u8Table = 2; // 2'b00: h table, 2'b01: g table, 2'b10: q table
1301*53ee8cc1Swenshuai.xi u8TableCnt = 64;
1302*53ee8cc1Swenshuai.xi for(u16Addr=0; u16Addr<u8TableCnt; u16Addr++)
1303*53ee8cc1Swenshuai.xi {
1304*53ee8cc1Swenshuai.xi u16Value =NJPD_JPD_TBC_TABLE_READ | ((u8Table & 0x3)<<1 & NJPD_JPD_TBC_SEL) | u16Addr<<8;
1305*53ee8cc1Swenshuai.xi HAL_NJPD_SetRIUInterface(u16Value);
1306*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg_2(NJPD_TBC_EN);
1307*53ee8cc1Swenshuai.xi while(1)
1308*53ee8cc1Swenshuai.xi {
1309*53ee8cc1Swenshuai.xi if(HAL_NJPD_GetRIUInterface() & NJPD_JPD_TBC_TABLE_READ)
1310*53ee8cc1Swenshuai.xi {
1311*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%02x %02x %02x %02x ",
1312*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_L()&0xff,
1313*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_L()&0xff00) >>8,
1314*53ee8cc1Swenshuai.xi HAL_NJPD_TBCReadData_H()&0xff,
1315*53ee8cc1Swenshuai.xi (HAL_NJPD_TBCReadData_H()&0xff00) >>8
1316*53ee8cc1Swenshuai.xi );
1317*53ee8cc1Swenshuai.xi if(u16Addr%2==1)
1318*53ee8cc1Swenshuai.xi {
1319*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("\n");
1320*53ee8cc1Swenshuai.xi }
1321*53ee8cc1Swenshuai.xi break;
1322*53ee8cc1Swenshuai.xi }
1323*53ee8cc1Swenshuai.xi }
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s(), read q table end ================\n", __FUNCTION__);
1326*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting02(HAL_NJPD_Get_GlobalSetting02() | NJPD_TBC_MODE);
1327*53ee8cc1Swenshuai.xi HAL_NJPD_SetRIUInterface(u16RIUValue);
1328*53ee8cc1Swenshuai.xi }
1329*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetVerificationMode(NJPD_VerificationMode VerificationMode)1330*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetVerificationMode(NJPD_VerificationMode VerificationMode)
1331*53ee8cc1Swenshuai.xi {
1332*53ee8cc1Swenshuai.xi HAL_NJPD_SetVerificationMode(VerificationMode);
1333*53ee8cc1Swenshuai.xi }
1334*53ee8cc1Swenshuai.xi
MDrv_NJPD_GetVerificationMode(void)1335*53ee8cc1Swenshuai.xi NJPD_VerificationMode MDrv_NJPD_GetVerificationMode(void)
1336*53ee8cc1Swenshuai.xi {
1337*53ee8cc1Swenshuai.xi return HAL_NJPD_GetVerificationMode();
1338*53ee8cc1Swenshuai.xi }
1339*53ee8cc1Swenshuai.xi
MDrv_NJPD_Debug()1340*53ee8cc1Swenshuai.xi void MDrv_NJPD_Debug()
1341*53ee8cc1Swenshuai.xi {
1342*53ee8cc1Swenshuai.xi #if (ENABLE_TEST_NJPD_01_table_read_write_test == TRUE)
1343*53ee8cc1Swenshuai.xi MDrv_NJPD_TableRead();
1344*53ee8cc1Swenshuai.xi #else
1345*53ee8cc1Swenshuai.xi if(HAL_NJPD_GetVerificationMode()==E_NJPD01_TABLE_READ_WRITE)
1346*53ee8cc1Swenshuai.xi {
1347*53ee8cc1Swenshuai.xi MDrv_NJPD_TableRead();
1348*53ee8cc1Swenshuai.xi }
1349*53ee8cc1Swenshuai.xi #endif
1350*53ee8cc1Swenshuai.xi HAL_NJPD_Debug();
1351*53ee8cc1Swenshuai.xi
1352*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("[offset: MRC0: MRC1]=[%td, %td, %td]\n",
1353*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32READ_Start[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16),
1354*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32MRC0_End[eNJPDNum]/16 - u32MRC0_Start[eNJPDNum]/16 +1)%16),
1355*53ee8cc1Swenshuai.xi (ptrdiff_t)((u32MRC1_End[eNJPDNum]/16 - u32MRC1_Start[eNJPDNum]/16 +1)%16)
1356*53ee8cc1Swenshuai.xi );
1357*53ee8cc1Swenshuai.xi
1358*53ee8cc1Swenshuai.xi //_NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]), 2048);
1359*53ee8cc1Swenshuai.xi
1360*53ee8cc1Swenshuai.xi }
1361*53ee8cc1Swenshuai.xi /********************************************************************/
1362*53ee8cc1Swenshuai.xi ///Set NJPD Debug level
1363*53ee8cc1Swenshuai.xi ///@para MS_U8 u8DbgLevel \b IN The NJPD debug level
1364*53ee8cc1Swenshuai.xi ///@return none
1365*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_SetDbgLevel(MS_U8 u8DbgLevel)1366*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetDbgLevel(MS_U8 u8DbgLevel)
1367*53ee8cc1Swenshuai.xi {
1368*53ee8cc1Swenshuai.xi u8NJPD_DrvDbgLevel = u8DbgLevel;
1369*53ee8cc1Swenshuai.xi HAL_NJPD_SetDbgLevel(u8DbgLevel);
1370*53ee8cc1Swenshuai.xi }
1371*53ee8cc1Swenshuai.xi
1372*53ee8cc1Swenshuai.xi /********************************************************************/
1373*53ee8cc1Swenshuai.xi ///Get NJPD driver information
1374*53ee8cc1Swenshuai.xi ///@param const NJPD_Info *pNJPD_Inf \b OUT The pointer of NJPD info.
1375*53ee8cc1Swenshuai.xi ///@return none
1376*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetInfo(NJPD_Info * pNJPD_Info)1377*53ee8cc1Swenshuai.xi void MDrv_NJPD_GetInfo(NJPD_Info *pNJPD_Info)
1378*53ee8cc1Swenshuai.xi {
1379*53ee8cc1Swenshuai.xi NJPD_HAL_Version HalVer;
1380*53ee8cc1Swenshuai.xi HAL_NJPD_GetLibVer(&HalVer);
1381*53ee8cc1Swenshuai.xi pNJPD_Info->pu8HalVer = HalVer.pu8HalVer;
1382*53ee8cc1Swenshuai.xi pNJPD_Info->pu8FwVer = HalVer.pu8FwVer;
1383*53ee8cc1Swenshuai.xi pNJPD_Info->stCap = _stNJPD_Cap;
1384*53ee8cc1Swenshuai.xi }
1385*53ee8cc1Swenshuai.xi
1386*53ee8cc1Swenshuai.xi /********************************************************************/
1387*53ee8cc1Swenshuai.xi ///Get NJPD driver status
1388*53ee8cc1Swenshuai.xi ///@param none
1389*53ee8cc1Swenshuai.xi ///@return the pointer of NJPD_Status
1390*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetStatus(void)1391*53ee8cc1Swenshuai.xi NJPD_Status* MDrv_NJPD_GetStatus(void)
1392*53ee8cc1Swenshuai.xi {
1393*53ee8cc1Swenshuai.xi _stNJPD_Status.u32CurMRCAddr = HAL_NJPD_GetCurMRCAddr();
1394*53ee8cc1Swenshuai.xi _stNJPD_Status.u16CurVidx = 0;
1395*53ee8cc1Swenshuai.xi _stNJPD_Status.u16CurRow = HAL_NJPD_GetCurRow();
1396*53ee8cc1Swenshuai.xi _stNJPD_Status.u16CurCol = HAL_NJPD_GetCurCol();
1397*53ee8cc1Swenshuai.xi return &_stNJPD_Status;
1398*53ee8cc1Swenshuai.xi }
1399*53ee8cc1Swenshuai.xi
1400*53ee8cc1Swenshuai.xi /********************************************************************/
1401*53ee8cc1Swenshuai.xi ///Get NJPD driver version
1402*53ee8cc1Swenshuai.xi ///@param MS_U8 **pVerString \b OUT NJPD version
1403*53ee8cc1Swenshuai.xi ///@return TRUE/FALSE
1404*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetLibVer(const MSIF_Version ** ppVersion)1405*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_GetLibVer(const MSIF_Version **ppVersion)
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi if (!ppVersion)
1408*53ee8cc1Swenshuai.xi {
1409*53ee8cc1Swenshuai.xi return FALSE;
1410*53ee8cc1Swenshuai.xi }
1411*53ee8cc1Swenshuai.xi *ppVersion = &_drv_jpd_version;
1412*53ee8cc1Swenshuai.xi return TRUE;
1413*53ee8cc1Swenshuai.xi }
1414*53ee8cc1Swenshuai.xi
1415*53ee8cc1Swenshuai.xi /********************************************************************/
1416*53ee8cc1Swenshuai.xi ///Enable NJPD ISR and register callback function.
1417*53ee8cc1Swenshuai.xi ///@param NJPD_IsrFunc IsrCb \b IN Interrupt callback function
1418*53ee8cc1Swenshuai.xi ///@return TRUE/FALSE
1419*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_EnableISR(NJPD_IsrFuncCb IsrCb)1420*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_EnableISR(NJPD_IsrFuncCb IsrCb)
1421*53ee8cc1Swenshuai.xi {
1422*53ee8cc1Swenshuai.xi if(TRUE == _stNJPD_Status.bIsrEnable)
1423*53ee8cc1Swenshuai.xi {
1424*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("NJPD ISR has been enabled!!\n");
1425*53ee8cc1Swenshuai.xi return FALSE;
1426*53ee8cc1Swenshuai.xi }
1427*53ee8cc1Swenshuai.xi
1428*53ee8cc1Swenshuai.xi if(TRUE == OSAL_NJPD_ISR_Attach((OSAL_NJPD_IsrFuncCb)_NJPD_ISRHandler))
1429*53ee8cc1Swenshuai.xi {
1430*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("Attach NJPD ISR Success!!\n");
1431*53ee8cc1Swenshuai.xi if(TRUE == OSAL_NJPD_ISR_Enable())
1432*53ee8cc1Swenshuai.xi {
1433*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MDrv_NJPD_EnableISR : Success!!\n");
1434*53ee8cc1Swenshuai.xi _stNJPD_Status.bIsrEnable = TRUE;
1435*53ee8cc1Swenshuai.xi if(IsrCb)
1436*53ee8cc1Swenshuai.xi {
1437*53ee8cc1Swenshuai.xi _pNJPDIsrCb = IsrCb;
1438*53ee8cc1Swenshuai.xi }
1439*53ee8cc1Swenshuai.xi return TRUE;
1440*53ee8cc1Swenshuai.xi }
1441*53ee8cc1Swenshuai.xi }
1442*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MDrv_NJPD_EnableISR Failed!!\n");
1443*53ee8cc1Swenshuai.xi return FALSE;
1444*53ee8cc1Swenshuai.xi }
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi /********************************************************************/
1447*53ee8cc1Swenshuai.xi ///Disable NJPD ISR and unregister callback function.
1448*53ee8cc1Swenshuai.xi ///@param NJPD_IsrFunc IsrCb \b IN Interrupt callback function
1449*53ee8cc1Swenshuai.xi ///@return TRUE/FALSE
1450*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_DisableISR(void)1451*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_DisableISR(void)
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi if(FALSE == _stNJPD_Status.bIsrEnable)
1454*53ee8cc1Swenshuai.xi {
1455*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("NJPD ISR has been disabled!!\n");
1456*53ee8cc1Swenshuai.xi return FALSE;
1457*53ee8cc1Swenshuai.xi }
1458*53ee8cc1Swenshuai.xi
1459*53ee8cc1Swenshuai.xi if(TRUE == OSAL_NJPD_ISR_Disable())
1460*53ee8cc1Swenshuai.xi {
1461*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("Disable NJPD ISR Success!!\n");
1462*53ee8cc1Swenshuai.xi if(TRUE == OSAL_NJPD_ISR_Detach())
1463*53ee8cc1Swenshuai.xi {
1464*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MDrv_NJPD_DisableISR : Success!!\n");
1465*53ee8cc1Swenshuai.xi _stNJPD_Status.bIsrEnable = FALSE;
1466*53ee8cc1Swenshuai.xi _pNJPDIsrCb = NULL;
1467*53ee8cc1Swenshuai.xi return TRUE;
1468*53ee8cc1Swenshuai.xi }
1469*53ee8cc1Swenshuai.xi }
1470*53ee8cc1Swenshuai.xi return FALSE;
1471*53ee8cc1Swenshuai.xi }
1472*53ee8cc1Swenshuai.xi
1473*53ee8cc1Swenshuai.xi /********************************************************************/
1474*53ee8cc1Swenshuai.xi ///Get current vertical line index written to memory
1475*53ee8cc1Swenshuai.xi ///@return current vertical line index written to memory
1476*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetCurMRCAddr(void)1477*53ee8cc1Swenshuai.xi MS_U32 MDrv_NJPD_GetCurMRCAddr(void)
1478*53ee8cc1Swenshuai.xi {
1479*53ee8cc1Swenshuai.xi return HAL_NJPD_GetCurMRCAddr();
1480*53ee8cc1Swenshuai.xi }
1481*53ee8cc1Swenshuai.xi
1482*53ee8cc1Swenshuai.xi /********************************************************************/
1483*53ee8cc1Swenshuai.xi ///Get current vertical line index written to memory
1484*53ee8cc1Swenshuai.xi ///@return current vertical line index written to memory
1485*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetCurRow(void)1486*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_GetCurRow(void)
1487*53ee8cc1Swenshuai.xi {
1488*53ee8cc1Swenshuai.xi return HAL_NJPD_GetCurRow();
1489*53ee8cc1Swenshuai.xi }
1490*53ee8cc1Swenshuai.xi
1491*53ee8cc1Swenshuai.xi /********************************************************************/
1492*53ee8cc1Swenshuai.xi ///Get current vertical line index written to memory
1493*53ee8cc1Swenshuai.xi ///@return current vertical line index written to memory
1494*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetCurCol(void)1495*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_GetCurCol(void)
1496*53ee8cc1Swenshuai.xi {
1497*53ee8cc1Swenshuai.xi return HAL_NJPD_GetCurCol();
1498*53ee8cc1Swenshuai.xi }
1499*53ee8cc1Swenshuai.xi /********************************************************************/
1500*53ee8cc1Swenshuai.xi ///Set write protect flag
1501*53ee8cc1Swenshuai.xi ///@return none
1502*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_SetAutoProtect(MS_BOOL enable)1503*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetAutoProtect(MS_BOOL enable)
1504*53ee8cc1Swenshuai.xi {
1505*53ee8cc1Swenshuai.xi HAL_NJPD_SetAutoProtect(enable);
1506*53ee8cc1Swenshuai.xi }
1507*53ee8cc1Swenshuai.xi
1508*53ee8cc1Swenshuai.xi /******************************************************************************/
1509*53ee8cc1Swenshuai.xi ///Set WPEN end address for NJPD
1510*53ee8cc1Swenshuai.xi ///@param u32ByteOffset \b IN End address for NJPD writing to MWC buffer
1511*53ee8cc1Swenshuai.xi ///@return none
1512*53ee8cc1Swenshuai.xi /******************************************************************************/
MDrv_NJPD_SetWPENEndAddr(MS_PHY u32ByteOffset)1513*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetWPENEndAddr(MS_PHY u32ByteOffset)
1514*53ee8cc1Swenshuai.xi {
1515*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
1516*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
1517*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
1518*53ee8cc1Swenshuai.xi
1519*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MDrv_NJPD_SetWPENEndAddr=0x%tx\n", (ptrdiff_t)u32ByteOffset);
1520*53ee8cc1Swenshuai.xi HAL_NJPD_SetWPENUBound_0_L(( u32ByteOffset >> 3 ) & 0xffffUL);
1521*53ee8cc1Swenshuai.xi HAL_NJPD_SetWPENUBound_0_H(( u32ByteOffset >> 3 ) >> 16);
1522*53ee8cc1Swenshuai.xi }
1523*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetWPENStartAddr(MS_PHY u32ByteOffset)1524*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetWPENStartAddr(MS_PHY u32ByteOffset)
1525*53ee8cc1Swenshuai.xi {
1526*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
1527*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
1528*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
1529*53ee8cc1Swenshuai.xi
1530*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("MDrv_NJPD_SetWPENStartAddr=0x%tx\n", (ptrdiff_t)u32ByteOffset);
1531*53ee8cc1Swenshuai.xi HAL_NJPD_SetWPENLBound_0_L(( u32ByteOffset >> 3 ) & 0xffffUL);
1532*53ee8cc1Swenshuai.xi HAL_NJPD_SetWPENLBound_0_H(( u32ByteOffset >> 3 ) >> 16);
1533*53ee8cc1Swenshuai.xi }
1534*53ee8cc1Swenshuai.xi
1535*53ee8cc1Swenshuai.xi /********************************************************************/
1536*53ee8cc1Swenshuai.xi ///Set Spare Register
1537*53ee8cc1Swenshuai.xi ///@param u16Value \n IN register SCONFIG
1538*53ee8cc1Swenshuai.xi ///@return none
1539*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_SetSpare(MS_U16 u16Value)1540*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetSpare(MS_U16 u16Value)
1541*53ee8cc1Swenshuai.xi {
1542*53ee8cc1Swenshuai.xi HAL_NJPD_SetSpare00(u16Value);
1543*53ee8cc1Swenshuai.xi }
1544*53ee8cc1Swenshuai.xi
1545*53ee8cc1Swenshuai.xi /********************************************************************/
1546*53ee8cc1Swenshuai.xi ///Get Spare Register
1547*53ee8cc1Swenshuai.xi ///@return Spare Register
1548*53ee8cc1Swenshuai.xi /********************************************************************/
MDrv_NJPD_GetSpare(void)1549*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_GetSpare(void)
1550*53ee8cc1Swenshuai.xi {
1551*53ee8cc1Swenshuai.xi return HAL_NJPD_GetSpare00();
1552*53ee8cc1Swenshuai.xi }
1553*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetMRC_Valid(MS_U16 u16Value)1554*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetMRC_Valid(MS_U16 u16Value)
1555*53ee8cc1Swenshuai.xi {
1556*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s() with u16Value=0x%x\n", __FUNCTION__, u16Value);
1557*53ee8cc1Swenshuai.xi #if ENABLE_FF00FFD_TO_FFFFFFD
1558*53ee8cc1Swenshuai.xi MS_U32 u32Time =MDrv_TIMER_GetUs(E_TIMER_1);
1559*53ee8cc1Swenshuai.xi if(u16Value & NJPD_MRC0_VALID)
1560*53ee8cc1Swenshuai.xi {
1561*53ee8cc1Swenshuai.xi MS_U32 u32addr;
1562*53ee8cc1Swenshuai.xi for(u32addr=MS_PA2KSEG1(u32MRC0_Start[eNJPDNum]); u32addr<MS_PA2KSEG1(u32MRC0_End[eNJPDNum]); u32addr++)
1563*53ee8cc1Swenshuai.xi {
1564*53ee8cc1Swenshuai.xi if(((*(MS_U8 *)u32addr)==0xff )&& ((*(MS_U8 *)(u32addr+1))==0x00)
1565*53ee8cc1Swenshuai.xi &&((*(MS_U8 *)(u32addr+2))==0xff )&&(((*(MS_U8 *)(u32addr+3)) >>4)==0xd ))
1566*53ee8cc1Swenshuai.xi {
1567*53ee8cc1Swenshuai.xi (*(MS_U8 *)(u32addr+1)) = 0xff;
1568*53ee8cc1Swenshuai.xi }
1569*53ee8cc1Swenshuai.xi }
1570*53ee8cc1Swenshuai.xi }
1571*53ee8cc1Swenshuai.xi if(u16Value & NJPD_MRC1_VALID)
1572*53ee8cc1Swenshuai.xi {
1573*53ee8cc1Swenshuai.xi MS_U32 u32addr;
1574*53ee8cc1Swenshuai.xi for(u32addr=MS_PA2KSEG1(u32MRC1_Start[eNJPDNum]); u32addr<MS_PA2KSEG1(u32MRC1_End[eNJPDNum]); u32addr++)
1575*53ee8cc1Swenshuai.xi {
1576*53ee8cc1Swenshuai.xi if(((*(MS_U8 *)u32addr)==0xff )&& ((*(MS_U8 *)(u32addr+1))==0x00)
1577*53ee8cc1Swenshuai.xi &&((*(MS_U8 *)(u32addr+2))==0xff )&&(((*(MS_U8 *)(u32addr+3)) >>4)==0xd ))
1578*53ee8cc1Swenshuai.xi {
1579*53ee8cc1Swenshuai.xi (*(MS_U8 *)(u32addr+1)) = 0xff;
1580*53ee8cc1Swenshuai.xi }
1581*53ee8cc1Swenshuai.xi }
1582*53ee8cc1Swenshuai.xi
1583*53ee8cc1Swenshuai.xi }
1584*53ee8cc1Swenshuai.xi
1585*53ee8cc1Swenshuai.xi if(u16Value & NJPD_MRC0_VALID && u16Value & NJPD_MRC1_VALID)
1586*53ee8cc1Swenshuai.xi printf("[B]waste %ldus, size=%ld\n", MDrv_TIMER_GetUs(E_TIMER_1)-u32Time, u32MRC1_End[eNJPDNum]-u32MRC0_Start[eNJPDNum]);
1587*53ee8cc1Swenshuai.xi else if(u16Value & NJPD_MRC0_VALID)
1588*53ee8cc1Swenshuai.xi printf("[0]waste %ldus, size=%ld\n", MDrv_TIMER_GetUs(E_TIMER_1)-u32Time, u32MRC0_End[eNJPDNum]-u32MRC0_Start[eNJPDNum]);
1589*53ee8cc1Swenshuai.xi else if(u16Value & NJPD_MRC1_VALID)
1590*53ee8cc1Swenshuai.xi printf("[1]waste %ldus, size=%ld\n", MDrv_TIMER_GetUs(E_TIMER_1)-u32Time, u32MRC1_End[eNJPDNum]-u32MRC1_Start[eNJPDNum]);
1591*53ee8cc1Swenshuai.xi #endif
1592*53ee8cc1Swenshuai.xi
1593*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg(u16Value);
1594*53ee8cc1Swenshuai.xi }
1595*53ee8cc1Swenshuai.xi
MDrv_NJPD_DecodeEnable()1596*53ee8cc1Swenshuai.xi void MDrv_NJPD_DecodeEnable()
1597*53ee8cc1Swenshuai.xi {
1598*53ee8cc1Swenshuai.xi
1599*53ee8cc1Swenshuai.xi #if 0
1600*53ee8cc1Swenshuai.xi MDrv_NJPD_TableRead();
1601*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1602*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Group table!!!!!!!!!!!!!!!!\n");
1603*53ee8cc1Swenshuai.xi if(bIs3HuffTbl[eNJPDNum])
1604*53ee8cc1Swenshuai.xi {
1605*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 96*4);
1606*53ee8cc1Swenshuai.xi }
1607*53ee8cc1Swenshuai.xi else
1608*53ee8cc1Swenshuai.xi {
1609*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SCWGIF_BASE), 64*4);
1610*53ee8cc1Swenshuai.xi }
1611*53ee8cc1Swenshuai.xi #endif
1612*53ee8cc1Swenshuai.xi
1613*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1614*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Huffman table!!!!!!!!!!!!!!!!\n");
1615*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_SYMIDX_BASE), 0x2b8);
1616*53ee8cc1Swenshuai.xi #endif
1617*53ee8cc1Swenshuai.xi
1618*53ee8cc1Swenshuai.xi #if ENABLE_NJPD_DEBUG_MSG
1619*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("print the Quantization table!!!!!!!!!!!!!!!!\n");
1620*53ee8cc1Swenshuai.xi _NJPD_PrintMem(MS_PA2KSEG1(u32TablePhyAddr[eNJPDNum]+NJPD_MEM_QTBL_BASE), 64*4);
1621*53ee8cc1Swenshuai.xi #endif
1622*53ee8cc1Swenshuai.xi #endif
1623*53ee8cc1Swenshuai.xi
1624*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s().....\n", __FUNCTION__);
1625*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg(NJPD_DECODE_ENABLE);
1626*53ee8cc1Swenshuai.xi }
1627*53ee8cc1Swenshuai.xi
1628*53ee8cc1Swenshuai.xi
MDrv_NJPD_TableLoadingStart()1629*53ee8cc1Swenshuai.xi void MDrv_NJPD_TableLoadingStart()
1630*53ee8cc1Swenshuai.xi {
1631*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s().....\n", __FUNCTION__);
1632*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg(NJPD_TABLE_LOADING_START);
1633*53ee8cc1Swenshuai.xi }
1634*53ee8cc1Swenshuai.xi
1635*53ee8cc1Swenshuai.xi
MDrv_NJPD_ReadLastBuffer()1636*53ee8cc1Swenshuai.xi void MDrv_NJPD_ReadLastBuffer()
1637*53ee8cc1Swenshuai.xi {
1638*53ee8cc1Swenshuai.xi NJPD_DEBUG_DRV_MSG("%s().....\n", __FUNCTION__);
1639*53ee8cc1Swenshuai.xi HAL_NJPD_SetWriteOneClearReg(NJPD_MRC_LAST);
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetScalingDownFactor(NJPD_SCALING_DOWN_FACTOR eScalingFactor)1642*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetScalingDownFactor(NJPD_SCALING_DOWN_FACTOR eScalingFactor)
1643*53ee8cc1Swenshuai.xi {
1644*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1645*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_DOWN_SCALE) | ((MS_U16)eScalingFactor<<0));
1646*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1647*53ee8cc1Swenshuai.xi }
1648*53ee8cc1Swenshuai.xi
MDrv_NJPD_GTable_Rst(MS_BOOL bEnable)1649*53ee8cc1Swenshuai.xi void MDrv_NJPD_GTable_Rst(MS_BOOL bEnable)
1650*53ee8cc1Swenshuai.xi {
1651*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1652*53ee8cc1Swenshuai.xi if(bEnable)
1653*53ee8cc1Swenshuai.xi {
1654*53ee8cc1Swenshuai.xi u16Value = (HAL_NJPD_Get_GlobalSetting01() & ~NJPD_GTABLE_RST);
1655*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1656*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_GTABLE_RST) | ((MS_U16)bEnable<<10));
1657*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1658*53ee8cc1Swenshuai.xi }
1659*53ee8cc1Swenshuai.xi }
1660*53ee8cc1Swenshuai.xi
MDrv_NJPD_HTable_Reload_Enable(MS_BOOL bEnable)1661*53ee8cc1Swenshuai.xi void MDrv_NJPD_HTable_Reload_Enable(MS_BOOL bEnable)
1662*53ee8cc1Swenshuai.xi {
1663*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1664*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_HTABLE_RELOAD_EN) | ((MS_U16)bEnable<<11));
1665*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1666*53ee8cc1Swenshuai.xi }
1667*53ee8cc1Swenshuai.xi
MDrv_NJPD_GTable_Reload_Enable(MS_BOOL bEnable)1668*53ee8cc1Swenshuai.xi void MDrv_NJPD_GTable_Reload_Enable(MS_BOOL bEnable)
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1671*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_GTABLE_RELOAD_EN) | ((MS_U16)bEnable<<12));
1672*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1673*53ee8cc1Swenshuai.xi }
1674*53ee8cc1Swenshuai.xi
MDrv_NJPD_QTable_Reload_Enable(MS_BOOL bEnable)1675*53ee8cc1Swenshuai.xi void MDrv_NJPD_QTable_Reload_Enable(MS_BOOL bEnable)
1676*53ee8cc1Swenshuai.xi {
1677*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1678*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_QTABLE_RELOAD_EN) | ((MS_U16)bEnable<<13));
1679*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1680*53ee8cc1Swenshuai.xi }
1681*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetSoftwareVLD(MS_BOOL bEnable)1682*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetSoftwareVLD(MS_BOOL bEnable)
1683*53ee8cc1Swenshuai.xi {
1684*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1685*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting02() & ~(NJPD_REMOVE_0xFF00 | NJPD_REMOVE_0xFFFF | NJPD_FFD9_EN)) | NJPD_BITSTREAM_LE);
1686*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting02(u16Value);
1687*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting01() & ~NJPD_SVLD) | ((MS_U16)bEnable<<6));
1688*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting01(u16Value);
1689*53ee8cc1Swenshuai.xi if(bEnable)
1690*53ee8cc1Swenshuai.xi {
1691*53ee8cc1Swenshuai.xi // 20120619, clear last bit when SVJD or NJPD_REMOVE_0xFFFF ==0
1692*53ee8cc1Swenshuai.xi HAL_NJPD_SetSpare00(HAL_NJPD_GetSpare00() & 0xfffeUL);
1693*53ee8cc1Swenshuai.xi }
1694*53ee8cc1Swenshuai.xi }
1695*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetDifferentQTable(MS_BOOL bEnable)1696*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetDifferentQTable(MS_BOOL bEnable)
1697*53ee8cc1Swenshuai.xi {
1698*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1699*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting00() & ~NJPD_SUVQ) | ((MS_U16)bEnable<<7));
1700*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting00(u16Value);
1701*53ee8cc1Swenshuai.xi }
1702*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetDifferentHTable(MS_BOOL bEnable)1703*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetDifferentHTable(MS_BOOL bEnable)
1704*53ee8cc1Swenshuai.xi {
1705*53ee8cc1Swenshuai.xi MS_U16 u16Value;
1706*53ee8cc1Swenshuai.xi bIs3HuffTbl[eNJPDNum] = bEnable;
1707*53ee8cc1Swenshuai.xi u16Value = ((HAL_NJPD_Get_GlobalSetting00() & ~NJPD_SUVH) | ((MS_U16)bEnable<<8));
1708*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting00(u16Value);
1709*53ee8cc1Swenshuai.xi }
1710*53ee8cc1Swenshuai.xi
MDrv_NJPD_Set_GlobalSetting00(MS_U16 u16Value)1711*53ee8cc1Swenshuai.xi void MDrv_NJPD_Set_GlobalSetting00(MS_U16 u16Value)
1712*53ee8cc1Swenshuai.xi {
1713*53ee8cc1Swenshuai.xi HAL_NJPD_Set_GlobalSetting00(u16Value);
1714*53ee8cc1Swenshuai.xi }
1715*53ee8cc1Swenshuai.xi
MDrv_NJPD_Get_GlobalSetting00(void)1716*53ee8cc1Swenshuai.xi MS_U16 MDrv_NJPD_Get_GlobalSetting00(void)
1717*53ee8cc1Swenshuai.xi {
1718*53ee8cc1Swenshuai.xi return HAL_NJPD_Get_GlobalSetting00();
1719*53ee8cc1Swenshuai.xi }
1720*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetHTableStartAddr(MS_PHY u32ByteOffset)1721*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetHTableStartAddr(MS_PHY u32ByteOffset)
1722*53ee8cc1Swenshuai.xi {
1723*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
1724*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
1725*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
1726*53ee8cc1Swenshuai.xi
1727*53ee8cc1Swenshuai.xi HAL_NJPD_SetHTableStart_Low((u32ByteOffset & 0xffffUL));
1728*53ee8cc1Swenshuai.xi HAL_NJPD_SetHTableStart_High((u32ByteOffset >> 16));
1729*53ee8cc1Swenshuai.xi }
1730*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetQTableStartAddr(MS_PHY u32ByteOffset)1731*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetQTableStartAddr(MS_PHY u32ByteOffset)
1732*53ee8cc1Swenshuai.xi {
1733*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
1734*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
1735*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
1736*53ee8cc1Swenshuai.xi
1737*53ee8cc1Swenshuai.xi HAL_NJPD_SetQTableStart_Low((u32ByteOffset & 0xffffUL));
1738*53ee8cc1Swenshuai.xi HAL_NJPD_SetQTableStart_High((u32ByteOffset >> 16));
1739*53ee8cc1Swenshuai.xi }
1740*53ee8cc1Swenshuai.xi
1741*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetGTableStartAddr(MS_PHY u32ByteOffset)1742*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetGTableStartAddr(MS_PHY u32ByteOffset)
1743*53ee8cc1Swenshuai.xi {
1744*53ee8cc1Swenshuai.xi MS_U8 u8MiuSel = 0;
1745*53ee8cc1Swenshuai.xi _phy_to_miu_offset(u8MiuSel, u32ByteOffset, u32ByteOffset);
1746*53ee8cc1Swenshuai.xi UNUSED(u8MiuSel);
1747*53ee8cc1Swenshuai.xi
1748*53ee8cc1Swenshuai.xi HAL_NJPD_SetGTableStart_Low((u32ByteOffset & 0xffffUL));
1749*53ee8cc1Swenshuai.xi HAL_NJPD_SetGTableStart_High((u32ByteOffset >> 16));
1750*53ee8cc1Swenshuai.xi }
1751*53ee8cc1Swenshuai.xi
1752*53ee8cc1Swenshuai.xi
MDrv_NJPD_EnablePowerSaving()1753*53ee8cc1Swenshuai.xi void MDrv_NJPD_EnablePowerSaving()
1754*53ee8cc1Swenshuai.xi {
1755*53ee8cc1Swenshuai.xi HAL_NJPD_SetClockGate(0xFF);
1756*53ee8cc1Swenshuai.xi }
1757*53ee8cc1Swenshuai.xi
MDrv_NJPD_SetNJPDInstance(JPD_Number JPDNum)1758*53ee8cc1Swenshuai.xi void MDrv_NJPD_SetNJPDInstance(JPD_Number JPDNum)
1759*53ee8cc1Swenshuai.xi {
1760*53ee8cc1Swenshuai.xi eNJPDNum = JPDNum;
1761*53ee8cc1Swenshuai.xi HAL_NJPD_SetNJPDInstance(JPDNum);
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi
MDrv_NJPD_IsNeedToPatch(NJPD_PATCH_INDEX eIndex)1764*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_IsNeedToPatch(NJPD_PATCH_INDEX eIndex)
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi return HAL_NJPD_IsNeedToPatch(eIndex);
1767*53ee8cc1Swenshuai.xi }
1768*53ee8cc1Swenshuai.xi
1769*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
MDrv_NJPD_Get_ISR(void)1770*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NJPD_Get_ISR(void)
1771*53ee8cc1Swenshuai.xi {
1772*53ee8cc1Swenshuai.xi return gbCallbackFlag;
1773*53ee8cc1Swenshuai.xi }
1774*53ee8cc1Swenshuai.xi
MDrv_NJPD_Set_ISR(MS_BOOL val)1775*53ee8cc1Swenshuai.xi void MDrv_NJPD_Set_ISR(MS_BOOL val)
1776*53ee8cc1Swenshuai.xi {
1777*53ee8cc1Swenshuai.xi gbCallbackFlag = val;
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi #endif
1780*53ee8cc1Swenshuai.xi
MDrv_NJPD_JPDCount(void)1781*53ee8cc1Swenshuai.xi MS_U8 MDrv_NJPD_JPDCount(void)
1782*53ee8cc1Swenshuai.xi {
1783*53ee8cc1Swenshuai.xi return HAL_NJPD_JPDCount();
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi
1786*53ee8cc1Swenshuai.xi
1787