X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuqmi.git;a=blobdiff_plain;f=dev.c;h=4e48179356c70a70fa2bb3dee7e1e4b15a8c77fb;hp=2e20274a742681be776de0b00afe1b2178cc77b8;hb=7fe36553d1cf57f4daacfc0359d960e4d5bc0985;hpb=889316ea13bdb113a60870445cd334bd0cd3fede diff --git a/dev.c b/dev.c index 2e20274..4e48179 100644 --- a/dev.c +++ b/dev.c @@ -230,6 +230,8 @@ int qmi_service_connect(struct qmi_dev *qmi, QmiService svc, int client_id) return req.req.ret; client_id = req.cid; + } else { + qmi->service_keep_cid |= (1 << idx); } qmi->service_data[idx].connected = true; @@ -261,11 +263,19 @@ static void __qmi_service_disconnect(struct qmi_dev *qmi, int idx) qmi_request_wait(qmi, &req); } +int qmi_service_release_client_id(struct qmi_dev *qmi, QmiService svc) +{ + int idx = qmi_get_service_idx(svc); + qmi->service_release_cid |= 1 << idx; + return 0; +} + static void qmi_close_all_services(struct qmi_dev *qmi) { uint32_t connected = qmi->service_connected; int idx; + qmi->service_keep_cid &= ~qmi->service_release_cid; for (idx = 0; connected; idx++, connected >>= 1) { if (!(connected & 1)) continue;