X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=dev.c;h=4e48179356c70a70fa2bb3dee7e1e4b15a8c77fb;hb=e9aa47200ea8c0907537483a7a7c5292b6238d6f;hp=b00ee8d2da44c9db827346a1412123a38670faf0;hpb=1803bd8512f72b6bb61b8c462e68fcfabc319f62;p=project%2Fuqmi.git diff --git a/dev.c b/dev.c index b00ee8d..4e48179 100644 --- a/dev.c +++ b/dev.c @@ -49,7 +49,6 @@ static void __qmi_request_complete(struct qmi_dev *qmi, struct qmi_request *req, { void *tlv_buf; int tlv_len; - int ret; if (!req->pending) return; @@ -103,7 +102,6 @@ static void qmi_notify_read(struct ustream *us, int bytes) struct qmi_msg *msg; char *buf; int len, msg_len; - int i; while (1) { buf = ustream_get_read_buf(us, &len); @@ -128,8 +126,6 @@ int qmi_request_start(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_m { int len = qmi_complete_request_message(msg); uint16_t tid; - int ret; - int i; memset(req, 0, sizeof(*req)); req->ret = -1; @@ -234,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; @@ -265,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; @@ -314,7 +320,6 @@ int qmi_device_open(struct qmi_dev *qmi, const char *path) void qmi_device_close(struct qmi_dev *qmi) { struct qmi_request *req; - int idx; qmi_close_all_services(qmi); ustream_free(&qmi->sf.stream);