xref: /utopia/UTPA2-700.0.x/modules/dscmb/api/nsk2hdi/nsk2hdi_otp.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 "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