xref: /utopia/UTPA2-700.0.x/modules/security/hal/kano/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 }HAL_CIPHER_ALGO;
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi typedef enum
121*53ee8cc1Swenshuai.xi {
122*53ee8cc1Swenshuai.xi     E_DMA_MODE_NONE = 0,
123*53ee8cc1Swenshuai.xi     E_DMA_MODE_ECB = 0,
124*53ee8cc1Swenshuai.xi     E_DMA_MODE_CBC,
125*53ee8cc1Swenshuai.xi     E_DMA_MODE_CTR,
126*53ee8cc1Swenshuai.xi     E_DMA_MODE_CBC_MAC,
127*53ee8cc1Swenshuai.xi     E_DMA_MODE_CTR_64,
128*53ee8cc1Swenshuai.xi 	E_DMA_MODE_CMAC_Key,
129*53ee8cc1Swenshuai.xi     E_DMA_MODE_CMAC_Algo,
130*53ee8cc1Swenshuai.xi     E_DMA_MODE_PCBC_ADD,
131*53ee8cc1Swenshuai.xi     E_DMA_MODE_PCBC_XOR,
132*53ee8cc1Swenshuai.xi     E_DMA_MODE_OTPHASH,
133*53ee8cc1Swenshuai.xi     E_DMA_MODE_NUM,
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi }HAL_CIPHER_MODE;
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi typedef enum
138*53ee8cc1Swenshuai.xi {
139*53ee8cc1Swenshuai.xi     // From KL
140*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK0       = 0 ,
141*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK1       = 1 ,
142*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK2       = 2 ,
143*53ee8cc1Swenshuai.xi     E_DMA_KSEL_SK3       = 3 ,
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi     // From OTP
146*53ee8cc1Swenshuai.xi     E_DMA_KSEL_MK0       = 4 ,
147*53ee8cc1Swenshuai.xi     E_DMA_KSEL_MK1       = 5 ,
148*53ee8cc1Swenshuai.xi     E_DMA_KSEL_CCCK      = 6 ,
149*53ee8cc1Swenshuai.xi     E_DMA_KSEL_STRN      = 7 ,
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi     // From CPU
152*53ee8cc1Swenshuai.xi     E_DMA_KSEL_REGKEY,
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi 	//From NSK
155*53ee8cc1Swenshuai.xi     E_DMA_KSEL_CAIP,
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi }HAL_CIPHER_KEYSRC;
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi typedef enum
160*53ee8cc1Swenshuai.xi {
161*53ee8cc1Swenshuai.xi     E_DMA_SRC_DIRECT   = 0 ,
162*53ee8cc1Swenshuai.xi     E_DMA_SRC_DRAM     = 1 ,
163*53ee8cc1Swenshuai.xi     E_DMA_SRC_IQMEM    = 2 ,
164*53ee8cc1Swenshuai.xi     E_DMA_SRC_DQMEM    = 2 ,
165*53ee8cc1Swenshuai.xi     E_DMA_SRC_HW_INPUT = 3
166*53ee8cc1Swenshuai.xi }HAL_CIPHER_DATASRC;
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi typedef enum
169*53ee8cc1Swenshuai.xi {
170*53ee8cc1Swenshuai.xi     E_DMA_DST_DRAM     = 0 ,
171*53ee8cc1Swenshuai.xi     E_DMA_DST_REGFILE  = 1 ,
172*53ee8cc1Swenshuai.xi     E_DMA_DST_IQMEM    = 1 ,
173*53ee8cc1Swenshuai.xi     E_DMA_DST_DQMEM    = 1 ,
174*53ee8cc1Swenshuai.xi }HAL_CIPHER_DATADST;
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi typedef enum
177*53ee8cc1Swenshuai.xi {
178*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_NONE   = 0 ,
179*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_CLR    = 0 ,
180*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_CTS    = 1 ,
181*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_SCTE52 = 2 ,
182*53ee8cc1Swenshuai.xi     E_DMA_RESIDUE_NUM ,
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi }HAL_CIPHER_RESIDUE;
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi typedef enum
187*53ee8cc1Swenshuai.xi {
188*53ee8cc1Swenshuai.xi     E_DMA_SB_NONE   = 0 ,
189*53ee8cc1Swenshuai.xi     E_DMA_SB_CLR    = 0 ,
190*53ee8cc1Swenshuai.xi     E_DMA_SB_IV1   ,
191*53ee8cc1Swenshuai.xi     E_DMA_SB_IV2  ,
192*53ee8cc1Swenshuai.xi     E_DMA_SB_NUM  ,
193*53ee8cc1Swenshuai.xi 
194*53ee8cc1Swenshuai.xi }HAL_CIPHER_SHORTBLOCK;
195*53ee8cc1Swenshuai.xi 
196*53ee8cc1Swenshuai.xi typedef enum
197*53ee8cc1Swenshuai.xi {
198*53ee8cc1Swenshuai.xi     E_DMA_INT_NONE    = 0 ,
199*53ee8cc1Swenshuai.xi     E_DMA_INT_ENABLE  = 1 ,
200*53ee8cc1Swenshuai.xi     E_DMA_INT_EN_WAIT = 2 ,
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi }HAL_CIPHER_INTMODE;
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi typedef enum
205*53ee8cc1Swenshuai.xi {
206*53ee8cc1Swenshuai.xi     E_CIPHER_HASH_IWC_PRV = 0,
207*53ee8cc1Swenshuai.xi     E_CIPHER_HASH_IWC_MANUAL,
208*53ee8cc1Swenshuai.xi }HAL_CIPHER_IWCTYPE;
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi typedef enum
211*53ee8cc1Swenshuai.xi {
212*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_DMA    = 0 ,
213*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_SHA        ,
214*53ee8cc1Swenshuai.xi     E_CIPHER_TYPE_OTPHASH    ,
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi }HAL_CIPHER_CMDTYPE;
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi typedef enum
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi     E_PARSER_HDCPMODE_NONE = 0,
221*53ee8cc1Swenshuai.xi     E_PARSER_HDCPMODE_HDCP20,
222*53ee8cc1Swenshuai.xi 
223*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_HDCPMODE;
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi typedef enum
226*53ee8cc1Swenshuai.xi {
227*53ee8cc1Swenshuai.xi     E_PARSER_TSMODE_PES = 0,
228*53ee8cc1Swenshuai.xi     E_PARSER_TSMODE_TS,
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_TSMODE;
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi typedef enum
233*53ee8cc1Swenshuai.xi {
234*53ee8cc1Swenshuai.xi     E_PARSER_PKTMODE_188 = 0,
235*53ee8cc1Swenshuai.xi     E_PARSER_PKTMODE_192,
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_PKTMODE;
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi typedef enum
240*53ee8cc1Swenshuai.xi {
241*53ee8cc1Swenshuai.xi     E_PARSER_AUTOMODE_NONE = 0,
242*53ee8cc1Swenshuai.xi     E_PARSER_AUTOMODE_EN,
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_AUTOMODE;
245*53ee8cc1Swenshuai.xi 
246*53ee8cc1Swenshuai.xi typedef enum
247*53ee8cc1Swenshuai.xi {
248*53ee8cc1Swenshuai.xi     E_PARSER_ITMODE_NONE = 0,
249*53ee8cc1Swenshuai.xi     E_PARSER_ITMODE_EN,
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_ITMODE;  //Init trust
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi typedef enum
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi     E_PARSER_CLEARMODE_NONE = 0,
256*53ee8cc1Swenshuai.xi     E_PARSER_CLEARMODE_EN,
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi }HAL_CIPHER_PARSER_CLEARMODE;
259*53ee8cc1Swenshuai.xi 
260*53ee8cc1Swenshuai.xi //Tmp area, open to drv level latter
261*53ee8cc1Swenshuai.xi typedef struct
262*53ee8cc1Swenshuai.xi {
263*53ee8cc1Swenshuai.xi 	MS_U32 u32ObfIdxR;
264*53ee8cc1Swenshuai.xi 	MS_U32 u32ObfIdxW;
265*53ee8cc1Swenshuai.xi }DRV_CIPHER_OBF;
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi typedef enum
268*53ee8cc1Swenshuai.xi {
269*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT192 = 0,
270*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT192_CLEAR,
271*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT188,
272*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_TS_PKT188_CLEAR,
273*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT192,
274*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT192_CLEAR,
275*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT188,
276*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_HDCP20_PKT188_CLEAR,
277*53ee8cc1Swenshuai.xi } CIPHER_PARSER_MODE;
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi typedef struct
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi     MS_U8           *pu8PID0;
282*53ee8cc1Swenshuai.xi     MS_U8           *pu8PID1;
283*53ee8cc1Swenshuai.xi }CIPHER_PARSER_PID;
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi typedef enum
286*53ee8cc1Swenshuai.xi {
287*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_NONE = 0,
288*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_10,
289*53ee8cc1Swenshuai.xi     E_CIPHER_PARSER_SCB_11,
290*53ee8cc1Swenshuai.xi } CIPHER_PARSER_SCB;
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi typedef struct
293*53ee8cc1Swenshuai.xi {
294*53ee8cc1Swenshuai.xi     CIPHER_PARSER_SCB  eSCB; //Transport Stream Scramble Pattern, decide 10 or 11 or 1x need to scrambled (TS layer)
295*53ee8cc1Swenshuai.xi     CIPHER_PARSER_SCB  eFSCB;
296*53ee8cc1Swenshuai.xi     MS_BOOL bTsScrbMask; //Transport Stream Mask
297*53ee8cc1Swenshuai.xi     MS_BOOL bRmvScrb; //Remove Scramble
298*53ee8cc1Swenshuai.xi     MS_BOOL bInScrb; //Insert Scramble
299*53ee8cc1Swenshuai.xi } CIPHER_PARSER_TSCFG;
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi typedef struct
303*53ee8cc1Swenshuai.xi {
304*53ee8cc1Swenshuai.xi     DRV_CIPHER_ALGO stAlgo;
305*53ee8cc1Swenshuai.xi     DRV_CIPHER_KEY  stKey;
306*53ee8cc1Swenshuai.xi     DRV_CIPHER_DATA stInput;
307*53ee8cc1Swenshuai.xi     DRV_CIPHER_DATA stOutput;
308*53ee8cc1Swenshuai.xi     MS_BOOL         bDecrypt;
309*53ee8cc1Swenshuai.xi     CIPHER_PARSER_MODE  eParserMode;
310*53ee8cc1Swenshuai.xi     CIPHER_PARSER_TSCFG stTSCfg;
311*53ee8cc1Swenshuai.xi     CIPHER_PARSER_PID   stPID;
312*53ee8cc1Swenshuai.xi     DRV_CIPHER_KEY  stKey2;
313*53ee8cc1Swenshuai.xi     MS_U32 u32CAVid;
314*53ee8cc1Swenshuai.xi     MS_BOOL bClearHead;
315*53ee8cc1Swenshuai.xi     P_DrvCIPHER_EvtCallback pfCallback;
316*53ee8cc1Swenshuai.xi }CIPHER_PARSERCFG;
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////
319*53ee8cc1Swenshuai.xi // HAL API
320*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////
321*53ee8cc1Swenshuai.xi void HAL_CIPHER_SetBank(MS_VIRT u32BankAddr) ;
322*53ee8cc1Swenshuai.xi void HAL_CIPHER_ResetStatus(MS_BOOL RstDma , MS_BOOL RstSha);
323*53ee8cc1Swenshuai.xi void HAL_CIPHER_ResetException(void);
324*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_ResetKey(MS_U32 u32KeyIdx);
325*53ee8cc1Swenshuai.xi void HAL_CIPHER_SetDbgLevel(CIPHER_DBGMSG_LEVEL eDBGMsgLevel);
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi void HAL_CIPHER_SWReset(void);
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_InputSrcFrom(CIPHER_MEM_TYPE InputSrcFrom, MS_U8* pu8Data, MS_U32 u32Size);
330*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_OutputDstTo(CIPHER_MEM_TYPE OutputDstTo, MS_U8* pu8Data, MS_U32 u32Size);
331*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_OutputDstKL(MS_BOOL bDstKL);
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi 
334*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_FileinDesc(MS_PHY FileinAddr, MS_U32 u32FileinNum);
335*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_FileoutDesc(MS_PHY FileoutSAddr, MS_PHY phyFileoutEAddr);
336*53ee8cc1Swenshuai.xi void HAL_CIPHER_OTPHash_Set_FileinDesc(MS_PHY u32FileinAddr, MS_U32 u32FileinNum, MS_U32 u32CurrentRound, CIPHER_MEM_TYPE eInputSrcFrom);
337*53ee8cc1Swenshuai.xi 
338*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_Key(DRV_CIPHER_KEY stKey);
339*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_IV(MS_U8* pu8IV, MS_U32 u32Size);
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_Data(MS_U8* pu8Data, MS_U32 u32Size);
342*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_Config(MS_BOOL OutputReg);
343*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_ReportMode(MS_BOOL RptInDram, MS_PHY u32DramAddr);
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_DataSwap(MS_BOOL InDataSwap , MS_BOOL OutDataSwap,
346*53ee8cc1Swenshuai.xi                                 MS_BOOL DInByteSwap, MS_BOOL DOutByteSwap );
347*53ee8cc1Swenshuai.xi 
348*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_Algo(DRV_CIPHER_ALGO stAlgo);
349*53ee8cc1Swenshuai.xi 
350*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_Set_OTPHash(MS_U32 u32CurrentRound, MS_U32 u32OTPHashRound);
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Start(MS_BOOL Decrypt , HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ, MS_U16 u16CmdID);
353*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_OTPHash_Start(HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ, MS_U16 u16CmdID);
354*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_CmdDone(MS_U32 u32CmdID, MS_U32 *u32Ret);
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_WriteCMDQ(MS_U32 u32Cmd);
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_Set_CaVid(MS_U32 u32CAVid);
359*53ee8cc1Swenshuai.xi 
360*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_GetRpt(MS_U32 *DmaRpt);
361*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_GetData(MS_U8 *u8Data) ;
362*53ee8cc1Swenshuai.xi void HAL_CIPHER_DMA_AlgoTable_Init(void);
363*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_DMA_CheckAlgo(HAL_CIPHER_ALGO eAlgo, HAL_CIPHER_MODE eMode, HAL_CIPHER_RESIDUE eRes, HAL_CIPHER_SHORTBLOCK eSB);
364*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_SetMsgLength( MS_U32 u32Size );
365*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_SetMsg(MS_PHY u32MsgPAddr, MS_U32 u32Size ,MS_U32 u32SrcSel );
366*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_SetHOS(MS_BOOL bHos);
367*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Start(HAL_CIPHER_INTMODE IntMode , MS_BOOL bWaitCmdQ , MS_BOOL bRst, MS_U16 u16CmdID);
368*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_OuputAddr(MS_PHY u32OutputPAddr, MS_U32 u32DstSel);
369*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_InitWordCnt(HAL_CIPHER_IWCTYPE eIWCType, MS_U32 u32StartBytes);
370*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_IV(MS_U8* pu8IV, MS_U32 u32IVSize ,MS_U32 u32IVSel);
371*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_CaVid(MS_U32 u32CAVid);
372*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_Set_Config(CIPHER_HASH_ALGO algo , MS_BOOL bAutoPad , MS_BOOL bInv16);
373*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_GetRpt(MS_U32 *HashRpt, MS_U32 u32Size);
374*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_SetHMACKey(DRV_CIPHER_HMAC_KEY stHMACKey, CIPHER_HMAC_KPAD eKpad, MS_BOOL bClear);
375*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_CmdDone(MS_U32 u32CmdID, MS_U32 *u32Ret);
376*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_MsgSrcFrom(CIPHER_MEM_TYPE eMemType, MS_U32 *u32HashSrc);
377*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Hash_Set_OutputDstTo(CIPHER_MEM_TYPE eMemType, MS_U32 *u32HashDst);
378*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_Set_ReportMode(MS_BOOL RptInDram, MS_U32 u32DramAddr);
379*53ee8cc1Swenshuai.xi void HAL_CIPHER_Hash_ExceptFilter(MS_U32 *pu32Exception, CIPHER_KEY_SRC eKeySrc, MS_U8 u8KeyIdx);
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi MS_U32 HAL_CIPHER_ReadException(MS_U32 u32ExcTmp);
382*53ee8cc1Swenshuai.xi void HAL_CIPHER_GetException(MS_U32 *pu32ExcFlag);
383*53ee8cc1Swenshuai.xi 
384*53ee8cc1Swenshuai.xi void HAL_CIPHER_IntEnable(void);
385*53ee8cc1Swenshuai.xi void HAL_CIPHER_IntClear(void);
386*53ee8cc1Swenshuai.xi 
387*53ee8cc1Swenshuai.xi //=============PARSER=================================
388*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_Mode(CIPHER_PARSER_MODE eMode);
389*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_PID(CIPHER_PARSER_PID stPID);
390*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_SCB(CIPHER_PARSER_SCB eSCB);
391*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_ForceSCB(MS_BOOL bInsert, CIPHER_PARSER_SCB eSCB);
392*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_PARSER_Set_IV2(MS_U8 *pu8IV2, MS_U8 u8IVLen);
393*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_PARSER_Set_Key2(DRV_CIPHER_KEY stKey);
394*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_MaskSCB(MS_BOOL bEnable);
395*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Rmv_SCB(MS_BOOL bRemove);
396*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_BypassPid(MS_BOOL bEnable);
397*53ee8cc1Swenshuai.xi void HAL_CIPHER_PARSER_Set_ClearStartMode(MS_BOOL bEnable);
398*53ee8cc1Swenshuai.xi //MISC Function
399*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Misc_Random(MS_U8 *pu8Buf, MS_U32 u32Size);
400*53ee8cc1Swenshuai.xi MS_BOOL HAL_CIPHER_Set_OBFIdx(MS_BOOL bDMA, MS_U8 u8ReadIdx, MS_U8 u8WriteIdx);
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi #endif // #ifndef __HAL_CIPHER_H__
403*53ee8cc1Swenshuai.xi 
404