xref: /utopia/UTPA2-700.0.x/modules/dscmb/drv/nds/nds_nsk.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 ////////////////////////////////////////////////////////////////////////////////
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