xref: /utopia/UTPA2-700.0.x/modules/security/hal/curry/cipher/halCIPHER.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2*53ee8cc1Swenshuai.xi //
3*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2009 MStar Semiconductor, Inc.
4*53ee8cc1Swenshuai.xi // All rights reserved.
5*53ee8cc1Swenshuai.xi //
6*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
7*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
8*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
9*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
10*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
11*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
12*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
13*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
14*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
19*53ee8cc1Swenshuai.xi // file   halCIPHER.h
20*53ee8cc1Swenshuai.xi // @brief  CIPHER HAL
21*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
22*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
23*53ee8cc1Swenshuai.xi #ifndef __HAL_CIPHER_H__
24*53ee8cc1Swenshuai.xi #define __HAL_CIPHER_H__
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #include "regCIPHER.h"
27*53ee8cc1Swenshuai.xi #include "drvCIPHER.h"
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
30*53ee8cc1Swenshuai.xi //  Driver Compiler Option
31*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
34*53ee8cc1Swenshuai.xi //  CIPHER Software Define
35*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
36*53ee8cc1Swenshuai.xi #define HAL_CIPHER_RESETKEY_TIMEOUT_VALUE (1000UL)
37*53ee8cc1Swenshuai.xi 
38*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
39*53ee8cc1Swenshuai.xi //  CIPHER Hardware Abstraction Layer
40*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
41*53ee8cc1Swenshuai.xi 
42*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_KEYLEN_MAX    16UL
43*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_DIRDATA_MAX   16UL
44*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_OTPHASH_UNIT  16UL
45*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_OTPHASH_SIZE_MIN  32UL
46*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_THREAD_ID_MAX 0xFFFFUL
47*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_DMA_KEY_SLOT  4UL
48*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_OTP_SCK_NUM   4UL
49*53ee8cc1Swenshuai.xi #define HAL_CRYPTODMA_CAVID_MAX     0x1FUL
50*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
51*53ee8cc1Swenshuai.xi //  Macro of bit operations
52*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
53*53ee8cc1Swenshuai.xi #define HAS_FLAG(flag, bit)        ((flag) & (bit))
54*53ee8cc1Swenshuai.xi #define SET_FLAG(flag, bit)        ((flag)|= (bit))
55*53ee8cc1Swenshuai.xi #define RESET_FLAG(flag, bit)      ((flag)&= (~(bit)))
56*53ee8cc1Swenshuai.xi #define SET_FLAG1(flag, bit)       ((flag)|  (bit))
57*53ee8cc1Swenshuai.xi #define RESET_FLAG1(flag, bit)     ((flag)&  (~(bit)))
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
60*53ee8cc1Swenshuai.xi // QMEM base address
61*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
62*53ee8cc1Swenshuai.xi #define HAL_CIPHER_BASE_IQMEM            0x00000000UL
63*53ee8cc1Swenshuai.xi #define HAL_CIPHER_BASE_DQMEM            0x80000000UL
64*53ee8cc1Swenshuai.xi #define HAL_CIPHER_BASE_LUT              0x00000010
65*53ee8cc1Swenshuai.xi #define HAL_CIPHER_SIZE_LUT              256
66*53ee8cc1Swenshuai.xi #define HAL_CIPHER_BASE_M                0x00000110
67*53ee8cc1Swenshuai.xi #define HAL_CIPHER_SIZE_M                128
68*53ee8cc1Swenshuai.xi #define HAL_CIPHER_BASE_BC               0x00000190
69*53ee8cc1Swenshuai.xi #define HAL_CIPHER_SIZE_BC               16
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
72*53ee8cc1Swenshuai.xi // IRQ
73*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
74*53ee8cc1Swenshuai.xi #define CRYPTODMA_IRQ       E_INT_FIQ_CA_CRYPTO_DMA  //halIRQTBL.h CryptoDMA FIQ 56
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
77*53ee8cc1Swenshuai.xi // Except
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi #define HAL_CIPHER_EXCEPT_CAVID     0x0001UL
80*53ee8cc1Swenshuai.xi #define HAL_CIPHER_EXCEPT_DATA      0x0002UL
81*53ee8cc1Swenshuai.xi #define HAL_CIPHER_EXCEPT_ALGO      0x0004UL
82*53ee8cc1Swenshuai.xi #define HAL_CIPHER_EXCEPT_DMA_KEY   0x0008UL
83*53ee8cc1Swenshuai.xi #define HAL_CIPHER_EXCEPT_HMAC_KEY  0x0010UL
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
86*53ee8cc1Swenshuai.xi // AESDMA Compatible
87*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////
88*53ee8cc1Swenshuai.xi #define HAL_CIPHER_KEYSLOT_BASE     0x10UL
89*53ee8cc1Swenshuai.xi 
90*53ee8cc1Swenshuai.xi typedef enum
91*53ee8cc1Swenshuai.xi {
92*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID1 = 0x0001,
93*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID2 = 0x0002,
94*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID3 = 0x0003,
95*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID4 = 0x0004,
96*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID5 = 0x0005,
97*53ee8cc1Swenshuai.xi     E_CIPHER_CAVID6 = 0x0006,
98*53ee8cc1Swenshuai.xi }HAL_CIPHER_CAVID;
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi /// SHA Mode
101*53ee8cc1Swenshuai.xi typedef enum
102*53ee8cc1Swenshuai.xi {
103*53ee8cc1Swenshuai.xi     E_HASH_SHA1 = 0,
104*53ee8cc1Swenshuai.xi     E_HASH_SHA256,
105*53ee8cc1Swenshuai.xi     E_HASH_MD5,
106*53ee8cc1Swenshuai.xi }HAL_CIPHER_HASHMODE;
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi typedef enum
109*53ee8cc1Swenshuai.xi {
110*53ee8cc1Swenshuai.xi     E_DMA_ALGO_NONE = 0,
111*53ee8cc1Swenshuai.xi     E_DMA_ALGO_AES = 1,
112*53ee8cc1Swenshuai.xi     E_DMA_ALGO_DES = 2,
113*53ee8cc1Swenshuai.xi     E_DMA_ALGO_TDES = 3,
114*53ee8cc1Swenshuai.xi     E_DMA_ALGO_M6_S56_CCBC = 4 ,
115*53ee8cc1Swenshuai.xi     E_DMA_ALGO_M6_S56 =5 ,
116*53ee8cc1Swenshuai.xi     E_DMA_ALGO_M6_KE56 = 7 ,
117*53ee8cc1Swenshuai.xi     E_DMA_ALGO_RC4 = 8,
118*53ee8cc1Swenshuai.xi     E_DMA_ALGO_RC4_128 = 9,
119*53ee8cc1Swenshuai.xi }HAL_CIPHER_ALGO;
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi typedef enum
122*53ee8cc1Swenshuai.xi {
123*53ee8cc1Swenshuai.xi     E_DMA_MODE_NONE = 0,
124*53ee8cc1Swenshuai.xi     E_DMA_MODE_ECB = 0,
125*53ee8cc1Swenshuai.xi     E_DMA_MODE_CBC,
126*53ee8cc1Swenshuai.xi     E_DMA_MODE_CTR,
127*53ee8cc1Swenshuai.xi     E_DMA_MODE_CBC_MAC,
128*53ee8cc1Swenshuai.xi     E_DMA_MODE_CTR_64,
129*53ee8cc1Swenshuai.xi 	E_DMA_MODE_CMAC_Key,
130*53ee8cc1Swenshuai.xi     E_DMA_MODE_CMAC_Algo,
131*53ee8cc1Swenshuai.xi     E_DMA_MODE_PCBC_ADD,
132*53ee8cc1Swenshuai.xi     E_DMA_MODE_PCBC_XOR,
133*53ee8cc1Swenshuai.xi     E_DMA_MODE_OTPHASH,
134*53ee8cc1Swenshuai.xi     E_DMA_MODE_NUM,
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi }HAL_CIPHER_MODE;
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi typedef enum
139*53ee8cc1Swenshuai.xi {
140*53ee8cc1Swenshuai.xi     // From KL
141*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK0       = 0 ,
142*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK1       = 1 ,
143*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK2       = 2 ,
144*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK3       = 3 ,
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi     // From OTP
147*53ee8cc1Swenshuai.xi     E_DMA_KSEL_MK0       = 4 ,
148*53ee8cc1Swenshuai.xi     E_DMA_KSEL_MK1       = 5 ,
149*53ee8cc1Swenshuai.xi     E_DMA_KSEL_CCCK      = 6 ,
150*53ee8cc1Swenshuai.xi     E_DMA_KSEL_STRN      = 7 ,
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi     // From CPU
153*53ee8cc1Swenshuai.xi     E_DMA_KSEL_REGKEY,
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi 	//From NSK
156*53ee8cc1Swenshuai.xi     E_DMA_KSEL_CAIP,
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi }HAL_CIPHER_KEYSRC;
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi typedef enum
161*53ee8cc1Swenshuai.xi {
162*53ee8cc1Swenshuai.xi     E_DMA_SRC_DIRECT   = 0 ,
163*53ee8cc1Swenshuai.xi     E_DMA_SRC_DRAM     = 1 ,
164*53ee8cc1Swenshuai.xi     E_DMA_SRC_IQMEM    = 2 ,
165*53ee8cc1Swenshuai.xi     E_DMA_SRC_DQMEM    = 2 ,
166*53ee8cc1Swenshuai.xi     E_DMA_SRC_HW_INPUT = 3
167*53ee8cc1Swenshuai.xi }HAL_CIPHER_DATASRC;
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi typedef enum
170*53ee8cc1Swenshuai.xi {
171*53ee8cc1Swenshuai.xi     E_DMA_DST_DRAM     = 0 ,
172*53ee8cc1Swenshuai.xi     E_DMA_DST_REGFILE  = 1 ,
173*53ee8cc1Swenshuai.xi     E_DMA_DST_IQMEM    = 1 ,
174*53ee8cc1Swenshuai.xi     E_DMA_DST_DQMEM    = 1 ,
175*53ee8cc1Swenshuai.xi }HAL_CIPHER_DATADST;
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi typedef enum
178*53ee8cc1Swenshuai.xi {
179*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_NONE   = 0 ,
180*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_CLR    = 0 ,
181*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_CTS    = 1 ,
182*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_SCTE52 = 2 ,
183*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_NUM ,
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi }HAL_CIPHER_RESIDUE;
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi typedef enum
188*53ee8cc1Swenshuai.xi {
189*53ee8cc1Swenshuai.xi     E_DMA_SB_NONE   = 0 ,
190*53ee8cc1Swenshuai.xi     E_DMA_SB_CLR    = 0 ,
191*53ee8cc1Swenshuai.xi     E_DMA_SB_IV1   ,
192*53ee8cc1Swenshuai.xi     E_DMA_SB_IV2  ,
193*53ee8cc1Swenshuai.xi     E_DMA_SB_NUM  ,
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi }HAL_CIPHER_SHORTBLOCK;
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi typedef enum
198*53ee8cc1Swenshuai.xi {
199*53ee8cc1Swenshuai.xi     E_DMA_INT_NONE    = 0 ,
200*53ee8cc1Swenshuai.xi     E_DMA_INT_ENABLE  = 1 ,
201*53ee8cc1Swenshuai.xi     E_DMA_INT_EN_WAIT = 2 ,
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi }HAL_CIPHER_INTMODE;
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi typedef enum
206*53ee8cc1Swenshuai.xi {
207*53ee8cc1Swenshuai.xi     E_CIPHER_HASH_IWC_PRV = 0,
208*53ee8cc1Swenshuai.xi     E_CIPHER_HASH_IWC_MANUAL,
209*53ee8cc1Swenshuai.xi }HAL_CIPHER_IWCTYPE;
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi typedef enum
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_DMA    = 0 ,
214*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_SHA        ,
215*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_OTPHASH    ,
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi }HAL_CIPHER_CMDTYPE;
218*53ee8cc1Swenshuai.xi 
219*53ee8cc1Swenshuai.xi typedef enum
220*53ee8cc1Swenshuai.xi {
221*53ee8cc1Swenshuai.xi     E_PARSER_HDCPMODE_NONE = 0,
222*53ee8cc1Swenshuai.xi     E_PARSER_HDCPMODE_HDCP20,
223*53ee8cc1Swenshuai.xi 
224*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_HDCPMODE;
225*53ee8cc1Swenshuai.xi 
226*53ee8cc1Swenshuai.xi typedef enum
227*53ee8cc1Swenshuai.xi {
228*53ee8cc1Swenshuai.xi     E_PARSER_TSMODE_PES = 0,
229*53ee8cc1Swenshuai.xi     E_PARSER_TSMODE_TS,
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_TSMODE;
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi typedef enum
234*53ee8cc1Swenshuai.xi {
235*53ee8cc1Swenshuai.xi     E_PARSER_PKTMODE_188 = 0,
236*53ee8cc1Swenshuai.xi     E_PARSER_PKTMODE_192,
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_PKTMODE;
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi typedef enum
241*53ee8cc1Swenshuai.xi {
242*53ee8cc1Swenshuai.xi     E_PARSER_AUTOMODE_NONE = 0,
243*53ee8cc1Swenshuai.xi     E_PARSER_AUTOMODE_EN,
244*53ee8cc1Swenshuai.xi 
245*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_AUTOMODE;
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi typedef enum
248*53ee8cc1Swenshuai.xi {
249*53ee8cc1Swenshuai.xi     E_PARSER_ITMODE_NONE = 0,
250*53ee8cc1Swenshuai.xi     E_PARSER_ITMODE_EN,
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_ITMODE;  //Init trust
253*53ee8cc1Swenshuai.xi 
254*53ee8cc1Swenshuai.xi typedef enum
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi     E_PARSER_CLEARMODE_NONE = 0,
257*53ee8cc1Swenshuai.xi     E_PARSER_CLEARMODE_EN,
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_CLEARMODE;
260*53ee8cc1Swenshuai.xi 
261*53ee8cc1Swenshuai.xi //Tmp area, open to drv level latter
262*53ee8cc1Swenshuai.xi typedef struct
263*53ee8cc1Swenshuai.xi {
264*53ee8cc1Swenshuai.xi 	MS_U32 u32ObfIdxR;
265*53ee8cc1Swenshuai.xi 	MS_U32 u32ObfIdxW;
266*53ee8cc1Swenshuai.xi }DRV_CIPHER_OBF;
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi typedef enum
269*53ee8cc1Swenshuai.xi {
270*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT192 = 0,
271*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT192_CLEAR,
272*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT188,
273*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT188_CLEAR,
274*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT192,
275*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT192_CLEAR,
276*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT188,
277*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT188_CLEAR,
278*53ee8cc1Swenshuai.xi } CIPHER_PARSER_MODE;
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi typedef struct
281*53ee8cc1Swenshuai.xi {
282*53ee8cc1Swenshuai.xi     MS_U8           *pu8PID0;
283*53ee8cc1Swenshuai.xi     MS_U8           *pu8PID1;
284*53ee8cc1Swenshuai.xi }CIPHER_PARSER_PID;
285*53ee8cc1Swenshuai.xi 
286*53ee8cc1Swenshuai.xi typedef enum
287*53ee8cc1Swenshuai.xi {
288*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_NONE = 0,
289*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_10,
290*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_11,
291*53ee8cc1Swenshuai.xi } CIPHER_PARSER_SCB;
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi typedef struct
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi     CIPHER_PARSER_SCB  eSCB; //Transport Stream Scramble Pattern, decide 10 or 11 or 1x need to scrambled (TS layer)
296*53ee8cc1Swenshuai.xi     CIPHER_PARSER_SCB  eFSCB;
297*53ee8cc1Swenshuai.xi     MS_BOOL bTsScrbMask; //Transport Stream Mask
298*53ee8cc1Swenshuai.xi     MS_BOOL bRmvScrb; //Remove Scramble
299*53ee8cc1Swenshuai.xi     MS_BOOL bInScrb; //Insert Scramble
300*53ee8cc1Swenshuai.xi } CIPHER_PARSER_TSCFG;
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi typedef struct
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     DRV_CIPHER_ALGO stAlgo;
306*53ee8cc1Swenshuai.xi     DRV_CIPHER_KEY  stKey;
307*53ee8cc1Swenshuai.xi     DRV_CIPHER_DATA stInput;
308*53ee8cc1Swenshuai.xi     DRV_CIPHER_DATA stOutput;
309*53ee8cc1Swenshuai.xi     MS_BOOL         bDecrypt;
310*53ee8cc1Swenshuai.xi     CIPHER_PARSER_MODE  eParserMode;
311*53ee8cc1Swenshuai.xi     CIPHER_PARSER_TSCFG stTSCfg;
312*53ee8cc1Swenshuai.xi     CIPHER_PARSER_PID   stPID;
313*53ee8cc1Swenshuai.xi     DRV_CIPHER_KEY  stKey2;
314*53ee8cc1Swenshuai.xi     MS_U32 u32CAVid;
315*53ee8cc1Swenshuai.xi     MS_BOOL bClearHead;
316*53ee8cc1Swenshuai.xi     P_DrvCIPHER_EvtCallback pfCallback;
317*53ee8cc1Swenshuai.xi }CIPHER_PARSERCFG;
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////
320*53ee8cc1Swenshuai.xi // HAL API
321*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////
322*53ee8cc1Swenshuai.xi void HAL_CIPHER_SetBank(MS_VIRT u32BankAddr) ;
323*53ee8cc1Swenshuai.xi void HAL_CIPHER_ResetStatus(MS_BOOL RstDma , MS_BOOL RstSha);
324*53ee8cc1Swenshuai.xi void HAL_CIPHER_ResetException(void);
325*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_ResetKey(MS_U32 u32KeyIdx);
326*53ee8cc1Swenshuai.xi void HAL_CIPHER_SetDbgLevel(CIPHER_DBGMSG_LEVEL eDBGMsgLevel);
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi void HAL_CIPHER_SWReset(void);
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_InputSrcFrom(CIPHER_MEM_TYPE InputSrcFrom, MS_U8* pu8Data, MS_U32 u32Size);
331*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_OutputDstTo(CIPHER_MEM_TYPE OutputDstTo, MS_U8* pu8Data, MS_U32 u32Size);
332*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_OutputDstKL(MS_BOOL bDstKL);
333*53ee8cc1Swenshuai.xi 
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_FileinDesc(MS_PHY FileinAddr, MS_U32 u32FileinNum);
336*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_FileoutDesc(MS_PHY FileoutSAddr, MS_PHY phyFileoutEAddr);
337*53ee8cc1Swenshuai.xi void HAL_CIPHER_OTPHash_Set_FileinDesc(MS_PHY u32FileinAddr, MS_U32 u32FileinNum, MS_U32 u32CurrentRound, CIPHER_MEM_TYPE eInputSrcFrom);
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_Key(DRV_CIPHER_KEY stKey);
340*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_IV(MS_U8* pu8IV, MS_U32 u32Size);
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_Data(MS_U8* pu8Data, MS_U32 u32Size);
343*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_Config(MS_BOOL OutputReg);
344*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_ReportMode(MS_BOOL RptInDram, MS_PHY u32DramAddr);
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_DataSwap(MS_BOOL InDataSwap , MS_BOOL OutDataSwap,
347*53ee8cc1Swenshuai.xi                                 MS_BOOL DInByteSwap, MS_BOOL DOutByteSwap );
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_Algo(DRV_CIPHER_ALGO stAlgo);
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_OTPHash(MS_U32 u32CurrentRound, MS_U32 u32OTPHashRound);
352*53ee8cc1Swenshuai.xi 
353*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Start(MS_BOOL Decrypt , HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ, MS_U16 u16CmdID);
354*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_OTPHash_Start(HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ, MS_U16 u16CmdID);
355*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_CmdDone(MS_U32 u32CmdID, MS_U32 *u32Ret);
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_WriteCMDQ(MS_U32 u32Cmd);
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_CaVid(MS_U32 u32CAVid);
360*53ee8cc1Swenshuai.xi 
361*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_GetRpt(MS_U32 *DmaRpt);
362*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_GetData(MS_U8 *u8Data) ;
363*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_AlgoTable_Init(void);
364*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_CheckAlgo(HAL_CIPHER_ALGO eAlgo, HAL_CIPHER_MODE eMode, HAL_CIPHER_RESIDUE eRes, HAL_CIPHER_SHORTBLOCK eSB);
365*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_SetMsgLength( MS_U32 u32Size );
366*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_SetMsg(MS_PHY u32MsgPAddr, MS_U32 u32Size ,MS_U32 u32SrcSel );
367*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_SetHOS(MS_BOOL bHos);
368*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Start(HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ , MS_BOOL bRst, MS_U16 u16CmdID);
369*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_OuputAddr(MS_PHY u32OutputPAddr, MS_U32 u32DstSel);
370*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_InitWordCnt(HAL_CIPHER_IWCTYPE eIWCType, MS_U32 u32StartBytes);
371*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_IV(MS_U8* pu8IV, MS_U32 u32IVSize ,MS_U32 u32IVSel);
372*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_CaVid(MS_U32 u32CAVid);
373*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_Set_Config(CIPHER_HASH_ALGO algo , MS_BOOL bAutoPad , MS_BOOL bInv16);
374*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_GetRpt(MS_U32 *HashRpt, MS_U32 u32Size);
375*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_SetHMACKey(DRV_CIPHER_HMAC_KEY stHMACKey, CIPHER_HMAC_KPAD eKpad, MS_BOOL bClear);
376*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_CmdDone(MS_U32 u32CmdID, MS_U32 *u32Ret);
377*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_MsgSrcFrom(CIPHER_MEM_TYPE eMemType, MS_U32 *u32HashSrc);
378*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_OutputDstTo(CIPHER_MEM_TYPE eMemType, MS_U32 *u32HashDst);
379*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_Set_ReportMode(MS_BOOL RptInDram, MS_U32 u32DramAddr);
380*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_ExceptFilter(MS_U32 *pu32Exception, CIPHER_KEY_SRC eKeySrc, MS_U8 u8KeyIdx);
381*53ee8cc1Swenshuai.xi 
382*53ee8cc1Swenshuai.xi MS_U32 HAL_CIPHER_ReadException(MS_U32 u32ExcTmp);
383*53ee8cc1Swenshuai.xi void HAL_CIPHER_GetException(MS_U32 *pu32ExcFlag);
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi void HAL_CIPHER_IntEnable(void);
386*53ee8cc1Swenshuai.xi void HAL_CIPHER_IntClear(void);
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi //=============PARSER=================================
389*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_Mode(CIPHER_PARSER_MODE eMode);
390*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_PID(CIPHER_PARSER_PID stPID);
391*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_SCB(CIPHER_PARSER_SCB eSCB);
392*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_ForceSCB(MS_BOOL bInsert, CIPHER_PARSER_SCB eSCB);
393*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_PARSER_Set_IV2(MS_U8 *pu8IV2, MS_U8 u8IVLen);
394*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_PARSER_Set_Key2(DRV_CIPHER_KEY stKey);
395*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_MaskSCB(MS_BOOL bEnable);
396*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Rmv_SCB(MS_BOOL bRemove);
397*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_BypassPid(MS_BOOL bEnable);
398*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_ClearStartMode(MS_BOOL bEnable);
399*53ee8cc1Swenshuai.xi //MISC Function
400*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Misc_Random(MS_U8 *pu8Buf, MS_U32 u32Size);
401*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Set_OBFIdx(MS_BOOL bDMA, MS_U8 u8ReadIdx, MS_U8 u8WriteIdx);
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi #endif // #ifndef __HAL_CIPHER_H__
404*53ee8cc1Swenshuai.xi 
405