xref: /utopia/UTPA2-700.0.x/mxlib/include/drvTCF.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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   drvTCF.h
98*53ee8cc1Swenshuai.xi /// @brief  TCF Driver
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor,Inc.
100*53ee8cc1Swenshuai.xi ///
101*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi #ifndef __DRV_TCF_H__
103*53ee8cc1Swenshuai.xi #define __DRV_TCF_H__
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #include "MsTypes.h"
106*53ee8cc1Swenshuai.xi #include "MsDevice.h"
107*53ee8cc1Swenshuai.xi #include "MsCommon.h"
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi //  Define
111*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
112*53ee8cc1Swenshuai.xi #define DRV_TCF_OK                   0x00000000
113*53ee8cc1Swenshuai.xi #define DRV_TCF_FAIL                 0x00000001
114*53ee8cc1Swenshuai.xi #define DRV_TCF_BUSY                 0x00000002
115*53ee8cc1Swenshuai.xi #define DRV_TCF_INVALID_INPUT        0x00000003
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
119*53ee8cc1Swenshuai.xi //  Local enum
120*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi /// CF
122*53ee8cc1Swenshuai.xi ///
123*53ee8cc1Swenshuai.xi #define CF_NVM_RAW_WORDS                    (64)
124*53ee8cc1Swenshuai.xi #define CF_PERSIST_STATE_WORDS              (128)
125*53ee8cc1Swenshuai.xi #define CF_REG128_WORDS                     (4)
126*53ee8cc1Swenshuai.xi #define CF_REG64_WORDS                      (2)
127*53ee8cc1Swenshuai.xi #define CF_BITMAP_WORDS                     (8)
128*53ee8cc1Swenshuai.xi #define CF_CMD_WORDS                        (21)
129*53ee8cc1Swenshuai.xi #define CF_CWC_WORDS                        (4)
130*53ee8cc1Swenshuai.xi #define CF_PRODUCT_OR_ENTRIES               (8)
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi #define CF_OP_TYPE_MASK             0x0000E000  // Op[0][15:13]
133*53ee8cc1Swenshuai.xi #define CF_OP_TYPE_POS              13
134*53ee8cc1Swenshuai.xi typedef enum
135*53ee8cc1Swenshuai.xi {
136*53ee8cc1Swenshuai.xi     E_CF_OP_TYPE_OP_CWC                     = 0x0,
137*53ee8cc1Swenshuai.xi     E_CF_OP_TYPE_OP_PERSO                   = 0x1,
138*53ee8cc1Swenshuai.xi     E_CF_OP_TYPE_OP_DIFF                    = 0x2,
139*53ee8cc1Swenshuai.xi     E_CF_OP_TYPE_OP_FEATURE                 = 0x3,
140*53ee8cc1Swenshuai.xi     E_CF_OP_TYPE_OP_MFR_TEST                = 0x4
141*53ee8cc1Swenshuai.xi } CF_OPERATION_TYPE;
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi typedef enum
144*53ee8cc1Swenshuai.xi {
145*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_BUSY_INIT             = 0x0,    /**< Reset from power on condition. */
146*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_BUSY_SETUP            = 0x1,    /**< Reset after a command has completed. */
147*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_READY                 = 0x2,    /**< CF ready to receive a new transaction. */
148*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_INPUT                 = 0x3,    /**< CF is receiving a new transaction. */
149*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_BUSY_OP               = 0x4,    /**< CF is processing transaction. */
150*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_DONE_OK               = 0x8,    /**< Transaction was completed successfully. */
151*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_DONE_ERROR            = 0x9,    /**< Transaction has completed with an error. */
152*53ee8cc1Swenshuai.xi     E_CF_TRANS_STATUS_DONE_MFR_TEST         = 0xE     /**< Special case of successful test unlock. */
153*53ee8cc1Swenshuai.xi } CF_TRANS_STATUS_VALUES;
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi typedef enum
156*53ee8cc1Swenshuai.xi {
157*53ee8cc1Swenshuai.xi     E_CF_NVM_STATUS_READY                   = 0x0,    /**< NVM personalized and ready. */
158*53ee8cc1Swenshuai.xi     E_CF_NVM_STATUS_UNBISTED                = 0x1,    /**< NVM is unbisted.  Currently unsupported state and should be treated as an error. */
159*53ee8cc1Swenshuai.xi     E_CF_NVM_STATUS_UNPERSO                 = 0x2,    /**< NVM is pre-personalized. */
160*53ee8cc1Swenshuai.xi     E_CF_NVM_STATUS_ERROR                   = 0x3     /**< NVM personalized and ready. */
161*53ee8cc1Swenshuai.xi } CF_NVM_STATUS_VALUES;
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi typedef enum
164*53ee8cc1Swenshuai.xi {
165*53ee8cc1Swenshuai.xi     E_CF_DIFF_STATUS_UNDIFFERENTIATED       = 0x0,    /**< CF is undifferentiated. */
166*53ee8cc1Swenshuai.xi     E_CF_DIFF_STATUS_DIFFERENTIATED         = 0x1     /**< CF is differentiated. */
167*53ee8cc1Swenshuai.xi } CF_DIFF_STATUS_VALUES;
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi typedef enum
170*53ee8cc1Swenshuai.xi {
171*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_CWC              = 0x0,    /**< Request an CWC generation operation. */
172*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_PERSO            = 0x1,    /**< Request a Personalization operation. */
173*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_DIFF             = 0x2,    /**< Request a Differentiation operation. */
174*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_FEATURE          = 0x3,    /**< Request a Feature operation. */
175*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_MFR_TEST         = 0x4,    /**< Request a Manufacturer Test operation. */
176*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_UNDEFINED1       = 0x5,    /**< Reserved operation. */
177*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_UNDEFINED2       = 0x6,    /**< Reserved operation. */
178*53ee8cc1Swenshuai.xi     E_CF_OPERATION_TYPE_OP_UNDEFINED3       = 0x7     /**< Reserved operation. */
179*53ee8cc1Swenshuai.xi } CF_OPERATION_TYPE_VALUES;
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi typedef enum
182*53ee8cc1Swenshuai.xi {
183*53ee8cc1Swenshuai.xi     E_CF_DECM_SOURCE_NONE                   = 0x0,    /**< Invalid DECM source. Should not be used in normal operation. */
184*53ee8cc1Swenshuai.xi     E_CF_DECM_SOURCE_SW                     = 0x1,    /**< DECM source from software. */
185*53ee8cc1Swenshuai.xi     E_CF_DECM_SOURCE_KEY                    = 0x2,    /**< DECM source from key table. */
186*53ee8cc1Swenshuai.xi     E_CF_DECM_SOURCE_MIX                    = 0x3     /**< Combine DECM input from software and key table. */
187*53ee8cc1Swenshuai.xi } CF_DECM_SOURCE_VALUES;
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi typedef enum
190*53ee8cc1Swenshuai.xi {
191*53ee8cc1Swenshuai.xi     E_CF_OUTPUT_USAGE_SHV                   = 0x0,    /**< Output a secure hash value. */
192*53ee8cc1Swenshuai.xi     E_CF_OUTPUT_USAGE_CWC_DIRECT            = 0x1,    /**< Direct transfer of CWC to key table. */
193*53ee8cc1Swenshuai.xi     E_CF_OUTPUT_USAGE_CWC_XOR               = 0x2,    /**< XOR of key table entry with CWC. */
194*53ee8cc1Swenshuai.xi     E_CF_OUTPUT_USAGE_CWC_AES_KEY           = 0x3     /**< 128-bit AES decrypt of key table entry with CWC. */
195*53ee8cc1Swenshuai.xi } CF_OUTPUT_USAGE_VALUES;
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi /// CFB
199*53ee8cc1Swenshuai.xi ///
200*53ee8cc1Swenshuai.xi typedef enum
201*53ee8cc1Swenshuai.xi {
202*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_1_1 = 0x00,  // 0
203*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_1_2,         // 1
204*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_2_1,         // 2
205*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_2_2,         // 3
206*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_2_3,         // 4
207*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_3_1,
208*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_3_2,
209*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_3_3,
210*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_3_4,
211*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_4_1,
212*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_4_2,
213*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_5_1,
214*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_5_2,
215*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_5_3,
216*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_5_4,
217*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_3_6,
218*53ee8cc1Swenshuai.xi     E_CFB_USE_CASE_KLGEN_CACWC,
219*53ee8cc1Swenshuai.xi } CFB_USE_CASE;
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi typedef enum
222*53ee8cc1Swenshuai.xi {
223*53ee8cc1Swenshuai.xi     E_CFB_NO_OTP_KEY = 0x00,  // 0
224*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_1,          // 1
225*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_2,          // 2
226*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_3,          // 3
227*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_4,
228*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_5,
229*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_6,
230*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_7,
231*53ee8cc1Swenshuai.xi     E_CFB_OTP_KEY_8,
232*53ee8cc1Swenshuai.xi } CFB_OTP_KEY_IDX;
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi /// CFKE
235*53ee8cc1Swenshuai.xi ///
236*53ee8cc1Swenshuai.xi #define CFKE_OP_CLRKE_CMD 	                (0x00005FFF)
237*53ee8cc1Swenshuai.xi #define CFKE_STATUS_DONE                    (0x8)
238*53ee8cc1Swenshuai.xi #define CFKE_INPUT_WORDS                    (4)
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [31:28] */
241*53ee8cc1Swenshuai.xi {
242*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_BUSY_INIT           = 0x0,    /**< Reset from power-on condition. */
243*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_READY               = 0x2,    /**< CFKE ready to receive a new operation request. */
244*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_BUSY_OP             = 0x4,    /**< CFKE is processing operation. */
245*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_DONE_OK             = 0x8,    /**< Operation completed successfully. CFKE is ready to receive another operation request. */
246*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_DONE_ERROR          = 0x9,    /**< Operation completed with an error. */
247*53ee8cc1Swenshuai.xi     E_CFKE_TRANS_STATUS_DONE_TEST           = 0xE,    /**< Special case of successful manufacturing test operation. */
248*53ee8cc1Swenshuai.xi } CFKE_TRANS_STATUS_VALUES;
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [19:16] */
251*53ee8cc1Swenshuai.xi {
252*53ee8cc1Swenshuai.xi     E_CFKE_ERROR_NO_ERROR                   = 0x0,
253*53ee8cc1Swenshuai.xi     E_CFKE_ERROR_INVALID_COMMAND            = 0x1,    /**< Indicates a malformed command. */
254*53ee8cc1Swenshuai.xi     E_CFKE_ERROR_CF                         = 0x2,    /**< Indicates that TCF output was requested when CWC was not available. */
255*53ee8cc1Swenshuai.xi     E_CFKE_ERROR_INVALID_TAGS               = 0x4,    /**< Indicates that the tags of the SRC1 and/or SRC2 were not valid for the given command. */
256*53ee8cc1Swenshuai.xi     E_CFKE_ERROR_COMMAND_FAIL               = 0x8,    /**< Indicates that command authorization failed, or that validator was incorrect for UNW operation, or that TEST command encountered an error. */
257*53ee8cc1Swenshuai.xi } CFKE_ERROR_CODE;
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [15:12] *//* CFKE_COMMAND [15:12] */
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi     E_CFKE_OP_DCF                           = 0x0,    /**< Request an Direct CF operation. */
262*53ee8cc1Swenshuai.xi     E_CFKE_OP_XOR                           = 0x1,    /**< Request a XOR operation. */
263*53ee8cc1Swenshuai.xi     E_CFKE_OP_AES                           = 0x2,    /**< Request a AES operation. */
264*53ee8cc1Swenshuai.xi     E_CFKE_OP_UNW                           = 0x3,    /**< Request a Unwrap operation. */
265*53ee8cc1Swenshuai.xi     E_CFKE_OP_HWDECM                        = 0x4,    /**< Request a HWDECM operation. */
266*53ee8cc1Swenshuai.xi     E_CFKE_OP_CLRKE                         = 0x5,    /**< Request a CFKE Clear operation. */
267*53ee8cc1Swenshuai.xi     E_CFKE_OP_TEST                          = 0xA,    /**< Request a test operation. */
268*53ee8cc1Swenshuai.xi     E_CFKE_OP_USER_HASH                     = 0xF,    /**< Write user hash data. */
269*53ee8cc1Swenshuai.xi } CFKE_OPERATION_TYPE, CFKE_CMD_OP;
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [3] */
272*53ee8cc1Swenshuai.xi {
273*53ee8cc1Swenshuai.xi     E_CFKE_UNW_REQUIRED_TRUE                = 0x0,    /**< The TCF CWC must be used for the SRC2 for CFKE_OP_UNW command. */
274*53ee8cc1Swenshuai.xi     E_CFKE_UNW_REQUIRED_FALSE               = 0x1,    /**< The TCF CWC may be used in any command. */
275*53ee8cc1Swenshuai.xi } CFKE_DIFF_ALLOW_NON_UNW;
276*53ee8cc1Swenshuai.xi 
277*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [2] */
278*53ee8cc1Swenshuai.xi {
279*53ee8cc1Swenshuai.xi     E_CFKE_CK_ALLOWED_FALSE                 = 0x0,    /**< The TCF CWC may be only used to derive a CW. */
280*53ee8cc1Swenshuai.xi     E_CFKE_CK_ALLOWED_TRUE                  = 0x1,    /**< The TCF CWC may be used to derive either a CW or CK. */
281*53ee8cc1Swenshuai.xi } CFKE_DIFF_ALLOW_CK;
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_STATUS [1:0] */
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi     E_CFKE_CONTENT_OUTPUT_ALLOW_NONE        = 0x0,
286*53ee8cc1Swenshuai.xi     E_CFKE_CONTENT_OUTPUT_ALLOW_A           = 0x1,
287*53ee8cc1Swenshuai.xi     E_CFKE_CONTENT_OUTPUT_ALLOW_AB          = 0x2,
288*53ee8cc1Swenshuai.xi     E_CFKE_CONTENT_OUTPUT_ALLOW_ABC         = 0x3,
289*53ee8cc1Swenshuai.xi } CFKE_DIFF_CONTENT_OUTPUT_ALLOWED;
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_COMMAND [11:8] */
292*53ee8cc1Swenshuai.xi {
293*53ee8cc1Swenshuai.xi     E_CFKE_DEST_CW                          = 0x0,    /**< Output should be placed on the cfCwOut output, to be used as the control word for the transport stream descrambler. */
294*53ee8cc1Swenshuai.xi     E_CFKE_DEST_CK                          = 0x1,    /**< Output should be placed on the cfCkOut output, to be used as the content key for the bulk descrambler. */
295*53ee8cc1Swenshuai.xi     E_CFKE_DEST_SLOTA                       = 0x4,    /**< Output should be written back into Key Slot A. */
296*53ee8cc1Swenshuai.xi     E_CFKE_DEST_SLOTB                       = 0x5,    /**< Output should be written back into Key Slot B. */
297*53ee8cc1Swenshuai.xi     E_CFKE_DEST_SLOTC                       = 0x6,    /**< Output should be written back into Key Slot C. */
298*53ee8cc1Swenshuai.xi     E_CFKE_DEST_SLOTD                       = 0x7,    /**< Output should be written back into Key Slot D. */
299*53ee8cc1Swenshuai.xi     E_CFKE_DEST_NULL                        = 0xF,    /**< No destination for this operation. */
300*53ee8cc1Swenshuai.xi     // Values 0x2-0x3 and 0x8-0xE are undefined and will cause an INVALID_COMMAND error if encountered.
301*53ee8cc1Swenshuai.xi } CFKE_CMD_DEST;
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi typedef enum  /* CFKE_COMMAND [7:4]: Src1 *//* CFKE_COMMAND [3:0]: Src2 */
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     E_CFKE_SRC_NULL                         = 0x0,    /**< No SRC is used for the operation. */
306*53ee8cc1Swenshuai.xi     E_CFKE_SRC_CF                           = 0x1,    /**< Output of CF is used as SRC. */
307*53ee8cc1Swenshuai.xi     E_CFKE_SRC_TVEF                         = 0x2,    /**< eFuse input is used as SRC. */
308*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTA                        = 0x4,    /**< Existing value in Key Slot A is used as SRC. */
309*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTB                        = 0x5,    /**< Existing value in Key Slot B is used as SRC. */
310*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTC                        = 0x6,    /**< Existing value in Key Slot C is used as SRC. */
311*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTD                        = 0x7,    /**< Existing value in Key Slot D is used as SRC. */
312*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTAL                       = 0x8,    /**< Load a new value in Key Slot A which is used as SRC. */
313*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTBL                       = 0x9,    /**< Load a new value in Key Slot B which is used as SRC. */
314*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTCL                       = 0xA,    /**< Load a new value in Key Slot C which is used as SRC. */
315*53ee8cc1Swenshuai.xi     E_CFKE_SRC_SLOTDL                       = 0xB,    /**< Load a new value in Key Slot D which is used as SRC. */
316*53ee8cc1Swenshuai.xi } CFKE_CMD_SRC;
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi /// CRIKL
320*53ee8cc1Swenshuai.xi ///
321*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_NPD                    (0x80)
322*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_MULTI2                 (0x40)
323*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_CSAV2                  (0x20)
324*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_CSAV3                  (0x10)
325*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_ASA                    (0x08)
326*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_DES                    (0x04)
327*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_TDES                   (0x02)
328*53ee8cc1Swenshuai.xi #define CRIKL_KL_ENG_AES                    (0x01)
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi #define CRIKL_KL_DEST_AESDMA                (0x04)
331*53ee8cc1Swenshuai.xi #define CRIKL_KL_DEST_PVR                   (0x02)
332*53ee8cc1Swenshuai.xi #define CRIKL_KL_DEST_CIPHER                (0x01)
333*53ee8cc1Swenshuai.xi 
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi typedef enum
336*53ee8cc1Swenshuai.xi {
337*53ee8cc1Swenshuai.xi     E_CRIKL_SCMB_CTL_NONE                   = 0x0,
338*53ee8cc1Swenshuai.xi     E_CRIKL_SCMB_CTL_RESERVE                = 0x1,
339*53ee8cc1Swenshuai.xi     E_CRIKL_SCMB_CTL_EVEN_KEY               = 0x2,
340*53ee8cc1Swenshuai.xi     E_CRIKL_SCMB_CTL_ODD_KEY                = 0x3,
341*53ee8cc1Swenshuai.xi } CRIKL_SCRAMBLE_CONTROL;
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi typedef enum
344*53ee8cc1Swenshuai.xi {
345*53ee8cc1Swenshuai.xi     E_CRIKL_MIRROR_CF_STATUS                = 0x0,
346*53ee8cc1Swenshuai.xi     E_CRIKL_MIRROR_CFKE_STATUS              = 0x1,
347*53ee8cc1Swenshuai.xi     E_CRIKL_MIRROR_CF_PLATFORM              = 0x2,
348*53ee8cc1Swenshuai.xi     E_CRIKL_MIRROR_CF_FEATURE               = 0x3,
349*53ee8cc1Swenshuai.xi } CRIKL_MIRROR_MEM;
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi typedef enum
352*53ee8cc1Swenshuai.xi {
353*53ee8cc1Swenshuai.xi     E_CRIKL_KEY_SIZE_64                     = 0x0,
354*53ee8cc1Swenshuai.xi     E_CRIKL_KEY_SIZE_128                    = 0x1,
355*53ee8cc1Swenshuai.xi     E_CRIKL_KEY_SIZE_192                    = 0x2,
356*53ee8cc1Swenshuai.xi     E_CRIKL_KEY_SIZE_256                    = 0x3,
357*53ee8cc1Swenshuai.xi } CRIKL_KEY_SZIE;
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi typedef enum
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi     E_CRIKL_OP_DONT_CARE                    = 0x0,
362*53ee8cc1Swenshuai.xi     E_CRIKL_OP_DECRYPT                      = 0x1,
363*53ee8cc1Swenshuai.xi     E_CRIKL_OP_ENCRYPT                      = 0x2,
364*53ee8cc1Swenshuai.xi } CRIKL_OP_SEL;
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi typedef enum
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi     E_CRIKL_KTE0                            = 0x0,
369*53ee8cc1Swenshuai.xi     E_CRIKL_KTE1                            = 0x1,
370*53ee8cc1Swenshuai.xi     E_CRIKL_KTE2                            = 0x2,
371*53ee8cc1Swenshuai.xi     E_CRIKL_KTE3                            = 0x3,
372*53ee8cc1Swenshuai.xi } CRIKL_KTE_SEL;
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
376*53ee8cc1Swenshuai.xi //  Type and Structure
377*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
378*53ee8cc1Swenshuai.xi /// TCF DDI return value
379*53ee8cc1Swenshuai.xi typedef MS_U32                    DRV_TCF_RET;
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi 
382*53ee8cc1Swenshuai.xi /// CF
383*53ee8cc1Swenshuai.xi ///
384*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_VERSION //
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi     MS_U8                         u8VersionEpoch;
387*53ee8cc1Swenshuai.xi     MS_U8                         u8ManufacturerId;
388*53ee8cc1Swenshuai.xi     MS_U8                         u8NetlistVersion;
389*53ee8cc1Swenshuai.xi     MS_U8                         u8VersionBuildId;
390*53ee8cc1Swenshuai.xi } DRV_CF_VERSION;
391*53ee8cc1Swenshuai.xi 
392*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_FEATURE //
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi     MS_U32                        u32FeatureVector;
395*53ee8cc1Swenshuai.xi } DRV_CF_FEATURE_VECTOR;
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_TRANS_STATUS //
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi     MS_U8                         eTransStatus;
400*53ee8cc1Swenshuai.xi     MS_U8                         u8UseNvmKey;
401*53ee8cc1Swenshuai.xi     MS_U8                         eOperationType;
402*53ee8cc1Swenshuai.xi     MS_U8                         eDecmSrc;
403*53ee8cc1Swenshuai.xi     MS_U8                         eOutputUsage;
404*53ee8cc1Swenshuai.xi     MS_U8                         u8ProductRange;
405*53ee8cc1Swenshuai.xi     MS_U8                         u8ProductOffset;
406*53ee8cc1Swenshuai.xi } DRV_CF_TRANS_STATUS;
407*53ee8cc1Swenshuai.xi 
408*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_CF_STATUS //
409*53ee8cc1Swenshuai.xi {
410*53ee8cc1Swenshuai.xi     MS_U8                         eNvmStatus;
411*53ee8cc1Swenshuai.xi     MS_U8                         eDiffStatus;
412*53ee8cc1Swenshuai.xi     MS_U8                         u8RecentReset;
413*53ee8cc1Swenshuai.xi     MS_U8                         u8CfAlert;
414*53ee8cc1Swenshuai.xi     MS_U8                         u8DevelopmentMode;
415*53ee8cc1Swenshuai.xi     MS_U8                         u8FuseActivate;
416*53ee8cc1Swenshuai.xi     MS_U8                         u8FuseBlock;
417*53ee8cc1Swenshuai.xi } DRV_CF_CF_STATUS;
418*53ee8cc1Swenshuai.xi 
419*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_DECM_STATUS //
420*53ee8cc1Swenshuai.xi {
421*53ee8cc1Swenshuai.xi     MS_U8                         u8HwDecmValid;
422*53ee8cc1Swenshuai.xi     MS_U8                         u8HwDecmError;
423*53ee8cc1Swenshuai.xi } DRV_CF_DECM_STATUS;
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_OPERATION //
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi     MS_U32                        Op[CF_CMD_WORDS];
428*53ee8cc1Swenshuai.xi } DRV_CF_OPERATION;
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi typedef struct      // MSTAR_CF_RESULT //
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi     MS_U8                         eOperationType;
433*53ee8cc1Swenshuai.xi     MS_U8                         eTransStatus;
434*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcValid;
435*53ee8cc1Swenshuai.xi     MS_U32                        Shv[4];
436*53ee8cc1Swenshuai.xi } DRV_CF_RESULT;
437*53ee8cc1Swenshuai.xi 
438*53ee8cc1Swenshuai.xi 
439*53ee8cc1Swenshuai.xi /// CFB
440*53ee8cc1Swenshuai.xi ///
441*53ee8cc1Swenshuai.xi typedef struct
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcPid;
444*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcFld;
445*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcFscb;
446*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcScb;
447*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcTsid;
448*53ee8cc1Swenshuai.xi     MS_U8                         u8CwcDst;
449*53ee8cc1Swenshuai.xi } DRV_CFB_CWCCFG;
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi typedef struct
452*53ee8cc1Swenshuai.xi {
453*53ee8cc1Swenshuai.xi     MS_U8                         u8UseCase;
454*53ee8cc1Swenshuai.xi     MS_U8                         u8OtpKeyIdx;
455*53ee8cc1Swenshuai.xi     MS_U8                         u8CAcwcSrc;
456*53ee8cc1Swenshuai.xi     MS_U32                        CACWC[4];
457*53ee8cc1Swenshuai.xi     MS_U32                        EPK[4];
458*53ee8cc1Swenshuai.xi     MS_U32                        EFUV[4];
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi     DRV_CFB_CWCCFG                stCwcCfg;
461*53ee8cc1Swenshuai.xi } DRV_CFB_CFBCFG;
462*53ee8cc1Swenshuai.xi 
463*53ee8cc1Swenshuai.xi /// CFKE
464*53ee8cc1Swenshuai.xi ///
465*53ee8cc1Swenshuai.xi typedef struct
466*53ee8cc1Swenshuai.xi {
467*53ee8cc1Swenshuai.xi 	CFKE_CMD_SRC                  eSrcType;               /**< Type of input to be written. */
468*53ee8cc1Swenshuai.xi 	MS_U32                        pu32KeySlotData[4];     /**< Write the 128-bit Key Slot value. */
469*53ee8cc1Swenshuai.xi } DRV_CFKE_SOURCE;
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi typedef struct
472*53ee8cc1Swenshuai.xi {
473*53ee8cc1Swenshuai.xi 	MS_U32                        u32UnwPathData;         /**< Write the 32-bit Unwrap path value. */
474*53ee8cc1Swenshuai.xi 	MS_U32                        pu832ValidatorData[2];  /**< Write the 64 bit Validator value. */
475*53ee8cc1Swenshuai.xi } DRV_CFKE_UNWRAP_DATA;
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi typedef struct
478*53ee8cc1Swenshuai.xi {
479*53ee8cc1Swenshuai.xi 	MS_U32                        pu32UsrHashData[4];     /**< Write the 128 bit User Hash value. */
480*53ee8cc1Swenshuai.xi } DRV_CFKE_USER_HASH_DATA;
481*53ee8cc1Swenshuai.xi 
482*53ee8cc1Swenshuai.xi typedef struct
483*53ee8cc1Swenshuai.xi {
484*53ee8cc1Swenshuai.xi     CFKE_OPERATION_TYPE           eOpType;                /**< Type of operation to be issued. */
485*53ee8cc1Swenshuai.xi     DRV_CFKE_SOURCE               eOpSrc1;                /**< Source 1 for the operation (if needed). */
486*53ee8cc1Swenshuai.xi     DRV_CFKE_SOURCE               eOpSrc2;                /**< Source 2 for the operation (if needed). */
487*53ee8cc1Swenshuai.xi     CFKE_CMD_DEST                 eOpDest;                /**< Destination for the operation (if needed). */
488*53ee8cc1Swenshuai.xi     DRV_CFKE_UNWRAP_DATA          UnwData;                /**< Unwrap data for the \link #CFKE_OP_UNW \endlink operation. */
489*53ee8cc1Swenshuai.xi } DRV_CFKE_OPERATION;
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi /// CRIKL
493*53ee8cc1Swenshuai.xi ///
494*53ee8cc1Swenshuai.xi typedef struct
495*53ee8cc1Swenshuai.xi {
496*53ee8cc1Swenshuai.xi     /// Key Index
497*53ee8cc1Swenshuai.xi     MS_BOOL                       bDscmbKey;              // 1: Dscmb Key, 0: AESDMA Key
498*53ee8cc1Swenshuai.xi     // kt_index to KeyTable-- DSCMB
499*53ee8cc1Swenshuai.xi     CRIKL_SCRAMBLE_CONTROL        eScmbCtl;               // for Dscmb Key
500*53ee8cc1Swenshuai.xi     MS_U8                         u8DscmbId;              // for Dscmb Key
501*53ee8cc1Swenshuai.xi     // ks_index to KeySlot-- AESDMA
502*53ee8cc1Swenshuai.xi     MS_U8                         u8KeySlotIdx;           // for Aesdma Key
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi     /// High HalfWord [63:48]
505*53ee8cc1Swenshuai.xi     MS_U8                         u8VendorNo;             // [63:60]
506*53ee8cc1Swenshuai.xi     MS_U16                        u16VendorAtt;           // [59:46]
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi     /// 2nd HalfWord [47:32]
509*53ee8cc1Swenshuai.xi     MS_U8                         u8OutputAllowed;        // [45:44]
510*53ee8cc1Swenshuai.xi     MS_BOOL                       bMultiEng;              // [37]
511*53ee8cc1Swenshuai.xi     MS_BOOL                       bLsb64;                 // [36]
512*53ee8cc1Swenshuai.xi     CRIKL_KEY_SZIE                eKeySize;               // [35:32]
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi     /// 3rd HalfWord [31:16]
515*53ee8cc1Swenshuai.xi     MS_U8                         u8KlEng;                // [31:24]
516*53ee8cc1Swenshuai.xi     MS_U8                         u8Drop;                 // [23:20]
517*53ee8cc1Swenshuai.xi     MS_U8                         u8Cnt;                  // [19:16]
518*53ee8cc1Swenshuai.xi 
519*53ee8cc1Swenshuai.xi     /// Low HalfWord [15:0]
520*53ee8cc1Swenshuai.xi     MS_U8                         u8KlDest;               // [12:10]
521*53ee8cc1Swenshuai.xi     CRIKL_OP_SEL                  eOpSel;                 // [09:08]
522*53ee8cc1Swenshuai.xi     CRIKL_KTE_SEL                 eKteSel;                // [07:04]
523*53ee8cc1Swenshuai.xi     MS_BOOL                       bLock;                  // [03]
524*53ee8cc1Swenshuai.xi     MS_BOOL                       bParaVld;               // [02]
525*53ee8cc1Swenshuai.xi     MS_BOOL                       bKlEn;                  // [00]
526*53ee8cc1Swenshuai.xi } DRV_CRIKL_KEY_CONFIG;
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi 
529*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
530*53ee8cc1Swenshuai.xi //  Function Prototype
531*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
532*53ee8cc1Swenshuai.xi /// CF APIs
533*53ee8cc1Swenshuai.xi ///
534*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_TCF_Init(void);
535*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_Version_Info(DRV_CF_VERSION *pstVersion);
536*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_Trans_Status(DRV_CF_TRANS_STATUS *pstTransStatus);
537*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_Cf_Status(DRV_CF_CF_STATUS *pstCfStatus);
538*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_FeatureVector(DRV_CF_FEATURE_VECTOR *pstCfFeature);
539*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_Issue_Op(DRV_CF_OPERATION *pCfOperations);
540*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_IsFinished(void);
541*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CF_Read_Op_Result(DRV_CF_RESULT *pCfResult);
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi /// CFB APIs
544*53ee8cc1Swenshuai.xi ///
545*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Init(void);
546*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Enable(void);
547*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Reset(void);
548*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Setup(DRV_CFB_CFBCFG *pstCFBCfg);
549*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Is_Ready(void);
550*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFB_Is_Done(void);
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi /// CFB DBG APIs
553*53ee8cc1Swenshuai.xi DLL_PUBLIC void MDrv_CFB_DBG_KT_Response(void);
554*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U8 MDrv_CFB_DBG_CFB_FSM(void);
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi /// CFKE APIs
557*53ee8cc1Swenshuai.xi ///
558*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFKE_Cmd_Exe(DRV_CFKE_OPERATION *pCfkeOp);
559*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFKE_IsDone(CFKE_ERROR_CODE *eCfkeErr);
560*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFKE_IsReady(void);
561*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CFKE_UserHash_Setup(DRV_CFKE_USER_HASH_DATA *pUserHash);
562*53ee8cc1Swenshuai.xi 
563*53ee8cc1Swenshuai.xi /// CRIKL APIs
564*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32 MDrv_CRIKL_Mirror(CRIKL_MIRROR_MEM eCandidate);
565*53ee8cc1Swenshuai.xi DLL_PUBLIC DRV_TCF_RET MDrv_CRIKL_Set_KeyConfig(DRV_CRIKL_KEY_CONFIG *stKeyCfg);
566*53ee8cc1Swenshuai.xi 
567*53ee8cc1Swenshuai.xi #endif /* __DRV_TCF_H__ */
568