aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Schrock <steve.schrock@getcruise.com>2024-02-29 09:31:40 -0600
committerDenis Kenzior <denkenz@gmail.com>2024-02-29 10:27:17 -0600
commita6b18b9e922be3e97bebebd370b58cdd5df253ce (patch)
treef581c299696dff735d3820ba1f6e98b34addc8f6
parent8cdc1511f5196296596fbdcec3efed4af21c8124 (diff)
downloadofono-a6b18b9e922be3e97bebebd370b58cdd5df253ce.tar.gz
qmi: Allow for 16-bit service types in the type hash
Only QMUX has client ids and they fit into 8 bits.
-rw-r--r--drivers/qmimodem/qmi.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c
index d2f28bec0..82e99ed22 100644
--- a/drivers/qmimodem/qmi.c
+++ b/drivers/qmimodem/qmi.c
@@ -734,6 +734,12 @@ static void service_notify(const void *key, void *value, void *user_data)
result);
}
+static unsigned int service_list_create_hash(uint16_t service_type,
+ uint8_t client_id)
+{
+ return (service_type | (client_id << 16));
+}
+
static void handle_indication(struct qmi_device *device,
uint8_t service_type, uint8_t client_id,
uint16_t message, uint16_t length, const void *data)
@@ -757,8 +763,7 @@ static void handle_indication(struct qmi_device *device,
return;
}
- hash_id = service_type | (client_id << 8);
-
+ hash_id = service_list_create_hash(service_type, client_id);
service = l_hashmap_lookup(device->service_list,
L_UINT_TO_PTR(hash_id));
@@ -1696,8 +1701,8 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length,
service->client_id,
service->info.service_type);
- hash_id = service->info.service_type | (service->client_id << 8);
-
+ hash_id = service_list_create_hash(service->info.service_type,
+ service->client_id);
l_hashmap_replace(device->service_list, L_UINT_TO_PTR(hash_id),
service, (void **) &old_service);
@@ -2525,8 +2530,8 @@ void qmi_service_unref(struct qmi_service *service)
qmi_service_cancel_all(service);
qmi_service_unregister_all(service);
- hash_id = service->info.service_type | (service->client_id << 8);
-
+ hash_id = service_list_create_hash(service->info.service_type,
+ service->client_id);
l_hashmap_remove(device->service_list, L_UINT_TO_PTR(hash_id));
if (device->ops->client_release)