xref: /utopia/UTPA2-700.0.x/modules/dscmb/api/nsk2hdi/nsk2hdi_m2m.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi 
2*53ee8cc1Swenshuai.xi 
3*53ee8cc1Swenshuai.xi #include <stdlib.h>
4*53ee8cc1Swenshuai.xi #include <string.h>
5*53ee8cc1Swenshuai.xi #include "MsCommon.h"
6*53ee8cc1Swenshuai.xi 
7*53ee8cc1Swenshuai.xi #include "nsk_dbg.h"
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi #include "nsk_282.h"
10*53ee8cc1Swenshuai.xi #include "nsk_dbg.h"
11*53ee8cc1Swenshuai.xi #include "nsk_3014.h"
12*53ee8cc1Swenshuai.xi #include "hdi_121.h"
13*53ee8cc1Swenshuai.xi #include "drvCIPHER.h"
14*53ee8cc1Swenshuai.xi #include "drvDSCMB.h"
15*53ee8cc1Swenshuai.xi #include "drvNSK2.h"
16*53ee8cc1Swenshuai.xi #include "nsk2hdi_header.h"
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi /*****************************************************************************\
21*53ee8cc1Swenshuai.xi   \Definitions
22*53ee8cc1Swenshuai.xi \*****************************************************************************/
23*53ee8cc1Swenshuai.xi #define NSK2_M2MCHANNEL_NUM             16
24*53ee8cc1Swenshuai.xi #define M2MChannelCookieSize            0x1000
25*53ee8cc1Swenshuai.xi #define NSK2_M2MChannelGroup_Number     2
26*53ee8cc1Swenshuai.xi #define NSK2_M2MChannel_Number          2
27*53ee8cc1Swenshuai.xi 
28*53ee8cc1Swenshuai.xi #define ChangeGetM2MProp
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi /*****************************************************************************\
31*53ee8cc1Swenshuai.xi   \ typedef struct
32*53ee8cc1Swenshuai.xi \*****************************************************************************/
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi typedef struct
35*53ee8cc1Swenshuai.xi {
36*53ee8cc1Swenshuai.xi     MS_U32          u32CMHandle;
37*53ee8cc1Swenshuai.xi     MS_U8           Algorithm;
38*53ee8cc1Swenshuai.xi     MS_U8           Operation;
39*53ee8cc1Swenshuai.xi     MS_U8           clearkey[0x100];
40*53ee8cc1Swenshuai.xi     MS_U8           clearkey_length;
41*53ee8cc1Swenshuai.xi     MS_U8           en_swKeys;
42*53ee8cc1Swenshuai.xi } M2MChannelDevice_Cookie_t;
43*53ee8cc1Swenshuai.xi 
44*53ee8cc1Swenshuai.xi typedef struct _NSK2_M2MTable
45*53ee8cc1Swenshuai.xi {
46*53ee8cc1Swenshuai.xi     MS_BOOL                         alloc;
47*53ee8cc1Swenshuai.xi     MS_BOOL                         enable;
48*53ee8cc1Swenshuai.xi     MS_U32                          nsk_sw;
49*53ee8cc1Swenshuai.xi     MS_U32                          handle_id;
50*53ee8cc1Swenshuai.xi } NSK2_M2MTable_Info;
51*53ee8cc1Swenshuai.xi 
52*53ee8cc1Swenshuai.xi typedef struct _DMA_iv1_descriptor{
53*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
54*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
55*53ee8cc1Swenshuai.xi     MS_U8 iv_payload[18];
56*53ee8cc1Swenshuai.xi }DMA_IV1_Desc_t;
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi typedef struct _DMA_iv2_descriptor{
60*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
61*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
62*53ee8cc1Swenshuai.xi     MS_U8 iv_payload[18];
63*53ee8cc1Swenshuai.xi }DMA_IV2_Desc_t;
64*53ee8cc1Swenshuai.xi 
65*53ee8cc1Swenshuai.xi typedef struct _DMA_operation_descriptor{
66*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
67*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
68*53ee8cc1Swenshuai.xi     MS_U8 operation;
69*53ee8cc1Swenshuai.xi }DMA_Operation_Desc_t;
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi 
72*53ee8cc1Swenshuai.xi typedef struct _DMA_memory_descriptor{
73*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
74*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
75*53ee8cc1Swenshuai.xi     MS_U8 type;
76*53ee8cc1Swenshuai.xi }DMA_Memory_Desc_t;
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi typedef struct _NSK2_DMAInfo
79*53ee8cc1Swenshuai.xi {
80*53ee8cc1Swenshuai.xi     MS_BOOL                         alloc;
81*53ee8cc1Swenshuai.xi     MS_BOOL                         enable;
82*53ee8cc1Swenshuai.xi     MS_U32                          nsk_sw;
83*53ee8cc1Swenshuai.xi     MS_U32                          handle_id;
84*53ee8cc1Swenshuai.xi } NSK2_DMA_Info;
85*53ee8cc1Swenshuai.xi 
86*53ee8cc1Swenshuai.xi 
87*53ee8cc1Swenshuai.xi typedef struct {
88*53ee8cc1Swenshuai.xi     MS_U8   Algorithm;
89*53ee8cc1Swenshuai.xi     MS_U8   Operation;
90*53ee8cc1Swenshuai.xi     MS_U32  size;
91*53ee8cc1Swenshuai.xi     MS_U8   *pInput;
92*53ee8cc1Swenshuai.xi     MS_U8   *pOutput;
93*53ee8cc1Swenshuai.xi     MS_U8   IV1[0x10];
94*53ee8cc1Swenshuai.xi     MS_U32  u32IV[0x4];
95*53ee8cc1Swenshuai.xi     MS_U8   IV2[0x10];
96*53ee8cc1Swenshuai.xi     MS_U8   clearkey[0x100];
97*53ee8cc1Swenshuai.xi     MS_U8   clearkey_length;
98*53ee8cc1Swenshuai.xi     MS_U8   en_swKeys;
99*53ee8cc1Swenshuai.xi } M2MConfig_t;
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi typedef struct _M2MChannel_ClearSWKey_Descriptor{
103*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
104*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
105*53ee8cc1Swenshuai.xi     MS_U8 *pClearSWKey;
106*53ee8cc1Swenshuai.xi } M2MChannel_ClearSWKey_Desc_t;
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi typedef struct _NSK2_M2MChannelGroup
109*53ee8cc1Swenshuai.xi {
110*53ee8cc1Swenshuai.xi     MS_BOOL                         alloc;
111*53ee8cc1Swenshuai.xi     MS_BOOL                         enable;
112*53ee8cc1Swenshuai.xi     MS_U32                          nsk_sw;
113*53ee8cc1Swenshuai.xi     MS_U32                          handle_id;
114*53ee8cc1Swenshuai.xi } NSK2_M2MChannelGroup_Info;
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi typedef struct _M2MChannel_Operation_Descriptor{
117*53ee8cc1Swenshuai.xi     MS_U8 descriptor_tag;
118*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
119*53ee8cc1Swenshuai.xi     MS_U8 operation;
120*53ee8cc1Swenshuai.xi } M2MCh_Operation_Desc_t;
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi typedef struct _NSK2_M2MChannel
123*53ee8cc1Swenshuai.xi {
124*53ee8cc1Swenshuai.xi     MS_BOOL                         alloc;
125*53ee8cc1Swenshuai.xi     MS_BOOL                         enable;
126*53ee8cc1Swenshuai.xi     MS_U32                          nsk_sw;
127*53ee8cc1Swenshuai.xi     MS_U32                          handle_id;
128*53ee8cc1Swenshuai.xi } NSK2_M2MChannel_Info;
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi /*****************************************************************************\
132*53ee8cc1Swenshuai.xi   \ local variables
133*53ee8cc1Swenshuai.xi \*****************************************************************************/
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi static DMA_IV1_Desc_t dma_iv1_desc = {
137*53ee8cc1Swenshuai.xi     .descriptor_tag = NSK2HDI_DMA_IV1_DESC_TAG,
138*53ee8cc1Swenshuai.xi     .descriptor_length = sizeof(DMA_IV1_Desc_t) - 2,
139*53ee8cc1Swenshuai.xi };
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi static DMA_IV2_Desc_t dma_iv2_desc = {
142*53ee8cc1Swenshuai.xi     .descriptor_tag = NSK2HDI_DMA_IV2_DESC_TAG,
143*53ee8cc1Swenshuai.xi     .descriptor_length = sizeof(DMA_IV2_Desc_t) - 2,
144*53ee8cc1Swenshuai.xi };
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi /*****************************************************************************\
149*53ee8cc1Swenshuai.xi   \ global variables
150*53ee8cc1Swenshuai.xi \*****************************************************************************/
151*53ee8cc1Swenshuai.xi extern void *pM2MChannelcookie[NSK2_M2MCHANNEL_NUM];
152*53ee8cc1Swenshuai.xi 
153*53ee8cc1Swenshuai.xi M2MChannelDevice_Cookie_t *gpM2MChCookie;
154*53ee8cc1Swenshuai.xi NSK2_M2MTable_Info nsk_m2mTable;
155*53ee8cc1Swenshuai.xi NSK2_DMA_Info nsk2_dma;
156*53ee8cc1Swenshuai.xi NSK2_M2MChannel_Info nsk_m2m[NSK2_M2MChannel_Number];
157*53ee8cc1Swenshuai.xi NSK2_M2MChannelGroup_Info nsk_m2mgrp[NSK2_M2MChannelGroup_Number];
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi /*****************************************************************************\
160*53ee8cc1Swenshuai.xi   \ NSK2HDI m2m functions
161*53ee8cc1Swenshuai.xi \*****************************************************************************/
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi /*****************************************************************************\
164*53ee8cc1Swenshuai.xi   \ M2M devices - Table device
165*53ee8cc1Swenshuai.xi \*****************************************************************************/
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi 
NSKHDI_M2MTable_Open(NSK2HDI_DEVICE_ID M2MTable_ID,NSK2HDI_HANDLE * M2MTable_handle)168*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MTable_Open (NSK2HDI_DEVICE_ID M2MTable_ID,
169*53ee8cc1Swenshuai.xi                                      NSK2HDI_HANDLE    *M2MTable_handle)
170*53ee8cc1Swenshuai.xi {
171*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
172*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MTable_ID = %x\n",M2MTable_ID));
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi     nsk_m2mTable.alloc = TRUE;
175*53ee8cc1Swenshuai.xi     nsk_m2mTable.handle_id = 0;
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi     *M2MTable_handle = (NSK2HDI_HANDLE *)&nsk_m2mTable.handle_id;
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MTable_handle = 0x%x\n",nsk_m2mTable.handle_id));
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
182*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
183*53ee8cc1Swenshuai.xi }
184*53ee8cc1Swenshuai.xi 
NSKHDI_M2MTable_Close(NSK2HDI_HANDLE M2MTable_handle)185*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MTable_Close (NSK2HDI_HANDLE M2MTable_handle)
186*53ee8cc1Swenshuai.xi {
187*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
188*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MTable_handle);
189*53ee8cc1Swenshuai.xi     NSK_TRACE(("u32Handle = 0x%x\n",u32Handle));
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi     nsk_m2mTable.alloc = FALSE;
192*53ee8cc1Swenshuai.xi     nsk_m2mTable.handle_id = 0;
193*53ee8cc1Swenshuai.xi 
194*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
195*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
196*53ee8cc1Swenshuai.xi }
197*53ee8cc1Swenshuai.xi 
NSKHDI_M2MTable_EnumerateChildren(NSK2HDI_HANDLE M2MTable_handle,NDS_ULONG * child_device_num,NSK2HDI_CHILD_DEVICE * child_device)198*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MTable_EnumerateChildren( NSK2HDI_HANDLE       M2MTable_handle,
199*53ee8cc1Swenshuai.xi                                                   NDS_ULONG            *child_device_num,
200*53ee8cc1Swenshuai.xi                                                   NSK2HDI_CHILD_DEVICE *child_device)
201*53ee8cc1Swenshuai.xi {
202*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi     NSK_TRACE(("child_device_num = %x\n",*child_device_num));
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi     if(child_device == NULL)
207*53ee8cc1Swenshuai.xi     {
208*53ee8cc1Swenshuai.xi         //should fill the number of child device...
209*53ee8cc1Swenshuai.xi         *child_device_num = 2;
210*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_OK;
211*53ee8cc1Swenshuai.xi     }
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi     child_device[0].device_id = 0x1234;
214*53ee8cc1Swenshuai.xi     child_device[0].device_type = NSK2HDI_DMA_DEVICE_TYPE;
215*53ee8cc1Swenshuai.xi     child_device[1].device_id = 0x5678;
216*53ee8cc1Swenshuai.xi     child_device[1].device_type = NSK2HDI_M2MCHANNEL_GROUP_DEVICE_TYPE;
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
219*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
220*53ee8cc1Swenshuai.xi }
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi /*****************************************************************************\
223*53ee8cc1Swenshuai.xi   \ M2M devices - DMA device
224*53ee8cc1Swenshuai.xi \*****************************************************************************/
225*53ee8cc1Swenshuai.xi 
NSKHDI_DMADevice_Open(NSK2HDI_DEVICE_ID DMADevice_ID,NSK2HDI_HANDLE * DMADevice_handle)226*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_DMADevice_Open (NSK2HDI_DEVICE_ID DMADevice_ID,
227*53ee8cc1Swenshuai.xi                                       NSK2HDI_HANDLE    *DMADevice_handle)
228*53ee8cc1Swenshuai.xi {
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi     NSK_TRACE(("DMADevice_ID = %x\n",DMADevice_ID));
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi     if(*DMADevice_handle != NULL)
235*53ee8cc1Swenshuai.xi     {
236*53ee8cc1Swenshuai.xi         //NSK_ERROR(("CmChannele_handle no NULL\n"));
237*53ee8cc1Swenshuai.xi     }
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi     if(nsk2_dma.alloc == TRUE)
240*53ee8cc1Swenshuai.xi     {
241*53ee8cc1Swenshuai.xi         //NSK_ERROR(("DMA is used\n"));
242*53ee8cc1Swenshuai.xi     }
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi     nsk2_dma.alloc = TRUE;
245*53ee8cc1Swenshuai.xi     *DMADevice_handle = (NSK2HDI_HANDLE *)&nsk2_dma.handle_id;
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi     NSK_TRACE(("DMADevice_handle = 0x%x\n",nsk2_dma.handle_id));
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
250*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi 
NSKHDI_DMADevice_Close(NSK2HDI_HANDLE DMADevice_handle)253*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_DMADevice_Close (NSK2HDI_HANDLE DMADevice_handle)
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
256*53ee8cc1Swenshuai.xi 
257*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(DMADevice_handle);
258*53ee8cc1Swenshuai.xi     //NSK_TRACE(("DMADevice_handle = %x\n",u32Handle));
259*53ee8cc1Swenshuai.xi     NSK_TRACE(("DMADevice_handle = 0x%x\n",u32Handle));
260*53ee8cc1Swenshuai.xi 
261*53ee8cc1Swenshuai.xi     nsk2_dma.alloc = FALSE;
262*53ee8cc1Swenshuai.xi 
263*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
264*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
265*53ee8cc1Swenshuai.xi }
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi 
NSKHDI_DMADevice_GetProperties(NSK2HDI_HANDLE DMADevice_handle,NDS_ULONG request_id,NDS_ULONG * desc_size,NDS_UBYTE * desc)269*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_DMADevice_GetProperties( NSK2HDI_HANDLE  DMADevice_handle,
270*53ee8cc1Swenshuai.xi                                                NDS_ULONG       request_id,
271*53ee8cc1Swenshuai.xi                                                NDS_ULONG       *desc_size,
272*53ee8cc1Swenshuai.xi                                                NDS_UBYTE       *desc)
273*53ee8cc1Swenshuai.xi {
274*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
275*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(DMADevice_handle);
276*53ee8cc1Swenshuai.xi     NSK_TRACE(("DMADevice_handle = 0x%x\n",u32Handle));
277*53ee8cc1Swenshuai.xi 
278*53ee8cc1Swenshuai.xi     if(request_id != NSK2HDI_DMA_READ_ALL_DESCRIPTORS_REQUEST)
279*53ee8cc1Swenshuai.xi     {
280*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_INVALID_REQUEST;
281*53ee8cc1Swenshuai.xi     }
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi     if(desc == NULL)
284*53ee8cc1Swenshuai.xi     {
285*53ee8cc1Swenshuai.xi         MDrv_NSK2_GetDMAProperties((MS_U32*)desc_size, (MS_U8*)desc);
286*53ee8cc1Swenshuai.xi         NSK_TRACE(("return desc_size = 0x%x\n",(MS_U32)*desc_size));
287*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_OK;
288*53ee8cc1Swenshuai.xi     }
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi     if(*desc_size == 0)
291*53ee8cc1Swenshuai.xi     {
292*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_INVALID_REQUEST;
293*53ee8cc1Swenshuai.xi     }
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi     MDrv_NSK2_GetDMAProperties((MS_U32*)desc_size, (MS_U8*)desc);
296*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
297*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi 
NSKHDI_M2MAlgoTrans(MS_U8 NSK2HDI_Algo,DRV_CIPHER_ALGO * pCipherAlgo)300*53ee8cc1Swenshuai.xi void NSKHDI_M2MAlgoTrans(MS_U8 NSK2HDI_Algo, DRV_CIPHER_ALGO *pCipherAlgo)
301*53ee8cc1Swenshuai.xi {
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi     NSK_TRACE(("NSK2HDI_Algo = %x\n",NSK2HDI_Algo));
304*53ee8cc1Swenshuai.xi 
305*53ee8cc1Swenshuai.xi     if(NSK2HDI_SPROFILE_M2M_DES_ECB_CLR_CLR == NSK2HDI_Algo)
306*53ee8cc1Swenshuai.xi     {
307*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_DES;
308*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_ECB;
309*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
310*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
311*53ee8cc1Swenshuai.xi     }
312*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
313*53ee8cc1Swenshuai.xi     {
314*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_DES;
315*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
316*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
317*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV1;
318*53ee8cc1Swenshuai.xi     }
319*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_SCTE52_IV2 == NSK2HDI_Algo)
320*53ee8cc1Swenshuai.xi     {
321*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_DES;
322*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
323*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
324*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV2;
325*53ee8cc1Swenshuai.xi     }
326*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_CLR_CLR == NSK2HDI_Algo)
327*53ee8cc1Swenshuai.xi     {
328*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_DES;
329*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
330*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
331*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
332*53ee8cc1Swenshuai.xi     }
333*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_ECB_CLR_CLR == NSK2HDI_Algo)
334*53ee8cc1Swenshuai.xi     {
335*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_TDES;
336*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_ECB;
337*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
338*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
339*53ee8cc1Swenshuai.xi     }
340*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
341*53ee8cc1Swenshuai.xi     {
342*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_TDES;
343*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
344*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
345*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV1;
346*53ee8cc1Swenshuai.xi     }
347*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_SCTE52_IV2 == NSK2HDI_Algo)
348*53ee8cc1Swenshuai.xi     {
349*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_TDES;
350*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
351*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
352*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV2;
353*53ee8cc1Swenshuai.xi     }
354*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_CLR_CLR == NSK2HDI_Algo)
355*53ee8cc1Swenshuai.xi     {
356*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_TDES;
357*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
358*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
359*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
360*53ee8cc1Swenshuai.xi     }
361*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_ECB_CLR_CLR == NSK2HDI_Algo)
362*53ee8cc1Swenshuai.xi     {
363*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
364*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_ECB;
365*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
366*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
367*53ee8cc1Swenshuai.xi     }
368*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CTS_IV1 == NSK2HDI_Algo)
369*53ee8cc1Swenshuai.xi     {
370*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
371*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
372*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CTS;
373*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV1;
374*53ee8cc1Swenshuai.xi     }
375*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CTS_CLR == NSK2HDI_Algo)
376*53ee8cc1Swenshuai.xi     {
377*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
378*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
379*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CTS;
380*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
381*53ee8cc1Swenshuai.xi     }
382*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
383*53ee8cc1Swenshuai.xi     {
384*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
385*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
386*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
387*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_IV1;
388*53ee8cc1Swenshuai.xi     }
389*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_SCTE52_CLR == NSK2HDI_Algo)
390*53ee8cc1Swenshuai.xi     {
391*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
392*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
393*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_SCTE52;
394*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
395*53ee8cc1Swenshuai.xi     }
396*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CLR_CLR == NSK2HDI_Algo)
397*53ee8cc1Swenshuai.xi     {
398*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
399*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CBC;
400*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
401*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
402*53ee8cc1Swenshuai.xi     }
403*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_RC4_64 == NSK2HDI_Algo)
404*53ee8cc1Swenshuai.xi     {
405*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_RC4;
406*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_NONE;
407*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
408*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
409*53ee8cc1Swenshuai.xi     }
410*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CTR == NSK2HDI_Algo)
411*53ee8cc1Swenshuai.xi     {
412*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
413*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CTR;
414*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
415*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
416*53ee8cc1Swenshuai.xi     }
417*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CTR64 == NSK2HDI_Algo)
418*53ee8cc1Swenshuai.xi     {
419*53ee8cc1Swenshuai.xi         pCipherAlgo->eMainAlgo = E_CIPHER_MAIN_AES;
420*53ee8cc1Swenshuai.xi         pCipherAlgo->eSubAlgo  = E_CIPHER_SUB_CTR;
421*53ee8cc1Swenshuai.xi         pCipherAlgo->eResAlgo  = E_CIPHER_RES_CLR;
422*53ee8cc1Swenshuai.xi         pCipherAlgo->eSBAlgo   = E_CIPHER_SB_CLR;
423*53ee8cc1Swenshuai.xi     }
424*53ee8cc1Swenshuai.xi     else
425*53ee8cc1Swenshuai.xi     {
426*53ee8cc1Swenshuai.xi         NSK_ERROR(("Not Implement\n"));
427*53ee8cc1Swenshuai.xi     }
428*53ee8cc1Swenshuai.xi }
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi 
NSKHDI_M2MGetNSKSubAlgo(MS_U8 NSK2HDI_Algo,CIPHER_SUB_ALGO * pSubAlgo)431*53ee8cc1Swenshuai.xi void NSKHDI_M2MGetNSKSubAlgo(MS_U8 NSK2HDI_Algo, CIPHER_SUB_ALGO *pSubAlgo)
432*53ee8cc1Swenshuai.xi {
433*53ee8cc1Swenshuai.xi #define SUBALGO_ECB  0
434*53ee8cc1Swenshuai.xi #define SUBALGO_CBC  1
435*53ee8cc1Swenshuai.xi #define SUBALGO_CTR  2
436*53ee8cc1Swenshuai.xi #define SUBALGO_CBCMAC 3
437*53ee8cc1Swenshuai.xi #define SUBALGO_CTR_64 4
438*53ee8cc1Swenshuai.xi #define SUBALGO_CMAC_KEY 5
439*53ee8cc1Swenshuai.xi #define SUBALGO_CMAC_Algo 6
440*53ee8cc1Swenshuai.xi #define SUBALGO_PCBC_ADD 7
441*53ee8cc1Swenshuai.xi #define SUBALGO_PCBC_XOR 8
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi     NSK_TRACE(("NSK2HDI_Algo = 0x%02x\n",NSK2HDI_Algo));
444*53ee8cc1Swenshuai.xi 
445*53ee8cc1Swenshuai.xi     if(NSK2HDI_SPROFILE_M2M_DES_ECB_CLR_CLR == NSK2HDI_Algo)
446*53ee8cc1Swenshuai.xi     {
447*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_ECB;
448*53ee8cc1Swenshuai.xi     }
449*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
450*53ee8cc1Swenshuai.xi     {
451*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
452*53ee8cc1Swenshuai.xi     }
453*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_SCTE52_IV2 == NSK2HDI_Algo)
454*53ee8cc1Swenshuai.xi     {
455*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
456*53ee8cc1Swenshuai.xi     }
457*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_DES_CBC_CLR_CLR == NSK2HDI_Algo)
458*53ee8cc1Swenshuai.xi     {
459*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
460*53ee8cc1Swenshuai.xi     }
461*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_ECB_CLR_CLR == NSK2HDI_Algo)
462*53ee8cc1Swenshuai.xi     {
463*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_ECB;
464*53ee8cc1Swenshuai.xi     }
465*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
466*53ee8cc1Swenshuai.xi     {
467*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
468*53ee8cc1Swenshuai.xi     }
469*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_SCTE52_IV2 == NSK2HDI_Algo)
470*53ee8cc1Swenshuai.xi     {
471*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
472*53ee8cc1Swenshuai.xi     }
473*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_TDES_CBC_CLR_CLR == NSK2HDI_Algo)
474*53ee8cc1Swenshuai.xi     {
475*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
476*53ee8cc1Swenshuai.xi     }
477*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_ECB_CLR_CLR == NSK2HDI_Algo)
478*53ee8cc1Swenshuai.xi     {
479*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_ECB;
480*53ee8cc1Swenshuai.xi     }
481*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CTS_IV1 == NSK2HDI_Algo)
482*53ee8cc1Swenshuai.xi     {
483*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
484*53ee8cc1Swenshuai.xi     }
485*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CTS_CLR == NSK2HDI_Algo)
486*53ee8cc1Swenshuai.xi     {
487*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
488*53ee8cc1Swenshuai.xi     }
489*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_SCTE52_IV1 == NSK2HDI_Algo)
490*53ee8cc1Swenshuai.xi     {
491*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
492*53ee8cc1Swenshuai.xi     }
493*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_SCTE52_CLR == NSK2HDI_Algo)
494*53ee8cc1Swenshuai.xi     {
495*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
496*53ee8cc1Swenshuai.xi     }
497*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CBC_CLR_CLR == NSK2HDI_Algo)
498*53ee8cc1Swenshuai.xi     {
499*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CBC;
500*53ee8cc1Swenshuai.xi     }
501*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_RC4_64 == NSK2HDI_Algo)
502*53ee8cc1Swenshuai.xi     {
503*53ee8cc1Swenshuai.xi         *pSubAlgo = 0;
504*53ee8cc1Swenshuai.xi     }
505*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CTR == NSK2HDI_Algo)
506*53ee8cc1Swenshuai.xi     {
507*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CTR;
508*53ee8cc1Swenshuai.xi     }
509*53ee8cc1Swenshuai.xi     else if(NSK2HDI_SPROFILE_M2M_AES_CTR64 == NSK2HDI_Algo)
510*53ee8cc1Swenshuai.xi     {
511*53ee8cc1Swenshuai.xi         *pSubAlgo = SUBALGO_CTR_64;
512*53ee8cc1Swenshuai.xi     }
513*53ee8cc1Swenshuai.xi     else
514*53ee8cc1Swenshuai.xi     {
515*53ee8cc1Swenshuai.xi         NSK_ERROR(("Not Implement\n"));
516*53ee8cc1Swenshuai.xi     }
517*53ee8cc1Swenshuai.xi 
518*53ee8cc1Swenshuai.xi }
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi //#define IV_FROM_MAGIC
522*53ee8cc1Swenshuai.xi 
NSKHDI_WriteM2MTest(M2MConfig_t * pM2MConfig)523*53ee8cc1Swenshuai.xi void NSKHDI_WriteM2MTest(M2MConfig_t *pM2MConfig)
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi 
526*53ee8cc1Swenshuai.xi 	MS_BOOL bDecrpt = FALSE;
527*53ee8cc1Swenshuai.xi 	DRV_CIPHER_RET    ret;
528*53ee8cc1Swenshuai.xi 	MS_U32            u32CmdId;
529*53ee8cc1Swenshuai.xi 	DRV_CIPHER_DMACFG stCfg;
530*53ee8cc1Swenshuai.xi     MS_U32 u32DelayTime;
531*53ee8cc1Swenshuai.xi 
532*53ee8cc1Swenshuai.xi     memset(&stCfg,0x0,sizeof(DRV_CIPHER_DMACFG));
533*53ee8cc1Swenshuai.xi 
534*53ee8cc1Swenshuai.xi     if (pM2MConfig->Operation == NSK2HDI_M2MCHANNEL_DECRYPT_OPERATION)
535*53ee8cc1Swenshuai.xi     {
536*53ee8cc1Swenshuai.xi         NSK_TRACE(("DECRYPT_OPERATION\n"));
537*53ee8cc1Swenshuai.xi         bDecrpt = TRUE;
538*53ee8cc1Swenshuai.xi     }
539*53ee8cc1Swenshuai.xi     else if (pM2MConfig->Operation == NSK2HDI_M2MCHANNEL_ENCRYPT_OPERATION)
540*53ee8cc1Swenshuai.xi     {
541*53ee8cc1Swenshuai.xi         NSK_TRACE(("ENCRYPT_OPERATION\n"));
542*53ee8cc1Swenshuai.xi         bDecrpt = FALSE;
543*53ee8cc1Swenshuai.xi     }
544*53ee8cc1Swenshuai.xi     else
545*53ee8cc1Swenshuai.xi     {
546*53ee8cc1Swenshuai.xi         NSK_ERROR(("Not support operation\n"));
547*53ee8cc1Swenshuai.xi     }
548*53ee8cc1Swenshuai.xi 
549*53ee8cc1Swenshuai.xi 
550*53ee8cc1Swenshuai.xi     NSKHDI_M2MAlgoTrans(pM2MConfig->Algorithm,&stCfg.stAlgo);
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi     MS_U8 u8IVData[0x10];
553*53ee8cc1Swenshuai.xi     MS_U8 i;
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi     memset(u8IVData,0x0,0x10);
556*53ee8cc1Swenshuai.xi #ifdef IV_FROM_MAGIC
557*53ee8cc1Swenshuai.xi     MS_U8 u8IVData1[0x10] = {0xbd, 0x98, 0xa2, 0x06, 0x1b, 0x76, 0x1b, 0xa4, 0x15, 0x10, 0x1f, 0x26, 0xf6, 0x66, 0x6, 0x45};
558*53ee8cc1Swenshuai.xi     MS_U8 u8IVData2[0x10] = {0x91, 0x0c, 0xc0, 0x9f, 0x9a, 0x04, 0x7b, 0x6a, 0xa8, 0xde, 0xfe, 0xe2, 0xfc, 0xae, 0xad, 0xb3};
559*53ee8cc1Swenshuai.xi     memcpy(pM2MConfig->IV1,u8IVData1,0x10);
560*53ee8cc1Swenshuai.xi     memcpy(pM2MConfig->IV2,u8IVData2,0x10);
561*53ee8cc1Swenshuai.xi #endif
562*53ee8cc1Swenshuai.xi 
563*53ee8cc1Swenshuai.xi     NSKHDI_IVDataTrans(pM2MConfig->Algorithm,pM2MConfig->IV1,pM2MConfig->IV2,pM2MConfig->u32IV);
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi     if(pM2MConfig->en_swKeys == TRUE)
566*53ee8cc1Swenshuai.xi     {
567*53ee8cc1Swenshuai.xi         NSK_TRACE(("Write SW key\n"));
568*53ee8cc1Swenshuai.xi         stCfg.u32CAVid = 2;
569*53ee8cc1Swenshuai.xi         stCfg.stKey.eKeySrc = E_CIPHER_KSRC_CPU;
570*53ee8cc1Swenshuai.xi         stCfg.stKey.u8KeyIdx = 0;
571*53ee8cc1Swenshuai.xi         stCfg.stKey.u8KeyLen = pM2MConfig->clearkey_length;
572*53ee8cc1Swenshuai.xi         stCfg.stKey.pu8KeyData = (MS_U8 *)pM2MConfig->clearkey;
573*53ee8cc1Swenshuai.xi         stCfg.stKey.u8IVLen = 16;
574*53ee8cc1Swenshuai.xi 
575*53ee8cc1Swenshuai.xi         for(i=0;i<4;i++)
576*53ee8cc1Swenshuai.xi         {
577*53ee8cc1Swenshuai.xi             u8IVData[i*4+0] = (MS_U8)((pM2MConfig->u32IV[i]>>24)&0xff);
578*53ee8cc1Swenshuai.xi             u8IVData[i*4+1] = (MS_U8)((pM2MConfig->u32IV[i]>>16)&0xff);
579*53ee8cc1Swenshuai.xi             u8IVData[i*4+2] = (MS_U8)((pM2MConfig->u32IV[i]>>8)&0xff);
580*53ee8cc1Swenshuai.xi             u8IVData[i*4+3] = (MS_U8)((pM2MConfig->u32IV[i]>>0)&0xff);
581*53ee8cc1Swenshuai.xi         }
582*53ee8cc1Swenshuai.xi 
583*53ee8cc1Swenshuai.xi         stCfg.stKey.pu8IVData = (MS_U8 *)u8IVData;
584*53ee8cc1Swenshuai.xi     }
585*53ee8cc1Swenshuai.xi     else
586*53ee8cc1Swenshuai.xi     {
587*53ee8cc1Swenshuai.xi         stCfg.u32CAVid = 1;
588*53ee8cc1Swenshuai.xi         NSK_TRACE(("WriteM2MKey with NSK write key\n"));
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi         //for nds usage....
591*53ee8cc1Swenshuai.xi         stCfg.stAlgo.eSubAlgo = E_CIPHER_SUB_NONE;
592*53ee8cc1Swenshuai.xi         stCfg.stAlgo.eMainAlgo = E_CIPHER_MAIN_NONE;
593*53ee8cc1Swenshuai.xi     	stCfg.stAlgo.eSBAlgo   = E_CIPHER_SB_NONE;
594*53ee8cc1Swenshuai.xi         stCfg.stAlgo.eResAlgo  = E_CIPHER_RES_NONE;
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi     	//Key, NDS
597*53ee8cc1Swenshuai.xi     	stCfg.stKey.eKeySrc = E_CIPHER_KSRC_CAIP;
598*53ee8cc1Swenshuai.xi     	stCfg.stKey.u8KeyIdx = 0;
599*53ee8cc1Swenshuai.xi     	stCfg.stKey.u8KeyLen = 0;
600*53ee8cc1Swenshuai.xi     	stCfg.stKey.pu8KeyData = 0;
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi         stCfg.stKey.u8IVLen = 16;
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi         //(MS_U8*)pM2MConfig->u32IV;
606*53ee8cc1Swenshuai.xi         //pu32IV[3] = 0xf6660645;
607*53ee8cc1Swenshuai.xi         //pu32IV[2] = 0x15101f26;
608*53ee8cc1Swenshuai.xi         //pu32IV[1] = 0x1b761ba4;
609*53ee8cc1Swenshuai.xi         //pu32IV[0] = 0xbd98a206;
610*53ee8cc1Swenshuai.xi         for(i=0;i<4;i++)
611*53ee8cc1Swenshuai.xi         {
612*53ee8cc1Swenshuai.xi             u8IVData[i*4+0] = (MS_U8)((pM2MConfig->u32IV[i]>>24)&0xff);
613*53ee8cc1Swenshuai.xi             u8IVData[i*4+1] = (MS_U8)((pM2MConfig->u32IV[i]>>16)&0xff);
614*53ee8cc1Swenshuai.xi             u8IVData[i*4+2] = (MS_U8)((pM2MConfig->u32IV[i]>>8)&0xff);
615*53ee8cc1Swenshuai.xi             u8IVData[i*4+3] = (MS_U8)((pM2MConfig->u32IV[i]>>0)&0xff);
616*53ee8cc1Swenshuai.xi         }
617*53ee8cc1Swenshuai.xi         stCfg.stKey.pu8IVData = u8IVData;
618*53ee8cc1Swenshuai.xi 
619*53ee8cc1Swenshuai.xi     }
620*53ee8cc1Swenshuai.xi 
621*53ee8cc1Swenshuai.xi     u32DelayTime = pM2MConfig->size >> 10 ; //100k byte, 1ms
622*53ee8cc1Swenshuai.xi 
623*53ee8cc1Swenshuai.xi     if(u32DelayTime < 100)
624*53ee8cc1Swenshuai.xi         u32DelayTime = 1;
625*53ee8cc1Swenshuai.xi     else
626*53ee8cc1Swenshuai.xi         u32DelayTime /= 100;
627*53ee8cc1Swenshuai.xi 
628*53ee8cc1Swenshuai.xi     //Decrpt or Encrypt
629*53ee8cc1Swenshuai.xi     stCfg.bDecrypt = bDecrpt;
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi     if( MApi_NSK2_IsHarmonizer() == TRUE )//running harmonizer test....
632*53ee8cc1Swenshuai.xi     {
633*53ee8cc1Swenshuai.xi         MS_U8 *pTestInput, *pTestOutput;
634*53ee8cc1Swenshuai.xi         pTestInput = MApi_NSK2_AllocateMemory(pM2MConfig->size, FALSE);
635*53ee8cc1Swenshuai.xi         pTestOutput = MApi_NSK2_AllocateMemory(pM2MConfig->size, FALSE);
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi         memcpy(pTestInput, pM2MConfig->pInput,pM2MConfig->size);
638*53ee8cc1Swenshuai.xi         //InData
639*53ee8cc1Swenshuai.xi     	stCfg.stInput.u32Addr = MsOS_VA2PA((MS_VIRT)pTestInput);
640*53ee8cc1Swenshuai.xi     	stCfg.stInput.u32Size = pM2MConfig->size;
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi         NSK_TRACE(("Input Addr = 0x%llx, u32Size = 0x%x\n", stCfg.stInput.u32Addr, stCfg.stInput.u32Size));
643*53ee8cc1Swenshuai.xi 
644*53ee8cc1Swenshuai.xi         //OutData
645*53ee8cc1Swenshuai.xi         stCfg.stOutput.u32Addr = MsOS_VA2PA((MS_VIRT)pTestOutput);
646*53ee8cc1Swenshuai.xi         stCfg.stOutput.u32Size = pM2MConfig->size;
647*53ee8cc1Swenshuai.xi 
648*53ee8cc1Swenshuai.xi         NSK_TRACE(("Output Addr = 0x%llx, u32Size = 0x%x\n",stCfg.stOutput.u32Addr, stCfg.stOutput.u32Size));
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi         MsOS_FlushMemory();
651*53ee8cc1Swenshuai.xi 
652*53ee8cc1Swenshuai.xi         MS_U32   u32Exception=0;
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi         ret = MDrv_CIPHER_DMACalc(stCfg, &u32CmdId); //use hal code?
655*53ee8cc1Swenshuai.xi         if(ret != DRV_CIPHER_OK)
656*53ee8cc1Swenshuai.xi         {
657*53ee8cc1Swenshuai.xi     	    NSK_ERROR(("Fail to M2M Test\n"));
658*53ee8cc1Swenshuai.xi             return;
659*53ee8cc1Swenshuai.xi         }
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi         do
662*53ee8cc1Swenshuai.xi         {
663*53ee8cc1Swenshuai.xi             MsOS_DelayTask(u32DelayTime);
664*53ee8cc1Swenshuai.xi             ret = MDrv_CIPHER_IsDMADone(u32CmdId, &u32Exception);
665*53ee8cc1Swenshuai.xi         }while(ret == FALSE);
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi         NSK_TRACE(("DMA done\n"));
669*53ee8cc1Swenshuai.xi         MsOS_ReadMemory();
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi         if(u32Exception)
672*53ee8cc1Swenshuai.xi         {
673*53ee8cc1Swenshuai.xi             NSK_TRACE(("DMA Exception: [0x%x]\n", u32Exception));
674*53ee8cc1Swenshuai.xi         }
675*53ee8cc1Swenshuai.xi 
676*53ee8cc1Swenshuai.xi         memcpy(pM2MConfig->pOutput, pTestOutput,pM2MConfig->size);
677*53ee8cc1Swenshuai.xi 
678*53ee8cc1Swenshuai.xi         MApi_NSK2_FreeMemory(pTestInput, FALSE);
679*53ee8cc1Swenshuai.xi         MApi_NSK2_FreeMemory(pTestOutput, FALSE);
680*53ee8cc1Swenshuai.xi     }
681*53ee8cc1Swenshuai.xi     else  //normal case..., real project, not harmonizer one....
682*53ee8cc1Swenshuai.xi     {
683*53ee8cc1Swenshuai.xi         MS_U8 *pTestInput, *pTestOutput;
684*53ee8cc1Swenshuai.xi         pTestInput = pM2MConfig->pInput;
685*53ee8cc1Swenshuai.xi         pTestOutput = pM2MConfig->pOutput;
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi         //InData
688*53ee8cc1Swenshuai.xi         stCfg.stInput.u32Addr = MsOS_VA2PA((MS_VIRT)pTestInput);
689*53ee8cc1Swenshuai.xi         stCfg.stInput.u32Size = pM2MConfig->size;
690*53ee8cc1Swenshuai.xi 
691*53ee8cc1Swenshuai.xi         NSK_TRACE(("Input Addr = 0x%llx, u32Size = 0x%x\n",stCfg.stInput.u32Addr, stCfg.stInput.u32Size));
692*53ee8cc1Swenshuai.xi 
693*53ee8cc1Swenshuai.xi         //OutData
694*53ee8cc1Swenshuai.xi         stCfg.stOutput.u32Addr = MsOS_VA2PA((MS_VIRT)pTestOutput);
695*53ee8cc1Swenshuai.xi         stCfg.stOutput.u32Size = pM2MConfig->size;
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi         NSK_TRACE(("Output Addr = 0x%llx, u32Size = 0x%x\n",stCfg.stOutput.u32Addr, stCfg.stOutput.u32Size));
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi         MsOS_FlushMemory();
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi         MS_U32           u32Exception=0;
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi         ret = MDrv_CIPHER_DMACalc(stCfg, &u32CmdId); //use hal code?
704*53ee8cc1Swenshuai.xi         if(ret != DRV_CIPHER_OK)
705*53ee8cc1Swenshuai.xi         {
706*53ee8cc1Swenshuai.xi             NSK_ERROR(("Fail to M2M Test\n"));
707*53ee8cc1Swenshuai.xi             return;
708*53ee8cc1Swenshuai.xi         }
709*53ee8cc1Swenshuai.xi 
710*53ee8cc1Swenshuai.xi         do
711*53ee8cc1Swenshuai.xi         {
712*53ee8cc1Swenshuai.xi             MsOS_DelayTask(u32DelayTime);
713*53ee8cc1Swenshuai.xi             ret = MDrv_CIPHER_IsDMADone(u32CmdId, &u32Exception);
714*53ee8cc1Swenshuai.xi         }while(ret == FALSE);
715*53ee8cc1Swenshuai.xi 
716*53ee8cc1Swenshuai.xi         NSK_TRACE(("DMA done\n"));
717*53ee8cc1Swenshuai.xi         MsOS_ReadMemory();
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi         if(u32Exception)
720*53ee8cc1Swenshuai.xi         {
721*53ee8cc1Swenshuai.xi             NSK_TRACE(("DMA Exception: [0x%x]\n", u32Exception));
722*53ee8cc1Swenshuai.xi         }
723*53ee8cc1Swenshuai.xi     }
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi 
NSKHDI_DMADevice_WriteData(NSK2HDI_HANDLE DMADevice_handle,void * M2MChannel_cookie,NDS_ULONG desc_size,const NDS_UBYTE * desc,NDS_ULONG data_size,NDS_UBYTE * in_data,NDS_UBYTE * out_data)726*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_DMADevice_WriteData( NSK2HDI_HANDLE  DMADevice_handle,
727*53ee8cc1Swenshuai.xi                                            void            *M2MChannel_cookie,
728*53ee8cc1Swenshuai.xi                                            NDS_ULONG       desc_size,
729*53ee8cc1Swenshuai.xi                                            const NDS_UBYTE *desc,
730*53ee8cc1Swenshuai.xi                                            NDS_ULONG       data_size,
731*53ee8cc1Swenshuai.xi                                            NDS_UBYTE       *in_data,
732*53ee8cc1Swenshuai.xi                                            NDS_UBYTE       *out_data)
733*53ee8cc1Swenshuai.xi {
734*53ee8cc1Swenshuai.xi 
735*53ee8cc1Swenshuai.xi     MS_U8 *pDesc = (MS_U8 *)desc;
736*53ee8cc1Swenshuai.xi     MS_U8 desc_tag;
737*53ee8cc1Swenshuai.xi     NDS_ULONG   size;
738*53ee8cc1Swenshuai.xi     MS_U8 TagSwitch;
739*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
740*53ee8cc1Swenshuai.xi     MS_U8 operation;
741*53ee8cc1Swenshuai.xi     MS_U8 type;
742*53ee8cc1Swenshuai.xi     M2MConfig_t tM2MConfig;
743*53ee8cc1Swenshuai.xi     MS_U8 M2MAlgorithm, M2MOpration;
744*53ee8cc1Swenshuai.xi 
745*53ee8cc1Swenshuai.xi     M2MChannelDevice_Cookie_t *pM2MChCookie = (M2MChannelDevice_Cookie_t *)M2MChannel_cookie;
746*53ee8cc1Swenshuai.xi 
747*53ee8cc1Swenshuai.xi     memset(&tM2MConfig,0x0,sizeof(M2MConfig_t));
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi     M2MAlgorithm = tM2MConfig.Algorithm = pM2MChCookie->Algorithm;
750*53ee8cc1Swenshuai.xi     M2MOpration  = tM2MConfig.Operation = pM2MChCookie->Operation;
751*53ee8cc1Swenshuai.xi     tM2MConfig.en_swKeys = pM2MChCookie->en_swKeys;
752*53ee8cc1Swenshuai.xi     tM2MConfig.pInput = in_data;
753*53ee8cc1Swenshuai.xi     tM2MConfig.pOutput = out_data;
754*53ee8cc1Swenshuai.xi     tM2MConfig.size  = data_size;
755*53ee8cc1Swenshuai.xi     tM2MConfig.clearkey_length = pM2MChCookie->clearkey_length;
756*53ee8cc1Swenshuai.xi     memcpy(tM2MConfig.clearkey, pM2MChCookie->clearkey, tM2MConfig.clearkey_length);
757*53ee8cc1Swenshuai.xi 
758*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter , M2MChannel_cookie = 0x%p\n", M2MChannel_cookie));
759*53ee8cc1Swenshuai.xi 
760*53ee8cc1Swenshuai.xi     NSK_TRACE(("desc_size = %x,data_size=%x\n",desc_size,data_size));
761*53ee8cc1Swenshuai.xi     NSK_TRACE(("in_data = 0x%p,out_data=0x%p\n",in_data,out_data));
762*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MAlgorithm = 0x%x, M2MOpration = 0x%x\n",M2MAlgorithm,M2MOpration));
763*53ee8cc1Swenshuai.xi 
764*53ee8cc1Swenshuai.xi     desc_tag = *pDesc;
765*53ee8cc1Swenshuai.xi     size = desc_size;
766*53ee8cc1Swenshuai.xi     pDesc = (MS_U8*)desc;
767*53ee8cc1Swenshuai.xi 
768*53ee8cc1Swenshuai.xi     while(size>=3)
769*53ee8cc1Swenshuai.xi     {
770*53ee8cc1Swenshuai.xi         TagSwitch = pDesc[0] ;
771*53ee8cc1Swenshuai.xi         descriptor_length = pDesc[1];
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi         switch(TagSwitch)
774*53ee8cc1Swenshuai.xi         {
775*53ee8cc1Swenshuai.xi             case NSK2HDI_DMA_IV1_DESC_TAG:
776*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_DMA_IV1_DESC_TAG, descriptor_length = 0x%02x\n",descriptor_length));
777*53ee8cc1Swenshuai.xi                 memcpy(dma_iv1_desc.iv_payload,&pDesc[2],descriptor_length);
778*53ee8cc1Swenshuai.xi                 memcpy(tM2MConfig.IV1,&pDesc[2],descriptor_length);
779*53ee8cc1Swenshuai.xi             #if 0
780*53ee8cc1Swenshuai.xi                 printf("NSK2HDI_DMA_IV1, ");
781*53ee8cc1Swenshuai.xi                 for(i=0;i<descriptor_length;i++)
782*53ee8cc1Swenshuai.xi                 {
783*53ee8cc1Swenshuai.xi                     printf("%x, ",tM2MConfig.IV1[i]);
784*53ee8cc1Swenshuai.xi                 }
785*53ee8cc1Swenshuai.xi                 printf("\n");
786*53ee8cc1Swenshuai.xi             #endif
787*53ee8cc1Swenshuai.xi                 break;
788*53ee8cc1Swenshuai.xi 
789*53ee8cc1Swenshuai.xi             case NSK2HDI_DMA_IV2_DESC_TAG:
790*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_DMA_IV2_DESC_TAG, descriptor_length = 0x%02x\n",descriptor_length));
791*53ee8cc1Swenshuai.xi                 memcpy(dma_iv2_desc.iv_payload,&pDesc[2],descriptor_length);
792*53ee8cc1Swenshuai.xi                 memcpy(tM2MConfig.IV2,&pDesc[2],descriptor_length);
793*53ee8cc1Swenshuai.xi             #if 0
794*53ee8cc1Swenshuai.xi                 printf("NSK2HDI_DMA_IV2, ");
795*53ee8cc1Swenshuai.xi                 for(i=0;i<descriptor_length;i++)
796*53ee8cc1Swenshuai.xi                 {
797*53ee8cc1Swenshuai.xi                     printf("%x, ",tM2MConfig.IV2[i]);
798*53ee8cc1Swenshuai.xi                 }
799*53ee8cc1Swenshuai.xi                 printf("\n");
800*53ee8cc1Swenshuai.xi             #endif
801*53ee8cc1Swenshuai.xi                 break;
802*53ee8cc1Swenshuai.xi 
803*53ee8cc1Swenshuai.xi             case NSK2HDI_DMA_OPERATION_DESC_TAG:
804*53ee8cc1Swenshuai.xi                 operation = pDesc[2];
805*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_DMA_OPERATION_DESC_TAG, operation = 0x%02x\n",operation));
806*53ee8cc1Swenshuai.xi                 break;
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi             case NSK2HDI_DMA_SRC_MEMORY_TYPE_DESC_TAG:
809*53ee8cc1Swenshuai.xi                 type = pDesc[2];
810*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_DMA_SRC_MEMORY_TYPE_DESC_TAG, type = 0x%02x\n",type));
811*53ee8cc1Swenshuai.xi                 if(NSK2HDI_DMA_CONTIGUOUS_MEMORY_TYPE == type)
812*53ee8cc1Swenshuai.xi                 {
813*53ee8cc1Swenshuai.xi                     NSK_TRACE(("DMA_SRC_MEMORY NSK2HDI_DMA_CONTIGUOUS_MEMORY_TYPE\n"));
814*53ee8cc1Swenshuai.xi                 }
815*53ee8cc1Swenshuai.xi                 break;
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi             case NSK2HDI_DMA_DST_MEMORY_TYPE_DESC_TAG:
818*53ee8cc1Swenshuai.xi                 type = pDesc[2];
819*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_DMA_DST_MEMORY_TYPE_DESC_TAG, type = 0x%02x\n",type));
820*53ee8cc1Swenshuai.xi                 if(NSK2HDI_DMA_CONTIGUOUS_MEMORY_TYPE == type)
821*53ee8cc1Swenshuai.xi                 {
822*53ee8cc1Swenshuai.xi                     NSK_TRACE(("DMA_DST_MEMORY NSK2HDI_DMA_CONTIGUOUS_MEMORY_TYPE\n"));
823*53ee8cc1Swenshuai.xi                 }
824*53ee8cc1Swenshuai.xi                 break;
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi             default:
827*53ee8cc1Swenshuai.xi                 NSK_ERROR(("unknown desc tag\n"));
828*53ee8cc1Swenshuai.xi                 break;
829*53ee8cc1Swenshuai.xi         }
830*53ee8cc1Swenshuai.xi         size -= (descriptor_length+2);
831*53ee8cc1Swenshuai.xi         pDesc += (descriptor_length+2);
832*53ee8cc1Swenshuai.xi     }
833*53ee8cc1Swenshuai.xi 
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi     //memcpy(out_data,in_data,data_size);
836*53ee8cc1Swenshuai.xi 
837*53ee8cc1Swenshuai.xi     NSKHDI_WriteM2MTest(&tM2MConfig);
838*53ee8cc1Swenshuai.xi 
839*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
840*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
841*53ee8cc1Swenshuai.xi }
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi /*****************************************************************************\
844*53ee8cc1Swenshuai.xi   \ M2M devices - Channle Group device
845*53ee8cc1Swenshuai.xi \*****************************************************************************/
846*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelGroup_Open(NSK2HDI_DEVICE_ID M2MChannelGroup_ID,NSK2HDI_HANDLE * M2MChannelGroup_handle)847*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelGroup_Open (NSK2HDI_DEVICE_ID M2MChannelGroup_ID,
848*53ee8cc1Swenshuai.xi                                             NSK2HDI_HANDLE    *M2MChannelGroup_handle)
849*53ee8cc1Swenshuai.xi {
850*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
851*53ee8cc1Swenshuai.xi     MS_U32 i;
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MChannelGroup_ID = %x\n",M2MChannelGroup_ID));
854*53ee8cc1Swenshuai.xi 
855*53ee8cc1Swenshuai.xi     if(*M2MChannelGroup_handle != NULL)
856*53ee8cc1Swenshuai.xi     {
857*53ee8cc1Swenshuai.xi         NSK_ERROR(("M2MChannelGroup_handle no NULL\n"));
858*53ee8cc1Swenshuai.xi     }
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi     for(i = 0; i < NSK2_M2MChannelGroup_Number; i++)
861*53ee8cc1Swenshuai.xi     {
862*53ee8cc1Swenshuai.xi         if (nsk_m2mgrp[i].alloc == FALSE)
863*53ee8cc1Swenshuai.xi         {
864*53ee8cc1Swenshuai.xi             break;
865*53ee8cc1Swenshuai.xi         }
866*53ee8cc1Swenshuai.xi     }
867*53ee8cc1Swenshuai.xi     if (i == NSK2_M2MChannelGroup_Number)
868*53ee8cc1Swenshuai.xi     {
869*53ee8cc1Swenshuai.xi         return (NSK2HDI_STATUS_FAILED);
870*53ee8cc1Swenshuai.xi     }
871*53ee8cc1Swenshuai.xi 
872*53ee8cc1Swenshuai.xi     nsk_m2mgrp[i].alloc = TRUE;
873*53ee8cc1Swenshuai.xi     nsk_m2mgrp[i].handle_id = i;
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi     *M2MChannelGroup_handle = (NSK2HDI_HANDLE *)&nsk_m2mgrp[i].handle_id;
876*53ee8cc1Swenshuai.xi 
877*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MChannelGroup_handle = 0x%x\n",nsk_m2mgrp[i].handle_id));
878*53ee8cc1Swenshuai.xi 
879*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
880*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
881*53ee8cc1Swenshuai.xi }
882*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelGroup_Close(NSK2HDI_HANDLE M2MChannelGroup_handle)883*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelGroup_Close (NSK2HDI_HANDLE M2MChannelGroup_handle)
884*53ee8cc1Swenshuai.xi {
885*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
886*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannelGroup_handle);
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi     nsk_m2mgrp[u32Handle].alloc = FALSE;
889*53ee8cc1Swenshuai.xi     nsk_m2mgrp[u32Handle].handle_id = 0;
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
892*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi 
895*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelGroup_GetProperties(NSK2HDI_HANDLE M2MChannelGroup_handle,NDS_ULONG request_id,NDS_ULONG * desc_size,NDS_UBYTE * desc)896*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelGroup_GetProperties( NSK2HDI_HANDLE  M2MChannelGroup_handle,
897*53ee8cc1Swenshuai.xi                                                      NDS_ULONG       request_id,
898*53ee8cc1Swenshuai.xi                                                      NDS_ULONG       *desc_size,
899*53ee8cc1Swenshuai.xi                                                      NDS_UBYTE       *desc)
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi     if(request_id != NSK2HDI_M2MCHANNELGROUP_READ_ALL_DESCRIPTORS_REQUEST)
904*53ee8cc1Swenshuai.xi     {
905*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_INVALID_REQUEST;
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi 
908*53ee8cc1Swenshuai.xi     if(desc == NULL)
909*53ee8cc1Swenshuai.xi     {
910*53ee8cc1Swenshuai.xi         MDrv_NSK2_GetM2MProperties((MS_U32*)desc_size, (MS_U8*)desc);
911*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_OK;
912*53ee8cc1Swenshuai.xi     }
913*53ee8cc1Swenshuai.xi 
914*53ee8cc1Swenshuai.xi     if(*desc_size == 0)
915*53ee8cc1Swenshuai.xi     {
916*53ee8cc1Swenshuai.xi         return NSK2HDI_STATUS_INVALID_REQUEST;
917*53ee8cc1Swenshuai.xi     }
918*53ee8cc1Swenshuai.xi 
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi     MDrv_NSK2_GetM2MProperties((MS_U32*)desc_size, (MS_U8*)desc);
921*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
922*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
923*53ee8cc1Swenshuai.xi }
924*53ee8cc1Swenshuai.xi 
925*53ee8cc1Swenshuai.xi /*****************************************************************************\
926*53ee8cc1Swenshuai.xi   \ M2M devices - Channle device
927*53ee8cc1Swenshuai.xi \*****************************************************************************/
928*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelDevice_Open(NSK2HDI_DEVICE_ID M2MChannelGroup_ID,NSK2HDI_HANDLE * M2MChannel_handle)929*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_Open (NSK2HDI_DEVICE_ID M2MChannelGroup_ID,
930*53ee8cc1Swenshuai.xi                                              NSK2HDI_HANDLE    *M2MChannel_handle)
931*53ee8cc1Swenshuai.xi {
932*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MChannelGroup_ID = %x\n",M2MChannelGroup_ID));
935*53ee8cc1Swenshuai.xi 
936*53ee8cc1Swenshuai.xi     MS_U32 i;
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi     if(*M2MChannel_handle != NULL)
939*53ee8cc1Swenshuai.xi     {
940*53ee8cc1Swenshuai.xi         NSK_ERROR(("CmChannele_handle no NULL\n"));
941*53ee8cc1Swenshuai.xi     }
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi     for(i = 0; i < NSK2_M2MChannel_Number; i++)
944*53ee8cc1Swenshuai.xi     {
945*53ee8cc1Swenshuai.xi         if (nsk_m2m[i].alloc == FALSE)
946*53ee8cc1Swenshuai.xi         {
947*53ee8cc1Swenshuai.xi             break;
948*53ee8cc1Swenshuai.xi         }
949*53ee8cc1Swenshuai.xi     }
950*53ee8cc1Swenshuai.xi     if (i == NSK2_M2MChannel_Number)
951*53ee8cc1Swenshuai.xi     {
952*53ee8cc1Swenshuai.xi         return (NSK2HDI_STATUS_FAILED);
953*53ee8cc1Swenshuai.xi     }
954*53ee8cc1Swenshuai.xi 
955*53ee8cc1Swenshuai.xi     nsk_m2m[i].alloc = TRUE;
956*53ee8cc1Swenshuai.xi     nsk_m2m[i].handle_id = i;
957*53ee8cc1Swenshuai.xi 
958*53ee8cc1Swenshuai.xi     *M2MChannel_handle = (NSK2HDI_HANDLE *)&nsk_m2m[i].handle_id;
959*53ee8cc1Swenshuai.xi 
960*53ee8cc1Swenshuai.xi     NSK_TRACE(("M2MChannel_handle = 0x%x\n",nsk_m2m[i].handle_id));
961*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
962*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelDevice_Close(NSK2HDI_HANDLE M2MChannel_handle)965*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_Close (NSK2HDI_HANDLE M2MChannel_handle)
966*53ee8cc1Swenshuai.xi {
967*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
968*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannel_handle);
969*53ee8cc1Swenshuai.xi 
970*53ee8cc1Swenshuai.xi     nsk_m2m[u32Handle].alloc = FALSE;
971*53ee8cc1Swenshuai.xi     nsk_m2m[u32Handle].handle_id = 0;
972*53ee8cc1Swenshuai.xi 
973*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
974*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
975*53ee8cc1Swenshuai.xi }
976*53ee8cc1Swenshuai.xi 
977*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelDevice_GetCookie(NSK2HDI_HANDLE M2MChannele_handle,void ** cookie)978*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_GetCookie(NSK2HDI_HANDLE M2MChannele_handle,
979*53ee8cc1Swenshuai.xi                                                  void **cookie)
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
982*53ee8cc1Swenshuai.xi 
983*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannele_handle);
984*53ee8cc1Swenshuai.xi 
985*53ee8cc1Swenshuai.xi     *cookie = pM2MChannelcookie[u32Handle];
986*53ee8cc1Swenshuai.xi 
987*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit, cookie = %p\n",*cookie));
988*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
989*53ee8cc1Swenshuai.xi }
990*53ee8cc1Swenshuai.xi 
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi /*	configure cookie according to given descriptor.
993*53ee8cc1Swenshuai.xi 	later cookie will be used to set m2m params @ WriteData		*/
NSKHDI_M2MChannelDevice_Configure(NSK2HDI_HANDLE M2MChannele_handle,NDS_ULONG desc_size,const NDS_UBYTE * desc)994*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_Configure (NSK2HDI_HANDLE  M2MChannele_handle,
995*53ee8cc1Swenshuai.xi                                                   NDS_ULONG       desc_size,
996*53ee8cc1Swenshuai.xi                                                   const NDS_UBYTE *desc)
997*53ee8cc1Swenshuai.xi {
998*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannele_handle);
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi     MS_U8 *pDesc = (MS_U8 *)desc;
1003*53ee8cc1Swenshuai.xi     NDS_ULONG   size;
1004*53ee8cc1Swenshuai.xi     MS_U8 TagSwitch;
1005*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
1006*53ee8cc1Swenshuai.xi     MS_U8 operation;
1007*53ee8cc1Swenshuai.xi     MS_U8 algorithm;
1008*53ee8cc1Swenshuai.xi 
1009*53ee8cc1Swenshuai.xi     gpM2MChCookie = (M2MChannelDevice_Cookie_t *)pM2MChannelcookie[u32Handle];
1010*53ee8cc1Swenshuai.xi 
1011*53ee8cc1Swenshuai.xi     NSK_TRACE(("gpM2MChCookie = 0x%p\n", gpM2MChCookie));
1012*53ee8cc1Swenshuai.xi 
1013*53ee8cc1Swenshuai.xi     size = desc_size;
1014*53ee8cc1Swenshuai.xi     pDesc = (MS_U8*)desc;
1015*53ee8cc1Swenshuai.xi 
1016*53ee8cc1Swenshuai.xi     while(size>=3)
1017*53ee8cc1Swenshuai.xi     {
1018*53ee8cc1Swenshuai.xi         TagSwitch = pDesc[0] ;
1019*53ee8cc1Swenshuai.xi         descriptor_length = pDesc[1];
1020*53ee8cc1Swenshuai.xi 
1021*53ee8cc1Swenshuai.xi         switch(TagSwitch)
1022*53ee8cc1Swenshuai.xi         {
1023*53ee8cc1Swenshuai.xi             case NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG:
1024*53ee8cc1Swenshuai.xi                 algorithm = pDesc[2];
1025*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG, algorithm = 0x%02x\n",algorithm));
1026*53ee8cc1Swenshuai.xi                 gpM2MChCookie->Algorithm = algorithm;
1027*53ee8cc1Swenshuai.xi                 break;
1028*53ee8cc1Swenshuai.xi 
1029*53ee8cc1Swenshuai.xi             case NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG:
1030*53ee8cc1Swenshuai.xi                 operation = pDesc[2];
1031*53ee8cc1Swenshuai.xi                 NSK_TRACE(("NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG, operation = 0x%02x\n",operation));
1032*53ee8cc1Swenshuai.xi                 gpM2MChCookie->Operation = operation;
1033*53ee8cc1Swenshuai.xi                 break;
1034*53ee8cc1Swenshuai.xi 
1035*53ee8cc1Swenshuai.xi             default:
1036*53ee8cc1Swenshuai.xi                 NSK_ERROR(("unknown desc tag\n"));
1037*53ee8cc1Swenshuai.xi                 break;
1038*53ee8cc1Swenshuai.xi         }
1039*53ee8cc1Swenshuai.xi         size -= (descriptor_length+2);
1040*53ee8cc1Swenshuai.xi         pDesc += (descriptor_length+2);
1041*53ee8cc1Swenshuai.xi     }
1042*53ee8cc1Swenshuai.xi 
1043*53ee8cc1Swenshuai.xi #if 0
1044*53ee8cc1Swenshuai.xi     if(desc != NULL)
1045*53ee8cc1Swenshuai.xi     {
1046*53ee8cc1Swenshuai.xi         M2MCh_Operation_Desc_t *pM2MChOp = (M2MCh_Operation_Desc_t *)desc;
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi         NSK_TRACE(("desc_size = %x, tag = %x , operation = %x\n",desc_size, pM2MChOp->descriptor_tag, pM2MChOp->operation));
1049*53ee8cc1Swenshuai.xi 
1050*53ee8cc1Swenshuai.xi     #if 0
1051*53ee8cc1Swenshuai.xi         if(pM2MChOp->descriptor_tag == NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG)
1052*53ee8cc1Swenshuai.xi         {
1053*53ee8cc1Swenshuai.xi             NSK_TRACE(("set algorithm = %d\n",pM2MChOp->operation));
1054*53ee8cc1Swenshuai.xi         }
1055*53ee8cc1Swenshuai.xi         else if (pM2MChOp->descriptor_tag == NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG)
1056*53ee8cc1Swenshuai.xi         {
1057*53ee8cc1Swenshuai.xi             NSK_TRACE(("set operation = %d\n",pM2MChOp->operation));
1058*53ee8cc1Swenshuai.xi         }
1059*53ee8cc1Swenshuai.xi 
1060*53ee8cc1Swenshuai.xi         //#define NSK2HDI_M2MCHANNEL_DECRYPT_OPERATION        0x01U /*!< @brief Data chunk descrambling operation */
1061*53ee8cc1Swenshuai.xi         //#define NSK2HDI_M2MCHANNEL_ENCRYPT_OPERATION        0x02U /*!< @brief Data chunk scrambling operation */
1062*53ee8cc1Swenshuai.xi     #endif
1063*53ee8cc1Swenshuai.xi         gpM2MChCookie->u32Algorithm = pM2MChOp->operation;
1064*53ee8cc1Swenshuai.xi     }
1065*53ee8cc1Swenshuai.xi     else
1066*53ee8cc1Swenshuai.xi     {
1067*53ee8cc1Swenshuai.xi         NSK_TRACE(("desc == NULL\n"));
1068*53ee8cc1Swenshuai.xi     }
1069*53ee8cc1Swenshuai.xi #endif
1070*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
1071*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
1072*53ee8cc1Swenshuai.xi }
1073*53ee8cc1Swenshuai.xi 
1074*53ee8cc1Swenshuai.xi 
1075*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelDevice_WriteM2MKey(NSK2HDI_HANDLE M2MChannele_handle,NDS_ULONG desc_size,const NDS_UBYTE * desc)1076*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_WriteM2MKey(NSK2HDI_HANDLE  M2MChannele_handle,
1077*53ee8cc1Swenshuai.xi                                                    NDS_ULONG       desc_size,
1078*53ee8cc1Swenshuai.xi                                                    const NDS_UBYTE *desc)
1079*53ee8cc1Swenshuai.xi {
1080*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
1081*53ee8cc1Swenshuai.xi //    MS_U32 i;
1082*53ee8cc1Swenshuai.xi     MS_U8 *pDesc = (MS_U8 *)desc;
1083*53ee8cc1Swenshuai.xi     NDS_ULONG   size;
1084*53ee8cc1Swenshuai.xi     MS_U8 TagSwitch;
1085*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
1086*53ee8cc1Swenshuai.xi     MS_U8 operation;
1087*53ee8cc1Swenshuai.xi     MS_U8 algorithm;
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannele_handle);
1090*53ee8cc1Swenshuai.xi     M2MChannelDevice_Cookie_t *pM2MChCookie = (M2MChannelDevice_Cookie_t *)pM2MChannelcookie[u32Handle];
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi     if(desc != NULL)
1093*53ee8cc1Swenshuai.xi     {
1094*53ee8cc1Swenshuai.xi         size = desc_size;
1095*53ee8cc1Swenshuai.xi         pDesc = (MS_U8*)desc;
1096*53ee8cc1Swenshuai.xi 
1097*53ee8cc1Swenshuai.xi         while(size>=3)
1098*53ee8cc1Swenshuai.xi         {
1099*53ee8cc1Swenshuai.xi             TagSwitch = pDesc[0] ;
1100*53ee8cc1Swenshuai.xi             descriptor_length = pDesc[1];
1101*53ee8cc1Swenshuai.xi 
1102*53ee8cc1Swenshuai.xi             switch(TagSwitch)
1103*53ee8cc1Swenshuai.xi             {
1104*53ee8cc1Swenshuai.xi                 case NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG:
1105*53ee8cc1Swenshuai.xi                     algorithm = pDesc[2];
1106*53ee8cc1Swenshuai.xi                     NSK_TRACE(("NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG, algorithm = %x\n",algorithm));
1107*53ee8cc1Swenshuai.xi                     break;
1108*53ee8cc1Swenshuai.xi 
1109*53ee8cc1Swenshuai.xi                 case NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG:
1110*53ee8cc1Swenshuai.xi                     operation = pDesc[2];
1111*53ee8cc1Swenshuai.xi                     NSK_TRACE(("NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG, operation = %x\n",operation));
1112*53ee8cc1Swenshuai.xi                     break;
1113*53ee8cc1Swenshuai.xi 
1114*53ee8cc1Swenshuai.xi 
1115*53ee8cc1Swenshuai.xi                 case NSK2HDI_M2MCHANNEL_CLEAR_SWKEY_DESC_TAG:
1116*53ee8cc1Swenshuai.xi                     NSK_TRACE(("set clear key\n"));
1117*53ee8cc1Swenshuai.xi                     pM2MChCookie->clearkey_length = descriptor_length;
1118*53ee8cc1Swenshuai.xi                     memcpy(pM2MChCookie->clearkey, &pDesc[2], descriptor_length);
1119*53ee8cc1Swenshuai.xi             #if 0
1120*53ee8cc1Swenshuai.xi                     for(i=0;i<pM2MChCookie->clearkey_length;i++)
1121*53ee8cc1Swenshuai.xi                     {
1122*53ee8cc1Swenshuai.xi                         printf("%x, ",pM2MChCookie->clearkey[i]);
1123*53ee8cc1Swenshuai.xi                     }
1124*53ee8cc1Swenshuai.xi                     printf("\n");
1125*53ee8cc1Swenshuai.xi             #endif
1126*53ee8cc1Swenshuai.xi                     pM2MChCookie->en_swKeys = TRUE;
1127*53ee8cc1Swenshuai.xi                     break;
1128*53ee8cc1Swenshuai.xi 
1129*53ee8cc1Swenshuai.xi                 default:
1130*53ee8cc1Swenshuai.xi                     NSK_ERROR(("unknown desc tag\n"));
1131*53ee8cc1Swenshuai.xi                     break;
1132*53ee8cc1Swenshuai.xi             }
1133*53ee8cc1Swenshuai.xi             size -= (descriptor_length+2);
1134*53ee8cc1Swenshuai.xi             pDesc += (descriptor_length+2);
1135*53ee8cc1Swenshuai.xi         }
1136*53ee8cc1Swenshuai.xi     }
1137*53ee8cc1Swenshuai.xi     else
1138*53ee8cc1Swenshuai.xi     {
1139*53ee8cc1Swenshuai.xi         NSK_TRACE(("desc == NULL\n"));
1140*53ee8cc1Swenshuai.xi     }
1141*53ee8cc1Swenshuai.xi 
1142*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
1143*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
1144*53ee8cc1Swenshuai.xi }
1145*53ee8cc1Swenshuai.xi 
NSKHDI_M2MChannelDevice_NSKWriteM2MKey(NSK2HDI_HANDLE M2MChannele_handle,NDS_ULONG desc_size,const NDS_UBYTE * desc)1146*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_M2MChannelDevice_NSKWriteM2MKey(NSK2HDI_HANDLE  M2MChannele_handle,
1147*53ee8cc1Swenshuai.xi                                                       NDS_ULONG       desc_size,
1148*53ee8cc1Swenshuai.xi                                                       const NDS_UBYTE *desc)
1149*53ee8cc1Swenshuai.xi {
1150*53ee8cc1Swenshuai.xi     NSK_TRACE(("Enter\n"));
1151*53ee8cc1Swenshuai.xi 
1152*53ee8cc1Swenshuai.xi     MS_U8 *pDesc = (MS_U8 *)desc;
1153*53ee8cc1Swenshuai.xi     NDS_ULONG   size;
1154*53ee8cc1Swenshuai.xi     MS_U8 TagSwitch;
1155*53ee8cc1Swenshuai.xi     MS_U8 descriptor_length;
1156*53ee8cc1Swenshuai.xi     MS_U8 operation;
1157*53ee8cc1Swenshuai.xi     MS_U8 algorithm = 1;
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi     MS_U32 u32Handle = NSKHDI_GetHandle(M2MChannele_handle);
1160*53ee8cc1Swenshuai.xi     M2MChannelDevice_Cookie_t *pM2MChCookie = (M2MChannelDevice_Cookie_t *)pM2MChannelcookie[u32Handle];
1161*53ee8cc1Swenshuai.xi 
1162*53ee8cc1Swenshuai.xi     if(desc != NULL)
1163*53ee8cc1Swenshuai.xi     {
1164*53ee8cc1Swenshuai.xi         M2MCh_Operation_Desc_t *pM2MOp = (M2MCh_Operation_Desc_t *)desc;
1165*53ee8cc1Swenshuai.xi 
1166*53ee8cc1Swenshuai.xi         NSK_TRACE(("desc_size = %x, length = %x, operation = %x\n",desc_size,pM2MOp->descriptor_length,pM2MOp->operation));
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi         size = desc_size;
1169*53ee8cc1Swenshuai.xi         pDesc = (MS_U8*)desc;
1170*53ee8cc1Swenshuai.xi 
1171*53ee8cc1Swenshuai.xi         while(size>=3)
1172*53ee8cc1Swenshuai.xi         {
1173*53ee8cc1Swenshuai.xi             TagSwitch = pDesc[0] ;
1174*53ee8cc1Swenshuai.xi             descriptor_length = pDesc[1];
1175*53ee8cc1Swenshuai.xi 
1176*53ee8cc1Swenshuai.xi             switch(TagSwitch)
1177*53ee8cc1Swenshuai.xi             {
1178*53ee8cc1Swenshuai.xi                 case NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG:
1179*53ee8cc1Swenshuai.xi                     algorithm = pDesc[2];
1180*53ee8cc1Swenshuai.xi                     NSK_TRACE(("NSK2HDI_M2MCHANNEL_ALGORITHM_DESC_TAG, algorithm = %x\n",algorithm));
1181*53ee8cc1Swenshuai.xi                     break;
1182*53ee8cc1Swenshuai.xi 
1183*53ee8cc1Swenshuai.xi                 case NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG:
1184*53ee8cc1Swenshuai.xi                     operation = pDesc[2];
1185*53ee8cc1Swenshuai.xi                     NSK_TRACE(("NSK2HDI_M2MCHANNEL_OPERATION_DESC_TAG, operation = %x\n",operation));
1186*53ee8cc1Swenshuai.xi                     break;
1187*53ee8cc1Swenshuai.xi 
1188*53ee8cc1Swenshuai.xi                 default:
1189*53ee8cc1Swenshuai.xi                     NSK_ERROR(("unknown desc tag\n"));
1190*53ee8cc1Swenshuai.xi                     break;
1191*53ee8cc1Swenshuai.xi             }
1192*53ee8cc1Swenshuai.xi             size -= (descriptor_length+2);
1193*53ee8cc1Swenshuai.xi             pDesc += (descriptor_length+2);
1194*53ee8cc1Swenshuai.xi         }
1195*53ee8cc1Swenshuai.xi 
1196*53ee8cc1Swenshuai.xi         pM2MChCookie->en_swKeys = FALSE;
1197*53ee8cc1Swenshuai.xi         MDrv_NSK21_WriteM2MKey(algorithm);
1198*53ee8cc1Swenshuai.xi     }
1199*53ee8cc1Swenshuai.xi     else
1200*53ee8cc1Swenshuai.xi     {
1201*53ee8cc1Swenshuai.xi         NSK_TRACE(("desc == NULL\n"));
1202*53ee8cc1Swenshuai.xi     }
1203*53ee8cc1Swenshuai.xi 
1204*53ee8cc1Swenshuai.xi     NSK_TRACE(("Exit\n"));
1205*53ee8cc1Swenshuai.xi     return NSK2HDI_STATUS_OK;
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi }
1208*53ee8cc1Swenshuai.xi 
1209