1*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_LINUX_KERNEL)
2*53ee8cc1Swenshuai.xi #include <stdio.h>
3*53ee8cc1Swenshuai.xi #include <string.h>
4*53ee8cc1Swenshuai.xi #else
5*53ee8cc1Swenshuai.xi #include <linux/string.h>
6*53ee8cc1Swenshuai.xi #include <linux/slab.h>
7*53ee8cc1Swenshuai.xi #endif
8*53ee8cc1Swenshuai.xi #include "MsTypes.h"
9*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
10*53ee8cc1Swenshuai.xi #include "utopia.h"
11*53ee8cc1Swenshuai.xi #include "drvAESDMA.h"
12*53ee8cc1Swenshuai.xi #include "drvAESDMA_private.h"
13*53ee8cc1Swenshuai.xi #include "MsOS.h"
14*53ee8cc1Swenshuai.xi #include "halAESDMA.h"
15*53ee8cc1Swenshuai.xi #include "ULog.h"
16*53ee8cc1Swenshuai.xi
17*53ee8cc1Swenshuai.xi #define TAG_AESDMA "AESDMA"
18*53ee8cc1Swenshuai.xi
19*53ee8cc1Swenshuai.xi enum
20*53ee8cc1Swenshuai.xi {
21*53ee8cc1Swenshuai.xi AESDMA_POOL_ID_AES = 0,
22*53ee8cc1Swenshuai.xi AESDMA_POOL_ID_SHA,
23*53ee8cc1Swenshuai.xi AESDMA_POOL_ID_RSA,
24*53ee8cc1Swenshuai.xi } eAesdmaPoolID;
25*53ee8cc1Swenshuai.xi
AESDMARegisterToUtopia(FUtopiaOpen ModuleType)26*53ee8cc1Swenshuai.xi void AESDMARegisterToUtopia(FUtopiaOpen ModuleType)
27*53ee8cc1Swenshuai.xi {
28*53ee8cc1Swenshuai.xi // 1. deal with module
29*53ee8cc1Swenshuai.xi void* pUtopiaModule = NULL;
30*53ee8cc1Swenshuai.xi UtopiaModuleCreate(MODULE_AESDMA, 8, &pUtopiaModule);
31*53ee8cc1Swenshuai.xi UtopiaModuleRegister(pUtopiaModule);
32*53ee8cc1Swenshuai.xi UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)AESDMAOpen, (FUtopiaClose)AESDMAClose, (FUtopiaIOctl)AESDMAIoctl);
33*53ee8cc1Swenshuai.xi
34*53ee8cc1Swenshuai.xi // 2. deal with resource
35*53ee8cc1Swenshuai.xi void* psResource = NULL;
36*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceStart(pUtopiaModule, AESDMA_POOL_ID_AES);
37*53ee8cc1Swenshuai.xi UtopiaResourceCreate("AES", sizeof(AESDMA_RESOURCE_PRIVATE), &psResource);
38*53ee8cc1Swenshuai.xi UtopiaResourceRegister(pUtopiaModule, psResource, AESDMA_POOL_ID_AES);
39*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceEnd(pUtopiaModule, AESDMA_POOL_ID_AES);
40*53ee8cc1Swenshuai.xi
41*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceStart(pUtopiaModule, AESDMA_POOL_ID_SHA);
42*53ee8cc1Swenshuai.xi psResource = NULL;
43*53ee8cc1Swenshuai.xi UtopiaResourceCreate("SHA", sizeof(SHA_RESOURCE_PRIVATE), &psResource);
44*53ee8cc1Swenshuai.xi UtopiaResourceRegister(pUtopiaModule, psResource, AESDMA_POOL_ID_SHA);
45*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceEnd(pUtopiaModule, AESDMA_POOL_ID_SHA);
46*53ee8cc1Swenshuai.xi
47*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceStart(pUtopiaModule, AESDMA_POOL_ID_RSA);
48*53ee8cc1Swenshuai.xi psResource = NULL;
49*53ee8cc1Swenshuai.xi UtopiaResourceCreate("RSA", sizeof(RSA_RESOURCE_PRIVATE), &psResource);
50*53ee8cc1Swenshuai.xi UtopiaResourceRegister(pUtopiaModule, psResource, AESDMA_POOL_ID_RSA);
51*53ee8cc1Swenshuai.xi UtopiaModuleAddResourceEnd(pUtopiaModule, AESDMA_POOL_ID_RSA);
52*53ee8cc1Swenshuai.xi
53*53ee8cc1Swenshuai.xi }
54*53ee8cc1Swenshuai.xi
AESDMAOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)55*53ee8cc1Swenshuai.xi MS_U32 AESDMAOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
56*53ee8cc1Swenshuai.xi {
57*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[AESDMA INFO]AESDMA open \n"));
58*53ee8cc1Swenshuai.xi
59*53ee8cc1Swenshuai.xi AESDMA_INSTANT_PRIVATE *pAesdmaPri = NULL;
60*53ee8cc1Swenshuai.xi void *pAesdmaPriVoid = NULL;
61*53ee8cc1Swenshuai.xi UtopiaInstanceCreate(sizeof(AESDMA_INSTANT_PRIVATE), ppInstance);
62*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(*ppInstance, &pAesdmaPriVoid);
63*53ee8cc1Swenshuai.xi
64*53ee8cc1Swenshuai.xi pAesdmaPri = (AESDMA_INSTANT_PRIVATE *)pAesdmaPriVoid;
65*53ee8cc1Swenshuai.xi
66*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAInit = _MDrv_AESDMA_Init;
67*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetIV = _MDrv_AESDMA_SetIV;
68*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAReset = _MDrv_AESDMA_Reset;
69*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetFileInOut = _MDrv_AESDMA_SetFileInOut;
70*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetKey = _MDrv_AESDMA_SetKey;
71*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASelEng = _MDrv_AESDMA_SelEng;
72*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAStart = _MDrv_AESDMA_Start;
73*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAGetStatus = _MDrv_AESDMA_GetStatus;
74*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAIsFinished = _MDrv_AESDMA_IsFinished;
75*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetClk = _MDrv_AESDMA_Set_Clk;
76*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetSecureKey = _MDrv_AESDMA_SetSecureKey;
77*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetPS = _MDrv_AESDMA_SetPS;
78*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAPSRelease = _MDrv_AESDMA_PSRelease;
79*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAGetPSMatchedByteCNT = _MDrv_AESDMA_GetPSMatchedByteCNT;
80*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAGetPSMatchedPTN = _MDrv_AESDMA_GetPSMatchedPTN;
81*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMANotify = _MDrv_AESDMA_Notify;
82*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMARand = _MDrv_AESDMA_Rand;
83*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAGetRandNum = _MDrv_AESDMA_Get_Rand_Num;
84*53ee8cc1Swenshuai.xi pAesdmaPri->fpRSACalculate = _MDrv_RSA_Calculate;
85*53ee8cc1Swenshuai.xi pAesdmaPri->fpRSAIsFinished = _MDrv_RSA_IsFinished;
86*53ee8cc1Swenshuai.xi pAesdmaPri->fpRSAOutput = _MDrv_RSA_Output;
87*53ee8cc1Swenshuai.xi pAesdmaPri->fpSHACalculate = _MDrv_SHA_Calculate;
88*53ee8cc1Swenshuai.xi pAesdmaPri->fpSHACalculateManual = MDrv_SHA_CalculateManual;
89*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserMaskscrmb = _MDrv_AESDMA_Parser_MaskScrmb;
90*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserSetScrmbPatten = _MDrv_AESDMA_Parser_SetScrmbPattern;
91*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserBypassPid = _MDrv_AESDMA_Parser_BypassPid;
92*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserSetPid = _MDrv_AESDMA_Parser_SetPid;
93*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserEncrypt = _MDrv_AESDMA_Parser_Encrypt;
94*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserDecrypt = _MDrv_AESDMA_Parser_Decrypt;
95*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserQueryPidCount = _MDrv_AESDMA_Parser_QueryPidCount;
96*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAParserSetAddedScrmbPattern = _MDrv_AESDMA_Parser_SetAddedScrmbPattern;
97*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetKeySel = _MDrv_AESDMA_SetKeySel;
98*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASetOddIv = _MDrv_AESDMA_SetOddIV;
99*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAIsSecretKeyInNormalBlank = _MDrv_AESDMA_IsSecretKeyInNormalBank;
100*53ee8cc1Swenshuai.xi pAesdmaPri->fpHDCPHDCPProcessCipher = MDrv_HDCP_ProcessCipher;
101*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMANormalReset = _MDrv_AESDMA_NormalReset;
102*53ee8cc1Swenshuai.xi pAesdmaPri->fpGetHDCPCipherState = MDrv_HDCP_GetHdcpCipherState;
103*53ee8cc1Swenshuai.xi pAesdmaPri->bEvenScrmbPatternEn = FALSE;
104*53ee8cc1Swenshuai.xi pAesdmaPri->bOddScrmbPatternEn = FALSE;
105*53ee8cc1Swenshuai.xi pAesdmaPri->bSetKey = FALSE;
106*53ee8cc1Swenshuai.xi pAesdmaPri->bSetEng = FALSE;
107*53ee8cc1Swenshuai.xi pAesdmaPri->bSetIV = FALSE;
108*53ee8cc1Swenshuai.xi pAesdmaPri->bHwParserEn = FALSE;
109*53ee8cc1Swenshuai.xi pAesdmaPri->bPid0En = FALSE;
110*53ee8cc1Swenshuai.xi pAesdmaPri->bPid1En = FALSE;
111*53ee8cc1Swenshuai.xi pAesdmaPri->bMaskScrmbEn = FALSE;
112*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMAKeyIndex = _MDrv_AESDMA_SetKeyIndex;
113*53ee8cc1Swenshuai.xi pAesdmaPri->u32KeyIndexEven = 0x0;
114*53ee8cc1Swenshuai.xi pAesdmaPri->u32KeyIndexOdd = 0x0;
115*53ee8cc1Swenshuai.xi pAesdmaPri->bEnableKeyIndexEvenKey = FALSE;
116*53ee8cc1Swenshuai.xi pAesdmaPri->bEnableKeyIndexOddKey = FALSE;
117*53ee8cc1Swenshuai.xi pAesdmaPri->fpAesCtr64 = _MDrv_AESDMA_SetAesCtr64;
118*53ee8cc1Swenshuai.xi pAesdmaPri->bEnableAesCtr64 = FALSE;
119*53ee8cc1Swenshuai.xi pAesdmaPri->fpAESDMASecureKeyIdx = _MDrv_AESDMA_SetSecuredKeyIndex;
120*53ee8cc1Swenshuai.xi pAesdmaPri->u8SecureKeyIndex = 1;
121*53ee8cc1Swenshuai.xi pAesdmaPri->u32miunum = 0;
122*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
123*53ee8cc1Swenshuai.xi }
124*53ee8cc1Swenshuai.xi
AESDMAIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)125*53ee8cc1Swenshuai.xi MS_U32 AESDMAIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
126*53ee8cc1Swenshuai.xi {
127*53ee8cc1Swenshuai.xi PAESDMA_INIT pInitParam = NULL;
128*53ee8cc1Swenshuai.xi PAESDMA_FILE_INOUT pFileInOutParam = NULL;
129*53ee8cc1Swenshuai.xi PAESDMA_SEL_ENG pSelEngParam = NULL;
130*53ee8cc1Swenshuai.xi PAESDMA_SET_PS pSetPSParam = NULL;
131*53ee8cc1Swenshuai.xi PAESDMA_NOTIFY pNotifyParam = NULL;
132*53ee8cc1Swenshuai.xi PAESDMA_RAND pRandParam = NULL;
133*53ee8cc1Swenshuai.xi PRSA_CALCULATE pRSACalParam = NULL;
134*53ee8cc1Swenshuai.xi PRSA_OUTPUT pRSAOutParam = NULL;
135*53ee8cc1Swenshuai.xi PSHA_CALCULATE pSHACalParam = NULL;
136*53ee8cc1Swenshuai.xi PSHA_CALCULATE_MANUAL pSHACalManualParam = NULL;
137*53ee8cc1Swenshuai.xi PAESDMA_PARSER_CONFIGURATIONS pParserConfigurations = NULL;
138*53ee8cc1Swenshuai.xi PAESDMA_PARSER_PID_CONFIGURATIONS pParserPidConfigurations = NULL;
139*53ee8cc1Swenshuai.xi
140*53ee8cc1Swenshuai.xi MS_U32 u32Ret = 0;
141*53ee8cc1Swenshuai.xi MS_BOOL bEnable = 0;
142*53ee8cc1Swenshuai.xi AESDMA_INSTANT_PRIVATE* psAesInstPri = NULL;
143*53ee8cc1Swenshuai.xi AESDMA_RESOURCE_SHARED* psAesResourceShared = NULL;
144*53ee8cc1Swenshuai.xi RSA_RESOURCE_SHARED* psRSAResourceShared = NULL;
145*53ee8cc1Swenshuai.xi PHDCP_CIPHER psHDCPData = NULL;
146*53ee8cc1Swenshuai.xi PHDCP_CIPHER_STATE psHDCPCipherState = NULL;
147*53ee8cc1Swenshuai.xi PAESDMA_KEY_INDEX psAESDMAKeyIndex = NULL;
148*53ee8cc1Swenshuai.xi
149*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void*)&psAesInstPri);
150*53ee8cc1Swenshuai.xi void* pResource = NULL;
151*53ee8cc1Swenshuai.xi void* pModule = NULL;
152*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
153*53ee8cc1Swenshuai.xi MS_VIRT u32Addr = 0;
154*53ee8cc1Swenshuai.xi MS_U32 u32ShmId = 0;
155*53ee8cc1Swenshuai.xi MS_U32 u32BufSize = 0;
156*53ee8cc1Swenshuai.xi MS_VIRT u32IVarrayAddr = 0;
157*53ee8cc1Swenshuai.xi MS_VIRT u32KeyarryAddr = 0;
158*53ee8cc1Swenshuai.xi MS_U32 u32timeout_count = 0;
159*53ee8cc1Swenshuai.xi MS_U32 u32timeout_value = 0;
160*53ee8cc1Swenshuai.xi
161*53ee8cc1Swenshuai.xi switch(u32Cmd)
162*53ee8cc1Swenshuai.xi {
163*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Init:
164*53ee8cc1Swenshuai.xi {
165*53ee8cc1Swenshuai.xi pInitParam = (PAESDMA_INIT)pArgs;
166*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAInit)(pInitParam->u32miu0addr,pInitParam->u32miu1addr,pInitParam->u32miunum);
167*53ee8cc1Swenshuai.xi
168*53ee8cc1Swenshuai.xi psAesInstPri->u32miu0addr = pInitParam->u32miu0addr;
169*53ee8cc1Swenshuai.xi psAesInstPri->u32miu1addr = pInitParam->u32miu1addr;
170*53ee8cc1Swenshuai.xi psAesInstPri->u32miunum = pInitParam->u32miunum;
171*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]u32miu0addr = %lx\n",psAesInstPri->u32miu0addr));
172*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]u32miu1addr = %lx\n",psAesInstPri->u32miu1addr));
173*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]u32miunum = %lx\n",psAesInstPri->u32miunum));
174*53ee8cc1Swenshuai.xi
175*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
176*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
177*53ee8cc1Swenshuai.xi else
178*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
179*53ee8cc1Swenshuai.xi }
180*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetIV:
181*53ee8cc1Swenshuai.xi {
182*53ee8cc1Swenshuai.xi memcpy((void *)psAesInstPri->InitVector,(void *)pArgs,16);
183*53ee8cc1Swenshuai.xi psAesInstPri->bSetIV = TRUE;
184*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
185*53ee8cc1Swenshuai.xi }
186*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Reset:
187*53ee8cc1Swenshuai.xi {
188*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAReset)();
189*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
190*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
191*53ee8cc1Swenshuai.xi else
192*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
193*53ee8cc1Swenshuai.xi }
194*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetFileInOut:
195*53ee8cc1Swenshuai.xi {
196*53ee8cc1Swenshuai.xi pFileInOutParam = (PAESDMA_FILE_INOUT)pArgs;
197*53ee8cc1Swenshuai.xi psAesInstPri->u32FileinAddr = pFileInOutParam->u32FileinAddr;
198*53ee8cc1Swenshuai.xi psAesInstPri->u32FileInNum = pFileInOutParam->u32FileInNum;
199*53ee8cc1Swenshuai.xi psAesInstPri->u32FileOutSAddr = pFileInOutParam->u32FileOutSAddr;
200*53ee8cc1Swenshuai.xi psAesInstPri->u32FileOutEAddr = pFileInOutParam->u32FileOutEAddr;
201*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]FileinAddr = %lx\n",psAesInstPri->u32FileinAddr));
202*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]FileInNum = %lx\n",psAesInstPri->u32FileInNum));
203*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]FileOutSAddr = %lx\n",psAesInstPri->u32FileOutSAddr));
204*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]FileOutEAddr = %lx\n",psAesInstPri->u32FileOutEAddr));
205*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
206*53ee8cc1Swenshuai.xi }
207*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetKey:
208*53ee8cc1Swenshuai.xi {
209*53ee8cc1Swenshuai.xi memcpy((void *)psAesInstPri->CipherKey,(void *)pArgs,16);
210*53ee8cc1Swenshuai.xi psAesInstPri->bSetKey = TRUE;
211*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
212*53ee8cc1Swenshuai.xi }
213*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SelEng:
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi pSelEngParam = (PAESDMA_SEL_ENG)pArgs;
216*53ee8cc1Swenshuai.xi psAesInstPri->eMode = pSelEngParam->eMode;
217*53ee8cc1Swenshuai.xi psAesInstPri->bDescrypt = pSelEngParam->bDescrypt;
218*53ee8cc1Swenshuai.xi psAesInstPri->bSetEng = TRUE;
219*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]mode = %x\n",psAesInstPri->eMode));
220*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]Descrypt = %x\n",psAesInstPri->bDescrypt));
221*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
222*53ee8cc1Swenshuai.xi }
223*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Start:
224*53ee8cc1Swenshuai.xi {
225*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_AES, &pResource) != 0)
226*53ee8cc1Swenshuai.xi {
227*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
228*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
229*53ee8cc1Swenshuai.xi }
230*53ee8cc1Swenshuai.xi
231*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_CREATE))
234*53ee8cc1Swenshuai.xi {
235*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO]create Resouce shared memory fail\n");
236*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
237*53ee8cc1Swenshuai.xi }
238*53ee8cc1Swenshuai.xi memset( (MS_U8*)u32Addr, 0, sizeof(AESDMA_RESOURCE_SHARED));
239*53ee8cc1Swenshuai.xi }
240*53ee8cc1Swenshuai.xi
241*53ee8cc1Swenshuai.xi psAesResourceShared = (AESDMA_RESOURCE_SHARED*)u32Addr;
242*53ee8cc1Swenshuai.xi
243*53ee8cc1Swenshuai.xi psAesResourceShared->pAESResource = pResource;
244*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[AESDMA INFO]pResource = %x\n",(MS_U32)psAesResourceShared->pAESResource));
245*53ee8cc1Swenshuai.xi
246*53ee8cc1Swenshuai.xi //AESDMA reset
247*53ee8cc1Swenshuai.xi if ((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR)||
248*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_DES_CTR)||
249*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_TDES_CTR))
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMANormalReset)();
252*53ee8cc1Swenshuai.xi }
253*53ee8cc1Swenshuai.xi else
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAReset)();
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi
258*53ee8cc1Swenshuai.xi //AESDMA set mode and select encrypt or decrypt
259*53ee8cc1Swenshuai.xi if (psAesInstPri->bSetEng == TRUE)
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi //AESDMA set mode and select encrypt or decrypt
262*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASelEng)(psAesInstPri->eMode,psAesInstPri->bDescrypt);
263*53ee8cc1Swenshuai.xi psAesInstPri->bSetEng = FALSE;
264*53ee8cc1Swenshuai.xi }
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi //AESDMA set FileInOut info
267*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetFileInOut)(psAesInstPri->u32FileinAddr,psAesInstPri->u32FileInNum,psAesInstPri->u32FileOutSAddr,psAesInstPri->u32FileOutEAddr);
268*53ee8cc1Swenshuai.xi
269*53ee8cc1Swenshuai.xi //AESDMA set key
270*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableTwoKey==1)
271*53ee8cc1Swenshuai.xi {
272*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherOddKey[0];
273*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKeySel)((MS_U32*)u32KeyarryAddr, E_DRVAESDMA_ODD_KEY);
274*53ee8cc1Swenshuai.xi
275*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherKey[0];
276*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKeySel)((MS_U32*)u32KeyarryAddr, E_DRVAESDMA_EVEN_KEY);
277*53ee8cc1Swenshuai.xi }
278*53ee8cc1Swenshuai.xi else
279*53ee8cc1Swenshuai.xi {
280*53ee8cc1Swenshuai.xi if(psAesInstPri->bSecretKey==1)
281*53ee8cc1Swenshuai.xi {
282*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASecureKeyIdx)(psAesInstPri->u8SecureKeyIndex);
283*53ee8cc1Swenshuai.xi }
284*53ee8cc1Swenshuai.xi else
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherKey[0];
287*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKey)((MS_U32*)u32KeyarryAddr);
288*53ee8cc1Swenshuai.xi }
289*53ee8cc1Swenshuai.xi }
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi //AESDMA set IV
292*53ee8cc1Swenshuai.xi if((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CBC)||
293*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR)||
294*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_TDES_CTR)||
295*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTS_CBC))
296*53ee8cc1Swenshuai.xi {
297*53ee8cc1Swenshuai.xi u32IVarrayAddr = (MS_VIRT)&psAesInstPri->InitVector[0];
298*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetIV)((MS_U32*)u32IVarrayAddr);
299*53ee8cc1Swenshuai.xi psAesInstPri->bSetIV = FALSE;
300*53ee8cc1Swenshuai.xi
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableTwoKey==1)
303*53ee8cc1Swenshuai.xi {
304*53ee8cc1Swenshuai.xi u32IVarrayAddr = (MS_VIRT)&psAesInstPri->InitVectorOdd[0];
305*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetOddIv)((MS_U32*)u32IVarrayAddr);
306*53ee8cc1Swenshuai.xi }
307*53ee8cc1Swenshuai.xi }
308*53ee8cc1Swenshuai.xi
309*53ee8cc1Swenshuai.xi // HW Parser configurations
310*53ee8cc1Swenshuai.xi if (psAesInstPri->bHwParserEn == TRUE)
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi psAesInstPri->bHwParserEn = FALSE;
313*53ee8cc1Swenshuai.xi if (psAesInstPri->bParserDecrypt == TRUE)
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserDecrypt)(psAesInstPri->eParserMode);
316*53ee8cc1Swenshuai.xi }
317*53ee8cc1Swenshuai.xi else
318*53ee8cc1Swenshuai.xi {
319*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserEncrypt)(psAesInstPri->eParserMode);
320*53ee8cc1Swenshuai.xi }
321*53ee8cc1Swenshuai.xi
322*53ee8cc1Swenshuai.xi if (psAesInstPri->bEvenScrmbPatternEn == TRUE)
323*53ee8cc1Swenshuai.xi {
324*53ee8cc1Swenshuai.xi psAesInstPri->bEvenScrmbPatternEn = FALSE;
325*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetScrmbPatten)(psAesInstPri->eScrmbPattern);
326*53ee8cc1Swenshuai.xi }
327*53ee8cc1Swenshuai.xi
328*53ee8cc1Swenshuai.xi if (psAesInstPri->bOddScrmbPatternEn == TRUE)
329*53ee8cc1Swenshuai.xi {
330*53ee8cc1Swenshuai.xi psAesInstPri->bOddScrmbPatternEn = FALSE;
331*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetAddedScrmbPattern)(psAesInstPri->eAddedScrmbPattern);
332*53ee8cc1Swenshuai.xi }
333*53ee8cc1Swenshuai.xi
334*53ee8cc1Swenshuai.xi if (psAesInstPri->bMaskScrmbEn == TRUE)
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi psAesInstPri->bMaskScrmbEn = FALSE;
337*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserMaskscrmb)(psAesInstPri->bMaskScrmb);
338*53ee8cc1Swenshuai.xi }
339*53ee8cc1Swenshuai.xi
340*53ee8cc1Swenshuai.xi // Set PID
341*53ee8cc1Swenshuai.xi if (psAesInstPri->bBypassPid == TRUE)
342*53ee8cc1Swenshuai.xi {
343*53ee8cc1Swenshuai.xi psAesInstPri->bBypassPid = FALSE;
344*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserBypassPid)(psAesInstPri->bBypassPid);
345*53ee8cc1Swenshuai.xi }
346*53ee8cc1Swenshuai.xi
347*53ee8cc1Swenshuai.xi if (psAesInstPri->bPid0En == TRUE)
348*53ee8cc1Swenshuai.xi {
349*53ee8cc1Swenshuai.xi psAesInstPri->bPid0En = FALSE;
350*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetPid)(psAesInstPri->u8PidIndex, psAesInstPri->u16Pid);
351*53ee8cc1Swenshuai.xi }
352*53ee8cc1Swenshuai.xi
353*53ee8cc1Swenshuai.xi if (psAesInstPri->bPid1En == TRUE)
354*53ee8cc1Swenshuai.xi {
355*53ee8cc1Swenshuai.xi psAesInstPri->bPid1En = FALSE;
356*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetPid)(psAesInstPri->u8PidIndex1, psAesInstPri->u16Pid1);
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi }
359*53ee8cc1Swenshuai.xi //CBC segmental decryption case
360*53ee8cc1Swenshuai.xi //if(((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CBC)||(psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR)||(psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTS_CBC))
361*53ee8cc1Swenshuai.xi // && psAesInstPri->bDescrypt == TRUE)
362*53ee8cc1Swenshuai.xi if((((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CBC)||(psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTS_CBC))&& psAesInstPri->bDescrypt == TRUE)||
363*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR))
364*53ee8cc1Swenshuai.xi {
365*53ee8cc1Swenshuai.xi MS_U32 i;
366*53ee8cc1Swenshuai.xi MS_VIRT FileinVirtAddr;
367*53ee8cc1Swenshuai.xi
368*53ee8cc1Swenshuai.xi FileinVirtAddr = MsOS_PA2KSEG1(psAesInstPri->u32FileinAddr);
369*53ee8cc1Swenshuai.xi
370*53ee8cc1Swenshuai.xi if(psAesInstPri->eMode != E_DRVAESDMA_CIPHER_CTR)
371*53ee8cc1Swenshuai.xi {
372*53ee8cc1Swenshuai.xi for(i = 0; i < 16; i++)
373*53ee8cc1Swenshuai.xi {
374*53ee8cc1Swenshuai.xi psAesInstPri->InitVector[i] = *(MS_U8 *)(FileinVirtAddr + psAesInstPri->u32FileInNum-1-i);
375*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]Init Vector[%d] = 0x%x\n",(MS_U32)i, psAesInstPri->InitVector[i]));
376*53ee8cc1Swenshuai.xi }
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi }
379*53ee8cc1Swenshuai.xi
380*53ee8cc1Swenshuai.xi //AESDMA set FileInOut info
381*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetFileInOut)(psAesInstPri->u32FileinAddr,psAesInstPri->u32FileInNum,psAesInstPri->u32FileOutSAddr,psAesInstPri->u32FileOutEAddr);
382*53ee8cc1Swenshuai.xi
383*53ee8cc1Swenshuai.xi //AESDMA set key
384*53ee8cc1Swenshuai.xi if(psAesInstPri->bSecretKey==1)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASecureKeyIdx)(psAesInstPri->u8SecureKeyIndex);
387*53ee8cc1Swenshuai.xi }
388*53ee8cc1Swenshuai.xi else
389*53ee8cc1Swenshuai.xi {
390*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherKey[0];
391*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKey)((MS_U32*)u32KeyarryAddr);
392*53ee8cc1Swenshuai.xi }
393*53ee8cc1Swenshuai.xi
394*53ee8cc1Swenshuai.xi //Set Key Index
395*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableKeyIndexEvenKey == TRUE)
396*53ee8cc1Swenshuai.xi {
397*53ee8cc1Swenshuai.xi psAesInstPri->bEnableKeyIndexEvenKey = FALSE;
398*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAKeyIndex) (psAesInstPri->u32KeyIndexEven, FALSE);
399*53ee8cc1Swenshuai.xi }
400*53ee8cc1Swenshuai.xi
401*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableKeyIndexOddKey == TRUE)
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi psAesInstPri->bEnableKeyIndexOddKey = FALSE;
404*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAKeyIndex) (psAesInstPri->u32KeyIndexOdd, TRUE);
405*53ee8cc1Swenshuai.xi }
406*53ee8cc1Swenshuai.xi
407*53ee8cc1Swenshuai.xi //Set AESDMA CTR 64 Enable
408*53ee8cc1Swenshuai.xi psAesInstPri->fpAesCtr64 (psAesInstPri->bEnableAesCtr64);
409*53ee8cc1Swenshuai.xi
410*53ee8cc1Swenshuai.xi //AESDMA trigger start
411*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAStart)(1);
412*53ee8cc1Swenshuai.xi
413*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
414*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
415*53ee8cc1Swenshuai.xi else
416*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
417*53ee8cc1Swenshuai.xi }
418*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_GetStatus:
419*53ee8cc1Swenshuai.xi {
420*53ee8cc1Swenshuai.xi if ((psAesInstPri->fpAESDMAGetStatus)(&u32Ret) == UTOPIA_STATUS_SUCCESS)
421*53ee8cc1Swenshuai.xi {
422*53ee8cc1Swenshuai.xi *(MS_U32 *)pArgs = u32Ret;
423*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
424*53ee8cc1Swenshuai.xi }
425*53ee8cc1Swenshuai.xi else
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
428*53ee8cc1Swenshuai.xi }
429*53ee8cc1Swenshuai.xi }
430*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_IsFinished:
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi if(pArgs)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi u32timeout_value = *(MS_U32 *)pArgs;
435*53ee8cc1Swenshuai.xi }
436*53ee8cc1Swenshuai.xi else
437*53ee8cc1Swenshuai.xi {
438*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO] Please pass timeout value to driver\n");
439*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_INV;
440*53ee8cc1Swenshuai.xi }
441*53ee8cc1Swenshuai.xi
442*53ee8cc1Swenshuai.xi if ((u32timeout_value < 1) | (u32timeout_value > AES_MAX_TIMEOUT_VALUE))
443*53ee8cc1Swenshuai.xi {
444*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO] Invalid timeout value\n");
445*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_INV;
446*53ee8cc1Swenshuai.xi }
447*53ee8cc1Swenshuai.xi
448*53ee8cc1Swenshuai.xi
449*53ee8cc1Swenshuai.xi if (FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO]query Resouce shared memory fail\n");
452*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
453*53ee8cc1Swenshuai.xi }
454*53ee8cc1Swenshuai.xi else
455*53ee8cc1Swenshuai.xi {
456*53ee8cc1Swenshuai.xi psAesResourceShared = (AESDMA_RESOURCE_SHARED*)u32Addr;
457*53ee8cc1Swenshuai.xi pResource = psAesResourceShared->pAESResource;
458*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[AESDMA INFO]pResource = %x\n",(MS_U32)psAesResourceShared->pAESResource));
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi
461*53ee8cc1Swenshuai.xi psAesInstPri->fpAESDMAIsFinished(&u32Ret);
462*53ee8cc1Swenshuai.xi while (u32Ret != DRVAESDMA_OK)
463*53ee8cc1Swenshuai.xi {
464*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(10);
465*53ee8cc1Swenshuai.xi u32timeout_count++;
466*53ee8cc1Swenshuai.xi
467*53ee8cc1Swenshuai.xi //timeout
468*53ee8cc1Swenshuai.xi if(u32timeout_count>u32timeout_value)
469*53ee8cc1Swenshuai.xi {
470*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAReset)();
471*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
472*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA ERROR] AESDMA timeout happened\n");
473*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
474*53ee8cc1Swenshuai.xi }
475*53ee8cc1Swenshuai.xi psAesInstPri->fpAESDMAIsFinished(&u32Ret);
476*53ee8cc1Swenshuai.xi }
477*53ee8cc1Swenshuai.xi
478*53ee8cc1Swenshuai.xi //CBC segmental encryption case
479*53ee8cc1Swenshuai.xi if(((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CBC)||(psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTS_CBC))
480*53ee8cc1Swenshuai.xi && psAesInstPri->bDescrypt == FALSE)
481*53ee8cc1Swenshuai.xi {
482*53ee8cc1Swenshuai.xi //printf("[AESDMA]FileOutStartAddr PA = %x\n",psAesInstPri->u32FileOutSAddr);
483*53ee8cc1Swenshuai.xi //printf("[AESDMA]Descrypt = %x\n",psAesInstPri->bDescrypt);
484*53ee8cc1Swenshuai.xi MS_U32 i;
485*53ee8cc1Swenshuai.xi MS_VIRT FileOutStartVirtAddr;
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi FileOutStartVirtAddr = MsOS_PA2KSEG1(psAesInstPri->u32FileOutSAddr);
488*53ee8cc1Swenshuai.xi
489*53ee8cc1Swenshuai.xi for(i = 0; i < 16; i++)
490*53ee8cc1Swenshuai.xi {
491*53ee8cc1Swenshuai.xi psAesInstPri->InitVector[i] = *(MS_U8 *)(FileOutStartVirtAddr+psAesInstPri->u32FileInNum-1-i);
492*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]Init Vector[%d] = 0x%x\n",(MS_U32)i, psAesInstPri->InitVector[i]));
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi }
495*53ee8cc1Swenshuai.xi
496*53ee8cc1Swenshuai.xi //clear secret key setting
497*53ee8cc1Swenshuai.xi psAesInstPri->bSecretKey = 0;
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
500*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]MDrv_AESDMA_IsFinished\n"));
501*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
502*53ee8cc1Swenshuai.xi }
503*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetClk:
504*53ee8cc1Swenshuai.xi {
505*53ee8cc1Swenshuai.xi bEnable = *(MS_BOOL *)pArgs;
506*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMASetClk)(bEnable);
507*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
508*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
509*53ee8cc1Swenshuai.xi else
510*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
511*53ee8cc1Swenshuai.xi }
512*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetSecureKey:
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi psAesInstPri->bSecretKey = 1;
515*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
516*53ee8cc1Swenshuai.xi }
517*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetPS:
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi pSetPSParam = (PAESDMA_SET_PS)pArgs;
520*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMASetPS)(pSetPSParam->u32PTN,pSetPSParam->u32Mask,pSetPSParam->bPSin_Enable,pSetPSParam->bPSout_Enable);
521*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
522*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
523*53ee8cc1Swenshuai.xi else
524*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
525*53ee8cc1Swenshuai.xi }
526*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PSRelease:
527*53ee8cc1Swenshuai.xi {
528*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAPSRelease)();
529*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
530*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
531*53ee8cc1Swenshuai.xi else
532*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
533*53ee8cc1Swenshuai.xi }
534*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_GetPSMatchedByteCNT:
535*53ee8cc1Swenshuai.xi {
536*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAGetPSMatchedByteCNT)(&u32Ret);
537*53ee8cc1Swenshuai.xi return u32Ret;
538*53ee8cc1Swenshuai.xi }
539*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_GetPSMatchedPTN:
540*53ee8cc1Swenshuai.xi {
541*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAGetPSMatchedPTN)();
542*53ee8cc1Swenshuai.xi return u32Ret;
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Notify:
545*53ee8cc1Swenshuai.xi {
546*53ee8cc1Swenshuai.xi pNotifyParam = (PAESDMA_NOTIFY)pArgs;
547*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMANotify)(pNotifyParam->eEvents,pNotifyParam->pfCallback);
548*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
549*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
550*53ee8cc1Swenshuai.xi else
551*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
552*53ee8cc1Swenshuai.xi }
553*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Rand:
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi pRandParam = (PAESDMA_RAND)pArgs;
556*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMARand)(pRandParam->u32PABuf,pRandParam->u32Size);
557*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
558*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
559*53ee8cc1Swenshuai.xi else
560*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
561*53ee8cc1Swenshuai.xi }
562*53ee8cc1Swenshuai.xi case MDrv_CMD_RSA_Calculate:
563*53ee8cc1Swenshuai.xi {
564*53ee8cc1Swenshuai.xi pRSACalParam = (PRSA_CALCULATE)pArgs;
565*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_RSA, &pResource) != 0)
566*53ee8cc1Swenshuai.xi {
567*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
568*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
569*53ee8cc1Swenshuai.xi }
570*53ee8cc1Swenshuai.xi
571*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"RSA driver", sizeof(RSA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
572*53ee8cc1Swenshuai.xi {
573*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"RSA driver", sizeof(RSA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_CREATE))
574*53ee8cc1Swenshuai.xi {
575*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA INFO]create Resouce shared memory fail\n");
576*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
577*53ee8cc1Swenshuai.xi }
578*53ee8cc1Swenshuai.xi memset( (MS_U8*)u32Addr, 0, sizeof(RSA_RESOURCE_SHARED));
579*53ee8cc1Swenshuai.xi }
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi psRSAResourceShared = (RSA_RESOURCE_SHARED*)u32Addr;
582*53ee8cc1Swenshuai.xi
583*53ee8cc1Swenshuai.xi psRSAResourceShared->pRSAResource = pResource;
584*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[RSA INFO]pResource = %x\n",(MS_U32)psRSAResourceShared->pRSAResource));
585*53ee8cc1Swenshuai.xi
586*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpRSACalculate)(pRSACalParam->pstSign,pRSACalParam->pstKey,pRSACalParam->eMode);
587*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
588*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
589*53ee8cc1Swenshuai.xi else
590*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
591*53ee8cc1Swenshuai.xi }
592*53ee8cc1Swenshuai.xi case MDrv_CMD_RSA_IsFinished:
593*53ee8cc1Swenshuai.xi {
594*53ee8cc1Swenshuai.xi if(pArgs)
595*53ee8cc1Swenshuai.xi {
596*53ee8cc1Swenshuai.xi u32timeout_value = *(MS_U32 *)pArgs;
597*53ee8cc1Swenshuai.xi }
598*53ee8cc1Swenshuai.xi else
599*53ee8cc1Swenshuai.xi {
600*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA INFO] Please pass timeout value to driver\n");
601*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_INV;
602*53ee8cc1Swenshuai.xi }
603*53ee8cc1Swenshuai.xi
604*53ee8cc1Swenshuai.xi if (u32timeout_value > RSA_MAX_TIMEOUT_VALUE)
605*53ee8cc1Swenshuai.xi {
606*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA INFO] Invalid timeout value\n");
607*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_INV;
608*53ee8cc1Swenshuai.xi }
609*53ee8cc1Swenshuai.xi
610*53ee8cc1Swenshuai.xi if (FALSE == MsOS_SHM_GetId((MS_U8*)"RSA driver", sizeof(RSA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA INFO]query Resouce shared memory fail\n");
613*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi else
616*53ee8cc1Swenshuai.xi {
617*53ee8cc1Swenshuai.xi psRSAResourceShared = (RSA_RESOURCE_SHARED*)u32Addr;
618*53ee8cc1Swenshuai.xi pResource = psRSAResourceShared->pRSAResource;
619*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[RSA INFO]pResource = %x\n",(MS_U32)psRSAResourceShared->pRSAResource));
620*53ee8cc1Swenshuai.xi }
621*53ee8cc1Swenshuai.xi
622*53ee8cc1Swenshuai.xi while ((psAesInstPri->fpRSAIsFinished)() != DRVAESDMA_OK)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(10);
625*53ee8cc1Swenshuai.xi u32timeout_count++;
626*53ee8cc1Swenshuai.xi
627*53ee8cc1Swenshuai.xi //timeout
628*53ee8cc1Swenshuai.xi if(u32timeout_count>u32timeout_value)
629*53ee8cc1Swenshuai.xi {
630*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
631*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA ERROR] RSA timeout happened\n");
632*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi
635*53ee8cc1Swenshuai.xi }
636*53ee8cc1Swenshuai.xi
637*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[RSA INFO]MDrv_RSA_IsFinished\n"));
638*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
639*53ee8cc1Swenshuai.xi
640*53ee8cc1Swenshuai.xi }
641*53ee8cc1Swenshuai.xi case MDrv_CMD_RSA_Output:
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi if (FALSE == MsOS_SHM_GetId((MS_U8*)"RSA driver", sizeof(RSA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
644*53ee8cc1Swenshuai.xi {
645*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[RSA INFO]query Resouce shared memory fail\n");
646*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi else
649*53ee8cc1Swenshuai.xi {
650*53ee8cc1Swenshuai.xi psRSAResourceShared = (RSA_RESOURCE_SHARED*)u32Addr;
651*53ee8cc1Swenshuai.xi pResource = psRSAResourceShared->pRSAResource;
652*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[RSA INFO]pResource = %x\n",(MS_U32)psRSAResourceShared->pRSAResource));
653*53ee8cc1Swenshuai.xi }
654*53ee8cc1Swenshuai.xi
655*53ee8cc1Swenshuai.xi pRSAOutParam = (PRSA_OUTPUT)pArgs;
656*53ee8cc1Swenshuai.xi while((psAesInstPri->fpRSAIsFinished)()==1);
657*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpRSAOutput)(pRSAOutParam->eMode,pRSAOutParam->pstRSAOut);
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
660*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
661*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
662*53ee8cc1Swenshuai.xi else
663*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
664*53ee8cc1Swenshuai.xi }
665*53ee8cc1Swenshuai.xi case MDrv_CMD_SHA_Calculate:
666*53ee8cc1Swenshuai.xi {
667*53ee8cc1Swenshuai.xi pSHACalParam = (PSHA_CALCULATE)pArgs;
668*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_SHA, &pResource) != 0)
669*53ee8cc1Swenshuai.xi {
670*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
671*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
672*53ee8cc1Swenshuai.xi }
673*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpSHACalculate)(pSHACalParam->eMode,pSHACalParam->u32PAInBuf,pSHACalParam->u32Size,pSHACalParam->u32PAOutBuf);
674*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
675*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
676*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
677*53ee8cc1Swenshuai.xi else
678*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
679*53ee8cc1Swenshuai.xi }
680*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Memcpy:
681*53ee8cc1Swenshuai.xi {
682*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_AES, &pResource) != 0)
683*53ee8cc1Swenshuai.xi {
684*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
685*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
686*53ee8cc1Swenshuai.xi }
687*53ee8cc1Swenshuai.xi
688*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
689*53ee8cc1Swenshuai.xi {
690*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_CREATE))
691*53ee8cc1Swenshuai.xi {
692*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO]create Resouce shared memory fail\n");
693*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
694*53ee8cc1Swenshuai.xi }
695*53ee8cc1Swenshuai.xi memset( (MS_U8*)u32Addr, 0, sizeof(AESDMA_RESOURCE_SHARED));
696*53ee8cc1Swenshuai.xi }
697*53ee8cc1Swenshuai.xi
698*53ee8cc1Swenshuai.xi psAesResourceShared = (AESDMA_RESOURCE_SHARED*)u32Addr;
699*53ee8cc1Swenshuai.xi
700*53ee8cc1Swenshuai.xi psAesResourceShared->pAESResource = pResource;
701*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[AESDMA INFO]pResource = %x\n",(MS_U32)psAesResourceShared->pAESResource));
702*53ee8cc1Swenshuai.xi
703*53ee8cc1Swenshuai.xi //AESDMA reset
704*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAReset)();
705*53ee8cc1Swenshuai.xi
706*53ee8cc1Swenshuai.xi //AESDMA set FileInOut info
707*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetFileInOut)(psAesInstPri->u32FileinAddr,psAesInstPri->u32FileInNum,psAesInstPri->u32FileOutSAddr,psAesInstPri->u32FileOutEAddr);
708*53ee8cc1Swenshuai.xi
709*53ee8cc1Swenshuai.xi //AESDMA trigger start for using AESDMA replace BDMA case
710*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAStart)(1);
711*53ee8cc1Swenshuai.xi
712*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
713*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
714*53ee8cc1Swenshuai.xi else
715*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
716*53ee8cc1Swenshuai.xi }
717*53ee8cc1Swenshuai.xi case MDrv_CMD_SHA_CalculateManual:
718*53ee8cc1Swenshuai.xi {
719*53ee8cc1Swenshuai.xi pSHACalManualParam = (PSHA_CALCULATE_MANUAL)pArgs;
720*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_SHA, &pResource) != 0)
721*53ee8cc1Swenshuai.xi {
722*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
723*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpSHACalculateManual)(pSHACalManualParam->stCfg,pSHACalManualParam->eStage,pSHACalManualParam->u32DoneBytes,pSHACalManualParam->pu8SetIV);
726*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pResource);
727*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
728*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
729*53ee8cc1Swenshuai.xi else
730*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi
733*53ee8cc1Swenshuai.xi
734*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_SETADDEDSCRMBPATTERN:
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi if (pArgs == NULL)
737*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
738*53ee8cc1Swenshuai.xi
739*53ee8cc1Swenshuai.xi pParserConfigurations = (PAESDMA_PARSER_CONFIGURATIONS)pArgs;
740*53ee8cc1Swenshuai.xi psAesInstPri->eAddedScrmbPattern = pParserConfigurations->eAddedScrmbPattern;
741*53ee8cc1Swenshuai.xi psAesInstPri->bOddScrmbPatternEn = TRUE;
742*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi
745*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_QUERYPIDCOUNT:
746*53ee8cc1Swenshuai.xi {
747*53ee8cc1Swenshuai.xi if (pArgs == NULL)
748*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
749*53ee8cc1Swenshuai.xi
750*53ee8cc1Swenshuai.xi psAesInstPri->fpAESDMAParserQueryPidCount(pArgs);
751*53ee8cc1Swenshuai.xi
752*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
753*53ee8cc1Swenshuai.xi }
754*53ee8cc1Swenshuai.xi
755*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_MASKSCRMB:
756*53ee8cc1Swenshuai.xi {
757*53ee8cc1Swenshuai.xi if (pArgs == NULL)
758*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
759*53ee8cc1Swenshuai.xi
760*53ee8cc1Swenshuai.xi bEnable = *(MS_BOOL *)pArgs;
761*53ee8cc1Swenshuai.xi psAesInstPri->bMaskScrmb = bEnable;
762*53ee8cc1Swenshuai.xi psAesInstPri->bMaskScrmbEn = TRUE;
763*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
764*53ee8cc1Swenshuai.xi }
765*53ee8cc1Swenshuai.xi
766*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_SETSCRMBPATTERN:
767*53ee8cc1Swenshuai.xi {
768*53ee8cc1Swenshuai.xi if (pArgs == NULL)
769*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
770*53ee8cc1Swenshuai.xi
771*53ee8cc1Swenshuai.xi pParserConfigurations = (PAESDMA_PARSER_CONFIGURATIONS)pArgs;
772*53ee8cc1Swenshuai.xi psAesInstPri->eScrmbPattern = pParserConfigurations->eScrmbPattern;
773*53ee8cc1Swenshuai.xi psAesInstPri->bEvenScrmbPatternEn = TRUE;
774*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
775*53ee8cc1Swenshuai.xi }
776*53ee8cc1Swenshuai.xi
777*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_BYPASSPID:
778*53ee8cc1Swenshuai.xi {
779*53ee8cc1Swenshuai.xi if (pArgs == NULL)
780*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
781*53ee8cc1Swenshuai.xi
782*53ee8cc1Swenshuai.xi pParserPidConfigurations = (PAESDMA_PARSER_PID_CONFIGURATIONS)pArgs;
783*53ee8cc1Swenshuai.xi psAesInstPri->bBypassPid = pParserPidConfigurations->bBypassPid;
784*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
785*53ee8cc1Swenshuai.xi }
786*53ee8cc1Swenshuai.xi
787*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_SETPID:
788*53ee8cc1Swenshuai.xi {
789*53ee8cc1Swenshuai.xi if (pArgs == NULL)
790*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
791*53ee8cc1Swenshuai.xi
792*53ee8cc1Swenshuai.xi pParserPidConfigurations = (PAESDMA_PARSER_PID_CONFIGURATIONS)pArgs;
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi if (pParserPidConfigurations->u8PidIndex == 0)
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi psAesInstPri->u8PidIndex = pParserPidConfigurations->u8PidIndex;
797*53ee8cc1Swenshuai.xi psAesInstPri->u16Pid = pParserPidConfigurations->u16Pid;
798*53ee8cc1Swenshuai.xi psAesInstPri->bPid0En = TRUE;
799*53ee8cc1Swenshuai.xi }
800*53ee8cc1Swenshuai.xi else if (pParserPidConfigurations->u8PidIndex == 1)
801*53ee8cc1Swenshuai.xi {
802*53ee8cc1Swenshuai.xi psAesInstPri->u8PidIndex1 = pParserPidConfigurations->u8PidIndex;
803*53ee8cc1Swenshuai.xi psAesInstPri->u16Pid1 = pParserPidConfigurations->u16Pid;
804*53ee8cc1Swenshuai.xi psAesInstPri->bPid1En = TRUE;
805*53ee8cc1Swenshuai.xi }
806*53ee8cc1Swenshuai.xi
807*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
808*53ee8cc1Swenshuai.xi }
809*53ee8cc1Swenshuai.xi
810*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_ENCRYPT:
811*53ee8cc1Swenshuai.xi {
812*53ee8cc1Swenshuai.xi if (pArgs == NULL)
813*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
814*53ee8cc1Swenshuai.xi
815*53ee8cc1Swenshuai.xi pParserConfigurations = (PAESDMA_PARSER_CONFIGURATIONS)pArgs;
816*53ee8cc1Swenshuai.xi psAesInstPri->eParserMode = pParserConfigurations->eParserMode;
817*53ee8cc1Swenshuai.xi psAesInstPri->bParserDecrypt = FALSE;
818*53ee8cc1Swenshuai.xi psAesInstPri->bHwParserEn = TRUE;
819*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
820*53ee8cc1Swenshuai.xi }
821*53ee8cc1Swenshuai.xi
822*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_DECRYPT:
823*53ee8cc1Swenshuai.xi {
824*53ee8cc1Swenshuai.xi if (pArgs == NULL)
825*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
826*53ee8cc1Swenshuai.xi
827*53ee8cc1Swenshuai.xi pParserConfigurations = (PAESDMA_PARSER_CONFIGURATIONS)pArgs;
828*53ee8cc1Swenshuai.xi psAesInstPri->eParserMode = pParserConfigurations->eParserMode;
829*53ee8cc1Swenshuai.xi psAesInstPri->bParserDecrypt = TRUE;
830*53ee8cc1Swenshuai.xi psAesInstPri->bHwParserEn = TRUE;
831*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi
834*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_PARSER_Start:
835*53ee8cc1Swenshuai.xi {
836*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, AESDMA_POOL_ID_AES, &pResource) != 0)
837*53ee8cc1Swenshuai.xi {
838*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "UtopiaResourceObtainToInstant fail\n");
839*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOT_AVAIL;
840*53ee8cc1Swenshuai.xi }
841*53ee8cc1Swenshuai.xi
842*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_QUERY))
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi if(FALSE == MsOS_SHM_GetId((MS_U8*)"AESDMA driver", sizeof(AESDMA_RESOURCE_SHARED), &u32ShmId, &u32Addr, &u32BufSize, MSOS_SHM_CREATE))
845*53ee8cc1Swenshuai.xi {
846*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[AESDMA INFO]create Resouce shared memory fail\n");
847*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_NOMEM;
848*53ee8cc1Swenshuai.xi }
849*53ee8cc1Swenshuai.xi memset( (MS_U8*)u32Addr, 0, sizeof(AESDMA_RESOURCE_SHARED));
850*53ee8cc1Swenshuai.xi }
851*53ee8cc1Swenshuai.xi
852*53ee8cc1Swenshuai.xi psAesResourceShared = (AESDMA_RESOURCE_SHARED*)u32Addr;
853*53ee8cc1Swenshuai.xi
854*53ee8cc1Swenshuai.xi psAesResourceShared->pAESResource = pResource;
855*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "\n[AESDMA INFO]pResource = %x\n",(MS_U32)psAesResourceShared->pAESResource));
856*53ee8cc1Swenshuai.xi
857*53ee8cc1Swenshuai.xi if ((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR)||
858*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_DES_CTR)||
859*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_TDES_CTR))
860*53ee8cc1Swenshuai.xi {
861*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMANormalReset)();
862*53ee8cc1Swenshuai.xi }
863*53ee8cc1Swenshuai.xi else
864*53ee8cc1Swenshuai.xi {
865*53ee8cc1Swenshuai.xi //AESDMA reset
866*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAReset)();
867*53ee8cc1Swenshuai.xi }
868*53ee8cc1Swenshuai.xi
869*53ee8cc1Swenshuai.xi if (psAesInstPri->bSetEng == TRUE)
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi //AESDMA set mode and select encrypt or decrypt
872*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASelEng)(psAesInstPri->eMode,psAesInstPri->bDescrypt);
873*53ee8cc1Swenshuai.xi psAesInstPri->bSetEng = FALSE;
874*53ee8cc1Swenshuai.xi }
875*53ee8cc1Swenshuai.xi
876*53ee8cc1Swenshuai.xi //AESDMA set FileInOut info
877*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetFileInOut)(psAesInstPri->u32FileinAddr,psAesInstPri->u32FileInNum,psAesInstPri->u32FileOutSAddr,psAesInstPri->u32FileOutEAddr);
878*53ee8cc1Swenshuai.xi
879*53ee8cc1Swenshuai.xi //AESDMA set key
880*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableTwoKey==1)
881*53ee8cc1Swenshuai.xi {
882*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherOddKey[0];
883*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKeySel)((MS_U32*)u32KeyarryAddr, E_DRVAESDMA_ODD_KEY);
884*53ee8cc1Swenshuai.xi
885*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherKey[0];
886*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKeySel)((MS_U32*)u32KeyarryAddr, E_DRVAESDMA_EVEN_KEY);
887*53ee8cc1Swenshuai.xi }
888*53ee8cc1Swenshuai.xi else
889*53ee8cc1Swenshuai.xi {
890*53ee8cc1Swenshuai.xi if(psAesInstPri->bSecretKey==1)
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASecureKeyIdx)(psAesInstPri->u8SecureKeyIndex);
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi else
895*53ee8cc1Swenshuai.xi {
896*53ee8cc1Swenshuai.xi u32KeyarryAddr = (MS_VIRT)&psAesInstPri->CipherKey[0];
897*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetKey)((MS_U32*)u32KeyarryAddr);
898*53ee8cc1Swenshuai.xi }
899*53ee8cc1Swenshuai.xi }
900*53ee8cc1Swenshuai.xi
901*53ee8cc1Swenshuai.xi //AESDMA set IV
902*53ee8cc1Swenshuai.xi if((psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CBC)||
903*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTR)||
904*53ee8cc1Swenshuai.xi (psAesInstPri->eMode == E_DRVAESDMA_CIPHER_CTS_CBC))
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi u32IVarrayAddr = (MS_VIRT)&psAesInstPri->InitVector[0];
907*53ee8cc1Swenshuai.xi if (psAesInstPri->bSetIV == TRUE)
908*53ee8cc1Swenshuai.xi {
909*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetIV)((MS_U32*)u32IVarrayAddr);
910*53ee8cc1Swenshuai.xi psAesInstPri->bSetIV = FALSE;
911*53ee8cc1Swenshuai.xi }
912*53ee8cc1Swenshuai.xi
913*53ee8cc1Swenshuai.xi if(psAesInstPri->bEnableTwoKey==1)
914*53ee8cc1Swenshuai.xi {
915*53ee8cc1Swenshuai.xi u32IVarrayAddr = (MS_VIRT)&psAesInstPri->InitVectorOdd[0];
916*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMASetOddIv)((MS_U32*)u32IVarrayAddr);
917*53ee8cc1Swenshuai.xi }
918*53ee8cc1Swenshuai.xi
919*53ee8cc1Swenshuai.xi }
920*53ee8cc1Swenshuai.xi
921*53ee8cc1Swenshuai.xi // HW Parser configurations
922*53ee8cc1Swenshuai.xi if (psAesInstPri->bHwParserEn == TRUE)
923*53ee8cc1Swenshuai.xi {
924*53ee8cc1Swenshuai.xi psAesInstPri->bHwParserEn = FALSE;
925*53ee8cc1Swenshuai.xi }
926*53ee8cc1Swenshuai.xi if (psAesInstPri->bParserDecrypt == TRUE)
927*53ee8cc1Swenshuai.xi {
928*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserDecrypt)(psAesInstPri->eParserMode);
929*53ee8cc1Swenshuai.xi }
930*53ee8cc1Swenshuai.xi else
931*53ee8cc1Swenshuai.xi {
932*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserEncrypt)(psAesInstPri->eParserMode);
933*53ee8cc1Swenshuai.xi }
934*53ee8cc1Swenshuai.xi
935*53ee8cc1Swenshuai.xi if (psAesInstPri->bEvenScrmbPatternEn == TRUE)
936*53ee8cc1Swenshuai.xi {
937*53ee8cc1Swenshuai.xi psAesInstPri->bEvenScrmbPatternEn = FALSE;
938*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetScrmbPatten)(psAesInstPri->eScrmbPattern);
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi if (psAesInstPri->bOddScrmbPatternEn == TRUE)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi psAesInstPri->bOddScrmbPatternEn = FALSE;
944*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetAddedScrmbPattern)(psAesInstPri->eAddedScrmbPattern);
945*53ee8cc1Swenshuai.xi }
946*53ee8cc1Swenshuai.xi
947*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserMaskscrmb)(psAesInstPri->bMaskScrmb);
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi // Set PID
950*53ee8cc1Swenshuai.xi if (psAesInstPri->bBypassPid == TRUE)
951*53ee8cc1Swenshuai.xi {
952*53ee8cc1Swenshuai.xi psAesInstPri->bBypassPid = FALSE;
953*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserBypassPid)(psAesInstPri->bBypassPid);
954*53ee8cc1Swenshuai.xi }
955*53ee8cc1Swenshuai.xi
956*53ee8cc1Swenshuai.xi if (psAesInstPri->bPid0En == TRUE)
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi psAesInstPri->bPid0En = FALSE;
959*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetPid)(psAesInstPri->u8PidIndex, psAesInstPri->u16Pid);
960*53ee8cc1Swenshuai.xi }
961*53ee8cc1Swenshuai.xi if (psAesInstPri->bPid1En == TRUE)
962*53ee8cc1Swenshuai.xi {
963*53ee8cc1Swenshuai.xi psAesInstPri->bPid1En = FALSE;
964*53ee8cc1Swenshuai.xi (psAesInstPri->fpAESDMAParserSetPid)(psAesInstPri->u8PidIndex1, psAesInstPri->u16Pid1);
965*53ee8cc1Swenshuai.xi }
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi // AESDMA trigger start
968*53ee8cc1Swenshuai.xi u32Ret = (psAesInstPri->fpAESDMAStart)(1);
969*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGD(TAG_AESDMA, "[AESDMA INFO]MDrv_CMD_AESDMA_PARSER_Start\n"));
970*53ee8cc1Swenshuai.xi if (u32Ret == DRVAESDMA_OK)
971*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
972*53ee8cc1Swenshuai.xi else
973*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
974*53ee8cc1Swenshuai.xi }
975*53ee8cc1Swenshuai.xi
976*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetOddKey:
977*53ee8cc1Swenshuai.xi {
978*53ee8cc1Swenshuai.xi if (pArgs == NULL)
979*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
980*53ee8cc1Swenshuai.xi
981*53ee8cc1Swenshuai.xi memcpy((void *)psAesInstPri->CipherOddKey,(void *)pArgs,16);
982*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
983*53ee8cc1Swenshuai.xi }
984*53ee8cc1Swenshuai.xi
985*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_ENABLE_Two_Key:
986*53ee8cc1Swenshuai.xi {
987*53ee8cc1Swenshuai.xi if (pArgs == NULL)
988*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
989*53ee8cc1Swenshuai.xi
990*53ee8cc1Swenshuai.xi bEnable = *(MS_BOOL *)pArgs;
991*53ee8cc1Swenshuai.xi psAesInstPri->bEnableTwoKey = bEnable;
992*53ee8cc1Swenshuai.xi
993*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
994*53ee8cc1Swenshuai.xi }
995*53ee8cc1Swenshuai.xi
996*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_SetOddIV:
997*53ee8cc1Swenshuai.xi {
998*53ee8cc1Swenshuai.xi memcpy((void *)psAesInstPri->InitVectorOdd,(void *)pArgs,16);
999*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1000*53ee8cc1Swenshuai.xi }
1001*53ee8cc1Swenshuai.xi
1002*53ee8cc1Swenshuai.xi case MDrv_CMD_IS_SECRETKEY_IN_NORMAL_BLANK:
1003*53ee8cc1Swenshuai.xi {
1004*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1005*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1006*53ee8cc1Swenshuai.xi
1007*53ee8cc1Swenshuai.xi if ( psAesInstPri->fpAESDMAIsSecretKeyInNormalBlank(pArgs) == DRVAESDMA_OK )
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi else
1012*53ee8cc1Swenshuai.xi {
1013*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi
1017*53ee8cc1Swenshuai.xi
1018*53ee8cc1Swenshuai.xi case MDrv_CMD_HDCP_MDrv_PROCESSCIPHER:
1019*53ee8cc1Swenshuai.xi {
1020*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1021*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1022*53ee8cc1Swenshuai.xi
1023*53ee8cc1Swenshuai.xi psHDCPData = (HDCP_CIPHER *)pArgs;
1024*53ee8cc1Swenshuai.xi
1025*53ee8cc1Swenshuai.xi if ( psAesInstPri->fpHDCPHDCPProcessCipher(psHDCPData->u8Idx, (void*)psHDCPData->pu8Riv, (void*)psHDCPData->pu8ContentKey) == DRVAESDMA_OK )
1026*53ee8cc1Swenshuai.xi {
1027*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1028*53ee8cc1Swenshuai.xi }
1029*53ee8cc1Swenshuai.xi else
1030*53ee8cc1Swenshuai.xi {
1031*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1032*53ee8cc1Swenshuai.xi }
1033*53ee8cc1Swenshuai.xi }
1034*53ee8cc1Swenshuai.xi
1035*53ee8cc1Swenshuai.xi case MDrv_CMD_HDCP_GetHdcpCipherState:
1036*53ee8cc1Swenshuai.xi {
1037*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1038*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1039*53ee8cc1Swenshuai.xi
1040*53ee8cc1Swenshuai.xi psHDCPCipherState = (HDCP_CIPHER_STATE *)pArgs;
1041*53ee8cc1Swenshuai.xi
1042*53ee8cc1Swenshuai.xi if ( psAesInstPri->fpGetHDCPCipherState(psHDCPCipherState->u8Idx, psHDCPCipherState->pu8State) == DRVAESDMA_OK )
1043*53ee8cc1Swenshuai.xi {
1044*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1045*53ee8cc1Swenshuai.xi }
1046*53ee8cc1Swenshuai.xi else
1047*53ee8cc1Swenshuai.xi {
1048*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1049*53ee8cc1Swenshuai.xi }
1050*53ee8cc1Swenshuai.xi }
1051*53ee8cc1Swenshuai.xi
1052*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Set_Key_Index:
1053*53ee8cc1Swenshuai.xi {
1054*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1055*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1056*53ee8cc1Swenshuai.xi
1057*53ee8cc1Swenshuai.xi psAESDMAKeyIndex = (AESDMA_KEY_INDEX *)pArgs;
1058*53ee8cc1Swenshuai.xi
1059*53ee8cc1Swenshuai.xi if (psAESDMAKeyIndex-> bOddKeyEn == TRUE)
1060*53ee8cc1Swenshuai.xi {
1061*53ee8cc1Swenshuai.xi psAesInstPri->bEnableKeyIndexOddKey = TRUE;
1062*53ee8cc1Swenshuai.xi psAesInstPri->u32KeyIndexOdd = psAESDMAKeyIndex->u32KeyIndex;
1063*53ee8cc1Swenshuai.xi }
1064*53ee8cc1Swenshuai.xi else
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi psAesInstPri->bEnableKeyIndexEvenKey = TRUE;
1067*53ee8cc1Swenshuai.xi psAesInstPri->u32KeyIndexEven = psAESDMAKeyIndex->u32KeyIndex;
1068*53ee8cc1Swenshuai.xi }
1069*53ee8cc1Swenshuai.xi
1070*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1071*53ee8cc1Swenshuai.xi }
1072*53ee8cc1Swenshuai.xi
1073*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Set_AES_CTR64_En:
1074*53ee8cc1Swenshuai.xi {
1075*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1076*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1077*53ee8cc1Swenshuai.xi
1078*53ee8cc1Swenshuai.xi bEnable = *(MS_BOOL *)pArgs;
1079*53ee8cc1Swenshuai.xi psAesInstPri->bEnableAesCtr64 = bEnable;
1080*53ee8cc1Swenshuai.xi
1081*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1082*53ee8cc1Swenshuai.xi }
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_Set_Efuse_Key_Index:
1085*53ee8cc1Swenshuai.xi {
1086*53ee8cc1Swenshuai.xi if (pArgs == NULL)
1087*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1088*53ee8cc1Swenshuai.xi
1089*53ee8cc1Swenshuai.xi psAesInstPri->bSecretKey = 1;
1090*53ee8cc1Swenshuai.xi psAesInstPri->u8SecureKeyIndex = *(MS_U8 *)pArgs;
1091*53ee8cc1Swenshuai.xi
1092*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1093*53ee8cc1Swenshuai.xi }
1094*53ee8cc1Swenshuai.xi case MDrv_CMD_AESDMA_GetConfig:
1095*53ee8cc1Swenshuai.xi {
1096*53ee8cc1Swenshuai.xi if (psAesInstPri->u32miunum == 0){
1097*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
1098*53ee8cc1Swenshuai.xi }
1099*53ee8cc1Swenshuai.xi pInitParam = (PAESDMA_INIT) pArgs;
1100*53ee8cc1Swenshuai.xi
1101*53ee8cc1Swenshuai.xi pInitParam->u32miu0addr = psAesInstPri->u32miu0addr;
1102*53ee8cc1Swenshuai.xi pInitParam->u32miu1addr = psAesInstPri->u32miu1addr;
1103*53ee8cc1Swenshuai.xi pInitParam->u32miunum = psAesInstPri->u32miunum;
1104*53ee8cc1Swenshuai.xi
1105*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi default:
1108*53ee8cc1Swenshuai.xi break;
1109*53ee8cc1Swenshuai.xi };
1110*53ee8cc1Swenshuai.xi
1111*53ee8cc1Swenshuai.xi return 0;
1112*53ee8cc1Swenshuai.xi }
1113*53ee8cc1Swenshuai.xi
AESDMAClose(void * pInstance)1114*53ee8cc1Swenshuai.xi MS_U32 AESDMAClose(void* pInstance)
1115*53ee8cc1Swenshuai.xi {
1116*53ee8cc1Swenshuai.xi UtopiaInstanceDelete(pInstance);
1117*53ee8cc1Swenshuai.xi
1118*53ee8cc1Swenshuai.xi return 0;
1119*53ee8cc1Swenshuai.xi }
1120*53ee8cc1Swenshuai.xi
1121