1 #include <linux/kernel.h>
2 #include <linux/string.h>
3 #include <linux/slab.h>
4 #include <linux/uaccess.h>
5
6 #include "MsTypes.h"
7 #include "utopia.h"
8 #include "drvAESDMA.h"
9 #include "drvAESDMA_v2.h"
10 #include "AESDMA_adp.h"
11
12
13 #include "utopia_adp.h"
14 //#include "MsOS.h"
15
16 UADP_SDT_0_DEF(NULL);
17 //Top
18 UADP_STRUCT_POINTER_TABLE spt_AESDMA_INIT[10];
19 UADP_STRUCT_POINTER_TABLE spt_AESDMA_FILE_INOUT[10];
20 UADP_STRUCT_POINTER_TABLE spt_AESDMA_SEL_ENG[10];
21 UADP_STRUCT_POINTER_TABLE spt_AESDMA_SET_PS[10];
22 UADP_STRUCT_POINTER_TABLE spt_AESDMA_NOTIFY[10];
23 UADP_STRUCT_POINTER_TABLE spt_AESDMA_RAND[10];
24 UADP_STRUCT_POINTER_TABLE spt_SHA_CALCULATE[10];
25 UADP_STRUCT_POINTER_TABLE spt_SHA_CALCULATE_MANUAL[10];
26 UADP_STRUCT_POINTER_TABLE spt_RSA_CALCULATE[10];
27 UADP_STRUCT_POINTER_TABLE spt_RSA_OUTPUT[10];
28
29 UADP_STRUCT_POINTER_TABLE spt_AESDMA_SetKeyList[10];
30 UADP_STRUCT_POINTER_TABLE spt_AESDMA_SetIvList[10];
31
32 //Bottom
33 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_RSASig[10];
34 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_RSAKey[10];
35 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_RSAOut[10];
36 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_HASHCFG[10];
37 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_SHADataInfo[10];
38 UADP_STRUCT_POINTER_TABLE spt_DrvAESDMA_SecureInfo[10];
39
40 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserSetScrmbPattern[10];
41 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserPyPassPid[10];
42 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserSetPid[10];
43 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserEncrypt[10];
44 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserDecrypt[10];
45 UADP_STRUCT_POINTER_TABLE spt_AESDMA_ParserSetAddedScrmbPattern[10];
46 UADP_STRUCT_POINTER_TABLE spt_AESDMA_GetStatus[10];
47 //UADP_STRUCT_POINTER_TABLE spt_AESDMA_MDrvProcessCipher[10];
48
49 UADP_STRUCT_POINTER_TABLE spt_AESDMA_START[10];
50
51
AESDMA_adp_Init(FUtopiaIOctl * pIoctl)52 MS_U32 AESDMA_adp_Init(FUtopiaIOctl* pIoctl)
53 {
54
55 //set table
56 printk("AESDMA_adp_Init\n");
57
58 UADPBypassSetSPT(&spt_AESDMA_INIT[0],UADP_SPT_SELF_SIZE,0, sizeof(AESDMA_INIT));
59 UADPBypassSetSPT(&spt_AESDMA_INIT[1],UADP_SPT_END , 0, 0);
60
61 UADPBypassSetSPT(&spt_AESDMA_FILE_INOUT[0],UADP_SPT_SELF_SIZE,0, sizeof(AESDMA_FILE_INOUT));
62 UADPBypassSetSPT(&spt_AESDMA_FILE_INOUT[1],UADP_SPT_END , 0, 0);
63
64
65 UADP_SPT_BGN(&spt_AESDMA_SEL_ENG[0], sizeof(AESDMA_SEL_ENG));
66 UADP_SPT_FIN(&spt_AESDMA_SEL_ENG[1]);
67
68
69 UADP_SPT_BGN(&spt_AESDMA_SET_PS[0],sizeof(AESDMA_SET_PS));
70 UADP_SPT_FIN(&spt_AESDMA_SET_PS[1]);
71
72
73 UADP_SDT_BGN (&spt_AESDMA_NOTIFY[0], sizeof(AESDMA_NOTIFY));
74 UADP_SDT_KIND(&spt_AESDMA_NOTIFY[1], AESDMA_NOTIFY, UADP_SDT_AT, pfCallback,NULL);
75 UADP_SDT_FIN(&spt_AESDMA_NOTIFY[2]);
76
77
78 UADP_SDT_BGN (&spt_AESDMA_RAND[0], sizeof(AESDMA_RAND));
79 UADP_SDT_KIND(&spt_AESDMA_RAND[1], AESDMA_RAND, UADP_SDT_P2N, u32PABuf,NULL);
80 UADP_SDT_FIN(&spt_AESDMA_RAND[2]);
81
82
83 UADPBypassSetSPT(&spt_SHA_CALCULATE[0],UADP_SPT_SELF_SIZE,0, sizeof(SHA_CALCULATE));
84 UADPBypassSetSPT(&spt_SHA_CALCULATE[1],UADP_SPT_END , 0, 0);
85
86
87 UADP_SDT_BGN (&spt_SHA_CALCULATE_MANUAL[0], sizeof(SHA_CALCULATE_MANUAL));
88 UADP_SDT_KIND(&spt_SHA_CALCULATE_MANUAL[1], SHA_CALCULATE_MANUAL, UADP_SDT_P2N, pu8SetIV,NULL);
89 UADP_SDT_FIN(&spt_SHA_CALCULATE_MANUAL[2]);
90
91 //bottom
92
93 UADP_SPT_BGN(&spt_DrvAESDMA_RSAKey[0],sizeof(DrvAESDMA_RSAKey));
94 UADP_SPT_FIN(&spt_DrvAESDMA_RSAKey[1]);
95
96 UADP_SPT_BGN(&spt_DrvAESDMA_RSASig[0],sizeof(DrvAESDMA_RSASig));
97 UADP_SPT_FIN(&spt_DrvAESDMA_RSASig[1]);
98
99 UADP_SPT_BGN(&spt_DrvAESDMA_RSAOut[0],sizeof(DrvAESDMA_RSAOut));
100 UADP_SPT_FIN(&spt_DrvAESDMA_RSAOut[1]);
101
102 UADP_SPT_BGN(&spt_DrvAESDMA_SecureInfo[0],sizeof(DrvAESDMA_SecureInfo));
103 UADP_SPT_FIN(&spt_DrvAESDMA_SecureInfo[1]);
104
105 UADP_SPT_BGN(&spt_DrvAESDMA_SHADataInfo[0], sizeof(DrvAESDMA_SHADataInfo));
106 UADP_SPT_FIN(&spt_DrvAESDMA_SHADataInfo[1]);
107
108 UADP_SPT_BGN(&spt_DrvAESDMA_HASHCFG[0], sizeof(DrvAESDMA_HASHCFG));
109 UADP_SPT_FIN(&spt_DrvAESDMA_HASHCFG[3]);
110
111 UADP_SPT_BGN(&spt_AESDMA_SetKeyList[0],sizeof(MS_U32)*4);
112 UADP_SPT_FIN(&spt_AESDMA_SetKeyList[1]);
113
114 UADP_SPT_BGN(&spt_AESDMA_SetIvList[0],sizeof(MS_U32)*4);
115 UADP_SPT_FIN(&spt_AESDMA_SetIvList[1]);
116
117 UADP_SPT_BGN(&spt_AESDMA_ParserSetScrmbPattern[0], sizeof(AESDMA_PARSER_CONFIGURATIONS));
118 UADP_SPT_FIN(&spt_AESDMA_ParserSetScrmbPattern[1]);
119
120 UADP_SPT_BGN(&spt_AESDMA_ParserPyPassPid[0], sizeof(AESDMA_PARSER_PID_CONFIGURATIONS));
121 UADP_SPT_FIN(&spt_AESDMA_ParserPyPassPid[1]);
122
123 UADP_SPT_BGN(&spt_AESDMA_ParserSetPid[0], sizeof(AESDMA_PARSER_PID_CONFIGURATIONS));
124 UADP_SPT_FIN(&spt_AESDMA_ParserSetPid[1]);
125
126 UADP_SPT_BGN(&spt_AESDMA_ParserEncrypt[0], sizeof(AESDMA_PARSER_CONFIGURATIONS));
127 UADP_SPT_FIN(&spt_AESDMA_ParserEncrypt[1]);
128
129 UADP_SPT_BGN(&spt_AESDMA_ParserDecrypt[0], sizeof(AESDMA_PARSER_CONFIGURATIONS));
130 UADP_SPT_FIN(&spt_AESDMA_ParserDecrypt[1]);
131
132 UADP_SPT_BGN(&spt_AESDMA_ParserSetAddedScrmbPattern[0], sizeof(AESDMA_PARSER_CONFIGURATIONS));
133 UADP_SPT_FIN(&spt_AESDMA_ParserSetAddedScrmbPattern[1]);
134
135 UADP_SPT_BGN(&spt_AESDMA_GetStatus[0], sizeof(MS_U32));
136 UADP_SPT_FIN(&spt_AESDMA_GetStatus[1]);
137
138 // UADP_SPT_BGN(&spt_AESDMA_MDrvProcessCipher[0], sizeof(HDCP_CIPHER));
139 // UADP_SPT_FIN(&spt_AESDMA_MDrvProcessCipher[1]);
140
141 UADPBypassSetSPT(&spt_AESDMA_START[0],UADP_SPT_SELF_SIZE,0, sizeof(AESDMA_START));
142 UADPBypassSetSPT(&spt_AESDMA_START[1],UADP_SPT_END , 0, 0);
143
144
145 UADP_SDT_NAME2(RSA_CALCULATE,RSA_CALCULATE,UADP_SDT_P2N,pstSign,DrvAESDMA_RSASig,UADP_SDT_P2N,pstKey,DrvAESDMA_RSAKey);
146 UADP_SDT_NAME1(RSA_OUTPUT,RSA_OUTPUT,UADP_SDT_P2N,pstRSAOut,DrvAESDMA_RSAOut);
147
148 *pIoctl= (FUtopiaIOctl)AESDMA_adp_Ioctl;
149 return 0;
150
151 }
152
153 /*
154 MS_U32 AESDMA_DDI_Open(void* pInstant,const void* const pAttribute)
155 {
156 return UtopiaOpen(MODULE_AESDMA,pInstant,0,pAttribute);
157 }
158 */
AESDMA_adp_Ioctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)159 MS_U32 AESDMA_adp_Ioctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
160 {
161 MS_U32 u32Ret = UTOPIA_STATUS_FAIL;
162 char buffer_arg[2048];
163
164 switch(u32Cmd)
165 {
166 case MDrv_CMD_AESDMA_Init :
167 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_INIT,NULL,buffer_arg,sizeof(buffer_arg));
168 break;
169 case MDrv_CMD_AESDMA_SetIV:
170 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SetIvList,NULL,buffer_arg,sizeof(buffer_arg));
171 break;
172 case MDrv_CMD_AESDMA_Reset:
173 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
174 break;
175 case MDrv_CMD_AESDMA_SetFileInOut:
176 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_FILE_INOUT, NULL, buffer_arg, sizeof(buffer_arg));
177 break;
178 case MDrv_CMD_AESDMA_SetKey:
179 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SetKeyList,NULL,buffer_arg,sizeof(buffer_arg));
180 break;
181 case MDrv_CMD_AESDMA_SelEng:
182 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SEL_ENG,NULL,buffer_arg,sizeof(buffer_arg));
183 break;
184 case MDrv_CMD_AESDMA_Start:
185 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_INIT, NULL,buffer_arg,sizeof(buffer_arg));
186 break;
187 case MDrv_CMD_AESDMA_GetStatus:
188 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_GetStatus,spt_AESDMA_GetStatus,buffer_arg,sizeof(buffer_arg));
189 break;
190 case MDrv_CMD_AESDMA_IsFinished:
191 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
192 break;
193 case MDrv_CMD_AESDMA_SetClk:
194 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
195 break;
196 case MDrv_CMD_AESDMA_SetSecureKey:
197 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
198 break;
199 case MDrv_CMD_AESDMA_SetPS:
200 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SET_PS,NULL,buffer_arg,sizeof(buffer_arg));
201 break;
202 case MDrv_CMD_AESDMA_PSRelease:
203 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
204 break;
205 case MDrv_CMD_AESDMA_GetPSMatchedByteCNT:
206 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
207 break;
208 case MDrv_CMD_AESDMA_GetPSMatchedPTN:
209 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
210 break;
211 case MDrv_CMD_AESDMA_Notify:
212 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_NOTIFY,NULL,buffer_arg,sizeof(buffer_arg));
213 break;
214 case MDrv_CMD_AESDMA_Rand:
215 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_RAND,NULL,buffer_arg,sizeof(buffer_arg));
216 break;
217 case MDrv_CMD_RSA_Calculate:
218 {
219 // void* pDatatmp_RSASig;
220 // void* pDatatmp_RSAKey;
221 // RSA_CALCULATE tmp_RSA;
222 //
223 // pDatatmp_RSASig = kmalloc(sizeof (DrvAESDMA_RSASig),GFP_KERNEL);
224 // pDatatmp_RSAKey = kmalloc(sizeof (DrvAESDMA_RSAKey),GFP_KERNEL);
225 //
226 // copy_from_user(&tmp_RSA,pArgs,sizeof (RSA_CALCULATE));
227 // copy_from_user(pDatatmp_RSASig, tmp_RSA.pstSign, sizeof (DrvAESDMA_RSASig));
228 // copy_from_user(pDatatmp_RSAKey, tmp_RSA.pstKey, sizeof (DrvAESDMA_RSAKey));
229 //
230 // tmp_RSA.pstSign = pDatatmp_RSASig;
231 // tmp_RSA.pstKey = pDatatmp_RSAKey;
232 //
233 // u32Ret = UtopiaIoctl(pInstanceTmp,u32Cmd,&tmp_RSA);
234 // free(pDatatmp_RSASig);
235 // free(pDatatmp_RSAKey);
236
237 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_RSA_CALCULATE,spt_RSA_CALCULATE,buffer_arg,sizeof(buffer_arg));
238 }
239 break;
240 case MDrv_CMD_RSA_IsFinished:
241 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
242 break;
243 case MDrv_CMD_RSA_Output:
244 {
245 // void* pDatatmp_RSAOut;
246 // void* pDatatmp_RSAUserOut;
247 // RSA_OUTPUT tmp_RSA;
248 //
249 // pDatatmp_RSAOut = kmalloc(sizeof (DrvAESDMA_RSAOut),GFP_KERNEL);
250 //
251 // copy_from_user(&tmp_RSA,pArgs,sizeof (RSA_OUTPUT));
252 // copy_from_user(pDatatmp_RSAOut, tmp_RSA.pstRSAOut, sizeof (RSA_OUTPUT));
253 //
254 // pDatatmp_RSAUserOut = tmp_RSA.pstRSAOut;
255 // tmp_RSA.pstRSAOut = pDatatmp_RSAOut;
256 //
257 // u32Ret = UtopiaIoctl(pInstanceTmp,u32Cmd,&tmp_RSA);
258 //
259 // copy_to_user(pDatatmp_RSAUserOut, tmp_RSA.pstRSAOut, sizeof(DrvAESDMA_RSAOut));
260 // free(pDatatmp_RSAOut);
261 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_RSA_OUTPUT,spt_RSA_OUTPUT,buffer_arg,sizeof(buffer_arg));
262 }
263 break;
264 case MDrv_CMD_SHA_Calculate:
265 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_SHA_CALCULATE,spt_SHA_CALCULATE,buffer_arg,sizeof(buffer_arg));
266 break;
267 case MDrv_CMD_AESDMA_Memcpy:
268 u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
269 break;
270 case MDrv_CMD_SHA_CalculateManual:
271 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_SHA_CALCULATE_MANUAL,spt_SHA_CALCULATE_MANUAL,buffer_arg,sizeof(buffer_arg));
272 break;
273 case MDrv_CMD_AESDMA_PARSER_MASKSCRMB:
274 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
275 break;
276 case MDrv_CMD_AESDMA_PARSER_SETSCRMBPATTERN:
277 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserSetScrmbPattern,NULL,buffer_arg,sizeof(buffer_arg));
278 break;
279 case MDrv_CMD_AESDMA_PARSER_BYPASSPID:
280 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserPyPassPid,NULL,buffer_arg,sizeof(buffer_arg));
281 break;
282 case MDrv_CMD_AESDMA_PARSER_SETPID:
283 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserSetPid,NULL,buffer_arg,sizeof(buffer_arg));
284 break;
285 case MDrv_CMD_AESDMA_PARSER_ENCRYPT:
286 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserEncrypt,NULL,buffer_arg,sizeof(buffer_arg));
287 break;
288 case MDrv_CMD_AESDMA_PARSER_DECRYPT:
289 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserDecrypt,NULL,buffer_arg,sizeof(buffer_arg));
290 break;
291 case MDrv_CMD_AESDMA_PARSER_Start:
292 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
293 break;
294 case MDrv_CMD_AESDMA_PARSER_SETADDEDSCRMBPATTERN:
295 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_ParserSetAddedScrmbPattern,NULL,buffer_arg,sizeof(buffer_arg));
296 break;
297 case MDrv_CMD_AESDMA_PARSER_QUERYPIDCOUNT:
298 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
299 break;
300 case MDrv_CMD_AESDMA_ENABLE_Two_Key:
301 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
302 break;
303 case MDrv_CMD_AESDMA_SetOddKey:
304 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SetKeyList,NULL,buffer_arg,sizeof(buffer_arg));
305 break;
306 case MDrv_CMD_AESDMA_SetOddIV:
307 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_SetIvList,NULL,buffer_arg,sizeof(buffer_arg));
308 break;
309 case MDrv_CMD_IS_SECRETKEY_IN_NORMAL_BLANK:
310 u32Ret= UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
311 break;
312 case MDrv_CMD_AESDMA_SetKey_Ex:
313 break;
314 case MDrv_CMD_AESDMA_SetIV_Ex:
315 break;
316 case MDrv_CMD_HDCP_MDrv_PROCESSCIPHER:
317 // u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_AESDMA_MDrvProcessCipher,NULL,buffer_arg,sizeof(buffer_arg));
318 break;
319
320 //case MDrv_CMD_Event_Poll:
321 // UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
322 default:
323 break;
324
325 }
326
327
328 return u32Ret;
329 // return UtopiaIoctl(pModuleDDI->pInstant,u32Cmd,arg);
330 }
331
332
333
334
335