xref: /utopia/UTPA2-700.0.x/modules/dscmb/api/nsk2hdi/nsk2hdi_nsk2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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