xref: /utopia/UTPA2-700.0.x/modules/dscmb/drv/nsk2/drvNSK2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
93*53ee8cc1Swenshuai.xi #define _DRVNSK2_C
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi /// file drvNSK2.c
97*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
98*53ee8cc1Swenshuai.xi /// @brief
99*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
101*53ee8cc1Swenshuai.xi // Header Files
102*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
103*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
104*53ee8cc1Swenshuai.xi #include <linux/string.h>
105*53ee8cc1Swenshuai.xi #else
106*53ee8cc1Swenshuai.xi #include "string.h"
107*53ee8cc1Swenshuai.xi #endif
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsVersion.h"
111*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
112*53ee8cc1Swenshuai.xi #include "MsOS.h"
113*53ee8cc1Swenshuai.xi #include "asmCPU.h"
114*53ee8cc1Swenshuai.xi #include "halCHIP.h"
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi #include "drvNSK2.h"
117*53ee8cc1Swenshuai.xi #include "halNSK2.h"
118*53ee8cc1Swenshuai.xi #include "drvNSK2Type.h"
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
122*53ee8cc1Swenshuai.xi // Local defines & local structures
123*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi static MS_U32 _g32NSK2DbgLv = NSK2_DBGLV_DEBUG;
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #define DRVNSK2_DBG(lv, x, args...)   if (lv <= _g32NSK2DbgLv ) \
128*53ee8cc1Swenshuai.xi                                         {printf(x, ##args);}
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi #define NSK2_TASK_STACK_SIZE        16*1024
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi #define NDS_NSK2_IRQ                E_INT_IRQ_CA_NSK_INT
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi #define NSK2_INT_EVENT_0            0x00000001
135*53ee8cc1Swenshuai.xi #define NSK2_INT_GROUP              0x0000FFFF
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi //#define ACPUTest
138*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
139*53ee8cc1Swenshuai.xi // Local Variables
140*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
141*53ee8cc1Swenshuai.xi static MS_U32  u32NSK2_Stack[NSK2_TASK_STACK_SIZE/sizeof(MS_U32)];
142*53ee8cc1Swenshuai.xi static MS_S32  s32NSK2_TaskId = -1;
143*53ee8cc1Swenshuai.xi static MS_S32  s32NSK2_EventId = -1;
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi static MS_BOOL _bNSKInit = FALSE;
146*53ee8cc1Swenshuai.xi static NSK2_IntNotify _gNs2IntNtf = NULL;
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi #ifdef ACPUTest
149*53ee8cc1Swenshuai.xi static MS_U32  u32NSK2IntStatus = 0;
150*53ee8cc1Swenshuai.xi #endif
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
153*53ee8cc1Swenshuai.xi // Global Variables
154*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
158*53ee8cc1Swenshuai.xi // External funciton
159*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
160*53ee8cc1Swenshuai.xi 
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
163*53ee8cc1Swenshuai.xi // Local Function
164*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
165*53ee8cc1Swenshuai.xi 
_NSK2_Isr(void)166*53ee8cc1Swenshuai.xi static void _NSK2_Isr(void)
167*53ee8cc1Swenshuai.xi {
168*53ee8cc1Swenshuai.xi 	MS_U32 status;
169*53ee8cc1Swenshuai.xi    	//MsOS_DisableInterrupt(NDS_NSK2_IRQ);
170*53ee8cc1Swenshuai.xi 
171*53ee8cc1Swenshuai.xi 	status = HAL_NSK2_GetIntStatus();
172*53ee8cc1Swenshuai.xi #ifdef ACPUTest
173*53ee8cc1Swenshuai.xi     u32NSK2IntStatus = status;
174*53ee8cc1Swenshuai.xi     //printf("_NSK2_Isr, status = %x time = %d\n",u32NSK2IntStatus,MsOS_GetSystemTime());
175*53ee8cc1Swenshuai.xi #else
176*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"_NSK2_Isr, status = %x\n",status);
177*53ee8cc1Swenshuai.xi 	HAL_NSK2_ClearInt(status);
178*53ee8cc1Swenshuai.xi     MsOS_SetEvent(s32NSK2_EventId, status);
179*53ee8cc1Swenshuai.xi #endif
180*53ee8cc1Swenshuai.xi }
181*53ee8cc1Swenshuai.xi 
_NSK2_Isr_Task(void)182*53ee8cc1Swenshuai.xi static void _NSK2_Isr_Task(void)
183*53ee8cc1Swenshuai.xi {
184*53ee8cc1Swenshuai.xi     MS_U32              u32Reg;
185*53ee8cc1Swenshuai.xi     MS_U32              u32Events = 0;
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi     while(1)
188*53ee8cc1Swenshuai.xi     {
189*53ee8cc1Swenshuai.xi         MsOS_WaitEvent(s32NSK2_EventId, NSK2_INT_GROUP, &u32Events, E_OR_CLEAR, MSOS_WAIT_FOREVER);
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi         DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"s32NSK2_EventId = %d\n",s32NSK2_EventId);
192*53ee8cc1Swenshuai.xi 		u32Reg = u32Events;
193*53ee8cc1Swenshuai.xi         if (NSK2_INT_ASYNC_EVENT != u32Reg)	//because frequent int's for this event
194*53ee8cc1Swenshuai.xi        	{
195*53ee8cc1Swenshuai.xi 	       	if(_gNs2IntNtf != NULL)
196*53ee8cc1Swenshuai.xi 	        {
197*53ee8cc1Swenshuai.xi 	            _gNs2IntNtf(u32Reg, 0);
198*53ee8cc1Swenshuai.xi 	        }
199*53ee8cc1Swenshuai.xi        	}
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
202*53ee8cc1Swenshuai.xi 		MsOS_EnableInterrupt(NDS_NSK2_IRQ);
203*53ee8cc1Swenshuai.xi     }
204*53ee8cc1Swenshuai.xi }
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
208*53ee8cc1Swenshuai.xi // Global Function
209*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi 
MDrv_NSK2_Init(void)212*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_Init(void)
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi     //init clock, register bank
215*53ee8cc1Swenshuai.xi     MS_VIRT u32Base;
216*53ee8cc1Swenshuai.xi 	MS_PHY u32BankSize;
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi     if(TRUE == _bNSKInit)
219*53ee8cc1Swenshuai.xi         return TRUE;
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"enter %s \n", __FUNCTION__);
222*53ee8cc1Swenshuai.xi 
223*53ee8cc1Swenshuai.xi     if (FALSE == MDrv_MMIO_GetBASE(&u32Base, &u32BankSize, MS_MODULE_PM))
224*53ee8cc1Swenshuai.xi     {
225*53ee8cc1Swenshuai.xi         DRVNSK2_DBG(NSK2_DBGLV_EMERG,"%s, %d MDrv_MMIO_GetBASE (NonPM base)fail\n", __FUNCTION__,__LINE__);
226*53ee8cc1Swenshuai.xi         MS_ASSERT(0);
227*53ee8cc1Swenshuai.xi     }
228*53ee8cc1Swenshuai.xi 
229*53ee8cc1Swenshuai.xi     HAL_NSK2_SetBase((MS_U32)u32Base); //set non pm bank
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi     s32NSK2_EventId = MsOS_CreateEventGroup("NDS_NSK2_Event");
233*53ee8cc1Swenshuai.xi     if (s32NSK2_EventId < 0)
234*53ee8cc1Swenshuai.xi     {
235*53ee8cc1Swenshuai.xi         return FALSE;
236*53ee8cc1Swenshuai.xi     }
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi     s32NSK2_TaskId = MsOS_CreateTask((TaskEntry)_NSK2_Isr_Task,
239*53ee8cc1Swenshuai.xi                                     (MS_U32)NULL,
240*53ee8cc1Swenshuai.xi                                     E_TASK_PRI_HIGH,
241*53ee8cc1Swenshuai.xi                                     TRUE,
242*53ee8cc1Swenshuai.xi                                     u32NSK2_Stack,
243*53ee8cc1Swenshuai.xi                                     NSK2_TASK_STACK_SIZE,
244*53ee8cc1Swenshuai.xi                                     "NDS_NSK2_Task");
245*53ee8cc1Swenshuai.xi     if (s32NSK2_TaskId < 0)
246*53ee8cc1Swenshuai.xi     {
247*53ee8cc1Swenshuai.xi         MsOS_DeleteEventGroup(s32NSK2_EventId);
248*53ee8cc1Swenshuai.xi         return FALSE;
249*53ee8cc1Swenshuai.xi     }
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi     MsOS_DisableInterrupt(NDS_NSK2_IRQ);
252*53ee8cc1Swenshuai.xi     MsOS_DetachInterrupt(NDS_NSK2_IRQ);
253*53ee8cc1Swenshuai.xi     MsOS_AttachInterrupt(NDS_NSK2_IRQ, (InterruptCb)_NSK2_Isr);
254*53ee8cc1Swenshuai.xi     MsOS_EnableInterrupt(NDS_NSK2_IRQ);
255*53ee8cc1Swenshuai.xi 
256*53ee8cc1Swenshuai.xi     _bNSKInit = TRUE;
257*53ee8cc1Swenshuai.xi     return TRUE;
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi 
MDrv_NSK2_Exit(void)260*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_Exit(void)
261*53ee8cc1Swenshuai.xi {
262*53ee8cc1Swenshuai.xi     return HAL_NSK2_Exit();
263*53ee8cc1Swenshuai.xi }
264*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CtrlInt(MS_BOOL bEnable)265*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CtrlInt(MS_BOOL bEnable)
266*53ee8cc1Swenshuai.xi {
267*53ee8cc1Swenshuai.xi     if(TRUE == bEnable)
268*53ee8cc1Swenshuai.xi     {
269*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(NDS_NSK2_IRQ);
270*53ee8cc1Swenshuai.xi     }
271*53ee8cc1Swenshuai.xi     else
272*53ee8cc1Swenshuai.xi     {
273*53ee8cc1Swenshuai.xi         MsOS_DisableInterrupt(NDS_NSK2_IRQ);
274*53ee8cc1Swenshuai.xi     }
275*53ee8cc1Swenshuai.xi 
276*53ee8cc1Swenshuai.xi     return TRUE;
277*53ee8cc1Swenshuai.xi }
278*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ColdReset(void)279*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ColdReset(void)
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
282*53ee8cc1Swenshuai.xi     HAL_NSK2_ColdReset();
283*53ee8cc1Swenshuai.xi     return TRUE;
284*53ee8cc1Swenshuai.xi }
285*53ee8cc1Swenshuai.xi 
MDrv_NSK2_EndSubtest(void)286*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_EndSubtest(void)
287*53ee8cc1Swenshuai.xi {
288*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
289*53ee8cc1Swenshuai.xi     HAL_NSK2_EndSubtest();
290*53ee8cc1Swenshuai.xi     return TRUE;
291*53ee8cc1Swenshuai.xi }
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi 
MDrv_NSK2_Compare(MS_U32 StartAddr,MS_U32 CompareLens,MS_U32 CompareSim,MS_U32 Mask,MS_U32 ExpectResult)294*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_Compare(MS_U32 StartAddr, MS_U32 CompareLens, MS_U32 CompareSim,
295*53ee8cc1Swenshuai.xi                          MS_U32 Mask, MS_U32 ExpectResult)
296*53ee8cc1Swenshuai.xi {
297*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi #ifdef ACPUTest
300*53ee8cc1Swenshuai.xi     if(0xFC08 == StartAddr)
301*53ee8cc1Swenshuai.xi     {
302*53ee8cc1Swenshuai.xi         MS_U32 status;
303*53ee8cc1Swenshuai.xi         status = HAL_NSK2_Compare(StartAddr, CompareLens, CompareSim, Mask,  ExpectResult);
304*53ee8cc1Swenshuai.xi         HAL_NSK2_ClearInt(ExpectResult);
305*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(NDS_NSK2_IRQ);
306*53ee8cc1Swenshuai.xi         return status;
307*53ee8cc1Swenshuai.xi     }
308*53ee8cc1Swenshuai.xi     else
309*53ee8cc1Swenshuai.xi         return HAL_NSK2_Compare(StartAddr, CompareLens, CompareSim, Mask,  ExpectResult);
310*53ee8cc1Swenshuai.xi #else
311*53ee8cc1Swenshuai.xi     return HAL_NSK2_Compare(StartAddr, CompareLens, CompareSim, Mask,  ExpectResult);
312*53ee8cc1Swenshuai.xi #endif
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi }
316*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CompareMem(MS_U32 reserved,MS_U32 StartAddr,MS_U32 CompareLens,MS_U32 CompareSim,MS_U32 ExpectResult,void * pGolden)317*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CompareMem(MS_U32 reserved, MS_U32 StartAddr, MS_U32 CompareLens,
318*53ee8cc1Swenshuai.xi                             MS_U32 CompareSim, MS_U32 ExpectResult, void *pGolden)
319*53ee8cc1Swenshuai.xi {
320*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
321*53ee8cc1Swenshuai.xi     return HAL_NSK2_CompareMem(reserved, StartAddr, CompareLens, CompareSim, ExpectResult, pGolden);
322*53ee8cc1Swenshuai.xi }
323*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteMem(MS_U32 reserved,MS_U32 StartAddr,MS_U32 WriteLens,void * pWriteData)324*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteMem(MS_U32 reserved, MS_U32 StartAddr, MS_U32 WriteLens, void *pWriteData)
325*53ee8cc1Swenshuai.xi {
326*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
327*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteMem(reserved,StartAddr,WriteLens,pWriteData);
328*53ee8cc1Swenshuai.xi     return TRUE;
329*53ee8cc1Swenshuai.xi }
330*53ee8cc1Swenshuai.xi 
331*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteSFR(MS_U32 StartAddr,MS_U32 Data)332*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteSFR(MS_U32 StartAddr, MS_U32 Data)
333*53ee8cc1Swenshuai.xi {
334*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
335*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteSFR(StartAddr, Data);
336*53ee8cc1Swenshuai.xi     return TRUE;
337*53ee8cc1Swenshuai.xi }
338*53ee8cc1Swenshuai.xi 
MDrv_NSK2_BasicInitializationComplete(void)339*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_BasicInitializationComplete(void)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi     //the chip should manager internal variables NSKactive and ConcurrencyMode
342*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi     HAL_NSK2_NSKBasicInitializationComplete();
345*53ee8cc1Swenshuai.xi     return TRUE;
346*53ee8cc1Swenshuai.xi }
347*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteESA(MS_U8 ESASelect,MS_U8 ESASubSelect,MS_U8 pid_no)348*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteESA(MS_U8 ESASelect, MS_U8 ESASubSelect, MS_U8 pid_no)
349*53ee8cc1Swenshuai.xi {
350*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteESA(ESASelect, ESASubSelect, pid_no);
353*53ee8cc1Swenshuai.xi     return TRUE;
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi }
356*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteTransportKey(MS_U8 SCB,MS_U8 ForceSCB,void * pLabel,MS_U8 pid_no)357*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteTransportKey(MS_U8 SCB, MS_U8 ForceSCB, void *pLabel, MS_U8 pid_no )
358*53ee8cc1Swenshuai.xi {
359*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
360*53ee8cc1Swenshuai.xi 
361*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"SCB = %x, ForceSCB = %x\n",SCB,ForceSCB);
362*53ee8cc1Swenshuai.xi 
363*53ee8cc1Swenshuai.xi 
364*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteTransportKey(SCB,ForceSCB,pLabel,pid_no);
365*53ee8cc1Swenshuai.xi     return TRUE;
366*53ee8cc1Swenshuai.xi }
367*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CompareKTE(MS_U32 reserved_1,MS_U32 reserved_2,void * pLabel)368*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CompareKTE(MS_U32 reserved_1, MS_U32 reserved_2, void *pLabel)
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
371*53ee8cc1Swenshuai.xi     return HAL_NSK2_CompareKTE(reserved_1, reserved_2, pLabel);
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CompareOut(MS_U32 reserved_1,MS_U32 reserved_2,MS_U32 HighDWord,MS_U32 LowDWord)374*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CompareOut(MS_U32 reserved_1, MS_U32 reserved_2, MS_U32 HighDWord, MS_U32 LowDWord)
375*53ee8cc1Swenshuai.xi {
376*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi     return HAL_NSK2_CompareOut( reserved_1, reserved_2, HighDWord, LowDWord);
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi 
MDrv_NSK2_SetRNG(MS_U32 reserved_1,MS_U16 RNG_Value)381*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_SetRNG(MS_U32 reserved_1, MS_U16 RNG_Value)
382*53ee8cc1Swenshuai.xi {
383*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi     HAL_NSK2_SetRNG( reserved_1, RNG_Value);
386*53ee8cc1Swenshuai.xi     return TRUE;
387*53ee8cc1Swenshuai.xi }
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi 
MDrv_NSK2_DriveKteAck(void)390*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_DriveKteAck(void)
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
393*53ee8cc1Swenshuai.xi     HAL_NSK2_DriveKteAck();
394*53ee8cc1Swenshuai.xi     return TRUE;
395*53ee8cc1Swenshuai.xi }
396*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteSCPUKey(void)397*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteSCPUKey(void)
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteSCPUKey();
400*53ee8cc1Swenshuai.xi }
401*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteReservedKey(void)402*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteReservedKey(void)
403*53ee8cc1Swenshuai.xi {
404*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteReservedKey();
405*53ee8cc1Swenshuai.xi }
406*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetReserveKeyNum(void)407*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetReserveKeyNum(void)
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetReserveKeyNum();
410*53ee8cc1Swenshuai.xi }
411*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteM2MKey(void * pIV,MS_U8 SubAlgo)412*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteM2MKey(void *pIV, MS_U8 SubAlgo)
413*53ee8cc1Swenshuai.xi {
414*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s, SubAlgo = %x \n", __FUNCTION__,SubAlgo);
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi     //can't find the algorithm meaning
417*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteM2MKey(pIV,SubAlgo);
418*53ee8cc1Swenshuai.xi     return TRUE;
419*53ee8cc1Swenshuai.xi }
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi // TODO: need to remove and check by MW
MDrv_NSK2_FillJTagPswd(void)422*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_FillJTagPswd(void)
423*53ee8cc1Swenshuai.xi {
424*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
425*53ee8cc1Swenshuai.xi     HAL_NSK2_SetJTagPswd();
426*53ee8cc1Swenshuai.xi     return TRUE;
427*53ee8cc1Swenshuai.xi }
428*53ee8cc1Swenshuai.xi 
429*53ee8cc1Swenshuai.xi // TODO: need to remove and check by MW
MDrv_NSK2_CheckPubOTPConfig(void * pCheck)430*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CheckPubOTPConfig(void *pCheck)
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
433*53ee8cc1Swenshuai.xi     return HAL_NSK2_CheckPubOTPConfig(pCheck);
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi 
436*53ee8cc1Swenshuai.xi // TODO:Check OTP control password here
MDrv_NSK2_UnlockOTPCtrl(void)437*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_UnlockOTPCtrl(void)
438*53ee8cc1Swenshuai.xi {
439*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
440*53ee8cc1Swenshuai.xi     HAL_NSK2_UnlockOTPCtrl();
441*53ee8cc1Swenshuai.xi     return TRUE;
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi 
444*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadData(MS_U32 addr_offset,MS_U32 data_size,MS_U8 * data)445*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ReadData(MS_U32 addr_offset, MS_U32 data_size, MS_U8 *data)
446*53ee8cc1Swenshuai.xi {
447*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
448*53ee8cc1Swenshuai.xi     return HAL_NSK2_ReadData(addr_offset, data_size, data);
449*53ee8cc1Swenshuai.xi }
450*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteData(MS_U32 addr_offset,MS_U32 data_size,MS_U8 * data)451*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteData(MS_U32 addr_offset, MS_U32 data_size, MS_U8 *data)
452*53ee8cc1Swenshuai.xi {
453*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
454*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteData(addr_offset, data_size, data);
455*53ee8cc1Swenshuai.xi }
456*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadData8(MS_U32 addr_offset,MS_U32 data_size,MS_U8 * data)457*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ReadData8(MS_U32 addr_offset, MS_U32 data_size, MS_U8 *data)
458*53ee8cc1Swenshuai.xi {
459*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
460*53ee8cc1Swenshuai.xi     return HAL_NSK2_ReadData8(addr_offset, data_size, data);
461*53ee8cc1Swenshuai.xi }
462*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteData8(MS_U32 addr_offset,MS_U32 data_size,MS_U8 * data)463*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteData8(MS_U32 addr_offset, MS_U32 data_size, MS_U8 *data)
464*53ee8cc1Swenshuai.xi {
465*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
466*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteData8(addr_offset, data_size, data);
467*53ee8cc1Swenshuai.xi }
468*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadData32(MS_U32 addr_offset,MS_U32 data_size,MS_U32 * data)469*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ReadData32(MS_U32 addr_offset, MS_U32 data_size, MS_U32 *data)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
472*53ee8cc1Swenshuai.xi     return HAL_NSK2_ReadData32(addr_offset, data_size, data);
473*53ee8cc1Swenshuai.xi }
474*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteData32(MS_U32 addr_offset,MS_U32 data_size,MS_U32 * data)475*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteData32(MS_U32 addr_offset, MS_U32 data_size, MS_U32 *data)
476*53ee8cc1Swenshuai.xi {
477*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
478*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteData32(addr_offset, data_size, data);
479*53ee8cc1Swenshuai.xi }
480*53ee8cc1Swenshuai.xi 
481*53ee8cc1Swenshuai.xi 
MDrv_NSK2_SetIntNotify(NSK2_IntNotify IntNotify)482*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_SetIntNotify(NSK2_IntNotify IntNotify)
483*53ee8cc1Swenshuai.xi {
484*53ee8cc1Swenshuai.xi     _gNs2IntNtf = IntNotify;
485*53ee8cc1Swenshuai.xi     return TRUE;
486*53ee8cc1Swenshuai.xi }
487*53ee8cc1Swenshuai.xi 
488*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ExcuteCmd(MS_U32 command,MS_U32 control,MS_U32 register_offset,MS_U32 data_size,const MS_U8 * data)489*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ExcuteCmd(MS_U32 command, MS_U32 control,
490*53ee8cc1Swenshuai.xi                            MS_U32 register_offset, MS_U32 data_size,
491*53ee8cc1Swenshuai.xi                            const MS_U8    *data)
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi     MS_U32 u32Status;
494*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteControl(control);
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi     if(data_size != 0)
497*53ee8cc1Swenshuai.xi     {
498*53ee8cc1Swenshuai.xi         DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s data_size = %x\n", __FUNCTION__,data_size);
499*53ee8cc1Swenshuai.xi         u32Status = HAL_NSK2_WriteData8(register_offset, data_size, ( MS_U8 *)data);
500*53ee8cc1Swenshuai.xi         if(TRUE != u32Status)
501*53ee8cc1Swenshuai.xi         {
502*53ee8cc1Swenshuai.xi             DRVNSK2_DBG(NSK2_DBGLV_ERR,"%s, write excute cmd error", __FUNCTION__);
503*53ee8cc1Swenshuai.xi         }
504*53ee8cc1Swenshuai.xi     }
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi     HAL_NSK2_WriteCommand(command);
507*53ee8cc1Swenshuai.xi     return TRUE;
508*53ee8cc1Swenshuai.xi }
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi 
512*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetMaxXConn(void)513*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetMaxXConn(void)
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetMaxXConn();
516*53ee8cc1Swenshuai.xi }
517*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CMChannelNum(void)518*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CMChannelNum(void)
519*53ee8cc1Swenshuai.xi {
520*53ee8cc1Swenshuai.xi     return HAL_NSK2_CMChannelNum();
521*53ee8cc1Swenshuai.xi }
522*53ee8cc1Swenshuai.xi 
MDrv_NSK2_SetDbgLevel(MS_U32 u32Level)523*53ee8cc1Swenshuai.xi void MDrv_NSK2_SetDbgLevel(MS_U32 u32Level)
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi     _g32NSK2DbgLv = u32Level;
526*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO, "%s level: %x\n", __FUNCTION__, u32Level);
527*53ee8cc1Swenshuai.xi     HAL_NSK2_SetDbgLevel(u32Level);
528*53ee8cc1Swenshuai.xi }
529*53ee8cc1Swenshuai.xi 
MDrv_NSK2_SetPollingCnt(MS_U32 u32Cnt)530*53ee8cc1Swenshuai.xi void MDrv_NSK2_SetPollingCnt(MS_U32 u32Cnt)
531*53ee8cc1Swenshuai.xi {
532*53ee8cc1Swenshuai.xi     HAL_NSK2_SetPollingCnt(u32Cnt);
533*53ee8cc1Swenshuai.xi }
534*53ee8cc1Swenshuai.xi 
MDrv_NSK2_RunFree(MS_BOOL bRunFree)535*53ee8cc1Swenshuai.xi void MDrv_NSK2_RunFree(MS_BOOL bRunFree)
536*53ee8cc1Swenshuai.xi {
537*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s, bRunFree = %d\n", __FUNCTION__, bRunFree);
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi 	HAL_NSK2_RunFree(bRunFree);
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi 
MDrv_NSK2_PushSlowClock(MS_BOOL HaltClk,MS_U32 TenSecond)542*53ee8cc1Swenshuai.xi void MDrv_NSK2_PushSlowClock ( MS_BOOL HaltClk, MS_U32 TenSecond)
543*53ee8cc1Swenshuai.xi {
544*53ee8cc1Swenshuai.xi 	HAL_NSK2_PushSlowClock(HaltClk, TenSecond);
545*53ee8cc1Swenshuai.xi }
546*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetRNGThroughPut(void * pRngData,MS_U32 u32DataSize,MS_BOOL bDump)547*53ee8cc1Swenshuai.xi void MDrv_NSK2_GetRNGThroughPut(void *pRngData, MS_U32 u32DataSize, MS_BOOL bDump)
548*53ee8cc1Swenshuai.xi {
549*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO, "%s enter\n", __FUNCTION__);
550*53ee8cc1Swenshuai.xi     HAL_NSK2_GetRNGThroughPut(pRngData, u32DataSize, bDump);
551*53ee8cc1Swenshuai.xi }
552*53ee8cc1Swenshuai.xi 
553*53ee8cc1Swenshuai.xi #if 0
554*53ee8cc1Swenshuai.xi void MDrv_NSK2_BurstLen(MS_U32 u32PVREng, MS_U32 u32BurstMode)
555*53ee8cc1Swenshuai.xi {
556*53ee8cc1Swenshuai.xi 	HAL_NSK2_BurstLen(u32PVREng, u32BurstMode);
557*53ee8cc1Swenshuai.xi }
558*53ee8cc1Swenshuai.xi #endif
559*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetCMProperties(MS_U32 * desc_size,MS_U8 * desc)560*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetCMProperties(MS_U32 *desc_size, MS_U8 *desc)
561*53ee8cc1Swenshuai.xi {
562*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetCMProperties(desc_size, desc);
563*53ee8cc1Swenshuai.xi }
564*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetM2MProperties(MS_U32 * desc_size,MS_U8 * desc)565*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetM2MProperties(MS_U32 *desc_size, MS_U8 *desc)
566*53ee8cc1Swenshuai.xi {
567*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetM2MProperties(desc_size, desc);
568*53ee8cc1Swenshuai.xi }
569*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetDMAProperties(MS_U32 * desc_size,MS_U8 * desc)570*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetDMAProperties(MS_U32 *desc_size, MS_U8 *desc)
571*53ee8cc1Swenshuai.xi {
572*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetDMAProperties(desc_size, desc);
573*53ee8cc1Swenshuai.xi }
574*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetOTPProperties(MS_U32 * desc_size,MS_U8 * desc)575*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetOTPProperties(MS_U32 *desc_size, MS_U8 *desc)
576*53ee8cc1Swenshuai.xi {
577*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetOTPProperties(desc_size, desc);
578*53ee8cc1Swenshuai.xi }
579*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetFullChipConfig(MS_U32 * desc_size,MS_U8 * desc)580*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetFullChipConfig(MS_U32 *desc_size, MS_U8 *desc)
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetFullChipConfig(desc_size, desc);
583*53ee8cc1Swenshuai.xi }
584*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetNVCounterConfig(MS_U32 * desc_size,MS_U8 * desc)585*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetNVCounterConfig(MS_U32 *desc_size, MS_U8 *desc)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetNVCounterConfig(desc_size, desc);
588*53ee8cc1Swenshuai.xi }
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadAllOTP(void)591*53ee8cc1Swenshuai.xi void MDrv_NSK2_ReadAllOTP(void)
592*53ee8cc1Swenshuai.xi {
593*53ee8cc1Swenshuai.xi     HAL_NSK2_ReadAllOTP();
594*53ee8cc1Swenshuai.xi }
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetPubOTP(MS_U8 * pPubOTP)597*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NSK2_GetPubOTP(MS_U8 *pPubOTP)
598*53ee8cc1Swenshuai.xi {
599*53ee8cc1Swenshuai.xi     //return HAL_NSK2_GetPubOTP(pPubOTP);
600*53ee8cc1Swenshuai.xi     return TRUE;
601*53ee8cc1Swenshuai.xi }
602*53ee8cc1Swenshuai.xi 
603*53ee8cc1Swenshuai.xi //=====================================
604*53ee8cc1Swenshuai.xi // =========== Debug Usage=================
605*53ee8cc1Swenshuai.xi //=====================================
DBG_NSK2_AllTSPPidFilter(void)606*53ee8cc1Swenshuai.xi void DBG_NSK2_AllTSPPidFilter(void)
607*53ee8cc1Swenshuai.xi {
608*53ee8cc1Swenshuai.xi     HAL_NSK2_AllTSPPidFilter();
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi 
DBG_NSK2_ChangePidFilter(MS_U32 pid_no,MS_U32 Data)611*53ee8cc1Swenshuai.xi void DBG_NSK2_ChangePidFilter(MS_U32 pid_no, MS_U32 Data)
612*53ee8cc1Swenshuai.xi {
613*53ee8cc1Swenshuai.xi     HAL_NSK2_ChangePidFilter(pid_no, Data);
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi 
616*53ee8cc1Swenshuai.xi 
617*53ee8cc1Swenshuai.xi //=====================================
618*53ee8cc1Swenshuai.xi //======   NSK2.1 new functions  ======
619*53ee8cc1Swenshuai.xi //=====================================
620*53ee8cc1Swenshuai.xi 
MDrv_NSK21_InvalidCmChannel(MS_U16 PidSlot)621*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_InvalidCmChannel(MS_U16 PidSlot)
622*53ee8cc1Swenshuai.xi {
623*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s PidSlot = %x\n", __FUNCTION__,PidSlot);
624*53ee8cc1Swenshuai.xi     HAL_NSK21_InvalidCmChannel(PidSlot);
625*53ee8cc1Swenshuai.xi     return TRUE;
626*53ee8cc1Swenshuai.xi }
627*53ee8cc1Swenshuai.xi 
MDrv_NSK21_CfgCmChannel(MS_U16 PidSlot,MS_U16 LocalDAlgo,MS_U16 ESAAlgo,MS_U16 LocalSAlgo,MS_U16 SysKeyIndex)628*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_CfgCmChannel(MS_U16 PidSlot, MS_U16 LocalDAlgo, MS_U16  ESAAlgo, MS_U16 LocalSAlgo, MS_U16 SysKeyIndex)
629*53ee8cc1Swenshuai.xi {
630*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s PidSlot = %x\n", __FUNCTION__,PidSlot);
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi     return HAL_NSK21_CfgCmChannel(PidSlot, LocalDAlgo,  ESAAlgo, LocalSAlgo, SysKeyIndex);
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi 
MDrv_NSK21_WriteTransportKey(MS_U8 SCB,MS_U8 ForceSCB,void * pLocalDIV1,void * pLocalDIV2,void * pESAIV1,void * pESAIV2,void * pLocalSIV1,void * pLocalSIV2,MS_U16 PidSlot)635*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_WriteTransportKey(MS_U8 SCB, MS_U8 ForceSCB, void *pLocalDIV1, void *pLocalDIV2,
636*53ee8cc1Swenshuai.xi                                     void *pESAIV1, void *pESAIV2, void *pLocalSIV1, void *pLocalSIV2, MS_U16 PidSlot )
637*53ee8cc1Swenshuai.xi {
638*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s \n", __FUNCTION__);
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"SCB = %x, ForceSCB = %x\n",SCB,ForceSCB);
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi     return HAL_NSK21_WriteTransportKey(SCB, ForceSCB, pLocalDIV1, pLocalDIV2, pESAIV1, pESAIV2, pLocalSIV1, pLocalSIV2, PidSlot);
643*53ee8cc1Swenshuai.xi }
644*53ee8cc1Swenshuai.xi 
MDrv_NSK21_WriteM2MKey(MS_U32 M2MAlgo)645*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_WriteM2MKey(MS_U32 M2MAlgo)
646*53ee8cc1Swenshuai.xi {
647*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s M2MAlgo = %x\n", __FUNCTION__,M2MAlgo);
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi     return HAL_NSK21_WriteM2MKey(M2MAlgo);
650*53ee8cc1Swenshuai.xi }
651*53ee8cc1Swenshuai.xi 
MDrv_NSK21_ModifyGenIn(MS_U32 MaskVal,MS_U32 XorVal)652*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_ModifyGenIn(MS_U32 MaskVal,MS_U32 XorVal)
653*53ee8cc1Swenshuai.xi {
654*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_DEBUG,"%s MaskVal = %x, XorVal = %x\n", __FUNCTION__,MaskVal,XorVal);
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi     return HAL_NSK21_ModifyGenIn(MaskVal,XorVal);
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi 
MDrv_NSK21_WriteJTagKey(MS_U32 OverrideOid,MS_U32 Select)659*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_WriteJTagKey(MS_U32 OverrideOid, MS_U32 Select)
660*53ee8cc1Swenshuai.xi {
661*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
662*53ee8cc1Swenshuai.xi     return HAL_NSK21_WriteJTagKey(OverrideOid, Select);
663*53ee8cc1Swenshuai.xi }
664*53ee8cc1Swenshuai.xi 
MDrv_NSK21_IncrementNvCounter(void)665*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_IncrementNvCounter(void)
666*53ee8cc1Swenshuai.xi {
667*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
668*53ee8cc1Swenshuai.xi     return HAL_NSK21_IncrementNvCounter();
669*53ee8cc1Swenshuai.xi }
670*53ee8cc1Swenshuai.xi 
MDrv_NSK21_WriteReservedKey(void)671*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK21_WriteReservedKey(void)
672*53ee8cc1Swenshuai.xi {
673*53ee8cc1Swenshuai.xi 
674*53ee8cc1Swenshuai.xi     return TRUE;
675*53ee8cc1Swenshuai.xi }
676*53ee8cc1Swenshuai.xi 
677*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CompareIRQ(MS_U32 reserved_1,MS_U32 reserved_2,MS_U32 ExpectedValue)678*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CompareIRQ(MS_U32 reserved_1, MS_U32 reserved_2, MS_U32 ExpectedValue)
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi     DRVNSK2_DBG(NSK2_DBGLV_INFO,"%s \n", __FUNCTION__);
681*53ee8cc1Swenshuai.xi     MS_U32 status;
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi     MsOS_DelayTask(100);
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi #ifdef ACPUTest
686*53ee8cc1Swenshuai.xi     //printf("IntStatus = %x, ExpectedValue = %x, time = %d\n",u32NSK2IntStatus, ExpectedValue, MsOS_GetSystemTime());
687*53ee8cc1Swenshuai.xi     status = u32NSK2IntStatus; //HAL_NSK2_GetIntStatus();
688*53ee8cc1Swenshuai.xi     u32NSK2IntStatus = 0;
689*53ee8cc1Swenshuai.xi #else
690*53ee8cc1Swenshuai.xi     status = HAL_NSK2_GetIntStatus();
691*53ee8cc1Swenshuai.xi #endif
692*53ee8cc1Swenshuai.xi     //printf("Int Status = %x\n",status);
693*53ee8cc1Swenshuai.xi 
694*53ee8cc1Swenshuai.xi     if(0 == ExpectedValue)
695*53ee8cc1Swenshuai.xi     {
696*53ee8cc1Swenshuai.xi         if(0 != status)
697*53ee8cc1Swenshuai.xi             return TRUE;
698*53ee8cc1Swenshuai.xi         else
699*53ee8cc1Swenshuai.xi             return FALSE;
700*53ee8cc1Swenshuai.xi     }
701*53ee8cc1Swenshuai.xi     else
702*53ee8cc1Swenshuai.xi     {
703*53ee8cc1Swenshuai.xi         if(0 == status)
704*53ee8cc1Swenshuai.xi             return TRUE;
705*53ee8cc1Swenshuai.xi         else
706*53ee8cc1Swenshuai.xi             return FALSE;
707*53ee8cc1Swenshuai.xi     }
708*53ee8cc1Swenshuai.xi 
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi 
MDrv_NSK2_WriteOtpKey(void)711*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_WriteOtpKey(void)
712*53ee8cc1Swenshuai.xi {
713*53ee8cc1Swenshuai.xi     return HAL_NSK2_WriteOtpKey();
714*53ee8cc1Swenshuai.xi }
715*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadPWD_Status(void)716*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ReadPWD_Status(void)
717*53ee8cc1Swenshuai.xi {
718*53ee8cc1Swenshuai.xi     return HAL_NSK2_ReadPWD_Status();
719*53ee8cc1Swenshuai.xi }
720*53ee8cc1Swenshuai.xi 
MDrv_NSK2_CtrlClk(MS_BOOL Enable)721*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_CtrlClk(MS_BOOL Enable)
722*53ee8cc1Swenshuai.xi {
723*53ee8cc1Swenshuai.xi     return HAL_NSK2_CtrlClk(Enable);
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi 
MDrv_NSK2_ReadClkStatus(void)726*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_ReadClkStatus(void)
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi     return HAL_NSK2_ReadClkStatus();
729*53ee8cc1Swenshuai.xi }
730*53ee8cc1Swenshuai.xi 
MDrv_NSK2_GetSRAlignBit(void)731*53ee8cc1Swenshuai.xi MS_U32 MDrv_NSK2_GetSRAlignBit(void)
732*53ee8cc1Swenshuai.xi {
733*53ee8cc1Swenshuai.xi     return HAL_NSK2_GetSRAlignBit();
734*53ee8cc1Swenshuai.xi }
735*53ee8cc1Swenshuai.xi 
MDrv_NSK2_RSA_SetSecureRange(MS_U32 u32SecSet,MS_U32 u32SecStart,MS_U32 u32SecEnd)736*53ee8cc1Swenshuai.xi MS_BOOL MDrv_NSK2_RSA_SetSecureRange(MS_U32 u32SecSet, MS_U32 u32SecStart, MS_U32 u32SecEnd)
737*53ee8cc1Swenshuai.xi {
738*53ee8cc1Swenshuai.xi     return HAL_NSK2_RSA_SetSecureRange(u32SecSet, u32SecStart, u32SecEnd, TRUE);
739*53ee8cc1Swenshuai.xi }
740*53ee8cc1Swenshuai.xi 
MDrv_NSK2_RSA_SetSR_Mask(MS_U32 u32DramSize)741*53ee8cc1Swenshuai.xi void MDrv_NSK2_RSA_SetSR_Mask(MS_U32 u32DramSize)
742*53ee8cc1Swenshuai.xi {
743*53ee8cc1Swenshuai.xi     if (0 != u32DramSize)
744*53ee8cc1Swenshuai.xi     {
745*53ee8cc1Swenshuai.xi         HAL_NSK2_RSA_SetSR_Mask(u32DramSize);
746*53ee8cc1Swenshuai.xi     }
747*53ee8cc1Swenshuai.xi }
748