static long smi_ioctl( struct file * pFile, unsigned int cmd, unsigned long param) { int ret = 0; // unsigned long * pu4Cnt = (unsigned long *)pFile->private_data; switch (cmd) { #ifdef __MAU_SPC_ENABLE__ case MTK_CONFIG_MM_MAU: { MTK_MAU_CONFIG b; if(copy_from_user(&b, (void __user *)param, sizeof(b))) { SMIERR("copy_from_user failed!"); ret = -EFAULT; } else { mau_config(&b); } return ret; } case MTK_IOC_SPC_CONFIG : { MTK_SPC_CONFIG cfg; ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SPC_CONFIG)); if(ret) { SMIMSG(" SPC_CONFIG, copy_from_user failed: %d\n", ret); return -EFAULT; } spc_config(&cfg); } break; case MTK_IOC_SPC_DUMP_REG : spc_dump_reg(); break; case MTK_IOC_SPC_DUMP_STA : spc_status_check(); break; case MTK_IOC_SPC_CMD : spc_test(param); break; #endif case MTK_IOC_SMI_BWC_CONFIG: { MTK_SMI_BWC_CONFIG cfg; ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_CONFIG)); if(ret) { SMIMSG(" SMI_BWC_CONFIG, copy_from_user failed: %d\n", ret); return -EFAULT; } // ret = smi_bwc_config( &cfg , pu4Cnt); ret = smi_bwc_config( &cfg , NULL); } break; // GMP start case MTK_IOC_SMI_BWC_INFO_SET: { MTK_SMI_BWC_INFO_SET cfg; SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_SET request... start"); ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_INFO_SET)); if(ret) { SMIMSG(" MTK_IOC_SMI_BWC_INFO_SET, copy_to_user failed: %d\n", ret); return -EFAULT; } // Set the address to the value assigned by user space program smi_bwc_mm_info_set(cfg.property, cfg.value1, cfg.value2); SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_SET request... finish"); break; } case MTK_IOC_SMI_BWC_INFO_GET: { MTK_SMI_BWC_INFO_GET cfg; MTK_SMI_BWC_MM_INFO * return_address = NULL; SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_GET request... start"); ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_INFO_GET)); if(ret) { SMIMSG(" MTK_IOC_SMI_BWC_INFO_GET, copy_to_user failed: %d\n", ret); return -EFAULT; } return_address = (MTK_SMI_BWC_MM_INFO *)cfg.return_address; if( return_address != NULL){ ret = copy_to_user((void*) return_address, (void*)&g_smi_bwc_mm_info, sizeof(MTK_SMI_BWC_MM_INFO)); if(ret) { SMIMSG(" MTK_IOC_SMI_BWC_INFO_GET, copy_to_user failed: %d\n", ret); return -EFAULT; } } SMIMSG("Handle MTK_IOC_SMI_BWC_INFO_GET request... finish"); break; } // GMP end default: return -1; } return ret; }
static long smi_ioctl( struct file * pFile, unsigned int cmd, unsigned long param) { int ret = 0; // unsigned long * pu4Cnt = (unsigned long *)pFile->private_data; switch (cmd) { #ifdef __MAU_SPC_ENABLE__ case MTK_CONFIG_MM_MAU: { MTK_MAU_CONFIG b; if(copy_from_user(&b, (void __user *)param, sizeof(b))) { SMIERR("copy_from_user failed!"); ret = -EFAULT; } else { mau_config(&b); } return ret; } case MTK_IOC_SPC_CONFIG : { MTK_SPC_CONFIG cfg; ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SPC_CONFIG)); if(ret) { SMIMSG(" SPC_CONFIG, copy_from_user failed: %d\n", ret); return -EFAULT; } spc_config(&cfg); } break; case MTK_IOC_SPC_DUMP_REG : spc_dump_reg(); break; case MTK_IOC_SPC_DUMP_STA : spc_status_check(); break; case MTK_IOC_SPC_CMD : spc_test(param); break; #endif case MTK_IOC_SMI_BWC_CONFIG: { MTK_SMI_BWC_CONFIG cfg; ret = copy_from_user(&cfg, (void*)param , sizeof(MTK_SMI_BWC_CONFIG)); if(ret) { SMIMSG(" SMI_BWC_CONFIG, copy_from_user failed: %d\n", ret); return -EFAULT; } // ret = smi_bwc_config( &cfg , pu4Cnt); ret = smi_bwc_config( &cfg , NULL); } break; default: return -1; } return ret; }