RET_CODE video_decoder_ioctl(unsigned long io_cmd, unsigned long param1, unsigned long param2) { UINT32 i; UINT32 common_desc[sizeof(desc_vdec_ioctl)]; UINT32 *desc = (UINT32 *)common_desc; UINT32 *b = (UINT32 *)desc_vdec_ioctl; memcpy(common_desc, desc_vdec_ioctl, sizeof(desc_vdec_ioctl)); for(i = 0; i < sizeof(desc_vdec_ioctl)/sizeof(UINT32); i++) { desc[i] = b[i]; } switch(io_cmd) { case VDEC_IO_SET_SCALE_MODE: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, 0); DESC_STATIC_STRU_SET_SIZE(common_desc, 1, sizeof(struct VDecPIPInfo)); break; case CONTAINER_IO_CONTROL_GET_TIME_MS: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(unsigned long)); break; case VDEC_IO_GET_STATUS: DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(struct VDec_StatusInfo)); break; case VDEC_IO_GET_MODE: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, 4); break; case CONTAINER_IO_CONTROL_GET_CHAPTER_INFO: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(DEC_CHAPTER_INFO)); break; case CONTAINER_IO_CONTROL_SET_AVSYNC_DELAY: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, 0); DESC_STATIC_STRU_SET_SIZE(common_desc, 1, 0); break; case CONTAINER_IO_CONTROL_EN_AC3_BS_MODE: default: desc = NULL; break; } jump_to_func(NULL, ali_rpc_call, io_cmd, (LIB_PE_ADV_VIDEO_ENGINE_MODULE<<24)|(3<<16)|FUNC_VIDEO_ENGINE_DECODER_CONTROL, desc); }
RET_CODE ce_ioctl(pCE_DEVICE pCeDev,UINT32 cmd,UINT32 param) { UINT32 i; UINT32 common_desc[sizeof(ce_io_control)]; UINT32 *desc = (UINT32 *)common_desc; UINT32 *b = (UINT32 *)ce_io_control; for(i = 0; i < sizeof(ce_io_control)/sizeof(UINT32); i++) { desc[i] = b[i]; } switch (cmd) { case IO_OTP_ROOT_KEY_GET: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(OTP_PARAM)); break; case IO_CRYPT_DATA_INPUT: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(DATA_PARAM)); break; case IO_CRYPT_PARAM_SET: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(DES_PARAM)); break; case IO_CRYPT_SECOND_KEY_CONFIG: DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(CE_KEY_PARAM)); break; case IO_SECOND_KEY_GENERATE: desc = NULL ; break; case IO_CRYPT_DEBUG_GET_KEY: DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(CE_DEBUG_KEY_INFO)); break; case IO_CRYPT_POS_IS_OCCUPY: { DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(CE_POS_STS_PARAM)); } break; case IO_CRYPT_POS_SET_USED: { desc=NULL; } break; case IO_CRYPT_POS_SET_IDLE: { desc=NULL; } break; case IO_CRYPT_FOUND_FREE_POS: { DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(CE_FOUND_FREE_POS_PARAM)); } break; case IO_DECRYPT_PVR_USER_KEY: { DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(CE_PVR_KEY_PARAM)); } break; default: SDBBP(); break; } jump_to_func(NULL, OS_hld_caller, pCeDev, CE_NPARA(3)|FUNC_CE_IOCTL, desc); }
int ali_ce_ioctl(CE_DEVICE *pCeDev,__u32 cmd,__u32 param) { #if !defined(CONFIG_ALI_RPCNG) __u32 i; __u32 common_desc[sizeof(ce_io_control)]; __u32 *desc = (__u32 *)common_desc; __u32 *b = (__u32 *)ce_io_control; for(i = 0; i < sizeof(ce_io_control)/sizeof(__u32); i++) { desc[i] = b[i]; } switch (CE_IO_CMD(cmd)) { case CE_IO_CMD(IO_OTP_ROOT_KEY_GET): DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(OTP_PARAM)); break; case CE_IO_CMD(IO_CRYPT_DEBUG_GET_KEY): DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(CE_DEBUG_KEY_INFO)); break; case CE_IO_CMD(IO_CRYPT_POS_IS_OCCUPY): DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, sizeof(CE_POS_STS_PARAM)); break; case CE_IO_CMD(IO_CRYPT_POS_SET_USED): desc=NULL; break; case CE_IO_CMD(IO_CRYPT_POS_SET_IDLE): desc=NULL; break; case CE_IO_CMD(IO_CRYPT_FOUND_FREE_POS): DESC_OUTPUT_STRU_SET_SIZE(common_desc, 0, \ sizeof(CE_FOUND_FREE_POS_PARAM)); break; case CE_IO_CMD(IO_DECRYPT_PVR_USER_KEY): DESC_STATIC_STRU_SET_SIZE(common_desc, 0, sizeof(CE_PVR_KEY_PARAM)); break; default: { ALI_CE_RPC_DEBUG("CE rpc Error:invalid cmd\n"); break; } } jump_to_func(NULL, ali_rpc_call, pCeDev, CE_NPARA(3)|FUNC_CE_IOCTL, desc); #else RET_CODE ret = RET_FAILURE; union { OTP_PARAM otp; CE_PVR_KEY_PARAM ce_pvr_key; CE_FOUND_FREE_POS_PARAM kpos_param; CE_DEBUG_KEY_INFO kdebug_param; CE_POS_STS_PARAM ksts_param; }tmp; Param p1; Param p2; Param p3; RPC_PARAM_UPDATE(p1, PARAM_IN, PARAM_UINT32, sizeof(long), (void *)&pCeDev); RPC_PARAM_UPDATE(p2, PARAM_IN, PARAM_UINT32, sizeof(long), (void *)&cmd); RPC_PARAM_UPDATE(p3, PARAM_IN, PARAM_UINT32, sizeof(long), (void *)¶m); switch (CE_IO_CMD(cmd)) { case CE_IO_CMD(IO_OTP_ROOT_KEY_GET): ali_ce_umemcpy(&tmp, (void *)param, sizeof(tmp.otp)); RPC_PARAM_UPDATE(p3, PARAM_IN, PARAM_Otp_param_rpc, \ sizeof(Otp_param_rpc), (void *)&tmp); break; case CE_IO_CMD(IO_CRYPT_DEBUG_GET_KEY): ali_ce_umemcpy(&tmp, (void *)param, sizeof(tmp.kdebug_param)); RPC_PARAM_UPDATE(p3, PARAM_INOUT, PARAM_Ce_debug_key_info_rpc, \ sizeof(Ce_debug_key_info_rpc), (void *)&tmp); break; case CE_IO_CMD(IO_CRYPT_POS_IS_OCCUPY): ali_ce_umemcpy(&tmp, (void *)param, sizeof(tmp.ksts_param)); RPC_PARAM_UPDATE(p3, PARAM_INOUT, PARAM_Ce_pos_status_param_rpc, \ sizeof(Ce_pos_status_param_rpc), (void *)&tmp); break; case CE_IO_CMD(IO_CRYPT_POS_SET_USED): break; case CE_IO_CMD(IO_CRYPT_POS_SET_IDLE): break; case CE_IO_CMD(IO_CRYPT_FOUND_FREE_POS): RPC_PARAM_UPDATE(p3, PARAM_INOUT, PARAM_Ce_found_free_pos_param_rpc, \ sizeof(Ce_found_free_pos_param_rpc), (void *)param); break; case CE_IO_CMD(IO_DECRYPT_PVR_USER_KEY): ali_ce_umemcpy(&tmp, (void *)param, sizeof(tmp.ce_pvr_key)); RPC_PARAM_UPDATE(p3, PARAM_IN, PARAM_Ce_pvr_key_param_rpc, sizeof(Ce_pvr_key_param_rpc), (void *)&tmp); break; default: { ALI_CE_RPC_DEBUG("CE rpc Error: invalid cmd=0x%x\n",cmd); break; } } ret = RpcCallCompletion(RPC_ce_ioctl,&p1,&p2,&p3,NULL); if(CE_IO_CMD(IO_CRYPT_DEBUG_GET_KEY) == CE_IO_CMD(cmd)) { ali_ce_umemcpy((void *)param, &tmp, sizeof(tmp.kdebug_param)); } if(CE_IO_CMD(IO_CRYPT_POS_IS_OCCUPY) == CE_IO_CMD(cmd)) { ali_ce_umemcpy((void *)param, &tmp, sizeof(tmp.ksts_param)); } return ret; #endif }