xref: /utopia/UTPA2-700.0.x/modules/security/utopia_adaption/aesdma/AESDMA_adp.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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