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 drvNDS_NSK.c
98*53ee8cc1Swenshuai.xi /// @brief NDS NSK Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
103*53ee8cc1Swenshuai.xi // Include Files
104*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
105*53ee8cc1Swenshuai.xi #include "MsCommon.h"
106*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
107*53ee8cc1Swenshuai.xi #include "string.h"
108*53ee8cc1Swenshuai.xi #endif
109*53ee8cc1Swenshuai.xi
110*53ee8cc1Swenshuai.xi #include "asmCPU.h"
111*53ee8cc1Swenshuai.xi
112*53ee8cc1Swenshuai.xi #include "drvDSCMB.h"
113*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_DSCMB_SlotSwitchWrite(MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U32 u32SW0, MS_U32 u32SW1, MS_U32 u32SW2);
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi #if defined(CHIP_U3)
116*53ee8cc1Swenshuai.xi #include "../tsp/drvTSP.h"
117*53ee8cc1Swenshuai.xi #else
118*53ee8cc1Swenshuai.xi #include "../tsp2/drvTSP2.h"
119*53ee8cc1Swenshuai.xi #endif
120*53ee8cc1Swenshuai.xi
121*53ee8cc1Swenshuai.xi #include "regNDS.h"
122*53ee8cc1Swenshuai.xi #include "drvNDS.h"
123*53ee8cc1Swenshuai.xi #include "halNDS.h"
124*53ee8cc1Swenshuai.xi
125*53ee8cc1Swenshuai.xi #include "ddiNDS_HDI.h"
126*53ee8cc1Swenshuai.xi
127*53ee8cc1Swenshuai.xi #include "nds.h"
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi extern void HALHDI_InitSVP_HW ( unsigned long instance );
130*53ee8cc1Swenshuai.xi extern unsigned short HALHDI_InterruptServiceRoutine ( unsigned long instance, unsigned long interrupt_cause );
131*53ee8cc1Swenshuai.xi
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Driver Compiler Options
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi #define NSK_DEBUG_ENABLE 0
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi
139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
140*53ee8cc1Swenshuai.xi // Local Defines
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi #define NSK_TASK_STACK_SIZE 8192//4096
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi #define NDS_NSK_IRQ E_INT_IRQ_CA_I3//E_INT_IRQ_CA_SVP
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi #if defined(CHIP_U3)
147*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_SEL_MASK 0x000F0000
148*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_SEL_SHFT 16
149*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_VARI_MASK 0x00300000
150*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_VARI_SHFT 20
151*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_MODE_MASK 0x07000000
152*53ee8cc1Swenshuai.xi #define NSK_SW_ESA_MODE_SHFT 24
153*53ee8cc1Swenshuai.xi #define NSK_SW_NSA_MASK 0xF0000000
154*53ee8cc1Swenshuai.xi #define NSK_SW_NSAD_MDD 0x10000000
155*53ee8cc1Swenshuai.xi #define NSK_SW_NSAS_MDD 0x20000000
156*53ee8cc1Swenshuai.xi #define NSK_SW_NSAD_MDI 0x40000000
157*53ee8cc1Swenshuai.xi #define NSK_SW_NSAS_MDI 0x80000000
158*53ee8cc1Swenshuai.xi #endif
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi /* Appendix A: Return value */
161*53ee8cc1Swenshuai.xi #define NSK_STATUS_OK 0x0000
162*53ee8cc1Swenshuai.xi #define NSK_STATUS_FAILED 0x0001
163*53ee8cc1Swenshuai.xi #define NSK_INVALID_XCONNECTION 0x0008
164*53ee8cc1Swenshuai.xi #define NSK_INVALID_PID 0x0009
165*53ee8cc1Swenshuai.xi #define NSK_INVALID_SCB 0x000A
166*53ee8cc1Swenshuai.xi #define NSK_INVALID_INSTANCE 0x0011
167*53ee8cc1Swenshuai.xi #define NSK_INVALID_SCRAMBLING_SETTINGS 0x0015
168*53ee8cc1Swenshuai.xi #define NSK_INVALID_ESA_SELECT 0x0016
169*53ee8cc1Swenshuai.xi #define NSK_INVALID_ESA_SUBSELECT 0x0017
170*53ee8cc1Swenshuai.xi #define NSK_INVALID_ESA_VARIANT 0x0018
171*53ee8cc1Swenshuai.xi #define NSK_INVALID_LENGTH_OFFSET 0x0019
172*53ee8cc1Swenshuai.xi #define NSK_INVALID_ENTRY_NUM 0x001A
173*53ee8cc1Swenshuai.xi #define NSK_INVALID_CM_CHANNEL_HANDLE 0x001C
174*53ee8cc1Swenshuai.xi #define NSK_INSUFFICIENT_BUFFER 0x001D
175*53ee8cc1Swenshuai.xi #define NSK_INVALID_INPUT_SCB 0x001E
176*53ee8cc1Swenshuai.xi #define NSK_INVALID_OUTPUT_SCB 0x001F
177*53ee8cc1Swenshuai.xi
178*53ee8cc1Swenshuai.xi /* Appendix B: Interrupt register definition */
179*53ee8cc1Swenshuai.xi #define NSK_CMD_COMPLETE 0x00000001
180*53ee8cc1Swenshuai.xi #define NSK_ICAM_SECTION 0x00000002
181*53ee8cc1Swenshuai.xi #define NSK_TIMER_EVENT 0x00000004
182*53ee8cc1Swenshuai.xi #define NSK_BAD_REG_ACCESS 0x00000008
183*53ee8cc1Swenshuai.xi
184*53ee8cc1Swenshuai.xi /* Appendix C: Scrambler / Descrambler */
185*53ee8cc1Swenshuai.xi #define SVPHDI_DESCRAMBLER_CONTROL_ENABLE_DESCRAMBLING 0x80
186*53ee8cc1Swenshuai.xi #define SVPHDI_DESCRAMBLER_CONTROL_DISABLE_DESCRAMBLING 0x00
187*53ee8cc1Swenshuai.xi #define SVPHDI_DESCRAMBLE_TRANSPORT_PACKET_LEVEL 0x00
188*53ee8cc1Swenshuai.xi #define SVPHDI_DESCRAMBLE_PES_PACKET_LEVEL 0x40
189*53ee8cc1Swenshuai.xi
190*53ee8cc1Swenshuai.xi #define SVPHDI_BASE_CONTENT_MODULE_DESCRIPTOR 0x20
191*53ee8cc1Swenshuai.xi
192*53ee8cc1Swenshuai.xi
193*53ee8cc1Swenshuai.xi /* Appendix D: SCB */
194*53ee8cc1Swenshuai.xi #define NSK_CLEAR 0x00
195*53ee8cc1Swenshuai.xi #define NSK_EVEN 0x02
196*53ee8cc1Swenshuai.xi #define NSK_ODD 0x03
197*53ee8cc1Swenshuai.xi #define NSK_ALL_POLARITIES 0x04
198*53ee8cc1Swenshuai.xi #define NSK_SCB_CLEAR 0x80
199*53ee8cc1Swenshuai.xi
200*53ee8cc1Swenshuai.xi
201*53ee8cc1Swenshuai.xi /* Appendix E: Scrambling Settings Constants */
202*53ee8cc1Swenshuai.xi
203*53ee8cc1Swenshuai.xi // MDD / MDI length of descriptor is one
204*53ee8cc1Swenshuai.xi #define MDD_MDI_DESCRIPTOR_TAG 0x10 // MDI/MDD/MSC Descriptor
205*53ee8cc1Swenshuai.xi #define MDD_MDI_MSC_DESCRIPTOR_TAG_LEN 0x01
206*53ee8cc1Swenshuai.xi // MDD/MDI/MSC Scrambling �V byte 0 of the data
207*53ee8cc1Swenshuai.xi #define MDD_MDI_SCRAM_BIT_MASK 0x01 // Bit 0: 0�VMDD 1-MDI */
208*53ee8cc1Swenshuai.xi #define MDD_MDI_DESCRAM_BIT_MASK 0x02 // Bit 1: 0�VMDD 1-MDI*/
209*53ee8cc1Swenshuai.xi
210*53ee8cc1Swenshuai.xi #define DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG 0x01
211*53ee8cc1Swenshuai.xi #define DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG_LEN 0x02
212*53ee8cc1Swenshuai.xi #define MSC_SCRAM_BIT_MASK 0x01 // Bit 0: Defined in IC-Q063
213*53ee8cc1Swenshuai.xi #define MSC_DESCRAM_BIT_MASK 0x02 // Bit 1: Defined in IC-Q063
214*53ee8cc1Swenshuai.xi #define DESCRAMBLER_ALGORITHM_FLAGS_OFFSET 0
215*53ee8cc1Swenshuai.xi #define DESCRAMBLER_ALGORITHM_ESA_VARIENT_OFFSET 1
216*53ee8cc1Swenshuai.xi
217*53ee8cc1Swenshuai.xi #define CSH1_DESCRIPTOR_TAG 0x02 /* CSH */
218*53ee8cc1Swenshuai.xi
219*53ee8cc1Swenshuai.xi #define SVP_CM_CHANNEL_NUM 8
220*53ee8cc1Swenshuai.xi #define SVP_CM_ESPID_NUM 16
221*53ee8cc1Swenshuai.xi
222*53ee8cc1Swenshuai.xi #if NSK_DEBUG_ENABLE
223*53ee8cc1Swenshuai.xi #define NSK_DBG(_fmt, _args...) printf(_fmt, ##_args)
224*53ee8cc1Swenshuai.xi #else
225*53ee8cc1Swenshuai.xi #define NSK_DBG(_fmt, _args...) { }
226*53ee8cc1Swenshuai.xi #endif
227*53ee8cc1Swenshuai.xi
228*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG //---------------------------------------------------------------------------------
229*53ee8cc1Swenshuai.xi #define NSK_ERR(_fmt, _args...) printf(_fmt, ##_args)
230*53ee8cc1Swenshuai.xi #define NSK_ASSERT(_cnd, _fmt, _args...) \
231*53ee8cc1Swenshuai.xi if (!(_cnd)) { \
232*53ee8cc1Swenshuai.xi printf(_fmt, ##_args); \
233*53ee8cc1Swenshuai.xi MAsm_CPU_SwDbgBp(); \
234*53ee8cc1Swenshuai.xi while(1); \
235*53ee8cc1Swenshuai.xi }
236*53ee8cc1Swenshuai.xi #else //-------------------------------------------------------------------------------------------
237*53ee8cc1Swenshuai.xi #define NSK_ERR(_fmt, _args...) { }
238*53ee8cc1Swenshuai.xi #define NSK_ASSERT(_cnd, _fmt, _args...) \
239*53ee8cc1Swenshuai.xi if (!(_cnd)) { \
240*53ee8cc1Swenshuai.xi printf(_fmt, ##_args); \
241*53ee8cc1Swenshuai.xi } // CAUTION: It should be before GE_ENTRY
242*53ee8cc1Swenshuai.xi #endif //------------------------------------------------------------------------------------------
243*53ee8cc1Swenshuai.xi
244*53ee8cc1Swenshuai.xi #define SVP_ENTRY() { }
245*53ee8cc1Swenshuai.xi #define SVP_RETURN(_ret) { return (_ret); }
246*53ee8cc1Swenshuai.xi
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
249*53ee8cc1Swenshuai.xi // Local Structurs
250*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
251*53ee8cc1Swenshuai.xi typedef struct _SVP_CM_EsPid
252*53ee8cc1Swenshuai.xi {
253*53ee8cc1Swenshuai.xi MS_BOOL alloc;
254*53ee8cc1Swenshuai.xi MS_U32 pid;
255*53ee8cc1Swenshuai.xi MS_U32 flt_id;
256*53ee8cc1Swenshuai.xi MS_U32 dscmb_odd;
257*53ee8cc1Swenshuai.xi MS_U32 dscmb_even;
258*53ee8cc1Swenshuai.xi MS_U32 dscmb_clear;
259*53ee8cc1Swenshuai.xi
260*53ee8cc1Swenshuai.xi } SVP_CM_EsPid;
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xi typedef struct _SVP_CM_Channel
263*53ee8cc1Swenshuai.xi {
264*53ee8cc1Swenshuai.xi MS_BOOL alloc;
265*53ee8cc1Swenshuai.xi MS_BOOL enable;
266*53ee8cc1Swenshuai.xi MS_U32 nsk_sw;
267*53ee8cc1Swenshuai.xi // MS_U32 esa_sel;
268*53ee8cc1Swenshuai.xi // MS_U32 esa_subsel;
269*53ee8cc1Swenshuai.xi MS_U32 dsc_id;
270*53ee8cc1Swenshuai.xi DSCMB_Type dsc_type;
271*53ee8cc1Swenshuai.xi
272*53ee8cc1Swenshuai.xi
273*53ee8cc1Swenshuai.xi SVP_CM_EsPid es[SVP_CM_ESPID_NUM];
274*53ee8cc1Swenshuai.xi } SVP_CM_Channel;
275*53ee8cc1Swenshuai.xi
276*53ee8cc1Swenshuai.xi
277*53ee8cc1Swenshuai.xi //[HAL] {
278*53ee8cc1Swenshuai.xi typedef struct _SVP_CM_Prop_Base
279*53ee8cc1Swenshuai.xi {
280*53ee8cc1Swenshuai.xi MS_U8 tag;
281*53ee8cc1Swenshuai.xi MS_U8 len;
282*53ee8cc1Swenshuai.xi MS_U8 hwid[4]; // big-endian
283*53ee8cc1Swenshuai.xi MS_U8 ch_num[2]; // big-endian
284*53ee8cc1Swenshuai.xi } SVP_CM_Prop_Base;
285*53ee8cc1Swenshuai.xi
286*53ee8cc1Swenshuai.xi typedef struct _SVP_CM_Prop
287*53ee8cc1Swenshuai.xi {
288*53ee8cc1Swenshuai.xi SVP_CM_Prop_Base base;
289*53ee8cc1Swenshuai.xi } SVP_CM_Prop;
290*53ee8cc1Swenshuai.xi //[HAL] }
291*53ee8cc1Swenshuai.xi
292*53ee8cc1Swenshuai.xi
293*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
294*53ee8cc1Swenshuai.xi // Global Variables
295*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
296*53ee8cc1Swenshuai.xi
297*53ee8cc1Swenshuai.xi
298*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
299*53ee8cc1Swenshuai.xi // Local Variables
300*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi static MS_U32 u32NSK_Stack[NSK_TASK_STACK_SIZE/sizeof(MS_U32)];
303*53ee8cc1Swenshuai.xi static MS_S32 s32NSK_TaskId = -1;
304*53ee8cc1Swenshuai.xi static MS_S32 s32NSK_EventId = -1;
305*53ee8cc1Swenshuai.xi
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi SVP_CM_Channel svp_cm[SVP_CM_CHANNEL_NUM];
308*53ee8cc1Swenshuai.xi
309*53ee8cc1Swenshuai.xi //[HAL]
310*53ee8cc1Swenshuai.xi SVP_CM_Prop svp_prop = {
311*53ee8cc1Swenshuai.xi { SVPHDI_BASE_CONTENT_MODULE_DESCRIPTOR,
312*53ee8cc1Swenshuai.xi 6, // length
313*53ee8cc1Swenshuai.xi { 0, 0, 0, 0 }, // hardware id
314*53ee8cc1Swenshuai.xi { 8, 0 }, // max channel number
315*53ee8cc1Swenshuai.xi },
316*53ee8cc1Swenshuai.xi };
317*53ee8cc1Swenshuai.xi //[HAL]
318*53ee8cc1Swenshuai.xi
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi
321*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
322*53ee8cc1Swenshuai.xi // Debug Functions
323*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi
326*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
327*53ee8cc1Swenshuai.xi // Local Functions
328*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi
331*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
332*53ee8cc1Swenshuai.xi // Global Functions
333*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
334*53ee8cc1Swenshuai.xi
335*53ee8cc1Swenshuai.xi //-------- (HAL) ----------
HDIHAL_WriteNSKReg(unsigned long instance,unsigned long offset,unsigned long length,unsigned long * reg_data_out)336*53ee8cc1Swenshuai.xi unsigned short HDIHAL_WriteNSKReg(unsigned long instance,
337*53ee8cc1Swenshuai.xi unsigned long offset,
338*53ee8cc1Swenshuai.xi unsigned long length,
339*53ee8cc1Swenshuai.xi unsigned long* reg_data_out)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi // MS_U32 *reg_ptr;
342*53ee8cc1Swenshuai.xi int i;
343*53ee8cc1Swenshuai.xi
344*53ee8cc1Swenshuai.xi NSK_DBG("[%s]-[%d]\n", __FUNCTION__, __LINE__);
345*53ee8cc1Swenshuai.xi
346*53ee8cc1Swenshuai.xi if (instance >= NSK_DEV_NUM)
347*53ee8cc1Swenshuai.xi {
348*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
349*53ee8cc1Swenshuai.xi }
350*53ee8cc1Swenshuai.xi
351*53ee8cc1Swenshuai.xi if (instance == 0)
352*53ee8cc1Swenshuai.xi {
353*53ee8cc1Swenshuai.xi for (i = 0; i < length ; i++)
354*53ee8cc1Swenshuai.xi {
355*53ee8cc1Swenshuai.xi NSK_REG_W(offset+i, *reg_data_out++);
356*53ee8cc1Swenshuai.xi }
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi else
359*53ee8cc1Swenshuai.xi {
360*53ee8cc1Swenshuai.xi NSK_ASSERT(FALSE, "[%s]-[%d]\n", __FUNCTION__, __LINE__);
361*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
362*53ee8cc1Swenshuai.xi }
363*53ee8cc1Swenshuai.xi /*
364*53ee8cc1Swenshuai.xi reg_ptr = (MS_U32*)(0xBE000000 + (instance*NSK_BANK_SIZE) + (offset<<2));
365*53ee8cc1Swenshuai.xi
366*53ee8cc1Swenshuai.xi for (i = 0; i < length; i++)
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi *reg_ptr++ = *reg_data_out++;
369*53ee8cc1Swenshuai.xi }
370*53ee8cc1Swenshuai.xi */
371*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi
HDIHAL_ReadNSKReg(unsigned long instance,unsigned long offset,unsigned long length,unsigned long * reg_data_in)375*53ee8cc1Swenshuai.xi unsigned short HDIHAL_ReadNSKReg(unsigned long instance,
376*53ee8cc1Swenshuai.xi unsigned long offset,
377*53ee8cc1Swenshuai.xi unsigned long length,
378*53ee8cc1Swenshuai.xi unsigned long* reg_data_in)
379*53ee8cc1Swenshuai.xi {
380*53ee8cc1Swenshuai.xi // MS_U32 *reg_ptr, i=0;
381*53ee8cc1Swenshuai.xi int i;
382*53ee8cc1Swenshuai.xi
383*53ee8cc1Swenshuai.xi NSK_DBG("[%s]-[%d] \n", __FUNCTION__, __LINE__);
384*53ee8cc1Swenshuai.xi
385*53ee8cc1Swenshuai.xi if (instance >= NSK_DEV_NUM)
386*53ee8cc1Swenshuai.xi {
387*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
388*53ee8cc1Swenshuai.xi }
389*53ee8cc1Swenshuai.xi
390*53ee8cc1Swenshuai.xi if (instance == 0)
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi for (i = 0; i < length ; i++)
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi *reg_data_in++ = NSK_REG_R(offset+i);
395*53ee8cc1Swenshuai.xi }
396*53ee8cc1Swenshuai.xi }
397*53ee8cc1Swenshuai.xi else
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi NSK_ASSERT(FALSE, "[%s]-[%d]\n", __FUNCTION__, __LINE__);
400*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi /*
403*53ee8cc1Swenshuai.xi reg_ptr = (MS_U32*)(0xBE000000 + (instance*NSK_BANK_SIZE) + (offset<<2));
404*53ee8cc1Swenshuai.xi
405*53ee8cc1Swenshuai.xi for (i = 0; i < length; i++)
406*53ee8cc1Swenshuai.xi {
407*53ee8cc1Swenshuai.xi *reg_data_in++ = *reg_ptr++;
408*53ee8cc1Swenshuai.xi }
409*53ee8cc1Swenshuai.xi */
410*53ee8cc1Swenshuai.xi
411*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
412*53ee8cc1Swenshuai.xi }
413*53ee8cc1Swenshuai.xi
414*53ee8cc1Swenshuai.xi
SWAP(MS_U8 * value)415*53ee8cc1Swenshuai.xi MS_U32 SWAP(MS_U8 *value)
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi return ((MS_U32)*(value)<<24) | ((MS_U32)*(value+1)<<16) | ((MS_U32)*(value+2)<<8) | ((MS_U32)*(value+3));
418*53ee8cc1Swenshuai.xi }
419*53ee8cc1Swenshuai.xi
420*53ee8cc1Swenshuai.xi
HDIHAL_WriteNSKData(unsigned long instance,unsigned long offset,unsigned long length,unsigned char * data_out)421*53ee8cc1Swenshuai.xi unsigned short HDIHAL_WriteNSKData(unsigned long instance,
422*53ee8cc1Swenshuai.xi unsigned long offset,
423*53ee8cc1Swenshuai.xi unsigned long length,
424*53ee8cc1Swenshuai.xi unsigned char* data_out)
425*53ee8cc1Swenshuai.xi {
426*53ee8cc1Swenshuai.xi // MS_U32 *reg_ptr;
427*53ee8cc1Swenshuai.xi MS_U32 tmp;
428*53ee8cc1Swenshuai.xi // MS_U8 *tmp_ptr;
429*53ee8cc1Swenshuai.xi NSK_DBG("[%s]-[%d] \n", __FUNCTION__, __LINE__);
430*53ee8cc1Swenshuai.xi
431*53ee8cc1Swenshuai.xi if (instance >= NSK_DEV_NUM)
432*53ee8cc1Swenshuai.xi {
433*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi if (instance == 0)
437*53ee8cc1Swenshuai.xi {
438*53ee8cc1Swenshuai.xi while (length)
439*53ee8cc1Swenshuai.xi {
440*53ee8cc1Swenshuai.xi if (length >= 4)
441*53ee8cc1Swenshuai.xi {
442*53ee8cc1Swenshuai.xi tmp = SWAP(data_out);
443*53ee8cc1Swenshuai.xi data_out += 4;
444*53ee8cc1Swenshuai.xi length -= 4;
445*53ee8cc1Swenshuai.xi }
446*53ee8cc1Swenshuai.xi else
447*53ee8cc1Swenshuai.xi {
448*53ee8cc1Swenshuai.xi tmp = 0;
449*53ee8cc1Swenshuai.xi while (length)
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi tmp |= ((MS_U32)*(data_out)) << ((3-length)<<3);
452*53ee8cc1Swenshuai.xi data_out++;
453*53ee8cc1Swenshuai.xi length--;
454*53ee8cc1Swenshuai.xi }
455*53ee8cc1Swenshuai.xi }
456*53ee8cc1Swenshuai.xi NSK_REG_W(offset, tmp);
457*53ee8cc1Swenshuai.xi offset++;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi else
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi NSK_ASSERT(FALSE, "[%s]-[%d]\n", __FUNCTION__, __LINE__);
463*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
464*53ee8cc1Swenshuai.xi }
465*53ee8cc1Swenshuai.xi
466*53ee8cc1Swenshuai.xi /*
467*53ee8cc1Swenshuai.xi reg_ptr = (MS_U32*)(0xBE000000 + (instance*NSK_BANK_SIZE) + (offset<<2));
468*53ee8cc1Swenshuai.xi
469*53ee8cc1Swenshuai.xi while (length)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi if (length >= 4)
472*53ee8cc1Swenshuai.xi {
473*53ee8cc1Swenshuai.xi L2B(data_out);
474*53ee8cc1Swenshuai.xi *reg_ptr = *(MS_U32*)(data_out);
475*53ee8cc1Swenshuai.xi reg_ptr++;
476*53ee8cc1Swenshuai.xi data_out += 4;
477*53ee8cc1Swenshuai.xi length -= 4;
478*53ee8cc1Swenshuai.xi }
479*53ee8cc1Swenshuai.xi else
480*53ee8cc1Swenshuai.xi {
481*53ee8cc1Swenshuai.xi tmp = 0;
482*53ee8cc1Swenshuai.xi tmp_ptr = (MS_U8 *)&tmp;
483*53ee8cc1Swenshuai.xi while(length)
484*53ee8cc1Swenshuai.xi {
485*53ee8cc1Swenshuai.xi *tmp_ptr = *(data_out);
486*53ee8cc1Swenshuai.xi tmp_ptr++;
487*53ee8cc1Swenshuai.xi data_out++;
488*53ee8cc1Swenshuai.xi length--;
489*53ee8cc1Swenshuai.xi }
490*53ee8cc1Swenshuai.xi L2B((unsigned char*)&tmp);
491*53ee8cc1Swenshuai.xi *reg_ptr = tmp;
492*53ee8cc1Swenshuai.xi }
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi */
495*53ee8cc1Swenshuai.xi
496*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
497*53ee8cc1Swenshuai.xi }
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi
500*53ee8cc1Swenshuai.xi
501*53ee8cc1Swenshuai.xi
HDIHAL_ReadNSKData(unsigned long instance,unsigned long offset,unsigned long length,unsigned char * data_in)502*53ee8cc1Swenshuai.xi unsigned short HDIHAL_ReadNSKData(unsigned long instance,
503*53ee8cc1Swenshuai.xi unsigned long offset,
504*53ee8cc1Swenshuai.xi unsigned long length,
505*53ee8cc1Swenshuai.xi unsigned char* data_in)
506*53ee8cc1Swenshuai.xi {
507*53ee8cc1Swenshuai.xi // MS_U32 *reg_ptr;
508*53ee8cc1Swenshuai.xi MS_U32 tmp;
509*53ee8cc1Swenshuai.xi NSK_DBG("[%s]-[%d] \n", __FUNCTION__, __LINE__);
510*53ee8cc1Swenshuai.xi
511*53ee8cc1Swenshuai.xi if (instance >= NSK_DEV_NUM)
512*53ee8cc1Swenshuai.xi {
513*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
514*53ee8cc1Swenshuai.xi }
515*53ee8cc1Swenshuai.xi
516*53ee8cc1Swenshuai.xi if (instance == 0)
517*53ee8cc1Swenshuai.xi {
518*53ee8cc1Swenshuai.xi while (length)
519*53ee8cc1Swenshuai.xi {
520*53ee8cc1Swenshuai.xi tmp = NSK_REG_R(offset);
521*53ee8cc1Swenshuai.xi if (length >= 4)
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi *(MS_U32*)data_in = SWAP((MS_U8*)&tmp);
524*53ee8cc1Swenshuai.xi data_in += 4;
525*53ee8cc1Swenshuai.xi length -= 4;
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi else
528*53ee8cc1Swenshuai.xi {
529*53ee8cc1Swenshuai.xi while (length)
530*53ee8cc1Swenshuai.xi {
531*53ee8cc1Swenshuai.xi *(data_in) = tmp & 0xFF;
532*53ee8cc1Swenshuai.xi tmp >>= 8;
533*53ee8cc1Swenshuai.xi data_in++;
534*53ee8cc1Swenshuai.xi length--;
535*53ee8cc1Swenshuai.xi }
536*53ee8cc1Swenshuai.xi }
537*53ee8cc1Swenshuai.xi offset++;
538*53ee8cc1Swenshuai.xi }
539*53ee8cc1Swenshuai.xi }
540*53ee8cc1Swenshuai.xi else
541*53ee8cc1Swenshuai.xi {
542*53ee8cc1Swenshuai.xi NSK_ASSERT(FALSE, "[%s]-[%d]\n", __FUNCTION__, __LINE__);
543*53ee8cc1Swenshuai.xi return NSK_INVALID_INSTANCE;
544*53ee8cc1Swenshuai.xi }
545*53ee8cc1Swenshuai.xi
546*53ee8cc1Swenshuai.xi
547*53ee8cc1Swenshuai.xi /*
548*53ee8cc1Swenshuai.xi reg_ptr = (MS_U32*)(0xBE000000 + (instance*NSK_BANK_SIZE) + (offset<<2));
549*53ee8cc1Swenshuai.xi
550*53ee8cc1Swenshuai.xi while (length)
551*53ee8cc1Swenshuai.xi {
552*53ee8cc1Swenshuai.xi if (length >= 4)
553*53ee8cc1Swenshuai.xi {
554*53ee8cc1Swenshuai.xi *(MS_U32*)(data_in) = *reg_ptr;
555*53ee8cc1Swenshuai.xi LE2BE(data_in);
556*53ee8cc1Swenshuai.xi reg_ptr++;
557*53ee8cc1Swenshuai.xi data_in += 4;
558*53ee8cc1Swenshuai.xi length -= 4;
559*53ee8cc1Swenshuai.xi
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi else
562*53ee8cc1Swenshuai.xi {
563*53ee8cc1Swenshuai.xi tmp = *reg_ptr;
564*53ee8cc1Swenshuai.xi LE2BE((unsigned char*)&tmp);
565*53ee8cc1Swenshuai.xi while(length)
566*53ee8cc1Swenshuai.xi {
567*53ee8cc1Swenshuai.xi *(data_in) = tmp & 0xFF;
568*53ee8cc1Swenshuai.xi tmp >>= 4;
569*53ee8cc1Swenshuai.xi data_in++;
570*53ee8cc1Swenshuai.xi }
571*53ee8cc1Swenshuai.xi }
572*53ee8cc1Swenshuai.xi }
573*53ee8cc1Swenshuai.xi */
574*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
575*53ee8cc1Swenshuai.xi }
576*53ee8cc1Swenshuai.xi
577*53ee8cc1Swenshuai.xi /*unsigned short HALHDI_InterruptServiceRoutine(
578*53ee8cc1Swenshuai.xi unsigned long instance,
579*53ee8cc1Swenshuai.xi unsigned long interrupt_source)
580*53ee8cc1Swenshuai.xi {
581*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
582*53ee8cc1Swenshuai.xi }
583*53ee8cc1Swenshuai.xi
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi unsigned short HALHDI_InitSVP_HW(unsigned long instance)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
588*53ee8cc1Swenshuai.xi }*/
589*53ee8cc1Swenshuai.xi
590*53ee8cc1Swenshuai.xi #define NSK_INT_EVENT_0 0x00000001
591*53ee8cc1Swenshuai.xi #define NSK_INT_GROUP 0x0000FFFF
592*53ee8cc1Swenshuai.xi
_NSK_Isr(void)593*53ee8cc1Swenshuai.xi void _NSK_Isr(void)
594*53ee8cc1Swenshuai.xi {
595*53ee8cc1Swenshuai.xi
596*53ee8cc1Swenshuai.xi MsOS_DisableInterrupt(NDS_NSK_IRQ);
597*53ee8cc1Swenshuai.xi //reg_ptr = (MS_U32*)(0xBE000000 + (instance*NSK_BANK_SIZE) + (offset<<2));
598*53ee8cc1Swenshuai.xi MsOS_SetEvent(s32NSK_EventId, NSK_INT_EVENT_0); //[[ NDS BUG ]] not match in spec doc id : 482-sec 4.3
599*53ee8cc1Swenshuai.xi
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi
_NSK_Isr_Task(void)603*53ee8cc1Swenshuai.xi static void _NSK_Isr_Task(void)
604*53ee8cc1Swenshuai.xi {
605*53ee8cc1Swenshuai.xi MS_U32 u32Reg;
606*53ee8cc1Swenshuai.xi MS_U32 u32Events = 0;
607*53ee8cc1Swenshuai.xi unsigned long instance = 0;
608*53ee8cc1Swenshuai.xi
609*53ee8cc1Swenshuai.xi while(1)
610*53ee8cc1Swenshuai.xi {
611*53ee8cc1Swenshuai.xi MsOS_WaitEvent(s32NSK_EventId, NSK_INT_GROUP, &u32Events, E_OR_CLEAR, MSOS_WAIT_FOREVER);
612*53ee8cc1Swenshuai.xi //MsOS_DisableInterrupt(NDS_NSK_IRQ);
613*53ee8cc1Swenshuai.xi if (u32Events & NSK_INT_EVENT_0)
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi u32Reg = NSK_REG_R(REG_NSK_INT);
616*53ee8cc1Swenshuai.xi NSK_REG_W(REG_NSK_INT, u32Reg);
617*53ee8cc1Swenshuai.xi
618*53ee8cc1Swenshuai.xi #ifndef CDI_CA
619*53ee8cc1Swenshuai.xi // NDS Library
620*53ee8cc1Swenshuai.xi HALHDI_InterruptServiceRoutine( instance, u32Reg );
621*53ee8cc1Swenshuai.xi #endif
622*53ee8cc1Swenshuai.xi }
623*53ee8cc1Swenshuai.xi else
624*53ee8cc1Swenshuai.xi {
625*53ee8cc1Swenshuai.xi u32Reg = NSK_REG_R(REG_NSK_INT);
626*53ee8cc1Swenshuai.xi NSK_REG_W(REG_NSK_INT, u32Reg);
627*53ee8cc1Swenshuai.xi }
628*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(NDS_NSK_IRQ);
629*53ee8cc1Swenshuai.xi
630*53ee8cc1Swenshuai.xi MsOS_DelayTask(5);
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi }
633*53ee8cc1Swenshuai.xi
634*53ee8cc1Swenshuai.xi
_SVP_EnableEsPidCmChannel(unsigned int cm_channel_handle,unsigned int espid_id)635*53ee8cc1Swenshuai.xi unsigned short _SVP_EnableEsPidCmChannel(unsigned int cm_channel_handle, unsigned int espid_id)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi //TODO: maybe nothing to do
638*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
639*53ee8cc1Swenshuai.xi }
640*53ee8cc1Swenshuai.xi
_SVP_RemoveEsPidCmChannel(unsigned int cm_channel_handle,unsigned int espid_id)641*53ee8cc1Swenshuai.xi unsigned short _SVP_RemoveEsPidCmChannel(unsigned int cm_channel_handle, unsigned int espid_id)
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi
644*53ee8cc1Swenshuai.xi //TODO:
645*53ee8cc1Swenshuai.xi /*
646*53ee8cc1Swenshuai.xi MS_U16 ret;
647*53ee8cc1Swenshuai.xi ret = MDrv_TSP_PidFlt_Free(svp_cm[cm_channel_handle].es[cm_espid_id].flt_id);
648*53ee8cc1Swenshuai.xi NSK_ASSERT((ret == TRUE), "%s FAIL\n", __FUNCTION__);
649*53ee8cc1Swenshuai.xi */
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].es[espid_id].alloc = FALSE;
652*53ee8cc1Swenshuai.xi
653*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
654*53ee8cc1Swenshuai.xi }
655*53ee8cc1Swenshuai.xi
656*53ee8cc1Swenshuai.xi
_SVP_DisableCmChannel(unsigned int cm_channel_handle)657*53ee8cc1Swenshuai.xi unsigned short _SVP_DisableCmChannel(unsigned int cm_channel_handle)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi //TODO: disable CmChannel
660*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
661*53ee8cc1Swenshuai.xi }
662*53ee8cc1Swenshuai.xi
663*53ee8cc1Swenshuai.xi
_SVP_DeallocateCmChannel(unsigned int cm_channel_handle)664*53ee8cc1Swenshuai.xi unsigned short _SVP_DeallocateCmChannel(unsigned int cm_channel_handle)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi int j;
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi _SVP_DisableCmChannel(cm_channel_handle);
669*53ee8cc1Swenshuai.xi for (j = 0; j < SVP_CM_ESPID_NUM; j++)
670*53ee8cc1Swenshuai.xi {
671*53ee8cc1Swenshuai.xi if (svp_cm[cm_channel_handle].es[j].alloc == TRUE)
672*53ee8cc1Swenshuai.xi {
673*53ee8cc1Swenshuai.xi _SVP_RemoveEsPidCmChannel(cm_channel_handle, j);
674*53ee8cc1Swenshuai.xi }
675*53ee8cc1Swenshuai.xi }
676*53ee8cc1Swenshuai.xi
677*53ee8cc1Swenshuai.xi // Free CmChannel
678*53ee8cc1Swenshuai.xi //TODO:
679*53ee8cc1Swenshuai.xi /*
680*53ee8cc1Swenshuai.xi MS_U16 ret;
681*53ee8cc1Swenshuai.xi NSK_ASSERT((ret == TRUE), "%s FAIL\n", __FUNCTION__);
682*53ee8cc1Swenshuai.xi */
683*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].alloc = FALSE;
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
686*53ee8cc1Swenshuai.xi }
687*53ee8cc1Swenshuai.xi
688*53ee8cc1Swenshuai.xi
_SVP_WriteKey_Parse(unsigned int cm_channel_handle,unsigned char scb,unsigned int settings_len,unsigned char * settings)689*53ee8cc1Swenshuai.xi unsigned short _SVP_WriteKey_Parse(unsigned int cm_channel_handle,
690*53ee8cc1Swenshuai.xi unsigned char scb,
691*53ee8cc1Swenshuai.xi unsigned int settings_len,
692*53ee8cc1Swenshuai.xi unsigned char* settings)
693*53ee8cc1Swenshuai.xi {
694*53ee8cc1Swenshuai.xi MS_U32 u32SetLen = settings_len;
695*53ee8cc1Swenshuai.xi DSCMB_Key_Type key_type = E_DSCMB_KEY_CLEAR;
696*53ee8cc1Swenshuai.xi
697*53ee8cc1Swenshuai.xi switch (scb)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi case NSK_CLEAR:
700*53ee8cc1Swenshuai.xi key_type = E_DSCMB_KEY_CLEAR;
701*53ee8cc1Swenshuai.xi break;
702*53ee8cc1Swenshuai.xi case NSK_ODD:
703*53ee8cc1Swenshuai.xi key_type = E_DSCMB_KEY_ODD;
704*53ee8cc1Swenshuai.xi break;
705*53ee8cc1Swenshuai.xi case NSK_EVEN:
706*53ee8cc1Swenshuai.xi key_type = E_DSCMB_KEY_EVEN;
707*53ee8cc1Swenshuai.xi break;
708*53ee8cc1Swenshuai.xi default:
709*53ee8cc1Swenshuai.xi return CA_REQUEST_NOT_SUPPORTED_BY_DRIVER;
710*53ee8cc1Swenshuai.xi }
711*53ee8cc1Swenshuai.xi
712*53ee8cc1Swenshuai.xi //TODO: should we support more nsk_sw for other than switch13?
713*53ee8cc1Swenshuai.xi while (u32SetLen)
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi if (MDD_MDI_DESCRIPTOR_TAG == *settings)
716*53ee8cc1Swenshuai.xi {
717*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw &= ~DSCMB_SW_NSA_MASK;
718*53ee8cc1Swenshuai.xi
719*53ee8cc1Swenshuai.xi if ((u32SetLen >= (MDD_MDI_MSC_DESCRIPTOR_TAG_LEN+2) &&
720*53ee8cc1Swenshuai.xi *(settings+1) == MDD_MDI_MSC_DESCRIPTOR_TAG_LEN) )
721*53ee8cc1Swenshuai.xi {
722*53ee8cc1Swenshuai.xi if (*(settings+2) & MDD_MDI_SCRAM_BIT_MASK)
723*53ee8cc1Swenshuai.xi {
724*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw |= DSCMB_SW_NSAS_MDI;
725*53ee8cc1Swenshuai.xi }
726*53ee8cc1Swenshuai.xi else
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw |= DSCMB_SW_NSAS_MDD;
729*53ee8cc1Swenshuai.xi }
730*53ee8cc1Swenshuai.xi if (*(settings+2) & MDD_MDI_DESCRAM_BIT_MASK)
731*53ee8cc1Swenshuai.xi {
732*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw |= DSCMB_SW_NSAD_MDI;
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi else
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw |= DSCMB_SW_NSAD_MDD;
737*53ee8cc1Swenshuai.xi }
738*53ee8cc1Swenshuai.xi u32SetLen -= MDD_MDI_MSC_DESCRIPTOR_TAG_LEN + 2;
739*53ee8cc1Swenshuai.xi settings += MDD_MDI_MSC_DESCRIPTOR_TAG_LEN + 2;
740*53ee8cc1Swenshuai.xi }
741*53ee8cc1Swenshuai.xi else
742*53ee8cc1Swenshuai.xi {
743*53ee8cc1Swenshuai.xi NSK_ASSERT(TRUE, "MDD_MDI_TAG fail\n");
744*53ee8cc1Swenshuai.xi return NSK_INVALID_SCRAMBLING_SETTINGS;
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi }
747*53ee8cc1Swenshuai.xi else if (DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG == *settings)
748*53ee8cc1Swenshuai.xi {
749*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw &= ~DSCMB_SW_ESA_VAR_MASK;
750*53ee8cc1Swenshuai.xi
751*53ee8cc1Swenshuai.xi if ((u32SetLen >= (DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG_LEN+2) &&
752*53ee8cc1Swenshuai.xi *(settings+1) == DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG_LEN) )
753*53ee8cc1Swenshuai.xi {
754*53ee8cc1Swenshuai.xi // non-SVP ESA MSC (must stay clear)
755*53ee8cc1Swenshuai.xi if (*(settings+2) & MSC_SCRAM_BIT_MASK)
756*53ee8cc1Swenshuai.xi {
757*53ee8cc1Swenshuai.xi //TODO:
758*53ee8cc1Swenshuai.xi MAsm_CPU_SwDbgBp();
759*53ee8cc1Swenshuai.xi printf("#### Not support #### %s %d\n", __FUNCTION__, __LINE__);
760*53ee8cc1Swenshuai.xi }
761*53ee8cc1Swenshuai.xi
762*53ee8cc1Swenshuai.xi if (*(settings+2) & MSC_DESCRAM_BIT_MASK)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi //TODO:
765*53ee8cc1Swenshuai.xi MAsm_CPU_SwDbgBp();
766*53ee8cc1Swenshuai.xi printf("#### Not support #### %s %d\n", __FUNCTION__, __LINE__);
767*53ee8cc1Swenshuai.xi }
768*53ee8cc1Swenshuai.xi
769*53ee8cc1Swenshuai.xi // non-SVP ESA variant
770*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].nsk_sw |= ((*(settings+3)) << DSCMB_SW_ESA_VAR_SHFT) & DSCMB_SW_ESA_VAR_MASK;
771*53ee8cc1Swenshuai.xi
772*53ee8cc1Swenshuai.xi u32SetLen -= DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG_LEN + 2;
773*53ee8cc1Swenshuai.xi settings += DESCRAMBLER_ALGORITHM_DESCRIPTOR_TAG_LEN + 2;
774*53ee8cc1Swenshuai.xi
775*53ee8cc1Swenshuai.xi }
776*53ee8cc1Swenshuai.xi else
777*53ee8cc1Swenshuai.xi {
778*53ee8cc1Swenshuai.xi NSK_ASSERT(TRUE, "DSCMB_TAG fail\n");
779*53ee8cc1Swenshuai.xi return NSK_INVALID_SCRAMBLING_SETTINGS;
780*53ee8cc1Swenshuai.xi }
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi else
783*53ee8cc1Swenshuai.xi {
784*53ee8cc1Swenshuai.xi NSK_ASSERT(TRUE, "TAG fail\n");
785*53ee8cc1Swenshuai.xi return NSK_INVALID_SCRAMBLING_SETTINGS;
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi
788*53ee8cc1Swenshuai.xi if (u32SetLen < 0)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi return NSK_INVALID_SCRAMBLING_SETTINGS;
791*53ee8cc1Swenshuai.xi }
792*53ee8cc1Swenshuai.xi }
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi #if defined(CHIP_U3)
795*53ee8cc1Swenshuai.xi //MDrv_DSCMB_CleanSCB();
796*53ee8cc1Swenshuai.xi #endif
797*53ee8cc1Swenshuai.xi MDrv_DSCMB_FltKeySet(svp_cm[cm_channel_handle].dsc_id, key_type, NULL); // Dummy control word for SVP mode
798*53ee8cc1Swenshuai.xi #if defined(CHIP_U3)
799*53ee8cc1Swenshuai.xi MDrv_DSCMB_FltTypeSet(svp_cm[cm_channel_handle].dsc_id, svp_cm[cm_channel_handle].dsc_type, svp_cm[cm_channel_handle].nsk_sw, key_type);
800*53ee8cc1Swenshuai.xi #else
801*53ee8cc1Swenshuai.xi
802*53ee8cc1Swenshuai.xi MS_U32 i = 0 ;
803*53ee8cc1Swenshuai.xi for ( i = 0 ; i < SVP_CM_ESPID_NUM ; i++ )
804*53ee8cc1Swenshuai.xi {
805*53ee8cc1Swenshuai.xi if (TRUE == svp_cm[cm_channel_handle].es[i].alloc)
806*53ee8cc1Swenshuai.xi {
807*53ee8cc1Swenshuai.xi MDrv_DSCMB_SlotSwitchWrite(svp_cm[cm_channel_handle].es[i].flt_id
808*53ee8cc1Swenshuai.xi ,key_type
809*53ee8cc1Swenshuai.xi ,svp_cm[cm_channel_handle].nsk_sw, 0, 0);
810*53ee8cc1Swenshuai.xi break ;
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi }
813*53ee8cc1Swenshuai.xi #endif
814*53ee8cc1Swenshuai.xi
815*53ee8cc1Swenshuai.xi
816*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
817*53ee8cc1Swenshuai.xi }
818*53ee8cc1Swenshuai.xi
SVPHDI_ReadSerialData(unsigned int offset,unsigned int length,unsigned char * data)819*53ee8cc1Swenshuai.xi unsigned short SVPHDI_ReadSerialData(unsigned int offset,
820*53ee8cc1Swenshuai.xi unsigned int length,
821*53ee8cc1Swenshuai.xi unsigned char* data)
822*53ee8cc1Swenshuai.xi {
823*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi
826*53ee8cc1Swenshuai.xi
SVPHDI_AllocateCmChannel(unsigned long xconn,unsigned int esa_select,unsigned int esa_subselect,unsigned int * cm_channel_handle)827*53ee8cc1Swenshuai.xi unsigned short SVPHDI_AllocateCmChannel(unsigned long xconn,
828*53ee8cc1Swenshuai.xi unsigned int esa_select,
829*53ee8cc1Swenshuai.xi unsigned int esa_subselect,
830*53ee8cc1Swenshuai.xi unsigned int* cm_channel_handle)
831*53ee8cc1Swenshuai.xi {
832*53ee8cc1Swenshuai.xi int i;
833*53ee8cc1Swenshuai.xi // DSCMB_Type dsc_type = E_DSCMB_TYPE_CSA;
834*53ee8cc1Swenshuai.xi
835*53ee8cc1Swenshuai.xi SVP_ENTRY();
836*53ee8cc1Swenshuai.xi
837*53ee8cc1Swenshuai.xi //TODO: x_connection
838*53ee8cc1Swenshuai.xi // SVP_RETURN(NSK_INVALID_XCONNECTION);
839*53ee8cc1Swenshuai.xi
840*53ee8cc1Swenshuai.xi for(i = 0; i < SVP_CM_CHANNEL_NUM; i++)
841*53ee8cc1Swenshuai.xi {
842*53ee8cc1Swenshuai.xi if (svp_cm[i].alloc == FALSE)
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi break;
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi }
847*53ee8cc1Swenshuai.xi if (i == SVP_CM_CHANNEL_NUM)
848*53ee8cc1Swenshuai.xi {
849*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
850*53ee8cc1Swenshuai.xi }
851*53ee8cc1Swenshuai.xi
852*53ee8cc1Swenshuai.xi #if defined(CHIP_U3)
853*53ee8cc1Swenshuai.xi //TODO: remove it? TDES is different than DES! ECM,etc...is defined by esa_select!
854*53ee8cc1Swenshuai.xi switch (esa_select)
855*53ee8cc1Swenshuai.xi {
856*53ee8cc1Swenshuai.xi case 0x0: // AES
857*53ee8cc1Swenshuai.xi dsc_type = E_DSCMB_TYPE_AES;
858*53ee8cc1Swenshuai.xi break;
859*53ee8cc1Swenshuai.xi case 0x1: // DVB CSA
860*53ee8cc1Swenshuai.xi dsc_type = E_DSCMB_TYPE_CSA;
861*53ee8cc1Swenshuai.xi break;
862*53ee8cc1Swenshuai.xi case 0x2: // DES
863*53ee8cc1Swenshuai.xi case 0x3: // TDES
864*53ee8cc1Swenshuai.xi dsc_type = E_DSCMB_TYPE_DES;
865*53ee8cc1Swenshuai.xi break;
866*53ee8cc1Swenshuai.xi case 0xF: // SW
867*53ee8cc1Swenshuai.xi // regardless esa_subselect
868*53ee8cc1Swenshuai.xi break;
869*53ee8cc1Swenshuai.xi default:
870*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_ESA_SELECT)
871*53ee8cc1Swenshuai.xi }
872*53ee8cc1Swenshuai.xi svp_cm[i].dsc_type = dsc_type;
873*53ee8cc1Swenshuai.xi #else
874*53ee8cc1Swenshuai.xi MS_U32 sw1, sw2, sw3, sw_cnt;
875*53ee8cc1Swenshuai.xi sw_cnt = HAL_NDS_KTE_GetSwitch(esa_select, esa_subselect, &sw1, &sw2, &sw3);
876*53ee8cc1Swenshuai.xi if (sw_cnt == 0)
877*53ee8cc1Swenshuai.xi {
878*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_ESA_SELECT);
879*53ee8cc1Swenshuai.xi }
880*53ee8cc1Swenshuai.xi svp_cm[i].nsk_sw = sw1; // U3/U4
881*53ee8cc1Swenshuai.xi #endif
882*53ee8cc1Swenshuai.xi
883*53ee8cc1Swenshuai.xi if (DRV_DSCMB_FLT_NULL == (svp_cm[i].dsc_id = MDrv_DSCMB_FltAlloc()))
884*53ee8cc1Swenshuai.xi {
885*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi
888*53ee8cc1Swenshuai.xi // allocate descarmbler filter slot
889*53ee8cc1Swenshuai.xi //TODO:
890*53ee8cc1Swenshuai.xi /*
891*53ee8cc1Swenshuai.xi MS_U16 ret;
892*53ee8cc1Swenshuai.xi MDrv_DSCMB_FltAlloc
893*53ee8cc1Swenshuai.xi if (ret != TRUE)
894*53ee8cc1Swenshuai.xi {
895*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
896*53ee8cc1Swenshuai.xi }
897*53ee8cc1Swenshuai.xi */
898*53ee8cc1Swenshuai.xi
899*53ee8cc1Swenshuai.xi svp_cm[i].alloc = TRUE;
900*53ee8cc1Swenshuai.xi
901*53ee8cc1Swenshuai.xi *cm_channel_handle = i;
902*53ee8cc1Swenshuai.xi
903*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
904*53ee8cc1Swenshuai.xi }
905*53ee8cc1Swenshuai.xi
906*53ee8cc1Swenshuai.xi
SVPHDI_DeallocateCmChannel(unsigned int cm_channel_handle)907*53ee8cc1Swenshuai.xi unsigned short SVPHDI_DeallocateCmChannel(unsigned int cm_channel_handle)
908*53ee8cc1Swenshuai.xi {
909*53ee8cc1Swenshuai.xi SVP_ENTRY();
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi if ((cm_channel_handle >= SVP_CM_CHANNEL_NUM) || (svp_cm[cm_channel_handle].alloc != TRUE))
912*53ee8cc1Swenshuai.xi {
913*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
914*53ee8cc1Swenshuai.xi }
915*53ee8cc1Swenshuai.xi
916*53ee8cc1Swenshuai.xi // disable cm_channel
917*53ee8cc1Swenshuai.xi if (_SVP_DisableCmChannel(cm_channel_handle) != NSK_STATUS_OK)
918*53ee8cc1Swenshuai.xi {
919*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi
922*53ee8cc1Swenshuai.xi
923*53ee8cc1Swenshuai.xi // Free Channel
924*53ee8cc1Swenshuai.xi //TODO:
925*53ee8cc1Swenshuai.xi /*
926*53ee8cc1Swenshuai.xi MS_U16 ret;
927*53ee8cc1Swenshuai.xi if (ret != TRUE)
928*53ee8cc1Swenshuai.xi {
929*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
930*53ee8cc1Swenshuai.xi }
931*53ee8cc1Swenshuai.xi */
932*53ee8cc1Swenshuai.xi
933*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
934*53ee8cc1Swenshuai.xi }
935*53ee8cc1Swenshuai.xi
936*53ee8cc1Swenshuai.xi
SVPHDI_AddEsPidCmChannel(unsigned int cm_channel_handle,unsigned short es_pid)937*53ee8cc1Swenshuai.xi unsigned short SVPHDI_AddEsPidCmChannel(unsigned int cm_channel_handle,
938*53ee8cc1Swenshuai.xi unsigned short es_pid)
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi int j;
941*53ee8cc1Swenshuai.xi
942*53ee8cc1Swenshuai.xi SVP_ENTRY();
943*53ee8cc1Swenshuai.xi if ((cm_channel_handle >= SVP_CM_CHANNEL_NUM) || (svp_cm[cm_channel_handle].alloc != TRUE))
944*53ee8cc1Swenshuai.xi {
945*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
946*53ee8cc1Swenshuai.xi }
947*53ee8cc1Swenshuai.xi
948*53ee8cc1Swenshuai.xi for (j = 0; j < SVP_CM_ESPID_NUM; j++)
949*53ee8cc1Swenshuai.xi {
950*53ee8cc1Swenshuai.xi if (svp_cm[cm_channel_handle].es[j].alloc != TRUE)
951*53ee8cc1Swenshuai.xi {
952*53ee8cc1Swenshuai.xi break;
953*53ee8cc1Swenshuai.xi }
954*53ee8cc1Swenshuai.xi }
955*53ee8cc1Swenshuai.xi if (j == SVP_CM_ESPID_NUM)
956*53ee8cc1Swenshuai.xi {
957*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
958*53ee8cc1Swenshuai.xi }
959*53ee8cc1Swenshuai.xi
960*53ee8cc1Swenshuai.xi // allocate a PID slot
961*53ee8cc1Swenshuai.xi //TODO:
962*53ee8cc1Swenshuai.xi /*
963*53ee8cc1Swenshuai.xi if (ret != TRUE);
964*53ee8cc1Swenshuai.xi {
965*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
966*53ee8cc1Swenshuai.xi }
967*53ee8cc1Swenshuai.xi // enable espid if channel is enabled
968*53ee8cc1Swenshuai.xi if (svp_cm[cm_channel_handle].enable == TRUE)
969*53ee8cc1Swenshuai.xi {
970*53ee8cc1Swenshuai.xi if (_SVP_EnableEsPidCmChannel(cm_channel_handle, j) != NSK_STATUS_OK)
971*53ee8cc1Swenshuai.xi {
972*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
973*53ee8cc1Swenshuai.xi }
974*53ee8cc1Swenshuai.xi }
975*53ee8cc1Swenshuai.xi */
976*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].enable = TRUE;
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi
979*53ee8cc1Swenshuai.xi MS_U32 flt_id, fltnum = 0 , pid = 0 ;
980*53ee8cc1Swenshuai.xi #if 0
981*53ee8cc1Swenshuai.xi //tt
982*53ee8cc1Swenshuai.xi //FIXME: --jerry
983*53ee8cc1Swenshuai.xi //////////////// Fix Me for SVP test ///////////////
984*53ee8cc1Swenshuai.xi //-------------- Alloc and Set pid -----------------
985*53ee8cc1Swenshuai.xi TSP_FltType flt_type;
986*53ee8cc1Swenshuai.xi if (0xFFFF != es_pid)
987*53ee8cc1Swenshuai.xi {
988*53ee8cc1Swenshuai.xi
989*53ee8cc1Swenshuai.xi if (es_pid == 0x200)
990*53ee8cc1Swenshuai.xi flt_type = E_TSP_FLT_FIFO_VIDEO;
991*53ee8cc1Swenshuai.xi else if (es_pid == 0x280)
992*53ee8cc1Swenshuai.xi flt_type = E_TSP_FLT_FIFO_AUDIO;
993*53ee8cc1Swenshuai.xi else
994*53ee8cc1Swenshuai.xi flt_type = E_TSP_FLT_USER_SEC;
995*53ee8cc1Swenshuai.xi
996*53ee8cc1Swenshuai.xi //if (DMX_FILTER_STATUS_OK != MApi_DMX_Open(FilterType, &DmxIdSect))
997*53ee8cc1Swenshuai.xi if (E_TSP_OK != MDrv_TSP_FLT_Alloc(0, flt_type, &flt_id))
998*53ee8cc1Swenshuai.xi {
999*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
1000*53ee8cc1Swenshuai.xi }
1001*53ee8cc1Swenshuai.xi pid = es_pid;
1002*53ee8cc1Swenshuai.xi //if (DMX_FILTER_STATUS_OK != MApi_DMX_Pid(DmxIdSect, &u16Pid, TRUE))
1003*53ee8cc1Swenshuai.xi if (E_TSP_OK != MDrv_TSP_FLT_SetPID(flt_id, (MS_U32)pid))
1004*53ee8cc1Swenshuai.xi {
1005*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
1006*53ee8cc1Swenshuai.xi }
1007*53ee8cc1Swenshuai.xi }
1008*53ee8cc1Swenshuai.xi //tt
1009*53ee8cc1Swenshuai.xi #else
1010*53ee8cc1Swenshuai.xi
1011*53ee8cc1Swenshuai.xi if ( E_TSP_OK != MDrv_TSP_GetCaps(E_TSP_CAP_PIDFLT_NUM, &fltnum))
1012*53ee8cc1Swenshuai.xi {
1013*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi else
1016*53ee8cc1Swenshuai.xi {
1017*53ee8cc1Swenshuai.xi for( flt_id = 0 ; flt_id < fltnum ; flt_id ++ )
1018*53ee8cc1Swenshuai.xi {
1019*53ee8cc1Swenshuai.xi pid = 0 ;
1020*53ee8cc1Swenshuai.xi if (E_TSP_OK != MDrv_TSP_FLT_GetPID(flt_id, &pid))
1021*53ee8cc1Swenshuai.xi {
1022*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
1023*53ee8cc1Swenshuai.xi }
1024*53ee8cc1Swenshuai.xi
1025*53ee8cc1Swenshuai.xi if ( pid == es_pid)
1026*53ee8cc1Swenshuai.xi {
1027*53ee8cc1Swenshuai.xi break ;
1028*53ee8cc1Swenshuai.xi }
1029*53ee8cc1Swenshuai.xi }
1030*53ee8cc1Swenshuai.xi if (flt_id == fltnum )
1031*53ee8cc1Swenshuai.xi {
1032*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_PID);
1033*53ee8cc1Swenshuai.xi }
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi #endif
1036*53ee8cc1Swenshuai.xi
1037*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].es[j].alloc = TRUE;
1038*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].es[j].pid = (MS_U32)es_pid;
1039*53ee8cc1Swenshuai.xi svp_cm[cm_channel_handle].es[j].flt_id = flt_id;
1040*53ee8cc1Swenshuai.xi
1041*53ee8cc1Swenshuai.xi MDrv_DSCMB_FltConnectPid(svp_cm[cm_channel_handle].dsc_id, (MS_U32)es_pid);
1042*53ee8cc1Swenshuai.xi
1043*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi
1046*53ee8cc1Swenshuai.xi
SVPHDI_RemoveEsPidCmChannel(unsigned int cm_channel_handle,unsigned short es_pid)1047*53ee8cc1Swenshuai.xi unsigned short SVPHDI_RemoveEsPidCmChannel(unsigned int cm_channel_handle,
1048*53ee8cc1Swenshuai.xi unsigned short es_pid)
1049*53ee8cc1Swenshuai.xi {
1050*53ee8cc1Swenshuai.xi int j;
1051*53ee8cc1Swenshuai.xi
1052*53ee8cc1Swenshuai.xi SVP_ENTRY();
1053*53ee8cc1Swenshuai.xi if ((cm_channel_handle >= SVP_CM_CHANNEL_NUM) || (svp_cm[cm_channel_handle].alloc != TRUE))
1054*53ee8cc1Swenshuai.xi {
1055*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
1056*53ee8cc1Swenshuai.xi }
1057*53ee8cc1Swenshuai.xi for (j = 0; j < SVP_CM_ESPID_NUM; j++)
1058*53ee8cc1Swenshuai.xi {
1059*53ee8cc1Swenshuai.xi if ( (svp_cm[cm_channel_handle].es[j].alloc == TRUE) &&
1060*53ee8cc1Swenshuai.xi (svp_cm[cm_channel_handle].es[j].pid == es_pid) )
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi if (_SVP_RemoveEsPidCmChannel(cm_channel_handle, j))
1063*53ee8cc1Swenshuai.xi {
1064*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_FAILED);
1065*53ee8cc1Swenshuai.xi }
1066*53ee8cc1Swenshuai.xi }
1067*53ee8cc1Swenshuai.xi }
1068*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1069*53ee8cc1Swenshuai.xi }
1070*53ee8cc1Swenshuai.xi
1071*53ee8cc1Swenshuai.xi
SVPHDI_EnableCmChannel(unsigned int cm_channel_handle)1072*53ee8cc1Swenshuai.xi unsigned short SVPHDI_EnableCmChannel(unsigned int cm_channel_handle)
1073*53ee8cc1Swenshuai.xi {
1074*53ee8cc1Swenshuai.xi int j;
1075*53ee8cc1Swenshuai.xi
1076*53ee8cc1Swenshuai.xi SVP_ENTRY();
1077*53ee8cc1Swenshuai.xi if ((cm_channel_handle >= SVP_CM_CHANNEL_NUM) || (svp_cm[cm_channel_handle].alloc != TRUE))
1078*53ee8cc1Swenshuai.xi {
1079*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
1080*53ee8cc1Swenshuai.xi }
1081*53ee8cc1Swenshuai.xi
1082*53ee8cc1Swenshuai.xi for (j = 0; j < SVP_CM_ESPID_NUM; j++)
1083*53ee8cc1Swenshuai.xi {
1084*53ee8cc1Swenshuai.xi #if 1 //temp
1085*53ee8cc1Swenshuai.xi if ((svp_cm[cm_channel_handle].es[j].alloc == TRUE) && (0x1FFFF != svp_cm[cm_channel_handle].es[j].pid))
1086*53ee8cc1Swenshuai.xi {
1087*53ee8cc1Swenshuai.xi //if (DMX_FILTER_STATUS_OK != MApi_DMX_Start(svp_cm[cm_channel_handle].es[j].flt_id))
1088*53ee8cc1Swenshuai.xi if (E_TSP_OK != MDrv_TSP_FLT_Enable(svp_cm[cm_channel_handle].es[j].flt_id, TRUE))
1089*53ee8cc1Swenshuai.xi {
1090*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
1091*53ee8cc1Swenshuai.xi }
1092*53ee8cc1Swenshuai.xi }
1093*53ee8cc1Swenshuai.xi #else
1094*53ee8cc1Swenshuai.xi //FIXME: Please no more DMX/TSP in SVP code
1095*53ee8cc1Swenshuai.xi if (svp_cm[cm_channel_handle].es[j].alloc == TRUE)
1096*53ee8cc1Swenshuai.xi {
1097*53ee8cc1Swenshuai.xi _SVP_EnableEsPidCmChannel(cm_channel_handle, j);
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi // -- jerry
1100*53ee8cc1Swenshuai.xi #endif
1101*53ee8cc1Swenshuai.xi }
1102*53ee8cc1Swenshuai.xi
1103*53ee8cc1Swenshuai.xi //TODO: enable CmChannel
1104*53ee8cc1Swenshuai.xi
1105*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi
1108*53ee8cc1Swenshuai.xi
SVPHDI_DisableCmChannel(unsigned int cm_channel_handle)1109*53ee8cc1Swenshuai.xi unsigned short SVPHDI_DisableCmChannel(unsigned int cm_channel_handle)
1110*53ee8cc1Swenshuai.xi {
1111*53ee8cc1Swenshuai.xi SVP_ENTRY();
1112*53ee8cc1Swenshuai.xi if ((cm_channel_handle >= SVP_CM_CHANNEL_NUM) || (svp_cm[cm_channel_handle].alloc != TRUE))
1113*53ee8cc1Swenshuai.xi {
1114*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INVALID_CM_CHANNEL_HANDLE);
1115*53ee8cc1Swenshuai.xi }
1116*53ee8cc1Swenshuai.xi
1117*53ee8cc1Swenshuai.xi _SVP_DisableCmChannel(cm_channel_handle);
1118*53ee8cc1Swenshuai.xi
1119*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1120*53ee8cc1Swenshuai.xi }
1121*53ee8cc1Swenshuai.xi
1122*53ee8cc1Swenshuai.xi
SVPHDI_WriteKey(unsigned long instance,unsigned int cm_channel_handle,unsigned char scb,unsigned int scrambling_settings_len,unsigned char * scrambling_settings)1123*53ee8cc1Swenshuai.xi unsigned short SVPHDI_WriteKey(unsigned long instance,
1124*53ee8cc1Swenshuai.xi unsigned int cm_channel_handle,
1125*53ee8cc1Swenshuai.xi unsigned char scb,
1126*53ee8cc1Swenshuai.xi unsigned int scrambling_settings_len,
1127*53ee8cc1Swenshuai.xi unsigned char* scrambling_settings)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi SVP_ENTRY();
1130*53ee8cc1Swenshuai.xi
1131*53ee8cc1Swenshuai.xi _SVP_WriteKey_Parse(cm_channel_handle, scb, scrambling_settings_len, scrambling_settings);
1132*53ee8cc1Swenshuai.xi //TODO WriteKTE
1133*53ee8cc1Swenshuai.xi
1134*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi
1137*53ee8cc1Swenshuai.xi
SVPHDI_GetContentModuleProperties(unsigned int cm_prop_length,unsigned int * actual_cm_prop_len,unsigned char * cm_properties)1138*53ee8cc1Swenshuai.xi unsigned short SVPHDI_GetContentModuleProperties(unsigned int cm_prop_length,
1139*53ee8cc1Swenshuai.xi unsigned int* actual_cm_prop_len,
1140*53ee8cc1Swenshuai.xi unsigned char* cm_properties)
1141*53ee8cc1Swenshuai.xi {
1142*53ee8cc1Swenshuai.xi SVP_ENTRY();
1143*53ee8cc1Swenshuai.xi
1144*53ee8cc1Swenshuai.xi *actual_cm_prop_len = sizeof(svp_prop); // will the size more than sepcified coz alignment?
1145*53ee8cc1Swenshuai.xi
1146*53ee8cc1Swenshuai.xi if (cm_prop_length != 0)
1147*53ee8cc1Swenshuai.xi {
1148*53ee8cc1Swenshuai.xi memcpy(cm_properties, &svp_prop, MIN(cm_prop_length, sizeof(svp_prop)));
1149*53ee8cc1Swenshuai.xi }
1150*53ee8cc1Swenshuai.xi
1151*53ee8cc1Swenshuai.xi if (cm_prop_length < sizeof(svp_prop))
1152*53ee8cc1Swenshuai.xi {
1153*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_INSUFFICIENT_BUFFER);
1154*53ee8cc1Swenshuai.xi }
1155*53ee8cc1Swenshuai.xi
1156*53ee8cc1Swenshuai.xi SVP_RETURN(NSK_STATUS_OK);
1157*53ee8cc1Swenshuai.xi }
1158*53ee8cc1Swenshuai.xi
1159*53ee8cc1Swenshuai.xi
1160*53ee8cc1Swenshuai.xi /////------ no support now ------
SVPHDI_SetSecondaryVideoPid(unsigned int cm_channel_handle,unsigned short primary_pid,unsigned short secondary_pid)1161*53ee8cc1Swenshuai.xi unsigned short SVPHDI_SetSecondaryVideoPid
1162*53ee8cc1Swenshuai.xi (
1163*53ee8cc1Swenshuai.xi unsigned int cm_channel_handle,
1164*53ee8cc1Swenshuai.xi unsigned short primary_pid,
1165*53ee8cc1Swenshuai.xi unsigned short secondary_pid
1166*53ee8cc1Swenshuai.xi )
1167*53ee8cc1Swenshuai.xi {
1168*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1169*53ee8cc1Swenshuai.xi }
1170*53ee8cc1Swenshuai.xi
1171*53ee8cc1Swenshuai.xi
1172*53ee8cc1Swenshuai.xi
SVPHDI_ReleaseSecondaryVideoPid(unsigned int cm_channel_handle,unsigned short secondary_pid)1173*53ee8cc1Swenshuai.xi unsigned short SVPHDI_ReleaseSecondaryVideoPid
1174*53ee8cc1Swenshuai.xi (
1175*53ee8cc1Swenshuai.xi unsigned int cm_channel_handle,
1176*53ee8cc1Swenshuai.xi unsigned short secondary_pid
1177*53ee8cc1Swenshuai.xi )
1178*53ee8cc1Swenshuai.xi {
1179*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1180*53ee8cc1Swenshuai.xi }
1181*53ee8cc1Swenshuai.xi
1182*53ee8cc1Swenshuai.xi
1183*53ee8cc1Swenshuai.xi
SVPHDI_StartPacketInjection(unsigned long xconn,unsigned char * transport_packet,unsigned int injection_type,unsigned int injection_frequency)1184*53ee8cc1Swenshuai.xi unsigned short SVPHDI_StartPacketInjection
1185*53ee8cc1Swenshuai.xi (
1186*53ee8cc1Swenshuai.xi unsigned long xconn,
1187*53ee8cc1Swenshuai.xi unsigned char* transport_packet,
1188*53ee8cc1Swenshuai.xi unsigned int injection_type,
1189*53ee8cc1Swenshuai.xi unsigned int injection_frequency
1190*53ee8cc1Swenshuai.xi )
1191*53ee8cc1Swenshuai.xi {
1192*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1193*53ee8cc1Swenshuai.xi }
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi
SVPHDI_InjectSinglePacket(unsigned long xconn,unsigned char * transport_packet)1196*53ee8cc1Swenshuai.xi unsigned short SVPHDI_InjectSinglePacket
1197*53ee8cc1Swenshuai.xi (
1198*53ee8cc1Swenshuai.xi unsigned long xconn,
1199*53ee8cc1Swenshuai.xi unsigned char* transport_packet
1200*53ee8cc1Swenshuai.xi )
1201*53ee8cc1Swenshuai.xi {
1202*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1203*53ee8cc1Swenshuai.xi }
1204*53ee8cc1Swenshuai.xi
1205*53ee8cc1Swenshuai.xi
1206*53ee8cc1Swenshuai.xi
SVPHDI_ContinousReplacePacket(unsigned long xconn,unsigned short replace_pid,unsigned char * transport_packet)1207*53ee8cc1Swenshuai.xi unsigned short SVPHDI_ContinousReplacePacket
1208*53ee8cc1Swenshuai.xi (
1209*53ee8cc1Swenshuai.xi unsigned long xconn,
1210*53ee8cc1Swenshuai.xi unsigned short replace_pid,
1211*53ee8cc1Swenshuai.xi unsigned char* transport_packet
1212*53ee8cc1Swenshuai.xi )
1213*53ee8cc1Swenshuai.xi {
1214*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1215*53ee8cc1Swenshuai.xi }
1216*53ee8cc1Swenshuai.xi
1217*53ee8cc1Swenshuai.xi
1218*53ee8cc1Swenshuai.xi
SVPHDI_TerminatePacketWrite(unsigned long xconn,unsigned short pid)1219*53ee8cc1Swenshuai.xi unsigned short SVPHDI_TerminatePacketWrite
1220*53ee8cc1Swenshuai.xi (
1221*53ee8cc1Swenshuai.xi unsigned long xconn,
1222*53ee8cc1Swenshuai.xi unsigned short pid
1223*53ee8cc1Swenshuai.xi )
1224*53ee8cc1Swenshuai.xi {
1225*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1226*53ee8cc1Swenshuai.xi }
1227*53ee8cc1Swenshuai.xi
1228*53ee8cc1Swenshuai.xi
HDIHAL_WriteDescrambler(unsigned long xconn,unsigned short pid,unsigned char scb,unsigned char flags)1229*53ee8cc1Swenshuai.xi unsigned short HDIHAL_WriteDescrambler
1230*53ee8cc1Swenshuai.xi (
1231*53ee8cc1Swenshuai.xi unsigned long xconn,
1232*53ee8cc1Swenshuai.xi unsigned short pid,
1233*53ee8cc1Swenshuai.xi unsigned char scb,
1234*53ee8cc1Swenshuai.xi unsigned char flags
1235*53ee8cc1Swenshuai.xi )
1236*53ee8cc1Swenshuai.xi {
1237*53ee8cc1Swenshuai.xi //---- no support this now ----
1238*53ee8cc1Swenshuai.xi return NSK_STATUS_OK;
1239*53ee8cc1Swenshuai.xi }
1240*53ee8cc1Swenshuai.xi
1241*53ee8cc1Swenshuai.xi
NDS_NSK_Init(MS_U32 nds_id)1242*53ee8cc1Swenshuai.xi NDS_Result NDS_NSK_Init(MS_U32 nds_id)
1243*53ee8cc1Swenshuai.xi {
1244*53ee8cc1Swenshuai.xi int i, j;
1245*53ee8cc1Swenshuai.xi
1246*53ee8cc1Swenshuai.xi s32NSK_EventId = MsOS_CreateEventGroup("NDS_NSK_Event");
1247*53ee8cc1Swenshuai.xi if (s32NSK_EventId < 0)
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi return E_NDS_FAIL;
1250*53ee8cc1Swenshuai.xi }
1251*53ee8cc1Swenshuai.xi
1252*53ee8cc1Swenshuai.xi s32NSK_TaskId = MsOS_CreateTask((TaskEntry)_NSK_Isr_Task,
1253*53ee8cc1Swenshuai.xi (MS_U32)NULL,
1254*53ee8cc1Swenshuai.xi E_TASK_PRI_SYS,
1255*53ee8cc1Swenshuai.xi TRUE,
1256*53ee8cc1Swenshuai.xi u32NSK_Stack,
1257*53ee8cc1Swenshuai.xi NSK_TASK_STACK_SIZE,
1258*53ee8cc1Swenshuai.xi "NDS_NSK_Task");
1259*53ee8cc1Swenshuai.xi if (s32NSK_TaskId < 0)
1260*53ee8cc1Swenshuai.xi {
1261*53ee8cc1Swenshuai.xi MsOS_DeleteEventGroup(s32NSK_EventId);
1262*53ee8cc1Swenshuai.xi return E_NDS_FAIL;
1263*53ee8cc1Swenshuai.xi }
1264*53ee8cc1Swenshuai.xi
1265*53ee8cc1Swenshuai.xi for (i = 0; i < SVP_CM_CHANNEL_NUM; i++)
1266*53ee8cc1Swenshuai.xi {
1267*53ee8cc1Swenshuai.xi svp_cm[i].alloc = FALSE;
1268*53ee8cc1Swenshuai.xi svp_cm[i].enable = FALSE;
1269*53ee8cc1Swenshuai.xi for (j = 0; j < SVP_CM_ESPID_NUM; j++)
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi svp_cm[i].es[j].alloc = FALSE;
1272*53ee8cc1Swenshuai.xi }
1273*53ee8cc1Swenshuai.xi }
1274*53ee8cc1Swenshuai.xi
1275*53ee8cc1Swenshuai.xi // Initialize hardware
1276*53ee8cc1Swenshuai.xi NSK_REG_W(REG_NSK_INT, 0x8000000F);//enable nsk int
1277*53ee8cc1Swenshuai.xi MsOS_DisableInterrupt(NDS_NSK_IRQ);
1278*53ee8cc1Swenshuai.xi MsOS_DetachInterrupt(NDS_NSK_IRQ);
1279*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(NDS_NSK_IRQ, (InterruptCb)_NSK_Isr);
1280*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(NDS_NSK_IRQ);
1281*53ee8cc1Swenshuai.xi
1282*53ee8cc1Swenshuai.xi #ifndef CDI_CA
1283*53ee8cc1Swenshuai.xi // NDS Library
1284*53ee8cc1Swenshuai.xi HALHDI_InitSVP_HW(0);
1285*53ee8cc1Swenshuai.xi #endif
1286*53ee8cc1Swenshuai.xi
1287*53ee8cc1Swenshuai.xi return E_NDS_OK;
1288*53ee8cc1Swenshuai.xi }
1289*53ee8cc1Swenshuai.xi
1290*53ee8cc1Swenshuai.xi
NDS_NSK_Exit(MS_U32 nds_id)1291*53ee8cc1Swenshuai.xi NDS_Result NDS_NSK_Exit(MS_U32 nds_id)
1292*53ee8cc1Swenshuai.xi {
1293*53ee8cc1Swenshuai.xi MsOS_DetachInterrupt(NDS_NSK_IRQ);
1294*53ee8cc1Swenshuai.xi MsOS_DisableInterrupt(NDS_NSK_IRQ);
1295*53ee8cc1Swenshuai.xi
1296*53ee8cc1Swenshuai.xi NSK_REG_W(REG_NSK_INT, 0x8000); // enable nsk int
1297*53ee8cc1Swenshuai.xi
1298*53ee8cc1Swenshuai.xi MsOS_DeleteTask(s32NSK_TaskId);
1299*53ee8cc1Swenshuai.xi MsOS_DeleteEventGroup(s32NSK_EventId);
1300*53ee8cc1Swenshuai.xi
1301*53ee8cc1Swenshuai.xi return E_NDS_OK;
1302*53ee8cc1Swenshuai.xi }
1303