xref: /utopia/UTPA2-700.0.x/mxlib/include/drvDSCMB.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   drvDscmb.h
98*53ee8cc1Swenshuai.xi /// @brief  Descrambler (Dscmb) Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor,Inc.
100*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi //-------------------------------------------------
102*53ee8cc1Swenshuai.xi /*! \defgroup DSCMB DSCMB interface
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi   MSTAR DESCRAMBLE(abbr. DSCMB) engine is used to decrypt the payload of Transport stream packet (ISO 13818-1).
105*53ee8cc1Swenshuai.xi   The design of descramble engine must corporate with DEMUX engine to accomplish decryption process, which including TS packet filtering and TS payload descrambling.
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi   <b> DSCMB engine support following cipher algorithms. </b> \n
108*53ee8cc1Swenshuai.xi   -# CSA :  Common Scrambling Algorithm, ETSI TS 100 289
109*53ee8cc1Swenshuai.xi   -# DES :  Data Encryption Standard, U.S. FIPS PUB 46-2
110*53ee8cc1Swenshuai.xi   -# AES :  Advanced Encryption Standard, U.S. FIPS PUB 197 (FIPS 197)
111*53ee8cc1Swenshuai.xi   -# AES-CTR :   High-Bandwidth Digital Content Protection (HDCP2.x)
112*53ee8cc1Swenshuai.xi   -# SCTE52 (DVS042) :   Data Encryption Standard �V Cipher Block Chaining Packet Encryption Specification
113*53ee8cc1Swenshuai.xi   -# MULTI2 :   ISO/IEC 9979 and assigned registration number 9
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi   <b> API call flow: </b> \n
116*53ee8cc1Swenshuai.xi    \image html drvDSCMB_pic.png
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_General DSCMB general functions
119*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_Slot_Control DSCMB alloc/free/connect/disconnect functions.
122*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_Key DSCMB set type/key related functions.
125*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_STR DSCMB STR related functions
128*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_ToBeModified DSCMB api to be modified
131*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_ToBeModified_Slot_Ctrl DSCMB slot control functions. (To be modified)
134*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB_ToBeModified
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_ToBeRemove DSCMB api to be removed
137*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_STB DSCMB functions for STB.
140*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_STB_General DSCMB general functions for STB.
143*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB_STB
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi   *! \defgroup DSCMB_STB_Kladder DSCMB Kladder functions for STB.
146*53ee8cc1Swenshuai.xi   *   \ingroup   DSCMB_STB
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi   */
149*53ee8cc1Swenshuai.xi //-------------------------------------------------
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi #ifndef __DRV_DSCMB_H__
153*53ee8cc1Swenshuai.xi #define __DRV_DSCMB_H__
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi #include "MsTypes.h"
156*53ee8cc1Swenshuai.xi #include "MsCommon.h"
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi #include "ULog.h"
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #ifdef __cplusplus
161*53ee8cc1Swenshuai.xi extern "C"
162*53ee8cc1Swenshuai.xi {
163*53ee8cc1Swenshuai.xi #endif
164*53ee8cc1Swenshuai.xi 
165*53ee8cc1Swenshuai.xi #define MSIF_DSMB_LIB_CODE              {'D','S','M','B'}    //Lib code
166*53ee8cc1Swenshuai.xi #define MSIF_DSMB_LIBVER                {'0','2'}            //LIB version
167*53ee8cc1Swenshuai.xi #define MSIF_DSMB_BUILDNUM              {'1','8'}            //Build Number
168*53ee8cc1Swenshuai.xi #define MSIF_DSMB_CHANGELIST            {'0','0','5','6','5','9','8','0'} //P4 ChangeList Number
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi #define DSCMB_DRV_VERSION               /* Character String for DRV/API version             */  \
171*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF'                                           */  \
172*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00'                                             */  \
173*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000                                           */  \
174*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000                                           */  \
175*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                                                                  \
176*53ee8cc1Swenshuai.xi     MSIF_CPU,                                                                                   \
177*53ee8cc1Swenshuai.xi     MSIF_DSMB_LIB_CODE,                 /* IP__                                             */  \
178*53ee8cc1Swenshuai.xi     MSIF_DSMB_LIBVER,                   /* 0.0 ~ Z.Z                                        */  \
179*53ee8cc1Swenshuai.xi     MSIF_DSMB_BUILDNUM,                 /* 00 ~ 99                                          */  \
180*53ee8cc1Swenshuai.xi     MSIF_DSMB_CHANGELIST,               /* CL#                                              */  \
181*53ee8cc1Swenshuai.xi     MSIF_OS
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi #define DSCMB_ASSERT_AND_RETURN(x)             if (!(x)){printf ("ASSERT FAIL: %s %s %d\n", __FILE__, __FUNCTION__, __LINE__); return FALSE;}
185*53ee8cc1Swenshuai.xi #define DSCMB_ASSERT_NO_RETURN(x)             if (!(x)){printf ("ASSERT FAIL: %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);}
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi #define DSCMB_LIB_TIME_MAX          16      ///< Maximum length of time
188*53ee8cc1Swenshuai.xi #define DSCMB_LIB_DATE_MAX          16      ///< Maximum length of date
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
191*53ee8cc1Swenshuai.xi {
192*53ee8cc1Swenshuai.xi     MS_U8   Time[DSCMB_LIB_TIME_MAX];       ///< Library Built Time
193*53ee8cc1Swenshuai.xi     MS_U8   Date[DSCMB_LIB_DATE_MAX];       ///< Library Built Date
194*53ee8cc1Swenshuai.xi } DSCMB_Info;
195*53ee8cc1Swenshuai.xi 
196*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
197*53ee8cc1Swenshuai.xi {
198*53ee8cc1Swenshuai.xi     MS_U32 u32Status;
199*53ee8cc1Swenshuai.xi } DSCMB_Status;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi /// Descrambler null filter ID
202*53ee8cc1Swenshuai.xi #define DRV_DSCMB_FLT_NULL          0xFFFFFFFF
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi typedef enum
205*53ee8cc1Swenshuai.xi {
206*53ee8cc1Swenshuai.xi     /// Descrambler Slot Type :
207*53ee8cc1Swenshuai.xi     E_SLOT_TYPE_NORMAL = 0,  // Normal
208*53ee8cc1Swenshuai.xi     E_SLOT_TYPE_SHARE,       // Share
209*53ee8cc1Swenshuai.xi } DSCMB_SLOT_Type;
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi typedef enum
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi     E_DSCMB_FLT_3_KEYS        = 0x00000000, // Odd, Even, and Clear Key
214*53ee8cc1Swenshuai.xi     E_DSCMB_FLT_2_KEYS        = 0x00000001, // Odd and Even Key
215*53ee8cc1Swenshuai.xi     E_DSCMB_FLT_2_KEYS_SHARE  = 0x00000002, // Odd and Even Key (share key)
216*53ee8cc1Swenshuai.xi     E_DSCMB_FLT_1_KEYS        = 0x00000003, // Always use the Key
217*53ee8cc1Swenshuai.xi     E_DSCMB_FLT_SECURE_KEYS_ENABLE   = 1 << 7, // enable Secure pid slot
218*53ee8cc1Swenshuai.xi } DSCMB_Flt_Type;
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi /// Descrambler algorithm type
221*53ee8cc1Swenshuai.xi typedef enum
222*53ee8cc1Swenshuai.xi {
223*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : CSA
224*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_CSA = 0,    // CSA
225*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : NSA as ESA
226*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_NSA_AS_ESA, // NSA as ESA
227*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : CI+ DES
228*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_DES,        // CI+ DES
229*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : CI+ AES
230*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_AES,        // CI+ AES
231*53ee8cc1Swenshuai.xi     // E_DSCMB_TYPE_ESA,       // ESA
232*53ee8cc1Swenshuai.xi     // E_DSCMB_TYPE_NSAS,      // NSAS
233*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_AES_ECB,
234*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_AES_SCTE52,  // Descrambler algorithm : DBook, AES+CBC, S8 new, not support for all chips
235*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_AES_CTR,     // AES Counter mode
236*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_TDES_ECB,
237*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_TDES_SCTE52,
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi     // Synamedia AES
240*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_SYN_AES,    // AES Leading CLR EBC
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_MULTI2,    // Multi2
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : CSA3
245*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_CSA3,    // CSA3
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi     /// Descrambler algorithm : CSA conformance mode
248*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_CSA_CONF,    // CSA conformance mode
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi     E_DSCMB_TYPE_OC,    // Open Cable
251*53ee8cc1Swenshuai.xi } DSCMB_Type;
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi /// Descrambler key type
254*53ee8cc1Swenshuai.xi typedef enum
255*53ee8cc1Swenshuai.xi {
256*53ee8cc1Swenshuai.xi     /// Descrambler key type : clear
257*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_CLEAR = 0,
258*53ee8cc1Swenshuai.xi     /// Descrambler key type : even
259*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_EVEN,
260*53ee8cc1Swenshuai.xi     /// Descrambler key type : odd
261*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_ODD,
262*53ee8cc1Swenshuai.xi 
263*53ee8cc1Swenshuai.xi     /// Enable FSCB
264*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_FSCB_ENABLE =   1 << 4,
265*53ee8cc1Swenshuai.xi     /// Enable KL Key
266*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_TO_KL_ENABLE =  1 << 5,
267*53ee8cc1Swenshuai.xi     /// Enable Secure Key
268*53ee8cc1Swenshuai.xi     E_DSCMB_KEY_SECURE_KEYS_ENABLE =   1 << 7,
269*53ee8cc1Swenshuai.xi } DSCMB_Key_Type;
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi /// Scramble level
272*53ee8cc1Swenshuai.xi typedef enum
273*53ee8cc1Swenshuai.xi {
274*53ee8cc1Swenshuai.xi     /// Descrambler level : none
275*53ee8cc1Swenshuai.xi     E_DSCMB_NONE                    =   0x00000000,
276*53ee8cc1Swenshuai.xi     /// Descrambler level : TS level
277*53ee8cc1Swenshuai.xi     E_DSCMB_TS                      =   0x00000001,
278*53ee8cc1Swenshuai.xi     /// Descrambler level : PES level
279*53ee8cc1Swenshuai.xi     E_DSCMB_PES                     =   0x00000002,
280*53ee8cc1Swenshuai.xi     /// Descrambler level : TS and PES level
281*53ee8cc1Swenshuai.xi     E_DSCMB_TS_PES                  =   (E_DSCMB_TS | E_DSCMB_PES),
282*53ee8cc1Swenshuai.xi } SCMB_Level;
283*53ee8cc1Swenshuai.xi 
284*53ee8cc1Swenshuai.xi // Descrambler Engine Type //
285*53ee8cc1Swenshuai.xi typedef enum
286*53ee8cc1Swenshuai.xi {
287*53ee8cc1Swenshuai.xi     E_DSCMB_ENG_LSAS = 0x1,
288*53ee8cc1Swenshuai.xi     E_DSCMB_ENG_ESA  = 0x2,
289*53ee8cc1Swenshuai.xi     E_DSCMB_ENG_LSAD = 0x4,
290*53ee8cc1Swenshuai.xi } DSCMB_Eng_Type;
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi /// Key ladder input source
293*53ee8cc1Swenshuai.xi typedef enum
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi     /// Key ladder source from ACPU/SCPU
296*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_ACPU             =   0,
297*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_1
298*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_1         =   1,
299*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_2
300*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_2         =   2,
301*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_3
302*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_3         =   3,
303*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_4
304*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_4         =   4,
305*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_5
306*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_5         =   5,
307*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_6
308*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_6         =   6,
309*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_7
310*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_7         =   7,
311*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_8
312*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_8         =   8,
313*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_9
314*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_9         =   16,
315*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_10
316*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_10        =   10,
317*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_11
318*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_11        =   11,
319*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_12
320*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_12        =   12,
321*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_13
322*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_13        =   13,
323*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_14
324*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_14        =   14,
325*53ee8cc1Swenshuai.xi     /// Key ladder source from SECRET_15
326*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_SECRET_15        =   15,
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_0, only for K3S, K5X, K7
329*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_0        =   5,
330*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_1, only for K3S, K5X, K7
331*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_1        =   6,
332*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_2, only for K3S, K5X, K7
333*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_2        =   7,
334*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_3, only for K3S, K5X, K7
335*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_3        =   8,
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_0
338*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_EX_0        =   0x40,
339*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_1
340*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_EX_1        =   0x41,
341*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_2
342*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_EX_2        =   0x42,
343*53ee8cc1Swenshuai.xi     /// Key ladder source from Private_3
344*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_PRIVATE_EX_3        =   0x43,
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi     /// Key ladder source from VGK
347*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_VGK              =   9,
348*53ee8cc1Swenshuai.xi     /// Key ladder source go through KDF
349*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SRC_KDF_ENABLE       =   1 << 8,
350*53ee8cc1Swenshuai.xi } DSCMB_KLSrc;
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi /// Key ladder output destination
353*53ee8cc1Swenshuai.xi typedef enum
354*53ee8cc1Swenshuai.xi {
355*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_ACPU             =   0x1,
356*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_KT_NSA           =   0x3,
357*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_AES          =   0x4,
358*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_TDES         =   0x5,
359*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE0         =   0x6,
360*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE1         =   0x7,
361*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE2         =   0x8,
362*53ee8cc1Swenshuai.xi 
363*53ee8cc1Swenshuai.xi 
364*53ee8cc1Swenshuai.xi     /// Key ladder destination to ACPU
365*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_CPU_ACPU         =   0x00000080,
366*53ee8cc1Swenshuai.xi     /// Key ladder destination to Secure CPU
367*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_CPU_SCPU         =   0x00000081,
368*53ee8cc1Swenshuai.xi     /// Key ladder destination to TSIO
369*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_TSIO             =   0x00000800,
370*53ee8cc1Swenshuai.xi     /// Key ladder destination to DSCMB (KeyTable)
371*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_KT_LSAD          =   0x00008000,
372*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_KT_ESA           =   0x00008100,
373*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_KT_LSAS          =   0x00008200,
374*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_KT_PIDSLOTMAP_ENABLE  = (1 << 14),
375*53ee8cc1Swenshuai.xi     /// Key ladder destination to CFB
376*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_CFB              =   0x00080000,
377*53ee8cc1Swenshuai.xi     /// Key ladder destination to DMA
378*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SK0         =    0x00800000,
379*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SK1         =    0x00810000,
380*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SK2         =    0x00820000,
381*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SK3         =    0x00830000,
382*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_PVRLUT0     =    0x00840000,
383*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_PVRLUT1     =    0x00850000,
384*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_PVRLUT2     =    0x00860000,
385*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_PVRLUT3     =    0x00870000,
386*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPS0        =    0x00880000 ,
387*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPS1        =    0x00890000 ,
388*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPS2        =    0x008A0000 ,
389*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPS3        =    0x008B0000 ,
390*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPD0        =    0x008C0000 ,
391*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPD1        =    0x008D0000 ,
392*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPD2        =    0x008E0000 ,
393*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_DMA_SPD3        =    0x008F0000 ,
394*53ee8cc1Swenshuai.xi     /// Key ladder destination to PRIVATE KEY
395*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE_0       =(int)0x81000000   ,
396*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE_1       =(int)0x82000000   ,
397*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE_2       =(int)0x83000000   ,
398*53ee8cc1Swenshuai.xi     E_DSCMB_KL_DST_PRIVATE_3       =(int)0x84000000   ,
399*53ee8cc1Swenshuai.xi } DSCMB_KLDst;
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi typedef enum
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi     // descrambler engine
404*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_ENGINE_NUM,
405*53ee8cc1Swenshuai.xi     // descrambler slot
406*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_FLT_NUM,
407*53ee8cc1Swenshuai.xi     // descrambler type supported
408*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SUPPORT_ALGORITHM,
409*53ee8cc1Swenshuai.xi     // descrambler key type supported
410*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SUPPORT_KEY_TYPE,
411*53ee8cc1Swenshuai.xi     // descrambler mapping, start tsp pid filter
412*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_PIDFILTER_MAP_START,
413*53ee8cc1Swenshuai.xi     // descrambler mapping, end tsp pid filter
414*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_PIDFILTER_MAP_END,
415*53ee8cc1Swenshuai.xi     // share key slot max number
416*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SHARE_KEY_SLOT_MAX_NUM,
417*53ee8cc1Swenshuai.xi     // share key region number
418*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SHARE_KEY_REGION_NUM,
419*53ee8cc1Swenshuai.xi     // share key region start
420*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SHARE_KEY_REGION_START,
421*53ee8cc1Swenshuai.xi     // share key region end
422*53ee8cc1Swenshuai.xi     E_DSCMB_CAP_SHARE_KEY_REGION_END,
423*53ee8cc1Swenshuai.xi } DSCMB_Query_Type;
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi typedef enum
426*53ee8cc1Swenshuai.xi {
427*53ee8cc1Swenshuai.xi     // HDCP2.2 Errata
428*53ee8cc1Swenshuai.xi     E_DSCMB_CFG_HDCP2_TX_CONTENT_CATEGORY_SUPPORT,
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi     // update scramble bit @ PUSI packet
431*53ee8cc1Swenshuai.xi     E_DSCMB_CFG_SCMB_STATUS_PUSI_ONLY,
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi } DSCMB_Option;
434*53ee8cc1Swenshuai.xi 
435*53ee8cc1Swenshuai.xi typedef enum
436*53ee8cc1Swenshuai.xi {
437*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TDES                 =   0x00000000,
438*53ee8cc1Swenshuai.xi     E_DSCMB_KL_AES                  =   0x0000003F,
439*53ee8cc1Swenshuai.xi } DSCMB_KLEng;
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi typedef enum
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SEL_DEFAULT = 0, //Backward compatible, actual default value is chosen in HAL driver
444*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SEL_CW      , //CWKL
445*53ee8cc1Swenshuai.xi     E_DSCMB_KL_SEL_PVR     , //PVRKL
446*53ee8cc1Swenshuai.xi } DSCMB_KL_SelEng;
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi /// Key ladder configurations
449*53ee8cc1Swenshuai.xi typedef enum
450*53ee8cc1Swenshuai.xi {
451*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV0 = 0,
452*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV1 ,
453*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV2 ,
454*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV3 ,
455*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV4 ,
456*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_LV5 ,
457*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_INF = 9 ,
458*53ee8cc1Swenshuai.xi     E_DSCMB_KL_TYPE_S5  = 0xD,
459*53ee8cc1Swenshuai.xi } DSCMB_KLType;
460*53ee8cc1Swenshuai.xi 
461*53ee8cc1Swenshuai.xi typedef enum
462*53ee8cc1Swenshuai.xi {
463*53ee8cc1Swenshuai.xi     E_DSCMB_KL_128_BITS   ,
464*53ee8cc1Swenshuai.xi     E_DSCMB_KL_64_BITS  ,
465*53ee8cc1Swenshuai.xi } DSCMB_KL_OutputSize;
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi /// Key ladder configurations
468*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
469*53ee8cc1Swenshuai.xi {
470*53ee8cc1Swenshuai.xi     MS_BOOL         bDecrypt;
471*53ee8cc1Swenshuai.xi     MS_BOOL         bInverse;
472*53ee8cc1Swenshuai.xi     MS_BOOL         bKeepRound;
473*53ee8cc1Swenshuai.xi     MS_U32          u32Round;
474*53ee8cc1Swenshuai.xi     MS_U32          u32EngMode;
475*53ee8cc1Swenshuai.xi     DSCMB_KLType         eKLType;
476*53ee8cc1Swenshuai.xi     DSCMB_KL_OutputSize  eOutsize;
477*53ee8cc1Swenshuai.xi 
478*53ee8cc1Swenshuai.xi } DSCMB_KLCfg;
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi typedef enum
481*53ee8cc1Swenshuai.xi {
482*53ee8cc1Swenshuai.xi     E_KDF_HASH_SHA1,
483*53ee8cc1Swenshuai.xi     E_KDF_HASH_SHA256,
484*53ee8cc1Swenshuai.xi } KDF_TYPE;
485*53ee8cc1Swenshuai.xi 
486*53ee8cc1Swenshuai.xi 
487*53ee8cc1Swenshuai.xi typedef enum
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi     E_KDF_HW_KEY1,
490*53ee8cc1Swenshuai.xi     E_KDF_HW_KEY2,
491*53ee8cc1Swenshuai.xi     E_KDF_HW_KEY3,
492*53ee8cc1Swenshuai.xi     E_KDF_HW_KEY4,
493*53ee8cc1Swenshuai.xi     E_KDF_HW_KEY_NUM,
494*53ee8cc1Swenshuai.xi } KDF_HW_KEY_SEL;
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi /// Key ladder KDF configuration
497*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
498*53ee8cc1Swenshuai.xi {
499*53ee8cc1Swenshuai.xi     MS_U16             u16AppId;
500*53ee8cc1Swenshuai.xi     KDF_TYPE           eKDFType;
501*53ee8cc1Swenshuai.xi     KDF_HW_KEY_SEL     eHWKeyId;
502*53ee8cc1Swenshuai.xi } DSCMB_KL_KDF;
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi typedef enum
505*53ee8cc1Swenshuai.xi {
506*53ee8cc1Swenshuai.xi     DSCMB_FSCB_UNCHG = 0,
507*53ee8cc1Swenshuai.xi     DSCMB_FSCB_CLEAR,
508*53ee8cc1Swenshuai.xi     DSCMB_FSCB_EVEN,
509*53ee8cc1Swenshuai.xi     DSCMB_FSCB_ODD,
510*53ee8cc1Swenshuai.xi } DSCMB_FSCB;
511*53ee8cc1Swenshuai.xi 
512*53ee8cc1Swenshuai.xi ///New  Key ladder configurations for Keyladder run all.
513*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi     DSCMB_KLEng          eAlgo;
516*53ee8cc1Swenshuai.xi     DSCMB_KLSrc          eSrc;   // Select KL root key source //
517*53ee8cc1Swenshuai.xi     DSCMB_KLDst          eDst;   // Select KL output Key destination //
518*53ee8cc1Swenshuai.xi     DSCMB_KL_OutputSize  eOutsize;  // Select ouput Key size. ex: Key size of CSA and DES are E_DSCMB_KL_64_BITS//
519*53ee8cc1Swenshuai.xi     DSCMB_Key_Type       eKeyType;
520*53ee8cc1Swenshuai.xi     // Key ladder running level, support level 0 ~ 3 // [NOTE] Level 0 is only supported when destination is CryptoDMA
521*53ee8cc1Swenshuai.xi     MS_U32               u32Level;
522*53ee8cc1Swenshuai.xi     MS_U32               u32EngID;  // Select ESA/NSA as KL destination, Dscmb engine ID //
523*53ee8cc1Swenshuai.xi     MS_U32               u32DscID;  // Select ESA/NSA as KL destination, Dscmb ID. Select TSIO as KL destination, Tsio ID //
524*53ee8cc1Swenshuai.xi     MS_U8                *u8KeyACPU;  // Select ACPU as KL root Key, KL root key //
525*53ee8cc1Swenshuai.xi     // KL inputs, pointer of bytes array for each level input, every input contains 16 bytes //
526*53ee8cc1Swenshuai.xi     // ex: MS_U8 input[48]: input[0-15] Level1 , input[16-31] Level2, input[32-47] Level3
527*53ee8cc1Swenshuai.xi     MS_U8                *pu8KeyKLIn;
528*53ee8cc1Swenshuai.xi     MS_BOOL              bDecrypt;
529*53ee8cc1Swenshuai.xi     MS_BOOL              bInverse;
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi     // New data member
532*53ee8cc1Swenshuai.xi     DSCMB_KL_SelEng      eKLSel;   //Select KeyLadder
533*53ee8cc1Swenshuai.xi     MS_U32               u32CAVid; //Set CAVid
534*53ee8cc1Swenshuai.xi     DSCMB_KL_KDF         stKDF;
535*53ee8cc1Swenshuai.xi     DSCMB_FSCB           eFSCB; // Key-specific FSCB
536*53ee8cc1Swenshuai.xi } DSCMB_KLCfg_All;
537*53ee8cc1Swenshuai.xi 
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi typedef enum
540*53ee8cc1Swenshuai.xi {
541*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_AES       ,
542*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_CSA2      ,
543*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_DES       ,
544*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_TDES      ,
545*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_MULTI2    ,
546*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_CSA2_CONF ,
547*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_CSA3      ,
548*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_ASA       ,
549*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_TCSA3     ,
550*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_ESSA      ,
551*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_DEFAULT = 0xF,
552*53ee8cc1Swenshuai.xi     E_DSCMB_MAIN_ALGO_NUM,
553*53ee8cc1Swenshuai.xi } DSCMB_MainAlgo_Type;
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi typedef enum
557*53ee8cc1Swenshuai.xi {
558*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_NONE = 0   ,
559*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_MDI_CBC = 0,
560*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_MDI_RCBC  ,
561*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_MDD_CBC   ,
562*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_MDD_RCBC  ,
563*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_LEADING_CLEAR ,
564*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_ECB ,
565*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_CBC ,
566*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_CTR ,
567*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_OFB ,
568*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_DEFAULT = 0xF,
569*53ee8cc1Swenshuai.xi     E_DSCMB_SUB_ALGO_NUM,
570*53ee8cc1Swenshuai.xi } DSCMB_SubAlgo_Type;
571*53ee8cc1Swenshuai.xi 
572*53ee8cc1Swenshuai.xi 
573*53ee8cc1Swenshuai.xi typedef enum
574*53ee8cc1Swenshuai.xi {
575*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_NONE = 0,
576*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_CLR = 0,
577*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_CTS,
578*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_SCTE52,
579*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_XORIV1,
580*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_OC_M,
581*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_XORIV2,
582*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_CTR,
583*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_DEFAULT = 0x7,
584*53ee8cc1Swenshuai.xi     E_DSCMB_RESSB_ALGO_NUM,
585*53ee8cc1Swenshuai.xi } DSCMB_ResSBAlgo_Type;
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi 
588*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED
589*53ee8cc1Swenshuai.xi {
590*53ee8cc1Swenshuai.xi     DSCMB_MainAlgo_Type   eMainAlgo;
591*53ee8cc1Swenshuai.xi     DSCMB_SubAlgo_Type    eSubAlgo;
592*53ee8cc1Swenshuai.xi     DSCMB_ResSBAlgo_Type  eResAlgo;
593*53ee8cc1Swenshuai.xi     DSCMB_ResSBAlgo_Type  eSBAlgo;
594*53ee8cc1Swenshuai.xi     MS_BOOL               bDecrypt;
595*53ee8cc1Swenshuai.xi } DSCMB_Algo_Cfg;
596*53ee8cc1Swenshuai.xi 
597*53ee8cc1Swenshuai.xi typedef enum
598*53ee8cc1Swenshuai.xi {
599*53ee8cc1Swenshuai.xi     E_DSCMB_CAPVR_PROG0 = 1 ,
600*53ee8cc1Swenshuai.xi     E_DSCMB_CAPVR_PROG1 = 2 ,
601*53ee8cc1Swenshuai.xi } DSCMB_CAPVR_MODE;
602*53ee8cc1Swenshuai.xi 
603*53ee8cc1Swenshuai.xi typedef enum
604*53ee8cc1Swenshuai.xi {
605*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_LIVE0,
606*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_LIVE1,
607*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_LIVE2,
608*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_LIVE3,
609*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_FILE0,
610*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_FILE1,
611*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_FILE2,
612*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_FILE3,
613*53ee8cc1Swenshuai.xi     E_DSCMB_TSIF_NUM,
614*53ee8cc1Swenshuai.xi } DSCMB_TSIF;
615*53ee8cc1Swenshuai.xi 
616*53ee8cc1Swenshuai.xi // Error Status for KL //s
617*53ee8cc1Swenshuai.xi #define DSCMB_KL_Status MS_U32
618*53ee8cc1Swenshuai.xi 
619*53ee8cc1Swenshuai.xi #define    KL_STATUS_KEY_OK                            0x0000
620*53ee8cc1Swenshuai.xi #define    KL_STATUS_ACPU_KEY_NULL                     0x0001
621*53ee8cc1Swenshuai.xi #define    KL_STATUS_ACPU_OUTKEY_NULL                  0x0002
622*53ee8cc1Swenshuai.xi #define    KL_STATUS_INVALID_KEYROUND_PARAMETER        0x0004
623*53ee8cc1Swenshuai.xi #define    KL_STATUS_INVALID_INPUT_LEVEL               0x0008
624*53ee8cc1Swenshuai.xi #define    KL_STATUS_IVALID_DSCMB_ID                   0x0010
625*53ee8cc1Swenshuai.xi #define    KL_STATUS_WAIT_CW_READY_TIMEOUT             0x0020
626*53ee8cc1Swenshuai.xi #define    KL_STATUS_WAIT_KL_READY_TIMEOUT             0x0040
627*53ee8cc1Swenshuai.xi #define    KL_STATUS_KL_INPUT_NULL                     0x0080
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi #define    KL_STATUS_BAD_KEY                           0x0100
630*53ee8cc1Swenshuai.xi #define    KL_STATUS_INVALID_FUNCTION                  0x0200
631*53ee8cc1Swenshuai.xi #define    KL_STATUS_MULTI_FUNCTION                    0x0400
632*53ee8cc1Swenshuai.xi #define    KL_STATUS_ZERO_ORDER                        0x0800
633*53ee8cc1Swenshuai.xi #define    KL_STATUS_INTERNAL_BAD_KEY                  0x1000
634*53ee8cc1Swenshuai.xi #define    KL_STATUS_INVALID_KL_SEL                    0x2000
635*53ee8cc1Swenshuai.xi 
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi // Backward compatible
639*53ee8cc1Swenshuai.xi typedef DSCMB_KLSrc          DSCMB_KLadderSrc;
640*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_ACPU               E_DSCMB_KL_SRC_ACPU
641*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_SECRET_KEY1        E_DSCMB_KL_SRC_SECRET_1
642*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_SECRET_KEY2        E_DSCMB_KL_SRC_SECRET_2
643*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_SECRET_KEY3        E_DSCMB_KL_SRC_SECRET_3
644*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_SECRET_KEY4        E_DSCMB_KL_SRC_SECRET_4
645*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_SRC_VGK                E_DSCMB_KL_SRC_VGK
646*53ee8cc1Swenshuai.xi 
647*53ee8cc1Swenshuai.xi typedef DSCMB_KLDst          DSCMB_KLadderDst;
648*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_DST_KTAB_ESA           E_DSCMB_KL_DST_KT_ESA
649*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_DST_KTAB_NSA =         E_DSCMB_KL_DST_KT_NSA
650*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_DST_AESDMA_AES =       E_DSCMB_KL_DST_DMA_AES
651*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_DST_AESDMA_TDES =      E_DSCMB_KL_DST_DMA_TDES
652*53ee8cc1Swenshuai.xi #define E_DSCMB_KLAD_DST_ACPU =             E_DSCMB_KL_DST_ACPU
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi typedef DSCMB_KLCfg          DSCMB_KLadderConfig;
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi // wrapper function
657*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltAlloc(void)   \
658*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltAlloc(0)
659*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltAlloc_Ex(eFltType)   \
660*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltAlloc_Ex(0, eFltType)
661*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltFree(u32DscmbId)   \
662*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltFree(0, u32DscmbId)
663*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltConnectPid(u32DscmbId, u32Pid)  \
664*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltConnectPid(0, u32DscmbId, u32Pid)
665*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltDisconnectPid(u32DscmbId, u32Pid) \
666*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltDisconnectPid(0, u32DscmbId, u32Pid)
667*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltConnectFltId(u32DscmbId, u32FltId)    \
668*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltConnectFltId(0, u32DscmbId, u32FltId)
669*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltDisconnectPid_Ex(u32DscmbId, u32Pid) \
670*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltDisconnectPid_Ex(0, u32DscmbId, u32Pid)
671*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltDisconnectFltId(u32DscmbId, u32FltId)    \
672*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltDisconnectFltId(0, u32DscmbId, u32FltId)
673*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltDscmb(u32DscmbId, bDscmb) \
674*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltDscmb(0, u32DscmbId, bDscmb)
675*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltTypeSet(u32DscmbId, eType)    \
676*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltTypeSet(0, u32DscmbId, eType)
677*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_Multi2_SetRound(u32Round)    \
678*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_Multi2_SetRound(0, u32Round)
679*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_Multi2_SetSystemKey(u8Syskey)    \
680*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_Multi2_SetSystemKey(0, u8Syskey)
681*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltKeySet(u32DscmbId, eKeyType, pu8Key)  \
682*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltKeySet(0, u32DscmbId, eKeyType, pu8Key)
683*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltKeyReset(u32DscmbId, eKeyType)    \
684*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltKeyReset(0, u32DscmbId, eKeyType)
685*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltIVSet(u32DscmbId, eKeyType, pu8IV)    \
686*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltIVSet(0, u32DscmbId, eKeyType, pu8IV)
687*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_PidFlt_ScmbStatus(u32PidFltId, pScmbLevel)    \
688*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_PidFlt_ScmbStatus(0, u32PidFltId, pScmbLevel)
689*53ee8cc1Swenshuai.xi #define MDrv_DSCMB_FltKeyReset(u32DscmbId, eKeyType)    \
690*53ee8cc1Swenshuai.xi     MDrv_DSCMB2_FltKeyReset(0, u32DscmbId, eKeyType)
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
693*53ee8cc1Swenshuai.xi //  Functions
694*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi // descrambler initial function
697*53ee8cc1Swenshuai.xi //-----------------
698*53ee8cc1Swenshuai.xi // DSCMB_General
699*53ee8cc1Swenshuai.xi //-----------------
700*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
701*53ee8cc1Swenshuai.xi /// Initialize DSCMB module
702*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
703*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
704*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
705*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
706*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_Init(void);
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
709*53ee8cc1Swenshuai.xi /// Finalize DSCMB module
710*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
711*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
712*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
713*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
714*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_Exit(void);
715*53ee8cc1Swenshuai.xi //-----------------
716*53ee8cc1Swenshuai.xi // DSCMB_STB
717*53ee8cc1Swenshuai.xi //-----------------
718*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
719*53ee8cc1Swenshuai.xi /// Set DSCMB CA VID
720*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
721*53ee8cc1Swenshuai.xi /// @param  u32EngId   \b IN: DSCMB engine id.
722*53ee8cc1Swenshuai.xi /// @param  u32CAVid  \b IN: CA VID.
723*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
724*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
725*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
726*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_SetDefaultCAVid(MS_U32 u32EngId, MS_U32 u32CAVid);
727*53ee8cc1Swenshuai.xi 
728*53ee8cc1Swenshuai.xi //-----------------
729*53ee8cc1Swenshuai.xi // DSCMB_ToBeModified: Slot_Ctrl
730*53ee8cc1Swenshuai.xi //-----------------
731*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
732*53ee8cc1Swenshuai.xi /// Allocate a dscrambler filter (Slot). (Update to support share key case)
733*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeModified_Slot_Ctrl
734*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed - Descrambler filter slot
735*53ee8cc1Swenshuai.xi /// @return FALSE : Fail - DRV_DSCMB_FLT_NULL
736*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
737*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32  MDrv_DSCMB2_FltAlloc(MS_U32 u32EngId);
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
740*53ee8cc1Swenshuai.xi /// Allocate a dscrambler filter (Slot). (Only this function can allocate share key slot).
741*53ee8cc1Swenshuai.xi /// (Just keep MDrv_DSCMB2_FltAlloc and refine it)
742*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
743*53ee8cc1Swenshuai.xi /// @param u32EngId  \b IN: DSCMB engine id.
744*53ee8cc1Swenshuai.xi /// @param eFltType    \b IN: Type for descramber filter.
745*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed - Descrambler filter slot.
746*53ee8cc1Swenshuai.xi /// @return FALSE : Fail - DRV_DSCMB_FLT_NULL
747*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
748*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32  MDrv_DSCMB2_FltAlloc_Ex(MS_U32 u32EngId, DSCMB_Flt_Type eFltType);
749*53ee8cc1Swenshuai.xi //-----------------
750*53ee8cc1Swenshuai.xi // DSCMB_Slot_Control
751*53ee8cc1Swenshuai.xi //-----------------
752*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
753*53ee8cc1Swenshuai.xi /// Free a dscrambler slot.
754*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Slot_Control
755*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
756*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
757*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
758*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
759*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
760*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltFree(MS_U32 u32EngId, MS_U32 u32DscmbId);
761*53ee8cc1Swenshuai.xi 
762*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
763*53ee8cc1Swenshuai.xi /// Change descrambler filter type.
764*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
765*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
766*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
767*53ee8cc1Swenshuai.xi /// @param eFltType    \b IN: Type for descramber filter.
768*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
769*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
770*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
771*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltSwitchType(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Flt_Type eFltType);
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
774*53ee8cc1Swenshuai.xi /// Connect DSCMB slot with DMX PID filter by filter index for Enc/Dec used.
775*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Slot_Control
776*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
777*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
778*53ee8cc1Swenshuai.xi /// @param u32FltId          \b IN: DMX PID filter index.
779*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
780*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
781*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
782*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltConnectFltId(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32FltId);
783*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
784*53ee8cc1Swenshuai.xi /// Dis-connect DSCMB slot with DMX PID filter by filter index.
785*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Slot_Control
786*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
787*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
788*53ee8cc1Swenshuai.xi /// @param u32FltId          \b IN: DMX PID filter index.
789*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
790*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
791*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
792*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltDisconnectFltId(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32FltId);
793*53ee8cc1Swenshuai.xi 
794*53ee8cc1Swenshuai.xi // descrambler filter maps to TSP pid
795*53ee8cc1Swenshuai.xi #if !(defined(MSOS_TYPE_OPTEE) || defined(MSOS_TYPE_NUTTX))
796*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
797*53ee8cc1Swenshuai.xi /// Connect DSCMB slot with DMX PID filter by PID for Enc/Dec used.
798*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Slot_Control
799*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
800*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
801*53ee8cc1Swenshuai.xi /// @param u32Pid            \b IN: PID.
802*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
803*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
804*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
805*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltConnectPid(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32Pid);
806*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
807*53ee8cc1Swenshuai.xi /// Dis-connect DSCMB slot with DMX PID filter by PID. (Refine for multi dis-connect case)
808*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeModified_Slot_Ctrl
809*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
810*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
811*53ee8cc1Swenshuai.xi /// @param u32Pid            \b IN: PID.
812*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
813*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
814*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
815*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltDisconnectPid(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32Pid);
816*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
817*53ee8cc1Swenshuai.xi /// Dis-connect DSCMB slot with DMX PID filter by PID. (It will check this PID exist on DMX side or not)
818*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
819*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
820*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
821*53ee8cc1Swenshuai.xi /// @param u32Pid            \b IN: PID.
822*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
823*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
824*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
825*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltDisconnectPid_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32Pid);
826*53ee8cc1Swenshuai.xi #endif
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
829*53ee8cc1Swenshuai.xi /// Set descrambler filter as scrambling/decrambling mode
830*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
831*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
832*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
833*53ee8cc1Swenshuai.xi /// @param eEngType        \b IN: DSCMB engine type.
834*53ee8cc1Swenshuai.xi /// @param stConfig          \b IN: DSCMB algo.
835*53ee8cc1Swenshuai.xi /// @return TRUE - Success
836*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
837*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
838*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetAlgo(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Algo_Cfg stConfig);
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
841*53ee8cc1Swenshuai.xi /// Set descrambler key FSCB
842*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
843*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
844*53ee8cc1Swenshuai.xi /// @param u32DscmbId    \b IN: DSCMB slot.
845*53ee8cc1Swenshuai.xi /// @param eEngType        \b IN: DSCMB engine type.
846*53ee8cc1Swenshuai.xi /// @param eKeyType       \b IN: Descrambler key type
847*53ee8cc1Swenshuai.xi /// @param eForceSCB     \b IN: FSCB type.
848*53ee8cc1Swenshuai.xi /// @return TRUE - Success
849*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
850*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
851*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetKeyFSCB(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, DSCMB_FSCB eForceSCB);
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
854*53ee8cc1Swenshuai.xi /// Set descrambler key
855*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
856*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
857*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
858*53ee8cc1Swenshuai.xi /// @param eEngType       \b IN: DSCMB engine type.
859*53ee8cc1Swenshuai.xi /// @param eKeyType       \b IN: Descrambler key type
860*53ee8cc1Swenshuai.xi /// @param pu8Key          \b IN: pointer to the key (Array)
861*53ee8cc1Swenshuai.xi /// @return TRUE - Success
862*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
863*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
864*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetKey(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, MS_U8* pu8Key);
865*53ee8cc1Swenshuai.xi 
866*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
867*53ee8cc1Swenshuai.xi /// Reset descrambler key
868*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
869*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
870*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
871*53ee8cc1Swenshuai.xi /// @param eEngType       \b IN: DSCMB engine type.
872*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
873*53ee8cc1Swenshuai.xi /// @return TRUE - Success
874*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
875*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
876*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngResetKey(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType);
877*53ee8cc1Swenshuai.xi 
878*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
879*53ee8cc1Swenshuai.xi /// Set descrambler IV key
880*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
881*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
882*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
883*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
884*53ee8cc1Swenshuai.xi /// @param pu8IV            \b IN: pointer to the key. (Instruction Vector)
885*53ee8cc1Swenshuai.xi /// @return TRUE - Success
886*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
887*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
888*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetIV(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8IV);
889*53ee8cc1Swenshuai.xi 
890*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
891*53ee8cc1Swenshuai.xi /// Set descrambler IV key by engine type
892*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
893*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
894*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
895*53ee8cc1Swenshuai.xi /// @param eEngType       \b IN: DSCMB engine type.
896*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
897*53ee8cc1Swenshuai.xi /// @param pu8IV            \b IN: pointer to the key. (Instruction Vector)
898*53ee8cc1Swenshuai.xi /// @return TRUE - Success
899*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
900*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
901*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetIV_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId,  DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, MS_U8* pu8IV);
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
904*53ee8cc1Swenshuai.xi /// Set Riv of HDCP2, which is 64-bits number generated from transmitter
905*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
906*53ee8cc1Swenshuai.xi /// @param u32EngId   \b IN: DSCMB engine id
907*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot
908*53ee8cc1Swenshuai.xi /// @param pu8RIV      \b IN: pointer to 64bit Riv buffer in BIG ENDIAN order
909*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
910*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
911*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
912*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetRIV(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U8* pu8RIV);
913*53ee8cc1Swenshuai.xi 
914*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
915*53ee8cc1Swenshuai.xi /// Switch descrambler engine type
916*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
917*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
918*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
919*53ee8cc1Swenshuai.xi /// @param eUppSwitch    \b IN: Up: Engine type.
920*53ee8cc1Swenshuai.xi /// @param eLowSwitch    \b IN: Low: Engine type.
921*53ee8cc1Swenshuai.xi /// @return TRUE - Success
922*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
923*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
924*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetSwitch(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eUppSwitch, DSCMB_Eng_Type eLowSwitch);
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
927*53ee8cc1Swenshuai.xi /// Set descrambler engine FSCB
928*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
929*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
930*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
931*53ee8cc1Swenshuai.xi /// @param eForceSCB     \b IN: FSCB type.
932*53ee8cc1Swenshuai.xi /// @return TRUE - Success
933*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
934*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
935*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngSetFSCB(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_FSCB eForceSCB );
936*53ee8cc1Swenshuai.xi 
937*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
938*53ee8cc1Swenshuai.xi /// Enable/disable descrambler key
939*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
940*53ee8cc1Swenshuai.xi /// @param u32EngId        \b IN: DSCMB engine id.
941*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
942*53ee8cc1Swenshuai.xi /// @param eEngType       \b IN: DSCMB engine type.
943*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
944*53ee8cc1Swenshuai.xi /// @param bEN      \b IN: enable or disable
945*53ee8cc1Swenshuai.xi /// @return TRUE - Success
946*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
947*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
948*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_EngEnableKey(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, MS_BOOL bEn);
949*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
950*53ee8cc1Swenshuai.xi /// Set descrambler dual path flow
951*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
952*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
953*53ee8cc1Swenshuai.xi /// @param eCaMode   \b IN: DSCMB CA mode.
954*53ee8cc1Swenshuai.xi /// @param ePvrSrcTsif     \b IN: PVR source.
955*53ee8cc1Swenshuai.xi /// @return TRUE - Success
956*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
957*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
958*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_CAPVR_FlowSet(MS_U32 u32EngId, DSCMB_CAPVR_MODE eCaMode, DSCMB_TSIF ePvrSrcTsif);
959*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
960*53ee8cc1Swenshuai.xi /// Disable stream dual path
961*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
962*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
963*53ee8cc1Swenshuai.xi /// @param u32FltId          \b IN: DMX PID filter index.
964*53ee8cc1Swenshuai.xi /// @return TRUE - Success
965*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
966*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
967*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_DualPath_Enable(MS_U32 u32EngId, MS_U32 u32FltId);
968*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
969*53ee8cc1Swenshuai.xi /// Enable stream dual path
970*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
971*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
972*53ee8cc1Swenshuai.xi /// @param u32FltId          \b IN: DMX PID filter index.
973*53ee8cc1Swenshuai.xi /// @return TRUE - Success
974*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
975*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
976*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_DualPath_Disable(MS_U32 u32EngId, MS_U32 u32FltId);
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi 
979*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
980*53ee8cc1Swenshuai.xi /// Set descrambler filter as scrambling/decrambling mode.
981*53ee8cc1Swenshuai.xi /// Default filter mode is descrambling if this function is not specified.
982*53ee8cc1Swenshuai.xi /// This function should be invoked before MDrv_DSCMB_FltTypeSet.
983*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
984*53ee8cc1Swenshuai.xi /// @param u32DscmbId \b IN: Descrambler filter ID obtained from MDrv_DSCMB_FltAlloc
985*53ee8cc1Swenshuai.xi /// @param DscmbType \b IN: The descrambler algorithm
986*53ee8cc1Swenshuai.xi /// @return TRUE - Success
987*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
988*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
989*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltDscmb(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_BOOL bDscmb);
990*53ee8cc1Swenshuai.xi //-----------------
991*53ee8cc1Swenshuai.xi // DSCMB_Key
992*53ee8cc1Swenshuai.xi //-----------------
993*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
994*53ee8cc1Swenshuai.xi /// Set descrambler algorithm by common predefined descramble type.
995*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
996*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
997*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
998*53ee8cc1Swenshuai.xi /// @param DscmbType    \b IN: The descrambler algorithm
999*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1000*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1001*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1002*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltTypeSet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Type DscmbType);
1003*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1004*53ee8cc1Swenshuai.xi /// Set descrambler key of the Dscmb ID
1005*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1006*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
1007*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
1008*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
1009*53ee8cc1Swenshuai.xi /// @param pu8Key         \b IN: pointer to the key (Array)
1010*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1011*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1012*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1013*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltKeySet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8Key);
1014*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1015*53ee8cc1Swenshuai.xi /// Reset descrambler key of the Dscmb ID. (It will set key to 0)
1016*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1017*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
1018*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
1019*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
1020*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1021*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1022*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1023*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltKeyReset(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType);
1024*53ee8cc1Swenshuai.xi 
1025*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1026*53ee8cc1Swenshuai.xi /// Set descrambler initial vector of the Dscmb ID
1027*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1028*53ee8cc1Swenshuai.xi /// @param u32EngId       \b IN: DSCMB engine id
1029*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: DSCMB slot.
1030*53ee8cc1Swenshuai.xi /// @param eKeyType      \b IN: Descrambler key type
1031*53ee8cc1Swenshuai.xi /// @param pu8IV            \b IN: pointer to the key. (Instruction Vector)
1032*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1033*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1034*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1035*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_FltIVSet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8IV);
1036*53ee8cc1Swenshuai.xi 
1037*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1038*53ee8cc1Swenshuai.xi /// Get / Set dscrambler miscellaneous options
1039*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1040*53ee8cc1Swenshuai.xi /// @param u32EngId      \b IN: DSCMB engine id.
1041*53ee8cc1Swenshuai.xi /// @param Option Type  \b IN: Option type
1042*53ee8cc1Swenshuai.xi /// @param pInput          \b IN: intput parameter
1043*53ee8cc1Swenshuai.xi /// @param pOutput        \b OUT: result for the query type
1044*53ee8cc1Swenshuai.xi /// @param bSet           \b IN : Set or Get
1045*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1046*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1047*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1048*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_OptConfig(MS_U32 u32EngId, DSCMB_Option eOpt, void* pInput, void* pOutput, MS_BOOL bSet);
1049*53ee8cc1Swenshuai.xi 
1050*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1051*53ee8cc1Swenshuai.xi /// Query dscrambler capability information
1052*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1053*53ee8cc1Swenshuai.xi /// @param u32EngId      \b IN: DSCMB engine id.
1054*53ee8cc1Swenshuai.xi /// @param eQueryType  \b IN: type for query
1055*53ee8cc1Swenshuai.xi /// @param pInput          \b IN: intput parameter
1056*53ee8cc1Swenshuai.xi /// @param pOutput        \b OUT: result for the query type
1057*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1058*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1059*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1060*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_GetCap(MS_U32 u32EngId, DSCMB_Query_Type eQueryType, void* pInput, void* pOutput);
1061*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1062*53ee8cc1Swenshuai.xi /// Get DSCMB driver library information
1063*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1064*53ee8cc1Swenshuai.xi /// @param ppVersion \b OUT: Descrambler library version infomation
1065*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1066*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1067*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1068*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_GetLibVer(const MSIF_Version **ppVersion);
1069*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1070*53ee8cc1Swenshuai.xi /// Set DSCMB Debug Level.
1071*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1072*53ee8cc1Swenshuai.xi /// @param  u32Level  \b IN: debug level.
1073*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
1074*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
1075*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1076*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_SetDBGLevel(MS_U32 u32Level);
1077*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1078*53ee8cc1Swenshuai.xi /// Check the status between DSCMB slot and DMX PID filter.
1079*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1080*53ee8cc1Swenshuai.xi /// @param  u32EngId      \b IN: DSCMB engine id.
1081*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: descramble id
1082*53ee8cc1Swenshuai.xi /// @param u32TspFltId    \b IN: tsp filter id
1083*53ee8cc1Swenshuai.xi /// @return TRUE  - Success (connect)
1084*53ee8cc1Swenshuai.xi /// @return FALSE - Failure (not connect)
1085*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1086*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_GetConnectStatus(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32TspFltId);
1087*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1088*53ee8cc1Swenshuai.xi /// Get a valid PID slot map index
1089*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1090*53ee8cc1Swenshuai.xi /// @param  u32EngId      \b IN: DSCMB engine id.
1091*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: descramble id
1092*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed - Descrambler PID slot map index.
1093*53ee8cc1Swenshuai.xi /// @return FALSE : Fail - DRV_DSCMB_FLT_NULL
1094*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1095*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32  MDrv_DSCMB2_GetPidSlotMapIndex(MS_U32 u32EngId, MS_U32 u32DscmbId);
1096*53ee8cc1Swenshuai.xi 
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1099*53ee8cc1Swenshuai.xi /// Set rounds of descrambler algorithm MULTI2
1100*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1101*53ee8cc1Swenshuai.xi /// @param u32EngId     \b IN: DSCMB engine id
1102*53ee8cc1Swenshuai.xi /// @param u32Round    \b IN: # rounds to apply, multiple of 4 and maximum value is 252
1103*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1104*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1105*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1106*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_Multi2_SetRound(MS_U32 u32EngId, MS_U32 u32Round);
1107*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1108*53ee8cc1Swenshuai.xi /// Set system key of descrambler algorithm MULTI2
1109*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1110*53ee8cc1Swenshuai.xi /// @param u32EngId     \b IN: DSCMB engine id
1111*53ee8cc1Swenshuai.xi /// @param u32SysKey  \b IN: the array of system key (u8SysKey[32]): there are 32 group system key(8-bit should be 32 group) should be set.
1112*53ee8cc1Swenshuai.xi /// @[0-31][32-63][64-95][96-127][128-159][160-191][192-223][224-255] and the bit order is MSB.
1113*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1114*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1115*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1116*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_Multi2_SetSystemKey(MS_U32 u32EngId, MS_U8* u8Syskey);
1117*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1118*53ee8cc1Swenshuai.xi /// Set Riv of HDCP2, which is 64-bits number generated from transmitter
1119*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1120*53ee8cc1Swenshuai.xi /// @param u32EngId   \b IN: DSCMB engine id
1121*53ee8cc1Swenshuai.xi /// @param pu8RIV      \b IN: pointer to 64bit Riv buffer in BIG ENDIAN order
1122*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1123*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1124*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1125*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_HDCP2_SetRIV(MS_U32 u32EngId, MS_U8* pu8RIV);
1126*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1127*53ee8cc1Swenshuai.xi /// Set Riv of HDCP2, which is 64-bits number generated from transmitter
1128*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_Key
1129*53ee8cc1Swenshuai.xi /// @param u32EngId   \b IN: DSCMB engine id
1130*53ee8cc1Swenshuai.xi /// @param u32EngId   \b IN: DSCMB slot
1131*53ee8cc1Swenshuai.xi /// @param pu8RIV      \b IN: pointer to 64bit Riv buffer in BIG ENDIAN order
1132*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1133*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1134*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1135*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_HDCP2_SetRIV_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U8* pu8RIV);
1136*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1137*53ee8cc1Swenshuai.xi /// Enable Record stream after stream is descrambled, only supported when CA venders do not prohibat this feature.
1138*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1139*53ee8cc1Swenshuai.xi /// @param u32EngId  \b IN: DSCMB engine id
1140*53ee8cc1Swenshuai.xi /// @param Enable      \b IN: for enabe/disable record mechanism.
1141*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1142*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1143*53ee8cc1Swenshuai.xi /// @Note: Function can only be called before any record function is called.
1144*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1145*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_PVR_RecCtrl(MS_U32 u32EngId, MS_BOOL Enable);
1146*53ee8cc1Swenshuai.xi //-----------------
1147*53ee8cc1Swenshuai.xi // DSCMB_STR
1148*53ee8cc1Swenshuai.xi //-----------------
1149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1150*53ee8cc1Swenshuai.xi /// Control DSCMB STR functions.
1151*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STR
1152*53ee8cc1Swenshuai.xi /// @param  u16PowerState  \b IN: STR power mode. (to control STR suspend & resume case.)
1153*53ee8cc1Swenshuai.xi /// @return : Utopia status - UTOPIA_STATUS_SUCCESS (Succeed) or UTOPIA_STATUS_FAIL (Fail)
1154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1155*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32  MDrv_DSCMB2_SetPowerState(EN_POWER_MODE u16PowerState);
1156*53ee8cc1Swenshuai.xi 
1157*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1158*53ee8cc1Swenshuai.xi /// Get scrambler level of a pid filter ID
1159*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1160*53ee8cc1Swenshuai.xi /// @param u32EngId      \b IN: DSCMB engine id.
1161*53ee8cc1Swenshuai.xi /// @param u32PidFltId    \b IN: Pid filter ID obtained from MApi_DMX_Open/MDrv_TSP_PidFlt_Alloc
1162*53ee8cc1Swenshuai.xi /// @param pScmbLevel   \b OUT: The output scrambler level
1163*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1164*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1165*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1166*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_PidFlt_ScmbStatus(MS_U32 u32EngId, MS_U32 u32PidFltId, SCMB_Level* pScmbLevel);
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1169*53ee8cc1Swenshuai.xi /// Get Dscmb driver status (There is no any code use this parameter)
1170*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1171*53ee8cc1Swenshuai.xi /// @param pStatus   \b OUT: Descrambler status
1172*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1173*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1174*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1175*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_GetStatus(DSCMB_Status *pStatus);
1176*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1177*53ee8cc1Swenshuai.xi /// Get Dscmb driver information
1178*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_General
1179*53ee8cc1Swenshuai.xi /// @return DSCMB_Info
1180*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1181*53ee8cc1Swenshuai.xi DLL_PUBLIC const DSCMB_Info* MDrv_DSCMB_GetInfo(void);
1182*53ee8cc1Swenshuai.xi 
1183*53ee8cc1Swenshuai.xi 
1184*53ee8cc1Swenshuai.xi //-----------------
1185*53ee8cc1Swenshuai.xi // DSCMB_STB_Kladder
1186*53ee8cc1Swenshuai.xi //-----------------
1187*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1188*53ee8cc1Swenshuai.xi /// KLadder_ETSI
1189*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1190*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1191*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1192*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1193*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_KLadder_ETSI(DSCMB_KLCfg_All* KLCfg , MS_U8 *ACPU_Out, MS_U8 *pu8Nonce, MS_U8 * pu8Response, DSCMB_KL_Status* u32Status );
1194*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1195*53ee8cc1Swenshuai.xi /// KLadder_AtomicExec
1196*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1197*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1198*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1199*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1200*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_KLadder_AtomicExec(DSCMB_KLCfg_All* KLCfg , MS_U8 *ACPU_Out, DSCMB_KL_Status* u32Status );
1201*53ee8cc1Swenshuai.xi 
1202*53ee8cc1Swenshuai.xi 
1203*53ee8cc1Swenshuai.xi //-----------------
1204*53ee8cc1Swenshuai.xi // DSCMB_ToBeRemove
1205*53ee8cc1Swenshuai.xi //-----------------
1206*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1207*53ee8cc1Swenshuai.xi /// Initialize DSCMB module. (Already have another function: DSCMB2_Init)
1208*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1209*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
1210*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
1211*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1212*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_Init(void);
1213*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1214*53ee8cc1Swenshuai.xi /// Finalize DSCMB module. (Already have another function: DSCMB2_Exit)
1215*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1216*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
1217*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
1218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1219*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_Exit(void);
1220*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1221*53ee8cc1Swenshuai.xi /// Get Dscmb driver library information. (Already have another function: DSCMB2_GetLibVer)
1222*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1223*53ee8cc1Swenshuai.xi /// @param ppVersion \b OUT: Descrambler library version infomation
1224*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1225*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1226*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1227*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_GetLibVer(const MSIF_Version **ppVersion);
1228*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1229*53ee8cc1Swenshuai.xi /// Set DSCMB Debug Level. (Already have another function: DSCMB2_SetDBGLevel)
1230*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1231*53ee8cc1Swenshuai.xi /// @param  u32Level  \b IN: debug level.
1232*53ee8cc1Swenshuai.xi /// @return TRUE  : Succeed
1233*53ee8cc1Swenshuai.xi /// @return FALSE : Fail
1234*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1235*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_SetDBGLevel(MS_U32 u32Level);
1236*53ee8cc1Swenshuai.xi 
1237*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1238*53ee8cc1Swenshuai.xi /// Check the status between DSCMB slot and DMX PID filter.
1239*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1240*53ee8cc1Swenshuai.xi /// @param  u32EngId      \b IN: DSCMB engine id.
1241*53ee8cc1Swenshuai.xi /// @param u32DscmbId   \b IN: descramble id
1242*53ee8cc1Swenshuai.xi /// @param u32TspFltId    \b IN: tsp filter id
1243*53ee8cc1Swenshuai.xi /// @return TRUE  - Success (connect)
1244*53ee8cc1Swenshuai.xi /// @return FALSE - Failure (not connect)
1245*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1246*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_GetConnectStatus(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32TspFltId);
1247*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1248*53ee8cc1Swenshuai.xi /// KLadder_AtomicExec
1249*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1250*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1251*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1252*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1253*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_AtomicExec(DSCMB_KLCfg_All* KLCfg , MS_U8 *ACPU_Out, DSCMB_KL_Status* u32Status);
1254*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1255*53ee8cc1Swenshuai.xi /// KLadder_Reset
1256*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1257*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1258*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1259*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1260*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Reset(void);
1261*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1262*53ee8cc1Swenshuai.xi /// KLadder_SetInput
1263*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1264*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1265*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1266*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1267*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_SetInput(MS_U32 u32Level, MS_U8* pu8In, MS_U32 u32InLen);
1268*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1269*53ee8cc1Swenshuai.xi /// KLadder_SetKey
1270*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1271*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1272*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1273*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1274*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_SetKey(DSCMB_KLSrc KLSrc, MS_U8* pu8Key, MS_U32 u32KeyLen);
1275*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1276*53ee8cc1Swenshuai.xi /// KLadder_SetDst
1277*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1278*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1279*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1280*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1281*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_SetDst(DSCMB_KLDst KLDst);
1282*53ee8cc1Swenshuai.xi 
1283*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1284*53ee8cc1Swenshuai.xi /// KLadder_SetConfig
1285*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1286*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1287*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1288*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1289*53ee8cc1Swenshuai.xi DLL_PUBLIC void    MDrv_DSCMB_KLadder_SetConfig(DSCMB_KLCfg *KLCfg);
1290*53ee8cc1Swenshuai.xi 
1291*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1292*53ee8cc1Swenshuai.xi /// KLadder_Start
1293*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1294*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1295*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1296*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1297*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Start(void);
1298*53ee8cc1Swenshuai.xi 
1299*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1300*53ee8cc1Swenshuai.xi /// KLadder_IsComplete
1301*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1302*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1303*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1304*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1305*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_IsComplete(void);
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1308*53ee8cc1Swenshuai.xi /// KLadder_Output_Start
1309*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1310*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1311*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1312*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1313*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Output_Start(MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType);
1314*53ee8cc1Swenshuai.xi 
1315*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1316*53ee8cc1Swenshuai.xi /// KLadder_Output_IsComplete
1317*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1318*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1319*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1320*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1321*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Output_IsComplete(void);
1322*53ee8cc1Swenshuai.xi 
1323*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1324*53ee8cc1Swenshuai.xi /// KLadder_Output_Stop
1325*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1326*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1327*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1328*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1329*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Output_Stop(void);
1330*53ee8cc1Swenshuai.xi 
1331*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1332*53ee8cc1Swenshuai.xi /// KLadder_ResetAcpuAck
1333*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1334*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1335*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1336*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1337*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_ResetAcpuAck(void);
1338*53ee8cc1Swenshuai.xi 
1339*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1340*53ee8cc1Swenshuai.xi /// KLadder_ReadDataFromAcpu
1341*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1342*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1343*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1344*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1345*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_ReadDataFromAcpu(MS_U8* pu8Out);
1346*53ee8cc1Swenshuai.xi 
1347*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1348*53ee8cc1Swenshuai.xi /// KLadder_Stop
1349*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1350*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1351*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1352*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1353*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Stop(void); // write KTE
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1356*53ee8cc1Swenshuai.xi /// KLadder_Lock
1357*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1358*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1359*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1360*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1361*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Lock(void);
1362*53ee8cc1Swenshuai.xi 
1363*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1364*53ee8cc1Swenshuai.xi /// KLadder_Unlock
1365*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_Kladder
1366*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1367*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1368*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1369*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_KLadder_Unlock(void);
1370*53ee8cc1Swenshuai.xi 
1371*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1372*53ee8cc1Swenshuai.xi /// Set the PID to be replaced
1373*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1374*53ee8cc1Swenshuai.xi /// @param u32PidPrim     \b IN: The packet with this target PID(u32PidPrim) will be replaced in the field of PID by u32Pid2ndary
1375*53ee8cc1Swenshuai.xi /// @param u32Pid2ndary  \b IN: The packet with this target PID(u32PidPrim) will be replaced in the field of PID by u32Pid2ndary
1376*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1377*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1378*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1379*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_2ndarySet(MS_U32 u32PidPrim, MS_U32 u32Pid2ndary);
1380*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1381*53ee8cc1Swenshuai.xi /// Reset the PID to be replaced
1382*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1383*53ee8cc1Swenshuai.xi /// @param u32PidPrim\b   IN: Reset the replacement of PID (u32PidPrim) set by MDrv_DSCMB_2ndarySet
1384*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1385*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1386*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1387*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_2ndaryReset(MS_U32 u32PidPrim);
1388*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1389*53ee8cc1Swenshuai.xi /// The low-level implementation of @ref MDrv_DSCMB_FltTypeSet [RESERVED]
1390*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1391*53ee8cc1Swenshuai.xi /// @param u32DscmbId \b IN: descrambler filter ID obtained from MDrv_DSCMB_FltAlloc
1392*53ee8cc1Swenshuai.xi /// @param eKeyType \b IN: key type for this setting
1393*53ee8cc1Swenshuai.xi /// @param u32SW0 \b IN: The descramlber switch configuration
1394*53ee8cc1Swenshuai.xi /// @param u32SW1 \b IN: reserved
1395*53ee8cc1Swenshuai.xi /// @param u32SW2 \b IN: reserved
1396*53ee8cc1Swenshuai.xi /// @return TRUE  - Success
1397*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1398*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1399*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB_SlotSwitchWrite(MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U32 u32SW0, MS_U32 u32SW1, MS_U32 u32SW2);
1400*53ee8cc1Swenshuai.xi 
1401*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1402*53ee8cc1Swenshuai.xi /// Set record buffer
1403*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1404*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1405*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1406*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1407*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_SetRecBuf(MS_U32 u32EngId , MS_U32 u32Start, MS_U32 u32Size);
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1410*53ee8cc1Swenshuai.xi /// Record control
1411*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1412*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1413*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1414*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1415*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_RecCtrl(MS_U32 u32EngId, MS_BOOL bEnable);
1416*53ee8cc1Swenshuai.xi 
1417*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1418*53ee8cc1Swenshuai.xi /// Get record write pointer
1419*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_STB_General
1420*53ee8cc1Swenshuai.xi /// @return TRUE - Success
1421*53ee8cc1Swenshuai.xi /// @return FALSE - Failure
1422*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1423*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_BOOL MDrv_DSCMB2_GetRecWptr(MS_U32 u32EngId, MS_U32* pu32Write);
1424*53ee8cc1Swenshuai.xi 
1425*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1426*53ee8cc1Swenshuai.xi /// Control DSCMB STR functions. (Already have another function: DSCMB2_SetPowerState)
1427*53ee8cc1Swenshuai.xi /// @ingroup DSCMB_ToBeRemove
1428*53ee8cc1Swenshuai.xi /// @param  u16PowerState  \b IN: STR power mode. (to control STR suspend & resume case.)
1429*53ee8cc1Swenshuai.xi /// @return : Utopia status - UTOPIA_STATUS_SUCCESS (Succeed) or UTOPIA_STATUS_FAIL (Fail)
1430*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1431*53ee8cc1Swenshuai.xi DLL_PUBLIC MS_U32  MApi_DSCMB_SetPowerState(EN_POWER_MODE u16PowerState);
1432*53ee8cc1Swenshuai.xi 
1433*53ee8cc1Swenshuai.xi 
1434*53ee8cc1Swenshuai.xi #ifdef __cplusplus
1435*53ee8cc1Swenshuai.xi }
1436*53ee8cc1Swenshuai.xi #endif
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi #endif
1439