1*53ee8cc1Swenshuai.xi #include <linux/kernel.h>
2*53ee8cc1Swenshuai.xi #include <linux/string.h>
3*53ee8cc1Swenshuai.xi #include <linux/slab.h>
4*53ee8cc1Swenshuai.xi
5*53ee8cc1Swenshuai.xi #include "MsTypes.h"
6*53ee8cc1Swenshuai.xi #include "utopia.h"
7*53ee8cc1Swenshuai.xi #include "drvCA.h"
8*53ee8cc1Swenshuai.xi #include "drvCA_v2.h"
9*53ee8cc1Swenshuai.xi #include "CA_adp.h"
10*53ee8cc1Swenshuai.xi
11*53ee8cc1Swenshuai.xi #include "utopia_adp.h"
12*53ee8cc1Swenshuai.xi
13*53ee8cc1Swenshuai.xi #define SPT_TYPE_A_SIZE 2
14*53ee8cc1Swenshuai.xi #define SPT_TYPE_B_SIZE 3
15*53ee8cc1Swenshuai.xi #define SPT_TYPE_C_SIZE 4
16*53ee8cc1Swenshuai.xi #define SPT_TYPE_D_SIZE 5
17*53ee8cc1Swenshuai.xi #define SPT_TYPE_E_SIZE 6
18*53ee8cc1Swenshuai.xi #define SPT_TYPE_F_SIZE 7
19*53ee8cc1Swenshuai.xi
20*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME0NXT_SIZE(NAME,SIZE) \
21*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],SIZE); \
22*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [1]);
23*53ee8cc1Swenshuai.xi
24*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME0NXT_TYPE(NAME,TYPE) \
25*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],sizeof(TYPE)); \
26*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [1]);
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME1NXT_TYPE(NAME,TYPE,MB1,MB1NAME) \
29*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],sizeof(TYPE)); \
30*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [1],TYPE,MB1,MB1NAME); \
31*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [2]);
32*53ee8cc1Swenshuai.xi
33*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME2NXT_TYPE(NAME,TYPE,MB1,MB1NAME,MB2,MB2NAME) \
34*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],sizeof(TYPE)); \
35*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [1],TYPE,MB1,MB1NAME); \
36*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [2],TYPE,MB2,MB2NAME); \
37*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [3]);
38*53ee8cc1Swenshuai.xi
39*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME3NXT_TYPE(NAME,TYPE,MB1,MB1NAME,MB2,MB2NAME,MB3,MB3NAME) \
40*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],sizeof(TYPE)); \
41*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [1],TYPE,MB1,MB1NAME); \
42*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [2],TYPE,MB2,MB2NAME); \
43*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [3],TYPE,MB3,MB3NAME); \
44*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [4]);
45*53ee8cc1Swenshuai.xi
46*53ee8cc1Swenshuai.xi #define UADP_SPT_NAME5NXT_TYPE(NAME,TYPE,MB1,MB1NAME,MB2,MB2NAME,MB3,MB3NAME,MB4,MB4NAME,MB5,MB5NAME) \
47*53ee8cc1Swenshuai.xi UADP_SPT_BGN(&NAME [0],sizeof(TYPE)); \
48*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [1],TYPE,MB1,MB1NAME); \
49*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [2],TYPE,MB2,MB2NAME); \
50*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [3],TYPE,MB3,MB3NAME); \
51*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [4],TYPE,MB4,MB4NAME); \
52*53ee8cc1Swenshuai.xi UADP_SPT_NXT(&NAME [5],TYPE,MB5,MB5NAME); \
53*53ee8cc1Swenshuai.xi UADP_SPT_FIN(&NAME [6]);
54*53ee8cc1Swenshuai.xi
55*53ee8cc1Swenshuai.xi //TOP
56*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetBlockLock[SPT_TYPE_A_SIZE];
57*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetBlockLock[SPT_TYPE_B_SIZE];
58*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_IsBlank[SPT_TYPE_A_SIZE];
59*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_Read[SPT_TYPE_A_SIZE];
60*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_Write[SPT_TYPE_A_SIZE];
61*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_Locked[SPT_TYPE_A_SIZE];
62*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_Lock[SPT_TYPE_A_SIZE];
63*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetRSAextID[SPT_TYPE_A_SIZE];
64*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetRSAextID[SPT_TYPE_A_SIZE];
65*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetHASH1_REF_VER[SPT_TYPE_A_SIZE];
66*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetHASH1_REF_VER[SPT_TYPE_B_SIZE];
67*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetHASH_REF_VER[SPT_TYPE_A_SIZE];
68*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetHASH_REF_VER[SPT_TYPE_C_SIZE];
69*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetDebugPortMode[SPT_TYPE_A_SIZE];
70*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetDebugPortMode[SPT_TYPE_B_SIZE];
71*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetDeviceId[SPT_TYPE_B_SIZE];
72*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetDeviceId[SPT_TYPE_B_SIZE];
73*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_MaxDeviceIdSize[SPT_TYPE_A_SIZE];
74*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_Random[SPT_TYPE_A_SIZE];
75*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_ReadCAVendor[SPT_TYPE_A_SIZE];
76*53ee8cc1Swenshuai.xi
77*53ee8cc1Swenshuai.xi //BOTTOM
78*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetBlockLock_peLockType[SPT_TYPE_A_SIZE];
79*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetHASH1_REF_VER_pu32HASH1_REF_VER[SPT_TYPE_A_SIZE];
80*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetHASH_REF_VER_pu32HASH0_REF_VER[SPT_TYPE_A_SIZE];
81*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetHASH_REF_VER_pu32HASH2_REF_VER[SPT_TYPE_A_SIZE];
82*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetDebugPortMode_eMode[SPT_TYPE_A_SIZE];
83*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_SetDeviceId_pu8Did[SPT_TYPE_A_SIZE];
84*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_CA_OTP_GetDeviceId_pu8Did[SPT_TYPE_A_SIZE];
85*53ee8cc1Swenshuai.xi
DSCMB_adp_Init(FUtopiaIOctl * pIoctl)86*53ee8cc1Swenshuai.xi MS_U32 DSCMB_adp_Init(FUtopiaIOctl* pIoctl)
87*53ee8cc1Swenshuai.xi {
88*53ee8cc1Swenshuai.xi //TOP
89*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_SetBlockLock, CA_OTP_SETBLOCKLOCK);
90*53ee8cc1Swenshuai.xi UADP_SPT_NAME1NXT_TYPE(spt_CA_OTP_GetBlockLock, CA_OTP_GETBLOCKLOCK, peLockType, spt_CA_OTP_GetBlockLock_peLockType);
91*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_IsBlank, CA_OTP_ISBLANK);
92*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_Read, CA_OTP_READ);
93*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_Write, CA_OTP_WRITE);
94*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_Locked, CA_OTP_LOCK20);
95*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_Lock, CA_OTP_LOCK20);
96*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_SetRSAextID, CA_OTP_SETRSAEXTID);
97*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetRSAextID, CA_OTP_GETRSAEXTID);
98*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_SetHASH1_REF_VER, CA_OTP_SETHASH1REFVER);
99*53ee8cc1Swenshuai.xi UADP_SPT_NAME1NXT_TYPE(spt_CA_OTP_GetHASH1_REF_VER, CA_OTP_GETHASH1REFVER, pu32HASH1_REF_VER, spt_CA_OTP_GetHASH1_REF_VER_pu32HASH1_REF_VER);
100*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_SetHASH_REF_VER, CA_OTP_SETHASHREFVER);
101*53ee8cc1Swenshuai.xi UADP_SPT_NAME2NXT_TYPE(spt_CA_OTP_GetHASH_REF_VER, CA_OTP_GETHASHREFVER, pu32HASH0_REF_VER, spt_CA_OTP_GetHASH_REF_VER_pu32HASH0_REF_VER, pu32HASH2_REF_VER, spt_CA_OTP_GetHASH_REF_VER_pu32HASH2_REF_VER);
102*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_SetDebugPortMode, CA_OTP_SETDEBUGPORTMODE);
103*53ee8cc1Swenshuai.xi UADP_SPT_NAME1NXT_TYPE(spt_CA_OTP_GetDebugPortMode, CA_OTP_GETDEBUGPORTMODE, eMode, spt_CA_OTP_GetDebugPortMode_eMode);
104*53ee8cc1Swenshuai.xi UADP_SPT_NAME1NXT_TYPE(spt_CA_OTP_SetDeviceId, CA_OTP_SETDEVICEID, pu8Did, spt_CA_OTP_SetDeviceId_pu8Did);
105*53ee8cc1Swenshuai.xi UADP_SPT_NAME1NXT_TYPE(spt_CA_OTP_GetDeviceId, CA_OTP_SETDEVICEID, pu8Did, spt_CA_OTP_GetDeviceId_pu8Did);
106*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_MaxDeviceIdSize, CA_MAXDEVICEIDSIZE);
107*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_Random, CA_RANDOM);
108*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_ReadCAVendor, CA_OTP_READCAVENDOR);
109*53ee8cc1Swenshuai.xi
110*53ee8cc1Swenshuai.xi //BOTTOM
111*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetBlockLock_peLockType, CA_LOCK_TYPE);
112*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetHASH1_REF_VER_pu32HASH1_REF_VER, MS_U32);
113*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetHASH_REF_VER_pu32HASH0_REF_VER, MS_U32);
114*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetHASH_REF_VER_pu32HASH2_REF_VER, MS_U32);
115*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_TYPE(spt_CA_OTP_GetDebugPortMode_eMode, CA_DEBUG_PORT_MODE);
116*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_SIZE(spt_CA_OTP_SetDeviceId_pu8Did, sizeof(MS_U8)*16);
117*53ee8cc1Swenshuai.xi UADP_SPT_NAME0NXT_SIZE(spt_CA_OTP_GetDeviceId_pu8Did, sizeof(MS_U8)*16);
118*53ee8cc1Swenshuai.xi
119*53ee8cc1Swenshuai.xi *pIoctl = (FUtopiaIOctl)CA_adp_Ioctl;
120*53ee8cc1Swenshuai.xi
121*53ee8cc1Swenshuai.xi return 0;
122*53ee8cc1Swenshuai.xi
123*53ee8cc1Swenshuai.xi }
124*53ee8cc1Swenshuai.xi
DSCMB_adp_Ioctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)125*53ee8cc1Swenshuai.xi MS_U32 DSCMB_adp_Ioctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
126*53ee8cc1Swenshuai.xi {
127*53ee8cc1Swenshuai.xi MS_U32 u32Ret = 0;
128*53ee8cc1Swenshuai.xi char buffer_arg[32];
129*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE* sptPtr;
130*53ee8cc1Swenshuai.xi switch(u32Cmd)
131*53ee8cc1Swenshuai.xi {
132*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_Init:
133*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstanceTmp, u32Cmd, pArgs);
134*53ee8cc1Swenshuai.xi break;
135*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_EnableSecureBoot:
136*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstanceTmp, u32Cmd, pArgs);
137*53ee8cc1Swenshuai.xi break;
138*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_IsSecureBootEnabled:
139*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstanceTmp, u32Cmd, pArgs);
140*53ee8cc1Swenshuai.xi break;
141*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetBlockLock:
142*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetBlockLock, NULL, buffer_arg, sizeof(buffer_arg));
143*53ee8cc1Swenshuai.xi break;
144*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_GetBlockLock:
145*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_GetBlockLock, NULL, buffer_arg, sizeof(buffer_arg));
146*53ee8cc1Swenshuai.xi break;
147*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_IsBlank:
148*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_IsBlank, NULL, buffer_arg, sizeof(buffer_arg));
149*53ee8cc1Swenshuai.xi break;
150*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_Read:
151*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_Read, spt_CA_OTP_Read, buffer_arg, sizeof(buffer_arg));
152*53ee8cc1Swenshuai.xi break;
153*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_Write:
154*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_Write, NULL, buffer_arg, sizeof(buffer_arg));
155*53ee8cc1Swenshuai.xi break;
156*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_Locked:
157*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_Locked, NULL, buffer_arg, sizeof(buffer_arg));
158*53ee8cc1Swenshuai.xi break;
159*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_Lock:
160*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_Lock, NULL, buffer_arg, sizeof(buffer_arg));
161*53ee8cc1Swenshuai.xi break;
162*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetRSAextID:
163*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetRSAextID, NULL, buffer_arg, sizeof(buffer_arg));
164*53ee8cc1Swenshuai.xi break;
165*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_GetRSAextID:
166*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_GetRSAextID, NULL, buffer_arg, sizeof(buffer_arg));
167*53ee8cc1Swenshuai.xi break;
168*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetHASH1_REF_VER:
169*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetHASH1_REF_VER, NULL, buffer_arg, sizeof(buffer_arg));
170*53ee8cc1Swenshuai.xi break;
171*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_GetHASH1_REF_VER:
172*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_GetHASH1_REF_VER, spt_CA_OTP_GetHASH1_REF_VER, buffer_arg, sizeof(buffer_arg));
173*53ee8cc1Swenshuai.xi break;
174*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetHASH_REF_VER:
175*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetHASH_REF_VER, NULL, buffer_arg, sizeof(buffer_arg));
176*53ee8cc1Swenshuai.xi break;
177*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetDebugPortMode:
178*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetDebugPortMode, NULL, buffer_arg, sizeof(buffer_arg));
179*53ee8cc1Swenshuai.xi break;
180*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_GetDebugPortMode:
181*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_GetDebugPortMode, spt_CA_OTP_GetDebugPortMode, buffer_arg, sizeof(buffer_arg));
182*53ee8cc1Swenshuai.xi break;
183*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_SetDeviceId:
184*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_SetDeviceId, NULL, buffer_arg, sizeof(buffer_arg));
185*53ee8cc1Swenshuai.xi break;
186*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_MaxDeviceIdSize:
187*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_MaxDeviceIdSize, spt_CA_MaxDeviceIdSize, buffer_arg, sizeof(buffer_arg));
188*53ee8cc1Swenshuai.xi break;
189*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_EnableSecureCWMode:
190*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstanceTmp, u32Cmd, pArgs);
191*53ee8cc1Swenshuai.xi break;
192*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_IsSecureCWMode:
193*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstanceTmp, u32Cmd, pArgs);
194*53ee8cc1Swenshuai.xi break;
195*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_Random:
196*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_Random, spt_CA_Random, buffer_arg, sizeof(buffer_arg));
197*53ee8cc1Swenshuai.xi break;
198*53ee8cc1Swenshuai.xi case E_MDRV_CMD_CA_OTP_ReadCAVendor:
199*53ee8cc1Swenshuai.xi u32Ret = UADPBypassIoctl(pInstanceTmp, u32Cmd, pArgs, spt_CA_OTP_ReadCAVendor, spt_CA_OTP_ReadCAVendor, buffer_arg, sizeof(buffer_arg));
200*53ee8cc1Swenshuai.xi break;
201*53ee8cc1Swenshuai.xi default:
202*53ee8cc1Swenshuai.xi break;
203*53ee8cc1Swenshuai.xi }
204*53ee8cc1Swenshuai.xi
205*53ee8cc1Swenshuai.xi return u32Ret;
206*53ee8cc1Swenshuai.xi }
207