1*53ee8cc1Swenshuai.xi
2*53ee8cc1Swenshuai.xi
3*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
4*53ee8cc1Swenshuai.xi #include <linux/string.h>
5*53ee8cc1Swenshuai.xi #else
6*53ee8cc1Swenshuai.xi #include "string.h"
7*53ee8cc1Swenshuai.xi #endif
8*53ee8cc1Swenshuai.xi
9*53ee8cc1Swenshuai.xi #include "MsCommon.h"
10*53ee8cc1Swenshuai.xi #include "drvDSCMB.h"
11*53ee8cc1Swenshuai.xi #include "drvNSK2.h"
12*53ee8cc1Swenshuai.xi #include "nsk2hdi_header.h"
13*53ee8cc1Swenshuai.xi #include "drvNSK2Type.h"
14*53ee8cc1Swenshuai.xi #include "apiDMX.h"
15*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
16*53ee8cc1Swenshuai.xi #include "nsk_dbg.h"
17*53ee8cc1Swenshuai.xi
18*53ee8cc1Swenshuai.xi /*****************************************************************************\
19*53ee8cc1Swenshuai.xi \Definitions
20*53ee8cc1Swenshuai.xi \*****************************************************************************/
21*53ee8cc1Swenshuai.xi
22*53ee8cc1Swenshuai.xi #define CMChannel_ID1 0x01234567
23*53ee8cc1Swenshuai.xi #define CMChannel_ID2 0x02461357
24*53ee8cc1Swenshuai.xi
25*53ee8cc1Swenshuai.xi #define NSK2_CMCHANNEL_NUM 256
26*53ee8cc1Swenshuai.xi #define NSK2_M2MCHANNEL_NUM 16
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi #define NSK2_CM_ESPID_NUM 256
29*53ee8cc1Swenshuai.xi #define MaxCAPidProxyNum 256
30*53ee8cc1Swenshuai.xi
31*53ee8cc1Swenshuai.xi #define GetCAPidInfo
32*53ee8cc1Swenshuai.xi
33*53ee8cc1Swenshuai.xi #define CMChannelDescSize 30
34*53ee8cc1Swenshuai.xi #define CmChannelGroupMaxNumber 2
35*53ee8cc1Swenshuai.xi
36*53ee8cc1Swenshuai.xi #define CmChannelCookieSize 0x1000
37*53ee8cc1Swenshuai.xi
38*53ee8cc1Swenshuai.xi #define DefaultDSCMBID 0xFFFF
39*53ee8cc1Swenshuai.xi #define DefaultPidFltID 0xFFFF
40*53ee8cc1Swenshuai.xi #define DefaultPID 0xFFFF
41*53ee8cc1Swenshuai.xi
42*53ee8cc1Swenshuai.xi #define CAVID 1
43*53ee8cc1Swenshuai.xi
44*53ee8cc1Swenshuai.xi #define MaxXConnection 2
45*53ee8cc1Swenshuai.xi /*****************************************************************************\
46*53ee8cc1Swenshuai.xi \ typedef struct
47*53ee8cc1Swenshuai.xi \*****************************************************************************/
48*53ee8cc1Swenshuai.xi typedef enum
49*53ee8cc1Swenshuai.xi {
50*53ee8cc1Swenshuai.xi ESA_SELECT_AES = 0,
51*53ee8cc1Swenshuai.xi ESA_SELECT_DVBCSA2 = 1,
52*53ee8cc1Swenshuai.xi ESA_SELECT_DES = 2,
53*53ee8cc1Swenshuai.xi ESA_SELECT_TDES = 3,
54*53ee8cc1Swenshuai.xi ESA_SELECT_MULTI2 = 4,
55*53ee8cc1Swenshuai.xi ESA_SELECT_DVBCSA2_CONF = 5,
56*53ee8cc1Swenshuai.xi ESA_SELECT_DVBCSA3 = 6,
57*53ee8cc1Swenshuai.xi } ESASelectMap_e;
58*53ee8cc1Swenshuai.xi
59*53ee8cc1Swenshuai.xi
60*53ee8cc1Swenshuai.xi typedef enum
61*53ee8cc1Swenshuai.xi {
62*53ee8cc1Swenshuai.xi ESASUB_SELECT_SCTE41 = 0,
63*53ee8cc1Swenshuai.xi ESASUB_SELECT_SCTE52 = 1,
64*53ee8cc1Swenshuai.xi
65*53ee8cc1Swenshuai.xi ESASUB_SELECT_MDI_CBC = 0,
66*53ee8cc1Swenshuai.xi ESASUB_SELECT_SYNAMEDIA_AES = 1,
67*53ee8cc1Swenshuai.xi ESASUB_SELECT_AES_ECB_CLR = 3,
68*53ee8cc1Swenshuai.xi ESASUB_SELECT_CIPLUS_AES = 4,
69*53ee8cc1Swenshuai.xi
70*53ee8cc1Swenshuai.xi ESASUB_SELECT_NONE = 0,
71*53ee8cc1Swenshuai.xi } ESASubSelectMap_e;
72*53ee8cc1Swenshuai.xi
73*53ee8cc1Swenshuai.xi
74*53ee8cc1Swenshuai.xi typedef enum{
75*53ee8cc1Swenshuai.xi CMCHANNEL_LDA_DESC = 0,
76*53ee8cc1Swenshuai.xi CMCHANNEL_ESA_DESC ,
77*53ee8cc1Swenshuai.xi CMCHANNEL_LSA_DESC ,
78*53ee8cc1Swenshuai.xi CMCHANNEL_MAX_DESC ,
79*53ee8cc1Swenshuai.xi }CMCHANNEL_DESC_e;
80*53ee8cc1Swenshuai.xi
81*53ee8cc1Swenshuai.xi
82*53ee8cc1Swenshuai.xi typedef struct{
83*53ee8cc1Swenshuai.xi NSK2HDI_DEVICE_ID CmChGroup_ID;
84*53ee8cc1Swenshuai.xi
85*53ee8cc1Swenshuai.xi } CmChannelGroup_t;
86*53ee8cc1Swenshuai.xi
87*53ee8cc1Swenshuai.xi
88*53ee8cc1Swenshuai.xi typedef struct _CaPID_Info_
89*53ee8cc1Swenshuai.xi {
90*53ee8cc1Swenshuai.xi MS_BOOL alloc;
91*53ee8cc1Swenshuai.xi MS_BOOL enable;
92*53ee8cc1Swenshuai.xi MS_U16 es_pid;
93*53ee8cc1Swenshuai.xi MS_U32 handle_id;
94*53ee8cc1Swenshuai.xi MS_U8 dscmb_id;
95*53ee8cc1Swenshuai.xi MS_U32 cm_handle_id;
96*53ee8cc1Swenshuai.xi MS_U32 xconn;
97*53ee8cc1Swenshuai.xi MS_U32 ProxyGlobalIndex;
98*53ee8cc1Swenshuai.xi
99*53ee8cc1Swenshuai.xi MS_U32 PrimeFilterID;
100*53ee8cc1Swenshuai.xi MS_U16 PrimePID;
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi MS_U8 secondary_enable;
103*53ee8cc1Swenshuai.xi MS_U8 SecondaryFilterID;
104*53ee8cc1Swenshuai.xi MS_U16 SecondaryPID;
105*53ee8cc1Swenshuai.xi void *pCmCookie;
106*53ee8cc1Swenshuai.xi } CaPID_Info;
107*53ee8cc1Swenshuai.xi
108*53ee8cc1Swenshuai.xi typedef struct
109*53ee8cc1Swenshuai.xi {
110*53ee8cc1Swenshuai.xi NDS_UBYTE type[NSK2_CMCHANNEL_NUM];
111*53ee8cc1Swenshuai.xi NDS_USHORT es_pid[NSK2_CMCHANNEL_NUM];
112*53ee8cc1Swenshuai.xi MS_U8 PidNo[NSK2_CMCHANNEL_NUM];
113*53ee8cc1Swenshuai.xi MS_U32 DscmbId[NSK2_CMCHANNEL_NUM];
114*53ee8cc1Swenshuai.xi MS_U32 used[NSK2_CMCHANNEL_NUM];
115*53ee8cc1Swenshuai.xi } AddXconnInfo_t;
116*53ee8cc1Swenshuai.xi
117*53ee8cc1Swenshuai.xi typedef struct _CmChannelTable_Info_
118*53ee8cc1Swenshuai.xi {
119*53ee8cc1Swenshuai.xi MS_BOOL alloc;
120*53ee8cc1Swenshuai.xi NDS_ULONG CmChTable_ID;
121*53ee8cc1Swenshuai.xi MS_U32 handle_id;
122*53ee8cc1Swenshuai.xi } CmChannelTable_Info;
123*53ee8cc1Swenshuai.xi
124*53ee8cc1Swenshuai.xi typedef struct _CmChannelGroup_Info_
125*53ee8cc1Swenshuai.xi {
126*53ee8cc1Swenshuai.xi MS_BOOL alloc;
127*53ee8cc1Swenshuai.xi NDS_ULONG CmChGroup_ID;
128*53ee8cc1Swenshuai.xi MS_U32 handle_id;
129*53ee8cc1Swenshuai.xi } CmChannelGroup_Info;
130*53ee8cc1Swenshuai.xi
131*53ee8cc1Swenshuai.xi
132*53ee8cc1Swenshuai.xi typedef struct _cmchannel_algorithm_descriptor{
133*53ee8cc1Swenshuai.xi MS_U8 descriptor_tag;
134*53ee8cc1Swenshuai.xi MS_U8 descriptor_length;
135*53ee8cc1Swenshuai.xi MS_U8 algorithm;
136*53ee8cc1Swenshuai.xi } CmChannel_Algo_Desc_t;
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi typedef struct _cmchannel_iv_signaling_descriptor{
139*53ee8cc1Swenshuai.xi MS_U8 descriptor_tag;
140*53ee8cc1Swenshuai.xi MS_U8 descriptor_length;
141*53ee8cc1Swenshuai.xi MS_U8 iv_signaling;
142*53ee8cc1Swenshuai.xi } CmChannel_IV_Signal_Desc_t;
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi typedef struct _cmchannel_iv1_descriptor{
145*53ee8cc1Swenshuai.xi MS_U8 descriptor_tag;
146*53ee8cc1Swenshuai.xi MS_U8 descriptor_length;
147*53ee8cc1Swenshuai.xi MS_U8 iv1_payload[0x10];
148*53ee8cc1Swenshuai.xi } CmChannel_IV1_Desc_t;
149*53ee8cc1Swenshuai.xi
150*53ee8cc1Swenshuai.xi typedef struct _cmchannel_iv2_descriptor{
151*53ee8cc1Swenshuai.xi MS_U8 descriptor_tag;
152*53ee8cc1Swenshuai.xi MS_U8 descriptor_length;
153*53ee8cc1Swenshuai.xi MS_U8 iv2_payload[0x10];
154*53ee8cc1Swenshuai.xi } CmChannel_IV2_Desc_t;
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi typedef struct {
157*53ee8cc1Swenshuai.xi CmChannel_Algo_Desc_t ESA_Algo;
158*53ee8cc1Swenshuai.xi CmChannel_IV_Signal_Desc_t ESA_IV_Signal;
159*53ee8cc1Swenshuai.xi CmChannel_IV1_Desc_t ESA_IV1_Payload;
160*53ee8cc1Swenshuai.xi CmChannel_IV2_Desc_t ESA_IV2_Payload;
161*53ee8cc1Swenshuai.xi }ESA_Desc_St_t;
162*53ee8cc1Swenshuai.xi
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi typedef struct{
165*53ee8cc1Swenshuai.xi NDS_UBYTE Algorithm;
166*53ee8cc1Swenshuai.xi NDS_UBYTE IV_Mode;
167*53ee8cc1Swenshuai.xi NDS_UBYTE IV1_Enable;
168*53ee8cc1Swenshuai.xi NDS_UBYTE IV2_Enable;
169*53ee8cc1Swenshuai.xi NDS_UBYTE IV1[0x10];
170*53ee8cc1Swenshuai.xi NDS_UBYTE IV2[0x10];
171*53ee8cc1Swenshuai.xi }CmChDesc_Parser_t;
172*53ee8cc1Swenshuai.xi
173*53ee8cc1Swenshuai.xi
174*53ee8cc1Swenshuai.xi typedef struct
175*53ee8cc1Swenshuai.xi {
176*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId;
177*53ee8cc1Swenshuai.xi MS_U32 PidSlotID;
178*53ee8cc1Swenshuai.xi MS_U32 u16Pid;
179*53ee8cc1Swenshuai.xi #if 0
180*53ee8cc1Swenshuai.xi NDS_ULONG lda_desc_size;
181*53ee8cc1Swenshuai.xi NDS_UBYTE *lda_desc;
182*53ee8cc1Swenshuai.xi NDS_ULONG esa_desc_size;
183*53ee8cc1Swenshuai.xi NDS_UBYTE *esa_desc;
184*53ee8cc1Swenshuai.xi NDS_ULONG lsa_desc_size;
185*53ee8cc1Swenshuai.xi NDS_UBYTE *lsa_desc;
186*53ee8cc1Swenshuai.xi NDS_UBYTE lda_iv1_payload[0x10];
187*53ee8cc1Swenshuai.xi NDS_UBYTE lda_iv2_payload[0x10];
188*53ee8cc1Swenshuai.xi NDS_UBYTE esa_iv1_payload[0x10];
189*53ee8cc1Swenshuai.xi NDS_UBYTE esa_iv2_payload[0x10];
190*53ee8cc1Swenshuai.xi NDS_UBYTE lsa_iv1_payload[0x10];
191*53ee8cc1Swenshuai.xi NDS_UBYTE lsa_iv2_payload[0x10];
192*53ee8cc1Swenshuai.xi #endif
193*53ee8cc1Swenshuai.xi MS_BOOL bWriteESA;
194*53ee8cc1Swenshuai.xi NDS_UBYTE ESA_Algorithm;
195*53ee8cc1Swenshuai.xi CmChDesc_Parser_t CmChDesc[CMCHANNEL_MAX_DESC];
196*53ee8cc1Swenshuai.xi MS_BOOL bConnect;
197*53ee8cc1Swenshuai.xi } CmChannelDevice_Cookie_t;
198*53ee8cc1Swenshuai.xi
199*53ee8cc1Swenshuai.xi
200*53ee8cc1Swenshuai.xi typedef struct _NSK2_CMChannel
201*53ee8cc1Swenshuai.xi {
202*53ee8cc1Swenshuai.xi MS_BOOL alloc;
203*53ee8cc1Swenshuai.xi MS_BOOL enable;
204*53ee8cc1Swenshuai.xi MS_U32 nsk_sw;
205*53ee8cc1Swenshuai.xi // MS_U32 esa_sel;
206*53ee8cc1Swenshuai.xi // MS_U32 esa_subsel;
207*53ee8cc1Swenshuai.xi MS_U32 dsc_id;
208*53ee8cc1Swenshuai.xi DSCMB_Type dsc_type;
209*53ee8cc1Swenshuai.xi MS_U32 FilterID;
210*53ee8cc1Swenshuai.xi MS_U32 PidSlotID;
211*53ee8cc1Swenshuai.xi MS_U32 handle_id;
212*53ee8cc1Swenshuai.xi MS_U32 es_pid;
213*53ee8cc1Swenshuai.xi
214*53ee8cc1Swenshuai.xi CmChDesc_Parser_t CmChDesc[CMCHANNEL_MAX_DESC];
215*53ee8cc1Swenshuai.xi CmChannelDevice_Cookie_t CmChCookie;
216*53ee8cc1Swenshuai.xi } NSK2_CMChannel_Info;
217*53ee8cc1Swenshuai.xi
218*53ee8cc1Swenshuai.xi
219*53ee8cc1Swenshuai.xi typedef struct _CaPidProxy
220*53ee8cc1Swenshuai.xi {
221*53ee8cc1Swenshuai.xi MS_U16 EsPid;
222*53ee8cc1Swenshuai.xi MS_U32 DscmbId;
223*53ee8cc1Swenshuai.xi MS_BOOL IsUsed;
224*53ee8cc1Swenshuai.xi }CaPidProxy_t;
225*53ee8cc1Swenshuai.xi
226*53ee8cc1Swenshuai.xi /*****************************************************************************\
227*53ee8cc1Swenshuai.xi \ Local variables
228*53ee8cc1Swenshuai.xi \*****************************************************************************/
229*53ee8cc1Swenshuai.xi
230*53ee8cc1Swenshuai.xi MS_U32 _u32KeepPidByFltId[MaxXConnection][NSK2_CMCHANNEL_NUM];
231*53ee8cc1Swenshuai.xi CaPidProxy_t _KeepCaPidProxy[MaxXConnection][NSK2_CMCHANNEL_NUM];
232*53ee8cc1Swenshuai.xi static MS_U32 _gu32WriteKeyTime = 0;
233*53ee8cc1Swenshuai.xi static MS_U32 _u32CaSoCGroupHandle = 0;
234*53ee8cc1Swenshuai.xi
235*53ee8cc1Swenshuai.xi /*****************************************************************************\
236*53ee8cc1Swenshuai.xi \ Global Variables
237*53ee8cc1Swenshuai.xi \*****************************************************************************/
238*53ee8cc1Swenshuai.xi
239*53ee8cc1Swenshuai.xi void *pCmChannelcookie[NSK2_CMCHANNEL_NUM];
240*53ee8cc1Swenshuai.xi void *pM2MChannelcookie[NSK2_M2MCHANNEL_NUM];
241*53ee8cc1Swenshuai.xi
242*53ee8cc1Swenshuai.xi AddXconnInfo_t HDI_XconnInfo[2];
243*53ee8cc1Swenshuai.xi
244*53ee8cc1Swenshuai.xi NSK2HDI_CHILD_DEVICE _gChild_Device[4];
245*53ee8cc1Swenshuai.xi
246*53ee8cc1Swenshuai.xi CmChannelTable_Info CmChannelTableInfo;
247*53ee8cc1Swenshuai.xi CmChannelGroup_Info CmChannelGroupInfo[CmChannelGroupMaxNumber];
248*53ee8cc1Swenshuai.xi
249*53ee8cc1Swenshuai.xi void *CmChannelcookie;
250*53ee8cc1Swenshuai.xi CmChannelDevice_Cookie_t *pCmChCookie;
251*53ee8cc1Swenshuai.xi
252*53ee8cc1Swenshuai.xi CmChDesc_Parser_t gCmChannelDesc[NSK2_CMCHANNEL_NUM][CMCHANNEL_MAX_DESC];
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi
255*53ee8cc1Swenshuai.xi /*****************************************************************************\
256*53ee8cc1Swenshuai.xi \ Global Functions
257*53ee8cc1Swenshuai.xi \*****************************************************************************/
258*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DSCMB2_SetPidPair(MS_U32 u32FltIdPri, MS_U32 u32FltIdSec);
259*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DSCMB2_ClearPidPair(MS_U32 u32FltIdPri, MS_U32 u32FltIdSec);
260*53ee8cc1Swenshuai.xi
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xi /*****************************************************************************\
263*53ee8cc1Swenshuai.xi \ TSP Control functions
264*53ee8cc1Swenshuai.xi \*****************************************************************************/
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi //The extra functions for TSP control
267*53ee8cc1Swenshuai.xi //K7 can separate write key and connect to TSP filter ID
268*53ee8cc1Swenshuai.xi //The scenario is changed.
NSKHDI_AddDscmbConnect(NDS_ULONG xconn,NDS_USHORT es_pid,MS_U32 u32FltID)269*53ee8cc1Swenshuai.xi MS_U32 NSKHDI_AddDscmbConnect(NDS_ULONG xconn,
270*53ee8cc1Swenshuai.xi NDS_USHORT es_pid,
271*53ee8cc1Swenshuai.xi MS_U32 u32FltID)
272*53ee8cc1Swenshuai.xi {
273*53ee8cc1Swenshuai.xi NSK_TRACE(("xconn = 0x%x, es_pid = 0x%04x, FltID = %d\n",xconn,es_pid,u32FltID));
274*53ee8cc1Swenshuai.xi
275*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId, i;
276*53ee8cc1Swenshuai.xi
277*53ee8cc1Swenshuai.xi for( i=0; i<NSK2_CMCHANNEL_NUM ; i++)
278*53ee8cc1Swenshuai.xi {
279*53ee8cc1Swenshuai.xi if( (_KeepCaPidProxy[xconn][i].EsPid == es_pid) && (_KeepCaPidProxy[xconn][i].IsUsed == TRUE))
280*53ee8cc1Swenshuai.xi break;
281*53ee8cc1Swenshuai.xi }
282*53ee8cc1Swenshuai.xi
283*53ee8cc1Swenshuai.xi if( i == NSK2_CMCHANNEL_NUM ) // the CA PID Proxy is not open with this PID, TSP PID add first...
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi _u32KeepPidByFltId[xconn][u32FltID] = es_pid;
286*53ee8cc1Swenshuai.xi NSK_TRACE(("Add TSP filter first, not connect to dscmb\n"));
287*53ee8cc1Swenshuai.xi return TRUE;
288*53ee8cc1Swenshuai.xi }
289*53ee8cc1Swenshuai.xi
290*53ee8cc1Swenshuai.xi u32DscmbId = _KeepCaPidProxy[xconn][i].DscmbId;
291*53ee8cc1Swenshuai.xi _u32KeepPidByFltId[xconn][u32FltID] = es_pid;
292*53ee8cc1Swenshuai.xi
293*53ee8cc1Swenshuai.xi NSK_TRACE(("already open dscmb handle, connect to dscmb\n"));
294*53ee8cc1Swenshuai.xi if(MDrv_DSCMB2_FltConnectFltId(0,u32DscmbId, u32FltID) == FALSE)
295*53ee8cc1Swenshuai.xi {
296*53ee8cc1Swenshuai.xi NSK_ERROR(("MDrv_DSCMB_FltConnectPid() failed\n"));
297*53ee8cc1Swenshuai.xi return FALSE;
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi
300*53ee8cc1Swenshuai.xi return TRUE;
301*53ee8cc1Swenshuai.xi }
302*53ee8cc1Swenshuai.xi
NSKHDI_RemoveDscmbConnect(NDS_ULONG xconn,NDS_USHORT es_pid)303*53ee8cc1Swenshuai.xi MS_U32 NSKHDI_RemoveDscmbConnect(NDS_ULONG xconn,
304*53ee8cc1Swenshuai.xi NDS_USHORT es_pid)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
308*53ee8cc1Swenshuai.xi MS_U32 i = 0, j=0, u32FltID;
309*53ee8cc1Swenshuai.xi
310*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId;
311*53ee8cc1Swenshuai.xi MS_BOOL discon_flag = TRUE;
312*53ee8cc1Swenshuai.xi
313*53ee8cc1Swenshuai.xi for( i=0; i<NSK2_CMCHANNEL_NUM ; i++)
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi if( _u32KeepPidByFltId[xconn][i] == es_pid)
316*53ee8cc1Swenshuai.xi break;
317*53ee8cc1Swenshuai.xi }
318*53ee8cc1Swenshuai.xi
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi if( i == NSK2_CMCHANNEL_NUM ) // the pid is not added.....
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi NSK_ERROR(("can't not find match pid filter\n"));
323*53ee8cc1Swenshuai.xi return FALSE;
324*53ee8cc1Swenshuai.xi }
325*53ee8cc1Swenshuai.xi
326*53ee8cc1Swenshuai.xi u32FltID = i;
327*53ee8cc1Swenshuai.xi
328*53ee8cc1Swenshuai.xi for( j=0; j<NSK2_CMCHANNEL_NUM ; j++)
329*53ee8cc1Swenshuai.xi {
330*53ee8cc1Swenshuai.xi if( (_KeepCaPidProxy[xconn][j].EsPid == es_pid) && (_KeepCaPidProxy[xconn][j].IsUsed == TRUE))
331*53ee8cc1Swenshuai.xi break;
332*53ee8cc1Swenshuai.xi }
333*53ee8cc1Swenshuai.xi
334*53ee8cc1Swenshuai.xi if( j == NSK2_CMCHANNEL_NUM ) // the CA PID Proxy is already remove this proxy, almost means already disconnect dscmb
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi NSK_TRACE(("can't find match pid proxy\n"));
337*53ee8cc1Swenshuai.xi discon_flag = FALSE;
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi }
340*53ee8cc1Swenshuai.xi
341*53ee8cc1Swenshuai.xi if(TRUE == discon_flag)
342*53ee8cc1Swenshuai.xi {
343*53ee8cc1Swenshuai.xi u32DscmbId = _KeepCaPidProxy[xconn][j].DscmbId;
344*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltDisconnectFltId(0, u32DscmbId, u32FltID);
345*53ee8cc1Swenshuai.xi }
346*53ee8cc1Swenshuai.xi
347*53ee8cc1Swenshuai.xi
348*53ee8cc1Swenshuai.xi //MApi_NSK2_DTV_ClosePidNo(u32FltID);
349*53ee8cc1Swenshuai.xi
350*53ee8cc1Swenshuai.xi _u32KeepPidByFltId[xconn][u32FltID] = DefaultPID;
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
353*53ee8cc1Swenshuai.xi
354*53ee8cc1Swenshuai.xi return TRUE;
355*53ee8cc1Swenshuai.xi }
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi /*****************************************************************************\
358*53ee8cc1Swenshuai.xi \ NSK2HDI device related functions
359*53ee8cc1Swenshuai.xi \*****************************************************************************/
360*53ee8cc1Swenshuai.xi
361*53ee8cc1Swenshuai.xi /*****************************************************************************\
362*53ee8cc1Swenshuai.xi \ CA SoC Group device
363*53ee8cc1Swenshuai.xi \*****************************************************************************/
364*53ee8cc1Swenshuai.xi
NSKHDI_CaSoCGroupDevice_Open(NSK2HDI_DEVICE_ID CaSoCGroup_ID,NSK2HDI_HANDLE * CaSoCGroup_handle)365*53ee8cc1Swenshuai.xi
366*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaSoCGroupDevice_Open (NSK2HDI_DEVICE_ID CaSoCGroup_ID,
367*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *CaSoCGroup_handle)
368*53ee8cc1Swenshuai.xi {
369*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
370*53ee8cc1Swenshuai.xi
371*53ee8cc1Swenshuai.xi NSK_TRACE(("CaSoCGroup_ID = %x\n",CaSoCGroup_ID));
372*53ee8cc1Swenshuai.xi
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi *CaSoCGroup_handle = (NSK2HDI_HANDLE *)&_u32CaSoCGroupHandle;
375*53ee8cc1Swenshuai.xi
376*53ee8cc1Swenshuai.xi //memset(*CaSoCGroup_handle, 0x0 , 4);
377*53ee8cc1Swenshuai.xi
378*53ee8cc1Swenshuai.xi NSK_TRACE(("CaSoCGroup_handle = %p\n",*CaSoCGroup_handle));
379*53ee8cc1Swenshuai.xi
380*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
381*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
382*53ee8cc1Swenshuai.xi }
NSKHDI_CaSoCGroupDevice_Close(NSK2HDI_HANDLE CaSoCGroup_handle)383*53ee8cc1Swenshuai.xi
384*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaSoCGroupDevice_Close (NSK2HDI_HANDLE CaSoCGroup_handle)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
387*53ee8cc1Swenshuai.xi
388*53ee8cc1Swenshuai.xi NSK_TRACE(("CaSoCGroup_handle = %p\n",CaSoCGroup_handle));
389*53ee8cc1Swenshuai.xi
390*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
391*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
392*53ee8cc1Swenshuai.xi }
393*53ee8cc1Swenshuai.xi
NSKHDI_CaSoCGroupDevice_EnumerateChildren(NSK2HDI_HANDLE CaSoCGroup_handle,NDS_ULONG * child_device_num,NSK2HDI_CHILD_DEVICE * child_device)394*53ee8cc1Swenshuai.xi
395*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaSoCGroupDevice_EnumerateChildren( NSK2HDI_HANDLE CaSoCGroup_handle,
396*53ee8cc1Swenshuai.xi NDS_ULONG *child_device_num,
397*53ee8cc1Swenshuai.xi NSK2HDI_CHILD_DEVICE *child_device)
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
400*53ee8cc1Swenshuai.xi NSK_TRACE(("CaSoCGroup_handle = %p\n",CaSoCGroup_handle));
401*53ee8cc1Swenshuai.xi //#define NSK2HDI_OTP_DEVICE_TYPE 0x00000002U /*!< @brief OTP device */
402*53ee8cc1Swenshuai.xi //#define NSK2HDI_NSK_DEVICE_TYPE 0x00000003U /*!< @brief NSK device */
403*53ee8cc1Swenshuai.xi //#define NSK2HDI_CMCHANNEL_TABLE_DEVICE_TYPE 0x00000004U /*!< @brief CM Channel Table device */
404*53ee8cc1Swenshuai.xi //#define NSK2HDI_M2MTABLE_DEVICE_TYPE 0x00000008U /*!< @brief M2M Table device */
405*53ee8cc1Swenshuai.xi
406*53ee8cc1Swenshuai.xi NSK_TRACE(("child_device_num = %x\n",*child_device_num));
407*53ee8cc1Swenshuai.xi
408*53ee8cc1Swenshuai.xi if(child_device == NULL)
409*53ee8cc1Swenshuai.xi {
410*53ee8cc1Swenshuai.xi //should fill the number of child device...
411*53ee8cc1Swenshuai.xi *child_device_num = 4;
412*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
413*53ee8cc1Swenshuai.xi }
414*53ee8cc1Swenshuai.xi
415*53ee8cc1Swenshuai.xi *child_device_num = 4;
416*53ee8cc1Swenshuai.xi
417*53ee8cc1Swenshuai.xi child_device[0].device_id = 0x3333;
418*53ee8cc1Swenshuai.xi child_device[0].device_type= NSK2HDI_NSK_DEVICE_TYPE;
419*53ee8cc1Swenshuai.xi child_device[1].device_id = 0x4444;
420*53ee8cc1Swenshuai.xi child_device[1].device_type= NSK2HDI_CMCHANNEL_TABLE_DEVICE_TYPE;
421*53ee8cc1Swenshuai.xi child_device[2].device_id = 0x2222;
422*53ee8cc1Swenshuai.xi child_device[2].device_type= NSK2HDI_OTP_DEVICE_TYPE;
423*53ee8cc1Swenshuai.xi child_device[3].device_id = 0x8888;
424*53ee8cc1Swenshuai.xi child_device[3].device_type= NSK2HDI_M2MTABLE_DEVICE_TYPE;
425*53ee8cc1Swenshuai.xi
426*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
427*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
428*53ee8cc1Swenshuai.xi }
NSKHDI_CaSoCGroupDevice_RegisterEnumerationChangeCB(NSK2HDI_HANDLE CaSoCGroup_handle,HDINSK2_ENUMERATION_CHANGE_CB_FN * cb_routine,void * cookie)429*53ee8cc1Swenshuai.xi
430*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaSoCGroupDevice_RegisterEnumerationChangeCB (NSK2HDI_HANDLE CaSoCGroup_handle,
431*53ee8cc1Swenshuai.xi HDINSK2_ENUMERATION_CHANGE_CB_FN *cb_routine,
432*53ee8cc1Swenshuai.xi void *cookie)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
437*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
438*53ee8cc1Swenshuai.xi }
439*53ee8cc1Swenshuai.xi
440*53ee8cc1Swenshuai.xi
441*53ee8cc1Swenshuai.xi
442*53ee8cc1Swenshuai.xi /*****************************************************************************\
443*53ee8cc1Swenshuai.xi \ Content Module - Table device
444*53ee8cc1Swenshuai.xi \*****************************************************************************/
445*53ee8cc1Swenshuai.xi
446*53ee8cc1Swenshuai.xi
NSKHDI_CmChannelTable_Open(NSK2HDI_DEVICE_ID CmChannelTable_ID,NSK2HDI_HANDLE * CmChannelTable_handle)447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelTable_Open (NSK2HDI_DEVICE_ID CmChannelTable_ID,
449*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *CmChannelTable_handle)
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
452*53ee8cc1Swenshuai.xi
453*53ee8cc1Swenshuai.xi if(CmChannelTableInfo.alloc == TRUE)
454*53ee8cc1Swenshuai.xi {
455*53ee8cc1Swenshuai.xi NSK_ERROR(("CmChannelTable is already open\n"));
456*53ee8cc1Swenshuai.xi }
457*53ee8cc1Swenshuai.xi
458*53ee8cc1Swenshuai.xi CmChannelTableInfo.CmChTable_ID = CmChannelTable_ID;
459*53ee8cc1Swenshuai.xi CmChannelTableInfo.alloc = TRUE;
460*53ee8cc1Swenshuai.xi CmChannelTableInfo.handle_id = 1;
461*53ee8cc1Swenshuai.xi
462*53ee8cc1Swenshuai.xi *CmChannelTable_handle = (NSK2HDI_HANDLE *)&CmChannelTableInfo.handle_id;
463*53ee8cc1Swenshuai.xi
464*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChannelTable_ID = 0x%x, CmChannelTable_handle = 0x%08x\n",CmChannelTable_ID,CmChannelTableInfo.handle_id));
465*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
466*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
467*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelTable_Close(NSK2HDI_HANDLE CmChannelTable_handle)468*53ee8cc1Swenshuai.xi
469*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelTable_Close (NSK2HDI_HANDLE CmChannelTable_handle)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
472*53ee8cc1Swenshuai.xi MS_U32 u32Handle = NSKHDI_GetHandle(CmChannelTable_handle);
473*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChannelTable_handle = 0x%08x\n",u32Handle));
474*53ee8cc1Swenshuai.xi
475*53ee8cc1Swenshuai.xi CmChannelTableInfo.alloc = FALSE;
476*53ee8cc1Swenshuai.xi
477*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
478*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
479*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelTable_EnumerateChildren(NSK2HDI_HANDLE CmChannelTable_handle,NDS_ULONG * child_device_num,NSK2HDI_CHILD_DEVICE * child_device)480*53ee8cc1Swenshuai.xi
481*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelTable_EnumerateChildren( NSK2HDI_HANDLE CmChannelTable_handle,
482*53ee8cc1Swenshuai.xi NDS_ULONG *child_device_num,
483*53ee8cc1Swenshuai.xi NSK2HDI_CHILD_DEVICE *child_device)
484*53ee8cc1Swenshuai.xi {
485*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
486*53ee8cc1Swenshuai.xi MS_U32 cm_ch_num;
487*53ee8cc1Swenshuai.xi
488*53ee8cc1Swenshuai.xi if(child_device == NULL)
489*53ee8cc1Swenshuai.xi {
490*53ee8cc1Swenshuai.xi //should fill the number of child device...
491*53ee8cc1Swenshuai.xi *child_device_num = MDrv_NSK2_CMChannelNum();
492*53ee8cc1Swenshuai.xi NSK_TRACE(("return child_device_num = %x\n",*child_device_num));
493*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
494*53ee8cc1Swenshuai.xi }
495*53ee8cc1Swenshuai.xi *child_device_num = MDrv_NSK2_CMChannelNum();
496*53ee8cc1Swenshuai.xi
497*53ee8cc1Swenshuai.xi NSK_TRACE(("child_device_num = %x\n",*child_device_num));
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi cm_ch_num = *child_device_num;
500*53ee8cc1Swenshuai.xi
501*53ee8cc1Swenshuai.xi if(cm_ch_num>2)
502*53ee8cc1Swenshuai.xi {
503*53ee8cc1Swenshuai.xi NSK_ERROR(("cm_ch_num>2\n"));
504*53ee8cc1Swenshuai.xi }
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi child_device[0].device_id = CMChannel_ID1;
507*53ee8cc1Swenshuai.xi child_device[0].device_type = NSK2HDI_CMCHANNEL_GROUP_DEVICE_TYPE;
508*53ee8cc1Swenshuai.xi
509*53ee8cc1Swenshuai.xi if(cm_ch_num == 2)
510*53ee8cc1Swenshuai.xi {
511*53ee8cc1Swenshuai.xi child_device[1].device_id = CMChannel_ID2;
512*53ee8cc1Swenshuai.xi child_device[1].device_type = NSK2HDI_CMCHANNEL_GROUP_DEVICE_TYPE;
513*53ee8cc1Swenshuai.xi }
514*53ee8cc1Swenshuai.xi
515*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
516*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
517*53ee8cc1Swenshuai.xi }
518*53ee8cc1Swenshuai.xi
519*53ee8cc1Swenshuai.xi /*****************************************************************************\
520*53ee8cc1Swenshuai.xi \ Content Module - Group device
521*53ee8cc1Swenshuai.xi \*****************************************************************************/
522*53ee8cc1Swenshuai.xi
NSKHDI_CmChannelGroup_Open(NSK2HDI_DEVICE_ID CmChannelGroup_ID,NSK2HDI_HANDLE * CmChannelGroup_handle)523*53ee8cc1Swenshuai.xi
524*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelGroup_Open (NSK2HDI_DEVICE_ID CmChannelGroup_ID,
525*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *CmChannelGroup_handle)
526*53ee8cc1Swenshuai.xi {
527*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
528*53ee8cc1Swenshuai.xi CmChannelGroup_t *pGroup;
529*53ee8cc1Swenshuai.xi
530*53ee8cc1Swenshuai.xi //check CmChannel Group ID.
531*53ee8cc1Swenshuai.xi
532*53ee8cc1Swenshuai.xi if( (CmChannelGroup_ID != CMChannel_ID1) && (CmChannelGroup_ID != CMChannel_ID2) )
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi NSK_ERROR(("CmChannelGroup_ID is wrong\n"));
535*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
536*53ee8cc1Swenshuai.xi }
537*53ee8cc1Swenshuai.xi
538*53ee8cc1Swenshuai.xi pGroup = MApi_NSK2_AllocateMemory(sizeof(CmChannelGroup_t), TRUE);
539*53ee8cc1Swenshuai.xi if(NULL == pGroup)
540*53ee8cc1Swenshuai.xi {
541*53ee8cc1Swenshuai.xi NSK_ERROR(("cm channel group allocate buffer error\n"));
542*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi
545*53ee8cc1Swenshuai.xi memset(pGroup, 0x0, sizeof(CmChannelGroup_t));
546*53ee8cc1Swenshuai.xi
547*53ee8cc1Swenshuai.xi pGroup->CmChGroup_ID = CmChannelGroup_ID;
548*53ee8cc1Swenshuai.xi
549*53ee8cc1Swenshuai.xi *CmChannelGroup_handle = (NSK2HDI_HANDLE*)pGroup;
550*53ee8cc1Swenshuai.xi
551*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChannelGroup_ID = %x, CmChannelGroup_handle = %p\n",CmChannelGroup_ID,pGroup));
552*53ee8cc1Swenshuai.xi
553*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
554*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
555*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelGroup_Close(NSK2HDI_HANDLE CmChannelGroup_handle)556*53ee8cc1Swenshuai.xi
557*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelGroup_Close (NSK2HDI_HANDLE CmChannelGroup_handle)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
560*53ee8cc1Swenshuai.xi MS_BOOL bFlag;
561*53ee8cc1Swenshuai.xi
562*53ee8cc1Swenshuai.xi bFlag = MApi_NSK2_FreeMemory(CmChannelGroup_handle, TRUE);
563*53ee8cc1Swenshuai.xi
564*53ee8cc1Swenshuai.xi if(bFlag == FALSE)
565*53ee8cc1Swenshuai.xi {
566*53ee8cc1Swenshuai.xi NSK_ERROR(("free memory error\n"));
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi
569*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
570*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
571*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelGroup_GetProperties(NSK2HDI_HANDLE CmChannelGroup_handle,NDS_ULONG request_id,NDS_ULONG * desc_size,NDS_UBYTE * desc)572*53ee8cc1Swenshuai.xi
573*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelGroup_GetProperties( NSK2HDI_HANDLE CmChannelGroup_handle,
574*53ee8cc1Swenshuai.xi NDS_ULONG request_id,
575*53ee8cc1Swenshuai.xi NDS_ULONG *desc_size,
576*53ee8cc1Swenshuai.xi NDS_UBYTE *desc)
577*53ee8cc1Swenshuai.xi {
578*53ee8cc1Swenshuai.xi CmChannelGroup_t *pGroup = (CmChannelGroup_t *)CmChannelGroup_handle;
579*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
580*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChGroup_ID = %x, request_id = %x, desc_size = %x\n",pGroup->CmChGroup_ID, request_id, *desc_size));
581*53ee8cc1Swenshuai.xi
582*53ee8cc1Swenshuai.xi
583*53ee8cc1Swenshuai.xi if(NSK2HDI_CMCHANNELGROUP_READ_ALL_DESCRIPTORS_REQUEST != request_id)
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi NSK_ERROR(("error request_id\n"));
586*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
587*53ee8cc1Swenshuai.xi }
588*53ee8cc1Swenshuai.xi
589*53ee8cc1Swenshuai.xi
590*53ee8cc1Swenshuai.xi if(desc == NULL)
591*53ee8cc1Swenshuai.xi {
592*53ee8cc1Swenshuai.xi MDrv_NSK2_GetCMProperties((MS_U32*)desc_size, (MS_U8*)desc);
593*53ee8cc1Swenshuai.xi NSK_TRACE(("return desc_size = 0x%08x\n",(MS_U32)*desc_size));
594*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
595*53ee8cc1Swenshuai.xi }
596*53ee8cc1Swenshuai.xi
597*53ee8cc1Swenshuai.xi if(*desc_size == 0)
598*53ee8cc1Swenshuai.xi {
599*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi
602*53ee8cc1Swenshuai.xi MDrv_NSK2_GetCMProperties((MS_U32*)desc_size, (MS_U8*)desc);
603*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
604*53ee8cc1Swenshuai.xi
605*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
606*53ee8cc1Swenshuai.xi }
607*53ee8cc1Swenshuai.xi
608*53ee8cc1Swenshuai.xi /*****************************************************************************\
609*53ee8cc1Swenshuai.xi \ Content Module - Device
610*53ee8cc1Swenshuai.xi \*****************************************************************************/
611*53ee8cc1Swenshuai.xi
NSKHDI_CmChannelDevice_Open(NSK2HDI_DEVICE_ID CmChannelGroup_ID,NSK2HDI_HANDLE * CmChannele_handle)612*53ee8cc1Swenshuai.xi
613*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_Open (NSK2HDI_DEVICE_ID CmChannelGroup_ID,
614*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *CmChannele_handle)
615*53ee8cc1Swenshuai.xi {
616*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
617*53ee8cc1Swenshuai.xi
618*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
619*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChannelGroup_ID = 0x%08x\n",(MS_U32)CmChannelGroup_ID));
620*53ee8cc1Swenshuai.xi
621*53ee8cc1Swenshuai.xi cm_handle = MApi_NSK2_AllocateMemory(sizeof(NSK2_CMChannel_Info), TRUE);
622*53ee8cc1Swenshuai.xi if(NULL == cm_handle)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi NSK_ERROR(("cm handle allocate buffer error\n"));
625*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
626*53ee8cc1Swenshuai.xi }
627*53ee8cc1Swenshuai.xi
628*53ee8cc1Swenshuai.xi memset(cm_handle, 0x0, sizeof(NSK2_CMChannel_Info));
629*53ee8cc1Swenshuai.xi
630*53ee8cc1Swenshuai.xi cm_handle->dsc_id = cm_handle->CmChCookie.u32DscmbId = MDrv_DSCMB2_FltAlloc_Ex(0,E_DSCMB_FLT_3_KEYS);
631*53ee8cc1Swenshuai.xi
632*53ee8cc1Swenshuai.xi NSK_TRACE(("CmChannele_handle = %p, CmChannelGroup_ID = 0x%08x\n",cm_handle,(MS_U32)CmChannelGroup_ID));
633*53ee8cc1Swenshuai.xi NSK_TRACE(("dsc_id = 0x%08x\n",cm_handle->dsc_id));
634*53ee8cc1Swenshuai.xi
635*53ee8cc1Swenshuai.xi if(DRV_DSCMB_FLT_NULL == cm_handle->dsc_id)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi NSK_ERROR(("dscmb alloc flt fail\n"));
638*53ee8cc1Swenshuai.xi *CmChannele_handle = NSK2HDI_ILLEGAL_HANDLE;
639*53ee8cc1Swenshuai.xi MApi_NSK2_FreeMemory(cm_handle, TRUE);
640*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
641*53ee8cc1Swenshuai.xi }
642*53ee8cc1Swenshuai.xi
643*53ee8cc1Swenshuai.xi *CmChannele_handle = cm_handle;
644*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit, CmChannelDevice_handle = %p\n", *CmChannele_handle));
645*53ee8cc1Swenshuai.xi
646*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
647*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelDevice_Close(NSK2HDI_HANDLE CmChannele_handle)648*53ee8cc1Swenshuai.xi
649*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_Close (NSK2HDI_HANDLE CmChannele_handle)
650*53ee8cc1Swenshuai.xi {
651*53ee8cc1Swenshuai.xi
652*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter CmChannelDevice_handle = %p\n",CmChannele_handle));
653*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi if(NULL == CmChannele_handle)
656*53ee8cc1Swenshuai.xi {
657*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
658*53ee8cc1Swenshuai.xi }
659*53ee8cc1Swenshuai.xi
660*53ee8cc1Swenshuai.xi cm_handle = (NSK2_CMChannel_Info *)CmChannele_handle;
661*53ee8cc1Swenshuai.xi
662*53ee8cc1Swenshuai.xi NSK_TRACE(("dsc_id = %x\n",cm_handle->dsc_id));
663*53ee8cc1Swenshuai.xi
664*53ee8cc1Swenshuai.xi if(cm_handle->CmChCookie.bConnect == TRUE)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltDisconnectFltId(0,cm_handle->dsc_id,cm_handle->CmChCookie.PidSlotID);
667*53ee8cc1Swenshuai.xi }
668*53ee8cc1Swenshuai.xi //should stop...de-allocate here.
669*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltFree(0, cm_handle->dsc_id); //the 0 magic value, maybe need to re-fine....
670*53ee8cc1Swenshuai.xi
671*53ee8cc1Swenshuai.xi memset(cm_handle, 0x0, sizeof(NSK2_CMChannel_Info));
672*53ee8cc1Swenshuai.xi
673*53ee8cc1Swenshuai.xi MApi_NSK2_FreeMemory(cm_handle, TRUE);
674*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
675*53ee8cc1Swenshuai.xi
676*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
677*53ee8cc1Swenshuai.xi }
678*53ee8cc1Swenshuai.xi
NSKHDI_CmChannel_SetWriteESA(NDS_UBYTE ESA_Algo,MS_U32 PidSlotID)679*53ee8cc1Swenshuai.xi
680*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannel_SetWriteESA(NDS_UBYTE ESA_Algo, MS_U32 PidSlotID)
681*53ee8cc1Swenshuai.xi {
682*53ee8cc1Swenshuai.xi NDS_UBYTE ESASelect = 0, ESASubSelect = 0;
683*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter, ESA_Algo = %d, FltID = 0x%08x\n", ESA_Algo, PidSlotID));
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi if(ESA_Algo == NSK2HDI_SPROFILE_DVB_CSA2)
686*53ee8cc1Swenshuai.xi {
687*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_DVBCSA2;
688*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_NONE;
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_DVB_CSA_CONFORMANCE)
691*53ee8cc1Swenshuai.xi {
692*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_DVBCSA2_CONF;
693*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_NONE;
694*53ee8cc1Swenshuai.xi }
695*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_DVB_CSA3)
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_DVBCSA3;
698*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_NONE;
699*53ee8cc1Swenshuai.xi }
700*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_CPCM_LSA_MDI_CBC)
701*53ee8cc1Swenshuai.xi {
702*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_AES;
703*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_MDI_CBC;
704*53ee8cc1Swenshuai.xi }
705*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_CPCM_LSA_MDI_RCBC)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi #if 1
708*53ee8cc1Swenshuai.xi NSK_ERROR(("NSK2HDI_SPROFILE_CPCM_LSA_MDI_RCBC NOT SUPPORT\n"));
709*53ee8cc1Swenshuai.xi #else
710*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_AES;
711*53ee8cc1Swenshuai.xi ESASubSelect = DSCMB_SUBALGO_MDI_RCBC;
712*53ee8cc1Swenshuai.xi
713*53ee8cc1Swenshuai.xi #endif
714*53ee8cc1Swenshuai.xi }
715*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_CPCM_LSA_MDD_CBC)
716*53ee8cc1Swenshuai.xi {
717*53ee8cc1Swenshuai.xi #if 1
718*53ee8cc1Swenshuai.xi NSK_ERROR(("NSK2HDI_SPROFILE_CPCM_LSA_MDD_CBC NOT SUPPORT\n"));
719*53ee8cc1Swenshuai.xi #else
720*53ee8cc1Swenshuai.xi ESASelect = DSCMB_ALGOTYPE_AES;
721*53ee8cc1Swenshuai.xi ESASubSelect = DSCMB_SUBALGO_MDD_CBC;
722*53ee8cc1Swenshuai.xi
723*53ee8cc1Swenshuai.xi #endif
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_CPCM_LSA_MDD_RCBC)
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi #if 1
728*53ee8cc1Swenshuai.xi NSK_ERROR(("NSK2HDI_SPROFILE_CPCM_LSA_MDD_RCBC NOT SUPPORT\n"));
729*53ee8cc1Swenshuai.xi #else
730*53ee8cc1Swenshuai.xi ESASelect = DSCMB_ALGOTYPE_AES;
731*53ee8cc1Swenshuai.xi ESASubSelect = DSCMB_SUBALGO_MDD_RCBC;
732*53ee8cc1Swenshuai.xi #endif
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_SYNAMEDIA_AES)
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_AES;
737*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_SYNAMEDIA_AES;
738*53ee8cc1Swenshuai.xi }
739*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_AES_ECB_CLEARTAIL)
740*53ee8cc1Swenshuai.xi {
741*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_AES;
742*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_AES_ECB_CLR;
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_CIPLUS_AES)
745*53ee8cc1Swenshuai.xi {
746*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_AES;
747*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_CIPLUS_AES;
748*53ee8cc1Swenshuai.xi }
749*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_SCTE41_DES)
750*53ee8cc1Swenshuai.xi {
751*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_DES;
752*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_SCTE41;
753*53ee8cc1Swenshuai.xi }
754*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_SCTE52_DES)
755*53ee8cc1Swenshuai.xi {
756*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_DES;
757*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_SCTE52;
758*53ee8cc1Swenshuai.xi }
759*53ee8cc1Swenshuai.xi else if (ESA_Algo == NSK2HDI_SPROFILE_TDES_ECB_CLEARTAIL)
760*53ee8cc1Swenshuai.xi {
761*53ee8cc1Swenshuai.xi ESASelect = ESA_SELECT_TDES;
762*53ee8cc1Swenshuai.xi ESASubSelect = ESASUB_SELECT_NONE;
763*53ee8cc1Swenshuai.xi }
764*53ee8cc1Swenshuai.xi else
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi NSK_TRACE(("Not implement\n"));
767*53ee8cc1Swenshuai.xi }
768*53ee8cc1Swenshuai.xi
769*53ee8cc1Swenshuai.xi MDrv_NSK2_WriteESA(ESASelect, ESASubSelect, PidSlotID);
770*53ee8cc1Swenshuai.xi
771*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
772*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
773*53ee8cc1Swenshuai.xi }
774*53ee8cc1Swenshuai.xi
NSKHDI_CmChannel_ParseDesc(NDS_ULONG desc_size,const NDS_UBYTE * pdesc,CmChDesc_Parser_t * pDescParser)775*53ee8cc1Swenshuai.xi
776*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannel_ParseDesc(NDS_ULONG desc_size,const NDS_UBYTE *pdesc, CmChDesc_Parser_t *pDescParser)
777*53ee8cc1Swenshuai.xi {
778*53ee8cc1Swenshuai.xi NDS_ULONG size = desc_size;
779*53ee8cc1Swenshuai.xi NDS_UBYTE *pParser_buf = (NDS_UBYTE*)pdesc;
780*53ee8cc1Swenshuai.xi NDS_UBYTE TagSwitch, TagLength;
781*53ee8cc1Swenshuai.xi
782*53ee8cc1Swenshuai.xi NSK_TRACE(("desc_size = %x, pdesc = %x\n",desc_size, (NDS_ULONG)pdesc));
783*53ee8cc1Swenshuai.xi while(size>0)
784*53ee8cc1Swenshuai.xi {
785*53ee8cc1Swenshuai.xi NSK_TRACE(("desc buf = %x\n",*pParser_buf++));
786*53ee8cc1Swenshuai.xi size --;
787*53ee8cc1Swenshuai.xi }
788*53ee8cc1Swenshuai.xi
789*53ee8cc1Swenshuai.xi size = desc_size;
790*53ee8cc1Swenshuai.xi pParser_buf = (NDS_UBYTE*)pdesc;
791*53ee8cc1Swenshuai.xi
792*53ee8cc1Swenshuai.xi while(size>=3)
793*53ee8cc1Swenshuai.xi {
794*53ee8cc1Swenshuai.xi TagSwitch = pParser_buf[0];
795*53ee8cc1Swenshuai.xi TagLength = pParser_buf[1];
796*53ee8cc1Swenshuai.xi
797*53ee8cc1Swenshuai.xi NSK_TRACE(("TagSwitch = %x, TagLength = %x\n",TagSwitch,TagLength));
798*53ee8cc1Swenshuai.xi
799*53ee8cc1Swenshuai.xi switch(TagSwitch)
800*53ee8cc1Swenshuai.xi {
801*53ee8cc1Swenshuai.xi case NSK2HDI_CMCHANNEL_IV1_DESC_TAG:
802*53ee8cc1Swenshuai.xi NSK_TRACE(("CMCHANNEL_IV1_DESC_TAG length = %x\n",TagLength));
803*53ee8cc1Swenshuai.xi memcpy(pDescParser->IV1, &pParser_buf[2], TagLength);
804*53ee8cc1Swenshuai.xi pDescParser->IV1_Enable = TRUE;
805*53ee8cc1Swenshuai.xi break;
806*53ee8cc1Swenshuai.xi
807*53ee8cc1Swenshuai.xi case NSK2HDI_CMCHANNEL_IV2_DESC_TAG:
808*53ee8cc1Swenshuai.xi NSK_TRACE(("CMCHANNEL_IV2_DESC_TAG length = %x\n",TagLength));
809*53ee8cc1Swenshuai.xi memcpy(pDescParser->IV2, &pParser_buf[2], TagLength);
810*53ee8cc1Swenshuai.xi pDescParser->IV2_Enable = TRUE;
811*53ee8cc1Swenshuai.xi break;
812*53ee8cc1Swenshuai.xi
813*53ee8cc1Swenshuai.xi case NSK2HDI_CMCHANNEL_ALGORITHM_DESC_TAG:
814*53ee8cc1Swenshuai.xi pDescParser->Algorithm = pParser_buf[2];
815*53ee8cc1Swenshuai.xi NSK_TRACE(("ALGORITHM_DESC_TAG, Algorithm = %x\n",pDescParser->Algorithm));
816*53ee8cc1Swenshuai.xi break;
817*53ee8cc1Swenshuai.xi
818*53ee8cc1Swenshuai.xi case NSK2HDI_CMCHANNEL_IV_SIGNALING_DESC_TAG:
819*53ee8cc1Swenshuai.xi NSK_TRACE(("IV_SIGNALING_DESC_TAG iv_signaling = %x\n", pParser_buf[3]));
820*53ee8cc1Swenshuai.xi pDescParser->IV_Mode = pParser_buf[3];
821*53ee8cc1Swenshuai.xi if(pParser_buf[3] == NSK2HDI_CMCHANNEL_IV_AT_CONFIG_MODE)
822*53ee8cc1Swenshuai.xi {
823*53ee8cc1Swenshuai.xi NSK_TRACE(("NSK2HDI_CMCHANNEL_IV_AT_CONFIG_MODE\n"));
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi else if(pParser_buf[3] == NSK2HDI_CMCHANNEL_IV_NOT_SET_MODE)
826*53ee8cc1Swenshuai.xi {
827*53ee8cc1Swenshuai.xi NSK_TRACE(("NSK2HDI_CMCHANNEL_IV_NOT_SET_MODE\n"));
828*53ee8cc1Swenshuai.xi }
829*53ee8cc1Swenshuai.xi else if(pParser_buf[3] == NSK2HDI_CMCHANNEL_IV_AT_WRITEKEY_MODE)
830*53ee8cc1Swenshuai.xi {
831*53ee8cc1Swenshuai.xi NSK_TRACE(("NSK2HDI_CMCHANNEL_IV_AT_WRITEKEY_MODE\n"));
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi break;
834*53ee8cc1Swenshuai.xi
835*53ee8cc1Swenshuai.xi default:
836*53ee8cc1Swenshuai.xi NSK_ERROR(("unknown desc tag\n"));
837*53ee8cc1Swenshuai.xi break;
838*53ee8cc1Swenshuai.xi }
839*53ee8cc1Swenshuai.xi
840*53ee8cc1Swenshuai.xi size -= (TagLength+2);
841*53ee8cc1Swenshuai.xi pParser_buf += (TagLength+2);
842*53ee8cc1Swenshuai.xi }
843*53ee8cc1Swenshuai.xi
844*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi
NSKHDI_CmChannelDevice_Configure(NSK2HDI_HANDLE CmChannele_handle,NDS_ULONG lda_desc_size,const NDS_UBYTE * lda_desc,NDS_ULONG esa_desc_size,const NDS_UBYTE * esa_desc,NDS_ULONG lsa_desc_size,const NDS_UBYTE * lsa_desc)847*53ee8cc1Swenshuai.xi
848*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_Configure ( NSK2HDI_HANDLE CmChannele_handle,
849*53ee8cc1Swenshuai.xi NDS_ULONG lda_desc_size,
850*53ee8cc1Swenshuai.xi const NDS_UBYTE *lda_desc,
851*53ee8cc1Swenshuai.xi NDS_ULONG esa_desc_size,
852*53ee8cc1Swenshuai.xi const NDS_UBYTE *esa_desc,
853*53ee8cc1Swenshuai.xi NDS_ULONG lsa_desc_size,
854*53ee8cc1Swenshuai.xi const NDS_UBYTE *lsa_desc)
855*53ee8cc1Swenshuai.xi {
856*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
857*53ee8cc1Swenshuai.xi CmChannel_IV1_Desc_t ESA_IV1_Payload;
858*53ee8cc1Swenshuai.xi CmChannel_IV2_Desc_t ESA_IV2_Payload;
859*53ee8cc1Swenshuai.xi CmChDesc_Parser_t *pCmDescParser;
860*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
861*53ee8cc1Swenshuai.xi
862*53ee8cc1Swenshuai.xi if(NULL == CmChannele_handle)
863*53ee8cc1Swenshuai.xi {
864*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
865*53ee8cc1Swenshuai.xi }
866*53ee8cc1Swenshuai.xi
867*53ee8cc1Swenshuai.xi cm_handle = (NSK2_CMChannel_Info *)CmChannele_handle;
868*53ee8cc1Swenshuai.xi pCmDescParser = (CmChDesc_Parser_t *) &cm_handle->CmChDesc[0];
869*53ee8cc1Swenshuai.xi
870*53ee8cc1Swenshuai.xi memset(&ESA_IV1_Payload, 0x0, sizeof(CmChannel_IV1_Desc_t));
871*53ee8cc1Swenshuai.xi memset(&ESA_IV2_Payload, 0x0, sizeof(CmChannel_IV2_Desc_t));
872*53ee8cc1Swenshuai.xi
873*53ee8cc1Swenshuai.xi
874*53ee8cc1Swenshuai.xi NSK_TRACE(("lda_desc_size = %x, esa_desc_size = %x, lsa_desc_size = %x\n",lda_desc_size,esa_desc_size,lsa_desc_size));
875*53ee8cc1Swenshuai.xi
876*53ee8cc1Swenshuai.xi if( (lda_desc!=NULL) && (lda_desc_size!=0) )
877*53ee8cc1Swenshuai.xi {
878*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(lda_desc_size,lda_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_LDA_DESC]);
879*53ee8cc1Swenshuai.xi }
880*53ee8cc1Swenshuai.xi else
881*53ee8cc1Swenshuai.xi {
882*53ee8cc1Swenshuai.xi //NSK_TRACE(("lda_desc_size = 0\n"));
883*53ee8cc1Swenshuai.xi }
884*53ee8cc1Swenshuai.xi
885*53ee8cc1Swenshuai.xi NSK_TRACE(("esa_desc_size = %x\n",esa_desc_size));
886*53ee8cc1Swenshuai.xi if( (esa_desc!=NULL) && (esa_desc_size!=0) )
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(esa_desc_size,esa_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_ESA_DESC]);
889*53ee8cc1Swenshuai.xi //NSKHDI_CmChannel_SetWriteESA(pCmDescParser[CMCHANNEL_ESA_DESC].Algorithm, PidSlotID);
890*53ee8cc1Swenshuai.xi }
891*53ee8cc1Swenshuai.xi else
892*53ee8cc1Swenshuai.xi {
893*53ee8cc1Swenshuai.xi //NSK_TRACE(("esa_desc_size = 0\n"));
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi
896*53ee8cc1Swenshuai.xi NSK_TRACE(("lsa_desc_size = %x\n",lsa_desc_size));
897*53ee8cc1Swenshuai.xi if( (lsa_desc!=NULL) && (lsa_desc_size!=0) )
898*53ee8cc1Swenshuai.xi {
899*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(lsa_desc_size,lsa_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_LSA_DESC]);
900*53ee8cc1Swenshuai.xi }
901*53ee8cc1Swenshuai.xi else
902*53ee8cc1Swenshuai.xi {
903*53ee8cc1Swenshuai.xi //NSK_TRACE(("lsa_desc_size = 0\n"));
904*53ee8cc1Swenshuai.xi }
905*53ee8cc1Swenshuai.xi
906*53ee8cc1Swenshuai.xi memcpy(&cm_handle->CmChCookie.CmChDesc[0], pCmDescParser, sizeof(CmChDesc_Parser_t)*3 );
907*53ee8cc1Swenshuai.xi
908*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
909*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
910*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelDevice_InvalidateKeys(NSK2HDI_HANDLE CmChannelDevice_handle)911*53ee8cc1Swenshuai.xi
912*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_InvalidateKeys (NSK2HDI_HANDLE CmChannelDevice_handle)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter CmChannelDevice_handle = %p\n",CmChannelDevice_handle));
915*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId;
916*53ee8cc1Swenshuai.xi
917*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
918*53ee8cc1Swenshuai.xi
919*53ee8cc1Swenshuai.xi if(NULL == CmChannelDevice_handle)
920*53ee8cc1Swenshuai.xi {
921*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
922*53ee8cc1Swenshuai.xi }
923*53ee8cc1Swenshuai.xi
924*53ee8cc1Swenshuai.xi cm_handle = (NSK2_CMChannel_Info *)CmChannelDevice_handle;
925*53ee8cc1Swenshuai.xi
926*53ee8cc1Swenshuai.xi
927*53ee8cc1Swenshuai.xi u32DscmbId = cm_handle->dsc_id;
928*53ee8cc1Swenshuai.xi
929*53ee8cc1Swenshuai.xi //if(cm_handle->CmChCookie.bConnect == TRUE)
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi //MDrv_DSCMB2_FltDisconnectFltId(0,u32DscmbId,u32FltId);
932*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltKeyReset(0,u32DscmbId,E_DSCMB_KEY_CLEAR);
933*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltKeyReset(0,u32DscmbId,E_DSCMB_KEY_EVEN);
934*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltKeyReset(0,u32DscmbId,E_DSCMB_KEY_ODD);
935*53ee8cc1Swenshuai.xi }
936*53ee8cc1Swenshuai.xi
937*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
938*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
939*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelDevice_WriteTransportKey(NSK2HDI_HANDLE CmChannelDevice_handle,NDS_ULONG scb_in_out_size,NDS_UBYTE * scb_in,NDS_UBYTE * scb_out,NDS_ULONG lda_desc_size,const NDS_UBYTE * lda_desc,NDS_ULONG esa_desc_size,const NDS_UBYTE * esa_desc,NDS_ULONG lsa_desc_size,const NDS_UBYTE * lsa_desc)940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_WriteTransportKey ( NSK2HDI_HANDLE CmChannelDevice_handle,
942*53ee8cc1Swenshuai.xi NDS_ULONG scb_in_out_size,
943*53ee8cc1Swenshuai.xi NDS_UBYTE *scb_in,
944*53ee8cc1Swenshuai.xi NDS_UBYTE *scb_out,
945*53ee8cc1Swenshuai.xi NDS_ULONG lda_desc_size,
946*53ee8cc1Swenshuai.xi const NDS_UBYTE *lda_desc,
947*53ee8cc1Swenshuai.xi NDS_ULONG esa_desc_size,
948*53ee8cc1Swenshuai.xi const NDS_UBYTE *esa_desc,
949*53ee8cc1Swenshuai.xi NDS_ULONG lsa_desc_size,
950*53ee8cc1Swenshuai.xi const NDS_UBYTE *lsa_desc)
951*53ee8cc1Swenshuai.xi {
952*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
953*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter CmChannelDevice_handle = %p\n",CmChannelDevice_handle));
954*53ee8cc1Swenshuai.xi
955*53ee8cc1Swenshuai.xi if(NULL == CmChannelDevice_handle)
956*53ee8cc1Swenshuai.xi {
957*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
958*53ee8cc1Swenshuai.xi }
959*53ee8cc1Swenshuai.xi
960*53ee8cc1Swenshuai.xi cm_handle = (NSK2_CMChannel_Info *)CmChannelDevice_handle;
961*53ee8cc1Swenshuai.xi
962*53ee8cc1Swenshuai.xi NDS_ULONG i = 0;
963*53ee8cc1Swenshuai.xi ESA_Desc_St_t tEsaDesc;
964*53ee8cc1Swenshuai.xi MS_U8 test_key[16];
965*53ee8cc1Swenshuai.xi NDS_UBYTE SCB = 0, SCB_Out = 0;
966*53ee8cc1Swenshuai.xi MS_U32 DscmbID = 0;
967*53ee8cc1Swenshuai.xi NDS_UBYTE CurSCB_In,CurSCB_Out;
968*53ee8cc1Swenshuai.xi
969*53ee8cc1Swenshuai.xi CmChDesc_Parser_t *pCmDescParser;
970*53ee8cc1Swenshuai.xi
971*53ee8cc1Swenshuai.xi NSK_TRACE(("Time of Two Keys = %x\n", (MsOS_GetSystemTime() - _gu32WriteKeyTime) ));
972*53ee8cc1Swenshuai.xi //printf("write key = %d\n",MsOS_GetSystemTime());
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi pCmDescParser = (CmChDesc_Parser_t *) &cm_handle->CmChDesc[0];
975*53ee8cc1Swenshuai.xi
976*53ee8cc1Swenshuai.xi memset(test_key,0x0,16);
977*53ee8cc1Swenshuai.xi memset(&tEsaDesc,0x0,sizeof(ESA_Desc_St_t));
978*53ee8cc1Swenshuai.xi
979*53ee8cc1Swenshuai.xi DscmbID = cm_handle->dsc_id;
980*53ee8cc1Swenshuai.xi NSK_TRACE(("DscmbID = %d\n",DscmbID));
981*53ee8cc1Swenshuai.xi
982*53ee8cc1Swenshuai.xi //this routine is used to cause the NSK chip to copy the keys and control switches
983*53ee8cc1Swenshuai.xi //from the NSK KTE register to the NSK chip key table.
984*53ee8cc1Swenshuai.xi NSK_TRACE(("scb_in_out_size = %x, lda_desc_size = %x\n",scb_in_out_size, lda_desc_size));
985*53ee8cc1Swenshuai.xi NSK_TRACE(("esa_desc_size = %x, lsa_desc_size = %x\n",esa_desc_size, lsa_desc_size));
986*53ee8cc1Swenshuai.xi
987*53ee8cc1Swenshuai.xi //NSK2DBG_KTEValid(1,DscmbID);
988*53ee8cc1Swenshuai.xi NSK_TRACE(("lda_desc_size = %x, esa_desc_size = %x, lsa_desc_size = %x\n",lda_desc_size,esa_desc_size,lsa_desc_size));
989*53ee8cc1Swenshuai.xi
990*53ee8cc1Swenshuai.xi if( (lda_desc!=NULL) && (lda_desc_size!=0) )
991*53ee8cc1Swenshuai.xi {
992*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(lda_desc_size,lda_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_LDA_DESC]);
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi else
995*53ee8cc1Swenshuai.xi {
996*53ee8cc1Swenshuai.xi }
997*53ee8cc1Swenshuai.xi
998*53ee8cc1Swenshuai.xi if( (esa_desc!=NULL) && (esa_desc_size!=0) )
999*53ee8cc1Swenshuai.xi {
1000*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(esa_desc_size,esa_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_ESA_DESC]);
1001*53ee8cc1Swenshuai.xi }
1002*53ee8cc1Swenshuai.xi else
1003*53ee8cc1Swenshuai.xi {
1004*53ee8cc1Swenshuai.xi //NSK_TRACE(("esa_desc_size = 0\n"));
1005*53ee8cc1Swenshuai.xi }
1006*53ee8cc1Swenshuai.xi
1007*53ee8cc1Swenshuai.xi if( (lsa_desc!=NULL) && (lsa_desc_size!=0) )
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi NSKHDI_CmChannel_ParseDesc(lsa_desc_size,lsa_desc,(CmChDesc_Parser_t *)&pCmDescParser[CMCHANNEL_LSA_DESC]);
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi else
1012*53ee8cc1Swenshuai.xi {
1013*53ee8cc1Swenshuai.xi
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi
1016*53ee8cc1Swenshuai.xi
1017*53ee8cc1Swenshuai.xi if(cm_handle->CmChCookie.bWriteESA == FALSE)
1018*53ee8cc1Swenshuai.xi {
1019*53ee8cc1Swenshuai.xi MDrv_NSK21_CfgCmChannel(DscmbID, pCmDescParser[CMCHANNEL_LDA_DESC].Algorithm,
1020*53ee8cc1Swenshuai.xi pCmDescParser[CMCHANNEL_ESA_DESC].Algorithm, pCmDescParser[CMCHANNEL_LSA_DESC].Algorithm, 0);
1021*53ee8cc1Swenshuai.xi }
1022*53ee8cc1Swenshuai.xi
1023*53ee8cc1Swenshuai.xi
1024*53ee8cc1Swenshuai.xi while(i < scb_in_out_size)
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi NSK_TRACE(("(%d, %x, %x) \n",i,*(scb_in+i),*(scb_out+i)));
1027*53ee8cc1Swenshuai.xi CurSCB_In = *(scb_in+i);
1028*53ee8cc1Swenshuai.xi CurSCB_Out = *(scb_out+i);
1029*53ee8cc1Swenshuai.xi
1030*53ee8cc1Swenshuai.xi //scb value is match with the HW test patterns
1031*53ee8cc1Swenshuai.xi if(CurSCB_In == NSK2HDI_CMCHANNEL_ODD_PARITY)
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi SCB = 0x3;
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi else if(CurSCB_In == NSK2HDI_CMCHANNEL_EVEN_PARITY)
1036*53ee8cc1Swenshuai.xi {
1037*53ee8cc1Swenshuai.xi SCB = 0x2;
1038*53ee8cc1Swenshuai.xi }
1039*53ee8cc1Swenshuai.xi else if(CurSCB_In == NSK2HDI_CMCHANNEL_CLEAR_PARITY)
1040*53ee8cc1Swenshuai.xi {
1041*53ee8cc1Swenshuai.xi SCB = 0x0;
1042*53ee8cc1Swenshuai.xi }
1043*53ee8cc1Swenshuai.xi
1044*53ee8cc1Swenshuai.xi if(CurSCB_Out == NSK2HDI_CMCHANNEL_ODD_PARITY)
1045*53ee8cc1Swenshuai.xi {
1046*53ee8cc1Swenshuai.xi SCB_Out = 0x3;
1047*53ee8cc1Swenshuai.xi }
1048*53ee8cc1Swenshuai.xi else if(CurSCB_Out == NSK2HDI_CMCHANNEL_EVEN_PARITY)
1049*53ee8cc1Swenshuai.xi {
1050*53ee8cc1Swenshuai.xi SCB_Out = 0x2;
1051*53ee8cc1Swenshuai.xi }
1052*53ee8cc1Swenshuai.xi else if(CurSCB_Out == NSK2HDI_CMCHANNEL_CLEAR_PARITY)
1053*53ee8cc1Swenshuai.xi {
1054*53ee8cc1Swenshuai.xi SCB_Out = 0x0;
1055*53ee8cc1Swenshuai.xi }
1056*53ee8cc1Swenshuai.xi
1057*53ee8cc1Swenshuai.xi NSK_TRACE(("SCB_In = %x, SCB_Out = %x\n",SCB,SCB_Out));
1058*53ee8cc1Swenshuai.xi
1059*53ee8cc1Swenshuai.xi
1060*53ee8cc1Swenshuai.xi MDrv_NSK21_WriteTransportKey(SCB, SCB_Out,
1061*53ee8cc1Swenshuai.xi pCmDescParser[CMCHANNEL_LDA_DESC].IV1, pCmDescParser[CMCHANNEL_LDA_DESC].IV2,
1062*53ee8cc1Swenshuai.xi pCmDescParser[CMCHANNEL_ESA_DESC].IV1, pCmDescParser[CMCHANNEL_ESA_DESC].IV2,
1063*53ee8cc1Swenshuai.xi pCmDescParser[CMCHANNEL_LSA_DESC].IV1, pCmDescParser[CMCHANNEL_LSA_DESC].IV2, DscmbID);
1064*53ee8cc1Swenshuai.xi
1065*53ee8cc1Swenshuai.xi MS_U8 WriteESAIV[16], WriteLSADIV[16], WriteLSASIV[16];
1066*53ee8cc1Swenshuai.xi memset(WriteESAIV, 0x0, 16);
1067*53ee8cc1Swenshuai.xi memset(WriteLSADIV, 0x0, 16);
1068*53ee8cc1Swenshuai.xi memset(WriteLSASIV, 0x0, 16);
1069*53ee8cc1Swenshuai.xi
1070*53ee8cc1Swenshuai.xi CmChDesc_Parser_t *pESAParser = &pCmDescParser[CMCHANNEL_ESA_DESC];
1071*53ee8cc1Swenshuai.xi CmChDesc_Parser_t *pLDAParser = &pCmDescParser[CMCHANNEL_LDA_DESC];
1072*53ee8cc1Swenshuai.xi CmChDesc_Parser_t *pLSAParser = &pCmDescParser[CMCHANNEL_LSA_DESC];
1073*53ee8cc1Swenshuai.xi
1074*53ee8cc1Swenshuai.xi DSCMB_Key_Type eKeyType = E_DSCMB_KEY_CLEAR;
1075*53ee8cc1Swenshuai.xi if(SCB == 0){
1076*53ee8cc1Swenshuai.xi eKeyType = E_DSCMB_KEY_CLEAR;
1077*53ee8cc1Swenshuai.xi }
1078*53ee8cc1Swenshuai.xi else if(SCB == 2){
1079*53ee8cc1Swenshuai.xi eKeyType = E_DSCMB_KEY_EVEN;
1080*53ee8cc1Swenshuai.xi }
1081*53ee8cc1Swenshuai.xi else if(SCB == 3){
1082*53ee8cc1Swenshuai.xi eKeyType = E_DSCMB_KEY_ODD;
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi
1085*53ee8cc1Swenshuai.xi #if 1
1086*53ee8cc1Swenshuai.xi //if(pLDAParser->IV1_Enable)
1087*53ee8cc1Swenshuai.xi {
1088*53ee8cc1Swenshuai.xi memcpy(WriteLSADIV,pLDAParser->IV1,16);
1089*53ee8cc1Swenshuai.xi
1090*53ee8cc1Swenshuai.xi if(pLDAParser->IV2_Enable)
1091*53ee8cc1Swenshuai.xi memcpy(&WriteLSADIV[8], pLDAParser->IV2, 8);
1092*53ee8cc1Swenshuai.xi
1093*53ee8cc1Swenshuai.xi MDrv_DSCMB2_EngSetIV_Ex(0, DscmbID, E_DSCMB_ENG_LSAD, eKeyType, WriteLSADIV);
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi
1096*53ee8cc1Swenshuai.xi //if(pESAParser->IV1_Enable)
1097*53ee8cc1Swenshuai.xi {
1098*53ee8cc1Swenshuai.xi memcpy(WriteESAIV,pESAParser->IV1,16);
1099*53ee8cc1Swenshuai.xi
1100*53ee8cc1Swenshuai.xi if(pESAParser->IV2_Enable)
1101*53ee8cc1Swenshuai.xi memcpy(&WriteESAIV[8], pESAParser->IV2, 8);
1102*53ee8cc1Swenshuai.xi
1103*53ee8cc1Swenshuai.xi MDrv_DSCMB2_EngSetIV_Ex(0, DscmbID, E_DSCMB_ENG_ESA, eKeyType, (MS_U8*)WriteESAIV);
1104*53ee8cc1Swenshuai.xi }
1105*53ee8cc1Swenshuai.xi
1106*53ee8cc1Swenshuai.xi //if(pLSAParser->IV1_Enable)
1107*53ee8cc1Swenshuai.xi {
1108*53ee8cc1Swenshuai.xi memcpy(WriteLSASIV,pLSAParser->IV1,16);
1109*53ee8cc1Swenshuai.xi
1110*53ee8cc1Swenshuai.xi if(pLSAParser->IV2_Enable)
1111*53ee8cc1Swenshuai.xi memcpy(&WriteLSASIV[8], pLSAParser->IV2, 8);
1112*53ee8cc1Swenshuai.xi
1113*53ee8cc1Swenshuai.xi MDrv_DSCMB2_EngSetIV_Ex(0, DscmbID, E_DSCMB_ENG_LSAS, eKeyType, WriteLSASIV);
1114*53ee8cc1Swenshuai.xi }
1115*53ee8cc1Swenshuai.xi #endif
1116*53ee8cc1Swenshuai.xi
1117*53ee8cc1Swenshuai.xi i++;
1118*53ee8cc1Swenshuai.xi }
1119*53ee8cc1Swenshuai.xi
1120*53ee8cc1Swenshuai.xi _gu32WriteKeyTime = MsOS_GetSystemTime();
1121*53ee8cc1Swenshuai.xi
1122*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1123*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1124*53ee8cc1Swenshuai.xi }
NSKHDI_CmChannelDevice_GetCookie(NSK2HDI_HANDLE CmChannelDevice_handle,void ** cookie)1125*53ee8cc1Swenshuai.xi
1126*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CmChannelDevice_GetCookie(NSK2HDI_HANDLE CmChannelDevice_handle,
1127*53ee8cc1Swenshuai.xi void **cookie)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi NSK2_CMChannel_Info *cm_handle;
1130*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1131*53ee8cc1Swenshuai.xi
1132*53ee8cc1Swenshuai.xi if(NULL == CmChannelDevice_handle)
1133*53ee8cc1Swenshuai.xi {
1134*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi
1137*53ee8cc1Swenshuai.xi cm_handle = (NSK2_CMChannel_Info *)CmChannelDevice_handle;
1138*53ee8cc1Swenshuai.xi
1139*53ee8cc1Swenshuai.xi *cookie = &cm_handle->CmChCookie;
1140*53ee8cc1Swenshuai.xi
1141*53ee8cc1Swenshuai.xi NSK_TRACE(("test_cookie = %p\n", *cookie));
1142*53ee8cc1Swenshuai.xi
1143*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1144*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1145*53ee8cc1Swenshuai.xi }
1146*53ee8cc1Swenshuai.xi
1147*53ee8cc1Swenshuai.xi /*****************************************************************************\
1148*53ee8cc1Swenshuai.xi \ Content Module - CA PID Proxy devices
1149*53ee8cc1Swenshuai.xi \*****************************************************************************/
1150*53ee8cc1Swenshuai.xi
NSKHDI_CaPIDProxy_Open(NDS_ULONG xconn,NSK2HDI_HANDLE * CaPIDProxy_handle)1151*53ee8cc1Swenshuai.xi
1152*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_Open (NDS_ULONG xconn,
1153*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *CaPIDProxy_handle)
1154*53ee8cc1Swenshuai.xi {
1155*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter, xconn = %x\n",xconn));
1156*53ee8cc1Swenshuai.xi
1157*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy;
1158*53ee8cc1Swenshuai.xi pCaPidProxy = MApi_NSK2_AllocateMemory(sizeof(CaPID_Info), TRUE);
1159*53ee8cc1Swenshuai.xi if(NULL == pCaPidProxy)
1160*53ee8cc1Swenshuai.xi {
1161*53ee8cc1Swenshuai.xi NSK_ERROR(("pCaPidProxy allocate buffer error\n"));
1162*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1163*53ee8cc1Swenshuai.xi }
1164*53ee8cc1Swenshuai.xi
1165*53ee8cc1Swenshuai.xi memset(pCaPidProxy, 0x0, sizeof(CaPID_Info));
1166*53ee8cc1Swenshuai.xi
1167*53ee8cc1Swenshuai.xi pCaPidProxy->xconn = xconn;
1168*53ee8cc1Swenshuai.xi
1169*53ee8cc1Swenshuai.xi *CaPIDProxy_handle = (NSK2HDI_HANDLE)pCaPidProxy;
1170*53ee8cc1Swenshuai.xi
1171*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1172*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1173*53ee8cc1Swenshuai.xi }
NSKHDI_CaPIDProxy_Close(NSK2HDI_HANDLE CaPIDProxy_handle)1174*53ee8cc1Swenshuai.xi
1175*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_Close (NSK2HDI_HANDLE CaPIDProxy_handle)
1176*53ee8cc1Swenshuai.xi {
1177*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1178*53ee8cc1Swenshuai.xi
1179*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1180*53ee8cc1Swenshuai.xi {
1181*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi
1184*53ee8cc1Swenshuai.xi MApi_NSK2_FreeMemory(CaPIDProxy_handle, TRUE);
1185*53ee8cc1Swenshuai.xi
1186*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1187*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1188*53ee8cc1Swenshuai.xi }
NSKHDI_CaPIDProxy_SetPrimaryStreamPID(NSK2HDI_HANDLE CaPIDProxy_handle,NDS_USHORT es_pid)1189*53ee8cc1Swenshuai.xi
1190*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_SetPrimaryStreamPID (NSK2HDI_HANDLE CaPIDProxy_handle,
1191*53ee8cc1Swenshuai.xi NDS_USHORT es_pid)
1192*53ee8cc1Swenshuai.xi {
1193*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter, es_pid = %x\n",es_pid));
1194*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1195*53ee8cc1Swenshuai.xi {
1196*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1197*53ee8cc1Swenshuai.xi }
1198*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy = (CaPID_Info *)CaPIDProxy_handle;
1199*53ee8cc1Swenshuai.xi
1200*53ee8cc1Swenshuai.xi pCaPidProxy->es_pid = es_pid;
1201*53ee8cc1Swenshuai.xi
1202*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1203*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi
NSKHDI_CaPIDProxy_SetPrimaryStreamCmChannel(NSK2HDI_HANDLE CaPIDProxy_handle,void * CmChannel_cookie)1206*53ee8cc1Swenshuai.xi //in this function, we connection sepecific PID to dscmb....
1207*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_SetPrimaryStreamCmChannel (NSK2HDI_HANDLE CaPIDProxy_handle,
1208*53ee8cc1Swenshuai.xi void *CmChannel_cookie)
1209*53ee8cc1Swenshuai.xi {
1210*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1211*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1212*53ee8cc1Swenshuai.xi {
1213*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1214*53ee8cc1Swenshuai.xi }
1215*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy = (CaPID_Info *)CaPIDProxy_handle;
1216*53ee8cc1Swenshuai.xi
1217*53ee8cc1Swenshuai.xi MS_U16 es_pid;
1218*53ee8cc1Swenshuai.xi CmChannelDevice_Cookie_t *pCmChDeCookie;
1219*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId;
1220*53ee8cc1Swenshuai.xi NDS_UBYTE ESA_Algo;
1221*53ee8cc1Swenshuai.xi MS_U32 xconn,i;
1222*53ee8cc1Swenshuai.xi MS_U32 FilterID = 0;
1223*53ee8cc1Swenshuai.xi MS_BOOL AlreadyAdd = FALSE;
1224*53ee8cc1Swenshuai.xi
1225*53ee8cc1Swenshuai.xi pCmChDeCookie = (CmChannelDevice_Cookie_t *)CmChannel_cookie;
1226*53ee8cc1Swenshuai.xi es_pid = pCaPidProxy->es_pid;
1227*53ee8cc1Swenshuai.xi xconn = pCaPidProxy->xconn;
1228*53ee8cc1Swenshuai.xi
1229*53ee8cc1Swenshuai.xi pCaPidProxy->pCmCookie = CmChannel_cookie;
1230*53ee8cc1Swenshuai.xi ESA_Algo = pCmChDeCookie->CmChDesc[CMCHANNEL_ESA_DESC].Algorithm;
1231*53ee8cc1Swenshuai.xi u32DscmbId = pCmChDeCookie->u32DscmbId;
1232*53ee8cc1Swenshuai.xi
1233*53ee8cc1Swenshuai.xi pCaPidProxy->dscmb_id = u32DscmbId;
1234*53ee8cc1Swenshuai.xi pCmChDeCookie->u16Pid = es_pid;
1235*53ee8cc1Swenshuai.xi pCaPidProxy->PrimePID = es_pid;
1236*53ee8cc1Swenshuai.xi
1237*53ee8cc1Swenshuai.xi for(i=0;i<NSK2_CMCHANNEL_NUM;i++)
1238*53ee8cc1Swenshuai.xi {
1239*53ee8cc1Swenshuai.xi if(es_pid == _u32KeepPidByFltId[xconn][i])
1240*53ee8cc1Swenshuai.xi {
1241*53ee8cc1Swenshuai.xi FilterID = i;
1242*53ee8cc1Swenshuai.xi AlreadyAdd = TRUE;
1243*53ee8cc1Swenshuai.xi break;
1244*53ee8cc1Swenshuai.xi }
1245*53ee8cc1Swenshuai.xi }
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi //_KeepCaPidProxy
1248*53ee8cc1Swenshuai.xi for(i=0;i<NSK2_CMCHANNEL_NUM;i++)
1249*53ee8cc1Swenshuai.xi {
1250*53ee8cc1Swenshuai.xi if(FALSE == _KeepCaPidProxy[xconn][i].IsUsed)
1251*53ee8cc1Swenshuai.xi {
1252*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][i].IsUsed = TRUE;
1253*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][i].EsPid = es_pid;
1254*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][i].DscmbId = u32DscmbId;
1255*53ee8cc1Swenshuai.xi pCaPidProxy->ProxyGlobalIndex = i;
1256*53ee8cc1Swenshuai.xi NSK_TRACE(("KeepCaPidProxy at %d\n",i));
1257*53ee8cc1Swenshuai.xi break;
1258*53ee8cc1Swenshuai.xi }
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi
1261*53ee8cc1Swenshuai.xi if(FALSE == AlreadyAdd) //not add...
1262*53ee8cc1Swenshuai.xi {
1263*53ee8cc1Swenshuai.xi NSK_TRACE(("Not Add Pid to TSP Filter\n"));
1264*53ee8cc1Swenshuai.xi if(FALSE == pCmChDeCookie->bWriteESA)
1265*53ee8cc1Swenshuai.xi {
1266*53ee8cc1Swenshuai.xi MDrv_NSK21_CfgCmChannel(u32DscmbId, pCmChDeCookie->CmChDesc[CMCHANNEL_LDA_DESC].Algorithm,
1267*53ee8cc1Swenshuai.xi pCmChDeCookie->CmChDesc[CMCHANNEL_ESA_DESC].Algorithm, pCmChDeCookie->CmChDesc[CMCHANNEL_LSA_DESC].Algorithm, 0);
1268*53ee8cc1Swenshuai.xi pCmChDeCookie->bWriteESA = TRUE;
1269*53ee8cc1Swenshuai.xi }
1270*53ee8cc1Swenshuai.xi
1271*53ee8cc1Swenshuai.xi
1272*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1273*53ee8cc1Swenshuai.xi }
1274*53ee8cc1Swenshuai.xi else
1275*53ee8cc1Swenshuai.xi {
1276*53ee8cc1Swenshuai.xi NSK_TRACE(("Already Add TSP filter\n"));
1277*53ee8cc1Swenshuai.xi
1278*53ee8cc1Swenshuai.xi //if( (pCmChDeCookie->bConnect == FALSE) )
1279*53ee8cc1Swenshuai.xi {
1280*53ee8cc1Swenshuai.xi if(MDrv_DSCMB2_FltConnectFltId(0, u32DscmbId, FilterID) == FALSE)
1281*53ee8cc1Swenshuai.xi {
1282*53ee8cc1Swenshuai.xi NSK_ERROR(("MDrv_DSCMB_FltConnectPid() failed\n"));
1283*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1284*53ee8cc1Swenshuai.xi }
1285*53ee8cc1Swenshuai.xi
1286*53ee8cc1Swenshuai.xi if(FALSE == pCmChDeCookie->bWriteESA)
1287*53ee8cc1Swenshuai.xi {
1288*53ee8cc1Swenshuai.xi MDrv_NSK21_CfgCmChannel(u32DscmbId, pCmChDeCookie->CmChDesc[CMCHANNEL_LDA_DESC].Algorithm,
1289*53ee8cc1Swenshuai.xi pCmChDeCookie->CmChDesc[CMCHANNEL_ESA_DESC].Algorithm, pCmChDeCookie->CmChDesc[CMCHANNEL_LSA_DESC].Algorithm, 0);
1290*53ee8cc1Swenshuai.xi pCmChDeCookie->bWriteESA = TRUE;
1291*53ee8cc1Swenshuai.xi }
1292*53ee8cc1Swenshuai.xi
1293*53ee8cc1Swenshuai.xi //MDrv_DSCMB2_ReadPidSlotMap(FilterID);
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi }
1296*53ee8cc1Swenshuai.xi
1297*53ee8cc1Swenshuai.xi pCmChDeCookie->bConnect = TRUE;
1298*53ee8cc1Swenshuai.xi
1299*53ee8cc1Swenshuai.xi //NSK_TRACE(("es_pid = %x, u32DscmbId = %d, FilterID = %d(0x%08x)\n",es_pid,u32DscmbId,FilterID,FilterID));
1300*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1301*53ee8cc1Swenshuai.xi
1302*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1303*53ee8cc1Swenshuai.xi }
NSKHDI_CaPIDProxy_RemovePrimaryStreamCmChannel(NSK2HDI_HANDLE CaPIDProxy_handle)1304*53ee8cc1Swenshuai.xi
1305*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_RemovePrimaryStreamCmChannel (NSK2HDI_HANDLE CaPIDProxy_handle)
1306*53ee8cc1Swenshuai.xi {
1307*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1308*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1309*53ee8cc1Swenshuai.xi {
1310*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1311*53ee8cc1Swenshuai.xi }
1312*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy = (CaPID_Info *)CaPIDProxy_handle;
1313*53ee8cc1Swenshuai.xi CmChannelDevice_Cookie_t *pCmChDeCookie;
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId, u32FltID, i;
1316*53ee8cc1Swenshuai.xi MS_U32 xconn = 0;
1317*53ee8cc1Swenshuai.xi MS_U16 es_pid = 0;
1318*53ee8cc1Swenshuai.xi MS_U32 index;
1319*53ee8cc1Swenshuai.xi
1320*53ee8cc1Swenshuai.xi xconn = pCaPidProxy->xconn;
1321*53ee8cc1Swenshuai.xi es_pid = pCaPidProxy->es_pid;
1322*53ee8cc1Swenshuai.xi index = pCaPidProxy->ProxyGlobalIndex;
1323*53ee8cc1Swenshuai.xi
1324*53ee8cc1Swenshuai.xi pCmChDeCookie = (CmChannelDevice_Cookie_t*) pCaPidProxy->pCmCookie;
1325*53ee8cc1Swenshuai.xi
1326*53ee8cc1Swenshuai.xi for( i=0; i<NSK2_CMCHANNEL_NUM ; i++)
1327*53ee8cc1Swenshuai.xi {
1328*53ee8cc1Swenshuai.xi if( _u32KeepPidByFltId[xconn][i] == es_pid)
1329*53ee8cc1Swenshuai.xi break;
1330*53ee8cc1Swenshuai.xi }
1331*53ee8cc1Swenshuai.xi
1332*53ee8cc1Swenshuai.xi u32FltID = i;
1333*53ee8cc1Swenshuai.xi u32DscmbId = _KeepCaPidProxy[xconn][index].DscmbId;
1334*53ee8cc1Swenshuai.xi
1335*53ee8cc1Swenshuai.xi
1336*53ee8cc1Swenshuai.xi NSK_TRACE(("MDrv_DSCMB2_FltDisconnectFltId, u32DscmbId = %d, u32FltId = %d\n",u32DscmbId,u32FltID));
1337*53ee8cc1Swenshuai.xi
1338*53ee8cc1Swenshuai.xi MDrv_DSCMB2_FltDisconnectFltId(0,u32DscmbId,u32FltID);
1339*53ee8cc1Swenshuai.xi
1340*53ee8cc1Swenshuai.xi pCmChDeCookie->bConnect = FALSE;
1341*53ee8cc1Swenshuai.xi
1342*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][index].IsUsed = FALSE;
1343*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][index].EsPid = DefaultPID;
1344*53ee8cc1Swenshuai.xi _KeepCaPidProxy[xconn][index].DscmbId = DefaultDSCMBID;
1345*53ee8cc1Swenshuai.xi
1346*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1347*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1348*53ee8cc1Swenshuai.xi }
1349*53ee8cc1Swenshuai.xi
NSKHDI_CaPIDProxy_SetSecondaryStream(NSK2HDI_HANDLE CaPIDProxy_handle,void * CmChannel_cookie,NDS_USHORT es_pid,NDS_ULONG merge_mode)1350*53ee8cc1Swenshuai.xi
1351*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_SetSecondaryStream (NSK2HDI_HANDLE CaPIDProxy_handle,
1352*53ee8cc1Swenshuai.xi void *CmChannel_cookie,
1353*53ee8cc1Swenshuai.xi NDS_USHORT es_pid,
1354*53ee8cc1Swenshuai.xi NDS_ULONG merge_mode)
1355*53ee8cc1Swenshuai.xi {
1356*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1357*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1358*53ee8cc1Swenshuai.xi {
1359*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1360*53ee8cc1Swenshuai.xi }
1361*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy = (CaPID_Info *)CaPIDProxy_handle;
1362*53ee8cc1Swenshuai.xi
1363*53ee8cc1Swenshuai.xi
1364*53ee8cc1Swenshuai.xi CmChannelDevice_Cookie_t *pCmChDeCookie;
1365*53ee8cc1Swenshuai.xi MS_U32 u32DscmbId;
1366*53ee8cc1Swenshuai.xi MS_U32 SecondaryFilterID = 0;
1367*53ee8cc1Swenshuai.xi MS_U32 PrimaryPID = 0, PrimeFilterID = 0;
1368*53ee8cc1Swenshuai.xi MS_U32 xconn, i;
1369*53ee8cc1Swenshuai.xi MS_U8 DmxIdSect;
1370*53ee8cc1Swenshuai.xi DMX_Flt_info dmx_fltinfo;
1371*53ee8cc1Swenshuai.xi DMX_FILTER_TYPE FilterType;
1372*53ee8cc1Swenshuai.xi
1373*53ee8cc1Swenshuai.xi //*CmChannel_cookie, this is used to set parameters, the parameters come from cmchannel command.
1374*53ee8cc1Swenshuai.xi pCmChDeCookie = (CmChannelDevice_Cookie_t *)CmChannel_cookie;
1375*53ee8cc1Swenshuai.xi PrimaryPID = pCaPidProxy->es_pid;
1376*53ee8cc1Swenshuai.xi xconn = pCaPidProxy->xconn;
1377*53ee8cc1Swenshuai.xi
1378*53ee8cc1Swenshuai.xi NSK_TRACE(("primary pid = 0x%x, Secondary pid = 0x%x\n", PrimaryPID, es_pid));
1379*53ee8cc1Swenshuai.xi
1380*53ee8cc1Swenshuai.xi u32DscmbId = pCmChDeCookie->u32DscmbId;
1381*53ee8cc1Swenshuai.xi
1382*53ee8cc1Swenshuai.xi for(i=0;i<NSK2_CMCHANNEL_NUM;i++)
1383*53ee8cc1Swenshuai.xi {
1384*53ee8cc1Swenshuai.xi if(PrimaryPID == _u32KeepPidByFltId[xconn][i])
1385*53ee8cc1Swenshuai.xi {
1386*53ee8cc1Swenshuai.xi PrimeFilterID = i;
1387*53ee8cc1Swenshuai.xi break;
1388*53ee8cc1Swenshuai.xi }
1389*53ee8cc1Swenshuai.xi }
1390*53ee8cc1Swenshuai.xi
1391*53ee8cc1Swenshuai.xi pCaPidProxy->PrimeFilterID = PrimaryPID;
1392*53ee8cc1Swenshuai.xi
1393*53ee8cc1Swenshuai.xi MApi_DMX_Info(PrimeFilterID, &dmx_fltinfo, &FilterType, FALSE);
1394*53ee8cc1Swenshuai.xi FilterType |= (MApi_NSK2_EcmGetFilterType(xconn) & 0xF0000000);
1395*53ee8cc1Swenshuai.xi
1396*53ee8cc1Swenshuai.xi NSK_TRACE(("PrimeFilterID = %d, Primary Filtertype is %d\n",PrimeFilterID, FilterType));
1397*53ee8cc1Swenshuai.xi
1398*53ee8cc1Swenshuai.xi if (DMX_FILTER_STATUS_OK != MApi_DMX_Open(FilterType, &DmxIdSect))
1399*53ee8cc1Swenshuai.xi {
1400*53ee8cc1Swenshuai.xi NSK_ERROR(("[%s] Allocate filter fail \n",__FUNCTION__));
1401*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1402*53ee8cc1Swenshuai.xi }
1403*53ee8cc1Swenshuai.xi
1404*53ee8cc1Swenshuai.xi if (DMX_FILTER_STATUS_OK != MApi_DMX_Pid(DmxIdSect, &es_pid, TRUE))
1405*53ee8cc1Swenshuai.xi {
1406*53ee8cc1Swenshuai.xi NSK_ERROR(("[%s] MApi_DMX_Pid fail \n",__FUNCTION__));
1407*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1408*53ee8cc1Swenshuai.xi }
1409*53ee8cc1Swenshuai.xi
1410*53ee8cc1Swenshuai.xi if (DMX_FILTER_STATUS_OK != MApi_DMX_Start(DmxIdSect))
1411*53ee8cc1Swenshuai.xi {
1412*53ee8cc1Swenshuai.xi NSK_ERROR(("[%s] MApi_DMX_Start \n",__FUNCTION__));
1413*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1414*53ee8cc1Swenshuai.xi }
1415*53ee8cc1Swenshuai.xi SecondaryFilterID = DmxIdSect; //one to one mapping.....
1416*53ee8cc1Swenshuai.xi
1417*53ee8cc1Swenshuai.xi NSK_TRACE(("es_pid = %x, u32DscmbId = %d, FilterID = %d\n",es_pid,u32DscmbId,SecondaryFilterID));
1418*53ee8cc1Swenshuai.xi
1419*53ee8cc1Swenshuai.xi pCaPidProxy->SecondaryFilterID = SecondaryFilterID;
1420*53ee8cc1Swenshuai.xi pCaPidProxy->SecondaryPID= es_pid;
1421*53ee8cc1Swenshuai.xi pCaPidProxy->secondary_enable = TRUE;
1422*53ee8cc1Swenshuai.xi
1423*53ee8cc1Swenshuai.xi if(MDrv_DSCMB2_FltConnectFltId(0,u32DscmbId, SecondaryFilterID) == FALSE)
1424*53ee8cc1Swenshuai.xi {
1425*53ee8cc1Swenshuai.xi NSK_ERROR(("MDrv_DSCMB_FltConnectPid() failed\n"));
1426*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_FAILED;
1427*53ee8cc1Swenshuai.xi }
1428*53ee8cc1Swenshuai.xi
1429*53ee8cc1Swenshuai.xi NSK_TRACE(("PrimeFilterID = 0x%x, SecondaryFilterID = 0x%x\n",PrimeFilterID, SecondaryFilterID));
1430*53ee8cc1Swenshuai.xi
1431*53ee8cc1Swenshuai.xi MDrv_DSCMB2_SetPidPair(PrimeFilterID, (MS_U32)pCaPidProxy->SecondaryFilterID);
1432*53ee8cc1Swenshuai.xi
1433*53ee8cc1Swenshuai.xi #if 0
1434*53ee8cc1Swenshuai.xi _u32KeepPidByFltId[xconn][FilterID] = es_pid;
1435*53ee8cc1Swenshuai.xi _u32DscmbID[FilterID] = u32DscmbId;
1436*53ee8cc1Swenshuai.xi
1437*53ee8cc1Swenshuai.xi pCmChDeCookie->u16Pid = es_pid;
1438*53ee8cc1Swenshuai.xi pCmChDeCookie->PidSlotID = FilterID;
1439*53ee8cc1Swenshuai.xi #endif
1440*53ee8cc1Swenshuai.xi MDrv_NSK21_CfgCmChannel(u32DscmbId, pCmChDeCookie->CmChDesc[CMCHANNEL_LDA_DESC].Algorithm,
1441*53ee8cc1Swenshuai.xi pCmChDeCookie->CmChDesc[CMCHANNEL_ESA_DESC].Algorithm, pCmChDeCookie->CmChDesc[CMCHANNEL_LSA_DESC].Algorithm, 0);
1442*53ee8cc1Swenshuai.xi
1443*53ee8cc1Swenshuai.xi
1444*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1447*53ee8cc1Swenshuai.xi }
1448*53ee8cc1Swenshuai.xi
1449*53ee8cc1Swenshuai.xi
NSKHDI_CaPIDProxy_RemoveSecondaryStream(NSK2HDI_HANDLE CaPIDProxy_handle)1450*53ee8cc1Swenshuai.xi //need to refine....
1451*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_CaPIDProxy_RemoveSecondaryStream (NSK2HDI_HANDLE CaPIDProxy_handle)
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi
1454*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1455*53ee8cc1Swenshuai.xi if(NULL == CaPIDProxy_handle)
1456*53ee8cc1Swenshuai.xi {
1457*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_INVALID_REQUEST;
1458*53ee8cc1Swenshuai.xi }
1459*53ee8cc1Swenshuai.xi CaPID_Info *pCaPidProxy = (CaPID_Info *)CaPIDProxy_handle;
1460*53ee8cc1Swenshuai.xi
1461*53ee8cc1Swenshuai.xi MDrv_DSCMB2_ClearPidPair(pCaPidProxy->PrimeFilterID, pCaPidProxy->SecondaryFilterID);
1462*53ee8cc1Swenshuai.xi
1463*53ee8cc1Swenshuai.xi MApi_NSK2_DTV_ClosePidNo(pCaPidProxy->SecondaryFilterID);
1464*53ee8cc1Swenshuai.xi NSK_TRACE(("MApi_NSK2_DTV_ClosePidNo, FltId = %d\n",pCaPidProxy->SecondaryFilterID));
1465*53ee8cc1Swenshuai.xi
1466*53ee8cc1Swenshuai.xi
1467*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1468*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
1469*53ee8cc1Swenshuai.xi }
1470*53ee8cc1Swenshuai.xi
1471*53ee8cc1Swenshuai.xi
1472*53ee8cc1Swenshuai.xi /*****************************************************************************\
1473*53ee8cc1Swenshuai.xi \ CA Master and SoC devices
NSK2HDI_ParamInit(void)1474*53ee8cc1Swenshuai.xi \*****************************************************************************/
1475*53ee8cc1Swenshuai.xi void NSK2HDI_ParamInit(void)
1476*53ee8cc1Swenshuai.xi {
1477*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
1478*53ee8cc1Swenshuai.xi MS_U32 i=0, j=0;
1479*53ee8cc1Swenshuai.xi debug_level = PRINT_TRACE;
1480*53ee8cc1Swenshuai.xi MS_U32 MaxConn;
1481*53ee8cc1Swenshuai.xi MS_U32 size;
1482*53ee8cc1Swenshuai.xi
1483*53ee8cc1Swenshuai.xi for( i=0; i<NSK2_CMCHANNEL_NUM; i++)
1484*53ee8cc1Swenshuai.xi {
1485*53ee8cc1Swenshuai.xi pCmChannelcookie[i] = MApi_NSK2_AllocateMemory(CmChannelCookieSize, FALSE);
1486*53ee8cc1Swenshuai.xi pM2MChannelcookie[i] = MApi_NSK2_AllocateMemory(CmChannelCookieSize, FALSE);
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi
1489*53ee8cc1Swenshuai.xi for( j=0; j<MaxXConnection ; j++)
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi for( i=0; i<NSK2_CMCHANNEL_NUM; i++)
1492*53ee8cc1Swenshuai.xi {
1493*53ee8cc1Swenshuai.xi _u32KeepPidByFltId[j][i] = DefaultPID;
1494*53ee8cc1Swenshuai.xi _KeepCaPidProxy[j][i].EsPid = DefaultPID;
1495*53ee8cc1Swenshuai.xi _KeepCaPidProxy[j][i].DscmbId = DefaultDSCMBID;
1496*53ee8cc1Swenshuai.xi _KeepCaPidProxy[j][i].IsUsed = 0;
1497*53ee8cc1Swenshuai.xi }
1498*53ee8cc1Swenshuai.xi
1499*53ee8cc1Swenshuai.xi }
1500*53ee8cc1Swenshuai.xi
1501*53ee8cc1Swenshuai.xi memset(HDI_XconnInfo,0x0,sizeof(AddXconnInfo_t)*2);
1502*53ee8cc1Swenshuai.xi
1503*53ee8cc1Swenshuai.xi MaxConn = MDrv_NSK2_GetMaxXConn();
1504*53ee8cc1Swenshuai.xi size = sizeof(AddXconnInfo_t)*MaxConn;
1505*53ee8cc1Swenshuai.xi NSK_TRACE(("MaxConn = 0x%08x, size = 0x%08x\n",MaxConn, size));
1506*53ee8cc1Swenshuai.xi
1507*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
1508 }
1509