xref: /utopia/UTPA2-700.0.x/modules/dscmb/hal/maserati/tcf/halTCF.c (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 // file   halTCF.c
97*53ee8cc1Swenshuai.xi // @brief  TCF HAL
98*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
99*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi #include <string.h>
102*53ee8cc1Swenshuai.xi #include "MsCommon.h"
103*53ee8cc1Swenshuai.xi #include "halTCF.h"
104*53ee8cc1Swenshuai.xi #include "regTCF.h"
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi //  Debug Function
109*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi #define _TCF_DBG(fmt, args...)  //printf("\033[32m""[DBG]"fmt"\033[m", ## args)
111*53ee8cc1Swenshuai.xi #define _TCF_ERR(fmt, args...)  printf("\033[31m""[ERR]"fmt"\033[m", ## args)
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi //  Internal Variable
116*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
117*53ee8cc1Swenshuai.xi static MS_U32                _u32NonPmBankAddr = 0;
118*53ee8cc1Swenshuai.xi static REG_CFCtrl           *_CFCtrl      = (REG_CFCtrl*)CF_BASE;
119*53ee8cc1Swenshuai.xi static REG_CFKECtrl         *_CFKECtrl    = (REG_CFKECtrl*)CFKE_BASE;
120*53ee8cc1Swenshuai.xi static REG_CRIKLCtrl        *_CRIKLCtrl   = (REG_CRIKLCtrl*)CRI_KL_BASE;
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi static MS_U16               u16KeyPara[4] = {0}; // Key Parameter-- shared by DSCMB Key, AESDMA Key
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
126*53ee8cc1Swenshuai.xi //  Macro of bit operations
127*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_REG32_W(REG32 * reg,MS_U32 value)128*53ee8cc1Swenshuai.xi void _REG32_W(REG32 *reg, MS_U32 value)
129*53ee8cc1Swenshuai.xi {
130*53ee8cc1Swenshuai.xi     (*((volatile MS_U32*)(reg))) = value;
131*53ee8cc1Swenshuai.xi }
132*53ee8cc1Swenshuai.xi 
_REG32_R(REG32 * reg)133*53ee8cc1Swenshuai.xi MS_U32 _REG32_R(REG32 *reg)
134*53ee8cc1Swenshuai.xi {
135*53ee8cc1Swenshuai.xi     MS_U32 value = (*(volatile MS_U32*)(reg));
136*53ee8cc1Swenshuai.xi     return value;
137*53ee8cc1Swenshuai.xi }
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
141*53ee8cc1Swenshuai.xi //  Inline Function
142*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TCF_SetBank(MS_U32 u32NonPmBankAddr)143*53ee8cc1Swenshuai.xi void HAL_TCF_SetBank(MS_U32 u32NonPmBankAddr)
144*53ee8cc1Swenshuai.xi {
145*53ee8cc1Swenshuai.xi     _u32NonPmBankAddr = u32NonPmBankAddr;
146*53ee8cc1Swenshuai.xi     /// CF
147*53ee8cc1Swenshuai.xi     _CFCtrl   = (REG_CFCtrl*) (_u32NonPmBankAddr + CF_BASE);
148*53ee8cc1Swenshuai.xi     /// CFKE
149*53ee8cc1Swenshuai.xi     _CFKECtrl = (REG_CFKECtrl*) (_u32NonPmBankAddr + CFKE_BASE);
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi     /// CRIKL
152*53ee8cc1Swenshuai.xi     _CRIKLCtrl = (REG_CRIKLCtrl*) (_u32NonPmBankAddr + CRI_KL_BASE);
153*53ee8cc1Swenshuai.xi }
154*53ee8cc1Swenshuai.xi 
HAL_TCF_Clk(MS_BOOL bEnable)155*53ee8cc1Swenshuai.xi void HAL_TCF_Clk(MS_BOOL bEnable)
156*53ee8cc1Swenshuai.xi {
157*53ee8cc1Swenshuai.xi     REG32 *Reg32_Clk_CF = (REG32*)(_u32NonPmBankAddr + CLKGEN0_BASE + REG_CLK_TCF_SEL);
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi     if(bEnable){
160*53ee8cc1Swenshuai.xi         _TCF_DBG("[%s] Enable CF Clock!!\n", __FUNCTION__);
161*53ee8cc1Swenshuai.xi         _REG32_W( Reg32_Clk_CF, (_REG32_R( Reg32_Clk_CF)|TCF_CLK_54_MHZ));
162*53ee8cc1Swenshuai.xi     }
163*53ee8cc1Swenshuai.xi     else{
164*53ee8cc1Swenshuai.xi         _TCF_DBG("[%s] Disable CF Clock!!\n", __FUNCTION__);
165*53ee8cc1Swenshuai.xi         _REG32_W( Reg32_Clk_CF, (_REG32_R( Reg32_Clk_CF)&~TCF_CLK_54_MHZ));
166*53ee8cc1Swenshuai.xi     }
167*53ee8cc1Swenshuai.xi }
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi // CF
171*53ee8cc1Swenshuai.xi //
HAL_CF_Version_Info(HAL_CF_VERSION_INFO * _pstTransStatus)172*53ee8cc1Swenshuai.xi void HAL_CF_Version_Info(HAL_CF_VERSION_INFO *_pstTransStatus)
173*53ee8cc1Swenshuai.xi {
174*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Version);
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi     _pstTransStatus->_u8ManufacturerId = ((u32Value & CF_VERSION_MANUFACTURER_ID_MASK) >> CF_VERSION_MANUFACTURER_ID_POS);
177*53ee8cc1Swenshuai.xi     _pstTransStatus->_u8NetlistVersion = ((u32Value & CF_VERSION_NETLIST_VERSION_MASK) >> CF_VERSION_NETLIST_VERSION_POS);
178*53ee8cc1Swenshuai.xi     _pstTransStatus->_u8VersionEpoch   = ((u32Value & CF_VERSION_VERSION_EPOCH_MASK) >> CF_VERSION_VERSION_EPOCH_POS);
179*53ee8cc1Swenshuai.xi     _pstTransStatus->_u8VersionBuildId = ((u32Value & CF_VERSION_BUILD_ID_MASK) >> CF_VERSION_BUILD_ID_POS);
180*53ee8cc1Swenshuai.xi }
181*53ee8cc1Swenshuai.xi 
HAL_CF_Trans_Status(HAL_CF_TRANS_STATUS * _pstStatus)182*53ee8cc1Swenshuai.xi void HAL_CF_Trans_Status(HAL_CF_TRANS_STATUS *_pstStatus)
183*53ee8cc1Swenshuai.xi {
184*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Status);
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi     _pstStatus->_eTransStatus    = ((u32Value & CF_TRANS_STATUS_MASK) >> CF_TRANS_STATUS_POS);
187*53ee8cc1Swenshuai.xi     _pstStatus->_u8UseNvmKey     = ((u32Value & CF_USE_NVMKEY_MASK) >> CF_USE_NVMKEY_POS);
188*53ee8cc1Swenshuai.xi     _pstStatus->_eOperationType  = ((u32Value & CF_OPERATION_TYPE_MASK) >> CF_OPERATION_TYPE_POS);
189*53ee8cc1Swenshuai.xi     _pstStatus->_eDecmSrc        = ((u32Value & CF_DECM_SOURCE_MASK) >> CF_DECM_SOURCE_POS);
190*53ee8cc1Swenshuai.xi     _pstStatus->_eOutputUsage    = ((u32Value & CF_OUTPUT_USAGE_MASK) >> CF_OUTPUT_USAGE_POS);
191*53ee8cc1Swenshuai.xi     _pstStatus->_u8ProductRange  = ((u32Value & CF_PRODUCT_RANGE_MASK) >> CF_PRODUCT_RANGE_POS);
192*53ee8cc1Swenshuai.xi     _pstStatus->_u8ProductOffset = ((u32Value & CF_PRODUCT_OFFSET_MASK) >> CF_PRODUCT_OFFSET_POS);
193*53ee8cc1Swenshuai.xi }
194*53ee8cc1Swenshuai.xi 
HAL_CF_Cf_Status(HAL_CF_CF_STATUS * _pstCfStatus)195*53ee8cc1Swenshuai.xi void HAL_CF_Cf_Status(HAL_CF_CF_STATUS *_pstCfStatus)
196*53ee8cc1Swenshuai.xi {
197*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Status);
198*53ee8cc1Swenshuai.xi     _pstCfStatus->_eNvmStatus        = ((u32Value & CF_NVM_STATUS_MASK) >> CF_NVM_STATUS_POS);
199*53ee8cc1Swenshuai.xi     _pstCfStatus->_eDiffStatus       = ((u32Value & CF_DIFF_STATUS_MASK) >> CF_DIFF_STATUS_POS);
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi     u32Value= _REG32_R( &_CFCtrl[0].Cf_Platform);
202*53ee8cc1Swenshuai.xi     if( ((_REG32_R( &_CFCtrl[0].Cf_Version) & CF_VERSION_NETLIST_VERSION_MASK) >> CF_VERSION_NETLIST_VERSION_POS) == 0 ) // Netlist Version 0
203*53ee8cc1Swenshuai.xi     {
204*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8RecentReset     = ((u32Value & CF_PLATFORM_RECENT_RESET_MASK) >> CF_PLATFORM_RECENT_RESET_POS);
205*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8CfAlert         = ((u32Value & CF_PLATFORM_CF_ALERT_MASK) >> CF_PLATFORM_CF_ALERT_POS);
206*53ee8cc1Swenshuai.xi         // Netlist Version 0 has no development mode bit.
207*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8DevelopmentMode = 0x0;
208*53ee8cc1Swenshuai.xi         // Netlist Version 0 has a different Fuse Activate and Fuse Block positions.
209*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8FuseActivate    = ((u32Value & 0x00200000) >> 21);
210*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8FuseBlock       = ((u32Value & 0x00100000) >> 20);
211*53ee8cc1Swenshuai.xi     }
212*53ee8cc1Swenshuai.xi     else
213*53ee8cc1Swenshuai.xi     {
214*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8RecentReset     = ((u32Value & CF_PLATFORM_RECENT_RESET_MASK) >> CF_PLATFORM_RECENT_RESET_POS);
215*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8CfAlert         = ((u32Value & CF_PLATFORM_CF_ALERT_MASK) >> CF_PLATFORM_CF_ALERT_POS);
216*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8DevelopmentMode = ((u32Value & CF_PLATFORM_DEVELOPMENT_MODE_MASK) >> CF_PLATFORM_DEVELOPMENT_MODE_POS);
217*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8FuseActivate    = ((u32Value & CF_PLATFORM_CF_ACTIVATED_MASK) >> CF_PLATFORM_CF_ACTIVATED_POS);
218*53ee8cc1Swenshuai.xi         _pstCfStatus->_u8FuseBlock       = ((u32Value & 0x00000080) >> 7);
219*53ee8cc1Swenshuai.xi     }
220*53ee8cc1Swenshuai.xi }
221*53ee8cc1Swenshuai.xi 
HAL_CF_Cf_FeatureVector(HAL_CF_FEATURE_VECTOR * _pstCfFeature)222*53ee8cc1Swenshuai.xi void HAL_CF_Cf_FeatureVector(HAL_CF_FEATURE_VECTOR *_pstCfFeature)
223*53ee8cc1Swenshuai.xi {
224*53ee8cc1Swenshuai.xi     _pstCfFeature->_u32FeatureVector= _REG32_R( &_CFCtrl[0].Cf_Feature);
225*53ee8cc1Swenshuai.xi }
226*53ee8cc1Swenshuai.xi 
HAL_CF_Get_Trans_Status(void)227*53ee8cc1Swenshuai.xi MS_U8 HAL_CF_Get_Trans_Status(void)
228*53ee8cc1Swenshuai.xi {
229*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Status);
230*53ee8cc1Swenshuai.xi 	//_TCF_DBG("[%s] ===  Trans_Status= 0x%08lx  ===\n", __FUNCTION__, u32Value);
231*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CF_TRANS_STATUS_MASK) >> CF_TRANS_STATUS_POS);
232*53ee8cc1Swenshuai.xi }
233*53ee8cc1Swenshuai.xi 
HAL_CF_Get_Operation_Type(void)234*53ee8cc1Swenshuai.xi MS_U8 HAL_CF_Get_Operation_Type(void)
235*53ee8cc1Swenshuai.xi {
236*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Status);
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CF_OPERATION_TYPE_MASK) >> CF_OPERATION_TYPE_POS);
239*53ee8cc1Swenshuai.xi }
240*53ee8cc1Swenshuai.xi 
HAL_CF_Get_CwcValid(void)241*53ee8cc1Swenshuai.xi MS_U8 HAL_CF_Get_CwcValid(void)
242*53ee8cc1Swenshuai.xi {
243*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFCtrl[0].Cf_Platform);
244*53ee8cc1Swenshuai.xi 
245*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CF_PLATFORM_CWC_VALID_MASK) >> CF_PLATFORM_CWC_VALID_POS);
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi 
HAL_CF_Read_Input(void)248*53ee8cc1Swenshuai.xi MS_U32 HAL_CF_Read_Input(void)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFCtrl[0].Cf_Input);
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi 
HAL_CF_Read_Output(void)253*53ee8cc1Swenshuai.xi MS_U32 HAL_CF_Read_Output(void)
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFCtrl[0].Cf_Output);
256*53ee8cc1Swenshuai.xi }
257*53ee8cc1Swenshuai.xi 
HAL_CF_Write_Input(MS_U32 u32Cmd)258*53ee8cc1Swenshuai.xi void HAL_CF_Write_Input(MS_U32 u32Cmd)
259*53ee8cc1Swenshuai.xi {
260*53ee8cc1Swenshuai.xi     _REG32_W( &_CFCtrl[0].Cf_Input, u32Cmd);
261*53ee8cc1Swenshuai.xi }
262*53ee8cc1Swenshuai.xi 
HAL_CF_Write_Output(MS_U32 u32Cmd)263*53ee8cc1Swenshuai.xi void HAL_CF_Write_Output(MS_U32 u32Cmd)
264*53ee8cc1Swenshuai.xi {
265*53ee8cc1Swenshuai.xi     _REG32_W( &_CFCtrl[0].Cf_Output, u32Cmd);
266*53ee8cc1Swenshuai.xi }
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi #define _CF_TRANS_STATUS_BUSY_OP    0x4
HAL_CF_Get_CF_IsFinished(void)269*53ee8cc1Swenshuai.xi MS_U8 HAL_CF_Get_CF_IsFinished(void)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi     if( HAL_CF_Get_Trans_Status()==_CF_TRANS_STATUS_BUSY_OP ){
272*53ee8cc1Swenshuai.xi         return FALSE;
273*53ee8cc1Swenshuai.xi     }
274*53ee8cc1Swenshuai.xi     else{
275*53ee8cc1Swenshuai.xi         return TRUE;
276*53ee8cc1Swenshuai.xi     }
277*53ee8cc1Swenshuai.xi }
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi // CFKE
281*53ee8cc1Swenshuai.xi //
HAL_CFKE_Get_OperationStatus(void)282*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_OperationStatus(void)
283*53ee8cc1Swenshuai.xi {
284*53ee8cc1Swenshuai.xi     // CFKE_STATUS [31:28]
285*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
286*53ee8cc1Swenshuai.xi 
287*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_OPERATION_STATUS_MASK) >> CFKE_OPERATION_STATUS_POS);
288*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_OperationCount(void)289*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_OperationCount(void)
290*53ee8cc1Swenshuai.xi {
291*53ee8cc1Swenshuai.xi     // CFKE_STATUS [27:20]
292*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_OPERATION_COUNT_MASK) >> CFKE_OPERATION_COUNT_POS);
295*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_ErrorCode(void)296*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_ErrorCode(void)
297*53ee8cc1Swenshuai.xi {
298*53ee8cc1Swenshuai.xi     // CFKE_STATUS [19:16]
299*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_ERROR_CODE_MASK) >> CFKE_ERROR_CODE_POS);
302*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_OperationType(void)303*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_OperationType(void)
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     // CFKE_STATUS [15:12]
306*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
307*53ee8cc1Swenshuai.xi 
308*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_OPERATION_TYPE_MASK) >> CFKE_OPERATION_TYPE_POS);
309*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_DiffAllowNonUnw(void)310*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_DiffAllowNonUnw(void)
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi     // CFKE_STATUS [3]
313*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_DIFF_ALLOW_NON_UNW_MASK) >> CFKE_DIFF_ALLOW_NON_UNW_POS);
316*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_DiffAllowCk(void)317*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_DiffAllowCk(void)
318*53ee8cc1Swenshuai.xi {
319*53ee8cc1Swenshuai.xi     // CFKE_STATUS [2]
320*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_DIFF_ALLOW_CK_MASK) >> CFKE_DIFF_ALLOW_CK_POS);
323*53ee8cc1Swenshuai.xi }
HAL_CFKE_Get_DiffContentOutputAllowed(void)324*53ee8cc1Swenshuai.xi MS_U8 HAL_CFKE_Get_DiffContentOutputAllowed(void)
325*53ee8cc1Swenshuai.xi {
326*53ee8cc1Swenshuai.xi     // CFKE_STATUS [1:0]
327*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Status);
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_DIFF_CONTENT_OUTPUT_ALLOWED_MASK) >> CFKE_DIFF_CONTENT_OUTPUT_ALLOWED_POS);
330*53ee8cc1Swenshuai.xi }
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi 
HAL_CFKE_Read_Command(void)333*53ee8cc1Swenshuai.xi MS_U32 HAL_CFKE_Read_Command(void)
334*53ee8cc1Swenshuai.xi {
335*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFKECtrl[0].Cfke_Command);
336*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_Command(MS_U32 u32Cmd)337*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_Command(MS_U32 u32Cmd)
338*53ee8cc1Swenshuai.xi {
339*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
340*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Command, u32Cmd);
341*53ee8cc1Swenshuai.xi }
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi 
HAL_CFKE_Read_Platform(void)344*53ee8cc1Swenshuai.xi MS_U32 HAL_CFKE_Read_Platform(void)
345*53ee8cc1Swenshuai.xi {
346*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFKECtrl[0].Cfke_Platform);
347*53ee8cc1Swenshuai.xi }
348*53ee8cc1Swenshuai.xi 
HAL_CFKE_IsTransactionDone(void)349*53ee8cc1Swenshuai.xi MS_BOOL HAL_CFKE_IsTransactionDone(void)
350*53ee8cc1Swenshuai.xi {
351*53ee8cc1Swenshuai.xi     // CFKE_PLATFORM [30]
352*53ee8cc1Swenshuai.xi     MS_U32 u32Value= _REG32_R( &_CFKECtrl[0].Cfke_Platform);
353*53ee8cc1Swenshuai.xi 
354*53ee8cc1Swenshuai.xi     return (MS_U8)((u32Value & CFKE_TRANSACTION_DONE_MASK) >> CFKE_TRANSACTION_DONE_POS);
355*53ee8cc1Swenshuai.xi }
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi 
HAL_CFKE_Read_UnwPath(void)358*53ee8cc1Swenshuai.xi MS_U32 HAL_CFKE_Read_UnwPath(void)
359*53ee8cc1Swenshuai.xi {
360*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFKECtrl[0].Cfke_Unw_Path);
361*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_UnwPath(MS_U32 u32Cmd)362*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_UnwPath(MS_U32 u32Cmd)
363*53ee8cc1Swenshuai.xi {
364*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
365*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Unw_Path, u32Cmd);
366*53ee8cc1Swenshuai.xi }
367*53ee8cc1Swenshuai.xi 
368*53ee8cc1Swenshuai.xi 
HAL_CFKE_Read_Validator0(void)369*53ee8cc1Swenshuai.xi MS_U32 HAL_CFKE_Read_Validator0(void)
370*53ee8cc1Swenshuai.xi {
371*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFKECtrl[0].Cfke_Validator_0);
372*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_Validator0(MS_U32 u32Cmd)373*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_Validator0(MS_U32 u32Cmd)
374*53ee8cc1Swenshuai.xi {
375*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
376*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Validator_0, u32Cmd);
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi 
HAL_CFKE_Read_Validator1(void)380*53ee8cc1Swenshuai.xi MS_U32 HAL_CFKE_Read_Validator1(void)
381*53ee8cc1Swenshuai.xi {
382*53ee8cc1Swenshuai.xi     return _REG32_R( &_CFKECtrl[0].Cfke_Validator_1);
383*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_Validator1(MS_U32 u32Cmd)384*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_Validator1(MS_U32 u32Cmd)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
387*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Validator_1, u32Cmd);
388*53ee8cc1Swenshuai.xi }
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi 
HAL_CFKE_Write_SlotA(MS_U32 u32Cmd)391*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_SlotA(MS_U32 u32Cmd)
392*53ee8cc1Swenshuai.xi {
393*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
394*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Slot_A, u32Cmd);
395*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_SlotB(MS_U32 u32Cmd)396*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_SlotB(MS_U32 u32Cmd)
397*53ee8cc1Swenshuai.xi {
398*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
399*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Slot_B, u32Cmd);
400*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_SlotC(MS_U32 u32Cmd)401*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_SlotC(MS_U32 u32Cmd)
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
404*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Slot_C, u32Cmd);
405*53ee8cc1Swenshuai.xi }
HAL_CFKE_Write_SlotD(MS_U32 u32Cmd)406*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_SlotD(MS_U32 u32Cmd)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
409*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_Slot_D, u32Cmd);
410*53ee8cc1Swenshuai.xi }
411*53ee8cc1Swenshuai.xi 
HAL_CFKE_Write_UserHash(MS_U32 u32Cmd)412*53ee8cc1Swenshuai.xi void HAL_CFKE_Write_UserHash(MS_U32 u32Cmd)
413*53ee8cc1Swenshuai.xi {
414*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u32Cmd= 0x%08lx\n", __FUNCTION__, __LINE__, u32Cmd);
415*53ee8cc1Swenshuai.xi     _REG32_W( &_CFKECtrl[0].Cfke_User_Hash, u32Cmd);
416*53ee8cc1Swenshuai.xi }
417*53ee8cc1Swenshuai.xi 
418*53ee8cc1Swenshuai.xi 
419*53ee8cc1Swenshuai.xi // CRIKL
420*53ee8cc1Swenshuai.xi //
HAL_CRIKL_Read_CfStatus(void)421*53ee8cc1Swenshuai.xi MS_U32 HAL_CRIKL_Read_CfStatus(void)
422*53ee8cc1Swenshuai.xi {
423*53ee8cc1Swenshuai.xi     MS_U32 u32Val = 0;
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfstatusout_h)&0xffff)<<16;
426*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfstatusout_l)&0xffff);
427*53ee8cc1Swenshuai.xi     return u32Val;
428*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_CfkeStatus(void)429*53ee8cc1Swenshuai.xi MS_U32 HAL_CRIKL_Read_CfkeStatus(void)
430*53ee8cc1Swenshuai.xi {
431*53ee8cc1Swenshuai.xi     MS_U32 u32Val = 0;
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfkestatusout_h)&0xffff)<<16;
434*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfkestatusout_l)&0xffff);
435*53ee8cc1Swenshuai.xi     return u32Val;
436*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_CfPlatform(void)437*53ee8cc1Swenshuai.xi MS_U32 HAL_CRIKL_Read_CfPlatform(void)
438*53ee8cc1Swenshuai.xi {
439*53ee8cc1Swenshuai.xi     MS_U32 u32Val = 0;
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfplatformout_h)&0xffff)<<16;
442*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cfplatformout_l)&0xffff);
443*53ee8cc1Swenshuai.xi     return u32Val;
444*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_CfFeature(void)445*53ee8cc1Swenshuai.xi MS_U32 HAL_CRIKL_Read_CfFeature(void)
446*53ee8cc1Swenshuai.xi {
447*53ee8cc1Swenshuai.xi     MS_U32 u32Val = 0;
448*53ee8cc1Swenshuai.xi 
449*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cffeatureout_h)&0xffff)<<16;
450*53ee8cc1Swenshuai.xi     u32Val |= (_REG32_R( &_CRIKLCtrl[0].reg_cffeatureout_l)&0xffff);
451*53ee8cc1Swenshuai.xi     return u32Val;
452*53ee8cc1Swenshuai.xi }
453*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Set_KTIndex(MS_U8 eScmbCtl,MS_U8 u8DscmbId)454*53ee8cc1Swenshuai.xi void HAL_CRIKL_Set_KTIndex( MS_U8 eScmbCtl, MS_U8 u8DscmbId)
455*53ee8cc1Swenshuai.xi {
456*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u16KtIdx= 0x%1x%1x\n", __FUNCTION__, __LINE__, eScmbCtl, u8DscmbId);
457*53ee8cc1Swenshuai.xi 
458*53ee8cc1Swenshuai.xi     MS_U16 u16KtIdx = 0;
459*53ee8cc1Swenshuai.xi     u16KtIdx |= eScmbCtl << CRI_KT_SCMB_CTL_POS;
460*53ee8cc1Swenshuai.xi     u16KtIdx |= u8DscmbId;
461*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_kt_index, (MS_U32)u16KtIdx);
462*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KTPara_High_HalfWord(MS_U16 u16HalfWord)463*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KTPara_High_HalfWord(MS_U16 u16HalfWord)
464*53ee8cc1Swenshuai.xi {
465*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
466*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_kt_para_63_48, (MS_U32)u16HalfWord);
467*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KTPara_2nd_HalfWord(MS_U16 u16HalfWord)468*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KTPara_2nd_HalfWord(MS_U16 u16HalfWord)
469*53ee8cc1Swenshuai.xi {
470*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
471*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_kt_para_47_32, (MS_U32)u16HalfWord);
472*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KTPara_3rd_HalfWord(MS_U16 u16HalfWord)473*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KTPara_3rd_HalfWord(MS_U16 u16HalfWord)
474*53ee8cc1Swenshuai.xi {
475*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
476*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_kt_para_31_16, (MS_U32)u16HalfWord);
477*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KTPara_Low_HalfWord(MS_U16 u16HalfWord)478*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KTPara_Low_HalfWord(MS_U16 u16HalfWord)
479*53ee8cc1Swenshuai.xi {
480*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
481*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_kt_para_15_00, (MS_U32)u16HalfWord);
482*53ee8cc1Swenshuai.xi }
483*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Read_KTIndex(void)484*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KTIndex(void)
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_kt_index))&0xFFFF;
487*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KTPara_High_HalfWord(void)488*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KTPara_High_HalfWord(void)
489*53ee8cc1Swenshuai.xi {
490*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_kt_para_63_48))&0xFFFF;
491*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KTPara_2nd_HalfWord(void)492*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KTPara_2nd_HalfWord(void)
493*53ee8cc1Swenshuai.xi {
494*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_kt_para_47_32))&0xFFFF;
495*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KTPara_3rd_HalfWord(void)496*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KTPara_3rd_HalfWord(void)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_kt_para_31_16))&0xFFFF;
499*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KTPara_Low_HalfWord(void)500*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KTPara_Low_HalfWord(void)
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_kt_para_15_00))&0xFFFF;
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Set_KSIndex(MS_U8 u8KsIdx)507*53ee8cc1Swenshuai.xi void HAL_CRIKL_Set_KSIndex(MS_U8 u8KsIdx)
508*53ee8cc1Swenshuai.xi {
509*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] u16KsIdx= 0x%02x\n", __FUNCTION__, __LINE__, u8KsIdx);
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi     MS_U16 u16KsIdx = 0;
512*53ee8cc1Swenshuai.xi     u16KsIdx |= (u8KsIdx&CRI_KS_IDX_VAL_MASK);
513*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_ks_index, (MS_U32)u16KsIdx);
514*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KSPara_High_HalfWord(MS_U16 u16HalfWord)515*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KSPara_High_HalfWord(MS_U16 u16HalfWord)
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
518*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_ks_para_63_48, (MS_U32)u16HalfWord);
519*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KSPara_2nd_HalfWord(MS_U16 u16HalfWord)520*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KSPara_2nd_HalfWord(MS_U16 u16HalfWord)
521*53ee8cc1Swenshuai.xi {
522*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
523*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_ks_para_47_32, (MS_U32)u16HalfWord);
524*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KSPara_3rd_HalfWord(MS_U16 u16HalfWord)525*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KSPara_3rd_HalfWord(MS_U16 u16HalfWord)
526*53ee8cc1Swenshuai.xi {
527*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
528*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_ks_para_31_16, (MS_U32)u16HalfWord);
529*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KSPara_Low_HalfWord(MS_U16 u16HalfWord)530*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KSPara_Low_HalfWord(MS_U16 u16HalfWord)
531*53ee8cc1Swenshuai.xi {
532*53ee8cc1Swenshuai.xi     //_TCF_DBG("[%s][%d] u16HalfWord= 0x%08x\n", __FUNCTION__, __LINE__, u16HalfWord);
533*53ee8cc1Swenshuai.xi     _REG32_W( &_CRIKLCtrl[0].reg_cri_ks_para_15_00, (MS_U32)u16HalfWord);
534*53ee8cc1Swenshuai.xi }
535*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Read_KSIndex(void)536*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KSIndex(void)
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_ks_index))&0xFFFF;
539*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KSPara_High_HalfWord(void)540*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KSPara_High_HalfWord(void)
541*53ee8cc1Swenshuai.xi {
542*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_ks_para_63_48))&0xFFFF;
543*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KSPara_2nd_HalfWord(void)544*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KSPara_2nd_HalfWord(void)
545*53ee8cc1Swenshuai.xi {
546*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_ks_para_47_32))&0xFFFF;
547*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KSPara_3rd_HalfWord(void)548*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KSPara_3rd_HalfWord(void)
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_ks_para_31_16))&0xFFFF;
551*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Read_KSPara_Low_HalfWord(void)552*53ee8cc1Swenshuai.xi MS_U16 HAL_CRIKL_Read_KSPara_Low_HalfWord(void)
553*53ee8cc1Swenshuai.xi {
554*53ee8cc1Swenshuai.xi     return (_REG32_R( &_CRIKLCtrl[0].reg_cri_ks_para_15_00))&0xFFFF;
555*53ee8cc1Swenshuai.xi }
556*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Reset_KeyPara(void)557*53ee8cc1Swenshuai.xi void HAL_CRIKL_Reset_KeyPara(void)
558*53ee8cc1Swenshuai.xi {
559*53ee8cc1Swenshuai.xi     memset( (void*)u16KeyPara, 0x0, sizeof(u16KeyPara));
560*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Write_KeyPara(MS_BOOL bDscmbKey)561*53ee8cc1Swenshuai.xi void HAL_CRIKL_Write_KeyPara(MS_BOOL bDscmbKey)
562*53ee8cc1Swenshuai.xi {
563*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] Setup %s Parameter\n", __FUNCTION__, __LINE__, (bDscmbKey)? "Key Table":"Key Slot");
564*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] >>> 0x%04X\n", __FUNCTION__, __LINE__, u16KeyPara[3]);
565*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] >>> 0x%04X\n", __FUNCTION__, __LINE__, u16KeyPara[2]);
566*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] >>> 0x%04X\n", __FUNCTION__, __LINE__, u16KeyPara[1]);
567*53ee8cc1Swenshuai.xi     _TCF_DBG("[%s][%d] >>> 0x%04X\n", __FUNCTION__, __LINE__, u16KeyPara[0]);
568*53ee8cc1Swenshuai.xi 
569*53ee8cc1Swenshuai.xi     if(bDscmbKey){
570*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KTPara_High_HalfWord( u16KeyPara[3]);
571*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KTPara_2nd_HalfWord( u16KeyPara[2]);
572*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KTPara_3rd_HalfWord( u16KeyPara[1]);
573*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KTPara_Low_HalfWord( u16KeyPara[0]);
574*53ee8cc1Swenshuai.xi     }
575*53ee8cc1Swenshuai.xi     else{
576*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KSPara_High_HalfWord( u16KeyPara[3]);
577*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KSPara_2nd_HalfWord( u16KeyPara[2]);
578*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KSPara_3rd_HalfWord( u16KeyPara[1]);
579*53ee8cc1Swenshuai.xi         HAL_CRIKL_Write_KSPara_Low_HalfWord( u16KeyPara[0]);
580*53ee8cc1Swenshuai.xi     }
581*53ee8cc1Swenshuai.xi }
582*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Setup_VendorNo(MS_BOOL bDscmbKey,MS_U8 u8VendorNo)583*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_VendorNo(MS_BOOL bDscmbKey, MS_U8 u8VendorNo)
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
586*53ee8cc1Swenshuai.xi         u16KeyPara[3] |= u8VendorNo << CRI_KT_VENDOR_NO_POS;
587*53ee8cc1Swenshuai.xi     }
588*53ee8cc1Swenshuai.xi     else{ // Key Slot
589*53ee8cc1Swenshuai.xi         u16KeyPara[3] |= u8VendorNo << CRI_KS_VENDOR_NO_POS;
590*53ee8cc1Swenshuai.xi     }
591*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_VendorAtt(MS_BOOL bDscmbKey,MS_U16 u16VendorAtt)592*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_VendorAtt(MS_BOOL bDscmbKey, MS_U16 u16VendorAtt)
593*53ee8cc1Swenshuai.xi {
594*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
595*53ee8cc1Swenshuai.xi         u16KeyPara[3] |= ((u16VendorAtt&CRI_KT_VENDOR_ATT_H_VAL_MASK)>>CRI_KT_VENDOR_ATT_L_OFFSET) << CRI_KT_VENDOR_ATT_H_POS;
596*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= (u16VendorAtt&CRI_KT_VENDOR_ATT_L_VAL_MASK) << CRI_KT_VENDOR_ATT_L_POS;
597*53ee8cc1Swenshuai.xi     }
598*53ee8cc1Swenshuai.xi     else{ // Key Slot
599*53ee8cc1Swenshuai.xi         u16KeyPara[3] |= ((u16VendorAtt&CRI_KS_VENDOR_ATT_H_VAL_MASK)>>CRI_KS_VENDOR_ATT_L_OFFSET) << CRI_KS_VENDOR_ATT_H_POS;
600*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= (u16VendorAtt&CRI_KS_VENDOR_ATT_L_VAL_MASK) << CRI_KS_VENDOR_ATT_L_POS;
601*53ee8cc1Swenshuai.xi     }
602*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_OutputAllowed(MS_BOOL bDscmbKey,MS_U8 u8OutputAllowed)603*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_OutputAllowed(MS_BOOL bDscmbKey, MS_U8 u8OutputAllowed)
604*53ee8cc1Swenshuai.xi {
605*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
606*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= u8OutputAllowed << CRI_KT_OUTPUT_ALLOWED_POS;
607*53ee8cc1Swenshuai.xi     }
608*53ee8cc1Swenshuai.xi     else{ // Key Slot
609*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= u8OutputAllowed << CRI_KS_OUTPUT_ALLOWED_POS;
610*53ee8cc1Swenshuai.xi     }
611*53ee8cc1Swenshuai.xi }
612*53ee8cc1Swenshuai.xi 
HAL_CRIKL_Setup_bMultiEng(MS_BOOL bDscmbKey,MS_BOOL bMultiEng)613*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_bMultiEng(MS_BOOL bDscmbKey, MS_BOOL bMultiEng)
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
616*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= ((bMultiEng)? 1:0) << CRI_KT_MULTI_ENG_POS;
617*53ee8cc1Swenshuai.xi     }
618*53ee8cc1Swenshuai.xi     else{ // Key Slot
619*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= ((bMultiEng)? 1:0) << CRI_KS_MULTI_ENG_POS;
620*53ee8cc1Swenshuai.xi     }
621*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_bLsb64(MS_BOOL bDscmbKey,MS_BOOL bLsb64)622*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_bLsb64(MS_BOOL bDscmbKey, MS_BOOL bLsb64)
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
625*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= ((bLsb64)? 1:0) << CRI_KT_LSB64_POS;
626*53ee8cc1Swenshuai.xi     }
627*53ee8cc1Swenshuai.xi     else{ // Key Slot
628*53ee8cc1Swenshuai.xi         u16KeyPara[2] |= ((bLsb64)? 1:0) << CRI_KS_LSB64_POS;
629*53ee8cc1Swenshuai.xi     }
630*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_KeySize(MS_BOOL bDscmbKey,MS_U8 eKeySize)631*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_KeySize(MS_BOOL bDscmbKey, MS_U8 eKeySize)
632*53ee8cc1Swenshuai.xi {
633*53ee8cc1Swenshuai.xi     MS_U8  u8Pos = 0;
634*53ee8cc1Swenshuai.xi 
635*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
636*53ee8cc1Swenshuai.xi         switch(eKeySize){
637*53ee8cc1Swenshuai.xi             case 0: u8Pos = CRI_KT_KEY_SIZE_64_POS;  break;
638*53ee8cc1Swenshuai.xi             case 1: u8Pos = CRI_KT_KEY_SIZE_128_POS; break;
639*53ee8cc1Swenshuai.xi             case 2: u8Pos = CRI_KT_KEY_SIZE_192_POS; break;
640*53ee8cc1Swenshuai.xi             case 3: u8Pos = CRI_KT_KEY_SIZE_256_POS; break;
641*53ee8cc1Swenshuai.xi             default: break;
642*53ee8cc1Swenshuai.xi         }
643*53ee8cc1Swenshuai.xi     }
644*53ee8cc1Swenshuai.xi     else{ // Key Slot
645*53ee8cc1Swenshuai.xi         switch(eKeySize){
646*53ee8cc1Swenshuai.xi             case 0: u8Pos = CRI_KS_KEY_SIZE_64_POS;  break;
647*53ee8cc1Swenshuai.xi             case 1: u8Pos = CRI_KS_KEY_SIZE_128_POS; break;
648*53ee8cc1Swenshuai.xi             case 2: u8Pos = CRI_KS_KEY_SIZE_192_POS; break;
649*53ee8cc1Swenshuai.xi             case 3: u8Pos = CRI_KS_KEY_SIZE_256_POS; break;
650*53ee8cc1Swenshuai.xi             default: break;
651*53ee8cc1Swenshuai.xi         }
652*53ee8cc1Swenshuai.xi     }
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi     u16KeyPara[2] |= 1 << u8Pos;
655*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_KeyEngine(MS_BOOL bDscmbKey,MS_U8 u8KeyEng)656*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_KeyEngine(MS_BOOL bDscmbKey, MS_U8 u8KeyEng)
657*53ee8cc1Swenshuai.xi {
658*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
659*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_NPD*/0x80&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KT_ENG_NPD_POS;}
660*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_MULTI2*/0x40&u8KeyEng ) { u16KeyPara[1] |= 1 << CRI_KT_ENG_MULTI2_POS;}
661*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_CSAV2*/0x20&u8KeyEng )  { u16KeyPara[1] |= 1 << CRI_KT_ENG_CSAV2_POS;}
662*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_CSAV3*/0x10&u8KeyEng )  { u16KeyPara[1] |= 1 << CRI_KT_ENG_CSAV3_POS;}
663*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_ASA*/0x08&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KT_ENG_ASA_POS;}
664*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_DES*/0x04&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KT_ENG_DES_POS;}
665*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_TDES*/0x02&u8KeyEng )   { u16KeyPara[1] |= 1 << CRI_KT_ENG_TDES_POS;}
666*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_AES*/0x01&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KT_ENG_AES_POS;}
667*53ee8cc1Swenshuai.xi     }
668*53ee8cc1Swenshuai.xi     else{ // Key Slot
669*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_NPD*/0x80&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KS_ENG_NPD_POS;}
670*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_MULTI2*/0x40&u8KeyEng ) { u16KeyPara[1] |= 1 << CRI_KS_ENG_MULTI2_POS;}
671*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_CSAV2*/0x20&u8KeyEng )  { u16KeyPara[1] |= 1 << CRI_KS_ENG_CSAV2_POS;}
672*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_CSAV3*/0x10&u8KeyEng )  { u16KeyPara[1] |= 1 << CRI_KS_ENG_CSAV3_POS;}
673*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_ASA*/0x08&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KS_ENG_ASA_POS;}
674*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_DES*/0x04&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KS_ENG_DES_POS;}
675*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_TDES*/0x02&u8KeyEng )   { u16KeyPara[1] |= 1 << CRI_KS_ENG_TDES_POS;}
676*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_ENG_AES*/0x01&u8KeyEng )    { u16KeyPara[1] |= 1 << CRI_KS_ENG_AES_POS;}
677*53ee8cc1Swenshuai.xi     }
678*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_Drop(MS_BOOL bDscmbKey,MS_U8 u8Drop)679*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_Drop(MS_BOOL bDscmbKey, MS_U8 u8Drop)
680*53ee8cc1Swenshuai.xi {
681*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
682*53ee8cc1Swenshuai.xi         u16KeyPara[1] |= u8Drop << CRI_KT_DROP_POS;
683*53ee8cc1Swenshuai.xi     }
684*53ee8cc1Swenshuai.xi     else{ // Key Slot
685*53ee8cc1Swenshuai.xi         u16KeyPara[1] |= u8Drop << CRI_KS_DROP_POS;
686*53ee8cc1Swenshuai.xi     }
687*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_Cnt(MS_BOOL bDscmbKey,MS_U8 u8Cnt)688*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_Cnt(MS_BOOL bDscmbKey, MS_U8 u8Cnt)
689*53ee8cc1Swenshuai.xi {
690*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
691*53ee8cc1Swenshuai.xi         u16KeyPara[1] |= u8Cnt << CRI_KT_CNT_POS;
692*53ee8cc1Swenshuai.xi     }
693*53ee8cc1Swenshuai.xi     else{ // Key Slot
694*53ee8cc1Swenshuai.xi         u16KeyPara[1] |= u8Cnt << CRI_KS_CNT_POS;
695*53ee8cc1Swenshuai.xi     }
696*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_KeyDest(MS_BOOL bDscmbKey,MS_U8 u8KeyDest)697*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_KeyDest(MS_BOOL bDscmbKey, MS_U8 u8KeyDest)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
700*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_AESDMA*/0x4&u8KeyDest ) { u16KeyPara[0] |= 1 << CRI_KT_DEST_AESDMA_POS;}
701*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_PVR*/0x2&u8KeyDest )    { u16KeyPara[0] |= 1 << CRI_KT_DEST_PVR_POS;}
702*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_CIPHER*/0x1&u8KeyDest ) { u16KeyPara[0] |= 1 << CRI_KT_DEST_CIPHER_POS;}
703*53ee8cc1Swenshuai.xi     }
704*53ee8cc1Swenshuai.xi     else{ // Key Slot
705*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_AESDMA*/0x4&u8KeyDest ) { u16KeyPara[0] |= 1 << CRI_KS_DEST_AESDMA_POS;}
706*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_PVR*/0x2&u8KeyDest )    { u16KeyPara[0] |= 1 << CRI_KS_DEST_PVR_POS;}
707*53ee8cc1Swenshuai.xi         if( /*CRIKL_KL_DEST_CIPHER*/0x1&u8KeyDest ) { u16KeyPara[0] |= 1 << CRI_KS_DEST_CIPHER_POS;}
708*53ee8cc1Swenshuai.xi     }
709*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_OpType(MS_BOOL bDscmbKey,MS_U8 u8Op)710*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_OpType(MS_BOOL bDscmbKey, MS_U8 u8Op)
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
713*53ee8cc1Swenshuai.xi         switch(u8Op){
714*53ee8cc1Swenshuai.xi             case 0: break;
715*53ee8cc1Swenshuai.xi             case 1: u16KeyPara[0] |= 1 << CRI_KT_DECRYPT_POS; break;
716*53ee8cc1Swenshuai.xi             case 2: u16KeyPara[0] |= 1 << CRI_KT_ENCRYPT_POS; break;
717*53ee8cc1Swenshuai.xi             default: break;
718*53ee8cc1Swenshuai.xi         }
719*53ee8cc1Swenshuai.xi     }
720*53ee8cc1Swenshuai.xi     else{ // Key Slot
721*53ee8cc1Swenshuai.xi         switch(u8Op){
722*53ee8cc1Swenshuai.xi             case 0: break;
723*53ee8cc1Swenshuai.xi             case 1: u16KeyPara[0] |= 1 << CRI_KS_DECRYPT_POS; break;
724*53ee8cc1Swenshuai.xi             case 2: u16KeyPara[0] |= 1 << CRI_KS_ENCRYPT_POS; break;
725*53ee8cc1Swenshuai.xi             default: break;
726*53ee8cc1Swenshuai.xi         }
727*53ee8cc1Swenshuai.xi     }
728*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_KteSel(MS_BOOL bDscmbKey,MS_U8 eKteSel)729*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_KteSel(MS_BOOL bDscmbKey, MS_U8 eKteSel)
730*53ee8cc1Swenshuai.xi {
731*53ee8cc1Swenshuai.xi     MS_U8  u8Pos = 0;
732*53ee8cc1Swenshuai.xi 
733*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
734*53ee8cc1Swenshuai.xi         switch(eKteSel){
735*53ee8cc1Swenshuai.xi             case 0: u8Pos = CRI_KT_KTE_0; break;
736*53ee8cc1Swenshuai.xi             case 1: u8Pos = CRI_KT_KTE_1; break;
737*53ee8cc1Swenshuai.xi             case 2: u8Pos = CRI_KT_KTE_2; break;
738*53ee8cc1Swenshuai.xi             case 3: u8Pos = CRI_KT_KTE_3; break;
739*53ee8cc1Swenshuai.xi             default: break;
740*53ee8cc1Swenshuai.xi         }
741*53ee8cc1Swenshuai.xi     }
742*53ee8cc1Swenshuai.xi     else{ // Key Slot
743*53ee8cc1Swenshuai.xi         switch(eKteSel){
744*53ee8cc1Swenshuai.xi             case 0: u8Pos = CRI_KS_KTE_0; break;
745*53ee8cc1Swenshuai.xi             case 1: u8Pos = CRI_KS_KTE_1; break;
746*53ee8cc1Swenshuai.xi             case 2: u8Pos = CRI_KS_KTE_2; break;
747*53ee8cc1Swenshuai.xi             case 3: u8Pos = CRI_KS_KTE_3; break;
748*53ee8cc1Swenshuai.xi             default: break;
749*53ee8cc1Swenshuai.xi         }
750*53ee8cc1Swenshuai.xi     }
751*53ee8cc1Swenshuai.xi 
752*53ee8cc1Swenshuai.xi     u16KeyPara[0] |= 1 << u8Pos;
753*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_bLock(MS_BOOL bDscmbKey,MS_BOOL bLock)754*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_bLock(MS_BOOL bDscmbKey, MS_BOOL bLock)
755*53ee8cc1Swenshuai.xi {
756*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
757*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bLock)? 1:0) << CRI_KT_LOCK;
758*53ee8cc1Swenshuai.xi     }
759*53ee8cc1Swenshuai.xi     else{ // Key Slot
760*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bLock)? 1:0) << CRI_KS_LOCK;
761*53ee8cc1Swenshuai.xi     }
762*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_bParaValid(MS_BOOL bDscmbKey,MS_BOOL bParaValid)763*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_bParaValid(MS_BOOL bDscmbKey, MS_BOOL bParaValid)
764*53ee8cc1Swenshuai.xi {
765*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
766*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bParaValid)? 1:0) << CRI_KT_PARA_VLA;
767*53ee8cc1Swenshuai.xi     }
768*53ee8cc1Swenshuai.xi     else{ // Key Slot
769*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bParaValid)? 1:0) << CRI_KS_PARA_VLA;
770*53ee8cc1Swenshuai.xi     }
771*53ee8cc1Swenshuai.xi }
HAL_CRIKL_Setup_bKlEn(MS_BOOL bDscmbKey,MS_BOOL bKlEn)772*53ee8cc1Swenshuai.xi void HAL_CRIKL_Setup_bKlEn(MS_BOOL bDscmbKey, MS_BOOL bKlEn)
773*53ee8cc1Swenshuai.xi {
774*53ee8cc1Swenshuai.xi     if(bDscmbKey){ // Key Table
775*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bKlEn)? 1:0) << CRI_KT_KL_EN;
776*53ee8cc1Swenshuai.xi     }
777*53ee8cc1Swenshuai.xi     else{ // Key Slot
778*53ee8cc1Swenshuai.xi         u16KeyPara[0] |= ((bKlEn)? 1:0) << CRI_KS_KL_EN;
779*53ee8cc1Swenshuai.xi     }
780*53ee8cc1Swenshuai.xi }
781*53ee8cc1Swenshuai.xi 
782