int remote_rpc_request(uint32_t command) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; char output[4]; int rc= -1; int request_cmd = command; Open_check(); arg.event = LGE_RPC_HANDLE_REQUEST; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(request_cmd); arg.input = (char*)&request_cmd; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = sizeof(output); ret.output = (char*)NULL; ret.out_len = 0; rc = oem_rapi_client_streaming_function(client,&arg,&ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)output, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) memset(output,0,sizeof(output)); switch(command) { #ifdef CONFIG_LGE_SYNC_CMD case LGE_SYNC_REQUEST: pr_info("%s, sync retry count : %d\r\n", __func__, GET_INT32(output)); if(rc != LG_RAPI_SUCCESS) rc = -1; break; #endif #ifdef CONFIG_LGE_NOTIFY_RECOVERY_MODE case LGE_RECOVERY_NOTIFICATION: pr_info("%s, recovery notification retry count : %d\r\n", __func__, GET_INT32(output)); if(rc != LG_RAPI_SUCCESS) rc = -1; break; #endif default : break; } } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return rc; }
int msm_chg_LG_cable_type(void) { char output[LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE]; #if 0 struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; // char output[LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE]; int rc= -1; int errCount= 0; Open_check(); /* LGE_CHANGES_S [[email protected]] 2010-09-06, Add error control code. Repeat 3 times if error occurs*/ do { arg.event = LG_FW_RAPI_CLIENT_EVENT_GET_LINE_TYPE; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = 0; arg.input = NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 4; ret.output = NULL; ret.out_len = NULL; rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) pr_err("get LG_cable_type error \r\n"); else pr_info("msm_chg_LG_cable_type: %d \r\n", GET_INT32(ret.output)); } while (rc < 0 && errCount++ < 3); /* LGE_CHANGES_E [[email protected]] */ /* BEGIN: 0015327 [email protected] 20110204 */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ memset(output, 0, LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE); rc = lg_rapi_check_validity_and_copy_result((void*)&ret, output, arg.output_size); /* END: 0015327 [email protected] 20110204 */ /* BEGIN: 0014591 [email protected] 20110122 */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* END: 0014591 [email protected] 2011022 */ #endif return (GET_INT32(output)); }
int msm_get_manual_test_mode(void) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char temp; char output[4]; memset(output,0,4); Open_check(); if (IS_ERR(client)) { pr_err("%s error \r\n", __func__); return 0; } arg.event = LG_FW_MANUAL_TEST_MODE; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(temp); arg.input = (char*)&temp; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 4; ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client, &arg, &ret); /* */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ if (rc < 0) { pr_err("%s error \r\n", __func__); memset(output,0,4); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)output, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) memset(output,0,4); else printk(KERN_INFO "MANUAL_TEST_MODE nv : %c\n", output[0]); } /* */ if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); if(output[0] == 0x31) return 1; else return 0; }
void msm_get_MEID_type(char* sMeid) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char temp[16]; memset(temp,0,16); // passing argument 2 of 'memset' makes integer from pointer without a cast, change NULL to 0 Open_check(); arg.event = LG_FW_MEID_GET; arg.cb_func = NULL; arg.handle = (void*) 0; //FIX ME : RPC_ACCEPTSTAT_GARBAGE_ARGS rpc fail arg.in_len = sizeof(temp); arg.input = temp; // arg.in_len = 0; // arg.input = NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 10; ret.output = NULL; ret.out_len = NULL; /* */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); memset(sMeid,0,9); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)sMeid, 9); // returned imei size is 9 if(rc == LG_RAPI_INVALID_RESPONSE) memset(sMeid,0,9); else printk(KERN_INFO "IMEI from modem nv : '%s'\n", sMeid); } /* */ /* */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* */ return; }
int msm_chg_LG_cable_type(void) { char output[LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE]; #if 0 struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; // char output[LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE]; int rc= -1; int errCount= 0; Open_check(); do { arg.event = LG_FW_RAPI_CLIENT_EVENT_GET_LINE_TYPE; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = 0; arg.input = NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 4; ret.output = NULL; ret.out_len = NULL; rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) pr_err("get LG_cable_type error \r\n"); else pr_info("msm_chg_LG_cable_type: %d \r\n", GET_INT32(ret.output)); } while (rc < 0 && errCount++ < 3); /* MOD 0015327: [KERNEL] LG RAPI validity check */ memset(output, 0, LG_RAPI_CLIENT_MAX_OUT_BUFF_SIZE); rc = lg_rapi_check_validity_and_copy_result((void*)&ret, output, arg.output_size); /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); #endif return (GET_INT32(output)); }
/* MOD 0014166: [KERNEL] send_to_arm9 work queue */ static void do_send_to_arm9(void* pReq, void* pRsp, int flag, unsigned int rsp_len) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; Open_check(); printk(KERN_INFO "%s %s start\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); arg.event = LG_FW_TESTMODE_EVENT_FROM_ARM11; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(DIAG_TEST_MODE_F_req_type); arg.input = (char*)pReq; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = rsp_len; ret.output = NULL; ret.out_len = NULL; /* BEGIN: 0015327 [email protected] 20110204 */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); ((DIAG_TEST_MODE_F_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)pRsp, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) { ((DIAG_TEST_MODE_F_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } } /* END: 0015327 [email protected] 20110204 */ /* BEGIN: 0014591 [email protected] 20110122 */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* END: 0014591 [email protected] 2011022 */ printk(KERN_INFO "%s %s end\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); }
void msm_get_SUB_VER_type( char *sub_ver ) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc = -1; char temp[8]; memset( temp, 0, 8 ); Open_check(); arg.event = LG_FW_SUB_VERSION_GET; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(temp); arg.input = temp; // arg.in_len = 0; // arg.input = NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 1; ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); *sub_ver = 0; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, sub_ver, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) *sub_ver = 0; else printk(KERN_INFO "sw_ver from modem : '%02d'\n", *sub_ver); } if( ret.output ) kfree( ret.output ); if( ret.out_len ) kfree ( ret.out_len ); return; }
int msm_get_manual_test_mode(void) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; char output[4]; int rc= -1; byte temp = 0; Open_check(); arg.event = LG_FW_MANUAL_TEST_MODE; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(temp); arg.input = &temp; //arg.in_len = 0; //arg.input = (char*) NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 4; ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client, &arg, &ret); /* BEGIN: 0015327 [email protected] 20110204 */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ if (rc < 0) pr_err("%s error \r\n", __func__); else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)output, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) memset(output,0,4); else printk(KERN_INFO "MANUAL_TEST_MODE nv : %d\n", GET_INT32(output)); } /* END: 0015327 [email protected] 20110204 */ //memcpy(output,ret.output,*ret.out_len); if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return (GET_INT32(output)); }
void remote_rpc_srd_cmmand(void*pReq, void* pRsp ) //kabjoo.choi { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; //char output[4]; int rc= -1; //int request_cmd = command; Open_check(); arg.event = LG_FW_REQUEST_SRD_RPC; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(udbp_req_type); arg.input = (char*)pReq; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = sizeof(udbp_rsp_type); ret.output = (char*)NULL; ret.out_len = 0; rc = oem_rapi_client_streaming_function(client,&arg,&ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); ((udbp_rsp_type*)pRsp)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)pRsp, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) ((udbp_rsp_type*)pRsp)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE; } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return ; }
void msm_get_MEID_type(char* sMeid) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char temp[16]; memset(temp,0,16); Open_check(); arg.event = LG_FW_MEID_GET; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(temp); arg.input = temp; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 15; ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); memset(sMeid,0,14); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)sMeid, 14); if(rc == LG_RAPI_INVALID_RESPONSE) memset(sMeid,0,14); else printk(KERN_INFO "meid from modem nv : '%s'\n", sMeid); } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return; }
int remote_rpc_request_val(uint32_t command, char *buf, int size) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; int request_cmd = command; Open_check(); printk(KERN_INFO "%s start\n", __func__); arg.event = LGE_REMOTE_RPC_REQUEST_VAL; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(request_cmd); arg.input = (char*)&request_cmd; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = size; ret.output = NULL; ret.out_len = 0; rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); memcpy(buf, "UNKNOWN", strlen("UNKNOWN")); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)buf, arg.output_size); } // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); printk(KERN_INFO "%s end\n", __func__); }
static void unifiedmsgtool_send_to_arm9(void* pReq, void* pRsp, int flag) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; Open_check(); printk(KERN_INFO "%s %s start\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); arg.event = LG_MSG_UNIFIEDMSGTOOL_FROM_ARM11; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = 160; arg.input = (char*)pReq; arg.out_len_valid = 1; arg.output_valid = 1; ret.output = NULL; ret.out_len = NULL; rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); ((diag_sms_mode_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)pRsp, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) ((diag_sms_mode_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); printk(KERN_INFO "%s %s end\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); }
void webDload_rpc_srd_cmmand(void*pReq, void* pRsp ) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; Open_check(); arg.event = LG_FW_WEB_DLOAD_STATUS; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(diag_webdload_req_type); arg.input = (char*)pReq; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = sizeof(diag_webdload_rsp_type); ret.output = (char*)NULL; ret.out_len = 0; rc = oem_rapi_client_streaming_function(client,&arg,&ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); ((diag_webdload_rsp_type*)pRsp)->success = FALSE; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)pRsp, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) ((diag_webdload_rsp_type*)pRsp)->success = FALSE; } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return ; }
/* MOD 0014166: [KERNEL] send_to_arm9 work queue */ static void do_send_to_arm9(void* pReq, void* pRsp, int flag) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; Open_check(); printk(KERN_INFO "%s %s start\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); arg.event = LG_FW_TESTMODE_EVENT_FROM_ARM11; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(DIAG_TEST_MODE_F_req_type); arg.input = (char*)pReq; arg.out_len_valid = 1; arg.output_valid = 1; // DIAG_TEST_MODE_F_rsp_type union type is greater than the actual size, decrease it in case sensitive items switch(((DIAG_TEST_MODE_F_req_type*)pReq)->sub_cmd_code) { case TEST_MODE_FACTORY_RESET_CHECK_TEST: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type); break; case TEST_MODE_TEST_SCRIPT_MODE: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type) + sizeof(test_mode_req_test_script_mode_type); break; case TEST_MODE_XO_CAL_DATA_COPY: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type) + sizeof(test_mode_req_XOCalDataBackup_Type); break; case TEST_MODE_MANUAL_TEST_MODE: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type) + sizeof(test_mode_req_manual_test_mode_type); break; case TEST_MODE_BLUETOOTH_RW: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type) + sizeof(test_mode_req_bt_addr_type); break; case TEST_MODE_WIFI_MAC_RW: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type) - sizeof(test_mode_rsp_type) + sizeof(test_mode_req_wifi_addr_type); break; default: arg.output_size = sizeof(DIAG_TEST_MODE_F_rsp_type); break; } ret.output = NULL; ret.out_len = NULL; /* */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ rc= oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); ((DIAG_TEST_MODE_F_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)pRsp, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) ((DIAG_TEST_MODE_F_rsp_type*)pRsp)->ret_stat_code = TEST_FAIL_S; } /* */ /* */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* */ printk(KERN_INFO "%s %s end\n", __func__, (flag==NORMAL_WORK_FLAG)?"[N]":"[WQ]"); }
int msm_rw_annoying_flc(uint32_t event, uint8_t is_write, char *buf, uint32_t len) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char input[32] = {0,}; int result = 0; pr_info("%s, event:%d, buf:0x%x, len:%d \n", __func__, event, (unsigned int)buf, len); pr_info("checking current rpc status... \n"); Open_check(); if (IS_ERR(client)) { pr_err("rcp client status error \n"); result = RW_ANNOYING_FLC_FAIL; goto msm_rw_annoying_flc_fin; } pr_info("checking current rpc status... OK \n"); input[0] = is_write; arg.event = event; arg.cb_func = NULL; arg.handle = NULL; if (is_write == TRUE) // WRITE { pr_info("write case ... \n"); memcpy(input+1, buf, len); arg.in_len = 1 + len; arg.input = input; arg.out_len_valid = 0; arg.output_valid = 0; arg.output_size = 0; } else // READ { pr_info("read case ... \n"); arg.in_len = 1; arg.input = input; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = len; } ret.output = NULL; ret.out_len = NULL; pr_info("call oem_rapi_client_streaming_function ... \n"); rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("oem_rapi_client_streaming_function error \n"); memset(buf, 0, len); result = RW_ANNOYING_FLC_FAIL; goto msm_rw_annoying_flc_fin; } pr_info("call oem_rapi_client_streaming_function ... OK \n"); if (is_write == FALSE) { pr_info("in read case, validate result and copy ... \n"); if( ret.out_len != NULL && (*ret.out_len) == ANNOYING_FLC_NOT_ACTIVE_MARK ) { pr_info("NV not activated ..\n"); memset(buf, 0, len); result = RW_ANNOYING_FLC_NOT_ACTIVE; goto msm_rw_annoying_flc_fin; } rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)buf, arg.output_size); switch( rc ) { case LG_RAPI_OVER_UNDER_FLOW: pr_info("LG_RAPI_OVER_UNDER_FLOW happened.. \n"); result = len; break; case LG_RAPI_SUCCESS: pr_info("LG_RAPI_SUCCESS.. \n"); result = len; break; case LG_RAPI_INVALID_RESPONSE: default: pr_info("LG_RAPI_INVALID_RESPONSE .. \n"); memset(buf, 0, len); result = RW_ANNOYING_FLC_FAIL; goto msm_rw_annoying_flc_fin; break; } } else { pr_info("in write case.. \n"); result = len; } msm_rw_annoying_flc_fin: if (ret.output) { pr_info("free ret.output : 0x%x \n", (unsigned int)ret.output); kfree(ret.output); } if (ret.out_len) { pr_info("free ret.out_len : 0x%x \n", (unsigned int)ret.out_len); kfree(ret.out_len); } return result; }
void msm_rw_felica(uint32_t event, uint8_t is_write, char *buf, uint32_t len) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char input[32] = {0,}; Open_check(); if (IS_ERR(client)) { pr_err("%s error \r\n", __func__); return; } input[0] = is_write; arg.event = event; arg.cb_func = NULL; arg.handle = NULL; if (is_write == TRUE) // WRITE { memcpy(input+1, buf, len); arg.in_len = 1 + len; arg.input = input; arg.out_len_valid = 0; arg.output_valid = 0; arg.output_size = 0; } else // READ { arg.in_len = 1; arg.input = input; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = len; } ret.output = NULL; ret.out_len = 0; rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s error \r\n", __func__); memset(buf, 0, len); } else if (is_write == FALSE); { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)buf, arg.output_size); if(rc == LG_RAPI_INVALID_RESPONSE) memset(buf, 0, len); pr_info("%s: output_size(%d)\n", __func__, arg.output_size); { int i; for (i = 0; i < arg.output_size; i++) { pr_info("%s: output[i] = 0x%02X\n", __func__, buf[i]); } } } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); }
void msm_get_MEID_type(char* sMeid, char* dec_sMeid) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; unsigned long long dec_meid = 0; unsigned long long dec_meid_high = 0; unsigned long long dec_meid_low = 0; unsigned long long multi_dec_meid = 100000000; char sMeid_high[16]; char sMeid_low[16]; char test1[16]; char test2[16]; char temp[16]; memset(temp,0,16); // passing argument 2 of 'memset' makes integer from pointer without a cast, change NULL to 0 memset(sMeid_high,0,16); memset(sMeid_low,0,16); memset(test1,0,16); memset(test2,0,16); Open_check(); arg.event = LG_FW_MEID_GET; arg.cb_func = NULL; arg.handle = (void*) 0; //FIX ME : RPC_ACCEPTSTAT_GARBAGE_ARGS rpc fail arg.in_len = sizeof(temp); arg.input = temp; // arg.in_len = 0; // arg.input = NULL; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = 15; ret.output = NULL; ret.out_len = NULL; /* BEGIN: 0015327 [email protected] 20110204 */ /* MOD 0015327: [KERNEL] LG RAPI validity check */ rc = oem_rapi_client_streaming_function(client, &arg, &ret); if (rc < 0) { pr_err("%s, rapi reqeust failed\r\n", __func__); memset(sMeid,0,14); memset(dec_sMeid,0,14); } else { rc = lg_rapi_check_validity_and_copy_result((void*)&ret, (char*)sMeid, 14); // returned MEID size is 14 if(rc == LG_RAPI_INVALID_RESPONSE) { memset(sMeid,0,14); memset(dec_sMeid,0,14); } else { memcpy(sMeid_high, sMeid, 8); memcpy(sMeid_low, &sMeid[8], 6); dec_meid_high = simple_strtoul(sMeid_high, NULL, 16); dec_meid_low = simple_strtoul(sMeid_low, NULL, 16); dec_meid = (dec_meid_high * multi_dec_meid) + dec_meid_low; sprintf(dec_sMeid, "%llu", dec_meid); printk(KERN_INFO "meid from modem nv dec_meid_high : %llu dec_meid_low : %llu dec_meid : %llu \n", dec_meid_high, dec_meid_low, dec_meid); printk(KERN_INFO "meid from modem nv sMeid_high : %s sMeid_low : %s dec_sMeid : %s \n", sMeid_high, sMeid_low, dec_sMeid); } } /* END: 0015327 [email protected] 20110204 */ /* BEGIN: 0014591 [email protected] 20110122 */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* END: 0014591 [email protected] 2011022 */ return; }