1
2 #include <stdlib.h>
3 #include <string.h>
4 #include "MsCommon.h"
5
6 #include "nsk_dbg.h"
7
8 #include "nsk_282.h"
9 #include "nsk_dbg.h"
10 #include "nsk_3014.h"
11 #include "hdi_121.h"
12 #include "drvNSK2.h"
13 #include "nsk2hdi_header.h"
14 #include "drvDSCMB.h"
15
16 /*****************************************************************************\
17 \Definitions
18 \*****************************************************************************/
19 //#define NSK2DataProbe
20 #define MaxNSK2HandleNum 10
21
22
23 /*****************************************************************************\
24 \ typedef struct
25 \*****************************************************************************/
26
27 typedef struct _NSK2_Info_
28 {
29 MS_BOOL alloc;
30 NDS_ULONG Nsk_ID;
31 MS_U32 handle_id;
32 } NSK2_Info;
33
34
35 /*****************************************************************************\
36 \ local variables
37 \*****************************************************************************/
38
39
40 /*****************************************************************************\
41 \ global variables
42 \*****************************************************************************/
43 HDINSK2_NSKEVENT_CB_FN *_gcb_routine = NULL;
44 void *_gNSKcookie = NULL;
45 NSK2HDI_HANDLE _gNsk_handle;
46
47 NSK2_Info NSK2Info[MaxNSK2HandleNum];
48
49
50 /*****************************************************************************\
51 \ NSK2HDI general functions
52 \*****************************************************************************/
53
54
55 /*****************************************************************************\
56 \ NSK device
57 \*****************************************************************************/
58
59
60
NSKHDI_NskDevice_Open(NSK2HDI_DEVICE_ID Nsk_ID,NSK2HDI_HANDLE * Nsk_handle)61 NSK2HDI_STATUS NSKHDI_NskDevice_Open (NSK2HDI_DEVICE_ID Nsk_ID,
62 NSK2HDI_HANDLE *Nsk_handle)
63 {
64 NSK_TRACE(("Enter, Nsk_ID = %x\n",Nsk_ID));
65
66 MS_U32 i;
67
68 if(*Nsk_handle != NULL)
69 {
70 NSK_ERROR(("Nsk_handle is not NULL\n"));
71 }
72
73 for(i = 0; i < MaxNSK2HandleNum; i++)
74 {
75 if (NSK2Info[i].alloc == FALSE)
76 {
77 break;
78 }
79 }
80 if (i == MaxNSK2HandleNum)
81 {
82 return (NSK2HDI_STATUS_FAILED);
83 }
84
85
86 //should allocate dscmb here....
87 NSK2Info[i].alloc = TRUE;
88 NSK2Info[i].handle_id = i;
89 NSK2Info[i].Nsk_ID = Nsk_ID;
90
91
92 *Nsk_handle = (NSK2HDI_HANDLE)&NSK2Info[i].handle_id;
93
94 NSK_TRACE(("Nsk_ID = 0x%x, NSK_handle = 0x%x\n",Nsk_ID,NSK2Info[i].handle_id));
95 NSK_TRACE(("Exit\n"));
96 return NSK2HDI_STATUS_OK;
97 }
98
NSKHDI_NskDevice_Close(NSK2HDI_HANDLE Nsk_handle)99 NSK2HDI_STATUS NSKHDI_NskDevice_Close (NSK2HDI_HANDLE Nsk_handle)
100 {
101 NSK_TRACE(("Enter\n"));
102 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
103 NSK_TRACE(("u32Handle = 0x%08x\n",u32Handle));
104
105 NSK2Info[u32Handle].alloc = FALSE;
106 NSK2Info[u32Handle].handle_id = 0;
107
108
109 NSK_TRACE(("Exit\n"));
110 return NSK2HDI_STATUS_OK;
111 }
112
NSKHDI_NskDevice_Read8(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG register_offset,NDS_ULONG data_size,NDS_UBYTE * data)113 NSK2HDI_STATUS NSKHDI_NskDevice_Read8 (NSK2HDI_HANDLE Nsk_handle,
114 NDS_ULONG register_offset,
115 NDS_ULONG data_size,
116 NDS_UBYTE *data)
117 {
118
119 //call to read data from NSK2 register...
120 NSK_TRACE(("Enter\n"));
121 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
122 NSK_TRACE(("Nsk_handle = 0x%x, offset = 0x%x, data_size = 0x%x\n", u32Handle,register_offset,data_size));
123
124 MDrv_NSK2_ReadData8(register_offset,data_size,data);
125
126 #ifdef NSK2DataProbe
127 NDS_UBYTE *pData = (NDS_UBYTE *)data;
128 NDS_ULONG u32Data_Size = data_size;
129 NSK_TRACE(("\n( "));
130 while(u32Data_Size>0)
131 {
132 printf("%x, ",*pData++);
133 u32Data_Size --;
134 }
135 printf(")\n");
136 #endif
137
138 NSK_TRACE(("Exit\n"));
139 return NSK2HDI_STATUS_OK;
140 }
141
142
NSKHDI_NskDevice_Write8(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG register_offset,NDS_ULONG data_size,const NDS_UBYTE * data)143 NSK2HDI_STATUS NSKHDI_NskDevice_Write8 (NSK2HDI_HANDLE Nsk_handle,
144 NDS_ULONG register_offset,
145 NDS_ULONG data_size,
146 const NDS_UBYTE *data)
147 {
148 NSK_TRACE(("Enter\n"));
149 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
150 NSK_TRACE(("Nsk_handle = 0x%x, offset = 0x%x, data_size = 0x%x\n", u32Handle,register_offset,data_size));
151
152 #ifdef NSK2DataProbe
153 NDS_UBYTE *pData = (NDS_UBYTE *)data;
154 NDS_ULONG u32Data_Size = data_size;
155 NSK_TRACE(("\n( "));
156 while(u32Data_Size>0)
157 {
158 printf("%x, ",*pData++);
159 u32Data_Size --;
160 }
161 printf(")\n");
162 #endif
163
164
165 MDrv_NSK2_WriteData8(register_offset,data_size,(MS_U8 *)data);
166
167 NSK_TRACE(("Exit\n"));
168 return NSK2HDI_STATUS_OK;
169 }
170
NSKHDI_NskDevice_Read32(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG register_offset,NDS_ULONG data_size,NDS_ULONG * data)171 NSK2HDI_STATUS NSKHDI_NskDevice_Read32 (NSK2HDI_HANDLE Nsk_handle,
172 NDS_ULONG register_offset,
173 NDS_ULONG data_size,
174 NDS_ULONG *data)
175 {
176 NSK_TRACE(("Enter\n"));
177
178 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
179 NSK_TRACE(("Nsk_handle = 0x%x, offset = 0x%x, data_size = 0x%x\n", u32Handle,register_offset,data_size));
180
181
182 MDrv_NSK2_ReadData32(register_offset,data_size, (MS_U32 *)data);
183
184 #ifdef NSK2DataProbe
185 NDS_ULONG *pData = (NDS_ULONG *)data;
186 NDS_ULONG u32Data_Size = data_size;
187
188 NSK_TRACE(("\n( "));
189
190 while(u32Data_Size>0)
191 {
192 printf("%x, ",*pData++);
193 u32Data_Size --;
194 }
195 printf(")\n");
196 #endif
197
198 NSK_TRACE(("Exit\n"));
199 return NSK2HDI_STATUS_OK;
200 }
201
NSKHDI_NskDevice_Write32(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG register_offset,NDS_ULONG data_size,const NDS_ULONG * data)202 NSK2HDI_STATUS NSKHDI_NskDevice_Write32 (NSK2HDI_HANDLE Nsk_handle,
203 NDS_ULONG register_offset,
204 NDS_ULONG data_size,
205 const NDS_ULONG *data)
206 {
207 NSK_TRACE(("Enter\n"));
208 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
209 NSK_TRACE(("Nsk_handle = 0x%x, offset = 0x%x, data_size = 0x%x\n", u32Handle,register_offset,data_size));
210
211 #ifdef NSK2DataProbe
212 NDS_ULONG *pData = (NDS_ULONG *)data;
213 NDS_ULONG u32Data_Size = data_size;
214
215 NSK_TRACE(("\n( "));
216
217 while(u32Data_Size>0)
218 {
219 printf("%x, ",*pData++);
220 u32Data_Size --;
221 }
222 printf(")\n");
223 #endif
224
225 MDrv_NSK2_WriteData32(register_offset,data_size, (MS_U32 *)data);
226
227 NSK_TRACE(("Exit\n"));
228 return NSK2HDI_STATUS_OK;
229 }
230
231
NSKHDI_NskDevice_ExecuteCmd(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG command,NDS_ULONG control,NDS_ULONG register_offset,NDS_ULONG data_size,const NDS_UBYTE * data)232 NSK2HDI_STATUS NSKHDI_NskDevice_ExecuteCmd (NSK2HDI_HANDLE Nsk_handle,
233 NDS_ULONG command,
234 NDS_ULONG control,
235 NDS_ULONG register_offset,
236 NDS_ULONG data_size,
237 const NDS_UBYTE *data)
238 {
239
240 NSK_TRACE(("Enter\n"));
241 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
242 NSK_TRACE(("Nsk_handle = 0x%x, command = 0x%x, control = 0x%x, offset = 0x%x, data_size = 0x%x\n", u32Handle,command,control,register_offset,data_size));
243
244 NSK_TRACE(("data = %p\n",data));
245
246 #ifdef NSK2DataProbe
247 NDS_UBYTE *pData = (NDS_UBYTE *)data;
248 NDS_ULONG u32Data_Size = data_size;
249 NSK_TRACE(("\n( "));
250 while(u32Data_Size>0)
251 {
252 printf("%x, ",*pData++);
253 u32Data_Size --;
254 }
255 printf(")\n");
256 #endif
257
258 //MDrv_NSK2_WriteData32(register_offset,data_size, (MS_U32*)data);
259 MDrv_NSK2_ExcuteCmd( command, control, register_offset, data_size, data);
260 NSK_TRACE(("Exit\n"));
261 return NSK2HDI_STATUS_OK;
262 }
263
264
265
_NSK2_Notify(MS_U32 reason,MS_U32 acpuError)266 void _NSK2_Notify(MS_U32 reason, MS_U32 acpuError)
267 {
268 NSK_TRACE(("Enter, reason = 0x%x, acpuError = 0x%x\n",reason, acpuError));
269
270 if(_gcb_routine != NULL)
271 {
272 _gcb_routine(_gNsk_handle,_gNSKcookie,reason,acpuError);
273 }
274
275 //NSK_TRACE(("Exit\n"));
276 }
277
NSKHDI_NskDevice_RegisterEventCB(NSK2HDI_HANDLE Nsk_handle,HDINSK2_NSKEVENT_CB_FN * cb_routine,void * cookie)278 NSK2HDI_STATUS NSKHDI_NskDevice_RegisterEventCB ( NSK2HDI_HANDLE Nsk_handle,
279 HDINSK2_NSKEVENT_CB_FN *cb_routine,
280 void *cookie)
281 {
282 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
283 NSK_TRACE(("Enter, Nsk_handle = 0x%x, cb_routine = 0x%p\n",u32Handle,cb_routine));
284
285
286 //it might need to change the way to keep handle.....
287 _gcb_routine = cb_routine;
288 _gNsk_handle = Nsk_handle;
289 _gNSKcookie = cookie;
290
291 MDrv_NSK2_SetIntNotify(&_NSK2_Notify);
292 //cb_routine = &_NSK2_Notify;
293
294 NSK_TRACE(("Exit\n"));
295 return NSK2HDI_STATUS_OK;
296 }
297
NSKHDI_NskDevice_AcknowledgeKte(NSK2HDI_HANDLE Nsk_handle)298 NSK2HDI_STATUS NSKHDI_NskDevice_AcknowledgeKte(NSK2HDI_HANDLE Nsk_handle)
299 {
300 NSK_TRACE(("Enter\n"));
301
302
303 MDrv_NSK2_DriveKteAck();
304 //NSK2DBG_KTEValid(0,0);
305
306 NSK_TRACE(("Exit\n"));
307 return NSK2HDI_STATUS_OK;
308 }
NSKHDI_NskDevice_BasicInitializationComplete(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG stage)309
310 NSK2HDI_STATUS NSKHDI_NskDevice_BasicInitializationComplete( NSK2HDI_HANDLE Nsk_handle, NDS_ULONG stage)
311 {
312 NSK_TRACE(("Enter\n"));
313 MS_U32 u32Handle = NSKHDI_GetHandle(Nsk_handle);
314 NSK_TRACE(("Nsk_handle = 0x%x, stage = 0x%x\n",u32Handle,stage));
315
316 MDrv_NSK2_BasicInitializationComplete();
317 NSK_TRACE(("Exit\n"));
318 return NSK2HDI_STATUS_OK;
319 }
NSKHDI_NskDevice_UpdateNVCounter(NSK2HDI_HANDLE Nsk_handle)320
321 NSK2HDI_STATUS NSKHDI_NskDevice_UpdateNVCounter(NSK2HDI_HANDLE Nsk_handle)
322 {
323 NSK_TRACE(("Enter\n"));
324
325 MS_U32 status;
326 status = MDrv_NSK21_IncrementNvCounter();
327 MDrv_NSK2_DriveKteAck();
328
329 NSK_TRACE(("Exit\n"));
330 return NSK2HDI_STATUS_OK;
331 }
NSKHDI_NskDevice_WriteOTPKey(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG desc_size,const NDS_UBYTE * desc)332
333 NSK2HDI_STATUS NSKHDI_NskDevice_WriteOTPKey(NSK2HDI_HANDLE Nsk_handle,
334 NDS_ULONG desc_size,
335 const NDS_UBYTE *desc)
336 {
337 NSK_TRACE(("Enter\n"));
338 NSK_TRACE(("desc_size = %x, desc = %p\n",desc_size,desc));
339
340 MS_U32 i;
341 MS_U8 *pDesc = (MS_U8 *)desc;
342 for(i=0;i<desc_size;i++)
343 {
344 printf(" (%d, %x) \n", i, pDesc[i]);
345 }
346
347 NSK_TRACE(("Exit\n"));
348 return NSK2HDI_STATUS_OK;
349 }
NSKHDI_NskDevice_SetOneShotGenInBit(NSK2HDI_HANDLE Nsk_handle,NDS_ULONG bits)350
351 NSK2HDI_STATUS NSKHDI_NskDevice_SetOneShotGenInBit(NSK2HDI_HANDLE Nsk_handle,
352 NDS_ULONG bits)
353 {
354 NSK_TRACE(("Enter\n"));
355
356 MS_U32 MaskVal, XorVal;
357 XorVal = (MS_U32)bits;
358 MaskVal = (~XorVal);
359 MDrv_NSK21_ModifyGenIn(MaskVal, XorVal);
360
361 NSK_TRACE(("Exit\n"));
362 return NSK2HDI_STATUS_OK;
363 }
364
365