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