diff options
author | Jonas Bonn <jonas@southpole.se> | 2018-04-03 16:50:51 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2018-04-04 09:55:13 -0500 |
commit | 093bdda7bece88e99e631a7d7ad4a5ea9910d746 (patch) | |
tree | eeaf5a0729c63beadf39d970b80dfb6ccb477feb /drivers/qmimodem | |
parent | 4ef8814215573124370fc51aa46166b53bf7a9fa (diff) | |
download | ofono-093bdda7bece88e99e631a7d7ad4a5ea9910d746.tar.gz |
qmi: unify common request header setup
The service and control requests differ slightly in their headers, but
this difference is minor enough that we can handle it directly in the
request submission routine. This patch unifies the header setup for the
two request types.
Diffstat (limited to 'drivers/qmimodem')
-rw-r--r-- | drivers/qmimodem/qmi.c | 68 |
1 files changed, 31 insertions, 37 deletions
diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index b60e0c0b..ff7d8592 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -701,10 +701,30 @@ static void wakeup_writer(struct qmi_device *device) can_write_data, device, write_watch_destroy); } -static void __request_submit(struct qmi_device *device, - struct qmi_request *req, uint16_t transaction) +static void __request_submit(struct qmi_device *device, struct qmi_request *req) { - req->tid = transaction; + struct qmi_mux_hdr *mux; + + mux = req->buf; + + if (mux->service == QMI_SERVICE_CONTROL) { + struct qmi_control_hdr *hdr; + + hdr = req->buf + QMI_MUX_HDR_SIZE; + hdr->type = 0x00; + hdr->transaction = device->next_control_tid++; + if (device->next_control_tid == 0) + device->next_control_tid = 1; + req->tid = hdr->transaction; + } else { + struct qmi_service_hdr *hdr; + hdr = req->buf + QMI_MUX_HDR_SIZE; + hdr->type = 0x00; + hdr->transaction = device->next_service_tid++; + if (device->next_service_tid < 256) + device->next_service_tid = 256; + req->tid = hdr->transaction; + } g_queue_push_tail(device->req_queue, req); @@ -967,6 +987,9 @@ struct qmi_device *qmi_device_new(int fd) device->service_list = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, service_destroy); + device->next_control_tid = 1; + device->next_service_tid = 256; + return device; } @@ -1264,14 +1287,9 @@ bool qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, return false; } - if (device->next_control_tid < 1) - device->next_control_tid = 1; - - hdr->type = 0x00; - hdr->transaction = device->next_control_tid++; data->tid = hdr->transaction; - __request_submit(device, req, hdr->transaction); + __request_submit(device, req); data->timeout = g_timeout_add_seconds(5, discover_reply, data); __qmi_device_discovery_started(device, &data->super); @@ -1296,13 +1314,7 @@ static void release_client(struct qmi_device *device, return; } - if (device->next_control_tid < 1) - device->next_control_tid = 1; - - hdr->type = 0x00; - hdr->transaction = device->next_control_tid++; - - __request_submit(device, req, hdr->transaction); + __request_submit(device, req); } static void shutdown_destroy(gpointer user_data) @@ -1397,13 +1409,7 @@ bool qmi_device_sync(struct qmi_device *device, NULL, 0, qmi_device_sync_callback, func_data, (void **) &hdr); - if (device->next_control_tid < 1) - device->next_control_tid = 1; - - hdr->type = 0x00; - hdr->transaction = device->next_control_tid++; - - __request_submit(device, req, hdr->transaction); + __request_submit(device, req); return true; } @@ -2032,13 +2038,7 @@ static void service_create_discover(uint8_t count, return; } - if (device->next_control_tid < 1) - device->next_control_tid = 1; - - hdr->type = 0x00; - hdr->transaction = device->next_control_tid++; - - __request_submit(device, req, hdr->transaction); + __request_submit(device, req); } static bool service_create(struct qmi_device *device, bool shared, @@ -2327,13 +2327,7 @@ uint16_t qmi_service_send(struct qmi_service *service, qmi_param_free(param); - if (device->next_service_tid < 256) - device->next_service_tid = 256; - - hdr->type = 0x00; - hdr->transaction = device->next_service_tid++; - - __request_submit(device, req, hdr->transaction); + __request_submit(device, req); return hdr->transaction; } |