1*53ee8cc1Swenshuai.xi #ifndef __DSCMB_PRIVATE__ 2*53ee8cc1Swenshuai.xi #define __DSCMB_PRIVATE__ 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include "halDSCMB.h" 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi #define MAGIC_NUM 0x12345678 7*53ee8cc1Swenshuai.xi 8*53ee8cc1Swenshuai.xi typedef enum { 9*53ee8cc1Swenshuai.xi E_DSCMB_RESOURCE, 10*53ee8cc1Swenshuai.xi } eDscmbResourceId; 11*53ee8cc1Swenshuai.xi 12*53ee8cc1Swenshuai.xi typedef struct 13*53ee8cc1Swenshuai.xi { 14*53ee8cc1Swenshuai.xi MS_U32 u32SlotIdOdd; 15*53ee8cc1Swenshuai.xi MS_U32 u32SlotIdEven; 16*53ee8cc1Swenshuai.xi MS_U32 u32SlotIdClear; 17*53ee8cc1Swenshuai.xi MS_U32 u32PidFltIdNum; 18*53ee8cc1Swenshuai.xi MS_BOOL bUsed; 19*53ee8cc1Swenshuai.xi MS_BOOL bDscmb; 20*53ee8cc1Swenshuai.xi MS_U32 u32Tsid; 21*53ee8cc1Swenshuai.xi DSCMB_Flt_Type eFltType; 22*53ee8cc1Swenshuai.xi MS_U32 u32CAVid; 23*53ee8cc1Swenshuai.xi MS_U32 u32RIVIdx; 24*53ee8cc1Swenshuai.xi MS_BOOL bSecure; 25*53ee8cc1Swenshuai.xi } stDscmbTspMap; 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi typedef struct 28*53ee8cc1Swenshuai.xi { 29*53ee8cc1Swenshuai.xi MS_U32 u8DscmbId; 30*53ee8cc1Swenshuai.xi MS_U8 u8TsId; 31*53ee8cc1Swenshuai.xi MS_U8 u8CaVid; 32*53ee8cc1Swenshuai.xi MS_U8 u8CaDestUpp; 33*53ee8cc1Swenshuai.xi MS_U8 u8CaDestLow; 34*53ee8cc1Swenshuai.xi } stTspFltInfo; 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi typedef struct _DSCMB_RESOURCE_PRIVATE 37*53ee8cc1Swenshuai.xi { 38*53ee8cc1Swenshuai.xi stTspFltInfo u32PidFlt2Dscmb[HAL_DSCMB_PIDFLT_NUM]; 39*53ee8cc1Swenshuai.xi stDscmbTspMap DscmbTspMap[HAL_DSCMB_ENG_NUM][HAL_DSCMB_KTE_MAX]; 40*53ee8cc1Swenshuai.xi MS_BOOL bFreeSlot[HAL_DSCMB_KTE_MAX]; 41*53ee8cc1Swenshuai.xi MS_BOOL bFreeRIVSlot[HAL_DSCMB_RIV_MAX]; 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi MS_U32 u32Cavid; 44*53ee8cc1Swenshuai.xi MS_BOOL bInited_Drv; 45*53ee8cc1Swenshuai.xi MS_U32 u32Magic; 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi } DSCMB_RESOURCE_PRIVATE; 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi typedef struct _DSCMB_INSTANT_PRIVATE 51*53ee8cc1Swenshuai.xi { 52*53ee8cc1Swenshuai.xi 53*53ee8cc1Swenshuai.xi } DSCMB_INSTANT_PRIVATE; 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi // descrambler initial function 57*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_Init(void); 58*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_InitBySWFlag(MS_BOOL bSWInit); 59*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_Exit(void); 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi // descrambler filter management 62*53ee8cc1Swenshuai.xi MS_U32 _MDrv_DSCMB2_FltAlloc_Ex(MS_U32 u32EngId, DSCMB_Flt_Type eFltType); 63*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltFree(MS_U32 u32EngId, MS_U32 u32DscmbId); 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi // descrambler filter maps to TSP pid 66*53ee8cc1Swenshuai.xi #if !(defined(MSOS_TYPE_OPTEE) || defined(MSOS_TYPE_NUTTX)) 67*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltConnectPid(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32Pid); 68*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltDisconnectPid_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32Pid); 69*53ee8cc1Swenshuai.xi #endif 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi // descrambler filter maps to TSP filter id 72*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltConnectFltId(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32FltId); 73*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltDisconnectFltId(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32FltId); 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_SetDefaultCAVid(MS_U32 u32EngId, MS_U32 u32CAVid); 76*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetAlgo(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Algo_Cfg stConfig); 77*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetKeyFSCB(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, DSCMB_FSCB eForceSCB); 78*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetKey(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, MS_U8* pu8Key); 79*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngResetKey(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType); 80*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetIV(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8IV); 81*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetIV_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eEngType, DSCMB_Key_Type eKeyType, MS_U8* pu8IV); 82*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetFSCB(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_FSCB eForceSCB ); 83*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_EngSetSwitch(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Eng_Type eUppSwitch ,DSCMB_Eng_Type eLowSwitch); 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi // descrambler for enable dual path 86*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_CAPVR_FlowSet(MS_U32 u32EngId, DSCMB_CAPVR_MODE eCaMode, DSCMB_TSIF ePvrSrcTSIf); 87*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_DualPath_Enable(MS_U32 u32EngId, MS_U32 u32FltId); 88*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_DualPath_Disable(MS_U32 u32EngId, MS_U32 u32FltId); 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi // Set descrambler filter as scrambling/decrambling mode 91*53ee8cc1Swenshuai.xi // Default filter mode is descrambling if this function is not specified 92*53ee8cc1Swenshuai.xi // This function should be invoked before MDrv_DSCMB_FltTypeSet 93*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltDscmb(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_BOOL bDscmb); 94*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltTypeSet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Type); 95*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltKeySet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8Key); 96*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltKeyReset(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType); 97*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_FltIVSet(MS_U32 u32EngId, MS_U32 u32DscmbId, DSCMB_Key_Type eKeyType, MS_U8* pu8IV); 98*53ee8cc1Swenshuai.xi 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi // descrambler query function 101*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_GetLibVer(const MSIF_Version **ppVersion); 102*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_SetDBGLevel(MS_U32 u32Level); 103*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_GetCap(MS_U32 u32EngId, DSCMB_Query_Type eQueryType, void* pInput, void* pOutput); 104*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_GetConnectStatus(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U32 u32TspFltId); 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi // descrambler altorithm related 107*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_Multi2_SetRound(MS_U32 u32EngId, MS_U32 u32Round); 108*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_Multi2_SetSystemKey(MS_U32 u32EngId, MS_U8* pu8Syskey); 109*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_ES_SetStaticKey(MS_U32 u32EngId, MS_U8* pu8Statickey); 110*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_HDCP2_SetRIV(MS_U32 u32EngId, MS_U8* pu8RIV); 111*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_HDCP2_SetRIV_Ex(MS_U32 u32EngId, MS_U32 u32DscmbId, MS_U8* pu8RIV); 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_PVR_RecCtrl(MS_U32 u32EngId, MS_BOOL Enable); 114*53ee8cc1Swenshuai.xi MS_U32 _MDrv_DSCMB2_SetPowerState(EN_POWER_MODE u16PowerState); 115*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_PidFlt_ScmbStatus(MS_U32 u32EngId, MS_U32 u32PidFltId, SCMB_Level* pScmbLevel); 116*53ee8cc1Swenshuai.xi 117*53ee8cc1Swenshuai.xi 118*53ee8cc1Swenshuai.xi // key ladder 119*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_KLadder_AtomicExec(DSCMB_KLCfg_All* KLCfg , MS_U8 *ACPU_Out, DSCMB_KL_Status* u32Status ); 120*53ee8cc1Swenshuai.xi MS_BOOL _MDrv_DSCMB2_KLadder_ETSI(DSCMB_KLCfg_All* KLCfg , MS_U8 *ACPU_Out, MS_U8 *pu8Nonce, MS_U8 *pu8Response, DSCMB_KL_Status* u32Status); 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi #endif // __DSCMB_PRIVATE__ 124*53ee8cc1Swenshuai.xi 125