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 "drvNSK2.h"
14*53ee8cc1Swenshuai.xi #include "nsk2hdi_header.h"
15*53ee8cc1Swenshuai.xi #include "drvCA.h"
16*53ee8cc1Swenshuai.xi #include "drvNSK2.h"
17*53ee8cc1Swenshuai.xi
18*53ee8cc1Swenshuai.xi
19*53ee8cc1Swenshuai.xi /*****************************************************************************\
20*53ee8cc1Swenshuai.xi \Definitions
21*53ee8cc1Swenshuai.xi \*****************************************************************************/
22*53ee8cc1Swenshuai.xi
23*53ee8cc1Swenshuai.xi
24*53ee8cc1Swenshuai.xi /*****************************************************************************\
25*53ee8cc1Swenshuai.xi \ global variables
26*53ee8cc1Swenshuai.xi \*****************************************************************************/
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi /*****************************************************************************\
29*53ee8cc1Swenshuai.xi \ NSK2HDI otp related functions
30*53ee8cc1Swenshuai.xi \*****************************************************************************/
31*53ee8cc1Swenshuai.xi /*****************************************************************************\
32*53ee8cc1Swenshuai.xi \ OTP device
33*53ee8cc1Swenshuai.xi \*****************************************************************************/
34*53ee8cc1Swenshuai.xi
35*53ee8cc1Swenshuai.xi #define USEDrvFunction
36*53ee8cc1Swenshuai.xi
37*53ee8cc1Swenshuai.xi #ifndef USEDrvFunction
38*53ee8cc1Swenshuai.xi #define OTP_REG(addr) (*((volatile MS_U32*)(0xbf320000 + addr )))
39*53ee8cc1Swenshuai.xi #define OTP_REG8(addr) (*((volatile MS_U8*)(0xbf320000 + addr )))
40*53ee8cc1Swenshuai.xi #endif
41*53ee8cc1Swenshuai.xi
42*53ee8cc1Swenshuai.xi extern MS_U32 NSKHDI_GetHandle(NSK2HDI_HANDLE Handle);
43*53ee8cc1Swenshuai.xi
44*53ee8cc1Swenshuai.xi
45*53ee8cc1Swenshuai.xi #define MaxOTPHandleNum 10
46*53ee8cc1Swenshuai.xi
47*53ee8cc1Swenshuai.xi
48*53ee8cc1Swenshuai.xi typedef struct _OTP_Info_
49*53ee8cc1Swenshuai.xi {
50*53ee8cc1Swenshuai.xi MS_BOOL alloc;
51*53ee8cc1Swenshuai.xi NDS_ULONG Otp_ID;
52*53ee8cc1Swenshuai.xi MS_U32 handle_id;
53*53ee8cc1Swenshuai.xi } OTP_Info;
54*53ee8cc1Swenshuai.xi
55*53ee8cc1Swenshuai.xi
56*53ee8cc1Swenshuai.xi OTP_Info OTPInfo[MaxOTPHandleNum];
57*53ee8cc1Swenshuai.xi
NSKHDI_OtpDevice_Open(NSK2HDI_DEVICE_ID Otp_ID,NSK2HDI_HANDLE * Otp_handle)58*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_OtpDevice_Open (NSK2HDI_DEVICE_ID Otp_ID,
59*53ee8cc1Swenshuai.xi NSK2HDI_HANDLE *Otp_handle)
60*53ee8cc1Swenshuai.xi {
61*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
62*53ee8cc1Swenshuai.xi MS_U32 i;
63*53ee8cc1Swenshuai.xi
64*53ee8cc1Swenshuai.xi if(*Otp_handle != NULL)
65*53ee8cc1Swenshuai.xi {
66*53ee8cc1Swenshuai.xi NSK_TRACE(("Otp_handle is not NULL\n"));
67*53ee8cc1Swenshuai.xi }
68*53ee8cc1Swenshuai.xi
69*53ee8cc1Swenshuai.xi for(i = 0; i < MaxOTPHandleNum; i++)
70*53ee8cc1Swenshuai.xi {
71*53ee8cc1Swenshuai.xi if (OTPInfo[i].alloc == FALSE)
72*53ee8cc1Swenshuai.xi {
73*53ee8cc1Swenshuai.xi break;
74*53ee8cc1Swenshuai.xi }
75*53ee8cc1Swenshuai.xi }
76*53ee8cc1Swenshuai.xi if (i == MaxOTPHandleNum)
77*53ee8cc1Swenshuai.xi {
78*53ee8cc1Swenshuai.xi return (NSK2HDI_STATUS_FAILED);
79*53ee8cc1Swenshuai.xi }
80*53ee8cc1Swenshuai.xi
81*53ee8cc1Swenshuai.xi
82*53ee8cc1Swenshuai.xi //should allocate dscmb here....
83*53ee8cc1Swenshuai.xi OTPInfo[i].alloc = TRUE;
84*53ee8cc1Swenshuai.xi OTPInfo[i].handle_id = i;
85*53ee8cc1Swenshuai.xi OTPInfo[i].Otp_ID = Otp_ID;
86*53ee8cc1Swenshuai.xi
87*53ee8cc1Swenshuai.xi
88*53ee8cc1Swenshuai.xi *Otp_handle = (NSK2HDI_HANDLE)&OTPInfo[i].handle_id;
89*53ee8cc1Swenshuai.xi
90*53ee8cc1Swenshuai.xi NSK_TRACE(("Otp_ID = 0x%x, Otp_handle = 0x%08x\n",Otp_ID,OTPInfo[i].handle_id));
91*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
92*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
93*53ee8cc1Swenshuai.xi }
94*53ee8cc1Swenshuai.xi
NSKHDI_OtpDevice_Close(NSK2HDI_HANDLE Otp_handle)95*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_OtpDevice_Close (NSK2HDI_HANDLE Otp_handle)
96*53ee8cc1Swenshuai.xi {
97*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
98*53ee8cc1Swenshuai.xi MS_U32 u32Handle = NSKHDI_GetHandle(Otp_handle);
99*53ee8cc1Swenshuai.xi
100*53ee8cc1Swenshuai.xi
101*53ee8cc1Swenshuai.xi OTPInfo[u32Handle].alloc = FALSE;
102*53ee8cc1Swenshuai.xi OTPInfo[u32Handle].handle_id = 0;
103*53ee8cc1Swenshuai.xi
104*53ee8cc1Swenshuai.xi
105*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
106*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
107*53ee8cc1Swenshuai.xi }
108*53ee8cc1Swenshuai.xi
NSKHDI_OtpDevice_GetProperties(NSK2HDI_HANDLE Otp_handle,NDS_ULONG request_id,NDS_ULONG * desc_size,NDS_UBYTE * desc)109*53ee8cc1Swenshuai.xi NSK2HDI_STATUS NSKHDI_OtpDevice_GetProperties( NSK2HDI_HANDLE Otp_handle,
110*53ee8cc1Swenshuai.xi NDS_ULONG request_id,
111*53ee8cc1Swenshuai.xi NDS_ULONG *desc_size,
112*53ee8cc1Swenshuai.xi NDS_UBYTE *desc)
113*53ee8cc1Swenshuai.xi {
114*53ee8cc1Swenshuai.xi NSK_TRACE(("Enter\n"));
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi
117*53ee8cc1Swenshuai.xi //in desc_size
118*53ee8cc1Swenshuai.xi NSK_TRACE(("request_id = 0x%x, desc_size = 0x%x\n",request_id,*desc_size));
119*53ee8cc1Swenshuai.xi
120*53ee8cc1Swenshuai.xi if(request_id == NSK2HDI_OTP_READ_ALL_DESCRIPTORS_REQUEST)
121*53ee8cc1Swenshuai.xi {
122*53ee8cc1Swenshuai.xi MDrv_NSK2_GetOTPProperties((MS_U32*)desc_size, (MS_U8*)desc);
123*53ee8cc1Swenshuai.xi }
124*53ee8cc1Swenshuai.xi else if(request_id == NSK2HDI_OTP_READ_FULLCHIPCONFIGURATION)
125*53ee8cc1Swenshuai.xi {
126*53ee8cc1Swenshuai.xi MDrv_NSK2_GetFullChipConfig((MS_U32*)desc_size, (MS_U8*)desc);
127*53ee8cc1Swenshuai.xi }
128*53ee8cc1Swenshuai.xi else if(request_id == NSK2HDI_OTP_MAX_NVCOUNTER_UPDATES)
129*53ee8cc1Swenshuai.xi {
130*53ee8cc1Swenshuai.xi MDrv_NSK2_GetNVCounterConfig((MS_U32*)desc_size, (MS_U8*)desc);
131*53ee8cc1Swenshuai.xi }
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi NSK_TRACE(("Exit\n"));
135*53ee8cc1Swenshuai.xi return NSK2HDI_STATUS_OK;
136*53ee8cc1Swenshuai.xi }
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi
139*53ee8cc1Swenshuai.xi
140*53ee8cc1Swenshuai.xi
141