1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi //
97*53ee8cc1Swenshuai.xi // file drvAESDMA.c
98*53ee8cc1Swenshuai.xi // @brief AESDMA Driver
99*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
100*53ee8cc1Swenshuai.xi //
101*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_LINUX_KERNEL)
104*53ee8cc1Swenshuai.xi #include <stdio.h>
105*53ee8cc1Swenshuai.xi #include <string.h>
106*53ee8cc1Swenshuai.xi #else
107*53ee8cc1Swenshuai.xi #include <linux/string.h>
108*53ee8cc1Swenshuai.xi #include <linux/slab.h>
109*53ee8cc1Swenshuai.xi #endif
110*53ee8cc1Swenshuai.xi #include "MsCommon.h"
111*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
112*53ee8cc1Swenshuai.xi #include "MsOS.h"
113*53ee8cc1Swenshuai.xi #include "MsVersion.h"
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
116*53ee8cc1Swenshuai.xi #include "halAESDMA.h"
117*53ee8cc1Swenshuai.xi #include "drvAESDMA.h"
118*53ee8cc1Swenshuai.xi #include "utopia.h"
119*53ee8cc1Swenshuai.xi #include "drvAESDMA_private.h"
120*53ee8cc1Swenshuai.xi #include "ULog.h"
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
123*53ee8cc1Swenshuai.xi // Driver Compiler Option
124*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
125*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
126*53ee8cc1Swenshuai.xi #define AESDMAIntEnable() MsOS_EnableInterrupt(E_INT_IRQ_WADR_ERR);
127*53ee8cc1Swenshuai.xi #define AESDMAIntDisable() MsOS_DisableInterrupt(E_INT_IRQ_WADR_ERR);
128*53ee8cc1Swenshuai.xi #define AESDMAIntAttach() MsOS_AttachInterrupt(E_INT_IRQ_WADR_ERR, (InterruptCb )_AESDMA_Isr)
129*53ee8cc1Swenshuai.xi #define AESDMAIntDetach() MsOS_DetachInterrupt (E_INT_IRQ_WADR_ERR)
130*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
131*53ee8cc1Swenshuai.xi #define AESDMAPA2KSEG1(addr) ((void *)(((MS_U32)addr) | 0xa0000000)) //physical -> unchched
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi
134*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
135*53ee8cc1Swenshuai.xi // Local Defines
136*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
138*53ee8cc1Swenshuai.xi #define AESDMA_TASK_STACK_SIZE 4096UL
139*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi #define TAG_AESDMA "AESDMA"
142*53ee8cc1Swenshuai.xi
143*53ee8cc1Swenshuai.xi static MS_PHY phyTmpFileInAddr = 0;
144*53ee8cc1Swenshuai.xi static MS_PHY phyTmpFileOutAddr = 0;
145*53ee8cc1Swenshuai.xi static MS_U32 u32TmpFileInNum = 0;
146*53ee8cc1Swenshuai.xi
147*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi // Global Variable
149*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi //#ifndef MSOS_TYPE_LINUX
151*53ee8cc1Swenshuai.xi static DrvAESDMA_Event _AESDMAEvtNotify;
152*53ee8cc1Swenshuai.xi static P_DrvAESDMA_EvtCallback _AESDMACallback;
153*53ee8cc1Swenshuai.xi //#endif // #ifndef MSOS_TYPE_LINUX
154*53ee8cc1Swenshuai.xi
155*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
156*53ee8cc1Swenshuai.xi static void* _pAESDMATaskStack;
157*53ee8cc1Swenshuai.xi static MS_U8 _u8AESDMA_StackBuffer[AESDMA_TASK_STACK_SIZE];
158*53ee8cc1Swenshuai.xi static MS_S32 _s32AESDMATaskId;
159*53ee8cc1Swenshuai.xi static MS_U32 _u32LastErr;
160*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
161*53ee8cc1Swenshuai.xi
162*53ee8cc1Swenshuai.xi static MS_PHY _u32MIU0_Addr, _u32MIU1_Addr , _u32MIU2_Addr, _u32MIU_num;
163*53ee8cc1Swenshuai.xi static DrvAESDMA_DbgLevel _u32AESDMADBGLevel;
164*53ee8cc1Swenshuai.xi static MS_BOOL _bExitIsrLoop;
165*53ee8cc1Swenshuai.xi
166*53ee8cc1Swenshuai.xi static MSIF_Version _drv_aesdma_version = {
167*53ee8cc1Swenshuai.xi .DDI = { AESDMA_DRV_VERSION, },
168*53ee8cc1Swenshuai.xi };
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
171*53ee8cc1Swenshuai.xi void* pInstantAesdma = NULL;
172*53ee8cc1Swenshuai.xi void* pAttributeAesdma = NULL;
173*53ee8cc1Swenshuai.xi #endif
174*53ee8cc1Swenshuai.xi
175*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
176*53ee8cc1Swenshuai.xi // Internal Variable
177*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
178*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
179*53ee8cc1Swenshuai.xi static MS_S32 _s32AESDMAMutexId;
180*53ee8cc1Swenshuai.xi static MS_S32 _s32AESDMAEventId;
181*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
182*53ee8cc1Swenshuai.xi static MS_U8 _u8IsInit = FALSE;
183*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
184*53ee8cc1Swenshuai.xi static MS_BOOL bSecureModeEnable = FALSE;
185*53ee8cc1Swenshuai.xi #endif
186*53ee8cc1Swenshuai.xi
187*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
188*53ee8cc1Swenshuai.xi #define _AESDMA_SetEvent(flag) MsOS_SetEvent(_s32AESDMAEventId, (flag))
189*53ee8cc1Swenshuai.xi #define _AESDMA_GetEvent(events) MsOS_WaitEvent(_s32AESDMAEventId, AESDMA_STATES_GROUP, &events, E_OR_CLEAR, MSOS_WAIT_FOREVER)
190*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
191*53ee8cc1Swenshuai.xi
192*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
193*53ee8cc1Swenshuai.xi // Debug Function
194*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
195*53ee8cc1Swenshuai.xi #define DEBUG_AES_DMA(debug_level, x) do { if (_u32AESDMADBGLevel >= (debug_level)) (x); } while(0)
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
198*53ee8cc1Swenshuai.xi // Internal Function
199*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_AESDMA_Chk_MIU(MS_PHY * phy64InAddr,MS_U32 u32InLen,MS_PHY * phy64OutSAddr,MS_PHY * phyOutEAddr)200*53ee8cc1Swenshuai.xi static MS_BOOL _AESDMA_Chk_MIU(MS_PHY *phy64InAddr, MS_U32 u32InLen, MS_PHY *phy64OutSAddr, MS_PHY *phyOutEAddr)
201*53ee8cc1Swenshuai.xi {
202*53ee8cc1Swenshuai.xi
203*53ee8cc1Swenshuai.xi if (_u32MIU_num == 3)
204*53ee8cc1Swenshuai.xi {
205*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr > *phy64InAddr) & (_u32MIU1_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr > *phy64OutSAddr) & (_u32MIU1_Addr > *phyOutEAddr))
206*53ee8cc1Swenshuai.xi {
207*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE);
208*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,FALSE); // miu0->miu0
209*53ee8cc1Swenshuai.xi return TRUE;
210*53ee8cc1Swenshuai.xi }
211*53ee8cc1Swenshuai.xi
212*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr > *phy64InAddr) & (_u32MIU1_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr < *phy64OutSAddr) & (_u32MIU1_Addr < *phyOutEAddr) & (_u32MIU2_Addr > *phy64OutSAddr) & (_u32MIU2_Addr > *phyOutEAddr))
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU1_Addr;
215*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU1_Addr;
216*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,TRUE);
217*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,FALSE); // miu0->miu1
218*53ee8cc1Swenshuai.xi return TRUE;
219*53ee8cc1Swenshuai.xi }
220*53ee8cc1Swenshuai.xi
221*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr > *phy64InAddr) & (_u32MIU1_Addr > *phy64InAddr+u32InLen) & (_u32MIU2_Addr <= *phy64OutSAddr) & (_u32MIU2_Addr <= *phyOutEAddr))
222*53ee8cc1Swenshuai.xi {
223*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU2_Addr;
224*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU2_Addr;
225*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE);
226*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,TRUE); // miu0->miu2
227*53ee8cc1Swenshuai.xi return TRUE;
228*53ee8cc1Swenshuai.xi }
229*53ee8cc1Swenshuai.xi
230*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr <= *phy64InAddr) & (_u32MIU1_Addr <= *phy64InAddr+u32InLen) & (_u32MIU2_Addr > *phy64InAddr) & (_u32MIU2_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr > *phy64OutSAddr) & (_u32MIU1_Addr > *phyOutEAddr))
231*53ee8cc1Swenshuai.xi {
232*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU1_Addr;
233*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(TRUE,FALSE);
234*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,FALSE); // miu1->miu0
235*53ee8cc1Swenshuai.xi return TRUE;
236*53ee8cc1Swenshuai.xi }
237*53ee8cc1Swenshuai.xi
238*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr <= *phy64InAddr) & (_u32MIU1_Addr <= *phy64InAddr+u32InLen) & (_u32MIU2_Addr > *phy64InAddr) & (_u32MIU2_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr <= *phy64OutSAddr) & (_u32MIU1_Addr <= *phyOutEAddr) & (_u32MIU2_Addr > *phy64OutSAddr) & (_u32MIU2_Addr > *phyOutEAddr))
239*53ee8cc1Swenshuai.xi {
240*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU1_Addr;
241*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU1_Addr;
242*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU1_Addr;
243*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(TRUE,TRUE);
244*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,FALSE); // miu1->miu1
245*53ee8cc1Swenshuai.xi return TRUE;
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr <= *phy64InAddr) & (_u32MIU1_Addr <= *phy64InAddr+u32InLen) & (_u32MIU2_Addr > *phy64InAddr) & (_u32MIU2_Addr > *phy64InAddr+u32InLen) & (_u32MIU2_Addr <= *phy64OutSAddr) & (_u32MIU2_Addr <= *phyOutEAddr))
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU1_Addr;
251*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU2_Addr;
252*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU2_Addr;
253*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(TRUE,FALSE);
254*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(FALSE,TRUE); // miu1->miu2
255*53ee8cc1Swenshuai.xi return TRUE;
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi
258*53ee8cc1Swenshuai.xi if ((_u32MIU2_Addr <= *phy64InAddr) & (_u32MIU2_Addr <= *phy64InAddr+u32InLen) & (_u32MIU1_Addr > *phy64OutSAddr) & (_u32MIU1_Addr > *phyOutEAddr))
259*53ee8cc1Swenshuai.xi {
260*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU2_Addr;
261*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE);
262*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(TRUE,FALSE); // miu2->miu0
263*53ee8cc1Swenshuai.xi return TRUE;
264*53ee8cc1Swenshuai.xi }
265*53ee8cc1Swenshuai.xi
266*53ee8cc1Swenshuai.xi if ((_u32MIU2_Addr <= *phy64InAddr) & (_u32MIU2_Addr <= *phy64InAddr+u32InLen) & (_u32MIU1_Addr <= *phy64OutSAddr) & (_u32MIU1_Addr <= *phyOutEAddr) & (_u32MIU2_Addr > *phy64OutSAddr) & (_u32MIU2_Addr > *phyOutEAddr))
267*53ee8cc1Swenshuai.xi {
268*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU2_Addr;
269*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU1_Addr;
270*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU1_Addr;
271*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,TRUE);
272*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(TRUE,FALSE); // miu2->miu1
273*53ee8cc1Swenshuai.xi return TRUE;
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi
276*53ee8cc1Swenshuai.xi if ((_u32MIU2_Addr <= *phy64InAddr) & (_u32MIU2_Addr <= *phy64InAddr+u32InLen) & (_u32MIU2_Addr <= *phy64OutSAddr) & (_u32MIU2_Addr <= *phyOutEAddr))
277*53ee8cc1Swenshuai.xi {
278*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU2_Addr;
279*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU2_Addr;
280*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU2_Addr;
281*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE);
282*53ee8cc1Swenshuai.xi AESDMA_Set_MIU2_Path(TRUE,TRUE); // miu2->miu2
283*53ee8cc1Swenshuai.xi return TRUE;
284*53ee8cc1Swenshuai.xi }
285*53ee8cc1Swenshuai.xi return FALSE;
286*53ee8cc1Swenshuai.xi }
287*53ee8cc1Swenshuai.xi else if (_u32MIU_num == 2)
288*53ee8cc1Swenshuai.xi {
289*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr > *phy64InAddr) & (_u32MIU1_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr > *phy64OutSAddr) & (_u32MIU1_Addr > *phyOutEAddr))
290*53ee8cc1Swenshuai.xi {
291*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE); // miu0->miu0
292*53ee8cc1Swenshuai.xi return TRUE;
293*53ee8cc1Swenshuai.xi }
294*53ee8cc1Swenshuai.xi
295*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr < *phy64InAddr) & (_u32MIU1_Addr < *phy64InAddr+u32InLen) & (_u32MIU1_Addr < *phy64OutSAddr) & (_u32MIU1_Addr < *phyOutEAddr))
296*53ee8cc1Swenshuai.xi {
297*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU1_Addr;
298*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU1_Addr;
299*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU1_Addr;
300*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(TRUE,TRUE); // miu1->miu1
301*53ee8cc1Swenshuai.xi return TRUE;
302*53ee8cc1Swenshuai.xi }
303*53ee8cc1Swenshuai.xi
304*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr > *phy64InAddr) & (_u32MIU1_Addr > *phy64InAddr+u32InLen) & (_u32MIU1_Addr <= *phy64OutSAddr) & (_u32MIU1_Addr <= *phyOutEAddr))
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi *phy64OutSAddr = *phy64OutSAddr - _u32MIU1_Addr;
307*53ee8cc1Swenshuai.xi *phyOutEAddr = *phyOutEAddr - _u32MIU1_Addr;
308*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,TRUE); // miu0->miu1
309*53ee8cc1Swenshuai.xi return TRUE;
310*53ee8cc1Swenshuai.xi }
311*53ee8cc1Swenshuai.xi
312*53ee8cc1Swenshuai.xi if ((_u32MIU1_Addr <= *phy64InAddr) & (_u32MIU1_Addr <= *phy64InAddr+u32InLen) & (_u32MIU1_Addr > *phy64OutSAddr) & (_u32MIU1_Addr > *phyOutEAddr))
313*53ee8cc1Swenshuai.xi {
314*53ee8cc1Swenshuai.xi *phy64InAddr = *phy64InAddr - _u32MIU1_Addr;
315*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(TRUE,FALSE); // miu1->miu0
316*53ee8cc1Swenshuai.xi return TRUE;
317*53ee8cc1Swenshuai.xi }
318*53ee8cc1Swenshuai.xi return FALSE;
319*53ee8cc1Swenshuai.xi }
320*53ee8cc1Swenshuai.xi else
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi if ((_u32MIU0_Addr < *phy64InAddr) & (_u32MIU0_Addr < *phy64InAddr+u32InLen) & (_u32MIU0_Addr < *phy64OutSAddr) & (_u32MIU0_Addr < *phyOutEAddr))
323*53ee8cc1Swenshuai.xi {
324*53ee8cc1Swenshuai.xi AESDMA_Set_MIU_Path(FALSE,FALSE); // miu0->miu0
325*53ee8cc1Swenshuai.xi
326*53ee8cc1Swenshuai.xi }
327*53ee8cc1Swenshuai.xi return TRUE;
328*53ee8cc1Swenshuai.xi }
329*53ee8cc1Swenshuai.xi }
330*53ee8cc1Swenshuai.xi
331*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
_AESDMA_Isr(void)332*53ee8cc1Swenshuai.xi static void _AESDMA_Isr(void)
333*53ee8cc1Swenshuai.xi {
334*53ee8cc1Swenshuai.xi MS_U32 u32AESDMAStatus;
335*53ee8cc1Swenshuai.xi
336*53ee8cc1Swenshuai.xi // Direct register access
337*53ee8cc1Swenshuai.xi u32AESDMAStatus = AESDMA_Get_AESDMA_Status();
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi if (HAS_FLAG(u32AESDMAStatus, AESDMA_STATES_GROUP))
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi _AESDMA_SetEvent(HAS_FLAG(u32AESDMAStatus, AESDMA_STATES_GROUP)); // Trigger task
342*53ee8cc1Swenshuai.xi }
343*53ee8cc1Swenshuai.xi AESDMA_Clear_Int();
344*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
345*53ee8cc1Swenshuai.xi AESDMAIntEnable();
346*53ee8cc1Swenshuai.xi }
347*53ee8cc1Swenshuai.xi
_AESDMA_Isr_Proc(void)348*53ee8cc1Swenshuai.xi static void _AESDMA_Isr_Proc(void)
349*53ee8cc1Swenshuai.xi {
350*53ee8cc1Swenshuai.xi MS_U32 u32Events;
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi while ( _bExitIsrLoop == FALSE )
353*53ee8cc1Swenshuai.xi {
354*53ee8cc1Swenshuai.xi _AESDMA_GetEvent(u32Events);
355*53ee8cc1Swenshuai.xi if (u32Events & AESDMA_STATES_GROUP)
356*53ee8cc1Swenshuai.xi {
357*53ee8cc1Swenshuai.xi if (HAS_FLAG(u32Events, AESDMA_STATES_GROUP) && _AESDMAEvtNotify && _AESDMACallback)
358*53ee8cc1Swenshuai.xi {
359*53ee8cc1Swenshuai.xi switch (u32Events & AESDMA_STATES_GROUP)
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi case AESDMA_DMA_DONE:
362*53ee8cc1Swenshuai.xi if (HAS_FLAG(_AESDMAEvtNotify, E_DRVAESDMA_EVENT_DMA_DONE))
363*53ee8cc1Swenshuai.xi {
364*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
365*53ee8cc1Swenshuai.xi _AESDMACallback(E_DRVAESDMA_EVENT_DMA_DONE);
366*53ee8cc1Swenshuai.xi }
367*53ee8cc1Swenshuai.xi break;
368*53ee8cc1Swenshuai.xi case AESDMA_DMA_PAUSE:
369*53ee8cc1Swenshuai.xi if (HAS_FLAG(_AESDMAEvtNotify, E_DRVAESDMA_EVENT_DMA_PAUSE))
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi _AESDMACallback(E_DRVAESDMA_EVENT_DMA_PAUSE);
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi break;
374*53ee8cc1Swenshuai.xi default:
375*53ee8cc1Swenshuai.xi break;
376*53ee8cc1Swenshuai.xi }
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi }
379*53ee8cc1Swenshuai.xi } // Task while loop
380*53ee8cc1Swenshuai.xi }
381*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
382*53ee8cc1Swenshuai.xi
_AESDMA_MSBF2Native(const MS_U8 u8Bytes[4])383*53ee8cc1Swenshuai.xi MS_U32 _AESDMA_MSBF2Native(const MS_U8 u8Bytes[4])
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi return (u8Bytes[0] << 24) | (u8Bytes[1] << 16) | (u8Bytes[2] << 8) | u8Bytes[3];
386*53ee8cc1Swenshuai.xi }
387*53ee8cc1Swenshuai.xi
388*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
389*53ee8cc1Swenshuai.xi // Global Function
390*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
391*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
MDrv_AESDMA_SetSecurityInfo(DrvAESDMA_SecureInfo * pSecureInfo)392*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetSecurityInfo(DrvAESDMA_SecureInfo *pSecureInfo)
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi bSecureModeEnable = pSecureInfo->bSecureModeEnable;
395*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
396*53ee8cc1Swenshuai.xi }
397*53ee8cc1Swenshuai.xi #endif
398*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Init(MS_PHY phy64miu0addr,MS_PHY phy64miu1addr,MS_U32 u32miunum)399*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Init(MS_PHY phy64miu0addr , MS_PHY phy64miu1addr , MS_U32 u32miunum)
400*53ee8cc1Swenshuai.xi {
401*53ee8cc1Swenshuai.xi MS_VIRT u32Bank, u32IRBank;
402*53ee8cc1Swenshuai.xi MS_PHY u32BankSize; // Non-PM bank
403*53ee8cc1Swenshuai.xi MS_PHY u32IrBankSize; // PM bank
404*53ee8cc1Swenshuai.xi
405*53ee8cc1Swenshuai.xi _bExitIsrLoop = FALSE;
406*53ee8cc1Swenshuai.xi
407*53ee8cc1Swenshuai.xi if(_u8IsInit == FALSE)
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi if (FALSE == MDrv_MMIO_GetBASE(&u32Bank, &u32BankSize, MS_MODULE_BDMA))
410*53ee8cc1Swenshuai.xi {
411*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGE(TAG_AESDMA, "MDrv_MMIO_GetBASE (NonPM base)fail\n"));
412*53ee8cc1Swenshuai.xi MS_ASSERT(0);
413*53ee8cc1Swenshuai.xi }
414*53ee8cc1Swenshuai.xi
415*53ee8cc1Swenshuai.xi if (FALSE == MDrv_MMIO_GetBASE(&u32IRBank, &u32IrBankSize, MS_MODULE_IR))
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(ULOGE(TAG_AESDMA, "MDrv_MMIO_GetBASE (PM base)fail\n"));
418*53ee8cc1Swenshuai.xi MS_ASSERT(0);
419*53ee8cc1Swenshuai.xi }
420*53ee8cc1Swenshuai.xi _u8IsInit = TRUE;
421*53ee8cc1Swenshuai.xi HAL_AESDMA_SetBank(u32Bank, u32IRBank);
422*53ee8cc1Swenshuai.xi AESDMA_Enable_Clk();
423*53ee8cc1Swenshuai.xi _u32MIU_num = u32miunum;
424*53ee8cc1Swenshuai.xi _u32MIU0_Addr = 0;
425*53ee8cc1Swenshuai.xi if(_u32MIU_num == 2)
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi _u32MIU1_Addr = AESDMA_GetMIU1Base();
428*53ee8cc1Swenshuai.xi }
429*53ee8cc1Swenshuai.xi
430*53ee8cc1Swenshuai.xi if(_u32MIU_num == 3)
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi _u32MIU1_Addr = AESDMA_GetMIU1Base();
433*53ee8cc1Swenshuai.xi _u32MIU2_Addr = AESDMA_GetMIU2Base();
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi // ++ Release reset that asserted in the DC off
437*53ee8cc1Swenshuai.xi // *(volatile MS_U32*)(0xbf800000+(0x2380<<2)) |= BIT15;
438*53ee8cc1Swenshuai.xi // -- Release reset that asserted in the DC off
439*53ee8cc1Swenshuai.xi
440*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
441*53ee8cc1Swenshuai.xi if(bSecureModeEnable == FALSE)
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi AESDMA_Reset();
444*53ee8cc1Swenshuai.xi }
445*53ee8cc1Swenshuai.xi #else
446*53ee8cc1Swenshuai.xi AESDMA_Reset();
447*53ee8cc1Swenshuai.xi #endif
448*53ee8cc1Swenshuai.xi
449*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
450*53ee8cc1Swenshuai.xi _AESDMAEvtNotify = E_DRVAESDMA_EVENT_DATA_INIT;
451*53ee8cc1Swenshuai.xi _AESDMACallback = NULL;
452*53ee8cc1Swenshuai.xi
453*53ee8cc1Swenshuai.xi AESDMA_HW_Patch();
454*53ee8cc1Swenshuai.xi
455*53ee8cc1Swenshuai.xi AESDMAIntDetach();
456*53ee8cc1Swenshuai.xi AESDMAIntAttach();
457*53ee8cc1Swenshuai.xi AESDMAIntEnable();
458*53ee8cc1Swenshuai.xi
459*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
460*53ee8cc1Swenshuai.xi
461*53ee8cc1Swenshuai.xi _s32AESDMAEventId = MsOS_CreateEventGroup("AESDMA_Event");
462*53ee8cc1Swenshuai.xi if (_s32AESDMAEventId < 0)
463*53ee8cc1Swenshuai.xi {
464*53ee8cc1Swenshuai.xi MsOS_DeleteMutex(_s32AESDMAMutexId);
465*53ee8cc1Swenshuai.xi _u32LastErr = DRVAESDMA_FAIL;
466*53ee8cc1Swenshuai.xi return _u32LastErr;
467*53ee8cc1Swenshuai.xi }
468*53ee8cc1Swenshuai.xi
469*53ee8cc1Swenshuai.xi _pAESDMATaskStack = _u8AESDMA_StackBuffer;
470*53ee8cc1Swenshuai.xi _s32AESDMATaskId = MsOS_CreateTask((TaskEntry)_AESDMA_Isr_Proc,
471*53ee8cc1Swenshuai.xi NULL,
472*53ee8cc1Swenshuai.xi E_TASK_PRI_MEDIUM,
473*53ee8cc1Swenshuai.xi TRUE,
474*53ee8cc1Swenshuai.xi _pAESDMATaskStack,
475*53ee8cc1Swenshuai.xi AESDMA_TASK_STACK_SIZE,
476*53ee8cc1Swenshuai.xi "AESDMA_ISR_Task");
477*53ee8cc1Swenshuai.xi if (_s32AESDMATaskId < 0)
478*53ee8cc1Swenshuai.xi {
479*53ee8cc1Swenshuai.xi MsOS_DeleteEventGroup(_s32AESDMAEventId);
480*53ee8cc1Swenshuai.xi MsOS_DeleteMutex(_s32AESDMAMutexId);
481*53ee8cc1Swenshuai.xi _u32LastErr = DRVAESDMA_FAIL;
482*53ee8cc1Swenshuai.xi return _u32LastErr;
483*53ee8cc1Swenshuai.xi }
484*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
485*53ee8cc1Swenshuai.xi }
486*53ee8cc1Swenshuai.xi else
487*53ee8cc1Swenshuai.xi {
488*53ee8cc1Swenshuai.xi AESDMA_Enable_Clk();
489*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
490*53ee8cc1Swenshuai.xi if(bSecureModeEnable == FALSE)
491*53ee8cc1Swenshuai.xi {
492*53ee8cc1Swenshuai.xi AESDMA_Reset();
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi #else
495*53ee8cc1Swenshuai.xi AESDMA_Reset();
496*53ee8cc1Swenshuai.xi #endif
497*53ee8cc1Swenshuai.xi
498*53ee8cc1Swenshuai.xi _u8IsInit = TRUE;
499*53ee8cc1Swenshuai.xi }
500*53ee8cc1Swenshuai.xi
501*53ee8cc1Swenshuai.xi #if AESDMS_SECURED_BANK_EN
502*53ee8cc1Swenshuai.xi AESDMA_Set_SecureBankEnable (TRUE);
503*53ee8cc1Swenshuai.xi #else
504*53ee8cc1Swenshuai.xi AESDMA_Set_SecureBankEnable (FALSE);
505*53ee8cc1Swenshuai.xi #endif
506*53ee8cc1Swenshuai.xi
507*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
508*53ee8cc1Swenshuai.xi }
509*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Init(MS_PHY u32miu0addr,MS_PHY u32miu1addr,MS_U32 u32miunum)510*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Init(MS_PHY u32miu0addr , MS_PHY u32miu1addr , MS_U32 u32miunum)
511*53ee8cc1Swenshuai.xi {
512*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
513*53ee8cc1Swenshuai.xi AESDMA_INIT sAesdmaInit;
514*53ee8cc1Swenshuai.xi
515*53ee8cc1Swenshuai.xi sAesdmaInit.u32miu0addr = u32miu0addr;
516*53ee8cc1Swenshuai.xi sAesdmaInit.u32miu1addr = u32miu1addr;
517*53ee8cc1Swenshuai.xi sAesdmaInit.u32miunum = u32miunum;
518*53ee8cc1Swenshuai.xi
519*53ee8cc1Swenshuai.xi #ifndef CONFIG_MBOOT
520*53ee8cc1Swenshuai.xi if (pInstantAesdma != NULL) // prevent memory leak, and avoid strange issue in mboot after using same instance for a long time
521*53ee8cc1Swenshuai.xi {
522*53ee8cc1Swenshuai.xi UtopiaClose(pInstantAesdma);
523*53ee8cc1Swenshuai.xi }
524*53ee8cc1Swenshuai.xi #endif
525*53ee8cc1Swenshuai.xi
526*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_AESDMA, &pInstantAesdma, 0, pAttributeAesdma) != UTOPIA_STATUS_SUCCESS)
527*53ee8cc1Swenshuai.xi {
528*53ee8cc1Swenshuai.xi pInstantAesdma = NULL;
529*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
530*53ee8cc1Swenshuai.xi }
531*53ee8cc1Swenshuai.xi
532*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_Init,(void*)&sAesdmaInit) != UTOPIA_STATUS_SUCCESS)
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
535*53ee8cc1Swenshuai.xi }
536*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
537*53ee8cc1Swenshuai.xi #else
538*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_Init(u32miu0addr, u32miu1addr, u32miunum);
539*53ee8cc1Swenshuai.xi #endif
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
542*53ee8cc1Swenshuai.xi /// Set key to the AESDMA
543*53ee8cc1Swenshuai.xi /// @param pu8Key \b IN: The key is represented as vectors of bytes with the MSB first
544*53ee8cc1Swenshuai.xi /// @param u32Len \b IN: The byte length of the pu8Key. 16 for AES/TDES and 8 for DES
545*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK - Success
546*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_INVALID_PARAM - Invalid key length
547*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
MDrv_AESDMA_SetKey_Ex(const MS_U8 * pu8Key,MS_U32 u32Len)548*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetKey_Ex(const MS_U8 *pu8Key, MS_U32 u32Len)
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi MS_U32 u32Tmp[4] = {0};
551*53ee8cc1Swenshuai.xi
552*53ee8cc1Swenshuai.xi if(pu8Key == NULL)
553*53ee8cc1Swenshuai.xi {
554*53ee8cc1Swenshuai.xi AESDMA_Sel_Key(TRUE); // key from KL
555*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi
558*53ee8cc1Swenshuai.xi // key from cipherkey
559*53ee8cc1Swenshuai.xi if(u32Len == 16)
560*53ee8cc1Swenshuai.xi {
561*53ee8cc1Swenshuai.xi u32Tmp[3] = _AESDMA_MSBF2Native(pu8Key);
562*53ee8cc1Swenshuai.xi u32Tmp[2] = _AESDMA_MSBF2Native(pu8Key + 4);
563*53ee8cc1Swenshuai.xi u32Tmp[1] = _AESDMA_MSBF2Native(pu8Key + 8);
564*53ee8cc1Swenshuai.xi u32Tmp[0] = _AESDMA_MSBF2Native(pu8Key + 12);
565*53ee8cc1Swenshuai.xi }
566*53ee8cc1Swenshuai.xi else if(u32Len == 8)
567*53ee8cc1Swenshuai.xi {
568*53ee8cc1Swenshuai.xi u32Tmp[3] = _AESDMA_MSBF2Native(pu8Key);
569*53ee8cc1Swenshuai.xi u32Tmp[2] = _AESDMA_MSBF2Native(pu8Key + 4);
570*53ee8cc1Swenshuai.xi }
571*53ee8cc1Swenshuai.xi else
572*53ee8cc1Swenshuai.xi {
573*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
574*53ee8cc1Swenshuai.xi }
575*53ee8cc1Swenshuai.xi
576*53ee8cc1Swenshuai.xi AESDMA_Set_CipherKey(u32Tmp);
577*53ee8cc1Swenshuai.xi AESDMA_Sel_Key(FALSE);
578*53ee8cc1Swenshuai.xi
579*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
580*53ee8cc1Swenshuai.xi }
581*53ee8cc1Swenshuai.xi
582*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
583*53ee8cc1Swenshuai.xi /// Set IV to the AESDMA
584*53ee8cc1Swenshuai.xi /// @param pu8IV \b IN: The IV is represented as vectors of bytes with the MSB first
585*53ee8cc1Swenshuai.xi /// @param u32Len \b IN: The byte length of the pu8IV. 16 for AES and 8 for TDES/DES
586*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK - Success
587*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_INVALID_PARAM - Invalid IV length
588*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
MDrv_AESDMA_SetIV_Ex(const MS_U8 * pu8IV,MS_U32 u32Len)589*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetIV_Ex(const MS_U8 *pu8IV, MS_U32 u32Len)
590*53ee8cc1Swenshuai.xi {
591*53ee8cc1Swenshuai.xi MS_U32 u32Tmp[4] = {0};
592*53ee8cc1Swenshuai.xi
593*53ee8cc1Swenshuai.xi if(pu8IV == NULL)
594*53ee8cc1Swenshuai.xi {
595*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
596*53ee8cc1Swenshuai.xi }
597*53ee8cc1Swenshuai.xi
598*53ee8cc1Swenshuai.xi if(u32Len == 16)
599*53ee8cc1Swenshuai.xi {
600*53ee8cc1Swenshuai.xi u32Tmp[3] = _AESDMA_MSBF2Native(pu8IV);
601*53ee8cc1Swenshuai.xi u32Tmp[2] = _AESDMA_MSBF2Native(pu8IV + 4);
602*53ee8cc1Swenshuai.xi u32Tmp[1] = _AESDMA_MSBF2Native(pu8IV + 8);
603*53ee8cc1Swenshuai.xi u32Tmp[0] = _AESDMA_MSBF2Native(pu8IV + 12);
604*53ee8cc1Swenshuai.xi }
605*53ee8cc1Swenshuai.xi else if(u32Len == 8)
606*53ee8cc1Swenshuai.xi {
607*53ee8cc1Swenshuai.xi u32Tmp[3] = _AESDMA_MSBF2Native(pu8IV);
608*53ee8cc1Swenshuai.xi u32Tmp[2] = _AESDMA_MSBF2Native(pu8IV + 4);
609*53ee8cc1Swenshuai.xi }
610*53ee8cc1Swenshuai.xi else
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
613*53ee8cc1Swenshuai.xi }
614*53ee8cc1Swenshuai.xi
615*53ee8cc1Swenshuai.xi AESDMA_Set_InitVector(u32Tmp);
616*53ee8cc1Swenshuai.xi
617*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
618*53ee8cc1Swenshuai.xi }
619*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetKey(MS_U32 * pCipherKey)620*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetKey(MS_U32 *pCipherKey)
621*53ee8cc1Swenshuai.xi {
622*53ee8cc1Swenshuai.xi if (pCipherKey != NULL)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi AESDMA_Set_CipherKey(pCipherKey);
625*53ee8cc1Swenshuai.xi AESDMA_Sel_Key(FALSE); // key from cipherkey
626*53ee8cc1Swenshuai.xi }
627*53ee8cc1Swenshuai.xi else
628*53ee8cc1Swenshuai.xi {
629*53ee8cc1Swenshuai.xi AESDMA_Sel_Key(TRUE); // key from KL
630*53ee8cc1Swenshuai.xi }
631*53ee8cc1Swenshuai.xi
632*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetKey(MS_U32 * pCipherKey)635*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetKey(MS_U32 *pCipherKey)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
638*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
639*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
640*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetKey,(void*)pCipherKey) != UTOPIA_STATUS_SUCCESS)
641*53ee8cc1Swenshuai.xi {
642*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
643*53ee8cc1Swenshuai.xi }
644*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
645*53ee8cc1Swenshuai.xi #else
646*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetKey(pCipherKey);
647*53ee8cc1Swenshuai.xi #endif
648*53ee8cc1Swenshuai.xi }
649*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetKeySel(MS_U32 * pCipherKey,DrvAESDMA_KEY_TYPE stKeyType)650*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetKeySel(MS_U32 *pCipherKey, DrvAESDMA_KEY_TYPE stKeyType)
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_Two_Keys(TRUE);
653*53ee8cc1Swenshuai.xi switch (stKeyType)
654*53ee8cc1Swenshuai.xi {
655*53ee8cc1Swenshuai.xi case E_DRVAESDMA_ODD_KEY:
656*53ee8cc1Swenshuai.xi AESDMA_Set_CipherOddKey(pCipherKey);
657*53ee8cc1Swenshuai.xi break;
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi case E_DRVAESDMA_EVEN_KEY:
660*53ee8cc1Swenshuai.xi AESDMA_Set_CipherEvenKey(pCipherKey);
661*53ee8cc1Swenshuai.xi break;
662*53ee8cc1Swenshuai.xi
663*53ee8cc1Swenshuai.xi default:
664*53ee8cc1Swenshuai.xi break;
665*53ee8cc1Swenshuai.xi }
666*53ee8cc1Swenshuai.xi
667*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
668*53ee8cc1Swenshuai.xi }
669*53ee8cc1Swenshuai.xi
670*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
671*53ee8cc1Swenshuai.xi /// Set Odd/Even Key to the AESDMA
672*53ee8cc1Swenshuai.xi /// @param pCipherKey \b IN: The key is represented as vectors of 4-bytes
673*53ee8cc1Swenshuai.xi /// @param stKeyType \b IN: The key type of input key.
674*53ee8cc1Swenshuai.xi /// @return DRVAESDMA_OK - Success
675*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
MDrv_AESDMA_SetKeySel(MS_U32 * pCipherKey,DrvAESDMA_KEY_TYPE stKeyType)676*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetKeySel(MS_U32 *pCipherKey, DrvAESDMA_KEY_TYPE stKeyType)
677*53ee8cc1Swenshuai.xi {
678*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
679*53ee8cc1Swenshuai.xi if(bSecureModeEnable)
680*53ee8cc1Swenshuai.xi {
681*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
682*53ee8cc1Swenshuai.xi }
683*53ee8cc1Swenshuai.xi else
684*53ee8cc1Swenshuai.xi {
685*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_Two_Keys(TRUE);
686*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetKeySel(pCipherKey, stKeyType);
687*53ee8cc1Swenshuai.xi }
688*53ee8cc1Swenshuai.xi #else
689*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_Two_Keys(TRUE);
690*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetKeySel(pCipherKey, stKeyType);
691*53ee8cc1Swenshuai.xi #endif
692*53ee8cc1Swenshuai.xi }
693*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetOddIV(MS_U32 * pInitVector)694*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetOddIV(MS_U32 *pInitVector)
695*53ee8cc1Swenshuai.xi {
696*53ee8cc1Swenshuai.xi if (pInitVector != NULL)
697*53ee8cc1Swenshuai.xi {
698*53ee8cc1Swenshuai.xi AESDMA_Set_OddInitVector(pInitVector);
699*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
700*53ee8cc1Swenshuai.xi }
701*53ee8cc1Swenshuai.xi else
702*53ee8cc1Swenshuai.xi {
703*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
704*53ee8cc1Swenshuai.xi }
705*53ee8cc1Swenshuai.xi }
706*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetOddIV(MS_U32 * pInitVector)707*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetOddIV(MS_U32 *pInitVector)
708*53ee8cc1Swenshuai.xi {
709*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
710*53ee8cc1Swenshuai.xi if(bSecureModeEnable)
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
713*53ee8cc1Swenshuai.xi }
714*53ee8cc1Swenshuai.xi else
715*53ee8cc1Swenshuai.xi {
716*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
717*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
718*53ee8cc1Swenshuai.xi
719*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_SetOddIV, (void*)pInitVector) != UTOPIA_STATUS_SUCCESS)
720*53ee8cc1Swenshuai.xi {
721*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
722*53ee8cc1Swenshuai.xi }
723*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi #else
726*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetOddIV(pInitVector);
727*53ee8cc1Swenshuai.xi #endif
728*53ee8cc1Swenshuai.xi }
729*53ee8cc1Swenshuai.xi
730*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetSecureKey(void)731*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetSecureKey(void)
732*53ee8cc1Swenshuai.xi {
733*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
734*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
735*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
736*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetSecureKey,NULL) != UTOPIA_STATUS_SUCCESS)
737*53ee8cc1Swenshuai.xi {
738*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
739*53ee8cc1Swenshuai.xi }
740*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
741*53ee8cc1Swenshuai.xi #else
742*53ee8cc1Swenshuai.xi AESDMA_Sel_SecureKey();
743*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
744*53ee8cc1Swenshuai.xi #endif
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetSecureKey(void)747*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetSecureKey(void)
748*53ee8cc1Swenshuai.xi {
749*53ee8cc1Swenshuai.xi AESDMA_Sel_SecureKey();
750*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
751*53ee8cc1Swenshuai.xi }
752*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetIV(MS_U32 * pInitVector)753*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetIV(MS_U32 *pInitVector)
754*53ee8cc1Swenshuai.xi {
755*53ee8cc1Swenshuai.xi if (pInitVector != NULL)
756*53ee8cc1Swenshuai.xi {
757*53ee8cc1Swenshuai.xi AESDMA_Set_InitVector(pInitVector);
758*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
759*53ee8cc1Swenshuai.xi }
760*53ee8cc1Swenshuai.xi else
761*53ee8cc1Swenshuai.xi {
762*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
763*53ee8cc1Swenshuai.xi }
764*53ee8cc1Swenshuai.xi }
765*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetIV(MS_U32 * pInitVector)766*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetIV(MS_U32 *pInitVector)
767*53ee8cc1Swenshuai.xi {
768*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
769*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
770*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
771*53ee8cc1Swenshuai.xi
772*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetIV,(void*)pInitVector) != UTOPIA_STATUS_SUCCESS)
773*53ee8cc1Swenshuai.xi {
774*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(printf("Ioctl MDrv_AESDMA_SetIV fail\n"));
775*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
776*53ee8cc1Swenshuai.xi }
777*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
778*53ee8cc1Swenshuai.xi #else
779*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetIV(pInitVector);
780*53ee8cc1Swenshuai.xi #endif
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi
MDrv_AESDMA_QueryCipherMode(DrvAESDMA_CipherMode eMode)783*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_QueryCipherMode(DrvAESDMA_CipherMode eMode)
784*53ee8cc1Swenshuai.xi {
785*53ee8cc1Swenshuai.xi return AESDMA_QueryCipherMode(eMode);
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SelEng(DrvAESDMA_CipherMode eMode,MS_BOOL bDescrypt)788*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SelEng(DrvAESDMA_CipherMode eMode, MS_BOOL bDescrypt)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi switch (eMode)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_CTR:
793*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_DES_CTR:
794*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_TDES_CTR:
795*53ee8cc1Swenshuai.xi AESDMA_Set_CIPHER_ENG((AESDMA_CipherMode)eMode, FALSE);
796*53ee8cc1Swenshuai.xi break;
797*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_ECB:
798*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_CBC:
799*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_DES_ECB:
800*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_DES_CBC:
801*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_TDES_ECB:
802*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_TDES_CBC:
803*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_CTS_CBC:
804*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_CTS_ECB:
805*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_DES_CTS_CBC:
806*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_DES_CTS_ECB:
807*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_TDES_CTS_CBC:
808*53ee8cc1Swenshuai.xi case E_DRVAESDMA_CIPHER_TDES_CTS_ECB:
809*53ee8cc1Swenshuai.xi AESDMA_Set_CIPHER_ENG((AESDMA_CipherMode)eMode, bDescrypt);
810*53ee8cc1Swenshuai.xi break;
811*53ee8cc1Swenshuai.xi default:
812*53ee8cc1Swenshuai.xi break;
813*53ee8cc1Swenshuai.xi }
814*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
815*53ee8cc1Swenshuai.xi }
816*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SelEng(DrvAESDMA_CipherMode eMode,MS_BOOL bDescrypt)817*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SelEng(DrvAESDMA_CipherMode eMode, MS_BOOL bDescrypt)
818*53ee8cc1Swenshuai.xi {
819*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
820*53ee8cc1Swenshuai.xi AESDMA_SEL_ENG SelEngParam;
821*53ee8cc1Swenshuai.xi SelEngParam.eMode= eMode;
822*53ee8cc1Swenshuai.xi SelEngParam.bDescrypt= bDescrypt;
823*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SelEng,(void*)&SelEngParam) != UTOPIA_STATUS_SUCCESS)
824*53ee8cc1Swenshuai.xi {
825*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
826*53ee8cc1Swenshuai.xi }
827*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
828*53ee8cc1Swenshuai.xi #else
829*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SelEng(eMode,bDescrypt);
830*53ee8cc1Swenshuai.xi #endif
831*53ee8cc1Swenshuai.xi }
832*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetPS(MS_U32 u32PTN,MS_U32 u32Mask,MS_BOOL bPSin_Enable,MS_BOOL bPSout_Enable)833*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetPS(MS_U32 u32PTN, MS_U32 u32Mask, MS_BOOL bPSin_Enable, MS_BOOL bPSout_Enable)
834*53ee8cc1Swenshuai.xi {
835*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
836*53ee8cc1Swenshuai.xi AESDMA_SET_PS SetPsParam;
837*53ee8cc1Swenshuai.xi SetPsParam.u32PTN = u32PTN;
838*53ee8cc1Swenshuai.xi SetPsParam.u32Mask = u32Mask;
839*53ee8cc1Swenshuai.xi SetPsParam.bPSin_Enable = bPSin_Enable;
840*53ee8cc1Swenshuai.xi SetPsParam.bPSout_Enable = bPSout_Enable;
841*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetPS,(void*)&SetPsParam) != UTOPIA_STATUS_SUCCESS)
842*53ee8cc1Swenshuai.xi {
843*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
844*53ee8cc1Swenshuai.xi }
845*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
846*53ee8cc1Swenshuai.xi #else
847*53ee8cc1Swenshuai.xi AESDMA_Set_PS_PTN(u32PTN);
848*53ee8cc1Swenshuai.xi AESDMA_Set_PS_Mask(u32Mask);
849*53ee8cc1Swenshuai.xi AESDMA_Set_PS_ENG(bPSin_Enable, bPSout_Enable);
850*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
851*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
852*53ee8cc1Swenshuai.xi #endif
853*53ee8cc1Swenshuai.xi }
854*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetPS(MS_U32 u32PTN,MS_U32 u32Mask,MS_BOOL bPSin_Enable,MS_BOOL bPSout_Enable)855*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetPS(MS_U32 u32PTN, MS_U32 u32Mask, MS_BOOL bPSin_Enable, MS_BOOL bPSout_Enable)
856*53ee8cc1Swenshuai.xi {
857*53ee8cc1Swenshuai.xi AESDMA_Set_PS_PTN(u32PTN);
858*53ee8cc1Swenshuai.xi AESDMA_Set_PS_Mask(u32Mask);
859*53ee8cc1Swenshuai.xi AESDMA_Set_PS_ENG(bPSin_Enable, bPSout_Enable);
860*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
861*53ee8cc1Swenshuai.xi
862*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
863*53ee8cc1Swenshuai.xi }
864*53ee8cc1Swenshuai.xi
MDrv_AESDMA_PSRelease(void)865*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_PSRelease(void)
866*53ee8cc1Swenshuai.xi {
867*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
868*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
869*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
870*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PSRelease,NULL) != UTOPIA_STATUS_SUCCESS)
871*53ee8cc1Swenshuai.xi {
872*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
873*53ee8cc1Swenshuai.xi }
874*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
875*53ee8cc1Swenshuai.xi #else
876*53ee8cc1Swenshuai.xi AESDMA_Set_PS_Release();
877*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
878*53ee8cc1Swenshuai.xi #endif
879*53ee8cc1Swenshuai.xi }
880*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_PSRelease(void)881*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_PSRelease(void)
882*53ee8cc1Swenshuai.xi {
883*53ee8cc1Swenshuai.xi AESDMA_Set_PS_Release();
884*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
885*53ee8cc1Swenshuai.xi }
886*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetFileInOut(MS_PHY phy64FileinAddr,MS_U32 u32FileInNum,MS_PHY phy64FileOutSAddr,MS_PHY phy64FileOutEAddr)887*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetFileInOut(MS_PHY phy64FileinAddr, MS_U32 u32FileInNum, MS_PHY phy64FileOutSAddr, MS_PHY phy64FileOutEAddr)
888*53ee8cc1Swenshuai.xi {
889*53ee8cc1Swenshuai.xi // check miu addr
890*53ee8cc1Swenshuai.xi if (!_AESDMA_Chk_MIU(&phy64FileinAddr, u32FileInNum, &phy64FileOutSAddr, &phy64FileOutEAddr))
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi return DRVAESDMA_MIU_ADDR_ERROR;
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi
895*53ee8cc1Swenshuai.xi if ((phy64FileOutSAddr == 0) | (phy64FileOutEAddr == 0))
896*53ee8cc1Swenshuai.xi {
897*53ee8cc1Swenshuai.xi AESDMA_Set_FileinDesc(phy64FileinAddr , u32FileInNum);
898*53ee8cc1Swenshuai.xi }
899*53ee8cc1Swenshuai.xi else
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi AESDMA_Set_FileinDesc(phy64FileinAddr, u32FileInNum);
902*53ee8cc1Swenshuai.xi AESDMA_Set_FileoutDesc(phy64FileOutSAddr, phy64FileOutEAddr);
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi
905*53ee8cc1Swenshuai.xi phyTmpFileInAddr = phy64FileinAddr;
906*53ee8cc1Swenshuai.xi u32TmpFileInNum = u32FileInNum;
907*53ee8cc1Swenshuai.xi phyTmpFileOutAddr = phy64FileOutSAddr;
908*53ee8cc1Swenshuai.xi
909*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetFileInOut(MS_PHY u32FileinAddr,MS_U32 u32FileInNum,MS_PHY u32FileOutSAddr,MS_PHY u32FileOutEAddr)912*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetFileInOut(MS_PHY u32FileinAddr, MS_U32 u32FileInNum, MS_PHY u32FileOutSAddr, MS_PHY u32FileOutEAddr)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
915*53ee8cc1Swenshuai.xi AESDMA_FILE_INOUT FileInOutParam;
916*53ee8cc1Swenshuai.xi FileInOutParam.u32FileinAddr= u32FileinAddr;
917*53ee8cc1Swenshuai.xi FileInOutParam.u32FileInNum= u32FileInNum;
918*53ee8cc1Swenshuai.xi FileInOutParam.u32FileOutSAddr= u32FileOutSAddr;
919*53ee8cc1Swenshuai.xi FileInOutParam.u32FileOutEAddr= u32FileOutEAddr;
920*53ee8cc1Swenshuai.xi
921*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetFileInOut,(void*)&FileInOutParam) != UTOPIA_STATUS_SUCCESS)
922*53ee8cc1Swenshuai.xi {
923*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
924*53ee8cc1Swenshuai.xi }
925*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
926*53ee8cc1Swenshuai.xi #else
927*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_SetFileInOut(u32FileinAddr,u32FileInNum,u32FileOutSAddr,u32FileOutEAddr);
928*53ee8cc1Swenshuai.xi #endif
929*53ee8cc1Swenshuai.xi }
930*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Start(MS_BOOL bStart)931*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Start(MS_BOOL bStart)
932*53ee8cc1Swenshuai.xi {
933*53ee8cc1Swenshuai.xi if (!MsOS_Dcache_Flush(MsOS_PA2KSEG0(phyTmpFileOutAddr), u32TmpFileInNum))
934*53ee8cc1Swenshuai.xi MsOS_Dcache_Flush(MsOS_PA2KSEG0(phyTmpFileOutAddr) & ~((MS_VIRT)0x0F), u32TmpFileInNum+32);
935*53ee8cc1Swenshuai.xi
936*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
937*53ee8cc1Swenshuai.xi AESDMA_Start(bStart);
938*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Start(MS_BOOL bStart)941*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Start(MS_BOOL bStart)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
944*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
945*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
946*53ee8cc1Swenshuai.xi
947*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_Start,(void*)&bStart) != UTOPIA_STATUS_SUCCESS)
948*53ee8cc1Swenshuai.xi {
949*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
950*53ee8cc1Swenshuai.xi }
951*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
952*53ee8cc1Swenshuai.xi #else
953*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_Start(bStart);
954*53ee8cc1Swenshuai.xi #endif
955*53ee8cc1Swenshuai.xi }
956*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Reset(void)957*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Reset(void)
958*53ee8cc1Swenshuai.xi {
959*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
960*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
961*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
962*53ee8cc1Swenshuai.xi
963*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_Reset,NULL) != UTOPIA_STATUS_SUCCESS)
964*53ee8cc1Swenshuai.xi {
965*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
966*53ee8cc1Swenshuai.xi }
967*53ee8cc1Swenshuai.xi
968*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
969*53ee8cc1Swenshuai.xi #else
970*53ee8cc1Swenshuai.xi AESDMA_Reset();
971*53ee8cc1Swenshuai.xi AESDMA_HW_Patch();
972*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
973*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(FALSE);
974*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
975*53ee8cc1Swenshuai.xi #endif
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_NormalReset(void)978*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_NormalReset(void)
979*53ee8cc1Swenshuai.xi {
980*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
981*53ee8cc1Swenshuai.xi if(bSecureModeEnable)
982*53ee8cc1Swenshuai.xi {
983*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
984*53ee8cc1Swenshuai.xi }
985*53ee8cc1Swenshuai.xi else
986*53ee8cc1Swenshuai.xi {
987*53ee8cc1Swenshuai.xi AESDMA_NormalReset();
988*53ee8cc1Swenshuai.xi AESDMA_HW_Patch();
989*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
990*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(FALSE);
991*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
992*53ee8cc1Swenshuai.xi }
993*53ee8cc1Swenshuai.xi #else
994*53ee8cc1Swenshuai.xi AESDMA_NormalReset();
995*53ee8cc1Swenshuai.xi AESDMA_HW_Patch();
996*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
997*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(FALSE);
998*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
999*53ee8cc1Swenshuai.xi #endif
1000*53ee8cc1Swenshuai.xi }
1001*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Reset(void)1002*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Reset(void)
1003*53ee8cc1Swenshuai.xi {
1004*53ee8cc1Swenshuai.xi AESDMA_Reset();
1005*53ee8cc1Swenshuai.xi AESDMA_HW_Patch();
1006*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
1007*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(FALSE);
1008*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1009*53ee8cc1Swenshuai.xi }
MDrv_AESDMA_GetStatus(void)1010*53ee8cc1Swenshuai.xi MS_U32 MDrv_AESDMA_GetStatus(void)
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1013*53ee8cc1Swenshuai.xi MS_U32 u32RetVal = 0;
1014*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1015*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1016*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_GetStatus,(void*)&u32RetVal) != UTOPIA_STATUS_SUCCESS)
1017*53ee8cc1Swenshuai.xi {
1018*53ee8cc1Swenshuai.xi return 0;
1019*53ee8cc1Swenshuai.xi }
1020*53ee8cc1Swenshuai.xi return u32RetVal;
1021*53ee8cc1Swenshuai.xi #else
1022*53ee8cc1Swenshuai.xi return AESDMA_Get_AESDMA_Status();
1023*53ee8cc1Swenshuai.xi #endif
1024*53ee8cc1Swenshuai.xi }
_MDrv_AESDMA_GetStatus(MS_U32 * u32RetVal)1025*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_GetStatus(MS_U32 *u32RetVal)
1026*53ee8cc1Swenshuai.xi {
1027*53ee8cc1Swenshuai.xi *u32RetVal = AESDMA_Get_AESDMA_Status();
1028*53ee8cc1Swenshuai.xi
1029*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_IsFinished(MS_U32 * u32RetVal)1032*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_IsFinished(MS_U32 *u32RetVal)
1033*53ee8cc1Swenshuai.xi {
1034*53ee8cc1Swenshuai.xi if(AESDMA_Get_AESDMA_IsFinished())
1035*53ee8cc1Swenshuai.xi {
1036*53ee8cc1Swenshuai.xi *u32RetVal = DRVAESDMA_OK;
1037*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
1038*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi else
1041*53ee8cc1Swenshuai.xi {
1042*53ee8cc1Swenshuai.xi *u32RetVal = DRVAESDMA_FAIL;
1043*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi }
1046*53ee8cc1Swenshuai.xi
MDrv_AESDMA_IsFinished(void)1047*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_IsFinished(void)
1048*53ee8cc1Swenshuai.xi {
1049*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1050*53ee8cc1Swenshuai.xi MS_U32 u32TimeOut = AES_MAX_TIMEOUT_VALUE;
1051*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1052*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1053*53ee8cc1Swenshuai.xi
1054*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_IsFinished, (void*)&u32TimeOut) != UTOPIA_STATUS_SUCCESS)
1055*53ee8cc1Swenshuai.xi {
1056*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1057*53ee8cc1Swenshuai.xi }
1058*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1059*53ee8cc1Swenshuai.xi #else
1060*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_IsFinished();
1061*53ee8cc1Swenshuai.xi #endif
1062*53ee8cc1Swenshuai.xi }
1063*53ee8cc1Swenshuai.xi
MDrv_AESDMA_GetPSMatchedByteCNT(void)1064*53ee8cc1Swenshuai.xi MS_U32 MDrv_AESDMA_GetPSMatchedByteCNT(void)
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1067*53ee8cc1Swenshuai.xi MS_U32 u32Count = 0x000;
1068*53ee8cc1Swenshuai.xi
1069*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1070*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1071*53ee8cc1Swenshuai.xi
1072*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_GetPSMatchedByteCNT, (void*)&u32Count) != UTOPIA_STATUS_SUCCESS)
1073*53ee8cc1Swenshuai.xi {
1074*53ee8cc1Swenshuai.xi return 0;
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi
1077*53ee8cc1Swenshuai.xi return u32Count;
1078*53ee8cc1Swenshuai.xi #else
1079*53ee8cc1Swenshuai.xi return AESDMA_Get_PS_MatchedBytecnt();
1080*53ee8cc1Swenshuai.xi #endif
1081*53ee8cc1Swenshuai.xi }
1082*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_GetPSMatchedByteCNT(MS_U32 * u32RetVal)1083*53ee8cc1Swenshuai.xi MS_U32 _MDrv_AESDMA_GetPSMatchedByteCNT(MS_U32 *u32RetVal)
1084*53ee8cc1Swenshuai.xi {
1085*53ee8cc1Swenshuai.xi MS_U32 u32Val = AESDMA_Get_PS_MatchedBytecnt();
1086*53ee8cc1Swenshuai.xi *u32RetVal = u32Val;
1087*53ee8cc1Swenshuai.xi return u32Val;
1088*53ee8cc1Swenshuai.xi }
1089*53ee8cc1Swenshuai.xi
MDrv_AESDMA_GetPSMatchedPTN(void)1090*53ee8cc1Swenshuai.xi MS_U32 MDrv_AESDMA_GetPSMatchedPTN(void)
1091*53ee8cc1Swenshuai.xi {
1092*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1093*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1094*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1095*53ee8cc1Swenshuai.xi
1096*53ee8cc1Swenshuai.xi return UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_GetPSMatchedPTN,NULL);
1097*53ee8cc1Swenshuai.xi #else
1098*53ee8cc1Swenshuai.xi return AESDMA_Get_PS_MatchedPTN();
1099*53ee8cc1Swenshuai.xi #endif
1100*53ee8cc1Swenshuai.xi }
1101*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_GetPSMatchedPTN(void)1102*53ee8cc1Swenshuai.xi MS_U32 _MDrv_AESDMA_GetPSMatchedPTN(void)
1103*53ee8cc1Swenshuai.xi {
1104*53ee8cc1Swenshuai.xi return AESDMA_Get_PS_MatchedPTN();
1105*53ee8cc1Swenshuai.xi }
1106*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Notify(DrvAESDMA_Event eEvents,P_DrvAESDMA_EvtCallback pfCallback)1107*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Notify(DrvAESDMA_Event eEvents, P_DrvAESDMA_EvtCallback pfCallback)
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1110*53ee8cc1Swenshuai.xi AESDMA_NOTIFY stNotifyParam;
1111*53ee8cc1Swenshuai.xi
1112*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1113*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1114*53ee8cc1Swenshuai.xi
1115*53ee8cc1Swenshuai.xi stNotifyParam.eEvents = eEvents;
1116*53ee8cc1Swenshuai.xi stNotifyParam.pfCallback = pfCallback;
1117*53ee8cc1Swenshuai.xi
1118*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_Notify, (void*)&stNotifyParam) != UTOPIA_STATUS_SUCCESS)
1119*53ee8cc1Swenshuai.xi {
1120*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi
1123*53ee8cc1Swenshuai.xi _AESDMAEvtNotify = eEvents;
1124*53ee8cc1Swenshuai.xi _AESDMACallback = pfCallback;
1125*53ee8cc1Swenshuai.xi
1126*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1127*53ee8cc1Swenshuai.xi #else
1128*53ee8cc1Swenshuai.xi if (pfCallback)
1129*53ee8cc1Swenshuai.xi {
1130*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
1131*53ee8cc1Swenshuai.xi }
1132*53ee8cc1Swenshuai.xi else
1133*53ee8cc1Swenshuai.xi {
1134*53ee8cc1Swenshuai.xi AESDMA_Disable_Int();
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi
1137*53ee8cc1Swenshuai.xi _AESDMAEvtNotify = eEvents;
1138*53ee8cc1Swenshuai.xi _AESDMACallback = pfCallback;
1139*53ee8cc1Swenshuai.xi
1140*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1141*53ee8cc1Swenshuai.xi #endif
1142*53ee8cc1Swenshuai.xi }
1143*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Notify(DrvAESDMA_Event eEvents,P_DrvAESDMA_EvtCallback pfCallback)1144*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Notify(DrvAESDMA_Event eEvents, P_DrvAESDMA_EvtCallback pfCallback)
1145*53ee8cc1Swenshuai.xi {
1146*53ee8cc1Swenshuai.xi if (pfCallback)
1147*53ee8cc1Swenshuai.xi {
1148*53ee8cc1Swenshuai.xi AESDMA_Enable_Int();
1149*53ee8cc1Swenshuai.xi }
1150*53ee8cc1Swenshuai.xi else
1151*53ee8cc1Swenshuai.xi {
1152*53ee8cc1Swenshuai.xi AESDMA_Disable_Int();
1153*53ee8cc1Swenshuai.xi }
1154*53ee8cc1Swenshuai.xi
1155*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1156*53ee8cc1Swenshuai.xi }
1157*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetDbgLevel(DrvAESDMA_DbgLevel DbgLevel)1158*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetDbgLevel(DrvAESDMA_DbgLevel DbgLevel)
1159*53ee8cc1Swenshuai.xi {
1160*53ee8cc1Swenshuai.xi _u32AESDMADBGLevel = DbgLevel;
1161*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1162*53ee8cc1Swenshuai.xi }
1163*53ee8cc1Swenshuai.xi
MDrv_AESDMA_GetLibVer(const MSIF_Version ** ppVersion)1164*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_GetLibVer(const MSIF_Version **ppVersion)
1165*53ee8cc1Swenshuai.xi {
1166*53ee8cc1Swenshuai.xi // No mutex check, it can be called before Init
1167*53ee8cc1Swenshuai.xi if (!ppVersion)
1168*53ee8cc1Swenshuai.xi {
1169*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1170*53ee8cc1Swenshuai.xi }
1171*53ee8cc1Swenshuai.xi
1172*53ee8cc1Swenshuai.xi *ppVersion = &_drv_aesdma_version;
1173*53ee8cc1Swenshuai.xi
1174*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1175*53ee8cc1Swenshuai.xi }
1176*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Rand(MS_U32 * u32PABuf,MS_U32 u32Size)1177*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Rand(MS_U32 *u32PABuf, MS_U32 u32Size)
1178*53ee8cc1Swenshuai.xi {
1179*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1180*53ee8cc1Swenshuai.xi
1181*53ee8cc1Swenshuai.xi AESDMA_RAND stAesdmaRand;
1182*53ee8cc1Swenshuai.xi stAesdmaRand.u32PABuf = u32PABuf;
1183*53ee8cc1Swenshuai.xi stAesdmaRand.u32Size = u32Size;
1184*53ee8cc1Swenshuai.xi
1185*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_Rand, (void*)&stAesdmaRand) != UTOPIA_STATUS_SUCCESS)
1186*53ee8cc1Swenshuai.xi {
1187*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1188*53ee8cc1Swenshuai.xi }
1189*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi #else
1192*53ee8cc1Swenshuai.xi MS_U32 Index;
1193*53ee8cc1Swenshuai.xi MS_U8 *u8VABuf = (MS_U8 *)MsOS_PA2KSEG1((MS_U32)u32PABuf);
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi for( Index = 0; Index < u32Size; Index++ )
1196*53ee8cc1Swenshuai.xi {
1197*53ee8cc1Swenshuai.xi *(u8VABuf + Index) = AESDMA_Rand();
1198*53ee8cc1Swenshuai.xi }
1199*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1200*53ee8cc1Swenshuai.xi #endif
1201*53ee8cc1Swenshuai.xi }
1202*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Rand(MS_U32 * u32PABuf,MS_U32 u32Size)1203*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Rand(MS_U32 *u32PABuf, MS_U32 u32Size)
1204*53ee8cc1Swenshuai.xi {
1205*53ee8cc1Swenshuai.xi MS_U32 Index;
1206*53ee8cc1Swenshuai.xi ptrdiff_t n = (ptrdiff_t)u32PABuf;
1207*53ee8cc1Swenshuai.xi MS_U8 *u8VABuf = (MS_U8 *)MsOS_PA2KSEG1((MS_PHY)n);
1208*53ee8cc1Swenshuai.xi
1209*53ee8cc1Swenshuai.xi for( Index = 0; Index < u32Size; Index++ )
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi *(u8VABuf + Index) = AESDMA_Rand();
1212*53ee8cc1Swenshuai.xi }
1213*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1214*53ee8cc1Swenshuai.xi }
1215*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Get_Rand_Num(MS_U8 * pu8Num)1216*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Get_Rand_Num(MS_U8 *pu8Num)
1217*53ee8cc1Swenshuai.xi {
1218*53ee8cc1Swenshuai.xi
1219*53ee8cc1Swenshuai.xi *pu8Num = AESDMA_Rand();
1220*53ee8cc1Swenshuai.xi
1221*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1222*53ee8cc1Swenshuai.xi }
1223*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Set_Clk(MS_BOOL benable)1224*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Set_Clk(MS_BOOL benable)
1225*53ee8cc1Swenshuai.xi {
1226*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1227*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1228*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1229*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_SetClk,(void*)&benable) != UTOPIA_STATUS_SUCCESS)
1230*53ee8cc1Swenshuai.xi {
1231*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1232*53ee8cc1Swenshuai.xi }
1233*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1234*53ee8cc1Swenshuai.xi #else
1235*53ee8cc1Swenshuai.xi if(benable)
1236*53ee8cc1Swenshuai.xi {
1237*53ee8cc1Swenshuai.xi AESDMA_Enable_Clk();
1238*53ee8cc1Swenshuai.xi }
1239*53ee8cc1Swenshuai.xi else
1240*53ee8cc1Swenshuai.xi {
1241*53ee8cc1Swenshuai.xi AESDMA_Disable_Clk();
1242*53ee8cc1Swenshuai.xi }
1243*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1244*53ee8cc1Swenshuai.xi #endif
1245*53ee8cc1Swenshuai.xi }
1246*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_Set_Clk(MS_BOOL benable)1247*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Set_Clk(MS_BOOL benable)
1248*53ee8cc1Swenshuai.xi {
1249*53ee8cc1Swenshuai.xi if(benable)
1250*53ee8cc1Swenshuai.xi {
1251*53ee8cc1Swenshuai.xi AESDMA_Enable_Clk();
1252*53ee8cc1Swenshuai.xi }
1253*53ee8cc1Swenshuai.xi else
1254*53ee8cc1Swenshuai.xi {
1255*53ee8cc1Swenshuai.xi AESDMA_Disable_Clk();
1256*53ee8cc1Swenshuai.xi }
1257*53ee8cc1Swenshuai.xi
1258*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi
_MDrv_SHA_Calculate(DrvAESDMA_SHAMode eMode,MS_PHY phy64PAInBuf,MS_U32 u32Size,MS_PHY phy64PAOutBuf)1261*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_SHA_Calculate(DrvAESDMA_SHAMode eMode, MS_PHY phy64PAInBuf, MS_U32 u32Size, MS_PHY phy64PAOutBuf)
1262*53ee8cc1Swenshuai.xi {
1263*53ee8cc1Swenshuai.xi MS_U8 *u8scattergather_format = 0; //[B7, B6, B5, B4] = MIU byte address;[B3, B2, B1, B0] = the length of this message block
1264*53ee8cc1Swenshuai.xi MS_PHY u32scattergather_Address = 0;
1265*53ee8cc1Swenshuai.xi MS_U32 u32OutOffset = 0;
1266*53ee8cc1Swenshuai.xi MS_U32 u32timeout_count = 0;
1267*53ee8cc1Swenshuai.xi MS_PHY phy64PAOutBufE;
1268*53ee8cc1Swenshuai.xi
1269*53ee8cc1Swenshuai.xi
1270*53ee8cc1Swenshuai.xi switch (eMode)
1271*53ee8cc1Swenshuai.xi {
1272*53ee8cc1Swenshuai.xi case E_AESDMA_SHA1:
1273*53ee8cc1Swenshuai.xi u32OutOffset = 20; //Out 160-bit
1274*53ee8cc1Swenshuai.xi break;
1275*53ee8cc1Swenshuai.xi
1276*53ee8cc1Swenshuai.xi case E_AESDMA_SHA256:
1277*53ee8cc1Swenshuai.xi u32OutOffset = 32; //Out 256-bit
1278*53ee8cc1Swenshuai.xi break;
1279*53ee8cc1Swenshuai.xi
1280*53ee8cc1Swenshuai.xi default:
1281*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1282*53ee8cc1Swenshuai.xi }
1283*53ee8cc1Swenshuai.xi #if 1
1284*53ee8cc1Swenshuai.xi // check miu addr
1285*53ee8cc1Swenshuai.xi phy64PAOutBufE = (phy64PAOutBuf + u32OutOffset);
1286*53ee8cc1Swenshuai.xi if (!_AESDMA_Chk_MIU(&phy64PAInBuf, u32Size, &phy64PAOutBuf, &phy64PAOutBufE))
1287*53ee8cc1Swenshuai.xi {
1288*53ee8cc1Swenshuai.xi DEBUG_AES_DMA(E_DRVAESDMA_DBG_L1, ULOGE(TAG_AESDMA, "@@@DRVAESDMA_MIU_ADDR_ERROR\n"));
1289*53ee8cc1Swenshuai.xi return DRVAESDMA_MIU_ADDR_ERROR;
1290*53ee8cc1Swenshuai.xi }
1291*53ee8cc1Swenshuai.xi #endif
1292*53ee8cc1Swenshuai.xi // Clear all SHA setting(clear the last outputs)
1293*53ee8cc1Swenshuai.xi SHA_Reset();
1294*53ee8cc1Swenshuai.xi
1295*53ee8cc1Swenshuai.xi // Error handler for 16-byte alignment limitation
1296*53ee8cc1Swenshuai.xi if(phy64PAInBuf & WORD_MASK)
1297*53ee8cc1Swenshuai.xi {
1298*53ee8cc1Swenshuai.xi DEBUG_AES_DMA(E_DRVAESDMA_DBG_L1, ULOGE(TAG_AESDMA, "Input Address should be 16-byte alignment\n"));
1299*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1300*53ee8cc1Swenshuai.xi }
1301*53ee8cc1Swenshuai.xi
1302*53ee8cc1Swenshuai.xi u32scattergather_Address = ALIGN_8(phy64PAInBuf + u32Size);
1303*53ee8cc1Swenshuai.xi
1304*53ee8cc1Swenshuai.xi u32Size /= SHA_UNIT_SIZE;
1305*53ee8cc1Swenshuai.xi phy64PAInBuf /= SHA_UNIT_SIZE;
1306*53ee8cc1Swenshuai.xi
1307*53ee8cc1Swenshuai.xi if(phy64PAInBuf > _u32MIU1_Addr)
1308*53ee8cc1Swenshuai.xi {
1309*53ee8cc1Swenshuai.xi SHA_SetAddress((u32scattergather_Address | SHA_MIU1_ENABLE) / SHA_UNIT_SIZE);
1310*53ee8cc1Swenshuai.xi phy64PAInBuf = phy64PAInBuf | SHA_MIU1_ENABLE;
1311*53ee8cc1Swenshuai.xi }
1312*53ee8cc1Swenshuai.xi else
1313*53ee8cc1Swenshuai.xi {
1314*53ee8cc1Swenshuai.xi SHA_SetAddress((u32scattergather_Address) / SHA_UNIT_SIZE);
1315*53ee8cc1Swenshuai.xi }
1316*53ee8cc1Swenshuai.xi
1317*53ee8cc1Swenshuai.xi SHA_SetLength(u32Size);
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi u8scattergather_format = (MS_U8 *)MsOS_PA2KSEG1(u32scattergather_Address);
1320*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)((u32Size>>0x00)&0xFF);
1321*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)((u32Size>>0x08)&0xFF);
1322*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)((u32Size>>0x10)&0xFF);
1323*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)((u32Size>>0x18)&0xFF);
1324*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)(((phy64PAInBuf)>>0x00)&0xFF);
1325*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)(((phy64PAInBuf)>>0x08)&0xFF);
1326*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)(((phy64PAInBuf)>>0x10)&0xFF);
1327*53ee8cc1Swenshuai.xi *(u8scattergather_format++) = (MS_U8)(((phy64PAInBuf)>>0x18)&0xFF);
1328*53ee8cc1Swenshuai.xi
1329*53ee8cc1Swenshuai.xi SHA_SelMode((AESDMA_SHAMode)eMode);
1330*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(40);
1331*53ee8cc1Swenshuai.xi
1332*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
1333*53ee8cc1Swenshuai.xi
1334*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(200);
1335*53ee8cc1Swenshuai.xi
1336*53ee8cc1Swenshuai.xi SHA_Start(1);
1337*53ee8cc1Swenshuai.xi
1338*53ee8cc1Swenshuai.xi while ((SHA_Get_Status() & SHARNG_CTRL_SHA_READY) == 0)
1339*53ee8cc1Swenshuai.xi {
1340*53ee8cc1Swenshuai.xi MsOS_DelayTaskUs(10);
1341*53ee8cc1Swenshuai.xi u32timeout_count++;
1342*53ee8cc1Swenshuai.xi #if (SHA_WAIT==1)
1343*53ee8cc1Swenshuai.xi //500ms timeout
1344*53ee8cc1Swenshuai.xi if(u32timeout_count>SHA_TIMEOUT_VALUE)
1345*53ee8cc1Swenshuai.xi {
1346*53ee8cc1Swenshuai.xi SHA_Reset();
1347*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1348*53ee8cc1Swenshuai.xi }
1349*53ee8cc1Swenshuai.xi #endif
1350*53ee8cc1Swenshuai.xi }
1351*53ee8cc1Swenshuai.xi
1352*53ee8cc1Swenshuai.xi SHA_Out(MsOS_PA2KSEG1(phy64PAOutBuf));
1353*53ee8cc1Swenshuai.xi while ((SHA_Get_Status() & SHARNG_CTRL_SHA_BUSY) != 0)
1354*53ee8cc1Swenshuai.xi ;
1355*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1356*53ee8cc1Swenshuai.xi }
1357*53ee8cc1Swenshuai.xi
MDrv_SHA_Calculate(DrvAESDMA_SHAMode eMode,MS_PHY u32PAInBuf,MS_U32 u32Size,MS_PHY u32PAOutBuf)1358*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_SHA_Calculate(DrvAESDMA_SHAMode eMode, MS_PHY u32PAInBuf, MS_U32 u32Size, MS_PHY u32PAOutBuf)
1359*53ee8cc1Swenshuai.xi {
1360*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1361*53ee8cc1Swenshuai.xi SHA_CALCULATE ShaCalParam;
1362*53ee8cc1Swenshuai.xi ShaCalParam.eMode= eMode;
1363*53ee8cc1Swenshuai.xi ShaCalParam.u32PAInBuf= u32PAInBuf;
1364*53ee8cc1Swenshuai.xi ShaCalParam.u32Size= u32Size;
1365*53ee8cc1Swenshuai.xi ShaCalParam.u32PAOutBuf= u32PAOutBuf;
1366*53ee8cc1Swenshuai.xi
1367*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_SHA_Calculate,(void*)&ShaCalParam) != UTOPIA_STATUS_SUCCESS)
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1370*53ee8cc1Swenshuai.xi }
1371*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1372*53ee8cc1Swenshuai.xi #else
1373*53ee8cc1Swenshuai.xi return _MDrv_SHA_Calculate(eMode,u32PAInBuf,u32Size,u32PAOutBuf, NULL);
1374*53ee8cc1Swenshuai.xi #endif
1375*53ee8cc1Swenshuai.xi }
1376*53ee8cc1Swenshuai.xi
MDrv_SHA_CalculateManual(DrvAESDMA_HASHCFG stCfg,DrvAESDMA_HASH_STAGE eStage,MS_U32 u32DoneBytes,MS_U8 * pu8SetIV)1377*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_SHA_CalculateManual(DrvAESDMA_HASHCFG stCfg, DrvAESDMA_HASH_STAGE eStage, MS_U32 u32DoneBytes, MS_U8 *pu8SetIV)
1378*53ee8cc1Swenshuai.xi {
1379*53ee8cc1Swenshuai.xi
1380*53ee8cc1Swenshuai.xi //not implement yet
1381*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1382*53ee8cc1Swenshuai.xi }
1383*53ee8cc1Swenshuai.xi
1384*53ee8cc1Swenshuai.xi
1385*53ee8cc1Swenshuai.xi
1386*53ee8cc1Swenshuai.xi #ifdef MOBF_ENABLE
1387*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1388*53ee8cc1Swenshuai.xi /// MOBF BDMA without any Encrypt (sw patch)
1389*53ee8cc1Swenshuai.xi ///
1390*53ee8cc1Swenshuai.xi
1391*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1392*53ee8cc1Swenshuai.xi /// @note Must be called after MDrv_AESDMA_SelEng(E_DRVAESDMA_CIPHER_DES_CTR,1)
1393*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MOBF_DmaOnly(void)1394*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_MOBF_DmaOnly(void)
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi MOBF_DisableTDES();
1397*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1398*53ee8cc1Swenshuai.xi }
1399*53ee8cc1Swenshuai.xi
1400*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1401*53ee8cc1Swenshuai.xi /// Set MOBF encrypt (from AESDMA to MIU)
1402*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Encrypt Key
1403*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Encrypt Enable/disable
1404*53ee8cc1Swenshuai.xi
1405*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1406*53ee8cc1Swenshuai.xi /// @note
1407*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MOBF_Encrypt(MS_U32 u32Key,MS_BOOL bEnable)1408*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_MOBF_Encrypt(MS_U32 u32Key, MS_BOOL bEnable)
1409*53ee8cc1Swenshuai.xi {
1410*53ee8cc1Swenshuai.xi MOBF_WriteKey(u32Key);
1411*53ee8cc1Swenshuai.xi MOBF_WriteEnable(bEnable);
1412*53ee8cc1Swenshuai.xi
1413*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1414*53ee8cc1Swenshuai.xi }
1415*53ee8cc1Swenshuai.xi
1416*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1417*53ee8cc1Swenshuai.xi /// Set MOBF decrypt (from MIU to AESDMA)
1418*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: Decrypt Key
1419*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Decrypt Enable/disable
1420*53ee8cc1Swenshuai.xi
1421*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1422*53ee8cc1Swenshuai.xi /// @note
1423*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MOBF_Decrypt(MS_U32 u32Key,MS_BOOL bEnable)1424*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_MOBF_Decrypt(MS_U32 u32Key, MS_BOOL bEnable)
1425*53ee8cc1Swenshuai.xi {
1426*53ee8cc1Swenshuai.xi MOBF_ReadKey(u32Key);
1427*53ee8cc1Swenshuai.xi MOBF_ReadEnable(bEnable);
1428*53ee8cc1Swenshuai.xi
1429*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1430*53ee8cc1Swenshuai.xi }
1431*53ee8cc1Swenshuai.xi
1432*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1433*53ee8cc1Swenshuai.xi /// Enable MOBF One Way
1434*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1435*53ee8cc1Swenshuai.xi /// @note disable read mobf key
1436*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MOBF_OneWay(void)1437*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_MOBF_OneWay(void)
1438*53ee8cc1Swenshuai.xi {
1439*53ee8cc1Swenshuai.xi MOBF_OneWay();
1440*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1441*53ee8cc1Swenshuai.xi }
1442*53ee8cc1Swenshuai.xi
1443*53ee8cc1Swenshuai.xi #endif
1444*53ee8cc1Swenshuai.xi
1445*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1446*53ee8cc1Swenshuai.xi /// Mask Scrmb bit(for decrypt using)
1447*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Mask Scrmb Enable/disable
1448*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1449*53ee8cc1Swenshuai.xi /// @note mask Scrmb bit
1450*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_MaskScrmb(MS_BOOL bEnable)1451*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_MaskScrmb(MS_BOOL bEnable)
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi AESDMA_Parser_Mask_Scrmb(bEnable);
1454*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1455*53ee8cc1Swenshuai.xi }
1456*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_MaskScrmb(MS_BOOL bEnable)1457*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_MaskScrmb(MS_BOOL bEnable)
1458*53ee8cc1Swenshuai.xi {
1459*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1460*53ee8cc1Swenshuai.xi
1461*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1462*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1463*53ee8cc1Swenshuai.xi
1464*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PARSER_MASKSCRMB,(void*)&bEnable) != UTOPIA_STATUS_SUCCESS)
1465*53ee8cc1Swenshuai.xi {
1466*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1467*53ee8cc1Swenshuai.xi }
1468*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1469*53ee8cc1Swenshuai.xi
1470*53ee8cc1Swenshuai.xi #else
1471*53ee8cc1Swenshuai.xi AESDMA_Parser_Mask_Scrmb(bEnable);
1472*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1473*53ee8cc1Swenshuai.xi #endif
1474*53ee8cc1Swenshuai.xi }
1475*53ee8cc1Swenshuai.xi
1476*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1477*53ee8cc1Swenshuai.xi /// Set Scrmb Pattern
1478*53ee8cc1Swenshuai.xi /// @param ePattern \b IN: input Scrmb pattern(10/11)
1479*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1480*53ee8cc1Swenshuai.xi /// @note set Scrmb Pattern
1481*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_SetScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)1482*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_SetScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)
1483*53ee8cc1Swenshuai.xi {
1484*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_ScrmbPattern(ePattern);
1485*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1486*53ee8cc1Swenshuai.xi }
1487*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_SetScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)1488*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_SetScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)
1489*53ee8cc1Swenshuai.xi {
1490*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1491*53ee8cc1Swenshuai.xi
1492*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1493*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1494*53ee8cc1Swenshuai.xi
1495*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PARSER_SETSCRMBPATTERN,(void*)&ePattern) != UTOPIA_STATUS_SUCCESS)
1496*53ee8cc1Swenshuai.xi {
1497*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1498*53ee8cc1Swenshuai.xi }
1499*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1500*53ee8cc1Swenshuai.xi
1501*53ee8cc1Swenshuai.xi #else
1502*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_ScrmbPattern(ePattern);
1503*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1504*53ee8cc1Swenshuai.xi #endif
1505*53ee8cc1Swenshuai.xi }
1506*53ee8cc1Swenshuai.xi
1507*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1508*53ee8cc1Swenshuai.xi /// Set Scrmb Pattern
1509*53ee8cc1Swenshuai.xi /// @param ePattern \b IN: input Scrmb pattern(10/11)
1510*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1511*53ee8cc1Swenshuai.xi /// @note set Scrmb Pattern
1512*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_SetAddedScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)1513*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_SetAddedScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)
1514*53ee8cc1Swenshuai.xi {
1515*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_AddedScrmbPattern(ePattern);
1516*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1517*53ee8cc1Swenshuai.xi }
1518*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_SetAddedScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)1519*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_SetAddedScrmbPattern(DrvAESDMA_ScrmbPattern ePattern)
1520*53ee8cc1Swenshuai.xi {
1521*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1522*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1523*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1524*53ee8cc1Swenshuai.xi
1525*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PARSER_SETADDEDSCRMBPATTERN,(void*)&ePattern) != UTOPIA_STATUS_SUCCESS)
1526*53ee8cc1Swenshuai.xi {
1527*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1528*53ee8cc1Swenshuai.xi }
1529*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1530*53ee8cc1Swenshuai.xi
1531*53ee8cc1Swenshuai.xi #else
1532*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_AddedScrmbPattern(ePattern);
1533*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1534*53ee8cc1Swenshuai.xi #endif
1535*53ee8cc1Swenshuai.xi }
1536*53ee8cc1Swenshuai.xi
1537*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1538*53ee8cc1Swenshuai.xi /// Query Pid Count
1539*53ee8cc1Swenshuai.xi /// @return Pid Count
1540*53ee8cc1Swenshuai.xi /// @note query pid count
1541*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_QueryPidCount(MS_U8 * retCount)1542*53ee8cc1Swenshuai.xi MS_U8 _MDrv_AESDMA_Parser_QueryPidCount(MS_U8* retCount)
1543*53ee8cc1Swenshuai.xi {
1544*53ee8cc1Swenshuai.xi *retCount = AESDMA_Parser_Query_PidCount();
1545*53ee8cc1Swenshuai.xi return *retCount;
1546*53ee8cc1Swenshuai.xi }
1547*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_QueryPidCount(void)1548*53ee8cc1Swenshuai.xi MS_U8 MDrv_AESDMA_Parser_QueryPidCount(void)
1549*53ee8cc1Swenshuai.xi {
1550*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1551*53ee8cc1Swenshuai.xi
1552*53ee8cc1Swenshuai.xi MS_U8 mCount = 0;
1553*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1554*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1555*53ee8cc1Swenshuai.xi
1556*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PARSER_QUERYPIDCOUNT,(void*)&mCount) != UTOPIA_STATUS_SUCCESS)
1557*53ee8cc1Swenshuai.xi {
1558*53ee8cc1Swenshuai.xi return mCount;
1559*53ee8cc1Swenshuai.xi }
1560*53ee8cc1Swenshuai.xi return mCount;
1561*53ee8cc1Swenshuai.xi
1562*53ee8cc1Swenshuai.xi #else
1563*53ee8cc1Swenshuai.xi return AESDMA_Parser_Query_PidCount();
1564*53ee8cc1Swenshuai.xi #endif
1565*53ee8cc1Swenshuai.xi }
1566*53ee8cc1Swenshuai.xi
1567*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1568*53ee8cc1Swenshuai.xi /// Set Pid
1569*53ee8cc1Swenshuai.xi /// @param u8Index \b IN: Pid Index(0/1)
1570*53ee8cc1Swenshuai.xi /// @param u16Pid \b IN: Pid Value(max value is 0x1FFF)
1571*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1572*53ee8cc1Swenshuai.xi /// @note set Pid
1573*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_SetPid(MS_U8 u8Index,MS_U16 u16Pid)1574*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_SetPid(MS_U8 u8Index, MS_U16 u16Pid)
1575*53ee8cc1Swenshuai.xi {
1576*53ee8cc1Swenshuai.xi MS_U8 u8PidCount;
1577*53ee8cc1Swenshuai.xi // check Pid value
1578*53ee8cc1Swenshuai.xi if (u16Pid > AESDMA_PARSER_PID_MAX)
1579*53ee8cc1Swenshuai.xi {
1580*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1581*53ee8cc1Swenshuai.xi }
1582*53ee8cc1Swenshuai.xi
1583*53ee8cc1Swenshuai.xi // check Pid count
1584*53ee8cc1Swenshuai.xi u8PidCount = AESDMA_Parser_Query_PidCount();
1585*53ee8cc1Swenshuai.xi if (u8Index >= u8PidCount)
1586*53ee8cc1Swenshuai.xi {
1587*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1588*53ee8cc1Swenshuai.xi }
1589*53ee8cc1Swenshuai.xi
1590*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Pid(u8Index,u16Pid);
1591*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1592*53ee8cc1Swenshuai.xi }
1593*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_SetPid(MS_U8 u8Index,MS_U16 u16Pid)1594*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_SetPid(MS_U8 u8Index, MS_U16 u16Pid)
1595*53ee8cc1Swenshuai.xi {
1596*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1597*53ee8cc1Swenshuai.xi AESDMA_PARSER_PID_CONFIGURATIONS mConfig;
1598*53ee8cc1Swenshuai.xi
1599*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1600*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1601*53ee8cc1Swenshuai.xi
1602*53ee8cc1Swenshuai.xi mConfig.u8PidIndex = u8Index;
1603*53ee8cc1Swenshuai.xi mConfig.u16Pid = u16Pid;
1604*53ee8cc1Swenshuai.xi
1605*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_PARSER_SETPID,(void*)&mConfig) != UTOPIA_STATUS_SUCCESS)
1606*53ee8cc1Swenshuai.xi {
1607*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1608*53ee8cc1Swenshuai.xi }
1609*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1610*53ee8cc1Swenshuai.xi
1611*53ee8cc1Swenshuai.xi #else
1612*53ee8cc1Swenshuai.xi MS_U8 u8PidCount;
1613*53ee8cc1Swenshuai.xi // check Pid value
1614*53ee8cc1Swenshuai.xi if (u16Pid > AESDMA_PARSER_PID_MAX)
1615*53ee8cc1Swenshuai.xi {
1616*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1617*53ee8cc1Swenshuai.xi }
1618*53ee8cc1Swenshuai.xi
1619*53ee8cc1Swenshuai.xi // check Pid count
1620*53ee8cc1Swenshuai.xi u8PidCount = AESDMA_Parser_Query_PidCount();
1621*53ee8cc1Swenshuai.xi if (u8Index >= u8PidCount)
1622*53ee8cc1Swenshuai.xi {
1623*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1624*53ee8cc1Swenshuai.xi }
1625*53ee8cc1Swenshuai.xi
1626*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Pid(u8Index,u16Pid);
1627*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1628*53ee8cc1Swenshuai.xi #endif
1629*53ee8cc1Swenshuai.xi }
1630*53ee8cc1Swenshuai.xi
1631*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1632*53ee8cc1Swenshuai.xi /// Bypass Pid
1633*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Bypass Pid Enable/disable
1634*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1635*53ee8cc1Swenshuai.xi /// @note bypass Pid
1636*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_BypassPid(MS_BOOL bEnable)1637*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_BypassPid(MS_BOOL bEnable)
1638*53ee8cc1Swenshuai.xi {
1639*53ee8cc1Swenshuai.xi AESDMA_Parser_Bypass_Pid(bEnable);
1640*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1641*53ee8cc1Swenshuai.xi }
1642*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_BypassPid(MS_BOOL bEnable)1643*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_BypassPid(MS_BOOL bEnable)
1644*53ee8cc1Swenshuai.xi {
1645*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1646*53ee8cc1Swenshuai.xi
1647*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1648*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1649*53ee8cc1Swenshuai.xi
1650*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_PARSER_BYPASSPID,(void*)&bEnable) != UTOPIA_STATUS_SUCCESS)
1651*53ee8cc1Swenshuai.xi {
1652*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1653*53ee8cc1Swenshuai.xi }
1654*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1655*53ee8cc1Swenshuai.xi
1656*53ee8cc1Swenshuai.xi #else
1657*53ee8cc1Swenshuai.xi AESDMA_Parser_Bypass_Pid(bEnable);
1658*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1659*53ee8cc1Swenshuai.xi #endif
1660*53ee8cc1Swenshuai.xi }
1661*53ee8cc1Swenshuai.xi
1662*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1663*53ee8cc1Swenshuai.xi /// Init Parser Encrypt
1664*53ee8cc1Swenshuai.xi /// @param eMode \b IN: input parser mode
1665*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1666*53ee8cc1Swenshuai.xi /// @note init parser encrypt
1667*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_Encrypt(DrvAESDMA_ParserMode eMode)1668*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_Encrypt(DrvAESDMA_ParserMode eMode)
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Mode((AESDMA_ParserMode)eMode);
1671*53ee8cc1Swenshuai.xi switch (eMode)
1672*53ee8cc1Swenshuai.xi {
1673*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192:
1674*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192_CLEAR:
1675*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188:
1676*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188_CLEAR:
1677*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(TRUE);
1678*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1679*53ee8cc1Swenshuai.xi break;
1680*53ee8cc1Swenshuai.xi
1681*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192:
1682*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192_CLEAR:
1683*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188:
1684*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188_CLEAR:
1685*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1686*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1687*53ee8cc1Swenshuai.xi break;
1688*53ee8cc1Swenshuai.xi }
1689*53ee8cc1Swenshuai.xi
1690*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(TRUE);
1691*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1692*53ee8cc1Swenshuai.xi }
1693*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_Encrypt(DrvAESDMA_ParserMode eMode)1694*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_Encrypt(DrvAESDMA_ParserMode eMode)
1695*53ee8cc1Swenshuai.xi {
1696*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1697*53ee8cc1Swenshuai.xi AESDMA_PARSER_CONFIGURATIONS stArgs;
1698*53ee8cc1Swenshuai.xi
1699*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1700*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1701*53ee8cc1Swenshuai.xi
1702*53ee8cc1Swenshuai.xi stArgs.eParserMode = eMode;
1703*53ee8cc1Swenshuai.xi
1704*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_PARSER_ENCRYPT,(void*)&stArgs) != UTOPIA_STATUS_SUCCESS)
1705*53ee8cc1Swenshuai.xi {
1706*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1707*53ee8cc1Swenshuai.xi }
1708*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1709*53ee8cc1Swenshuai.xi
1710*53ee8cc1Swenshuai.xi #else
1711*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Mode((AESDMA_ParserMode)eMode);
1712*53ee8cc1Swenshuai.xi switch (eMode)
1713*53ee8cc1Swenshuai.xi {
1714*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192:
1715*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192_CLEAR:
1716*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188:
1717*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188_CLEAR:
1718*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(TRUE);
1719*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1720*53ee8cc1Swenshuai.xi break;
1721*53ee8cc1Swenshuai.xi
1722*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192:
1723*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192_CLEAR:
1724*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188:
1725*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188_CLEAR:
1726*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1727*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1728*53ee8cc1Swenshuai.xi break;
1729*53ee8cc1Swenshuai.xi }
1730*53ee8cc1Swenshuai.xi
1731*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(TRUE);
1732*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1733*53ee8cc1Swenshuai.xi #endif
1734*53ee8cc1Swenshuai.xi }
1735*53ee8cc1Swenshuai.xi
1736*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1737*53ee8cc1Swenshuai.xi /// Init Parser Decrypt
1738*53ee8cc1Swenshuai.xi /// @param eMode \b IN: input parser mode
1739*53ee8cc1Swenshuai.xi /// @return AESDMA_Result
1740*53ee8cc1Swenshuai.xi /// @note init parser decrypt
1741*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MDrv_AESDMA_Parser_Decrypt(DrvAESDMA_ParserMode eMode)1742*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_Parser_Decrypt(DrvAESDMA_ParserMode eMode)
1743*53ee8cc1Swenshuai.xi {
1744*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Mode((AESDMA_ParserMode)eMode);
1745*53ee8cc1Swenshuai.xi
1746*53ee8cc1Swenshuai.xi switch (eMode)
1747*53ee8cc1Swenshuai.xi {
1748*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192:
1749*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192_CLEAR:
1750*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188:
1751*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188_CLEAR:
1752*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1753*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(TRUE);
1754*53ee8cc1Swenshuai.xi break;
1755*53ee8cc1Swenshuai.xi
1756*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192:
1757*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192_CLEAR:
1758*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188:
1759*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188_CLEAR:
1760*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1761*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1762*53ee8cc1Swenshuai.xi break;
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi
1765*53ee8cc1Swenshuai.xi
1766*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(TRUE);
1767*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1768*53ee8cc1Swenshuai.xi }
1769*53ee8cc1Swenshuai.xi
MDrv_AESDMA_Parser_Decrypt(DrvAESDMA_ParserMode eMode)1770*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_Parser_Decrypt(DrvAESDMA_ParserMode eMode)
1771*53ee8cc1Swenshuai.xi {
1772*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1773*53ee8cc1Swenshuai.xi AESDMA_PARSER_CONFIGURATIONS stArgs;
1774*53ee8cc1Swenshuai.xi
1775*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1776*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1777*53ee8cc1Swenshuai.xi
1778*53ee8cc1Swenshuai.xi stArgs.eParserMode = eMode;
1779*53ee8cc1Swenshuai.xi
1780*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_PARSER_DECRYPT,(void*)&stArgs) != UTOPIA_STATUS_SUCCESS)
1781*53ee8cc1Swenshuai.xi {
1782*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1783*53ee8cc1Swenshuai.xi }
1784*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1785*53ee8cc1Swenshuai.xi
1786*53ee8cc1Swenshuai.xi #else
1787*53ee8cc1Swenshuai.xi AESDMA_Parser_Set_Mode((AESDMA_ParserMode)eMode);
1788*53ee8cc1Swenshuai.xi
1789*53ee8cc1Swenshuai.xi switch (eMode)
1790*53ee8cc1Swenshuai.xi {
1791*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192:
1792*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT192_CLEAR:
1793*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188:
1794*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_TS_PKT188_CLEAR:
1795*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1796*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(TRUE);
1797*53ee8cc1Swenshuai.xi break;
1798*53ee8cc1Swenshuai.xi
1799*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192:
1800*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT192_CLEAR:
1801*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188:
1802*53ee8cc1Swenshuai.xi case E_DRVAESDMA_PARSER_HDCP20_PKT188_CLEAR:
1803*53ee8cc1Swenshuai.xi AESDMA_Parser_Insert_Scrmb(FALSE);
1804*53ee8cc1Swenshuai.xi AESDMA_Parser_Remove_Scrmb(FALSE);
1805*53ee8cc1Swenshuai.xi break;
1806*53ee8cc1Swenshuai.xi }
1807*53ee8cc1Swenshuai.xi
1808*53ee8cc1Swenshuai.xi
1809*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_HWParser(TRUE);
1810*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1811*53ee8cc1Swenshuai.xi #endif
1812*53ee8cc1Swenshuai.xi }
1813*53ee8cc1Swenshuai.xi
_MDrv_RSA_Calculate(DrvAESDMA_RSASig * pstSign,DrvAESDMA_RSAKey * pstKey,DrvAESDMA_RSAMode eMode)1814*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_RSA_Calculate(DrvAESDMA_RSASig *pstSign, DrvAESDMA_RSAKey *pstKey, DrvAESDMA_RSAMode eMode)
1815*53ee8cc1Swenshuai.xi {
1816*53ee8cc1Swenshuai.xi MS_U32 u32KeyLen = 0;
1817*53ee8cc1Swenshuai.xi MS_U8 u8Public = 0;
1818*53ee8cc1Swenshuai.xi MS_U32 *pu32Sig = (MS_U32 *)((void*)pstSign);
1819*53ee8cc1Swenshuai.xi MS_U32 *pu32Key = (MS_U32 *)((void*)pstKey);
1820*53ee8cc1Swenshuai.xi
1821*53ee8cc1Swenshuai.xi
1822*53ee8cc1Swenshuai.xi RSA_Reset();
1823*53ee8cc1Swenshuai.xi RSA_Ind32Ctrl(1);//ind32_ctrl=0xE0
1824*53ee8cc1Swenshuai.xi
1825*53ee8cc1Swenshuai.xi switch (eMode)
1826*53ee8cc1Swenshuai.xi {
1827*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA1024_PUBLIC:
1828*53ee8cc1Swenshuai.xi {
1829*53ee8cc1Swenshuai.xi u32KeyLen = 128;
1830*53ee8cc1Swenshuai.xi u8Public = 1;
1831*53ee8cc1Swenshuai.xi }
1832*53ee8cc1Swenshuai.xi break;
1833*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA1024_PRIVATE:
1834*53ee8cc1Swenshuai.xi {
1835*53ee8cc1Swenshuai.xi u32KeyLen = 128;
1836*53ee8cc1Swenshuai.xi u8Public = 0;
1837*53ee8cc1Swenshuai.xi }
1838*53ee8cc1Swenshuai.xi break;
1839*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA2048_PUBLIC:
1840*53ee8cc1Swenshuai.xi {
1841*53ee8cc1Swenshuai.xi u32KeyLen = 256;
1842*53ee8cc1Swenshuai.xi u8Public = 1;
1843*53ee8cc1Swenshuai.xi }
1844*53ee8cc1Swenshuai.xi break;
1845*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA2048_PRIVATE:
1846*53ee8cc1Swenshuai.xi {
1847*53ee8cc1Swenshuai.xi u32KeyLen = 256;
1848*53ee8cc1Swenshuai.xi u8Public = 0;
1849*53ee8cc1Swenshuai.xi }
1850*53ee8cc1Swenshuai.xi break;
1851*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA256_PUBLIC:
1852*53ee8cc1Swenshuai.xi {
1853*53ee8cc1Swenshuai.xi u32KeyLen = 32;
1854*53ee8cc1Swenshuai.xi u8Public = 1;
1855*53ee8cc1Swenshuai.xi }
1856*53ee8cc1Swenshuai.xi break;
1857*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA256_PRIVATE:
1858*53ee8cc1Swenshuai.xi {
1859*53ee8cc1Swenshuai.xi u32KeyLen = 32;
1860*53ee8cc1Swenshuai.xi u8Public = 0;
1861*53ee8cc1Swenshuai.xi }
1862*53ee8cc1Swenshuai.xi break;
1863*53ee8cc1Swenshuai.xi default:
1864*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1865*53ee8cc1Swenshuai.xi }
1866*53ee8cc1Swenshuai.xi
1867*53ee8cc1Swenshuai.xi RSA_LoadSram((pu32Sig+(RSA_INPUT_SIZE/RSA_UNIT_SIZE)-1),E_RSA_ADDRESS_A);
1868*53ee8cc1Swenshuai.xi RSA_LoadSram((pu32Key+(RSA_INPUT_SIZE/RSA_UNIT_SIZE)-1),E_RSA_ADDRESS_N);
1869*53ee8cc1Swenshuai.xi RSA_LoadSram((pu32Key+(RSA_INPUT_SIZE/RSA_UNIT_SIZE)),E_RSA_ADDRESS_E);
1870*53ee8cc1Swenshuai.xi
1871*53ee8cc1Swenshuai.xi RSA_SetKeyLength((u32KeyLen/RSA_UNIT_SIZE)-1);
1872*53ee8cc1Swenshuai.xi RSA_SetKeyType(0,u8Public); //sw key, public key
1873*53ee8cc1Swenshuai.xi
1874*53ee8cc1Swenshuai.xi RSA_ExponetialStart();
1875*53ee8cc1Swenshuai.xi
1876*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1877*53ee8cc1Swenshuai.xi }
1878*53ee8cc1Swenshuai.xi
MDrv_RSA_Calculate_Hw_Key(DrvAESDMA_RSASig * pstSign,DrvAESDMA_RSAHwKeyMode eMode)1879*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_RSA_Calculate_Hw_Key(DrvAESDMA_RSASig *pstSign, DrvAESDMA_RSAHwKeyMode eMode)
1880*53ee8cc1Swenshuai.xi {
1881*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1882*53ee8cc1Swenshuai.xi }
1883*53ee8cc1Swenshuai.xi
MDrv_RSA_Calculate(DrvAESDMA_RSASig * pstSign,DrvAESDMA_RSAKey * pstKey,DrvAESDMA_RSAMode eMode)1884*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_RSA_Calculate(DrvAESDMA_RSASig *pstSign, DrvAESDMA_RSAKey *pstKey, DrvAESDMA_RSAMode eMode)
1885*53ee8cc1Swenshuai.xi {
1886*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1887*53ee8cc1Swenshuai.xi RSA_CALCULATE stRsaCalParam;
1888*53ee8cc1Swenshuai.xi
1889*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1890*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1891*53ee8cc1Swenshuai.xi
1892*53ee8cc1Swenshuai.xi stRsaCalParam.pstSign = pstSign;
1893*53ee8cc1Swenshuai.xi stRsaCalParam.pstKey = pstKey;
1894*53ee8cc1Swenshuai.xi stRsaCalParam.eMode= eMode;
1895*53ee8cc1Swenshuai.xi
1896*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_RSA_Calculate,(void*)&stRsaCalParam) != UTOPIA_STATUS_SUCCESS)
1897*53ee8cc1Swenshuai.xi {
1898*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1899*53ee8cc1Swenshuai.xi }
1900*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1901*53ee8cc1Swenshuai.xi #else
1902*53ee8cc1Swenshuai.xi return _MDrv_RSA_Calculate(pstSign,pstKey,eMode);
1903*53ee8cc1Swenshuai.xi #endif
1904*53ee8cc1Swenshuai.xi }
1905*53ee8cc1Swenshuai.xi
_MDrv_RSA_IsFinished(void)1906*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_RSA_IsFinished(void)
1907*53ee8cc1Swenshuai.xi {
1908*53ee8cc1Swenshuai.xi if(!RSA_Get_RSA_IsFinished())
1909*53ee8cc1Swenshuai.xi {
1910*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1911*53ee8cc1Swenshuai.xi }
1912*53ee8cc1Swenshuai.xi else
1913*53ee8cc1Swenshuai.xi {
1914*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1915*53ee8cc1Swenshuai.xi }
1916*53ee8cc1Swenshuai.xi }
1917*53ee8cc1Swenshuai.xi
MDrv_RSA_IsFinished(void)1918*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_RSA_IsFinished(void)
1919*53ee8cc1Swenshuai.xi {
1920*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1921*53ee8cc1Swenshuai.xi MS_U32 u32Timeout = 0x100000;
1922*53ee8cc1Swenshuai.xi
1923*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
1924*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1925*53ee8cc1Swenshuai.xi
1926*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_RSA_IsFinished,(void*)&u32Timeout) != UTOPIA_STATUS_SUCCESS)
1927*53ee8cc1Swenshuai.xi {
1928*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1929*53ee8cc1Swenshuai.xi }
1930*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1931*53ee8cc1Swenshuai.xi #else
1932*53ee8cc1Swenshuai.xi return _MDrv_RSA_IsFinished();
1933*53ee8cc1Swenshuai.xi #endif
1934*53ee8cc1Swenshuai.xi }
_MDrv_RSA_Output(DrvAESDMA_RSAMode eMode,DrvAESDMA_RSAOut * pstRSAOut)1935*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_RSA_Output(DrvAESDMA_RSAMode eMode, DrvAESDMA_RSAOut *pstRSAOut)
1936*53ee8cc1Swenshuai.xi {
1937*53ee8cc1Swenshuai.xi MS_U32 i = 0;
1938*53ee8cc1Swenshuai.xi MS_U32 u32KeyLen = 0;
1939*53ee8cc1Swenshuai.xi
1940*53ee8cc1Swenshuai.xi MS_U32 *pu32RSAOut = (MS_U32 *)((void*)pstRSAOut);
1941*53ee8cc1Swenshuai.xi
1942*53ee8cc1Swenshuai.xi RSA_Ind32Ctrl(0);//ind32_ctrl=0xC0
1943*53ee8cc1Swenshuai.xi
1944*53ee8cc1Swenshuai.xi switch (eMode)
1945*53ee8cc1Swenshuai.xi {
1946*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA1024_PUBLIC:
1947*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA1024_PRIVATE:
1948*53ee8cc1Swenshuai.xi u32KeyLen = 128;
1949*53ee8cc1Swenshuai.xi break;
1950*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA2048_PUBLIC:
1951*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA2048_PRIVATE:
1952*53ee8cc1Swenshuai.xi u32KeyLen = 256;
1953*53ee8cc1Swenshuai.xi break;
1954*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA256_PUBLIC:
1955*53ee8cc1Swenshuai.xi case E_DRVAESDMA_RSA256_PRIVATE:
1956*53ee8cc1Swenshuai.xi u32KeyLen = 32;
1957*53ee8cc1Swenshuai.xi break;
1958*53ee8cc1Swenshuai.xi default:
1959*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
1960*53ee8cc1Swenshuai.xi }
1961*53ee8cc1Swenshuai.xi
1962*53ee8cc1Swenshuai.xi for( i = 0; i<(u32KeyLen/RSA_UNIT_SIZE); i++)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi RSA_SetFileOutAddr(i);
1965*53ee8cc1Swenshuai.xi RSA_FileOutStart();
1966*53ee8cc1Swenshuai.xi *(pu32RSAOut+i) = RSA_FileOut();
1967*53ee8cc1Swenshuai.xi }
1968*53ee8cc1Swenshuai.xi
1969*53ee8cc1Swenshuai.xi //clear the used key whenever calculating is finished
1970*53ee8cc1Swenshuai.xi RSA_Reset();
1971*53ee8cc1Swenshuai.xi
1972*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1973*53ee8cc1Swenshuai.xi }
1974*53ee8cc1Swenshuai.xi
MDrv_RSA_Output(DrvAESDMA_RSAMode eMode,DrvAESDMA_RSAOut * pstRSAOut)1975*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_RSA_Output(DrvAESDMA_RSAMode eMode, DrvAESDMA_RSAOut *pstRSAOut)
1976*53ee8cc1Swenshuai.xi {
1977*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
1978*53ee8cc1Swenshuai.xi RSA_OUTPUT RsaOutParam;
1979*53ee8cc1Swenshuai.xi RsaOutParam.eMode= eMode;
1980*53ee8cc1Swenshuai.xi RsaOutParam.pstRSAOut= pstRSAOut;
1981*53ee8cc1Swenshuai.xi
1982*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_RSA_Output,(void*)&RsaOutParam) != UTOPIA_STATUS_SUCCESS)
1983*53ee8cc1Swenshuai.xi {
1984*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
1985*53ee8cc1Swenshuai.xi }
1986*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
1987*53ee8cc1Swenshuai.xi #else
1988*53ee8cc1Swenshuai.xi return _MDrv_RSA_Output(eMode,pstRSAOut);
1989*53ee8cc1Swenshuai.xi #endif
1990*53ee8cc1Swenshuai.xi }
1991*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetPowerState(EN_POWER_MODE u16PowerState)1992*53ee8cc1Swenshuai.xi MS_U32 MDrv_AESDMA_SetPowerState(EN_POWER_MODE u16PowerState)
1993*53ee8cc1Swenshuai.xi {
1994*53ee8cc1Swenshuai.xi static EN_POWER_MODE u16PreAESDMAPowerState = E_POWER_MECHANICAL;
1995*53ee8cc1Swenshuai.xi MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1996*53ee8cc1Swenshuai.xi
1997*53ee8cc1Swenshuai.xi if (u16PowerState == E_POWER_SUSPEND)
1998*53ee8cc1Swenshuai.xi {
1999*53ee8cc1Swenshuai.xi u16PreAESDMAPowerState = u16PowerState;
2000*53ee8cc1Swenshuai.xi _u8IsInit = FALSE;
2001*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
2002*53ee8cc1Swenshuai.xi
2003*53ee8cc1Swenshuai.xi AESDMA_POWER_SUSPEND();
2004*53ee8cc1Swenshuai.xi
2005*53ee8cc1Swenshuai.xi #if !defined(MSOS_TYPE_NOS)
2006*53ee8cc1Swenshuai.xi MsOS_DeleteEventGroup(_s32AESDMAEventId);
2007*53ee8cc1Swenshuai.xi _AESDMA_SetEvent(AESDMA_DMA_PAUSE);
2008*53ee8cc1Swenshuai.xi #endif //#if !defined(MSOS_TYPE_NOS)
2009*53ee8cc1Swenshuai.xi _bExitIsrLoop = TRUE;
2010*53ee8cc1Swenshuai.xi }
2011*53ee8cc1Swenshuai.xi else if (u16PowerState == E_POWER_RESUME)
2012*53ee8cc1Swenshuai.xi {
2013*53ee8cc1Swenshuai.xi if (u16PreAESDMAPowerState == E_POWER_SUSPEND)
2014*53ee8cc1Swenshuai.xi {
2015*53ee8cc1Swenshuai.xi MDrv_AESDMA_Init(0, 0x20000000, 2);
2016*53ee8cc1Swenshuai.xi
2017*53ee8cc1Swenshuai.xi AESDMA_POWER_RESUME();
2018*53ee8cc1Swenshuai.xi
2019*53ee8cc1Swenshuai.xi u16PreAESDMAPowerState = u16PowerState;
2020*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
2021*53ee8cc1Swenshuai.xi }
2022*53ee8cc1Swenshuai.xi else
2023*53ee8cc1Swenshuai.xi {
2024*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
2025*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
2026*53ee8cc1Swenshuai.xi }
2027*53ee8cc1Swenshuai.xi }
2028*53ee8cc1Swenshuai.xi else
2029*53ee8cc1Swenshuai.xi {
2030*53ee8cc1Swenshuai.xi ULOGE(TAG_AESDMA, "[%s,%5d]Do Nothing: %d\n",__FUNCTION__,__LINE__,u16PowerState);
2031*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_FAIL;
2032*53ee8cc1Swenshuai.xi }
2033*53ee8cc1Swenshuai.xi
2034*53ee8cc1Swenshuai.xi return u32Return;// for success
2035*53ee8cc1Swenshuai.xi }
2036*53ee8cc1Swenshuai.xi
2037*53ee8cc1Swenshuai.xi //reserved for secure protect function
2038*53ee8cc1Swenshuai.xi /*
2039*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SecureSetKey(MS_U32 *pCipherKey)
2040*53ee8cc1Swenshuai.xi {
2041*53ee8cc1Swenshuai.xi if (pCipherKey != NULL)
2042*53ee8cc1Swenshuai.xi {
2043*53ee8cc1Swenshuai.xi AESDMA_Secure_SetCipherKey(pCipherKey);
2044*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2045*53ee8cc1Swenshuai.xi }
2046*53ee8cc1Swenshuai.xi else
2047*53ee8cc1Swenshuai.xi {
2048*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
2049*53ee8cc1Swenshuai.xi }
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi
2052*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SecureProtect(MS_BOOL bEnable)
2053*53ee8cc1Swenshuai.xi {
2054*53ee8cc1Swenshuai.xi AESDMA_SecureProtect(bEnable);
2055*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2056*53ee8cc1Swenshuai.xi }
2057*53ee8cc1Swenshuai.xi
2058*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SecureSetIV(MS_U32 *pInitVector)
2059*53ee8cc1Swenshuai.xi {
2060*53ee8cc1Swenshuai.xi if (pInitVector != NULL)
2061*53ee8cc1Swenshuai.xi {
2062*53ee8cc1Swenshuai.xi AESDMA_Secure_SetInitVector(pInitVector);
2063*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2064*53ee8cc1Swenshuai.xi }
2065*53ee8cc1Swenshuai.xi else
2066*53ee8cc1Swenshuai.xi {
2067*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
2068*53ee8cc1Swenshuai.xi }
2069*53ee8cc1Swenshuai.xi }
2070*53ee8cc1Swenshuai.xi
2071*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetFileOutEnable(MS_BOOL bEnable)
2072*53ee8cc1Swenshuai.xi {
2073*53ee8cc1Swenshuai.xi AESDMA_Set_FileOutEnable(bEnable);
2074*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2075*53ee8cc1Swenshuai.xi }
2076*53ee8cc1Swenshuai.xi
2077*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SecureStart(MS_BOOL bStart)
2078*53ee8cc1Swenshuai.xi {
2079*53ee8cc1Swenshuai.xi MsOS_FlushMemory();
2080*53ee8cc1Swenshuai.xi AESDMA_Secure_Start(bStart);
2081*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2082*53ee8cc1Swenshuai.xi }
2083*53ee8cc1Swenshuai.xi
2084*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SecureIsFinished(void)
2085*53ee8cc1Swenshuai.xi {
2086*53ee8cc1Swenshuai.xi if(AESDMA_Get_AESDMA_SecureIsFinished())
2087*53ee8cc1Swenshuai.xi {
2088*53ee8cc1Swenshuai.xi MsOS_ReadMemory();
2089*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2090*53ee8cc1Swenshuai.xi }
2091*53ee8cc1Swenshuai.xi else
2092*53ee8cc1Swenshuai.xi {
2093*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2094*53ee8cc1Swenshuai.xi }
2095*53ee8cc1Swenshuai.xi }
2096*53ee8cc1Swenshuai.xi */
2097*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_IsSecretKeyInNormalBank(MS_U8 * retVal)2098*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_IsSecretKeyInNormalBank(MS_U8 *retVal)
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi *retVal = AESDMA_IsSecretKeyInNormalBank ();
2101*53ee8cc1Swenshuai.xi if (*retVal == 0)
2102*53ee8cc1Swenshuai.xi {
2103*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2104*53ee8cc1Swenshuai.xi }
2105*53ee8cc1Swenshuai.xi else
2106*53ee8cc1Swenshuai.xi {
2107*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2108*53ee8cc1Swenshuai.xi }
2109*53ee8cc1Swenshuai.xi }
2110*53ee8cc1Swenshuai.xi
MDrv_AESDMA_IsSecretKeyInNormalBank(void)2111*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_IsSecretKeyInNormalBank(void)
2112*53ee8cc1Swenshuai.xi {
2113*53ee8cc1Swenshuai.xi
2114*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2115*53ee8cc1Swenshuai.xi
2116*53ee8cc1Swenshuai.xi MS_U8 retVal = 0;
2117*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
2118*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_IS_SECRETKEY_IN_NORMAL_BLANK,(void*)&retVal) != UTOPIA_STATUS_SUCCESS)
2121*53ee8cc1Swenshuai.xi {
2122*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2123*53ee8cc1Swenshuai.xi }
2124*53ee8cc1Swenshuai.xi
2125*53ee8cc1Swenshuai.xi if (retVal == 0)
2126*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2127*53ee8cc1Swenshuai.xi else
2128*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2129*53ee8cc1Swenshuai.xi
2130*53ee8cc1Swenshuai.xi
2131*53ee8cc1Swenshuai.xi #else
2132*53ee8cc1Swenshuai.xi if (AESDMA_IsSecretKeyInNormalBank() == 0)
2133*53ee8cc1Swenshuai.xi {
2134*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2135*53ee8cc1Swenshuai.xi }
2136*53ee8cc1Swenshuai.xi else
2137*53ee8cc1Swenshuai.xi {
2138*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2139*53ee8cc1Swenshuai.xi }
2140*53ee8cc1Swenshuai.xi #endif
2141*53ee8cc1Swenshuai.xi }
2142*53ee8cc1Swenshuai.xi
MDrv_HDCP_ProcessCipher(MS_U8 u8Idx,MS_U8 * pu8Riv,MS_U8 * pu8ContentKey)2143*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_HDCP_ProcessCipher(MS_U8 u8Idx, MS_U8* pu8Riv, MS_U8 *pu8ContentKey)
2144*53ee8cc1Swenshuai.xi {
2145*53ee8cc1Swenshuai.xi HDCP_ProcessCipher(u8Idx, pu8ContentKey, pu8Riv);
2146*53ee8cc1Swenshuai.xi
2147*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2148*53ee8cc1Swenshuai.xi }
2149*53ee8cc1Swenshuai.xi
2150*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2151*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: MDrv_HDCP_GetHdcpCipherState
2152*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Check the capability of HDCP 2.2
2153*53ee8cc1Swenshuai.xi /// @param None \b IN : u8Idx
2154*53ee8cc1Swenshuai.xi /// @param None \b OUT : pu8State
2155*53ee8cc1Swenshuai.xi /// @param DRVAESDMA_RESULT \b RET : DRVAESDMA_OK
2156*53ee8cc1Swenshuai.xi /// @param None \b GLOBAL :
2157*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
MDrv_HDCP_GetHdcpCipherState(MS_U8 u8Idx,MS_U8 * pu8State)2158*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_HDCP_GetHdcpCipherState(MS_U8 u8Idx, MS_U8 *pu8State)
2159*53ee8cc1Swenshuai.xi {
2160*53ee8cc1Swenshuai.xi HDCP_GetHdcpCipherState(u8Idx, pu8State);
2161*53ee8cc1Swenshuai.xi
2162*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2163*53ee8cc1Swenshuai.xi }
2164*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetKeyIndex(MS_U32 u32Index,MS_BOOL bIsOddKey)2165*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetKeyIndex (MS_U32 u32Index, MS_BOOL bIsOddKey)
2166*53ee8cc1Swenshuai.xi {
2167*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2168*53ee8cc1Swenshuai.xi AESDMA_KEY_INDEX KeyIndex;
2169*53ee8cc1Swenshuai.xi KeyIndex.bOddKeyEn = bIsOddKey;
2170*53ee8cc1Swenshuai.xi KeyIndex.u32KeyIndex = u32Index;
2171*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_Set_Key_Index, (void*)&KeyIndex) != UTOPIA_STATUS_SUCCESS)
2172*53ee8cc1Swenshuai.xi {
2173*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2174*53ee8cc1Swenshuai.xi }
2175*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2176*53ee8cc1Swenshuai.xi #else
2177*53ee8cc1Swenshuai.xi AESDMA_SetKeyIndex (u32Index, bIsOddKey);
2178*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2179*53ee8cc1Swenshuai.xi #endif
2180*53ee8cc1Swenshuai.xi }
2181*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetKeyIndex(MS_U32 u32Index,MS_BOOL bIsOddKey)2182*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetKeyIndex (MS_U32 u32Index, MS_BOOL bIsOddKey)
2183*53ee8cc1Swenshuai.xi {
2184*53ee8cc1Swenshuai.xi AESDMA_SetKeyIndex (u32Index, bIsOddKey);
2185*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2186*53ee8cc1Swenshuai.xi }
2187*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_EnableTwoKeys(MS_BOOL bEnable)2188*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_EnableTwoKeys(MS_BOOL bEnable)
2189*53ee8cc1Swenshuai.xi {
2190*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_Two_Keys(bEnable);
2191*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2192*53ee8cc1Swenshuai.xi }
2193*53ee8cc1Swenshuai.xi
MDrv_AESDMA_EnableTwoKeys(MS_BOOL bEnable)2194*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_EnableTwoKeys(MS_BOOL bEnable)
2195*53ee8cc1Swenshuai.xi {
2196*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2197*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_ENABLE_Two_Key, (void*)&bEnable) != UTOPIA_STATUS_SUCCESS)
2198*53ee8cc1Swenshuai.xi {
2199*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2200*53ee8cc1Swenshuai.xi }
2201*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2202*53ee8cc1Swenshuai.xi #else
2203*53ee8cc1Swenshuai.xi AESDMA_Parser_Enable_Two_Keys(bEnable);
2204*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2205*53ee8cc1Swenshuai.xi #endif
2206*53ee8cc1Swenshuai.xi }
2207*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetOddKey(MS_U32 * pInitVector)2208*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetOddKey(MS_U32 *pInitVector)
2209*53ee8cc1Swenshuai.xi {
2210*53ee8cc1Swenshuai.xi if (pInitVector != NULL)
2211*53ee8cc1Swenshuai.xi {
2212*53ee8cc1Swenshuai.xi AESDMA_Set_CipherOddKey(pInitVector);
2213*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2214*53ee8cc1Swenshuai.xi }
2215*53ee8cc1Swenshuai.xi else
2216*53ee8cc1Swenshuai.xi {
2217*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
2218*53ee8cc1Swenshuai.xi }
2219*53ee8cc1Swenshuai.xi }
2220*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetOddKey(MS_U32 * pInitVector)2221*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetOddKey(MS_U32 *pInitVector)
2222*53ee8cc1Swenshuai.xi {
2223*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2224*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_SetOddKey,(void*)pInitVector) != UTOPIA_STATUS_SUCCESS)
2225*53ee8cc1Swenshuai.xi {
2226*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2227*53ee8cc1Swenshuai.xi }
2228*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2229*53ee8cc1Swenshuai.xi #else
2230*53ee8cc1Swenshuai.xi if (pInitVector != NULL)
2231*53ee8cc1Swenshuai.xi {
2232*53ee8cc1Swenshuai.xi AESDMA_Set_CipherOddKey(pInitVector);
2233*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2234*53ee8cc1Swenshuai.xi }
2235*53ee8cc1Swenshuai.xi else
2236*53ee8cc1Swenshuai.xi {
2237*53ee8cc1Swenshuai.xi return DRVAESDMA_INVALID_PARAM;
2238*53ee8cc1Swenshuai.xi }
2239*53ee8cc1Swenshuai.xi #endif
2240*53ee8cc1Swenshuai.xi }
2241*53ee8cc1Swenshuai.xi
MDrv_AESDMA_ParserStart(MS_BOOL bStart)2242*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_ParserStart(MS_BOOL bStart)
2243*53ee8cc1Swenshuai.xi {
2244*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2245*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
2246*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2247*53ee8cc1Swenshuai.xi
2248*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma,MDrv_CMD_AESDMA_PARSER_Start,(void*)&bStart) != UTOPIA_STATUS_SUCCESS)
2249*53ee8cc1Swenshuai.xi {
2250*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2251*53ee8cc1Swenshuai.xi }
2252*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2253*53ee8cc1Swenshuai.xi #else
2254*53ee8cc1Swenshuai.xi return _MDrv_AESDMA_ParserStart(bStart);
2255*53ee8cc1Swenshuai.xi #endif
2256*53ee8cc1Swenshuai.xi }
2257*53ee8cc1Swenshuai.xi
MDrv_HDMI_GetM0(MS_U32 u32InputPortType,MS_U8 * pu8Data)2258*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_HDMI_GetM0(MS_U32 u32InputPortType, MS_U8 *pu8Data)
2259*53ee8cc1Swenshuai.xi {
2260*53ee8cc1Swenshuai.xi if (pu8Data == NULL)
2261*53ee8cc1Swenshuai.xi {
2262*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2263*53ee8cc1Swenshuai.xi }
2264*53ee8cc1Swenshuai.xi else
2265*53ee8cc1Swenshuai.xi {
2266*53ee8cc1Swenshuai.xi HAL_AESDMA_HDMI_GetM0(u32InputPortType, pu8Data);
2267*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2268*53ee8cc1Swenshuai.xi }
2269*53ee8cc1Swenshuai.xi }
2270*53ee8cc1Swenshuai.xi
MDrv_Set_Kslot(MS_U32 u32InputPortType,MS_U8 * pu8Data)2271*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_Set_Kslot(MS_U32 u32InputPortType, MS_U8 *pu8Data)
2272*53ee8cc1Swenshuai.xi {
2273*53ee8cc1Swenshuai.xi if (pu8Data == NULL)
2274*53ee8cc1Swenshuai.xi {
2275*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2276*53ee8cc1Swenshuai.xi }
2277*53ee8cc1Swenshuai.xi else
2278*53ee8cc1Swenshuai.xi {
2279*53ee8cc1Swenshuai.xi HAL_AESDMA_HDMI_GetM0(u32InputPortType, pu8Data);
2280*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2281*53ee8cc1Swenshuai.xi }
2282*53ee8cc1Swenshuai.xi }
2283*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetAesCtr64(MS_BOOL bCtr64En)2284*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetAesCtr64 (MS_BOOL bCtr64En)
2285*53ee8cc1Swenshuai.xi {
2286*53ee8cc1Swenshuai.xi AESDMA_SET_CTR64(bCtr64En);
2287*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2288*53ee8cc1Swenshuai.xi }
2289*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetAesCtr64(MS_BOOL bCtr64En)2290*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetAesCtr64 (MS_BOOL bCtr64En)
2291*53ee8cc1Swenshuai.xi {
2292*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2293*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
2294*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2295*53ee8cc1Swenshuai.xi
2296*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_Set_AES_CTR64_En, (void*)&bCtr64En) != UTOPIA_STATUS_SUCCESS)
2297*53ee8cc1Swenshuai.xi {
2298*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2299*53ee8cc1Swenshuai.xi }
2300*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2301*53ee8cc1Swenshuai.xi #else
2302*53ee8cc1Swenshuai.xi AESDMA_SET_CTR64(bCtr64En);
2303*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2304*53ee8cc1Swenshuai.xi #endif
2305*53ee8cc1Swenshuai.xi }
2306*53ee8cc1Swenshuai.xi
_MDrv_AESDMA_SetSecuredKeyIndex(MS_U8 u8KeyIdx)2307*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT _MDrv_AESDMA_SetSecuredKeyIndex (MS_U8 u8KeyIdx)
2308*53ee8cc1Swenshuai.xi {
2309*53ee8cc1Swenshuai.xi AESDMA_SetSecureKeyIdx (u8KeyIdx);
2310*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2311*53ee8cc1Swenshuai.xi }
2312*53ee8cc1Swenshuai.xi
MDrv_AESDMA_SetSecuredKeyIndex(MS_U8 u8KeyIdx)2313*53ee8cc1Swenshuai.xi DRVAESDMA_RESULT MDrv_AESDMA_SetSecuredKeyIndex (MS_U8 u8KeyIdx)
2314*53ee8cc1Swenshuai.xi {
2315*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2316*53ee8cc1Swenshuai.xi if (NULL == pInstantAesdma)
2317*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2318*53ee8cc1Swenshuai.xi
2319*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_Set_Efuse_Key_Index, (void*)&u8KeyIdx) != UTOPIA_STATUS_SUCCESS)
2320*53ee8cc1Swenshuai.xi {
2321*53ee8cc1Swenshuai.xi return DRVAESDMA_FAIL;
2322*53ee8cc1Swenshuai.xi }
2323*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2324*53ee8cc1Swenshuai.xi #else
2325*53ee8cc1Swenshuai.xi AESDMA_SetSecureKeyIdx (u8KeyIdx);
2326*53ee8cc1Swenshuai.xi return DRVAESDMA_OK;
2327*53ee8cc1Swenshuai.xi #endif
2328*53ee8cc1Swenshuai.xi }
2329*53ee8cc1Swenshuai.xi
MDrv_AESDMA_GetConfig(PAESDMA_INIT sAesdmaInit)2330*53ee8cc1Swenshuai.xi MS_BOOL MDrv_AESDMA_GetConfig(PAESDMA_INIT sAesdmaInit)
2331*53ee8cc1Swenshuai.xi {
2332*53ee8cc1Swenshuai.xi MS_U32 u32Ret = UTOPIA_STATUS_SUCCESS;
2333*53ee8cc1Swenshuai.xi #if (AESDMA_UTOPIA20)
2334*53ee8cc1Swenshuai.xi if(NULL == pInstantAesdma)
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi if(UTOPIA_STATUS_FAIL == UtopiaOpen(MODULE_AESDMA, &pInstantAesdma, 0, NULL))
2337*53ee8cc1Swenshuai.xi {
2338*53ee8cc1Swenshuai.xi ULOGE("AESDMA", "%s, open MODULE_AESDMA failed\n", __FUNCTION__);
2339*53ee8cc1Swenshuai.xi return FALSE;
2340*53ee8cc1Swenshuai.xi }
2341*53ee8cc1Swenshuai.xi }
2342*53ee8cc1Swenshuai.xi u32Ret = UtopiaIoctl(pInstantAesdma, MDrv_CMD_AESDMA_GetConfig, (PAESDMA_INIT)sAesdmaInit);
2343*53ee8cc1Swenshuai.xi if(UTOPIA_STATUS_SUCCESS != u32Ret)
2344*53ee8cc1Swenshuai.xi {
2345*53ee8cc1Swenshuai.xi ULOGE("AESDMA", "[%s]ERROR : UtopiaIoctl return value 0x%x\n", __FUNCTION__, (unsigned int)u32Ret);
2346*53ee8cc1Swenshuai.xi return FALSE;
2347*53ee8cc1Swenshuai.xi }
2348*53ee8cc1Swenshuai.xi else
2349*53ee8cc1Swenshuai.xi {
2350*53ee8cc1Swenshuai.xi return TRUE;
2351*53ee8cc1Swenshuai.xi }
2352*53ee8cc1Swenshuai.xi #else
2353*53ee8cc1Swenshuai.xi return TRUE;
2354*53ee8cc1Swenshuai.xi #endif
2355*53ee8cc1Swenshuai.xi }
2356