static int oem_rapi_client_streaming_function_arg(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { int cb_id; struct oem_rapi_client_streaming_func_arg *arg = data; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; xdr_send_uint32(xdr, &arg->event); /* enum */ xdr_send_uint32(xdr, &cb_id); /* cb_id */ xdr_send_uint32(xdr, (uint32_t *)(&arg->handle)); /* handle */ xdr_send_uint32(xdr, &arg->in_len); /* in_len */ xdr_send_bytes(xdr, (const void **)&arg->input, &arg->in_len); /* input */ xdr_send_uint32(xdr, &arg->out_len_valid); /* out_len */ xdr_send_uint32(xdr, &arg->output_valid); /* output */ /* output_size */ if (arg->output_valid) xdr_send_uint32(xdr, &arg->output_size); return 0; }
static int ping_mdm_data_cb_register_arg(struct msm_rpc_client *client, void *buf, void *data) { struct ping_mdm_register_data_cb_arg *arg; int cb_id, size = 0; arg = (struct ping_mdm_register_data_cb_arg *)data; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; *((uint32_t *)buf) = cpu_to_be32((uint32_t)cb_id); size += sizeof(uint32_t); buf += sizeof(uint32_t); *((uint32_t *)buf) = cpu_to_be32(arg->num); size += sizeof(uint32_t); buf += sizeof(uint32_t); *((uint32_t *)buf) = cpu_to_be32(arg->size); size += sizeof(uint32_t); buf += sizeof(uint32_t); *((uint32_t *)buf) = cpu_to_be32(arg->interval_ms); size += sizeof(uint32_t); buf += sizeof(uint32_t); *((uint32_t *)buf) = cpu_to_be32(arg->num_tasks); size += sizeof(uint32_t); return size; }
static int oem_rapi_client_streaming_function_arg(struct msm_rpc_client *client, void *buf, void *data) { int size = 0; int cb_id; struct oem_rapi_client_streaming_func_arg *arg = data; /* enum */ *((uint32_t *)buf) = cpu_to_be32(arg->event); size += sizeof(uint32_t); buf += sizeof(uint32_t); /* cb_id */ cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; *((uint32_t *)buf) = cpu_to_be32((uint32_t)cb_id); size += sizeof(uint32_t); buf += sizeof(uint32_t); /* handle */ *((uint32_t *)buf) = cpu_to_be32((uint32_t)arg->handle); size += sizeof(uint32_t); buf += sizeof(uint32_t); /* in_len */ *((uint32_t *)buf) = cpu_to_be32(arg->in_len); size += sizeof(uint32_t); buf += sizeof(uint32_t); /* input */ *((uint32_t *)buf) = cpu_to_be32(arg->in_len); size += sizeof(uint32_t); buf += sizeof(uint32_t); memcpy(buf, arg->input, arg->in_len); size += arg->in_len; buf += arg->in_len; if (arg->in_len & 0x3) { memset(buf, 0, 4 - (arg->in_len & 0x3)); buf += 4 - (arg->in_len & 0x3); size += 4 - (arg->in_len & 0x3); } /* out_len */ *((uint32_t *)buf) = cpu_to_be32((uint32_t)(arg->out_len_valid)); size += sizeof(uint32_t); buf += sizeof(uint32_t); /* output */ *((uint32_t *)buf) = cpu_to_be32((uint32_t)(arg->output_valid)); size += sizeof(uint32_t); buf += sizeof(uint32_t); if (arg->output_valid) { *((uint32_t *)buf) = cpu_to_be32(arg->output_size); size += sizeof(uint32_t); buf += sizeof(uint32_t); } return size; }
int msm_pm_app_register_vbus_sn(void (*callback)(int online)) { uint32_t cb_id = msm_rpc_add_cb_func(client, (void *)callback); /* In case of NULL callback funtion, cb_id would be -1 */ if ((int) cb_id < -1) return cb_id; return msm_rpc_client_req(client, rpc_ids.reg_for_vbus_valid, vbus_sess_valid_arg_cb, &cb_id, NULL, NULL, -1); }
static int ping_mdm_unregister_arg(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { struct ping_mdm_unregister_arg *arg = data; int cb_id; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; xdr_send_uint32(xdr, &cb_id); /* cb_id */ return 0; }
static int ping_mdm_unregister_arg(struct msm_rpc_client *client, void *buf, void *data) { struct ping_mdm_unregister_arg *arg; int cb_id; arg = (struct ping_mdm_unregister_arg *)data; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; *((uint32_t *)buf) = cpu_to_be32((uint32_t)cb_id); return sizeof(uint32_t); }
static int dog_keepalive_register_arg_func(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { struct dog_keepalive_register_arg *arg = data; int cb_id; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; xdr_send_uint32(xdr, &cb_id); xdr_send_uint32(xdr, &arg->response_msec); xdr_send_uint32(xdr, &arg->clnt_id_valid); return 0; }
int msm_pm_app_rpc_init(void (*callback)(int online)) { uint32_t cb_id, rc; if (!machine_is_qsd8x50_ffa() && !machine_is_qsd8x50a_ffa() && !machine_is_msm7x27_ffa()) return -ENOTSUPP; client = msm_rpc_register_client("pmapp_usb", PMAPP_RPC_PROG, PMAPP_RPC_VER_2_1, 1, pm_app_usb_cb_func); if (!IS_ERR(client)) { rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_2_1); goto done; } client = msm_rpc_register_client("pmapp_usb", PMAPP_RPC_PROG, PMAPP_RPC_VER_1_2, 1, pm_app_usb_cb_func); if (!IS_ERR(client)) { rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_1_2); goto done; } client = msm_rpc_register_client("pmapp_usb", PMAPP_RPC_PROG, PMAPP_RPC_VER_1_1, 1, pm_app_usb_cb_func); if (!IS_ERR(client)) rpc_pmapp_init_rpc_ids(PMAPP_RPC_VER_1_1); else return PTR_ERR(client); done: cb_id = msm_rpc_add_cb_func(client, (void *)callback); /* In case of NULL callback funtion, cb_id would be -1 */ if ((int) cb_id < -1) return cb_id; rc = msm_rpc_client_req(client, rpc_ids.reg_for_vbus_valid, vbus_sess_valid_arg_cb, &cb_id, NULL, NULL, -1); return rc; }
static int npa_remote_init_arg_fn(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { struct npa_remote_init_arg *arg = data; unsigned int cb_id = 0; cb_id = msm_rpc_add_cb_func(client, (void *)arg->callback); if (cb_id < 0 && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; xdr_send_uint32(xdr, &arg->major); xdr_send_uint32(xdr, &arg->minor); xdr_send_uint32(xdr, &arg->build); xdr_send_uint32(xdr, &cb_id); xdr_send_uint32(xdr, &arg->context); return 0; }
static int ping_mdm_data_cb_register_arg(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { struct ping_mdm_register_data_cb_arg *arg = data; int cb_id; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if ((cb_id < 0) && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; xdr_send_uint32(xdr, &cb_id); /* cb_id */ xdr_send_uint32(xdr, &arg->num); /* num */ xdr_send_uint32(xdr, &arg->size); /* size */ xdr_send_uint32(xdr, &arg->interval_ms); /* interval_ms */ xdr_send_uint32(xdr, &arg->num_tasks); /* num_tasks */ return 0; }
static int ping_mdm_register_arg(struct msm_rpc_client *client, void *buf, void *data) { struct ping_mdm_register_arg *arg; int cb_id, size = 0; arg = (struct ping_mdm_register_arg *)data; cb_id = msm_rpc_add_cb_func(client, (void *)arg->cb_func); if (cb_id < 0) return cb_id; *((uint32_t *)buf) = cpu_to_be32((uint32_t)cb_id); size += sizeof(uint32_t); buf += sizeof(uint32_t); *((int32_t *)buf) = cpu_to_be32(arg->num); size += sizeof(uint32_t); return size; }
static int npa_remote_resource_available_arg_fn(struct msm_rpc_client *client, struct msm_rpc_xdr *xdr, void *data) { struct npa_remote_resource_available_arg *arg = data; unsigned int cb_id = 0; int len = 0; cb_id = msm_rpc_add_cb_func(client, (void *)arg->callback); if (cb_id < 0 && (cb_id != MSM_RPC_CLIENT_NULL_CB_ID)) return cb_id; if (arg->resource_name) { len = strlen(arg->resource_name) + 1; xdr_send_bytes(xdr, (const void **)&arg->resource_name, &len); } else { xdr_send_uint32(xdr, &len); } xdr_send_uint32(xdr, &cb_id); xdr_send_uint32(xdr, &arg->context); return 0; }