From patchwork Thu Jun 20 14:50:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705641 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50188176255 for ; Thu, 20 Jun 2024 14:51:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895109; cv=none; b=oKV07nFZpVRqM65W7ped18eDqRG4HQiJvF/giR0ZcVLbjdCfM+dq9kKp4J9ahlIxkX62EGItQ8qQo4YjJ7N4WYzYmphiePf5l2JRbSyvKbS91n9a8VWQ/Y5zfWm/z4u3VvKcZge1WcAQ2URthG+ixL6PT3vWkSOc8zTBpyhjuZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895109; c=relaxed/simple; bh=HUU3sUQwdUaQObDoIMlsAJAGfuur9LlGmMKFRvkjIlA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=PJfRTqk+4ndEnVcXS2/PMOzFsB1YHEr8peIXNqasOHvOE+hFT4kWcQ+46rhGfhhvJGkvPggJg8JKvgoMdCU17wiqn0ifCseHU6B3auEZ/FY6IbF0B5SkCpUHXXFrs+6WXLbg7SlH/y3nrswGej1/MUAuAgw/qjooQQq+L7224bs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cc4E0RHm; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cc4E0RHm" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3d518cdb252so453082b6e.1 for ; Thu, 20 Jun 2024 07:51:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895107; x=1719499907; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ku0cRHSkqfHg1v79ZIDpC0B8jaIvjzt5KGSfHCSRpGk=; b=cc4E0RHm+YQyh1xJyulO3MQWPW56gExE71fkPdNma1Q/pb+G6PZxO4n5s+e1GPDMyM sgWIdnP5EcUVp+zcSinvP2ZMW5eSIO7vLXr7/hoxq3dMNOGIyYoutzHImmeetZkKXbNr 2toxyuiZRlFtncCeIH4/ONb3Pf8ryhC11zchAoLJxSo7VXVoGY7h+imZd2W3Tgd7dgyH NGFYZOMFbe2ln//fdQVJhl/KmBmN3umNssg0LI806o0iTegAv4EtfilGhjj4dCO8XUxX A8BLEAb/vlI4Kz3fVC5skPurs6OiYbVwjLjDw4e1sklvTq1BIyMXHxB+j7mSmM4U8HqR LjIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895107; x=1719499907; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ku0cRHSkqfHg1v79ZIDpC0B8jaIvjzt5KGSfHCSRpGk=; b=l68Fq+SCzYcD9VHYn11H6FbizntxdzdEQEs05VCR0xVQWCJRgMF+fbfvij9G9ir7ZA s2/7T5hG1GiPXeEQtn5sPKye8zAHd9aZO3gfExIaZ75ys8H2vMU/4sp15VyUjB5M0DBW BAAWr++nfQ5Aibsp3vmYtpdKaPokdPP2qYDlhH+zjQNADZO+J/fD1W/7HYJTDHSIbSDm k0K0dnxK0LG85mwIiPxDbQEAtK8pkyBCg68S32QksgHPzIa9dkfrcyGR33NlHq1u1zqp wlPx/pzVtQOCVwIqsN04zDiobndDP/5TKA0hSMGv9q4d+nypdrKN04R7Umoo2Z79L07M 9u+Q== X-Gm-Message-State: AOJu0YyIWuOuOiUp8/tCatz1QorXN3Qnsd8X3s3rG0geHJNT9IsAsDqf 0ZV4B0YHVpYj85Z7eFORPHrImg6D42pGbP1Gqz8sfWowZtkoJQI7rSqkHQ== X-Google-Smtp-Source: AGHT+IGKqWBthjwIQNpN9uMxyhFR3XzERfBi8xWgH8gc64/61PXI+sJYpSHOz2/QNNo0RzZr061uBA== X-Received: by 2002:a05:6808:1985:b0:3d2:27cd:fe1 with SMTP id 5614622812f47-3d51bac5643mr6390748b6e.40.1718895107227; Thu, 20 Jun 2024 07:51:47 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:46 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 01/33] qmi: Remove qmi_free() Date: Thu, 20 Jun 2024 09:50:48 -0500 Message-ID: <20240620145139.1135899-1-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This was just a simple wrapper around l_free, get rid of it. --- drivers/qmimodem/devinfo.c | 8 ++++---- drivers/qmimodem/qmi.c | 5 ----- drivers/qmimodem/qmi.h | 2 -- drivers/qmimodem/sim-legacy.c | 6 +++--- drivers/qmimodem/sim.c | 2 +- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/drivers/qmimodem/devinfo.c b/drivers/qmimodem/devinfo.c index 2e514cfa3265..fd1ca3ceb2dd 100644 --- a/drivers/qmimodem/devinfo.c +++ b/drivers/qmimodem/devinfo.c @@ -45,7 +45,7 @@ static void string_cb(struct qmi_result *result, void *user_data) CALLBACK_WITH_SUCCESS(cb, str, cbd->data); - qmi_free(str); + l_free(str); } static void qmi_query_manufacturer(struct ofono_devinfo *devinfo, @@ -136,9 +136,9 @@ static void get_ids_cb(struct qmi_result *result, void *user_data) else CALLBACK_WITH_FAILURE(cb, NULL, cbd->data); - qmi_free(esn); - qmi_free(imei); - qmi_free(meid); + l_free(esn); + l_free(imei); + l_free(meid); } static void qmi_query_serial(struct ofono_devinfo *devinfo, diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 91469dc2e00c..632f647e5ea7 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -181,11 +181,6 @@ struct qmi_tlv_hdr { } __attribute__ ((packed)); #define QMI_TLV_HDR_SIZE 3 -void qmi_free(void *ptr) -{ - l_free(ptr); -} - static bool qmi_service_info_matches(const void *data, const void *user) { const struct qmi_service_info *info = data; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 821e54443658..de6238f25e62 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -56,8 +56,6 @@ enum qmi_data_endpoint_type { QMI_DATA_ENDPOINT_TYPE_BAM_DMUX = 0x05, }; -void qmi_free(void *ptr); - typedef void (*qmi_destroy_func_t)(void *user_data); diff --git a/drivers/qmimodem/sim-legacy.c b/drivers/qmimodem/sim-legacy.c index 1feaf86976c6..4c909f7f4ae4 100644 --- a/drivers/qmimodem/sim-legacy.c +++ b/drivers/qmimodem/sim-legacy.c @@ -71,14 +71,14 @@ static void get_iccid_cb(struct qmi_result *result, void *user_data) len = strlen(str); if (len > 20) { - qmi_free(str); + l_free(str); CALLBACK_WITH_FAILURE(cb, NULL, 0, cbd->data); return; } sim_encode_bcd_number(str, iccid); iccid_len = len / 2; - qmi_free(str); + l_free(str); CALLBACK_WITH_SUCCESS(cb, iccid, iccid_len, cbd->data); } @@ -128,7 +128,7 @@ static void get_imsi_cb(struct qmi_result *result, void *user_data) CALLBACK_WITH_SUCCESS(cb, str, cbd->data); - qmi_free(str); + l_free(str); } static void qmi_read_imsi(struct ofono_sim *sim, diff --git a/drivers/qmimodem/sim.c b/drivers/qmimodem/sim.c index 876274fa87b4..1fffae27f63e 100644 --- a/drivers/qmimodem/sim.c +++ b/drivers/qmimodem/sim.c @@ -427,7 +427,7 @@ static void get_imsi_cb(struct qmi_result *result, void *user_data) CALLBACK_WITH_SUCCESS(cb, str, cbd->data); - qmi_free(str); + l_free(str); } static void qmi_read_imsi(struct ofono_sim *sim, From patchwork Thu Jun 20 14:50:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705642 Received: from mail-oi1-f182.google.com (mail-oi1-f182.google.com [209.85.167.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 19F6C1A00E8 for ; Thu, 20 Jun 2024 14:51:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895110; cv=none; b=DcOERIYBtUaKwgX0njj5S66OdzMpupeoDROW3xcMAOGWEum8UCuiq7p0NDdNYKz1d5nBxCSTXhfojd1GVRBDkAp5x8jWTIjZBbGo2RAdQdRIgswiyYUEpru184FpCrLMxP+2xfQZ8rxwsp1JvgKRWwDENEJnA9eigiRGEJ9sdZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895110; c=relaxed/simple; bh=AqmRSXpqsa74kzD6L/BnSNSpMChihtQQEBU2ZB4UNWI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jCEcIBt/S0tSNDZxR4uOaa2YGb8usgrKHt/aXbWKQFqxQThPlPIByqueVZ79JYRXYnDijxlc2I5KyXvBCW0T9PfwWkB64P/qUR9gCSA7nfC4tmBxu7wYN9wBGxH9fjeyRFeOp24mGS7SdVd1+fRdtT/ALIktDzu2M4okVH3vCaA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JtG07q3V; arc=none smtp.client-ip=209.85.167.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JtG07q3V" Received: by mail-oi1-f182.google.com with SMTP id 5614622812f47-3c9d70d93dbso614267b6e.3 for ; Thu, 20 Jun 2024 07:51:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895108; x=1719499908; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UO1bu6fwYoOWz/p7z1OTd1k5bj+RKcc08WulqJPLBMU=; b=JtG07q3VZLs6qV1LuJzChSEfNxp5qR08jj08dXctlp5ia2mBCOiMJrIVFZy60n/1CT vuEFmzXVWgEaFV1tEy4oNuVKuBqvpPLhi70eVMrTsqzE0+w9seRz3GG5EhYrwgUazNcr 0mOjqHO+34RWnnwNju2zbVzbTTl/6bPz96SEhl7tX+zzLv/nwHWJbUWWiIaBbpTPUnLU dzuN+kazT30QHt+YSH6+Ewl+77CP0PjTI+BRlR6ky1pYDb5tfz+pfNwCFzOIU0x/6LHg GnWtYXWOxzsLCdDN2eYbaCcBurhsd4nif3C5mhwGG+VZSZcbKBqJiVJSt4Sh3fbemqOZ Bh5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895108; x=1719499908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UO1bu6fwYoOWz/p7z1OTd1k5bj+RKcc08WulqJPLBMU=; b=eUDzuWNXYTK3H7SMyys8Z4m15CtGD/eXbLWxsR1TV62kOX2IcWD9J6N5vtcgaozSgb MlRJN1T7C6XgTB+pCpfW0BdLISLfSaGsxv3QjEWePsdG1Rkq3MBb/4GZ1EktV5KWKfQt uTH3yEyZbzV4r/HrGyeci21JGtYxMIBmB1+6tiqVEqdbrgAMXCcH/WkpWSrIO8QwJ+Vt 1hTfcD7vOYhGJyeniMJujupMyw32nwvbAKl75/ppjXC8/jm6drNp7y1qWgFHBwSDv2cB UIVntEspdh6d4qLWVlYpc2/kpYAFiop3posi9YULVPUVzQ+Z//3ElNRejkAJZ1D0ta5T 3RwQ== X-Gm-Message-State: AOJu0Yws8Hh7/NJLxpB84kkeAn5B7XTupgC2T4GD9jhyXDva9CLpT1Ml 7/NgdZu8e6TFfTroClLBu4y1kFp0gHFrvKpqCPx0bFv1Wz4wuInnM4HzcQ== X-Google-Smtp-Source: AGHT+IF/FSIJwV98X/ihVpLtkRbz8RO9csXBwflNK2vh3uT/3JvHACZ0/BLliQb3Ppfv53d+HZzIZA== X-Received: by 2002:a05:6808:16a2:b0:3d5:2bb7:867 with SMTP id 5614622812f47-3d52bb71282mr1765704b6e.17.1718895107944; Thu, 20 Jun 2024 07:51:47 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:47 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 02/33] qmi: Rename qmi_result_func_t Date: Thu, 20 Jun 2024 09:50:49 -0500 Message-ID: <20240620145139.1135899-2-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 to qmi_service_result_func_t to be more consistent. --- drivers/qmimodem/call-settings.c | 2 +- drivers/qmimodem/qmi.c | 8 ++++---- drivers/qmimodem/qmi.h | 12 +++++------- drivers/qmimodem/sms.c | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/qmimodem/call-settings.c b/drivers/qmimodem/call-settings.c index 3611c98894a0..8a65217aceb0 100644 --- a/drivers/qmimodem/call-settings.c +++ b/drivers/qmimodem/call-settings.c @@ -24,7 +24,7 @@ struct call_settings_data { }; static void query_status(struct ofono_call_settings *cs, uint16_t message, - qmi_result_func_t fn, + qmi_service_result_func_t fn, ofono_call_settings_status_cb_t cb, void *data) { struct call_settings_data *csd = ofono_call_settings_get_data(cs); diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 632f647e5ea7..c5a4a37b917d 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -141,7 +141,7 @@ struct qmi_notify { uint16_t id; uint16_t message; unsigned int service_handle; - qmi_result_func_t callback; + qmi_service_result_func_t callback; void *user_data; qmi_destroy_func_t destroy; }; @@ -2678,7 +2678,7 @@ bool qmi_service_get_version(struct qmi_service *service, } struct service_send_data { - qmi_result_func_t func; + qmi_service_result_func_t func; void *user_data; qmi_destroy_func_t destroy; }; @@ -2722,7 +2722,7 @@ done: uint16_t qmi_service_send(struct qmi_service *service, uint16_t message, struct qmi_param *param, - qmi_result_func_t func, + qmi_service_result_func_t func, void *user_data, qmi_destroy_func_t destroy) { struct qmi_device *device; @@ -2838,7 +2838,7 @@ static bool qmi_service_cancel_all(struct qmi_service *service) } uint16_t qmi_service_register(struct qmi_service *service, - uint16_t message, qmi_result_func_t func, + uint16_t message, qmi_service_result_func_t func, void *user_data, qmi_destroy_func_t destroy) { struct qmi_notify *notify; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index de6238f25e62..3e532ec25abd 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -60,11 +60,14 @@ typedef void (*qmi_destroy_func_t)(void *user_data); struct qmi_device; +struct qmi_result; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); typedef void (*qmi_shutdown_func_t)(void *user_data); typedef void (*qmi_discover_func_t)(void *user_data); +typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); + void qmi_device_free(struct qmi_device *device); void qmi_device_set_debug(struct qmi_device *device, @@ -105,9 +108,6 @@ struct qmi_param *qmi_param_new_uint8(uint8_t type, uint8_t value); struct qmi_param *qmi_param_new_uint16(uint8_t type, uint16_t value); struct qmi_param *qmi_param_new_uint32(uint8_t type, uint32_t value); - -struct qmi_result; - bool qmi_result_set_error(struct qmi_result *result, uint16_t *error); const char *qmi_result_get_error(struct qmi_result *result); @@ -130,8 +130,6 @@ int qmi_error_to_ofono_cme(int qmi_error); struct qmi_service; -typedef void (*qmi_result_func_t)(struct qmi_result *result, void *user_data); - typedef void (*qmi_create_func_t)(struct qmi_service *service, void *user_data); bool qmi_service_create_shared(struct qmi_device *device, @@ -146,11 +144,11 @@ bool qmi_service_get_version(struct qmi_service *service, uint16_t qmi_service_send(struct qmi_service *service, uint16_t message, struct qmi_param *param, - qmi_result_func_t func, + qmi_service_result_func_t func, void *user_data, qmi_destroy_func_t destroy); bool qmi_service_cancel(struct qmi_service *service, uint16_t id); uint16_t qmi_service_register(struct qmi_service *service, - uint16_t message, qmi_result_func_t func, + uint16_t message, qmi_service_result_func_t func, void *user_data, qmi_destroy_func_t destroy); bool qmi_service_unregister(struct qmi_service *service, uint16_t id); diff --git a/drivers/qmimodem/sms.c b/drivers/qmimodem/sms.c index 4238665a5e8d..2ac06a40bdd6 100644 --- a/drivers/qmimodem/sms.c +++ b/drivers/qmimodem/sms.c @@ -353,7 +353,7 @@ static void delete_msg(struct ofono_sms *sms, uint8_t tag) { struct sms_data *data = ofono_sms_get_data(sms); struct qmi_param *param; - qmi_result_func_t func = NULL; + qmi_service_result_func_t func = NULL; DBG(""); From patchwork Thu Jun 20 14:50:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705643 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D54F31AE0AF for ; Thu, 20 Jun 2024 14:51:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895111; cv=none; b=P+IkPq6KD0VBDPnh9i2215Ph/dcUEpW8VBHzTXSQ1qXxQ5yiPilON7Es5PPlyP25J5OD29GRE1xAwrzp7qocmiDpWTQ42W3bYENOBnC2SdN3AfSB5AYTKfKQOCaLPGV5e3UWqTF0d1+DfmXtHCWSTTI9Mxk6OKTDXvWJgA7LCfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895111; c=relaxed/simple; bh=jhZSc7mmecQDcJyyp7Wo7xsMqmbFD4HSRjTKXpfRInk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mypefVxZ+tS4+guYClEsvegRhxVP1vnpDaWORHA8N9NIJzHZX5kgF/VwHQH0+0yRVmNuP8r0k7Asbxb0wYayJ8yO/xJINQ+Ad6ApnUvZ71pRN3VlIYl3dDFNqsVtKjN07yFJao1u5k+z4CJIZ6FkAQIsljQ8z/+SZgfBsECI1cQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jirqcVtc; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jirqcVtc" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3c9cc681ee7so404794b6e.1 for ; Thu, 20 Jun 2024 07:51:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895109; x=1719499909; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/a5GQJiVGU59uFyb+ZmHYVCwEBORjMl826K6459n2W4=; b=jirqcVtc74bLGcWQdiJ00rCG3uwgvL7V93gmwbpG6iE9CMTL6tJ0uleqjYfYKxjIjq Xn4vxkFwKbnWXzWYMv0EswSChDsvcMm6qSJ88mmQVzbId6drw+iQA+NSNgMHOQBNUsXw PxfSgyUJgvPjmjPtaDUyqiX5VOJzASf2lqJdvnDvE1Z8U8NXFlUoJjQrV2IlMmrdFlu6 XkHDgKd4v2Iz6h/+1q+GGdoc5E86mo5T+1ykBIGFxeF7VEJZGscK5uDbCemwcrMQIoTc byPVRV8rKpfHoAbI6w1A9vOnd37zH6gxdUnEYdSShhOuD58603pl57KzsPOlnLBjbHRA DJMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895109; x=1719499909; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/a5GQJiVGU59uFyb+ZmHYVCwEBORjMl826K6459n2W4=; b=VRQmpEyVMTiRB66S4HBuvREFtSYw+l+uibEk2dGWJsdh+1K720SIEXBmIhC8jBSVpm qe2dByJPlg5ZMEGKrUOOpwnEGw+IuI3YOHX5TRU0JkZ8SrVn4cNGmdF41MdyM/efD8Tc AT2MS/OQ1K5LmY4k4AvY0OEv3fAO2+e2CTP5Br6WPW4gLg9YiaeZVnTSVJb02qOp8BDk CEYHfw6X9Vgc1yb1gPsIOwS8n2uc0I0pGZs9hfdZpEi26BO6uvJ7OW8yonSyYJi68Mtd eCBDNo5CkfaHwuIi16TA2B6w3WAEXqftsg/rQYadwdRqhzaFEhPC8aMT7Daa0ZaSqIHR R2Ww== X-Gm-Message-State: AOJu0YzC/jlpFzPbuP6evUpe39CnGiivjkI/2apZtzQn+qIMFBjM7CwX zK53BFV4coJYcps3RkBhiwb6Ud/9I99K1r/2QKDu7/h+7jLlIAn53UX9wA== X-Google-Smtp-Source: AGHT+IGog4fxaur9G51IERSpENQk97EhCEzSP0BSE7dItTcRo0nnvYAfySt7INz6arupjD3Y6Mwurw== X-Received: by 2002:a05:6808:1827:b0:3d2:ec:d3ee with SMTP id 5614622812f47-3d50f131660mr3580164b6e.27.1718895108677; Thu, 20 Jun 2024 07:51:48 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:48 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 03/33] qmi: Drop unused major/minor information Date: Thu, 20 Jun 2024 09:50:50 -0500 Message-ID: <20240620145139.1135899-3-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 QMI radio-settings, ussd and voicecall atoms request and store the service version major/minor numbers, but never use this information. Remove this functionality until needed. --- drivers/qmimodem/radio-settings.c | 4 ---- drivers/qmimodem/ussd.c | 3 --- drivers/qmimodem/voicecall.c | 4 ---- 3 files changed, 11 deletions(-) diff --git a/drivers/qmimodem/radio-settings.c b/drivers/qmimodem/radio-settings.c index 8463c84bf1ed..cf0b747eb681 100644 --- a/drivers/qmimodem/radio-settings.c +++ b/drivers/qmimodem/radio-settings.c @@ -21,8 +21,6 @@ struct settings_data { struct qmi_service *nas; struct qmi_service *dms; - uint16_t major; - uint16_t minor; }; static void get_system_selection_pref_cb(struct qmi_result *result, @@ -211,8 +209,6 @@ static int qmi_radio_settings_probev(struct ofono_radio_settings *rs, data->dms = dms; data->nas = nas; - qmi_service_get_version(data->nas, &data->major, &data->minor); - ofono_radio_settings_set_data(rs, data); return 0; diff --git a/drivers/qmimodem/ussd.c b/drivers/qmimodem/ussd.c index 6637ae759c55..51c3aaef7a19 100644 --- a/drivers/qmimodem/ussd.c +++ b/drivers/qmimodem/ussd.c @@ -24,8 +24,6 @@ struct ussd_data { struct qmi_service *voice; - uint16_t major; - uint16_t minor; }; static int validate_ussd_data(const struct qmi_ussd_data *data, uint16_t size) @@ -156,7 +154,6 @@ static int qmi_ussd_probe(struct ofono_ussd *ussd, data = l_new(struct ussd_data, 1); data->voice = voice; - qmi_service_get_version(data->voice, &data->major, &data->minor); qmi_service_register(data->voice, QMI_VOICE_USSD_IND, async_ind, ussd, NULL); qmi_service_register(data->voice, QMI_VOICE_ASYNC_ORIG_USSD, diff --git a/drivers/qmimodem/voicecall.c b/drivers/qmimodem/voicecall.c index c7a5230f9680..aed662da7ef6 100644 --- a/drivers/qmimodem/voicecall.c +++ b/drivers/qmimodem/voicecall.c @@ -24,8 +24,6 @@ struct voicecall_data { struct qmi_service *voice; - uint16_t major; - uint16_t minor; struct l_queue *call_list; struct ofono_phone_number dialed; char *full_dtmf; @@ -721,8 +719,6 @@ static int qmi_voicecall_probe(struct ofono_voicecall *vc, data->voice = voice; data->call_list = l_queue_new(); - qmi_service_get_version(data->voice, &data->major, &data->minor); - qmi_service_register(data->voice, QMI_VOICE_ALL_CALL_STATUS_IND, all_call_status_ind, vc, NULL); From patchwork Thu Jun 20 14:50:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705644 Received: from mail-oi1-f181.google.com (mail-oi1-f181.google.com [209.85.167.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94C95176255 for ; Thu, 20 Jun 2024 14:51:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895112; cv=none; b=hwGjxwBwUcJs53WQHoO6z/vNu6IVQZ74nNe9ZhycJfJnlHGEgYKp4+QSzAFNf9e/wdNtrp3vG9IBXeBpsBQnze8cHvMuWaA72BFV35PcIFrLfFQ1eYejYOQfvEn0uoG29famf7wjCNgUxg7lO/nkvaAkN94vagoHNbuJbi1DRPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895112; c=relaxed/simple; bh=cvtgdm1y3G36NkEXoYKr7nrLcI+ssUA9k2ctylwZ3dk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RFptp+LCVN97xqM11zsQI/nN3prXeM6RLPoXjGkgzvhnhx8okPKCGM0hrvLEp+X7XOyy9XGCT28yJ6FEkUA/Mr6QH87D+dG53kmtY1dTiCrj0rtVnZaBEW1gyr0W91uLCEAQhVPGUyISs8Q4FK+gt0ODzh7ETOtFjSHZhpcvE/8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=j+jLopac; arc=none smtp.client-ip=209.85.167.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="j+jLopac" Received: by mail-oi1-f181.google.com with SMTP id 5614622812f47-3d518cdb252so453116b6e.1 for ; Thu, 20 Jun 2024 07:51:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895109; x=1719499909; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=f5bZSi5L/Rb3uzEjv2RqXCaHnwLky7slVhKdTDg/n/Q=; b=j+jLopacvHYFPWtSpjXUcUbPL8XWCOf4pdGZLyikTiWqOqMEigMkzABMeBw7Z1vBMC 0ej8IW6tdTmU8fispdyWSwmJXtkUD0YJa7AHIPd3/w+G0zebqzbs0kIrm9363JW8N9b3 C96DsRYbD4qKaAYNMDelUbw/oxgDcmwr+N9xJtY9w0SmqkYUbrwkgpKmNc1ANH4XiS/i CpdNlu3vLtB3BMRTNaEUnUH+UQvGdkzWCF6Hu5+qPv14JKGdTiFlxjssqUKrvhkCfKFv 0s2FY4zQcUaZ9tuUfiziycNs0szZ2eva3iGVSOq2TsCw13HcXRwnD7HiReXPClGYXc+E mlXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895109; x=1719499909; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f5bZSi5L/Rb3uzEjv2RqXCaHnwLky7slVhKdTDg/n/Q=; b=j69urtfFEWnNIojtkLygUPbvN8GkLXhGZYDPx1Hk694fhZotzkVbdj9FHtM2bEkQNM LehOPrN8bXZSDfij4OYzfLUlNP0RwU3F79/dTNf0pPgxOEYSDSWS3pztzfOLPUBUfx3J 4e8tvjXIIJc9ClmK56O26OHl1Z79Itx4vP0bsy9EIhhSqwIo36x8rrVitjFBMkoqAubb 5MVj+VN9ql/S2CaCZuxW5V/lCy/aijFjxlq2nqoWWJfOre4ZnOy1Xc3HRVj+0z+b99sT tejmEqYXTBtyrHZ8utQhtauBK8mbYCwSLIHCAO6TVH6+AbI0gkRcv4Zmkz8SjUbWpU/+ 6UIA== X-Gm-Message-State: AOJu0Yzi3g5J3nzv7F0apd0ACFp2exvp8y4DRucHUpJPR+AW8Ie1K29x VwlgA7TPM26xUVabNfmMKuVUzktTrTXdMmZ9XDRwu5ei8C5Ix25DxoxAoQ== X-Google-Smtp-Source: AGHT+IFAvWOFstPzofhc2kKxZigCB6gqrpub0FeMxRIQnbDo5hOmI0vZyQ/Lmr1PogzmMThq7gvwNg== X-Received: by 2002:a05:6808:238f:b0:3d2:2a43:1c03 with SMTP id 5614622812f47-3d51b96c6e0mr5729881b6e.9.1718895109459; Thu, 20 Jun 2024 07:51:49 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:49 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 04/33] qmi: Add qmi_qrtr_node_get_service Date: Thu, 20 Jun 2024 09:50:51 -0500 Message-ID: <20240620145139.1135899-4-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Introduce a new method that will return a qmi_service object handle immediately, if possible. This allows the lightweight service handles to be obtained without requiring the caller to provide a callback function and waiting for the event loop to invoke it. On QRTR, the underlying socket can access all services directly without needing to exchange any messages to allocate a client for that service first, as done by QMUX using QMI_CTL_GET_CLIENT_ID. --- drivers/qmimodem/qmi.c | 26 ++++++++++++++++++++++++++ drivers/qmimodem/qmi.h | 7 ++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index c5a4a37b917d..c3b1f7fef64f 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -2332,6 +2332,32 @@ struct qmi_device *qmi_device_new_qrtr(void) return &qrtr->super; } +struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, + uint32_t type) +{ + struct service_family *family; + const struct qmi_service_info *info; + + if (!device) + return NULL; + + if (type == QMI_SERVICE_CONTROL) + return NULL; + + family = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(type)); + if (family) + goto done; + + info = __find_service_info_by_type(device, type); + if (!info) + return NULL; + + family = service_family_create(device, info, 0); + l_hashmap_insert(device->family_list, L_UINT_TO_PTR(type), family); +done: + return service_create(family); +} + struct qmi_param *qmi_param_new(void) { return l_new(struct qmi_param, 1); diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 3e532ec25abd..604e4e7e8659 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -58,9 +58,9 @@ enum qmi_data_endpoint_type { typedef void (*qmi_destroy_func_t)(void *user_data); - struct qmi_device; struct qmi_result; +struct qmi_service; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); typedef void (*qmi_shutdown_func_t)(void *user_data); @@ -90,6 +90,9 @@ bool qmi_device_set_expected_data_format(struct qmi_device *device, struct qmi_device *qmi_device_new_qmux(const char *device); struct qmi_device *qmi_device_new_qrtr(void); +struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, + uint32_t type); + struct qmi_param; struct qmi_param *qmi_param_new(void); @@ -128,8 +131,6 @@ void qmi_result_print_tlvs(struct qmi_result *result); int qmi_error_to_ofono_cme(int qmi_error); -struct qmi_service; - typedef void (*qmi_create_func_t)(struct qmi_service *service, void *user_data); bool qmi_service_create_shared(struct qmi_device *device, From patchwork Thu Jun 20 14:50:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705645 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61718176255 for ; Thu, 20 Jun 2024 14:51:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895115; cv=none; b=nA4wC2QdS4Zgu/Oxvh2SxNE2KiTcPJFQEks64icb6CoX1xZ1qjr359Qo/APwJlNlegiKkYiNLu/hKObiFmY6Psdl2bBlPQX6Kn4Gcx8B1YFz6mMaAP5loK96vBd7I1ilhmop42otsX1aYKdkSxJz4ppyX0wUtqjgHxQum6Ibxm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895115; c=relaxed/simple; bh=H3QsSyyWhQW3NsalYj13U8DxijWHPiHDGMiGEpfhiiQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ErH/lDaCYmEZmlQt2IteXSVx0+F2rp/aDHi8bcrr+FRJtDA+86k7yGZ/6TBEJIbRNS4HEQlRad8gpaxA1u8QonKXAueK57fL00c/tTjJSKXaUgC0+Ate1xKIUtmycQeycNid/1tvN5Tz1pTHscxKRplETE5gXq8iVAO5haznme8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ez1sR4t2; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ez1sR4t2" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3d215a594b9so462236b6e.3 for ; Thu, 20 Jun 2024 07:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895112; x=1719499912; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GzzL3/8tP9XuVP9bHSpPPMmIL15+rFeLNzCIZlRE1kQ=; b=ez1sR4t2Hnj3vE2x4sLIxBZvQTRbHuqAwuHb7T8mWPskH77YGWMdjYHUjZRZUzVaFt v0//wKhpgBYKQAZQ02MerRaY0g1/IRXNI/XRyKnHosZiI4Ovgb1LOdv1VgSBhhidNLAX knTFOBt7s5DRqJ798cp8BTMLYbkFjkcyTTRJRdsM1b8G7MeMP/mqyAMuLI+uhJjTgsqA ddkNtu9Ec1EFk4oZGdts1ru1D/T6GQImXRDDloDvwOkzzq2UbaiHApY85WlnXYKxlWqF OVAof8wGt0ncQV7tmqePXGr9nlH7VZ+xGw45jUS0IsnuTjTz6Y2jaicU4Ng2xWFCLoHa SD8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895112; x=1719499912; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GzzL3/8tP9XuVP9bHSpPPMmIL15+rFeLNzCIZlRE1kQ=; b=HAaVXfrqe27K6RkFW0fBRG1keM+rpcxyHO9pWQe2yxIIjDf5pJM3ZIxLJib8Zxk/eE BE+vA/A1NXxGi7pyKuMblOGUDu1bWj045jVquaDUWOO/kWpwsrn4tGE/MFntK7dAHD6B Tf5N66rPRbV3rLTKgL0TfJe47qhwo1vu8ACL/VQX5IhvTLBEVPoTJk7py9kset6OjAQy 4JUXLX4JIj9UeJW6E58IaPL3u9YPrs/0Cx0ufT3969AppecHBHRQZWGWgVuivH6bwckq XPAFjMd3kAXtopfF5/0OTxxH2bjhSOndfNhjZgt5z26S0Gw1JGzgf30Dq2niEX/Vskdt wrLA== X-Gm-Message-State: AOJu0Yz6fgp9fDEW5xW+RYIWRKdUQ4f3eyfERK8PGF344R6gFaZEOOvE c5muHSoh/Be0SQK+OKOHnxDZ6DCOjR+PJcq+HX1Gy76r+161ELnMw96efw== X-Google-Smtp-Source: AGHT+IG6FFSgVAGX3o2VSIaUzr2Hc8a5I/VynfaNwfYQ5pLpDfoYjTGvJaPJJFIvbaoce/LK4n7l9g== X-Received: by 2002:a05:6808:16a7:b0:3d2:292e:1a3b with SMTP id 5614622812f47-3d527fd2e41mr3057575b6e.0.1718895110261; Thu, 20 Jun 2024 07:51:50 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:49 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 05/33] plugins: Add new qrtrqmi modem driver Date: Thu, 20 Jun 2024 09:50:52 -0500 Message-ID: <20240620145139.1135899-5-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This driver will be used for QRTR based devices (MHI bus and SoC) --- Makefile.am | 1 + plugins/qrtrqmi.c | 430 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 431 insertions(+) create mode 100644 plugins/qrtrqmi.c diff --git a/Makefile.am b/Makefile.am index d904dd95c761..d379201d362b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -387,6 +387,7 @@ builtin_sources += $(qmi_sources) \ drivers/qmimodem/call-forwarding.c builtin_sources += plugins/gobi.c +builtin_sources += plugins/qrtrqmi.c endif if MBIMMODEM diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c new file mode 100644 index 000000000000..9d2038a9b50c --- /dev/null +++ b/plugins/qrtrqmi.c @@ -0,0 +1,430 @@ +/* + * oFono - Open Source Telephony + * Copyright (C) 2008-2012 Intel Corporation + * Copyright (C) 2024 Cruise, LLC + * + * SPDX-License-Identifier: GPL-2.0-only + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#define OFONO_API_SUBJECT_TO_CHANGE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +struct qrtrqmi_data { + struct qmi_device *node; + struct qmi_service *dms; + int main_net_ifindex; + char main_net_name[IFNAMSIZ]; + bool have_voice : 1; +}; + +static void qrtrqmi_debug(const char *str, void *user_data) +{ + const char *prefix = user_data; + + ofono_info("%s%s", prefix, str); +} + +/* + * Probe the modem. The following modem properties are expected to be set + * in order to initialize the driver properly: + * + * NetworkInterface + * The string that contains the 'main' network device. This can be + * "rmnet_ipa" on SoC systems, or "wwan0" for upstream linux systems. + * + * NetworkInterfaceIndex + * The index of the main interface given by NetworkInterface + * + * NetworkInterfaceKernelDriver + * The kernel driver that is being used by the main network device. + * + * Bus + * The bus of the modem. Values can be "embedded", or "pci" + */ +static int qrtrqmi_probe(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data; + const char *if_driver; + const char *ifname; + int ifindex; + const char *bus; + + DBG("%p", modem); + + if_driver = ofono_modem_get_string(modem, + "NetworkInterfaceKernelDriver"); + ifname = ofono_modem_get_string(modem, "NetworkInterface"); + ifindex = ofono_modem_get_integer(modem, "NetworkInterfaceIndex"); + bus = ofono_modem_get_string(modem, "Bus"); + + DBG("net: %s[%s](%d) %s", ifname, if_driver, ifindex, bus); + + if (!if_driver || !ifname || !ifindex || !bus) + return -EPROTO; + + data = l_new(struct qrtrqmi_data, 1); + data->main_net_ifindex = + ofono_modem_get_integer(modem, "NetworkInterfaceIndex"); + l_strlcpy(data->main_net_name, + ofono_modem_get_string(modem, "NetworkInterface"), + sizeof(data->main_net_name)); + ofono_modem_set_data(modem, data); + ofono_modem_set_capabilities(modem, OFONO_MODEM_CAPABILITY_LTE); + + return 0; +} + +static void qrtrqmi_deinit(struct qrtrqmi_data *data) +{ + qmi_service_free(data->dms); + data->dms = NULL; + qmi_device_free(data->node); + data->node = NULL; +} + +static void qrtrqmi_remove(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + + DBG("%p", modem); + + ofono_modem_set_data(modem, NULL); + + qrtrqmi_deinit(data); + l_free(data); +} + +static void power_reset_cb(struct qmi_result *result, void *user_data) +{ + struct ofono_modem *modem = user_data; + + DBG(""); + + if (qmi_result_set_error(result, NULL)) { + qrtrqmi_deinit(ofono_modem_get_data(modem)); + ofono_modem_set_powered(modem, FALSE); + return; + } + + ofono_modem_set_powered(modem, TRUE); +} + +static void get_oper_mode_cb(struct qmi_result *result, void *user_data) +{ + struct ofono_modem *modem = user_data; + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_param *param; + uint8_t mode; + + DBG(""); + + if (qmi_result_set_error(result, NULL)) + goto error; + + if (!qmi_result_get_uint8(result, QMI_DMS_RESULT_OPER_MODE, &mode)) + goto error; + + switch (mode) { + case QMI_DMS_OPER_MODE_ONLINE: + param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE, + QMI_DMS_OPER_MODE_LOW_POWER); + + if (qmi_service_send(data->dms, QMI_DMS_SET_OPER_MODE, param, + power_reset_cb, modem, NULL) > 0) + return; + + break; + default: + ofono_modem_set_powered(modem, TRUE); + return; + } + +error: + qrtrqmi_deinit(data); +} + +static void lookup_done(void *user_data) +{ + struct ofono_modem *modem = user_data; + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_device *node = data->node; + + DBG(""); + + if (!qmi_device_has_service(node, QMI_SERVICE_DMS) || + !qmi_device_has_service(node, QMI_SERVICE_UIM) || + !qmi_device_has_service(node, QMI_SERVICE_WDS) || + !qmi_device_has_service(node, QMI_SERVICE_NAS)) + goto error; + + data->dms = qmi_qrtr_node_get_service(node, QMI_SERVICE_DMS); + if (qmi_service_send(data->dms, QMI_DMS_GET_OPER_MODE, NULL, + get_oper_mode_cb, modem, NULL) > 0) + return; +error: + qrtrqmi_deinit(data); + ofono_modem_set_powered(modem, FALSE); +} + +static int qrtrqmi_enable(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + int r; + + DBG("%p", modem); + + data->node = qmi_device_new_qrtr(); + if (!data->node) + return -EIO; + + if (getenv("OFONO_QMI_DEBUG")) + qmi_device_set_debug(data->node, qrtrqmi_debug, "QRTR: "); + + r = qmi_device_discover(data->node, lookup_done, modem, NULL); + if (!r) + return -EINPROGRESS; + + return r; +} + +static void power_disable_cb(struct qmi_result *result, void *user_data) +{ + struct ofono_modem *modem = user_data; + + DBG(""); + + qrtrqmi_deinit(ofono_modem_get_data(modem)); + ofono_modem_set_powered(modem, FALSE); +} + +static int qrtrqmi_disable(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_param *param; + + DBG("%p", modem); + + param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE, + QMI_DMS_OPER_MODE_LOW_POWER); + + if (qmi_service_send(data->dms, QMI_DMS_SET_OPER_MODE, param, + power_disable_cb, modem, NULL)) + return -EINPROGRESS; + + qmi_param_free(param); + qrtrqmi_deinit(data); + return -EIO; +} + +static void set_online_cb(struct qmi_result *result, void *user_data) +{ + struct cb_data *cbd = user_data; + ofono_modem_online_cb_t cb = cbd->cb; + + DBG(""); + + if (qmi_result_set_error(result, NULL)) + CALLBACK_WITH_FAILURE(cb, cbd->data); + else + CALLBACK_WITH_SUCCESS(cb, cbd->data); +} + +static void qrtrqmi_set_online(struct ofono_modem *modem, ofono_bool_t online, + ofono_modem_online_cb_t cb, void *user_data) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct cb_data *cbd = cb_data_new(cb, user_data); + struct qmi_param *param; + + DBG("%p %s", modem, online ? "online" : "offline"); + + param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE, + online ? QMI_DMS_OPER_MODE_ONLINE : + QMI_DMS_OPER_MODE_LOW_POWER); + + if (qmi_service_send(data->dms, QMI_DMS_SET_OPER_MODE, param, + set_online_cb, cbd, l_free) > 0) + return; + + qmi_param_free(param); + l_free(cbd); +} + +static void qrtrqmi_pre_sim(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_device *node = data->node; + struct qmi_service *voice; + + DBG("%p", modem); + + ofono_devinfo_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_DMS)); + + ofono_sim_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_DMS), + qmi_qrtr_node_get_service(node, QMI_SERVICE_UIM)); + + voice = qmi_qrtr_node_get_service(node, QMI_SERVICE_VOICE); + if (voice) { + data->have_voice = true; + ofono_voicecall_create(modem, 0, "qmimodem", voice); + } +} + +static int setup_gprs_context(uint8_t mux_id, const char *interface, + struct ofono_gprs *gprs) +{ + struct ofono_modem *modem = ofono_gprs_get_modem(gprs); + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_qrtr_node *node = data->node; + struct ofono_gprs_context *gc; + + gc = ofono_gprs_context_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_WDS)); + if (!gc) { + ofono_warn("Unable to create gprs-context for: %s, %s[%u]", + ofono_modem_get_path(modem), interface, mux_id); + return -ENOPKG; + } + + ofono_gprs_add_context(gprs, gc); + ofono_gprs_context_set_interface(gc, interface); + return 0; +} + +static void setup_gprs(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_qrtr_node *node = data->node; + int n_premux = ofono_modem_get_integer(modem, "NumPremuxInterfaces"); + struct ofono_gprs *gprs; + const char *interface; + char buf[256]; + int i; + + gprs = ofono_gprs_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_WDS), + qmi_qrtr_node_get_service(node, QMI_SERVICE_NAS)); + if (!gprs) { + ofono_warn("Unable to create gprs for: %s", + ofono_modem_get_path(modem)); + return; + } + + for (i = 0; i < n_premux; i++) { + int mux_id; + + sprintf(buf, "PremuxInterface%dMuxId", i + 1); + mux_id = ofono_modem_get_integer(modem, buf); + + sprintf(buf, "PremuxInterface%d", i + 1); + interface = ofono_modem_get_string(modem, buf); + + setup_gprs_context(mux_id, interface, gprs); + } +} + +static void qrtrqmi_post_sim(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_device *node = data->node; + struct qmi_service *wms; + + DBG("%p", modem); + + ofono_lte_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_WDS)); + + ofono_radio_settings_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_DMS), + qmi_qrtr_node_get_service(node, QMI_SERVICE_NAS)); + + wms = qmi_qrtr_node_get_service(node, QMI_SERVICE_WMS); + if (wms) { + struct ofono_message_waiting *mw = NULL; + + ofono_sms_create(modem, 0, "qmimodem", wms); + + if (qmi_device_has_service(node, QMI_SERVICE_UIM)) + mw = ofono_message_waiting_create(modem); + + if (mw) + ofono_message_waiting_register(mw); + } + + setup_gprs(modem); +} + +static void qrtrqmi_post_online(struct ofono_modem *modem) +{ + struct qrtrqmi_data *data = ofono_modem_get_data(modem); + struct qmi_device *node = data->node; + + DBG("%p", modem); + + ofono_netreg_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_NAS)); + ofono_netmon_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_NAS)); + + if (!data->have_voice) + return; + + ofono_ussd_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_VOICE)); + ofono_call_settings_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_VOICE)); + ofono_call_barring_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_VOICE)); + ofono_call_forwarding_create(modem, 0, "qmimodem", + qmi_qrtr_node_get_service(node, QMI_SERVICE_VOICE)); +} + +static struct ofono_modem_driver qrtrqmi_driver = { + .probe = qrtrqmi_probe, + .remove = qrtrqmi_remove, + .enable = qrtrqmi_enable, + .disable = qrtrqmi_disable, + .set_online = qrtrqmi_set_online, + .pre_sim = qrtrqmi_pre_sim, + .post_sim = qrtrqmi_post_sim, + .post_online = qrtrqmi_post_online, +}; + +OFONO_MODEM_DRIVER_BUILTIN(qrtrqmi, &qrtrqmi_driver) From patchwork Thu Jun 20 14:50:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705646 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 256A31AE09E for ; Thu, 20 Jun 2024 14:51:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895115; cv=none; b=D83Rsv9EnDGKqoD/4TYTReOlqCxScCa1+01Yz5hCkdfdzwpuFvy0+A1qTAtDYRMF9opp1iSlVPYD53fTbnmuwN2J9YgmUi4Xc/7P8uYCYRbBrmmlCaNu2nVALC1mGEJDg5fIKENEoxG33hIlxYE27RWrJe/ralz6xAPG2FvM2k4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895115; c=relaxed/simple; bh=SFF15oEOE/+E0tbwO5fuCPcKrHEuiMdsM/IAIgKDYR4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fVJbP1KQvHWoRBTzsilAs+9uXmEvjYvS9Z8FqtZOBCdyZd8oMJl4IHzHZ90jgM+MKCVn+80swD2BaPqKNH0xMNAw4GQU31uw8wsoWepDaYd48O4HrDhU7exDgtLYmt0IlvxIPyYEN3DSaVaappQ0ZWKS2oJrpM1/Uz0wKPAii1c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Gp9JIHkO; arc=none smtp.client-ip=209.85.167.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Gp9JIHkO" Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3d21e00d9cfso549774b6e.2 for ; Thu, 20 Jun 2024 07:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895113; x=1719499913; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kl+oU570NwiMyhYtTo8ADyrZCetA3v81aYfFwn6Tyew=; b=Gp9JIHkOsW+/vvz7Amr1ytvdrscna5aPRo8gm/2Uh0YqLBjm5vQiSAI0ee3ecTQUJD x5apE3o7oLpYnYJW41jHH3xJxNFRzBuiALJ0X28tbXuQBWxk9MLRc8YLDUDI3XmdgmUZ zFyitpD7ee4VAz+VWx3s4U9ic4wZ5CIKRvHQgakCT6UoC+KtetXmwO6pq3H6bZkVlqiN 77BJLkiptkDny+gZ6+BN+2n5Sm1ZvI6Yc4j5+VCHKSTaVZQ0QFXAV6Vjjg++m+O+gK1j hq8vlzm5LYFaJgPs6JuJlXjUJ7QkdndXfkMkaXj5SetObBhWYsUlCbx/QvrwmxHuMkpU pPTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895113; x=1719499913; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kl+oU570NwiMyhYtTo8ADyrZCetA3v81aYfFwn6Tyew=; b=L4s4xtHVHDm0lMwVZmE6moHXC9cBYVpAfVd7V3hW9lKtXgdt9eAbahZwEtT/IcPsC+ Hv3Ue/zhrtU/yLlNW5fozYSPqFeSxqyGJRjjUVh0aw2aw/p5IAqSgrOVWjgkvo11Vop5 NgguJZAh5h5J3WE8ohz7YWnpGwFYHf4ZknX5uosi6yiOs3CQt3x9G2oqAGbQ5o3hf+jl QCe4etU5pi7dp3AasrZ1DxDwS7y7qfB2OXqLI+4xLhEUYJenOZJw6Pip4lCTU/I4YVbf 5e1lQVOSX2U3RY5zmX57Fkq8j4tnz9ltH2Ml6/Ws2pxmwOqvZJ/Jmq8yFaCl7vEmIzfs lksw== X-Gm-Message-State: AOJu0YypqcCbFI+VxLmR++fPUM8gE8Y7tWGVXQu3I3vhYYsjVQrGHlPt LKm+rTFG3MhfO/OirblWT7U7o0MhiVJr2sQgU1jVVO5OHTF14K1L2QRK2g== X-Google-Smtp-Source: AGHT+IHkOVak4JREt1ky5IpAkr5Z0xxklwMGlcS2C7q+u35jYUmrqDPPsh67j3G0ArBtndw3BD78QQ== X-Received: by 2002:a05:6808:19a6:b0:3d2:2999:e14e with SMTP id 5614622812f47-3d51b97dce5mr6573295b6e.18.1718895112999; Thu, 20 Jun 2024 07:51:52 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:52 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 06/33] gobi: Use correct attribute name in docs Date: Thu, 20 Jun 2024 09:50:53 -0500 Message-ID: <20240620145139.1135899-6-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The name should be NetworkInterfaceKernelDriver, not NetworkInterfaceDriver. Fixes: b3ff67d78830 ("gobi: ensure required properties are provided") --- plugins/gobi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/gobi.c b/plugins/gobi.c index 5402bedcc22e..d8fd90153054 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -112,7 +112,7 @@ static void gobi_debug(const char *str, void *user_data) * NetworkInterfaceIndex * The index of the main interface given by NetworkInterface * - * NetworkInterfaceDriver + * NetworkInterfaceKernelDriver * The kernel driver that is being used by the main network device. Certain * drivers such as 'qmi_wwan' or 'qmi_wwan_q' are treated specifically. * From patchwork Thu Jun 20 14:50:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705647 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C187C1AE0B4 for ; Thu, 20 Jun 2024 14:51:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895116; cv=none; b=X3UE1gJGpIqM5DqSrWLONjQd1KkorXza0qRt8c7afhcf6VlbkmkTNUmMaPTLnsEBbojo6u6yz8ysSb70mYOg11G0BzeZguwnHfTEKrhw5b050yEjn4zliAp+VPBvcPrfasAO9pi8x1IdfJ48yzfHLJZYKh3dsLrYEL3mWYSHCzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895116; c=relaxed/simple; bh=/bJIVDzUX2e5StEymqjn7ZCFKph0WNy6h/8JY7C7LB0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bvZhMmivTJqiEGCeVdIuAMa/gS40NdATIOxftlTFphs+fOryS5BV4lWSR1+LaGtgAsuHb/Wa+eloPrmkgbc5SB1vzvBIA62O1dQti0tZPRxEk47It/o3+bf4sNl1BBmv6o8iwcukyccJtSUkAAD/xN4yrLaRnwSKmhg4nKDGX4E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gkhMpT0s; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gkhMpT0s" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3d21f253a53so425639b6e.2 for ; Thu, 20 Jun 2024 07:51:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895114; x=1719499914; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Eh4nL2Xqu/H5NtYMM7qVpf7I932OuBKzjLpQY+cEmLY=; b=gkhMpT0sxW/ZZ90EHk/nESrylDMGcQIeIz7g+4gudgL9sCdO3BxuAgmi11eiFXk38w kppxa+Su4LUj3ie5CDH/oOi5JBTbZm0aavS3oc7Nlty0u174e4OKNaW+Ky7xaCT5UHW+ Q7FoJ+NZ/M65VGSZaQF3KpHYIxHDLzDv4dky+GT5PDCGsrpF1fR7C1KRMPLOmhWP2u/p 4K4+9UIRHBks+KXkDjGQCQMJxWRd8ugdCqIOp8qwo76AtiV3ke3rDmtCabQlQBFnJcBv FU2+9kBb+KiQ9IkSnoEL4RjqY+oX2j2KOBN+aqJHVGAwWZZXdkOqnTQB/DNJJizyrEji Ujmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895114; x=1719499914; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Eh4nL2Xqu/H5NtYMM7qVpf7I932OuBKzjLpQY+cEmLY=; b=S1m0KXba7ShssoUAJO0E/ikawuuHgSFSfo3RC9m8DYFjdMMi/8CtODnkRHUqeTL8SV Eq42IeqSQLe8vxCVRP4Mmy2K7VL0ntnz0vP7I4MwaNJs6WlKKeTg7BKJAJVm+LFDL+T8 8PDJSlpZnH0r8B8Vehl6ixCReKVx+Lm/+PS/3iWndQ9sWsMwSVSZQd75EpFGR2zgBu8r ZXVNskq+gv8icDuV2CqsOzaF5mXdG00mwnmIuGQk0nVMk/ulNwivZSoAv4/StRz8CDng whxHfXSPVWW8/AxIcSBsnU5blz2MtS6LbIVSWylzJtIX5P+DPji923XePhvqcRDu97Og S0Qg== X-Gm-Message-State: AOJu0Yx9r6XMIaLD0hLRxm2tqv05JEvGIzRmAyYX7mg4rpaxI2CNcbQC LOCdAzkqtRnbBvEMYhJLjmkam+pA7n32NYFZD1/K9lFHvVl6WDkL6Fm1CQ== X-Google-Smtp-Source: AGHT+IHKFhnK/DATvOmZkHJSz+8h5/tWVGXUXrGBH9mtrgANJPVPKBGMMZ5eamo4B145qEX4TELiFQ== X-Received: by 2002:a05:6808:220c:b0:3d2:281a:31b1 with SMTP id 5614622812f47-3d51ba9feb3mr6184843b6e.34.1718895113681; Thu, 20 Jun 2024 07:51:53 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:53 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 07/33] udevng: Use new qrtrqmi driver for MHI and SoC modems Date: Thu, 20 Jun 2024 09:50:54 -0500 Message-ID: <20240620145139.1135899-7-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The new qrtrqmi driver only supports QRTR based devices, so drop the use of DeviceProtocol modem attribute. --- plugins/udevng.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/udevng.c b/plugins/udevng.c index 0b3b9686166b..5ef0bc253562 100644 --- a/plugins/udevng.c +++ b/plugins/udevng.c @@ -278,8 +278,7 @@ static int setup_qmi_qrtr(struct modem_info *modem, return -ENOTSUP; } - ofono_modem_set_driver(modem->modem, "gobi"); - ofono_modem_set_string(modem->modem, "DeviceProtocol", "qrtr"); + ofono_modem_set_driver(modem->modem, "qrtrqmi"); return setup_qmi_netdev(modem, net); } @@ -309,7 +308,7 @@ static gboolean setup_gobi_qrtr_premux(struct modem_info *modem, return TRUE; } -static gboolean setup_gobi_qrtr(struct modem_info *modem) +static gboolean setup_qrtrsoc(struct modem_info *modem) { const struct device_info *ipa_info = NULL; int premux_count = 0; @@ -1798,7 +1797,7 @@ static struct { { "wavecom", setup_wavecom }, { "tc65", setup_tc65 }, { "ehs6", setup_ehs6 }, - { "gobiqrtr", setup_gobi_qrtr }, + { "qrtrsoc", setup_qrtrsoc }, { "mhi", setup_mhi }, { } }; @@ -2487,7 +2486,7 @@ static void check_net_device(struct udev_device *device) /* Collect all rmnet devices with this iflink under a common path. */ sprintf(path, "/embedded/qrtr/%s", iflink); - add_device(path, NULL, "gobiqrtr", NULL, NULL, MODEM_TYPE_EMBEDDED, + add_device(path, NULL, "qrtrsoc", NULL, NULL, MODEM_TYPE_EMBEDDED, device, "qrtr"); } From patchwork Thu Jun 20 14:50:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705648 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 609C71AE0B4 for ; Thu, 20 Jun 2024 14:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895118; cv=none; b=SrYNfQDhYGXpNZSKBdVdSpV+1/D6du4YFDVNdIsuqdE9nRZA5huuuMDnFWBzCNNVYo7lio7Fchnhtl4kbVDti/hDO65AWaAxnAer7pv59Oab/j6bCMU9tZRWtw4vBTXhMLCxWFz7QeO6IV/pfE+RJzeqmwSLUy+9OxLFZ9HQOxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895118; c=relaxed/simple; bh=aOiIF2qWhosuhySXMbzaARIfXrdtQwwPTF1EeT6t4JU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HWoLjXCGXzy5sJnOHQResEXDU7ZbBRNgugrShOu5iXMPE6iGEi2hmJTKOsezwvRTm+BtGWpxJaz9AD7D0VUj8PlnP6dubjgydTDChphHWyj7NEgKRXV/uOhq0LIGOoPNOl485wr6fxtAYKADrRHkwhTEZAfRHimT1Bbsk+IfmEw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QZSnXkA5; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QZSnXkA5" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3d518cdb252so453200b6e.1 for ; Thu, 20 Jun 2024 07:51:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895116; x=1719499916; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qFznyV02qpqrwykiXcHYRRv4uVXbs4n0PtmvjIgp3qE=; b=QZSnXkA5hm+/Ph+eVb2xUGbpkWjshZiesJJ9uKOPrZKJCdYD9XjrlgByFT+DiWe0wO QJE5VAWCDB1OAMURaA8izIZi1ot1FDn/1Z3b9K1qO4jVXPIkfSSe4YcyzK8Dr2jw1Axd 2e0s0IQw/So5eqU5N7bNdsch81awSI0voxwzUvCjLdHgAWcaHoUo22OwUQVC09lNh4HW sBhX5OMrvqgXSxTC8SxeTe+6KZoR1Xs0b3uh64tP1VEWg3ThCx27R48+pIA/egLGyRjj tC2ANHpflMuIjRCGIsPdUo5wFVF8efnu49LFS0hTSWsEdF5HF+1Oq+Q1bNNOE/JxizSF 1JMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895116; x=1719499916; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qFznyV02qpqrwykiXcHYRRv4uVXbs4n0PtmvjIgp3qE=; b=PDkNMPV4qzrIabVYCoDrR0LgiQtB/GC/QQS7zYRNimqxhexQZ8gEE6fLyveq+MJcTA MtPSLZKNpa88kOnfDnr/ztaE6Npkohcx7ziGJO949wGNg89I0JEEGLsPoyx2DvRrJIyY fbNlI5IoTJ8Bzy+O6CdTzxlbzx0qjrm4oz9/8bsx8AHmneFNwaeQdPDuURzBrNY6iTwa JcJE6NGJvWe+Bm7mpHUZ9bw6BIOvVXWBD1ZPeDW4ms+vLwxb6BGSyoWDpyKeKV5Qqtnr yUrlS5g1R+CtwfXITV0CjAQlKt2SG+yY3oVY6KVOoTUz+kdI5A6Ud4m8kJBYc+QkLlwo rZ9A== X-Gm-Message-State: AOJu0YxuD3GYJizWI2LlzutZx8oSktYDghC6+mbR0kJc3h+90xEeS+HJ 0u7ZedknUpuxYfZ4tRZXJXMelcPhUz1+yFhxJxaPABf0QfJdcOWFufMIjg== X-Google-Smtp-Source: AGHT+IEzxR15d5S2BJSogpkqOMhWJTpYemq9hwNRHJ9vbs9gvVngkLkzJdOKEbQJGxjwet3OxP1ZBQ== X-Received: by 2002:a05:6808:2dcd:b0:3d2:1f88:3e86 with SMTP id 5614622812f47-3d51bac6050mr6967776b6e.37.1718895114489; Thu, 20 Jun 2024 07:51:54 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:54 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 08/33] gobi: Remove qrtr support Date: Thu, 20 Jun 2024 09:50:55 -0500 Message-ID: <20240620145139.1135899-8-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 QRTR based devices will now be managed by the qrtrqmi driver. --- plugins/gobi.c | 38 ++++---------------------------------- 1 file changed, 4 insertions(+), 34 deletions(-) diff --git a/plugins/gobi.c b/plugins/gobi.c index d8fd90153054..d1da5fbc366b 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -55,11 +55,6 @@ #define GOBI_VOICE (1 << 6) #define GOBI_WDA (1 << 7) -enum qmi_protocol { - QMI_PROTOCOL_QMUX, - QMI_PROTOCOL_QRTR, -}; - struct service_request { struct qmi_service **member; uint32_t service_type; @@ -87,7 +82,6 @@ struct gobi_data { char main_net_name[IFNAMSIZ]; uint32_t max_aggregation_size; uint32_t set_powered_id; - enum qmi_protocol protocol; }; static void gobi_debug(const char *str, void *user_data) @@ -101,10 +95,6 @@ static void gobi_debug(const char *str, void *user_data) * Probe the modem. The following modem properties are expected to be set * in order to initialize the driver properly: * - * DeviceProtocol - * Can be "qrtr" or "qmux", tells the driver which QMI encapsulation protocol - * is being used. - * * NetworkInterface * The string that contains the 'main' network device. This can be * "rmnet_ipa" on SoC systems, or "wwan0" for upstream linux systems. @@ -122,8 +112,6 @@ static void gobi_debug(const char *str, void *user_data) static int gobi_probe(struct ofono_modem *modem) { struct gobi_data *data; - const char *value; - enum qmi_protocol protocol; const char *if_driver; const char *ifname; int ifindex; @@ -131,15 +119,6 @@ static int gobi_probe(struct ofono_modem *modem) DBG("%p", modem); - value = ofono_modem_get_string(modem, "DeviceProtocol"); - - if (l_streq0(value, "qrtr")) - protocol = QMI_PROTOCOL_QRTR; - else if (l_streq0(value, "qmux")) - protocol = QMI_PROTOCOL_QMUX; - else - return -EPROTO; - if_driver = ofono_modem_get_string(modem, "NetworkInterfaceKernelDriver"); ifname = ofono_modem_get_string(modem, "NetworkInterface"); @@ -152,7 +131,6 @@ static int gobi_probe(struct ofono_modem *modem) return -EPROTO; data = l_new(struct gobi_data, 1); - data->protocol = protocol; if (!strcmp(if_driver, "qmi_wwan_q")) data->using_qmi_wwan_q = true; @@ -519,19 +497,11 @@ static int gobi_enable(struct ofono_modem *modem) DBG("%p", modem); - switch (data->protocol) { - case QMI_PROTOCOL_QRTR: - data->device = qmi_device_new_qrtr(); - break; - case QMI_PROTOCOL_QMUX: - device = ofono_modem_get_string(modem, "Device"); - if (!device) - return -EINVAL; - - data->device = qmi_device_new_qmux(device); - break; - } + device = ofono_modem_get_string(modem, "Device"); + if (!device) + return -EINVAL; + data->device = qmi_device_new_qmux(device); if (!data->device) return -EIO; From patchwork Thu Jun 20 14:50:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705649 Received: from mail-oi1-f181.google.com (mail-oi1-f181.google.com [209.85.167.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 076C91AE0BE for ; Thu, 20 Jun 2024 14:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895119; cv=none; b=Ou7Y0zQBzjyoSLE3zkyLjdp902zDRmp75wPcBWGzM15QiVvAc39xagQG7gY4wpvY/3drvTVlVNZITb1LbKTmjChSoDlEcs85BVMhJLa5KCvTYr6DF6kNfN1L1WzlgVpjt6mNhe2xAJgE+yy9XgF5BBHZXFjB+1mKBOqAVj+vSpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895119; c=relaxed/simple; bh=Y1PdZud7erIXoShijODcPVTJniAFQD+o57VgIzmdn1E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d/QKZD9sboC7HJtwRwLgtTPl1WyRTzEs+H8DCz0FM5bs+3toI5r5L/BIlkUWji7Ge+qNnG4siBB3YlwFufIhd4I4Ryz5mQ+X5cs/6sRd8T7dP9yZVqTqVwOA4QUgVHoXk/Lw0V2ny+LVMgsF9q5gP30Muhp0nvYFUnA5z1GcMnQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bFRfUzjF; arc=none smtp.client-ip=209.85.167.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bFRfUzjF" Received: by mail-oi1-f181.google.com with SMTP id 5614622812f47-3d2472450d6so496758b6e.3 for ; Thu, 20 Jun 2024 07:51:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895117; x=1719499917; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NMJ76HT01RXhDJay/m4oOJX4o+vlJaUvm7hJAa6MQ2I=; b=bFRfUzjFTbDjvPR4BGUiWzCaFaXpoetuS5BVw8NkdljV6cq2IoUsc6rsE+vcbBnoVy BA4OdVnO/hGfus+JYldZigkXXONx1sVxrOqq8tjGOAuVlyVQlzVneIhaM43vOZKKASoQ geFM1Xxsa1PUVl1KkkoX8epV5R12uxYs1T1oV+QobyG3rJ000eYgmnYgJdh5xJgnLhEX xImxcsuK1cSKlvZVFPUvf/cEkLbVU+UkhQXrDciBEcnWA0KDiM3BS9SgRhK/e8MPqxI9 tUAPtjKvv3ATn6jq53zSJ8lUUZtsmYobo6jvQeCUYbKYustOa/BPME+uhqNnm9n75K35 ezTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895117; x=1719499917; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NMJ76HT01RXhDJay/m4oOJX4o+vlJaUvm7hJAa6MQ2I=; b=bEmckAmzaHkTISFrHwZxAz2rl58mlh/sSvJ5J5iEVgWfHo8ry4AhPjIFE+bOO1nQ6H 5Jwzqdtt3GWTot5AACYFRSUESshqq6MyYEXy9X7GQIlJF0lUG+Y19aLBmGC1Ji0+eybG gLYsJ6toOAaJ8DGKNo+9INfYqHr3Uoj397KY0GhguOs6FIkJ777mu/ogh25a8yQLn15x H1P+ixaC2FdAdwWHn19NlC+6/wM8b9ksCC3XFEq9XtktbDoTLCb82L1ROtIXjiDqSNoS 7zf+pjdjCNN+LtX2Sa2iq0K1aj2g5rJgG88TtG+ilniUrucjoQTZgw7b6bAeadZFsY7e 9C+w== X-Gm-Message-State: AOJu0Yw3PqwUHZFSzTkiZocjeXd3Mb63Bzmzx05Ajuv1kjroQkQlFX4b LYz5VvPkJigx15x/YM3HojEYv3c1n0KqhFp2HyZF1WnAnaxGh2ehdSwHPQ== X-Google-Smtp-Source: AGHT+IFs3Zt9U3A2XgS8Ot1BH+IjTTQf6GQahh1fDn7MmWGg7cQLpGk2JsotqNocyQx98rCoalcOSQ== X-Received: by 2002:a05:6808:f0e:b0:3d5:2f8c:6bc with SMTP id 5614622812f47-3d52f8c0860mr881490b6e.7.1718895117168; Thu, 20 Jun 2024 07:51:57 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:56 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 09/33] udevng: Do not set DeviceProtocol Date: Thu, 20 Jun 2024 09:50:56 -0500 Message-ID: <20240620145139.1135899-9-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This attribute is no longer used by the gobi driver. --- plugins/udevng.c | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/udevng.c b/plugins/udevng.c index 5ef0bc253562..864f9c12b9c2 100644 --- a/plugins/udevng.c +++ b/plugins/udevng.c @@ -252,7 +252,6 @@ static int setup_qmi_qmux(struct modem_info *modem, ofono_modem_set_driver(modem->modem, "gobi"); ofono_modem_set_string(modem->modem, "Device", qmi->devnode); - ofono_modem_set_string(modem->modem, "DeviceProtocol", "qmux"); ofono_modem_set_string(modem->modem, "InterfaceNumber", net->number); ofono_modem_set_string(modem->modem, "Bus", "usb"); From patchwork Thu Jun 20 14:50:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705650 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D40071AE849 for ; Thu, 20 Jun 2024 14:51:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895120; cv=none; b=iL40YL/PakjfCc6BfLy/D4eLL33WZpYhvMd1BvDGyEfH7aqeC1GwbyfqrC/0klTUylP7Rd+L7SlBsu6W2l0q9cSPmyEwVX6tVBD49xd0Hn0EWdeqPDwpbzrxRylliOemw8STTQldLEopwXirDg4ajs1MdPeebXhxTfHqZ3IBQEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895120; c=relaxed/simple; bh=rPM/i4e7JNbB0GoUVEilA/feGaIkpNm+nSVtOMNo4+A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YBWlGTfh+BxNgsYoM/El8lrKEaj7CIs2gYHNiMdQeGIsnI0tmGOrT6s4+gptZPU9yiW6i6npK3mOJuk39zV+v8fV1N9b+nmntcKdn/M7IVebyRkHum0N1Wxm8wvtEm8B7c+TTFgl0yBfgMs94zFsvoWf4I0Uop6Lbgcv+rQ1zQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=caXmF5Vl; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="caXmF5Vl" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3d516d3f0b2so563017b6e.1 for ; Thu, 20 Jun 2024 07:51:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895118; x=1719499918; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2EDL8Ih8ViGlHl/Bpn1rDCvC2MR4b8VD2nremi7vdg4=; b=caXmF5VllYO/akKusiDuYSGvZ0gtTe35LhlfVP4m3w4EkSJekqAso5MMPdIa4YNUf3 8z9Cuc50UGK4z/KB/Xgd6f2BPOjEcxgqL3nLr7LyKErS7Bi+y4xE5huuOCad2i6SPSKh eAVoOWOn4GcYsA5VyCjARA071LMGs+EyMsFyzn/IAM9pPOmjdaTIU7mfkkkTewr+e8Gv 3XlwO3QHskiIqqx9KZmaNWRYyqC6d1DDUm1wlVbedkVOAJitKV2EXW8TyLx3pNMiSGE/ k0Y/x5pcU2mYBuc/S293yhn1E6w/iZhuHSwATEdKXQp2QXZ35AAeHp6/Ka8bqAdFdmw5 js7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895118; x=1719499918; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2EDL8Ih8ViGlHl/Bpn1rDCvC2MR4b8VD2nremi7vdg4=; b=BY9xaiJ/fpGfPa2G9WSfnAuCSv+6RAO6sVSMgD29uoO7v96iDcMYpCJ9+Obb8JE2pq cRUpqF8dsstV4rF+T19EeWBn1bqQ6RXQaLzir1HZN7k0c1sE2xgCfNtTFNrTdstccwak /qqanPOAbT0AsfGPX3QoVX/i/gZHG6cVDRNHqjyfxye8lT6SOPFCgznLZ2SEzEgconGC T3aFRQlt16yFc9gNpk0xw9i9z8gw4/wR7svqkz8/qS5Kn+eaAxOKLIR5cQ/l/Stjewli k2RwK978lG8OieIUxDnkT9e4nX0Ahy+llH81sWFTb50nIC8Hz79xA723XqZmuTiAgFwL XCfw== X-Gm-Message-State: AOJu0Yw4jrMm/0f+RTkcMtgprr68RZgSspY2+hB8I40y8e7S5uoH4/0y d65ENDc4O0czo8/FGcAuTs7qwuN1PEk4s6mpFMKta6eUYOihUBgVI8jsTw== X-Google-Smtp-Source: AGHT+IH5os+1+d1in1DBCSqE02srsQQ5EDdbGx2qsM98dCrhYhO2ZzWknG0wgctrTcxsJp5JWfd6QQ== X-Received: by 2002:a05:6808:1315:b0:3d2:1c25:1078 with SMTP id 5614622812f47-3d51bae596bmr6418742b6e.38.1718895117897; Thu, 20 Jun 2024 07:51:57 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:57 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 10/33] unit: Rename device to node Date: Thu, 20 Jun 2024 09:50:57 -0500 Message-ID: <20240620145139.1135899-10-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This better reflects the terminology on the QRTR bus --- unit/test-qmimodem-qmi.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index c7db6a053ef5..07560aadcc49 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -32,7 +32,7 @@ struct test_info { int service_fds[TEST_SERVICE_COUNT]; - struct qmi_device *device; + struct qmi_device *node; struct l_timeout *timeout; struct l_queue *services; @@ -153,11 +153,11 @@ static struct test_info *test_setup(void) info = l_new(struct test_info, 1); setup_test_qrtr_services(info); - info->device = qmi_device_new_qrtr(); - assert(info->device); + info->node = qmi_device_new_qrtr(); + assert(info->node); /* Enable ofono logging */ - qmi_device_set_debug(info->device, debug_log, NULL); + qmi_device_set_debug(info->node, debug_log, NULL); info->services = l_queue_new(); info->timeout = l_timeout_create(TEST_TIMEOUT, test_timeout_cb, info, @@ -174,7 +174,7 @@ static void test_cleanup(struct test_info *info) l_timeout_remove(info->timeout); l_queue_destroy(info->services, (l_queue_destroy_func_t) qmi_service_free); - qmi_device_free(info->device); + qmi_device_free(info->node); /* The qrtr services will be destroyed automatically. */ for (i = 0; i < TEST_SERVICE_COUNT; ++i) @@ -185,7 +185,7 @@ static void test_cleanup(struct test_info *info) l_main_exit(); } -static void test_create_qrtr_device(const void *data) +static void test_create_qrtr_node(const void *data) { struct test_info *info = test_setup(); @@ -201,7 +201,7 @@ static void discovery_complete_cb(void *user_data) static void perform_discovery(struct test_info *info) { - qmi_device_discover(info->device, discovery_complete_cb, info, NULL); + qmi_device_discover(info->node, discovery_complete_cb, info, NULL); while (!info->discovery_callback_called) l_main_iterate(-1); @@ -246,7 +246,7 @@ static void test_create_services(const void *data) uint16_t major, minor; service_type = unique_service_type(i); - assert(qmi_service_create_shared(info->device, service_type, + assert(qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); @@ -266,7 +266,7 @@ static void test_create_services(const void *data) * call the callback. */ service_type = unique_service_type(TEST_SERVICE_COUNT); - assert(!qmi_service_create_shared(info->device, service_type, + assert(!qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); assert(l_queue_isempty(info->services)); @@ -275,7 +275,7 @@ static void test_create_services(const void *data) service_type = unique_service_type(0); for (i = 0; i < L_ARRAY_SIZE(services); i++) { - assert(qmi_service_create_shared(info->device, service_type, + assert(qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); @@ -455,7 +455,7 @@ static void test_send_data(const void *data) perform_discovery(info); service_type = unique_service_type(0); /* Use the first service */ - assert(qmi_service_create_shared(info->device, service_type, + assert(qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); service = l_queue_pop_head(info->services); @@ -505,7 +505,7 @@ static void test_notifications(const void *data) perform_discovery(info); service_type = unique_service_type(0); /* Use the first service */ - assert(qmi_service_create_shared(info->device, service_type, + assert(qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); service = l_queue_pop_head(info->services); @@ -567,7 +567,7 @@ static void test_service_notification_independence(const void *data) l_io_set_read_handler(io, received_data, info, NULL); for (i = 0; i < L_ARRAY_SIZE(services); i++) { - assert(qmi_service_create_shared(info->device, service_type, + assert(qmi_service_create_shared(info->node, service_type, create_service_cb, info, NULL)); perform_all_pending_work(); services[i] = l_queue_pop_head(info->services); @@ -623,7 +623,7 @@ int main(int argc, char **argv) __ofono_log_init(argv[0], "*", FALSE); l_test_init(&argc, &argv); - l_test_add("QRTR device creation", test_create_qrtr_device, NULL); + l_test_add("QRTR node creation", test_create_qrtr_node, NULL); l_test_add("QRTR discovery", test_discovery, NULL); l_test_add("QRTR services may be created", test_create_services, NULL); l_test_add("QRTR service sends/responses", test_send_data, NULL); From patchwork Thu Jun 20 14:50:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705651 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C84B1AE849 for ; Thu, 20 Jun 2024 14:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895124; cv=none; b=q9959lB5fdCrQKuM2/eYiAMv/wF1491b8onAwib1E8W8lhXMFbexrwY3aIsqU4zeP/tQvG0KyqGUIaUCHOUy2UJtn3dj2aUxPX1bZnnZu5TQyfR1UB0hLbhoCUZX30MTr1QsshHzehQNfsHM2QxPjUQphhRsSw7tJr43oT6yxQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895124; c=relaxed/simple; bh=C1Klstakq1E/nv9QVwz6nvyMi41TJ2AxHJa13YjzJD4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WbGXBDl8eX/IWVQlzSh38j+rWU9zRZro3LSdz5JS0fYOUsdaUIM+Gp1QH+XTS4FbtN+r+0fuQ5Wfd0QR2mgPbkH4z3+GNFo8sEGXtFKec5gVpWDKh8lBLQ9nIXqqi86fMteyVMKnQfxGbfMnTgPoqY9IH/Zftfk+L8oGhFwvFjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=X8F1xNEC; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="X8F1xNEC" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3d5288e6513so509902b6e.0 for ; Thu, 20 Jun 2024 07:52:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895121; x=1719499921; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9fByp4wLBhBBUpXWhXGrIHMho2t3mrztcWOLJTwl/2M=; b=X8F1xNECxgnrMe7PbHc+BZclaPKJ1VbwQLPjGhtlouTWutgjBsdvHjQrwO6Vueclwr rK6yRQwk3o/chCNTDSIEzNGo9sVuOruiJyXV91BSTPSN74mQ0UDZTcfOF0H0wF+68GHY 28MGOzsdVBfXCaNX+A1AAHz7oRhj09pTuLiU7NBJ/Roq5FXwuM0N7z1kB9ad9UPTHUCf 8NtY6zOz+6Nk0qUyxn+YSSvHgjk6s6WbjigOCyEOhvOc8qQwXX7slnFQaGuQwp77GtOh jkRjLjNgA3DOoDOGj4y9JWt4L9oAreKAhtHQPYRPa7zE3sG8xVwRuYdt1CPItixQE9Qf 66ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895121; x=1719499921; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9fByp4wLBhBBUpXWhXGrIHMho2t3mrztcWOLJTwl/2M=; b=IZ5o2in61KwG2eKBX3N9Qdxn1OaOerBcvhZ4uNY/NxFPhcMsYddyOuWD0HF0bBWM+w AQ9pzeg/GW7FxHV3m1FtACUAa/hs5u6CApqcW8186sldKdm/OWnQJWoRTXsACPN3v7mV j3gPcUPursAlOD8Bc3dIF49gA20FGdUWywDuzutqOuXcLyPtcBVqOPRG3k2zZ5kHV+ez maRmBgiw1tYt8OGODw0kWlXul9v3uRfldrgquvP2/ZnjRLagnj+xio384pr0gqJ1PMos QmMHO2oJ4+SuZ1gG36+1djf33+OA9qWIkDscRkOTk/zDtlWWKu21tT2lP3oktv1iN45/ 4Dng== X-Gm-Message-State: AOJu0Yzt1khCE2Z7vrKcE5sdHXnVfa1Px58ybRhj5PW4Qo2y7l6bh0RT iJ/v/juo3TZrm1CMzmLNnnNehN4WKmkvK2RLEde22vPFAZ3Uw1y41CUOcw== X-Google-Smtp-Source: AGHT+IGBxA4ngzVghSyyKWKQbxhOTl99pPiMqriLTeukxONiFjLGaGcg1ct+cqeoYlKCXAnRHJ7oKA== X-Received: by 2002:a05:6808:1385:b0:3d2:1f72:d6b2 with SMTP id 5614622812f47-3d51badd5cfmr6087774b6e.38.1718895118671; Thu, 20 Jun 2024 07:51:58 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.51.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:51:58 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 11/33] qmi: Rename qmi_device_new_qrtr to qmi_qrtr_node_new Date: Thu, 20 Jun 2024 09:50:58 -0500 Message-ID: <20240620145139.1135899-11-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This better reflects the terminology used on the QRTR bus. A 'node' parameter is introduced. It is currently unused, but in the future will be used to specify which node is being addressed by the created object. --- drivers/qmimodem/qmi.c | 2 +- drivers/qmimodem/qmi.h | 2 +- plugins/qrtrqmi.c | 2 +- unit/test-qmimodem-qmi.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index c3b1f7fef64f..a845e3809090 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -2310,7 +2310,7 @@ static const struct qmi_device_ops qrtr_ops = { .destroy = qmi_device_qrtr_destroy, }; -struct qmi_device *qmi_device_new_qrtr(void) +struct qmi_device *qmi_qrtr_node_new(uint32_t node) { struct qmi_device_qrtr *qrtr; int fd; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 604e4e7e8659..10202fba6128 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -88,8 +88,8 @@ bool qmi_device_set_expected_data_format(struct qmi_device *device, enum qmi_device_expected_data_format format); struct qmi_device *qmi_device_new_qmux(const char *device); -struct qmi_device *qmi_device_new_qrtr(void); +struct qmi_device *qmi_qrtr_node_new(uint32_t node); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type); diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 9d2038a9b50c..ab85db35a5ad 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -208,7 +208,7 @@ static int qrtrqmi_enable(struct ofono_modem *modem) DBG("%p", modem); - data->node = qmi_device_new_qrtr(); + data->node = qmi_qrtr_node_new(0); if (!data->node) return -EIO; diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 07560aadcc49..0fedd9803bb5 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -153,7 +153,7 @@ static struct test_info *test_setup(void) info = l_new(struct test_info, 1); setup_test_qrtr_services(info); - info->node = qmi_device_new_qrtr(); + info->node = qmi_qrtr_node_new(0); assert(info->node); /* Enable ofono logging */ From patchwork Thu Jun 20 14:50:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705652 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB5B71AE84C for ; Thu, 20 Jun 2024 14:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895124; cv=none; b=WEyaX1wpnelOvEcZ4vCr34emnyRI3QDS+N3kCweDH9+xctMRZWB1mb8BWm7TYnMe/4AAZ1sUmIzOgKt6JCSics4F/cL+JWBaAydzOj3rjKCAO/KEqszHwRCT3/dMVzNgMts99yyoqY2XHI2CqxZOe/LBOYF412Mlmzez7Rq2pGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895124; c=relaxed/simple; bh=ckvNClCkY8uqwNMkaBkcQ/Dv+40u6hUo0a6BgUt+mCs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MWm+k7uqJ8INIEu2rYw8RNyOn8UUws3pEDtLYQJ8ThrIUqCIJGmZPbOOmtdl5EfcNw/JEB9XPC32JVN1C7nLui/eVvlDeytJug5/frnjGSKEAWg3N2WPHHByUMChx3V9ASOvMkYLKraezGDw2P6pRXqu1ak2sweelXUK46PZCjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gnwfrdCe; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gnwfrdCe" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3d2255f84e9so816649b6e.0 for ; Thu, 20 Jun 2024 07:52:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895122; x=1719499922; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=l0LW8jWwDVbJfyz4Pq2lQKVb+OW0QTh8Ef+fpjZXzDw=; b=gnwfrdCeFI8qw1UvCa338EF0bGy/X5ov5FLNc57DnY7CTnFo8+YNfk1dxOXirHiCMi Busuk2y0+65rpTPgUNKmLA2Bl+JAApBE5CgWJe5D74SuVmOHYlaJYed7/eR1GqXKGvtg pNAgn5agk7O5gPhvjm0HFOAhMbwzxVGtpz+ZKmCHzDEFC73l3d0eFYGUKmtwyroYNTRZ Dp/WYnwdnD+lzd+tS74P4qocyKq0TGcMogcWLluq+AFzqzlRE3FNShWy0ht+wzs6NVei AGPre3RghX49resl0wrwSlS1xY4QE5op8Pj2JKm1kHklgvZWAF9tUQKbwOt6SRAOxf08 kwpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895122; x=1719499922; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l0LW8jWwDVbJfyz4Pq2lQKVb+OW0QTh8Ef+fpjZXzDw=; b=HEoFcnvtS60oqUf6RydQjlZGN1lLpLq66qQpVbpChMTjpczwVtIHfOOsr9M7rd2mQr g0OxAMebX/oOCho2yoGZLwJznV4nUpbMcqVmVWCiV48VqkbnjbeJO0QqbADKbW51d/3w VXMaXsnWaKEUvCEtUNylMRisz1nkqQRxzAVwo+xO4/plnurmP7zx+Hu61+gUt3m97h10 CzKh4eVLn+Xut+2r9UKsUsXbCRFFPqbU5i6qddxkfMKqWpeMjkDpw8AfPuM6YAMaMwUH 9S+8J5GxQBXxTJl6YF7dQs5p/+IbCdkeyxtF4YScMSxxElZHlAMy7Pfiu22UdChA1R11 spBA== X-Gm-Message-State: AOJu0YwVrKadSB5xS6VZyk6w9/z6vxN8KWd/gQwyRTlF9bTPyZQVoLLn BKaRjQLhDGcqvS/ld0z+wvMM6JCbkcLtO3yEARxOLvQ/ZoPmEi4aBWVngQ== X-Google-Smtp-Source: AGHT+IFbuQ8feFz/ImZOC081Kq4ICwdtHTKSE5oj3NbgVP8oaCd86Q3XLmzkCr1shatxxjQB2ASHdQ== X-Received: by 2002:a05:6808:190a:b0:3d2:2995:f92b with SMTP id 5614622812f47-3d50f11c625mr4401512b6e.23.1718895121314; Thu, 20 Jun 2024 07:52:01 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:01 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 12/33] qmi: Rename qmi_device_new_qmux to qmi_qmux_device_new Date: Thu, 20 Jun 2024 09:50:59 -0500 Message-ID: <20240620145139.1135899-12-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 2 +- drivers/qmimodem/qmi.h | 3 +-- plugins/gobi.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index a845e3809090..9fdc209edf7c 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1991,7 +1991,7 @@ static const struct qmi_device_ops qmux_ops = { .destroy = qmi_device_qmux_destroy, }; -struct qmi_device *qmi_device_new_qmux(const char *device) +struct qmi_device *qmi_qmux_device_new(const char *device) { struct qmi_device_qmux *qmux; int fd; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 10202fba6128..966d4f354d6e 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -68,6 +68,7 @@ typedef void (*qmi_discover_func_t)(void *user_data); typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); +struct qmi_device *qmi_qmux_device_new(const char *device); void qmi_device_free(struct qmi_device *device); void qmi_device_set_debug(struct qmi_device *device, @@ -87,8 +88,6 @@ enum qmi_device_expected_data_format qmi_device_get_expected_data_format( bool qmi_device_set_expected_data_format(struct qmi_device *device, enum qmi_device_expected_data_format format); -struct qmi_device *qmi_device_new_qmux(const char *device); - struct qmi_device *qmi_qrtr_node_new(uint32_t node); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type); diff --git a/plugins/gobi.c b/plugins/gobi.c index d1da5fbc366b..5463a46edecb 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -501,7 +501,7 @@ static int gobi_enable(struct ofono_modem *modem) if (!device) return -EINVAL; - data->device = qmi_device_new_qmux(device); + data->device = qmi_qmux_device_new(device); if (!data->device) return -EIO; From patchwork Thu Jun 20 14:51:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705653 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B7AC1AE84E for ; Thu, 20 Jun 2024 14:52:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895125; cv=none; b=UChvBq3si3WAEn3ef+6nLAEIwWO6Wo+OLLzpIN3QzHFRg1/7bK8rdpiavDZQQ+Lj5upr3kaJwR21wQrOSYtiaawBzDUT2b68xg4jVjUpSL4YnebdpcY9Lqb4u8sR+ofBxwQfd0Cve2ZFpgHu4h4TwW/htCGwYNRey8I8d6sWCI8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895125; c=relaxed/simple; bh=+zhDgJw/D82iGKx28eTwBX4xQruzeo5sOR/AkeOGjoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W2JcrA6vioT1Qi9CZ3Ft7kSUahOSwbpCJT/s5w+cFmRzqqAPMsIDhzp3gaiq4PGJerYn0rFnkjdFvbeWSee+lJzYBVB6CRrBAXqmdXqaZmIg/aPP2b+pFC1/U/iAEqRtF3yZ/wg4NQraAMD9gfoeoBXSR0NxMsGv5uVHUKNBbhI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RauWhkfQ; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RauWhkfQ" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3d24724514eso540296b6e.0 for ; Thu, 20 Jun 2024 07:52:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895123; x=1719499923; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J9fNNbSfh2WeZGPLrsfMCew1Ljg+9Wq+JnyF3lhrH44=; b=RauWhkfQ0Kb5vjhHpOxVWucTjX+eTZT8ywd+EqP9tEjar4qgwknPoLzkbvuanN4o/u tA9QWLOTth4VVweeJcbB1tqHkVlIrIS6oGNnxa89Tl+NCdHfw7ArZXVYV9X2Bqo4kSNg KFQrvDbzHyDznr2Pf8d4ySnx2bcul4cR7tk24usB9NvFaOn41Ioko3hP0kQ+MnZ+13xk Xjq3EJuXkPSDBK3VjQXHD5S9PjdT82BlBUjh+9YLVlTiIe7Hrjs+18fBF/Mb/6Q9P5uS 9qMB4cjEaJFzuf69mG/NEtc1nRZrfQnvykqB3KmYUGWxoPAYxhfGqhsNkN8egvqRMFDx Mxzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895123; x=1719499923; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J9fNNbSfh2WeZGPLrsfMCew1Ljg+9Wq+JnyF3lhrH44=; b=a4NlRYWF5f4zYYMZT8iMvnDkWzide7nUN2pC5fKTpxOGOLBPqyZyNPU2QSp4p4mJRd JC77jioNexNXLuRqQQ80bl7WGWAVgvnYj8An26Nn2CLNmdhMnJHEuzMhwms9PFVzXh3k 2dcrK2hPo/yd36zMNiMbHV7dTPjy/eCnr2UgnBez5GXYNveS4rF+VysoUSM9nW5RCGnd uyouLHQb+JjMk5qT+fNzI8PCmucRugrfEjUNR8K3TF2p5+qWSqUN69+vd5zBtKpauEqc ZfX2L1qUZyPHgPOIDVwMaAy6/CNoRxiqjIc8bC72zjleEodket9qhlNA5lljVei8Lc9w E9rA== X-Gm-Message-State: AOJu0YwlSp+xUpagAEE5i8B5hMezqyS69AxwJHjmlkRddsZjNiVwHq3N 0VKUts0Jv54U3/1vJZ3cr/zmLnfD1j5TpHlx+VwipPk8qVtIBR4T0gMWSg== X-Google-Smtp-Source: AGHT+IFTGvUlk6r5kfLozG3/eyK1zLBEJtgLwS7qOnivf3k2TK+jGm4kaHa5BSl6iW1p+3gHHVF2JA== X-Received: by 2002:a05:6808:148e:b0:3d2:212e:71a0 with SMTP id 5614622812f47-3d51b96ddb8mr6145009b6e.6.1718895121948; Thu, 20 Jun 2024 07:52:01 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:01 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 13/33] unit: Drop use of qmi_service_create_shared Date: Thu, 20 Jun 2024 09:51:00 -0500 Message-ID: <20240620145139.1135899-13-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- unit/test-qmimodem-qmi.c | 47 +++++++--------------------------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 0fedd9803bb5..c40e9bb1d8af 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -34,7 +34,6 @@ struct test_info { int service_fds[TEST_SERVICE_COUNT]; struct qmi_device *node; struct l_timeout *timeout; - struct l_queue *services; /* Data sent to our test service */ struct sockaddr_qrtr sender; @@ -159,7 +158,6 @@ static struct test_info *test_setup(void) /* Enable ofono logging */ qmi_device_set_debug(info->node, debug_log, NULL); - info->services = l_queue_new(); info->timeout = l_timeout_create(TEST_TIMEOUT, test_timeout_cb, info, NULL); @@ -172,8 +170,6 @@ static void test_cleanup(struct test_info *info) l_free(info->received); l_timeout_remove(info->timeout); - l_queue_destroy(info->services, - (l_queue_destroy_func_t) qmi_service_free); qmi_device_free(info->node); /* The qrtr services will be destroyed automatically. */ @@ -216,13 +212,6 @@ static void test_discovery(const void *data) test_cleanup(info); } -static void create_service_cb(struct qmi_service *service, void *user_data) -{ - struct test_info *info = user_data; - - l_queue_push_tail(info->services, service); -} - /* Callbacks could queue other callbacks so continue until there are no more. */ static void perform_all_pending_work(void) { @@ -246,12 +235,7 @@ static void test_create_services(const void *data) uint16_t major, minor; service_type = unique_service_type(i); - assert(qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - - assert(l_queue_length(info->services) == 1); - service = l_queue_pop_head(info->services); + service = qmi_qrtr_node_get_service(info->node, service_type); assert(service); assert(qmi_service_get_version(service, &major, &minor)); @@ -266,21 +250,14 @@ static void test_create_services(const void *data) * call the callback. */ service_type = unique_service_type(TEST_SERVICE_COUNT); - assert(!qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - assert(l_queue_isempty(info->services)); + assert(!qmi_qrtr_node_get_service(info->node, service_type)); /* Confirm that multiple services may be created for the same type */ service_type = unique_service_type(0); for (i = 0; i < L_ARRAY_SIZE(services); i++) { - assert(qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - - assert(l_queue_length(info->services) == 1); - services[i] = l_queue_pop_head(info->services); + services[i] = qmi_qrtr_node_get_service(info->node, + service_type); assert(services[i]); } @@ -455,10 +432,7 @@ static void test_send_data(const void *data) perform_discovery(info); service_type = unique_service_type(0); /* Use the first service */ - assert(qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - service = l_queue_pop_head(info->services); + service = qmi_qrtr_node_get_service(info->node, service_type); assert(service); io = l_io_new(info->service_fds[0]); @@ -505,10 +479,7 @@ static void test_notifications(const void *data) perform_discovery(info); service_type = unique_service_type(0); /* Use the first service */ - assert(qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - service = l_queue_pop_head(info->services); + service = qmi_qrtr_node_get_service(info->node, service_type); assert(service); io = l_io_new(info->service_fds[0]); @@ -567,10 +538,8 @@ static void test_service_notification_independence(const void *data) l_io_set_read_handler(io, received_data, info, NULL); for (i = 0; i < L_ARRAY_SIZE(services); i++) { - assert(qmi_service_create_shared(info->node, service_type, - create_service_cb, info, NULL)); - perform_all_pending_work(); - services[i] = l_queue_pop_head(info->services); + services[i] = qmi_qrtr_node_get_service(info->node, + service_type); assert(services[i]); send_request_via_qmi(info, services[i]); From patchwork Thu Jun 20 14:51:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705655 Received: from mail-oi1-f181.google.com (mail-oi1-f181.google.com [209.85.167.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 237FE1AE84C for ; Thu, 20 Jun 2024 14:52:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895127; cv=none; b=OkyzL9qrbFRuAWBxHnVWLnseBFYO37e+P6+5hJNxLyuUzV5qJOD9AtN5RiGPE0hbbTjPX16StASUq1ssubRuac7J2Ol7I4To6gvKXOOKK06I4obG7bbcRyYZ3grwKluCGomIfhSkbKdd3jaEFRgFlZ8QYdBVPV47tfRuVL8AS/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895127; c=relaxed/simple; bh=guMbeyQHTt3Yhsyhs5yd106/04urQkLuDKC+L31Jasw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dXYlMLOpHugBm/L5BxzopkxGGHPXOT5yrSnY6vhiVPvpemxqIYRlrV692qXIc+z4/z0471WwmsH6iJ5QVuf3uOKN0somWB0IfiGGR3RVFh+455iW6t5VsueO163VdnMmrv6Y6CCbQoo6ZCyG330Y5UKNhQu9Oz590YijnFji0C8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BAPCIS2L; arc=none smtp.client-ip=209.85.167.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BAPCIS2L" Received: by mail-oi1-f181.google.com with SMTP id 5614622812f47-3d229baccc4so487623b6e.1 for ; Thu, 20 Jun 2024 07:52:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895124; x=1719499924; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4jLKnyWSbEnLm4HoUDKHbHoRajOmpNoERvnKnRZIt6Q=; b=BAPCIS2LWC6XCJ9I4x6dE+7HJdI6J5zA4egCnnxcJ3c8km86CzYu9HolplMtdf/hfA 5Dx6aDr1gHrFtZ/h9hWi6ZNqf8a0uuzmNHfp2OT38K5c3wCr4yFO8vYroVuacKzOogCE ivl2Vg8OT0qzI5gfzxP2S8FPijAclEHHHpMCqgO0ueo5i55jwDIkMKva91cBr8+lUiuW nVTOng6G963hUHkqhNw2/Yp/U6NsbqPFISes4ZAfPaTpiB28YaH7n6g317QTOdH+AWri sCCz3xNEuaMKcGuN65ARhaTxkxe4NijsHIhJAN9Pzt8KIXlvTjbUjq8kO/BFCmymIe1w 2RJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895124; x=1719499924; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4jLKnyWSbEnLm4HoUDKHbHoRajOmpNoERvnKnRZIt6Q=; b=lWxBnBqO8iYZItIOicUrwnjn7zcDvfjtfb4RVUd4ydwZkf0/6w38V0VrGLV2fW79IC CmK0mbcE0/swFtnhwp2eVkdRJpg2ZtZWxCsaHdIQQs7ydS3z5+9F/cQE4wgUulOasmFV XOLcYhqKKkAgWMjA9aZNHFk9F1AfOU7aRYFXqKEWknW6BXV7M7NNXGV6ICtdQPwBYqBY lvjYxTJtmoO/Apwk5NhEqpRew5oR1aaNju4y+eI7x0LHDNKFcqNfzXbhdFWXl2PSll3G S0E6RqjP7KVauRaI6c+leukN+0GJ2ehbh0G2y1iSPlcnrfwiBd1Uc4G0omj+FyHJZzZ0 t6ug== X-Gm-Message-State: AOJu0Yw/TvenBPwQcwuHWFzYWCZbjx7KejmV29DHPiVuwu+HwJxTHKv5 /SyHGRZV3L0FfTmUK1VhDMakJjt01MXJjS350C3F7WqlavOF7o5LcU+bkA== X-Google-Smtp-Source: AGHT+IGpXjvwec0JY1XZ4Xm4F/eBMb0qHI31mNUETeCSHYlosK+y3EIyIcInTX4GRmDe3SPAFnAnYg== X-Received: by 2002:a05:6808:1802:b0:3d2:2003:983e with SMTP id 5614622812f47-3d51badaf80mr5622409b6e.36.1718895123608; Thu, 20 Jun 2024 07:52:03 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:03 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 14/33] qmi: qmux: Make shared service creation generic Date: Thu, 20 Jun 2024 09:51:01 -0500 Message-ID: <20240620145139.1135899-14-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The underlying QMUX protocol does not have a concept of a shared or non-shared service. Services are accessed via clients, with each client having its own state tracked by the service implementation. Some state is shared amongst all clients. The shared service concept was local to the qmi_device implementation, enabling multiple atom drivers to request a handle to a given service, and for that handle to share the client service handle at the protocol level. Services meant to be shared are now created and managed at the modem driver level. Services that require a dedicated service client handle (such as in the case of gprs_context atom driver) will obtain such handles from the modem driver in the future. Remove qmi_service_create_shared() API and introduce a QMUX specific qmux_device_create_client() API in its stead. The new API will generically handle creation of new service clients at the QMUX protocol level. While here, also remove the now unused client_create method from the qmi_device_ops structure and rename qmux_client_create_reply() to qmux_client_create_timeout() --- drivers/qmimodem/qmi.c | 233 ++++++++--------------------------------- drivers/qmimodem/qmi.h | 12 ++- plugins/gobi.c | 6 +- 3 files changed, 51 insertions(+), 200 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 9fdc209edf7c..89645c1d6704 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -64,10 +64,6 @@ struct qmi_device_ops { int (*discover)(struct qmi_device *device, qmi_discover_func_t discover_func, void *user, qmi_destroy_func_t destroy); - int (*client_create)(struct qmi_device *device, - uint16_t service_type, - qmi_create_func_t func, - void *user, qmi_destroy_func_t destroy); void (*client_release)(struct qmi_device *device, uint16_t service_type, uint16_t client_id); int (*shutdown)(struct qmi_device *device, @@ -106,7 +102,6 @@ struct qmi_device_qmux { unsigned int release_users; uint8_t next_control_tid; struct l_queue *control_queue; - struct l_queue *pending_families; }; struct service_family { @@ -1410,17 +1405,6 @@ done: l_free(family); } -struct service_create_shared_data { - struct discovery super; - uint16_t service_type; - struct service_family *family; - struct qmi_device *device; - qmi_create_func_t func; - void *user_data; - qmi_destroy_func_t destroy; - struct l_idle *idle; -}; - static uint8_t __ctl_request_submit(struct qmi_device_qmux *qmux, struct qmi_request *req) { @@ -1484,79 +1468,6 @@ static struct qmi_service *service_create(struct service_family *family) return service; } -static void service_create_shared_idle_cb(struct l_idle *idle, void *user_data) -{ - struct service_create_shared_data *data = user_data; - struct qmi_service *service = service_create(data->family); - - DISCOVERY_DONE(data, service, data->user_data); -} - -static void service_create_shared_reply(struct service_create_shared_data *data, - struct service_family *family) -{ - struct qmi_service *service = NULL; - - if (family) - service = service_create(family); - - DISCOVERY_DONE(data, service, data->user_data); -} - -static bool pending_family_match(const void *data, const void *user_data) -{ - const struct service_create_shared_data *shared_data = data; - uint16_t service_type = L_PTR_TO_UINT(user_data); - - return shared_data->service_type == service_type; -} - -struct pending_family_reply_if_match_info { - uint16_t service_type; - struct service_family *family; -}; - -static bool pending_family_reply_if_match(void *data, void *user_data) -{ - struct service_create_shared_data *shared_data = data; - const struct pending_family_reply_if_match_info *info = user_data; - - if (pending_family_match(data, L_UINT_TO_PTR(info->service_type))) { - service_create_shared_reply(shared_data, info->family); - return true; - } - - return false; -} - -static void service_create_shared_pending_reply(struct qmi_device_qmux *qmux, - uint16_t service_type, - struct service_family *family) -{ struct pending_family_reply_if_match_info info = { - .service_type = service_type, - .family = family, - }; - - l_queue_foreach_remove(qmux->pending_families, - pending_family_reply_if_match, &info); -} - -static void service_create_shared_data_free(void *user_data) -{ - struct service_create_shared_data *data = user_data; - - if (data->idle) - l_idle_remove(data->idle); - - if (data->family) - service_family_unref(data->family); - - if (data->destroy) - data->destroy(data->user_data); - - l_free(data); -} - static struct qmi_request *find_control_request(struct qmi_device_qmux *qmux, uint16_t tid) { @@ -1737,7 +1648,9 @@ struct qmux_client_create_data { uint8_t type; uint16_t major; uint16_t minor; - qmi_create_func_t func; + qmi_qmux_device_create_client_func_t func; + void *user_data; + qmi_destroy_func_t destroy; struct l_timeout *timeout; uint16_t tid; }; @@ -1749,10 +1662,14 @@ static void qmux_client_create_data_free(void *user_data) if (data->timeout) l_timeout_remove(data->timeout); + if (data->destroy) + data->destroy(data->user_data); + l_free(data); } -static void qmux_client_create_reply(struct l_timeout *timeout, void *user_data) +static void qmux_client_create_timeout(struct l_timeout *timeout, + void *user_data) { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; @@ -1760,20 +1677,17 @@ static void qmux_client_create_reply(struct l_timeout *timeout, void *user_data) l_container_of(device, struct qmi_device_qmux, super); struct qmi_request *req; - DBG(""); - - service_create_shared_pending_reply(qmux, data->type, NULL); - - /* remove request from queues */ - req = find_control_request(qmux, data->tid); + __debug_device(device, "client creation timed out"); l_timeout_remove(data->timeout); data->timeout = NULL; - DISCOVERY_DONE(data, NULL, NULL); - + /* remove request from queues */ + req = find_control_request(qmux, data->tid); if (req) __request_free(req); + + DISCOVERY_DONE(data, NULL, data->user_data); } static void qmux_client_create_callback(uint16_t message, uint16_t length, @@ -1781,9 +1695,8 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); struct service_family *family = NULL; + struct qmi_service *service = NULL; struct qmi_service_info info; const struct qmi_result_code *result_code; const struct qmi_client_id *client_id; @@ -1817,72 +1730,63 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, hash_id = family_list_create_hash(family->info.service_type, family->client_id); l_hashmap_insert(device->family_list, L_UINT_TO_PTR(hash_id), family); - l_hashmap_insert(device->family_list, - L_UINT_TO_PTR(family->info.service_type), - family); + done: - service_create_shared_pending_reply(qmux, data->type, family); if (family) - service_family_unref(family); + service = service_create(family); + + DISCOVERY_DONE(data, service, data->user_data); - DISCOVERY_DONE(data, NULL, NULL); + if (family) + service_family_unref(family); } -static int qmi_device_qmux_client_create(struct qmi_device *device, - uint16_t service_type, - qmi_create_func_t func, void *user_data, - qmi_destroy_func_t destroy) +bool qmi_qmux_device_create_client(struct qmi_device *device, + uint16_t service_type, + qmi_qmux_device_create_client_func_t func, + void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); unsigned char client_req[] = { 0x01, 0x01, 0x00, service_type }; + const struct qmi_service_info *info; + struct qmi_device_qmux *qmux; struct qmi_request *req; - struct service_create_shared_data *shared_data; struct qmux_client_create_data *create_data; - bool create_in_progress; - if (!l_queue_length(device->service_infos)) - return -ENOENT; + if (!device || !func) + return false; - create_in_progress = l_queue_find(qmux->pending_families, - pending_family_match, - L_UINT_TO_PTR(service_type)); + if (service_type == QMI_SERVICE_CONTROL) + return false; - shared_data = l_new(struct service_create_shared_data, 1); - shared_data->super.destroy = service_create_shared_data_free; - shared_data->service_type = service_type; - shared_data->device = device; - shared_data->func = func; - shared_data->user_data = user_data; - shared_data->destroy = destroy; - l_queue_push_tail(qmux->pending_families, shared_data); + info = __find_service_info_by_type(device, service_type); + if (!info) + return false; - if (create_in_progress) - return 0; + qmux = l_container_of(device, struct qmi_device_qmux, super); create_data = l_new(struct qmux_client_create_data, 1); create_data->super.destroy = qmux_client_create_data_free; create_data->device = device; create_data->type = service_type; + create_data->major = info->major; + create_data->minor = info->minor; + create_data->func = func; + create_data->user_data = user_data; + create_data->destroy = destroy; __debug_device(device, "service create [type=%d]", service_type); - qmi_device_get_service_version(device, create_data->type, - &create_data->major, - &create_data->minor); - req = __control_request_alloc(QMI_CTL_GET_CLIENT_ID, client_req, sizeof(client_req), qmux_client_create_callback, create_data); create_data->tid = __ctl_request_submit(qmux, req); - create_data->timeout = l_timeout_create(8, qmux_client_create_reply, + create_data->timeout = l_timeout_create(8, qmux_client_create_timeout, create_data, NULL); __qmi_device_discovery_started(device, &create_data->super); - - return 0; + return true; } static void qmux_client_release_callback(uint16_t message, uint16_t length, @@ -1971,8 +1875,6 @@ static void qmi_device_qmux_destroy(struct qmi_device *device) struct qmi_device_qmux *qmux = l_container_of(device, struct qmi_device_qmux, super); - l_queue_destroy(qmux->pending_families, - (l_queue_destroy_func_t) service_create_shared_data_free); l_queue_destroy(qmux->control_queue, __request_free); if (qmux->shutdown_idle) @@ -1985,7 +1887,6 @@ static void qmi_device_qmux_destroy(struct qmi_device *device) static const struct qmi_device_ops qmux_ops = { .write = qmi_device_qmux_write, .discover = qmi_device_qmux_discover, - .client_create = qmi_device_qmux_client_create, .client_release = qmi_device_qmux_client_release, .shutdown = qmi_device_qmux_shutdown, .destroy = qmi_device_qmux_destroy, @@ -2010,7 +1911,6 @@ struct qmi_device *qmi_qmux_device_new(const char *device) qmux->next_control_tid = 1; qmux->control_queue = l_queue_new(); - qmux->pending_families = l_queue_new(); l_io_set_read_handler(qmux->super.io, received_qmux_data, qmux, NULL); return &qmux->super; @@ -2304,7 +2204,6 @@ static void qmi_device_qrtr_destroy(struct qmi_device *device) static const struct qmi_device_ops qrtr_ops = { .write = qmi_device_qrtr_write, .discover = qmi_device_qrtr_discover, - .client_create = NULL, .client_release = NULL, .shutdown = NULL, .destroy = qmi_device_qrtr_destroy, @@ -2630,56 +2529,6 @@ bool qmi_result_get_uint64(struct qmi_result *result, uint8_t type, return true; } -bool qmi_service_create_shared(struct qmi_device *device, uint16_t type, - qmi_create_func_t func, void *user_data, - qmi_destroy_func_t destroy) -{ - struct service_create_shared_data *data; - struct service_family *family; - - if (!device || !func) - return false; - - if (type == QMI_SERVICE_CONTROL) - return false; - - family = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(type)); - if (!family) { - const struct qmi_service_info *info; - - if (device->ops->client_create) { - int r; - - r = device->ops->client_create(device, type, func, - user_data, destroy); - return r == 0; - } - - info = __find_service_info_by_type(device, type); - if (!info) - return false; - - family = service_family_create(device, info, 0); - l_hashmap_insert(device->family_list, L_UINT_TO_PTR(type), - family); - } - - data = l_new(struct service_create_shared_data, 1); - - data->super.destroy = service_create_shared_data_free; - data->device = device; - data->func = func; - data->user_data = user_data; - data->destroy = destroy; - data->family = service_family_ref(family); - data->idle = l_idle_create(service_create_shared_idle_cb, data, NULL); - - /* Not really discovery... just tracking the idle callback. */ - __qmi_device_discovery_started(device, &data->super); - - return true; -} - const char *qmi_service_get_identifier(struct qmi_service *service) { if (!service) diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 966d4f354d6e..90e83a4dbebd 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -65,12 +65,19 @@ struct qmi_service; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); typedef void (*qmi_shutdown_func_t)(void *user_data); typedef void (*qmi_discover_func_t)(void *user_data); +typedef void (*qmi_qmux_device_create_client_func_t)(struct qmi_service *, + void *user_data); typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); struct qmi_device *qmi_qmux_device_new(const char *device); void qmi_device_free(struct qmi_device *device); +bool qmi_qmux_device_create_client(struct qmi_device *device, + uint16_t service_type, + qmi_qmux_device_create_client_func_t func, + void *user_data, qmi_destroy_func_t destroy); + void qmi_device_set_debug(struct qmi_device *device, qmi_debug_func_t func, void *user_data); @@ -130,11 +137,6 @@ void qmi_result_print_tlvs(struct qmi_result *result); int qmi_error_to_ofono_cme(int qmi_error); -typedef void (*qmi_create_func_t)(struct qmi_service *service, void *user_data); - -bool qmi_service_create_shared(struct qmi_device *device, - uint16_t type, qmi_create_func_t func, - void *user_data, qmi_destroy_func_t destroy); struct qmi_service *qmi_service_clone(struct qmi_service *service); void qmi_service_free(struct qmi_service *service); diff --git a/plugins/gobi.c b/plugins/gobi.c index 5463a46edecb..23d16e251196 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -419,7 +419,7 @@ static void request_service_cb(struct qmi_service *service, void *user_data) if (data->cur_service_request == data->num_service_requests) { DBG("All services requested, proceeding to create WDA"); - if (qmi_service_create_shared(data->device, QMI_SERVICE_WDA, + if (qmi_qmux_device_create_client(data->device, QMI_SERVICE_WDA, create_wda_cb, modem, NULL)) return; @@ -429,7 +429,7 @@ static void request_service_cb(struct qmi_service *service, void *user_data) req = &data->service_requests[data->cur_service_request]; DBG("Requesting: %u", req->service_type); - if (qmi_service_create_shared(data->device, req->service_type, + if (qmi_qmux_device_create_client(data->device, req->service_type, request_service_cb, modem, NULL)) return; @@ -482,7 +482,7 @@ static void discover_cb(void *user_data) if (data->features & GOBI_UIM) add_service_request(data, &data->uim, QMI_SERVICE_UIM); - if (qmi_service_create_shared(data->device, QMI_SERVICE_DMS, + if (qmi_qmux_device_create_client(data->device, QMI_SERVICE_DMS, request_service_cb, modem, NULL) > 0) return; error: From patchwork Thu Jun 20 14:51:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705654 Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DE321AE858 for ; Thu, 20 Jun 2024 14:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895126; cv=none; b=CN+uZjs1Alq087bikn6QLwY9n1tTZL5jr4GBHyF0lTnvamqSm52LGoVe8YtJpXm/at3uaH48vvv3S7QzR41kcUaP5+6Ct2z2DvSfKCDN9+SMXeorHnQuCeZCyZrXwcMETdyyK1EFav368Ym5FFrOMoSRS/ox+42gaj8o8Pu/3B8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895126; c=relaxed/simple; bh=GAqRu0UuVLiqGXJEiwY1oyEPTDDwCivuH3oQ7lf4cMw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N8l9ZK1QVM1hCzr91w53Afoc3COOnVr7OAkfyV2gLv6LjttXM+24icufAZtvLUm8U1cNayKmd/J82N0weP3KccDQnPEl70Nts9GFH/KeRqDMFzKa1H/BVbuEEgpG7SjAwQDAM4gYHZ0PHRE0kThIVJ8NVwuLEM1ww9oQ2pXvnwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nFFBEQZo; arc=none smtp.client-ip=209.85.167.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nFFBEQZo" Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-3d24724514eso540311b6e.0 for ; Thu, 20 Jun 2024 07:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895124; x=1719499924; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EdvBzpreMqSB4QFmQSbJhuOcwt1m+b92CFyWwcvJqak=; b=nFFBEQZofO3AQ8/otbGaMIB0o+c3FDRUSxxPd01XtftOhCAmvNCkvik5+4ry6S6fQV r41l6wMrxH6YzVflMxTPbPcQ4u7jJ3UJljVxrGExFEfyWzXO2Bcbm/mrcalXSBNJatl9 6LfLmkbA2K0CFvEIteDuF5JGCn6o58O6hC8wwmep+A85FsIFsARHI62jloGhj6Om5RKN 9wi7XjxnC9QUi77uJpo8hUuzRoxMV/1EETXfajCVQ7WY5ekItOPCH7Td8PS1LJEVjc5O 8LIEkO4Ujs0MeI4iAfdXJOOGWvxciTL0uO8Dv8RO2Ka+ebPTjORSvco1E9qVDJAqg9aR XBhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895124; x=1719499924; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EdvBzpreMqSB4QFmQSbJhuOcwt1m+b92CFyWwcvJqak=; b=MxhBvhlxcvKwbZjF/oj6xk7OaHrOPjyd4oxEbY/yWqjbnXcN5WJHMlrJABNsc828EW 0IYmwI9dyMAWb8EIwkhEB78pGrbEMY4sBpq2nDu3GjP5bJ0SKBGlR8TdYG5ZOGNFB+h2 FM7oOkvn+y0R434/fyn1DXUXFD0laNrvK4gRyMHOOyyKfnYc6JLxhqKH8WqFw3MNQj19 e/6AHCLsJvrx6dGs8tvPphszGjO0szfQlV3jQjaGSs8FzpNY/sh5bvwsJPjp7xPSN0KQ vHyNazvo4GbLdk3D7KB5NjmTpf+p5SkkNCjAkjapt1MrMJpU5LdH817u/qDo4o09/VpT rulw== X-Gm-Message-State: AOJu0YzzK63Hwhais+JJSXoe1kEJSuEPoVCZQH3Q6HHE/d7ur5WF20UG EVBYvtjJFptXjehTl/Au3RaRl8zxjFCS/MC6hr4sidgmCIFwGBKzhQ3AHg== X-Google-Smtp-Source: AGHT+IGBk/NSSWbb5w9r1ZjRRfBWbpUdnt43fteDKEsPXSX/tq6ZJEfCE79JOalKIhTGYO7IE4cY6g== X-Received: by 2002:a05:6808:1592:b0:3d2:4edc:1ffd with SMTP id 5614622812f47-3d51b96c223mr6689584b6e.12.1718895124334; Thu, 20 Jun 2024 07:52:04 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:04 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 15/33] qmi: Rename qmi_device_get_service_version Date: Thu, 20 Jun 2024 09:51:02 -0500 Message-ID: <20240620145139.1135899-15-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This makes it more explicit that major/minor attributes are only supported by QMUX. --- drivers/qmimodem/qmi.c | 3 ++- drivers/qmimodem/qmi.h | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 89645c1d6704..a56e5588c698 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -988,7 +988,8 @@ static const struct qmi_service_info *__find_service_info_by_type( return info; } -bool qmi_device_get_service_version(struct qmi_device *device, uint16_t type, +bool qmi_qmux_device_get_service_version(struct qmi_device *device, + uint16_t type, uint16_t *major, uint16_t *minor) { const struct qmi_service_info *info; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 90e83a4dbebd..da245e50ea50 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -77,6 +77,9 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, uint16_t service_type, qmi_qmux_device_create_client_func_t func, void *user_data, qmi_destroy_func_t destroy); +bool qmi_qmux_device_get_service_version(struct qmi_device *device, + uint16_t type, + uint16_t *major, uint16_t *minor); void qmi_device_set_debug(struct qmi_device *device, qmi_debug_func_t func, void *user_data); @@ -87,8 +90,6 @@ int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); bool qmi_device_has_service(struct qmi_device *device, uint16_t type); -bool qmi_device_get_service_version(struct qmi_device *device, uint16_t type, - uint16_t *major, uint16_t *minor); enum qmi_device_expected_data_format qmi_device_get_expected_data_format( struct qmi_device *device); From patchwork Thu Jun 20 14:51:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705656 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 053911AE84E for ; Thu, 20 Jun 2024 14:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895127; cv=none; b=U1tEaGZ8FOZOQs5ttZrmNE9xiuL4QXSN67N0SSclWAI1OZJ8QguZvD4gCh2r5Mw8G5mM8Di1Iq/wYstPKT0r2N8+v9C64MkL484zRqy/ZbbulESiOgLuzkA7PYqDkd9yfm+aYBIo/lIiC1ydWiVw88/9TbOeFa9TCdozCPzwM3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895127; c=relaxed/simple; bh=mbGPjn8vEREaGryrfwrAFP197XAHAet6GON6MNGWSw0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F15zYLEcA+K3JN5XKxnBuFurjQJ1NMTKPhkmo9U5eGWWOkERJUwrUi1w6d8dGI4BCLN/zjpVEzWZbypM+zX61lnALSzSF7gEasFwP92wFEW2lqwFTmEYmWtHEYwSa7bCnqpg+BwEZencXZdqXh4aaUhG0FWr9uJDK/tYesEaZlI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jXGF6dOE; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jXGF6dOE" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3d21f253a53so425745b6e.2 for ; Thu, 20 Jun 2024 07:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895125; x=1719499925; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9U2l8mxFICX6hZ5C5qX4FKms7BlvGzmOmlHfLDlvOCc=; b=jXGF6dOE/onORS5DGvOVr0hgo2nwD5ftb+0JkMLrI26cQpug8gqb9E/WpcwhfpOKa9 DKpf9iPEtJSOnDZicfDu7PBXRy0MllePQ0bG1kOHru0/TJ/pvtmc7UrP6tqOYKqK8Ubp uXh6aCu2A/NJMlHeZzvUuXMpqIoEck9MgEvSUYbA35PmS/f6bsXKesDKR4od4/TPQXTM VauiKJ32Bu1mPgl2wCEemh3wuLiNza38P4LEDg0illwn/KZOWkOOzz26tqpN64bwpZBB dWP8T8+A6i2X5PjE5To7WktdVAb63YkCaoRrAdrRxXIFE+soJVF8Hy+O2F+TuEgGMxvQ Nsrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895125; x=1719499925; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9U2l8mxFICX6hZ5C5qX4FKms7BlvGzmOmlHfLDlvOCc=; b=DgNgTVNIKnpr0mNYo5kTU7t0vwM/DxD35FH/7eB8RnSqzgbonbBKiqeD3h/0+odKJX 41c3aVKieuGhXQxQmV8lpjFMV3IB9ANY5TIHapc/EeWxcHve15XpQzgH43O6KVV+ihY7 wjKTRe7BTuqYFPimai3rxpICmeBgJdn/6g8AECfe2qemMAWklXvWX0UAVLZkySTnUsm7 Nh74A3UIxEzfQKjRgH5FVbddubEKeyYP040w9NsEZXmOiD4DErB9B21Wukziq9OX1TlP z/nBY+4GHQFkOMiCcf8nkpjp1MU84m/+A00YisTrGhNjup8nqbbeF6Z9JI9wW8VaLgSZ R3Fg== X-Gm-Message-State: AOJu0YzEZnBp7W+VnfCc5YkAPl+enuWxvV6ow/F5QiE6TZD0cltCoKkd G4VTJuQ13evFeGkpo+qfQSJ0jsYjFhSep70X3XNzK8orNuUUD8GgZ9X2jw== X-Google-Smtp-Source: AGHT+IG6Rw5sy7yeLthallpYp9nrGs9s87FgxtC/JA3NXveNeqTqdTOyjLPgassG8hHeCDzdZ8MzaA== X-Received: by 2002:a05:6808:220c:b0:3d2:281a:31b1 with SMTP id 5614622812f47-3d51ba9feb3mr6185334b6e.34.1718895124956; Thu, 20 Jun 2024 07:52:04 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:04 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 16/33] qmi: sms: Require at WMS version 1.2+ Date: Thu, 20 Jun 2024 09:51:03 -0500 Message-ID: <20240620145139.1135899-16-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Move the version check from the SMS atom driver to the gobi modem driver. Do not request WMS unless version 1.2 is supported. --- drivers/qmimodem/sms.c | 12 ------------ plugins/gobi.c | 13 +++++++++++-- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/drivers/qmimodem/sms.c b/drivers/qmimodem/sms.c index 2ac06a40bdd6..3e2bef6e38b7 100644 --- a/drivers/qmimodem/sms.c +++ b/drivers/qmimodem/sms.c @@ -22,8 +22,6 @@ struct sms_data { struct qmi_service *wms; - uint16_t major; - uint16_t minor; struct qmi_wms_read_msg_id rd_msg_id; struct qmi_wms_result_msg_list *msg_list; uint32_t rd_msg_num; @@ -263,16 +261,11 @@ static void qmi_bearer_query(struct ofono_sms *sms, DBG(""); - if (data->major < 1 || (data->major == 1 && data->minor < 2)) - goto error; - if (qmi_service_send(data->wms, QMI_WMS_GET_DOMAIN_PREF, NULL, get_domain_pref_cb, cbd, l_free) > 0) return; -error: CALLBACK_WITH_FAILURE(cb, -1, cbd->data); - l_free(cbd); } @@ -301,9 +294,6 @@ static void qmi_bearer_set(struct ofono_sms *sms, int bearer, DBG("bearer %d", bearer); - if (data->major < 1 || (data->major == 1 && data->minor < 2)) - goto error; - domain = bearer_to_domain(bearer); param = qmi_param_new_uint8(QMI_WMS_PARAM_DOMAIN, domain); @@ -314,7 +304,6 @@ static void qmi_bearer_set(struct ofono_sms *sms, int bearer, qmi_param_free(param); -error: CALLBACK_WITH_FAILURE(cb, cbd->data); l_free(cbd); } @@ -747,7 +736,6 @@ static int qmi_sms_probe(struct ofono_sms *sms, data->wms = wms; memset(&data->rd_msg_id, 0, sizeof(data->rd_msg_id)); data->msg_mode = QMI_WMS_MESSAGE_MODE_GSMWCDMA; - qmi_service_get_version(data->wms, &data->major, &data->minor); qmi_service_register(data->wms, QMI_WMS_EVENT, event_notify, sms, NULL); ofono_sms_set_data(sms, data); diff --git a/plugins/gobi.c b/plugins/gobi.c index 23d16e251196..63eb847eb680 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -441,6 +441,8 @@ static void discover_cb(void *user_data) { struct ofono_modem *modem = user_data; struct gobi_data *data = ofono_modem_get_data(modem); + uint16_t major; + uint16_t minor; DBG(""); @@ -448,8 +450,6 @@ static void discover_cb(void *user_data) data->features |= GOBI_DMS; if (qmi_device_has_service(data->device, QMI_SERVICE_NAS)) data->features |= GOBI_NAS; - if (qmi_device_has_service(data->device, QMI_SERVICE_WMS)) - data->features |= GOBI_WMS; if (qmi_device_has_service(data->device, QMI_SERVICE_WDS)) data->features |= GOBI_WDS; if (qmi_device_has_service(data->device, QMI_SERVICE_WDA)) @@ -461,6 +461,15 @@ static void discover_cb(void *user_data) if (qmi_device_has_service(data->device, QMI_SERVICE_VOICE)) data->features |= GOBI_VOICE; + if (qmi_qmux_device_get_service_version(data->device, QMI_SERVICE_WMS, + &major, &minor)) { + if (major < 1 || (major == 1 && minor < 2)) + ofono_warn("unsupported WMS version: %u.%u, need: 1.2", + major, minor); + else + data->features |= GOBI_WMS; + } + if (!(data->features & GOBI_DMS)) { if (++data->discover_attempts < 3 && !qmi_device_discover(data->device, discover_cb, From patchwork Thu Jun 20 14:51:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705657 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 557DF1AE84C for ; Thu, 20 Jun 2024 14:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895128; cv=none; b=UkGR8UqrH4R61a5vNNFHlXetmu35i35rWT8MWQRWNzn/fIYEX8vzuYU0b0lGophD17PScXm/CSvq+WbbkWJ/MEoYLKg6PJUFm8rDuw5813q9FfOd/BNvyjq0PNNP/wBfiKb3OQ3iDqgErQd2KcAu4A3gfJM+vr+wvnq0SCT+iuw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895128; c=relaxed/simple; bh=IiJTpDFWVszkMs9yutzu4PpAAP2PVhhzrk0UUQ0VA/Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HaQZGHNUC+d2EeUezSaMabLImbzsy2kpTsIhWnhf1f5oOauD7cCvZS1TP0kKEi1QeosKznCuZ/kirICGMAJeOQfk+jAyBGQPurBuI3EZAt9EjH0TADlDN8vUEdAWt4pW5MiRybEA8t/r3Hbkl1sDvl4G/DEA8yAJ1IgBCFAOM+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mi1JRV6E; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mi1JRV6E" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3d24724514eso540336b6e.0 for ; Thu, 20 Jun 2024 07:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895126; x=1719499926; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PyUF7wR+m1/dSK2kCnd4OkrUNVmnVUjk6Mt59JyOg58=; b=mi1JRV6E00H53zv0PTDeWDDOdnAHQIQMHflM9ekFY1RQ1YsBb/RNx6wKKEWzPxl50m iHYlhmBOef84brswhITDJi18LeHAawprJECHTn/mq6ycfXTGALmrlUI1R4Na3/NTNzod k8s8ijDLOmPRVej/ikis5IYH8vW0xYRhxKv0TKI6p1kx3zQT+BTwwj2LUEMWV8LHngME jU5Rse5lUffOs45eOx3rm8bbMq7P2WglYMv6bncMHYS5pbyT6G9XMBGZmZvy1JcZ/DmX le0XR5kf2XgMq59exSOgb+qHHIvIJewNOgn/4tQwndeBh2e6E9OXxEoJReqM7Je2EKn8 IqSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895126; x=1719499926; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PyUF7wR+m1/dSK2kCnd4OkrUNVmnVUjk6Mt59JyOg58=; b=FN7d9vvaqWMmRga6ePQ/MTMkRTgD07Fcv/SWZswjdJnoswGqpLc+zK/QkMEttJoabw +aR8b9QTazo9WrLhi5gRA3B1nBgRtdt1QNp5zG2m9J79nM73RvMjNi7p54jLmSiFnnu4 N4tWcwf9cu0/X2vA0+nlbhJ1fOPxZ1+cSaKx4+QZM49C+MGhVG177JHFOKBdyEXNgihY 5e33SzCHlf9Nn7F5hWGwgmV5hbEl+4hsuzV+7Am7NwbAz3nwleECGI8VGQI3XNKcAxtg 98eI2mTn9SbTK+MKveP4pn70MVkYk6vxgNN4MrNRADaPsRtVUjZaNu1myHqGNEmQ4I5X /LCA== X-Gm-Message-State: AOJu0Yz2oEOuJbY1F2wxX/2enFM2xJ3C1rruyvYtSRHGqleZIICBqaeJ O/VYYqnVyO5ePzzvRnmQgtSs2wmfKfJO2PL/QkYwlpUFIxLv1EUSG7mIow== X-Google-Smtp-Source: AGHT+IHnv69rxdiBcjBVIkd2Jo8nozCO1mLqZGxzaPrTqsJVCTxdGqlJge9R6kf+cxmk7W1r9j2Vzg== X-Received: by 2002:a05:6808:2dcd:b0:3d2:1f88:3e86 with SMTP id 5614622812f47-3d51bac6050mr6968349b6e.37.1718895126314; Thu, 20 Jun 2024 07:52:06 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:05 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 17/33] qmi: Rework qmi_service_get_version Date: Thu, 20 Jun 2024 09:51:04 -0500 Message-ID: <20240620145139.1135899-17-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 With the introduction of QRTR support, qmi_service_get_version became somewhat confusing. It still returns the minor version, however QRTR does not have such a concept. Additionally, QRTR is limited to 8 bit service versions. Rework qmi_service_get_version API to make this clearer. While here, add some documentation and update the unit test to the new API. --- drivers/qmimodem/qmi.c | 22 +++++++++++++++------- drivers/qmimodem/qmi.h | 3 +-- unit/test-qmimodem-qmi.c | 7 +++---- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index a56e5588c698..6d605d58ad65 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -2538,17 +2538,25 @@ const char *qmi_service_get_identifier(struct qmi_service *service) return __service_type_to_string(service->family->info.service_type); } -bool qmi_service_get_version(struct qmi_service *service, - uint16_t *major, uint16_t *minor) +/** + * qmi_service_get_version: + * @service: lightweight service handle + * @out_version: version output + * + * Returns the version of the service this handle is currently referring to. + * On QMUX this corresponds to the 'major' version of the service. On QRTR, + * this corresponds to the lower 8 bits of the 'instance' attribute and is thus + * limited to uint8_t. + * + * Returns: #false if the service handle is NULL, #true on success. + */ +bool qmi_service_get_version(struct qmi_service *service, uint8_t *out_version) { if (!service) return false; - if (major) - *major = service->family->info.major; - - if (minor) - *minor = service->family->info.minor; + if (out_version) + *out_version = service->family->info.major; return true; } diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index da245e50ea50..4de9d7bd0037 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -142,8 +142,7 @@ struct qmi_service *qmi_service_clone(struct qmi_service *service); void qmi_service_free(struct qmi_service *service); const char *qmi_service_get_identifier(struct qmi_service *service); -bool qmi_service_get_version(struct qmi_service *service, - uint16_t *major, uint16_t *minor); +bool qmi_service_get_version(struct qmi_service *service, uint8_t *out_version); uint16_t qmi_service_send(struct qmi_service *service, uint16_t message, struct qmi_param *param, diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index c40e9bb1d8af..4ea9c736c284 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -232,15 +232,14 @@ static void test_create_services(const void *data) for (i = 0; i < TEST_SERVICE_COUNT; i++) { struct qmi_service *service; - uint16_t major, minor; + uint8_t version; service_type = unique_service_type(i); service = qmi_qrtr_node_get_service(info->node, service_type); assert(service); - assert(qmi_service_get_version(service, &major, &minor)); - assert(major == unique_service_version(i)); - assert(minor == 0); + assert(qmi_service_get_version(service, &version)); + assert(version == unique_service_version(i)); qmi_service_free(service); } From patchwork Thu Jun 20 14:51:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705658 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B2BB1AE84E for ; Thu, 20 Jun 2024 14:52:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895129; cv=none; b=BB3awlETiHA4xg6AtvHUwZPOaRB2MFe6xk8NTOibPF6UFZ/0oZvUNu7z7TK4fwQtUFS2Zod6lPacHvUvJcyugALOnQBxfnn/jolpCPd2u4KLaCq2bqVFM3HzSeG9HGdkws1UEaRURP48kWl+LBqHh4r/vp+zeHwTEUMb0jEv9BE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895129; c=relaxed/simple; bh=ThpodRrW5VFL8ZxGQ+LV6+qn+syzPxo6VlrA9WCeQ2g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ouoxDA5l6+e2NuKklBnyQMhY9BuPh6jtNePpfy76rIXpIEBh9nG0QEkub0ujPVWX5UDF+U+ZahZJKKNI6U0T7fjn4ZVdFud1zHolU0Ej4kUmMiCkScpM/M4hWsjBI5iYr6s+SBWIcUQb1gzAg+PujHKGvWeBtoz+Z9VY6/hfR8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=O6w990BD; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="O6w990BD" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3d2255f84e9so816692b6e.0 for ; Thu, 20 Jun 2024 07:52:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895127; x=1719499927; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U9q465u7N6nZJo81o5SF0kqMM8fn/bc4coBEiGyymdc=; b=O6w990BDxZRpfiFX4HaK2MEANQTAE2Mytx06GuN/rScsTZU1FpiFsBusQ1hynQGs4Q mPeTCrfGYhIMgk40zBSJXUqujiIEOWZmJMsnnx7T6j4T3WqCUaiJBW73scBF/iVnCDQC tyZEcNMgpuXkTFYnVuaUeKzCNNNI+2CJTSyuV0TmOGCHqWmDwvg6bSrxyPKI8AuzPi4L wocYFcPQJBXa8pNvRzF6D/Bj3kdvx2zrF/7E/KV+6o4VFcStfTB4XCcetanoLUzlmpTx DgJe5PEVJ3ekfergCSrLGHeZt0AHRci16FxOCZL8NDtafHhzQy3mQwaoK3ARQ2WcJhH2 6SfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895127; x=1719499927; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U9q465u7N6nZJo81o5SF0kqMM8fn/bc4coBEiGyymdc=; b=bZt19J0ppqzjwbRHBHdQzzUCATvdDTrQjD4IB9e/WpneoUTFVorJ64yecp/Lwb59Um rAWvoDQyWtHjoKzdzHBDd9WX/YgnE4a93KHG/pQLy6rT408a4gOxeYkpbK5gRZ0P0o8P BOQM3O3AGaa0HrK7v1iR4osnwaZ+GwRxuyGxFj+ff9WDckk/3iSc63BiwnNNVKO2sUGW 5nUUmLx175/1NRo7upf4AWCoGIfiP8nxx3WV2S7rGb8NBW2fpbwytfwFxQcH2UGqywT9 VyZl2Cof62EqpufH9rg/Rkjx4n4fvvahyJIL2PP4ho2YJtCu65jdKl6mNjzlSwumFSZ3 iBuQ== X-Gm-Message-State: AOJu0YxE/zOtxv91tteFvAd+9M3qvIJcvvGmyIbh8cSAEge6eriAY2Oc /G7y6JxI2DMchKdrHX7t3oEvg6wPI9CLPtGENVOQAFnjpCW0xlOSpNtaRQ== X-Google-Smtp-Source: AGHT+IHLrRMoH3EBCQtp6PSR4DSL1m6sOssMJq2YpBJFJOAmYchS0nAbmW4+yZsGRqPHmDJF6d0/Lw== X-Received: by 2002:a05:6808:2103:b0:3d2:2ab5:b58e with SMTP id 5614622812f47-3d50ef9ce5bmr3410415b6e.4.1718895127266; Thu, 20 Jun 2024 07:52:07 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:06 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 18/33] qmi: break up qmi_device_free into qrtr & qmux variants Date: Thu, 20 Jun 2024 09:51:05 -0500 Message-ID: <20240620145139.1135899-18-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Introduce qmi_qrtr_node_free() that will deallocate a qrtr node object and qmi_qmux_device_free() that will deallocate a qmux device object. This removes the need for the .destroy method inside qmi_device_ops, so get rid of that as well. Since qrtr has no concept of shutting down (this is accomplished immediately using close() on the qrtr socket), move the relevant variables into the qmux specific structure. The destroy operation inside qmi_device_ops is no longer used, remove it. --- drivers/qmimodem/qmi.c | 94 +++++++++++++++++++++------------------- drivers/qmimodem/qmi.h | 3 +- plugins/gobi.c | 4 +- plugins/qrtrqmi.c | 2 +- unit/test-qmimodem-qmi.c | 2 +- 5 files changed, 55 insertions(+), 50 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 6d605d58ad65..509f3dda5945 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -69,7 +69,6 @@ struct qmi_device_ops { int (*shutdown)(struct qmi_device *device, qmi_shutdown_func_t shutdown_func, void *user, qmi_destroy_func_t destroy); - void (*destroy)(struct qmi_device *device); }; struct qmi_device { @@ -86,8 +85,6 @@ struct qmi_device { struct l_hashmap *family_list; const struct qmi_device_ops *ops; bool writer_active : 1; - bool shutting_down : 1; - bool destroyed : 1; }; struct qmi_device_qmux { @@ -102,6 +99,8 @@ struct qmi_device_qmux { unsigned int release_users; uint8_t next_control_tid; struct l_queue *control_queue; + bool shutting_down : 1; + bool destroyed : 1; }; struct service_family { @@ -890,17 +889,8 @@ static int qmi_device_init(struct qmi_device *device, int fd, return 0; } -static void __qmi_device_shutdown_finished(struct qmi_device *device) +static void __qmi_device_free(struct qmi_device *device) { - if (device->destroyed) - device->ops->destroy(device); -} - -void qmi_device_free(struct qmi_device *device) -{ - if (!device) - return; - __debug_device(device, "device %p free", device); l_queue_destroy(device->service_queue, __request_free); @@ -912,11 +902,6 @@ void qmi_device_free(struct qmi_device *device) l_hashmap_destroy(device->family_list, family_destroy); l_queue_destroy(device->service_infos, l_free); - - if (device->shutting_down) - device->destroyed = true; - else - device->ops->destroy(device); } void qmi_device_set_debug(struct qmi_device *device, @@ -1816,6 +1801,17 @@ static void qmi_device_qmux_client_release(struct qmi_device *device, __ctl_request_submit(qmux, req); } +static void __qmux_device_free(struct qmi_device_qmux *qmux) +{ + l_queue_destroy(qmux->control_queue, __request_free); + + if (qmux->shutdown_idle) + l_idle_remove(qmux->shutdown_idle); + + l_free(qmux->version_str); + l_free(qmux); +} + static void qmux_shutdown_destroy(void *user_data) { struct qmi_device_qmux *qmux = user_data; @@ -1825,7 +1821,8 @@ static void qmux_shutdown_destroy(void *user_data) qmux->shutdown_idle = NULL; - __qmi_device_shutdown_finished(&qmux->super); + if (qmux->destroyed) + __qmux_device_free(qmux); } static void qmux_shutdown_callback(struct l_idle *idle, void *user_data) @@ -1835,12 +1832,12 @@ static void qmux_shutdown_callback(struct l_idle *idle, void *user_data) if (qmux->release_users > 0) return; - qmux->super.shutting_down = true; + qmux->shutting_down = true; if (qmux->shutdown_func) qmux->shutdown_func(qmux->shutdown_user_data); - qmux->super.shutting_down = false; + qmux->shutting_down = false; l_idle_remove(qmux->shutdown_idle); } @@ -1871,26 +1868,11 @@ static int qmi_device_qmux_shutdown(struct qmi_device *device, return 0; } -static void qmi_device_qmux_destroy(struct qmi_device *device) -{ - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); - - l_queue_destroy(qmux->control_queue, __request_free); - - if (qmux->shutdown_idle) - l_idle_remove(qmux->shutdown_idle); - - l_free(qmux->version_str); - l_free(qmux); -} - static const struct qmi_device_ops qmux_ops = { .write = qmi_device_qmux_write, .discover = qmi_device_qmux_discover, .client_release = qmi_device_qmux_client_release, .shutdown = qmi_device_qmux_shutdown, - .destroy = qmi_device_qmux_destroy, }; struct qmi_device *qmi_qmux_device_new(const char *device) @@ -1917,6 +1899,24 @@ struct qmi_device *qmi_qmux_device_new(const char *device) return &qmux->super; } +void qmi_qmux_device_free(struct qmi_device *device) +{ + struct qmi_device_qmux *qmux; + + if (!device) + return; + + __qmi_device_free(device); + + qmux = l_container_of(device, struct qmi_device_qmux, super); + if (qmux->shutting_down) { + qmux->destroyed = true; + return; + } + + __qmux_device_free(qmux); +} + struct qmi_device_qrtr { struct qmi_device super; }; @@ -2194,20 +2194,11 @@ error: return rc; } -static void qmi_device_qrtr_destroy(struct qmi_device *device) -{ - struct qmi_device_qrtr *qrtr = - l_container_of(device, struct qmi_device_qrtr, super); - - l_free(qrtr); -} - static const struct qmi_device_ops qrtr_ops = { .write = qmi_device_qrtr_write, .discover = qmi_device_qrtr_discover, .client_release = NULL, .shutdown = NULL, - .destroy = qmi_device_qrtr_destroy, }; struct qmi_device *qmi_qrtr_node_new(uint32_t node) @@ -2232,6 +2223,19 @@ struct qmi_device *qmi_qrtr_node_new(uint32_t node) return &qrtr->super; } +void qmi_qrtr_node_free(struct qmi_device *device) +{ + struct qmi_device_qrtr *node; + + if (!device) + return; + + __qmi_device_free(device); + + node = l_container_of(device, struct qmi_device_qrtr, super); + l_free(node); +} + struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type) { diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 4de9d7bd0037..54661bf44d91 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -71,7 +71,7 @@ typedef void (*qmi_qmux_device_create_client_func_t)(struct qmi_service *, typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); struct qmi_device *qmi_qmux_device_new(const char *device); -void qmi_device_free(struct qmi_device *device); +void qmi_qmux_device_free(struct qmi_device *device); bool qmi_qmux_device_create_client(struct qmi_device *device, uint16_t service_type, @@ -97,6 +97,7 @@ bool qmi_device_set_expected_data_format(struct qmi_device *device, enum qmi_device_expected_data_format format); struct qmi_device *qmi_qrtr_node_new(uint32_t node); +void qmi_qrtr_node_free(struct qmi_device *device); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type); diff --git a/plugins/gobi.c b/plugins/gobi.c index 63eb847eb680..3ab2efc39186 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -188,7 +188,7 @@ static void gobi_remove(struct ofono_modem *modem) cleanup_services(data); - qmi_device_free(data->device); + qmi_qmux_device_free(data->device); l_free(data); } @@ -217,7 +217,7 @@ static void shutdown_cb(void *user_data) data->discover_attempts = 0; - qmi_device_free(data->device); + qmi_qmux_device_free(data->device); data->device = NULL; ofono_modem_set_powered(modem, FALSE); diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index ab85db35a5ad..8ea9819f3297 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -113,7 +113,7 @@ static void qrtrqmi_deinit(struct qrtrqmi_data *data) { qmi_service_free(data->dms); data->dms = NULL; - qmi_device_free(data->node); + qmi_qrtr_node_free(data->node); data->node = NULL; } diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 4ea9c736c284..4c035db3c9c9 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -170,7 +170,7 @@ static void test_cleanup(struct test_info *info) l_free(info->received); l_timeout_remove(info->timeout); - qmi_device_free(info->node); + qmi_qrtr_node_free(info->node); /* The qrtr services will be destroyed automatically. */ for (i = 0; i < TEST_SERVICE_COUNT; ++i) From patchwork Thu Jun 20 14:51:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705659 Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E62ED1AE84C for ; Thu, 20 Jun 2024 14:52:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895130; cv=none; b=FJJX7rel5uHlM/DVj+OKvkX5vTMXp14UWp8vjoIxfvBsVVbBMU1udowHb8rQkuJ8367kD4u3qIBtO74qTduz7Z/tvGiQNrEMVLAHcE2+757yhoZNX0RfXrSpk8dI+931dsXbKzQK28UkF3ji4AAmTJM5LLDAiZAtfjj9JXHg7HA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895130; c=relaxed/simple; bh=pc7fpAsAsiuZxj7t5AR0cYq1vzfBL8gcVddY2nGjWy0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dgqDjAM10p33MCDBDDS88c0DnZZ2azvXtX2EmwwTdSWnPmBmHOmfc/XyUtivleevQCRPey87ZU2dLU3b2FOmAy7l5/zRuErdfVD5U0P1QCAHQiLdNR466A7y2HRMhj7sdmixME2jK7+eEm4Gt/gTbqlbwx/fwUEutOcQ69fDKfY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GrcmqDQ1; arc=none smtp.client-ip=209.85.167.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GrcmqDQ1" Received: by mail-oi1-f179.google.com with SMTP id 5614622812f47-3d24724514eso540356b6e.0 for ; Thu, 20 Jun 2024 07:52:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895128; x=1719499928; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ypAt5+8b2tJbJH16Wx1FjGcxMq4OFcsPPY9I+akKiwI=; b=GrcmqDQ1g8XA8F+sVOMl1mQmQ4Dx4Db6wyYBZVfGK1L6D2M0nDzfrQXLXCyt6DagNS 400Y5OLVt8GmJHEMbL0TGDRreBtX8pbEEtLsKo0oD59fQzYCcDtiOns4aO7f4peRyW2r Xp5ujWEaQw36iG5gsaiNj1C9bIWuCGGjhcCobjkW9bElI3WICIvYknQzo8RBKVpjcDfw qqxyxD1yA7YO/PQGjRImObGm0Hif3JxGeTbhIY963iJCD6Ax/uiDbAWvRzGnhPDYqjpy sqTERBBWTq5teIR1k5zjDvRNx9JmX84kxjrOjLXVaMstxGj4nwttUHZNsFhB5icQg/Kx 42og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895128; x=1719499928; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ypAt5+8b2tJbJH16Wx1FjGcxMq4OFcsPPY9I+akKiwI=; b=LRluXdp6U70M0bAX9J9oRrc1GzSCAxKpcQXamHMQPHE5dKDAZGuu0HrZtDaALkiLsT harqKemT/M0Z4dBgoJkpOEsJw+VA0oDwp1orkwyZUQwB0tcH5yBhLLY5+4tesuyy5/qn u9QzCv162++JywmKMC5fvn4bsEYSlUj1DcF2OaxK7MIWEzYBeYstbRmG9q+oBQoDuEFk FaOcjMueakH7k9wbTmUeJLHbkulflg6PbW6QCiNxIpU0UEFQri6/RNNuVPWtHa42Gzj/ GVpu2UVNYG6LUuQ0n0/4E6PpXq+NSMxzIEyYxeGM4awvsLyijio6rCiZuj2rwX5SU3r6 /JgQ== X-Gm-Message-State: AOJu0YxeqqbSInz1u4N6YnyYH9lylVBrXAFvsqwDpta4hlxLIMhr7msl LairsBTDFwImwnPMSUaeCbyVtJ1AgyZRRgq/QoXO0zBtmB/XzfoONObiQw== X-Google-Smtp-Source: AGHT+IE6RdzQ1EOlr/1/dLF8ezJyQrqVlcYeP7f9JXvPO0lblkiDDGDx95Q+fYA7v9fY9WPRg7cLLg== X-Received: by 2002:a05:6808:189b:b0:3d2:1759:7db1 with SMTP id 5614622812f47-3d51b96dca9mr6248685b6e.10.1718895127975; Thu, 20 Jun 2024 07:52:07 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:07 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 19/33] qmi: Convert DBG statements to __debug_device Date: Thu, 20 Jun 2024 09:51:06 -0500 Message-ID: <20240620145139.1135899-19-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 53 +++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 509f3dda5945..d0f8a56f1461 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1942,7 +1942,7 @@ static int qmi_device_qrtr_write(struct qmi_device *device, bytes_written = sendto(fd, data, len, 0, (struct sockaddr *) &addr, sizeof(addr)); if (bytes_written < 0) { - DBG("Failure sending data: %s", strerror(errno)); + __debug_device(device, "sendto: %s", strerror(errno)); return -errno; } @@ -1990,20 +1990,19 @@ static void qrtr_received_control_packet(struct qmi_device *device, uint32_t type; uint32_t instance; uint32_t version; - uint32_t node; - uint32_t port; + uint32_t qrtr_node; + uint32_t qrtr_port; if (len < sizeof(*packet)) { - DBG("qrtr packet is too small"); + __debug_device(device, "qrtr packet is too small"); return; } - qrtr_debug_ctrl_request(packet, device->debug_func, - device->debug_data); + qrtr_debug_ctrl_request(packet, device->debug_func, device->debug_data); cmd = L_LE32_TO_CPU(packet->cmd); if (cmd != QRTR_TYPE_NEW_SERVER) { - DBG("Unknown command: %d", cmd); + __debug_device(device, "Unknown command: %d", cmd); return; } @@ -2011,7 +2010,8 @@ static void qrtr_received_control_packet(struct qmi_device *device, if (!packet->server.service && !packet->server.instance && !packet->server.node && !packet->server.port) { - DBG("Initial service discovery has completed"); + __debug_device(device, + "Initial service discovery has completed"); if (data) DISCOVERY_DONE(data, data->user_data); @@ -2025,16 +2025,17 @@ static void qrtr_received_control_packet(struct qmi_device *device, version = L_LE32_TO_CPU(packet->server.instance) & 0xff; instance = L_LE32_TO_CPU(packet->server.instance) >> 8; - node = L_LE32_TO_CPU(packet->server.node); - port = L_LE32_TO_CPU(packet->server.port); + qrtr_node = L_LE32_TO_CPU(packet->server.node); + qrtr_port = L_LE32_TO_CPU(packet->server.port); - DBG("New server: Type: %d Version: %d Instance: %d Node: %d Port: %d", - type, version, instance, node, port); + __debug_device(device, + "New server: %d Version: %d Node/Port: %d/%d", + type, version, qrtr_node, qrtr_port); memset(&info, 0, sizeof(info)); info.service_type = type; - info.qrtr_port = port; - info.qrtr_node = node; + info.qrtr_port = qrtr_port; + info.qrtr_node = qrtr_node; info.major = version; info.instance = instance; @@ -2049,7 +2050,8 @@ static void qrtr_received_control_packet(struct qmi_device *device, } static void qrtr_received_service_message(struct qmi_device *device, - uint32_t node, uint32_t port, + uint32_t qrtr_node, + uint32_t qrtr_port, const void *buf, size_t len) { const struct l_queue_entry *entry; @@ -2059,15 +2061,16 @@ static void qrtr_received_service_message(struct qmi_device *device, entry; entry = entry->next) { struct qmi_service_info *info = entry->data; - if (info->qrtr_node == node && info->qrtr_port == port) { + if (info->qrtr_node == qrtr_node && + info->qrtr_port == qrtr_port) { service_type = info->service_type; break; } } if (!service_type) { - DBG("Received msg from unknown service on node: %d, port: %d", - node, port); + __debug_device(device, "Message from unknown at node/port %d/%d", + qrtr_node, qrtr_port); return; } @@ -2088,8 +2091,8 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) addr_size = sizeof(addr); bytes_read = recvfrom(l_io_get_fd(qrtr->super.io), buf, sizeof(buf), 0, (struct sockaddr *) &addr, &addr_size); - DBG("Received %zd bytes from Node: %d Port: %d", bytes_read, - addr.sq_node, addr.sq_port); + __debug_device(&qrtr->super, "Received %zd bytes from Node: %d Port: %d", + bytes_read, addr.sq_node, addr.sq_port); if (bytes_read < 0) return true; @@ -2152,14 +2155,15 @@ static int qmi_device_qrtr_discover(struct qmi_device *device, addr_len = sizeof(addr); rc = getsockname(fd, (struct sockaddr *) &addr, &addr_len); if (rc) { - DBG("getsockname failed: %s", strerror(errno)); + __debug_device(device, "getsockname failed: %s", + strerror(errno)); rc = -errno; goto error; } if (addr.sq_family != AF_QIPCRTR || addr_len != sizeof(addr)) { - DBG("Unexpected sockaddr from getsockname. family: %d size: %d", - addr.sq_family, addr_len); + __debug_device(device, "Unexpected sockaddr family: %d size: %d", + addr.sq_family, addr_len); rc = -EIO; goto error; } @@ -2172,7 +2176,8 @@ static int qmi_device_qrtr_discover(struct qmi_device *device, sizeof(packet), 0, (struct sockaddr *) &addr, addr_len); if (bytes_written < 0) { - DBG("Failure sending data: %s", strerror(errno)); + __debug_device(device, "Failure sending data: %s", + strerror(errno)); rc = -errno; goto error; } From patchwork Thu Jun 20 14:51:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705660 Received: from mail-oi1-f182.google.com (mail-oi1-f182.google.com [209.85.167.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C85EA1AE858 for ; Thu, 20 Jun 2024 14:52:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895131; cv=none; b=H4l1zLaSwb3CW8Byxnh+AT1qj6ecDOC6866e3cDBZCbkiScUtBCxyK/zaMOM5Viw6tZ5AwZPihKOl4SokfTG25Csfe05e6sHAaW4zvnfCc0q9bYOqu7AXqF6oFa8kQ3KBM5zX3lN9KAE3EeOdlRrXSEcvKK2TyiYfGYmnyXSORk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895131; c=relaxed/simple; bh=coxN1LgE84gfBTuq+/ipflyI44noVl25Cny2Yzv+2Gk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MtA/d9flbi3WM5oNlgmoS1ujN2cs1AXEUSvZyAihzhKMnt970Ns1YZq2MzJuIvuoPYzzKJSyyfq5bbrnD9WkcDgAXuue9I5WTv+d2IhqrUA/u/YU55eFUk6HcIk4b6Mk9tQ/bijNVY3h5kVp4/elT35ZhMHIC7b3W3YQ46X/8ys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eeIN3F0V; arc=none smtp.client-ip=209.85.167.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eeIN3F0V" Received: by mail-oi1-f182.google.com with SMTP id 5614622812f47-3d5288e6513so509996b6e.0 for ; Thu, 20 Jun 2024 07:52:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895129; x=1719499929; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/Q9ZBF3t/VddBaO74EVEslnyVmzfYoEF/ouJ68CH4v0=; b=eeIN3F0VbiEay8WLyrVdwhZAozMKdUt0FeP02T7zLGmdwe4xrqAeHj2WAVN/uotsd1 pIloRaykYjGxor5wvkFrZSLdHYNGJKTn96lJDUqiOmgaRsVMV88WsW/B5oyokjBeEAy/ u1xkMyUzge1R4imcSUv59iANOUYvGPLMLRrSoHn5u8mCIv/yIUfFja19BjV0ldQxdTr2 3PJhcGLRNOKkgTLd0PwDgAsNNRQu2V+/A+APtt5gB/gQ+2zJ3vBWUv51eSCqeJZquXte 4nWPPVy6wRr5awnhVdUC/Imuwrdpvqo8uIBbnFPVCZ1dAjM357XiX2vNcxgBl/Vqi+/o ix1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895129; x=1719499929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/Q9ZBF3t/VddBaO74EVEslnyVmzfYoEF/ouJ68CH4v0=; b=KexqtuIO1FhB5fLW1ZxS4Noc8+TgPG57PplRGGLsCCIfFjy/1wjd2BoVRHx80rFmX8 TO1GOIA1bN7WKXKHXTKJVBpl5wxBbg145+zDEMlevWmWuCLTnGi9q1OdQAlDTyjtq9/j fqWszsiaQU53KGYYBcjQviWA5y1wuK/rv9Ex7cgLLZks8R+y8/ft23Ibedy9vmlsnMyO rQRwF1Htl5mO2/SFXwZCE3VzvHPBr7EbUrHTjKkjDcCcwGVg4xk5vGmm4pTKBMRyGdva ZAQtDwtq1W0PvMeGMx2tLr8+lvIyuujsEnQljKDg6JEBLUNsoKuBcR3W39Bfq+Mp5+tN 14oQ== X-Gm-Message-State: AOJu0YyOiIbzXbtobmhf7Qu5LMacmC+Ak/G+BxKQheMTadwXkPmDQ2IS HMyX5WE7x20lnjkfyRU8r5+Q9cNaSRv9PqZT1+Cd9EnLTKdE6ImAJJL2mQ== X-Google-Smtp-Source: AGHT+IFdSsBn0OCoPtrXhBmFqpGofYONsqiCvHdPzlyM9SQhK4y0cY8OIutjVHOK0SylpgzB92YkRQ== X-Received: by 2002:a05:6808:300a:b0:3d5:11bd:1561 with SMTP id 5614622812f47-3d51b9e5b32mr5572796b6e.30.1718895128652; Thu, 20 Jun 2024 07:52:08 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:08 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 20/33] qmi: introduce qmi_qrtr_node_lookup Date: Thu, 20 Jun 2024 09:51:07 -0500 Message-ID: <20240620145139.1135899-20-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Service discovery on QRTR is accomplished using a QRTR NEW_LOOKUP control message. Utilize this terminology and introduce a QRTR specific qmi_qrtr_node_lookup method. This method replaces qmi_device_discover(). Update the qrtr unit tests to use the new API. Refactor the lookup implementation to not use struct discover_data or the discovery queue. Use a dedicated 'lookup' structure instead. Change the -EINPROGRESS error returned from qmi_qrtr_node_lookup to -EALREADY to better reflect that the operation has already started. -EINPROGRESS is frequently used in other drivers to notify the caller that the operation will complete asynchronously, with the 0 result meaning that the operation is already complete. --- drivers/qmimodem/qmi.c | 193 +++++++++++++++++++-------------------- drivers/qmimodem/qmi.h | 4 + plugins/qrtrqmi.c | 2 +- unit/test-qmimodem-qmi.c | 26 +++--- 4 files changed, 114 insertions(+), 111 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index d0f8a56f1461..f1b2247b4178 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1919,8 +1919,30 @@ void qmi_qmux_device_free(struct qmi_device *device) struct qmi_device_qrtr { struct qmi_device super; + struct { + qmi_qrtr_node_lookup_done_func_t func; + void *user_data; + qmi_destroy_func_t destroy; + struct l_timeout *timeout; + } lookup; }; +static void __qrtr_lookup_finished(struct qmi_device_qrtr *node) +{ + if (!node->lookup.func) { + __debug_device(&node->super, "No lookup in progress"); + return; + } + + l_timeout_remove(node->lookup.timeout); + node->lookup.func(node->lookup.user_data); + + if (node->lookup.destroy) + node->lookup.destroy(node->lookup.user_data); + + memset(&node->lookup, 0, sizeof(node->lookup)); +} + static int qmi_device_qrtr_write(struct qmi_device *device, struct qmi_request *req) { @@ -1980,11 +2002,11 @@ static void qrtr_debug_ctrl_request(const struct qrtr_ctrl_pkt *packet, function(strbuf, user_data); } -static void qrtr_received_control_packet(struct qmi_device *device, +static void qrtr_received_control_packet(struct qmi_device_qrtr *node, const void *buf, size_t len) { + struct qmi_device *device = &node->super; const struct qrtr_ctrl_pkt *packet = buf; - struct discover_data *data; struct qmi_service_info info; uint32_t cmd; uint32_t type; @@ -2006,18 +2028,11 @@ static void qrtr_received_control_packet(struct qmi_device *device, return; } - data = l_queue_peek_head(device->discovery_queue); - if (!packet->server.service && !packet->server.instance && !packet->server.node && !packet->server.port) { __debug_device(device, "Initial service discovery has completed"); - - if (data) - DISCOVERY_DONE(data, data->user_data); - else - DBG("discovery_queue is empty"); /* likely a timeout */ - + __qrtr_lookup_finished(node); return; } @@ -2041,12 +2056,10 @@ static void qrtr_received_control_packet(struct qmi_device *device, __qmi_service_appeared(device, &info); - if (!data) { - DBG("discovery_queue is empty"); /* likely a timeout */ + if (!node->lookup.func) return; - } - l_timeout_modify(data->timeout, DISCOVER_TIMEOUT); + l_timeout_modify(node->lookup.timeout, DISCOVER_TIMEOUT); } static void qrtr_received_service_message(struct qmi_device *device, @@ -2101,7 +2114,7 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) qrtr->super.debug_data); if (addr.sq_port == QRTR_PORT_CTRL) - qrtr_received_control_packet(&qrtr->super, buf, bytes_read); + qrtr_received_control_packet(qrtr, buf, bytes_read); else qrtr_received_service_message(&qrtr->super, addr.sq_node, addr.sq_port, buf, bytes_read); @@ -2109,42 +2122,78 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) return true; } -static void qrtr_discover_reply_timeout(struct l_timeout *timeout, - void *user_data) +static const struct qmi_device_ops qrtr_ops = { + .write = qmi_device_qrtr_write, + .client_release = NULL, + .shutdown = NULL, +}; + +struct qmi_device *qmi_qrtr_node_new(uint32_t node) { - struct discover_data *data = user_data; + struct qmi_device_qrtr *qrtr; + int fd; - l_timeout_remove(data->timeout); - data->timeout = NULL; + fd = socket(AF_QIPCRTR, SOCK_DGRAM, 0); + if (fd < 0) + return NULL; - DISCOVERY_DONE(data, data->user_data); + qrtr = l_new(struct qmi_device_qrtr, 1); + + if (qmi_device_init(&qrtr->super, fd, &qrtr_ops) < 0) { + close(fd); + l_free(qrtr); + return NULL; + } + + l_io_set_read_handler(qrtr->super.io, qrtr_received_data, qrtr, NULL); + + return &qrtr->super; } -static int qmi_device_qrtr_discover(struct qmi_device *device, - qmi_discover_func_t func, - void *user_data, - qmi_destroy_func_t destroy) +void qmi_qrtr_node_free(struct qmi_device *device) { - struct discover_data *data; + struct qmi_device_qrtr *node; + + if (!device) + return; + + __qmi_device_free(device); + + node = l_container_of(device, struct qmi_device_qrtr, super); + + if (node->lookup.destroy) + node->lookup.destroy(node->lookup.user_data); + + l_free(node); +} + +static void qrtr_lookup_reply_timeout(struct l_timeout *timeout, + void *user_data) +{ + struct qmi_device_qrtr *node = user_data; + + __qrtr_lookup_finished(node); +} + +int qmi_qrtr_node_lookup(struct qmi_device *device, + qmi_qrtr_node_lookup_done_func_t func, + void *user_data, qmi_destroy_func_t destroy) +{ + struct qmi_device_qrtr *node; struct qrtr_ctrl_pkt packet; struct sockaddr_qrtr addr; socklen_t addr_len; - int rc; ssize_t bytes_written; int fd; - __debug_device(device, "device %p discover", device); - - if (l_queue_length(device->discovery_queue) > 0) - return -EINPROGRESS; + if (!device || !func) + return -EINVAL; - data = l_new(struct discover_data, 1); + node = l_container_of(device, struct qmi_device_qrtr, super); + if (node->lookup.func) + return -EALREADY; - data->super.destroy = discover_data_free; - data->device = device; - data->func = func; - data->user_data = user_data; - data->destroy = destroy; + __debug_device(device, "node %p discover", node); fd = l_io_get_fd(device->io); @@ -2153,19 +2202,16 @@ static int qmi_device_qrtr_discover(struct qmi_device *device, * get its value. */ addr_len = sizeof(addr); - rc = getsockname(fd, (struct sockaddr *) &addr, &addr_len); - if (rc) { + if (getsockname(fd, (struct sockaddr *) &addr, &addr_len) < 0) { __debug_device(device, "getsockname failed: %s", strerror(errno)); - rc = -errno; - goto error; + return -errno; } if (addr.sq_family != AF_QIPCRTR || addr_len != sizeof(addr)) { __debug_device(device, "Unexpected sockaddr family: %d size: %d", addr.sq_family, addr_len); - rc = -EIO; - goto error; + return -EIO; } addr.sq_port = QRTR_PORT_CTRL; @@ -2178,67 +2224,20 @@ static int qmi_device_qrtr_discover(struct qmi_device *device, if (bytes_written < 0) { __debug_device(device, "Failure sending data: %s", strerror(errno)); - rc = -errno; - goto error; + return -errno; } l_util_hexdump(false, &packet, bytes_written, device->debug_func, device->debug_data); - data->timeout = l_timeout_create(DISCOVER_TIMEOUT, - qrtr_discover_reply_timeout, - data, NULL); - - __qmi_device_discovery_started(device, &data->super); + node->lookup.func = func; + node->lookup.user_data = user_data; + node->lookup.destroy = destroy; + node->lookup.timeout = l_timeout_create(DISCOVER_TIMEOUT, + qrtr_lookup_reply_timeout, + node, NULL); return 0; - -error: - __discovery_free(&data->super); - - return rc; -} - -static const struct qmi_device_ops qrtr_ops = { - .write = qmi_device_qrtr_write, - .discover = qmi_device_qrtr_discover, - .client_release = NULL, - .shutdown = NULL, -}; - -struct qmi_device *qmi_qrtr_node_new(uint32_t node) -{ - struct qmi_device_qrtr *qrtr; - int fd; - - fd = socket(AF_QIPCRTR, SOCK_DGRAM, 0); - if (fd < 0) - return NULL; - - qrtr = l_new(struct qmi_device_qrtr, 1); - - if (qmi_device_init(&qrtr->super, fd, &qrtr_ops) < 0) { - close(fd); - l_free(qrtr); - return NULL; - } - - l_io_set_read_handler(qrtr->super.io, qrtr_received_data, qrtr, NULL); - - return &qrtr->super; -} - -void qmi_qrtr_node_free(struct qmi_device *device) -{ - struct qmi_device_qrtr *node; - - if (!device) - return; - - __qmi_device_free(device); - - node = l_container_of(device, struct qmi_device_qrtr, super); - l_free(node); } struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 54661bf44d91..2b6a4edb8b85 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -67,6 +67,7 @@ typedef void (*qmi_shutdown_func_t)(void *user_data); typedef void (*qmi_discover_func_t)(void *user_data); typedef void (*qmi_qmux_device_create_client_func_t)(struct qmi_service *, void *user_data); +typedef void (*qmi_qrtr_node_lookup_done_func_t)(void *); typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); @@ -98,6 +99,9 @@ bool qmi_device_set_expected_data_format(struct qmi_device *device, struct qmi_device *qmi_qrtr_node_new(uint32_t node); void qmi_qrtr_node_free(struct qmi_device *device); +int qmi_qrtr_node_lookup(struct qmi_device *device, + qmi_qrtr_node_lookup_done_func_t func, + void *user_data, qmi_destroy_func_t destroy); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type); diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 8ea9819f3297..0f9519d819bc 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -215,7 +215,7 @@ static int qrtrqmi_enable(struct ofono_modem *modem) if (getenv("OFONO_QMI_DEBUG")) qmi_device_set_debug(data->node, qrtrqmi_debug, "QRTR: "); - r = qmi_device_discover(data->node, lookup_done, modem, NULL); + r = qmi_qrtr_node_lookup(data->node, lookup_done, modem, NULL); if (!r) return -EINPROGRESS; diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 4c035db3c9c9..b6537629f86d 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -40,7 +40,7 @@ struct test_info { size_t received_len; void *received; - bool discovery_callback_called : 1; + bool lookup_callback_called : 1; bool service_send_callback_called : 1; bool internal_timeout_callback_called : 1; bool notify_callback_called : 1; @@ -188,26 +188,26 @@ static void test_create_qrtr_node(const void *data) test_cleanup(info); } -static void discovery_complete_cb(void *user_data) +static void lookup_complete_cb(void *user_data) { struct test_info *info = user_data; - info->discovery_callback_called = true; + info->lookup_callback_called = true; } -static void perform_discovery(struct test_info *info) +static void perform_lookup(struct test_info *info) { - qmi_device_discover(info->node, discovery_complete_cb, info, NULL); + qmi_qrtr_node_lookup(info->node, lookup_complete_cb, info, NULL); - while (!info->discovery_callback_called) + while (!info->lookup_callback_called) l_main_iterate(-1); } -static void test_discovery(const void *data) +static void test_lookup(const void *data) { struct test_info *info = test_setup(); - perform_discovery(info); + perform_lookup(info); test_cleanup(info); } @@ -228,7 +228,7 @@ static void test_create_services(const void *data) uint32_t service_type; size_t i; - perform_discovery(info); + perform_lookup(info); for (i = 0; i < TEST_SERVICE_COUNT; i++) { struct qmi_service *service; @@ -428,7 +428,7 @@ static void test_send_data(const void *data) uint32_t service_type; struct qmi_service *service; - perform_discovery(info); + perform_lookup(info); service_type = unique_service_type(0); /* Use the first service */ service = qmi_qrtr_node_get_service(info->node, service_type); @@ -475,7 +475,7 @@ static void test_notifications(const void *data) struct qmi_service *service; struct l_timeout *receive_timeout; - perform_discovery(info); + perform_lookup(info); service_type = unique_service_type(0); /* Use the first service */ service = qmi_qrtr_node_get_service(info->node, service_type); @@ -528,7 +528,7 @@ static void test_service_notification_independence(const void *data) struct qmi_service *services[2]; size_t i; - perform_discovery(info); + perform_lookup(info); service_type = unique_service_type(0); /* Use the first service */ @@ -592,7 +592,7 @@ int main(int argc, char **argv) l_test_init(&argc, &argv); l_test_add("QRTR node creation", test_create_qrtr_node, NULL); - l_test_add("QRTR discovery", test_discovery, NULL); + l_test_add("QRTR lookup", test_lookup, NULL); l_test_add("QRTR services may be created", test_create_services, NULL); l_test_add("QRTR service sends/responses", test_send_data, NULL); l_test_add("QRTR notifications", test_notifications, NULL); From patchwork Thu Jun 20 14:51:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705661 Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6355E1AE84E for ; Thu, 20 Jun 2024 14:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895131; cv=none; b=jgC7Up53EUfq19vLkjTxtiGVBTaTZK6LVj/CtFA3mxXtso3V5Ik6sF6ivAfA2WNWH60qReF9qbU/UPju5CnJQWHoD3xvvzgWP6URFsOyHZDwxGk/soDhQKEeFNjjE28ukIpvaJj1gnNwmz/IRTVzNB1lkN/6UXUWzfaLgDbWkqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895131; c=relaxed/simple; bh=56Ot0PTEwhfavemaDQDb1TUNTYk8+UKWRxv0q2CRkaI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MtnROqigZOe1xqT80Q+JbuV3kH3uBIsZdv7pQD/vcgj2OMS6zSxlcPghdtuBquNlL92smDrWEYLZMPjo2gTwhZmFOQAJdNS14+1v79eOl2HCZSBXXaLwpyKH+UGeg556EiJk0qF4N8tyGYH9FH31longhw00UjjJ7OTmQlIDDjA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lQWQFVjT; arc=none smtp.client-ip=209.85.167.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lQWQFVjT" Received: by mail-oi1-f170.google.com with SMTP id 5614622812f47-3c9b94951cfso524519b6e.3 for ; Thu, 20 Jun 2024 07:52:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895129; x=1719499929; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=haYp4EdraWRaqbVvQB/vcBkBIMuPxjy+EIeO3xWFwBw=; b=lQWQFVjTbQ9R9Lw8WAvxvrSTTriR1w5q8r7MnelGgHz12zU77xG1abHWxapP20ukUd jh368/hFrk3xMveoeW61sEt4Mq8LDgk4N/0Dvr0MTlnFstFOz1rzXAzT7h7Ms334I72j 4PMjJ7SiIGJGCUs12l0HZ0TEcvlSqs6EqIKhI4WYcJSQslg6OlZdBmnWcDsAphndGhxq +oPWuwqbrJvdCqu61sz068KFUpfVkeL59Ojf4I4u5OXbS8looCw/r6AKD0dGeofLjx7S Hjw5cxf3JErc/yfa/IILvoyJA87SDQxl4xVTILwslQm65KioGF0uSEohFaE3gNQCLlgu e1dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895129; x=1719499929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=haYp4EdraWRaqbVvQB/vcBkBIMuPxjy+EIeO3xWFwBw=; b=aQKY3BL5fq9VcfBsT7rnZ3fmIQMgehD8uzEuMR7ompUQnPy6yRlCidWjhTc739Dtyv bDn4BhHWNGp4cZ5LmnzpDVZzpeeykaOgQwdVGxM/F9TeaGn0mn2ZaEt21qfolJ3NIKiE mqrR+0Dqdnq/ubWhYB8IdPxqVGMUvWZPy7VQCFgUqRTB0o4cSN/DGOl2gJxnSoGu6rG2 Wu9y32rgpD2wVLK9MVBDUuorWVpMnswHmWmZmYp9M2GhSkPvrQG6C9bsc1xmfWg1OweQ wYi/Qf3pq3s1LACrM0ETHQ35fZuclwfeCNjkp7ogzrm2sNA1GjDIYevOa6blUK3TjqzI 4PHw== X-Gm-Message-State: AOJu0YwELGRugB9APca7v4HZsYhu7tx6Etqu7ovDGjedE1f0H2Aua5Sg leB6Jx1YDkR6UNiYbkjmX9YNID5jqkE4+gZGmSOGRk/MUYf96kn7U6iiZg== X-Google-Smtp-Source: AGHT+IG9Ljlx3BWgf643uAeLo6Qk763CUV8oEyM2E1vNI04nDLadv+pzL4U1VsSjEXaMss41G0XL+Q== X-Received: by 2002:a05:6808:300a:b0:3d2:2a17:9208 with SMTP id 5614622812f47-3d51badd4d2mr5694726b6e.51.1718895129461; Thu, 20 Jun 2024 07:52:09 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:09 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 21/33] qmi: split qmi_device_has_service into QRTR and QMUX version Date: Thu, 20 Jun 2024 09:51:08 -0500 Message-ID: <20240620145139.1135899-21-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 13 ++++++++++++- drivers/qmimodem/qmi.h | 4 ++-- plugins/gobi.c | 16 ++++++++-------- plugins/qrtrqmi.c | 10 +++++----- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index f1b2247b4178..f4d32bd702b1 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -988,8 +988,11 @@ bool qmi_qmux_device_get_service_version(struct qmi_device *device, return true; } -bool qmi_device_has_service(struct qmi_device *device, uint16_t type) +bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type) { + if (!device) + return false; + return __find_service_info_by_type(device, type); } @@ -2266,6 +2269,14 @@ done: return service_create(family); } +bool qmi_qrtr_node_has_service(struct qmi_device *device, uint16_t type) +{ + if (!device) + return false; + + return __find_service_info_by_type(device, type); +} + struct qmi_param *qmi_param_new(void) { return l_new(struct qmi_param, 1); diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 2b6a4edb8b85..ef0a8b14c0ef 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -81,6 +81,7 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, bool qmi_qmux_device_get_service_version(struct qmi_device *device, uint16_t type, uint16_t *major, uint16_t *minor); +bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type); void qmi_device_set_debug(struct qmi_device *device, qmi_debug_func_t func, void *user_data); @@ -90,8 +91,6 @@ int qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); -bool qmi_device_has_service(struct qmi_device *device, uint16_t type); - enum qmi_device_expected_data_format qmi_device_get_expected_data_format( struct qmi_device *device); bool qmi_device_set_expected_data_format(struct qmi_device *device, @@ -104,6 +103,7 @@ int qmi_qrtr_node_lookup(struct qmi_device *device, void *user_data, qmi_destroy_func_t destroy); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, uint32_t type); +bool qmi_qrtr_node_has_service(struct qmi_device *device, uint16_t type); struct qmi_param; diff --git a/plugins/gobi.c b/plugins/gobi.c index 3ab2efc39186..323cc50660cb 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -446,20 +446,20 @@ static void discover_cb(void *user_data) DBG(""); - if (qmi_device_has_service(data->device, QMI_SERVICE_DMS)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_DMS)) data->features |= GOBI_DMS; - if (qmi_device_has_service(data->device, QMI_SERVICE_NAS)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_NAS)) data->features |= GOBI_NAS; - if (qmi_device_has_service(data->device, QMI_SERVICE_WDS)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_WDS)) data->features |= GOBI_WDS; - if (qmi_device_has_service(data->device, QMI_SERVICE_WDA)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_WDA)) data->features |= GOBI_WDA; - if (qmi_device_has_service(data->device, QMI_SERVICE_PDS)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_PDS)) data->features |= GOBI_PDS; - if (qmi_device_has_service(data->device, QMI_SERVICE_UIM)) + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_UIM)) data->features |= GOBI_UIM; - if (qmi_device_has_service(data->device, QMI_SERVICE_VOICE)) - data->features |= GOBI_VOICE; + if (qmi_qmux_device_has_service(data->device, QMI_SERVICE_VOICE)) + data->features |= GOBI_VOICE; if (qmi_qmux_device_get_service_version(data->device, QMI_SERVICE_WMS, &major, &minor)) { diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 0f9519d819bc..6f8ee9ce5659 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -186,10 +186,10 @@ static void lookup_done(void *user_data) DBG(""); - if (!qmi_device_has_service(node, QMI_SERVICE_DMS) || - !qmi_device_has_service(node, QMI_SERVICE_UIM) || - !qmi_device_has_service(node, QMI_SERVICE_WDS) || - !qmi_device_has_service(node, QMI_SERVICE_NAS)) + if (!qmi_qrtr_node_has_service(node, QMI_SERVICE_DMS) || + !qmi_qrtr_node_has_service(node, QMI_SERVICE_UIM) || + !qmi_qrtr_node_has_service(node, QMI_SERVICE_WDS) || + !qmi_qrtr_node_has_service(node, QMI_SERVICE_NAS)) goto error; data->dms = qmi_qrtr_node_get_service(node, QMI_SERVICE_DMS); @@ -381,7 +381,7 @@ static void qrtrqmi_post_sim(struct ofono_modem *modem) ofono_sms_create(modem, 0, "qmimodem", wms); - if (qmi_device_has_service(node, QMI_SERVICE_UIM)) + if (qmi_qrtr_node_has_service(node, QMI_SERVICE_UIM)) mw = ofono_message_waiting_create(modem); if (mw) From patchwork Thu Jun 20 14:51:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705662 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB8851AE858 for ; Thu, 20 Jun 2024 14:52:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895133; cv=none; b=ng2mP0hV09uy+3f0o7MaDg1sdnUWL6Fvz+fq4EP8US6ZmbP04Ukg47rP9qxynDXMtD6/vlIyoRhC3Ej8tPovmvnq6p4qwe++mYRN3xgkoWkhFEmcjgM8Uh0Roj3aTNQw96g28UsABkU0SLMbgmAEbgRA2SpEks0MzlKmiGNmbPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895133; c=relaxed/simple; bh=LzeoIMnReljlbLFx9bYMAzjB0KpoFf/z4VJBJlFWShA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KKMsgWElOnBEzsUzW2mNW86DXjqd1m1dkyziQaK35XmVYqAEjFjFREdu9xlx/9b2Abfw/GwPt8XLKOfsfZJeEeunM9h10pTjCfVImYYF/g49JqiRYHc3t9omeEBFdObzGqIwM4HvTzsp3HvygDeEoJ7jxzDOpzOx8OdXqny+I5E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=W8FcL3S+; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W8FcL3S+" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3cabac56b38so514480b6e.3 for ; Thu, 20 Jun 2024 07:52:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895131; x=1719499931; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xpoAksHPANRsUPIkd9NJZVBusN8SjXwL3EZO4wAWV5g=; b=W8FcL3S+RcjKkE6XZ7B4DB8aPDIiqryM5aSOnN6bBN62SMvzE7nsAAaE83WaT3S+OJ kfEo+VYQrN6GUPjb98/hGLP3udAh3X5hqdUFhA+1o4ek+bADTJbVXwps7RIzrHqrfNxX VnazBcXY4rlq6tN5Q/acZuDxXWZ76MF0JGN2PRgI/vTxcEjBz6nX9Mjw5I0MdE+cUh7n HWPFKffxzMpeeKk2i0MoyS8lZKrBmnii2pSxn9+3Dd2m1nx5kIGk/e6akGK+hEdSf6Cg csVKAzEV9gskxC3nDKBoF8thhGCFYpPwt2BnJYZ+Ow/ZNMKx+SxWL73g2e9hGFKsHEK9 46Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895131; x=1719499931; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xpoAksHPANRsUPIkd9NJZVBusN8SjXwL3EZO4wAWV5g=; b=GwmOgSLy7O+qIcyxFSTD6B+I6OPhpORBYY1+pPLcgL5Qu5/mSBPUCiGeEc4BOqPlJz HOnNLxi7PEAdreyhZRiiZ8qaNmVR2H/07PNaRjWpTNwHzDKb55brTEaKShUdxLInIjii 2cnxl06QQDQyVgqQw8XCjAL0yeNCjAM9otMG5vUbFTnIBCo5WsPgWgkl5sqBoFjsWcGI iIi+nKi11DTfUS1csz7+tMGjL9+L77hccHZqQcs+2xXfCiQnfi/M83mpoXVln36hgEql MbUuUVj/K4opOhH5WQakF66eGks4kbqnEnJ9uslDNoefPXRPXU/Aw3TlJzAfjPuhhmgr 8iEw== X-Gm-Message-State: AOJu0Yzx76HpEcYLGKr5zezXkO0Mn/6DzE+6a0VEmoojny8kWV0buJnz OJakekazBCqSc26QCzd8+7dKtWYDOh6R44+nijvvKT8gGKwSh3CFWwf/Yw== X-Google-Smtp-Source: AGHT+IEdnO6xKdO/w57YStHC+GGE5RBymYZKhBS98upqUUuOBUJ9uA9FQFMoq7EG9ld24ldlMCkxjQ== X-Received: by 2002:a05:6808:14d5:b0:3d2:30ce:327c with SMTP id 5614622812f47-3d51b98288fmr6310297b6e.10.1718895130703; Thu, 20 Jun 2024 07:52:10 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:10 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 22/33] qmi: split qmi_device_set_debug into QRTR and QMUX versions Date: Thu, 20 Jun 2024 09:51:09 -0500 Message-ID: <20240620145139.1135899-22-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 While here, rework how debugging works by introducing an auxiliary structure to house debug callback and user_data. Replace __debug_device with a DEBUG macro that uses l_util_debug. The use of this macro allows function and line information to be automagically included in the debug output. --- drivers/qmimodem/qmi.c | 177 ++++++++++++++++++++------------------- drivers/qmimodem/qmi.h | 8 +- plugins/gobi.c | 2 +- plugins/qrtrqmi.c | 2 +- unit/test-qmimodem-qmi.c | 2 +- 5 files changed, 97 insertions(+), 94 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index f4d32bd702b1..b5fb27c51a31 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -31,6 +31,10 @@ #define DISCOVER_TIMEOUT 5 +#define DEBUG(debug, fmt, args...) \ + l_util_debug((debug)->func, (debug)->user_data, "%s:%i " fmt, \ + __func__, __LINE__, ## args) + typedef void (*qmi_message_func_t)(uint16_t message, uint16_t length, const void *buffer, void *user_data); @@ -71,6 +75,11 @@ struct qmi_device_ops { void *user, qmi_destroy_func_t destroy); }; +struct debug_data { + qmi_debug_func_t func; + void *user_data; +}; + struct qmi_device { struct l_io *io; struct l_queue *req_queue; @@ -79,8 +88,6 @@ struct qmi_device { unsigned int next_group_id; /* Matches requests with services */ unsigned int next_service_handle; uint16_t next_service_tid; - qmi_debug_func_t debug_func; - void *debug_data; struct l_queue *service_infos; struct l_hashmap *family_list; const struct qmi_device_ops *ops; @@ -92,6 +99,7 @@ struct qmi_device_qmux { uint16_t control_major; uint16_t control_minor; char *version_str; + struct debug_data debug; qmi_shutdown_func_t shutdown_func; void *shutdown_user_data; qmi_destroy_func_t shutdown_destroy; @@ -501,6 +509,13 @@ int qmi_error_to_ofono_cme(int qmi_error) } } +static void __debug_data_init(struct debug_data *debug, + qmi_debug_func_t func, void *user_data) +{ + debug->func = func; + debug->user_data = user_data; +} + static void __debug_msg(char dir, const struct qmi_message_hdr *msg, uint32_t service_type, uint8_t transaction_type, uint16_t tid, uint8_t client, uint16_t overall_length, @@ -630,7 +645,7 @@ static void __qmux_debug_msg(const char dir, const void *buf, size_t len, static void __qrtr_debug_msg(const char dir, const void *buf, size_t len, uint32_t service_type, - qmi_debug_func_t function, void *user_data) + const struct debug_data *debug) { const struct qmi_service_hdr *srv; const struct qmi_message_hdr *msg; @@ -645,23 +660,7 @@ static void __qrtr_debug_msg(const char dir, const void *buf, size_t len, tid = L_LE16_TO_CPU(srv->transaction); __debug_msg(dir, msg, service_type, srv->type >> 1, tid, 0, len, - function, user_data); -} - -static void __debug_device(struct qmi_device *device, - const char *format, ...) -{ - char strbuf[72 + 16]; - va_list ap; - - if (!device->debug_func) - return; - - va_start(ap, format); - vsnprintf(strbuf, sizeof(strbuf), format, ap); - va_end(ap); - - device->debug_func(strbuf, device->debug_data); + debug->func, debug->user_data); } static bool can_write_data(struct l_io *io, void *user_data) @@ -860,8 +859,6 @@ static int qmi_device_init(struct qmi_device *device, int fd, { long flags; - __debug_device(device, "device %p new", device); - flags = fcntl(fd, F_GETFL, NULL); if (flags < 0) return -EIO; @@ -891,8 +888,6 @@ static int qmi_device_init(struct qmi_device *device, int fd, static void __qmi_device_free(struct qmi_device *device) { - __debug_device(device, "device %p free", device); - l_queue_destroy(device->service_queue, __request_free); l_queue_destroy(device->req_queue, __request_free); l_queue_destroy(device->discovery_queue, __discovery_free); @@ -904,16 +899,6 @@ static void __qmi_device_free(struct qmi_device *device) l_queue_destroy(device->service_infos, l_free); } -void qmi_device_set_debug(struct qmi_device *device, - qmi_debug_func_t func, void *user_data) -{ - if (device == NULL) - return; - - device->debug_func = func; - device->debug_data = user_data; -} - void qmi_result_print_tlvs(struct qmi_result *result) { const void *ptr = result->data; @@ -1253,10 +1238,10 @@ static int qmi_device_qmux_write(struct qmi_device *device, return -errno; l_util_hexdump(false, req->data, bytes_written, - device->debug_func, device->debug_data); + qmux->debug.func, qmux->debug.user_data); __qmux_debug_msg(' ', req->data, bytes_written, - device->debug_func, device->debug_data); + qmux->debug.func, qmux->debug.user_data); hdr = (struct qmi_mux_hdr *) req->data; @@ -1316,7 +1301,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data) return true; l_util_hexdump(true, buf, bytes_read, - qmux->super.debug_func, qmux->super.debug_data); + qmux->debug.func, qmux->debug.user_data); offset = 0; @@ -1341,7 +1326,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data) break; __qmux_debug_msg(' ', buf + offset, len, - qmux->super.debug_func, qmux->super.debug_data); + qmux->debug.func, qmux->debug.user_data); msg = buf + offset + QMI_MUX_HDR_SIZE; @@ -1431,10 +1416,6 @@ static struct service_family *service_family_create(struct qmi_device *device, memcpy(&family->info, info, sizeof(family->info)); - __debug_device(device, "service family created [client=%d,type=%d]", - family->client_id, - family->info.service_type); - return family; } @@ -1450,10 +1431,6 @@ static struct qmi_service *service_create(struct service_family *family) service->handle = device->next_service_handle++; service->family = service_family_ref(family); - __debug_device(device, "service created [client=%d,type=%d]", - family->client_id, - family->info.service_type); - return service; } @@ -1489,7 +1466,7 @@ static bool qmi_device_qmux_sync(struct qmi_device_qmux *qmux, { struct qmi_request *req; - __debug_device(&qmux->super, "Sending sync to reset QMI"); + DEBUG(&qmux->debug, "Sending sync to reset QMI"); req = __control_request_alloc(QMI_CTL_SYNC, NULL, 0, qmux_sync_callback, data); @@ -1536,10 +1513,10 @@ static void qmux_discover_callback(uint16_t message, uint16_t length, struct qmi_service_info info; if (name) - __debug_device(device, "found service [%s %d.%d]", + DEBUG(&qmux->debug, "discovered service [%s %d.%d]", name, major, minor); else - __debug_device(device, "found service [%d %d.%d]", + DEBUG(&qmux->debug, "discovered service [%d %d.%d]", type, major, minor); if (type == QMI_SERVICE_CONTROL) { @@ -1561,7 +1538,7 @@ static void qmux_discover_callback(uint16_t message, uint16_t length, goto done; qmux->version_str = l_strndup(ptr + 1, *((uint8_t *) ptr)); - __debug_device(device, "version string: %s", qmux->version_str); + DEBUG(&qmux->debug, "version string: %s", qmux->version_str); done: /* if the device support the QMI call SYNC over the CTL interface */ @@ -1605,7 +1582,7 @@ static int qmi_device_qmux_discover(struct qmi_device *device, struct discover_data *data; struct qmi_request *req; - __debug_device(device, "device %p discover", device); + DEBUG(&qmux->debug, "device %p", qmux); if (l_queue_length(device->service_infos) > 0) return -EALREADY; @@ -1666,7 +1643,7 @@ static void qmux_client_create_timeout(struct l_timeout *timeout, l_container_of(device, struct qmi_device_qmux, super); struct qmi_request *req; - __debug_device(device, "client creation timed out"); + DEBUG(&qmux->debug, ""); l_timeout_remove(data->timeout); data->timeout = NULL; @@ -1684,6 +1661,8 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; + struct qmi_device_qmux *qmux = + l_container_of(device, struct qmi_device_qmux, super); struct service_family *family = NULL; struct qmi_service *service = NULL; struct qmi_service_info info; @@ -1715,6 +1694,9 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, info.minor = data->minor; family = service_family_create(device, &info, client_id->client); + DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", + family->client_id, family->info.service_type); + family = service_family_ref(family); hash_id = family_list_create_hash(family->info.service_type, family->client_id); @@ -1763,7 +1745,7 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, create_data->user_data = user_data; create_data->destroy = destroy; - __debug_device(device, "service create [type=%d]", service_type); + DEBUG(&qmux->debug, "creating client [type=%d]", service_type); req = __control_request_alloc(QMI_CTL_GET_CLIENT_ID, client_req, sizeof(client_req), @@ -1856,7 +1838,7 @@ static int qmi_device_qmux_shutdown(struct qmi_device *device, if (qmux->shutdown_idle) return -EALREADY; - __debug_device(&qmux->super, "device %p shutdown", &qmux->super); + DEBUG(&qmux->debug, "device %p", &qmux); qmux->shutdown_idle = l_idle_create(qmux_shutdown_callback, qmux, qmux_shutdown_destroy); @@ -1909,9 +1891,10 @@ void qmi_qmux_device_free(struct qmi_device *device) if (!device) return; + qmux = l_container_of(device, struct qmi_device_qmux, super); + DEBUG(&qmux->debug, "device %p", qmux); __qmi_device_free(device); - qmux = l_container_of(device, struct qmi_device_qmux, super); if (qmux->shutting_down) { qmux->destroyed = true; return; @@ -1920,8 +1903,21 @@ void qmi_qmux_device_free(struct qmi_device *device) __qmux_device_free(qmux); } +void qmi_qmux_device_set_debug(struct qmi_device *device, + qmi_debug_func_t func, void *user_data) +{ + struct qmi_device_qmux *qmux; + + if (device == NULL) + return; + + qmux = l_container_of(device, struct qmi_device_qmux, super); + __debug_data_init(&qmux->debug, func, user_data); +} + struct qmi_device_qrtr { struct qmi_device super; + struct debug_data debug; struct { qmi_qrtr_node_lookup_done_func_t func; void *user_data; @@ -1933,7 +1929,7 @@ struct qmi_device_qrtr { static void __qrtr_lookup_finished(struct qmi_device_qrtr *node) { if (!node->lookup.func) { - __debug_device(&node->super, "No lookup in progress"); + DEBUG(&node->debug, "No lookup in progress"); return; } @@ -1949,6 +1945,8 @@ static void __qrtr_lookup_finished(struct qmi_device_qrtr *node) static int qmi_device_qrtr_write(struct qmi_device *device, struct qmi_request *req) { + struct qmi_device_qrtr *node = + l_container_of(device, struct qmi_device_qrtr, super); struct sockaddr_qrtr addr; uint8_t *data; uint16_t len; @@ -1967,16 +1965,15 @@ static int qmi_device_qrtr_write(struct qmi_device *device, bytes_written = sendto(fd, data, len, 0, (struct sockaddr *) &addr, sizeof(addr)); if (bytes_written < 0) { - __debug_device(device, "sendto: %s", strerror(errno)); + DEBUG(&node->debug, "sendto: %s", strerror(errno)); return -errno; } l_util_hexdump(false, data, bytes_written, - device->debug_func, device->debug_data); + node->debug.func, node->debug.user_data); __qrtr_debug_msg(' ', data, bytes_written, - req->info.service_type, device->debug_func, - device->debug_data); + req->info.service_type, &node->debug); l_queue_push_tail(device->service_queue, req); @@ -1984,13 +1981,12 @@ static int qmi_device_qrtr_write(struct qmi_device *device, } static void qrtr_debug_ctrl_request(const struct qrtr_ctrl_pkt *packet, - qmi_debug_func_t function, - void *user_data) + const struct debug_data *debug) { char strbuf[72 + 16], *str; const char *type; - if (!function) + if (!debug->func) return; str = strbuf; @@ -2002,7 +1998,7 @@ static void qrtr_debug_ctrl_request(const struct qrtr_ctrl_pkt *packet, str += sprintf(str, "%s cmd=%d", type, L_LE32_TO_CPU(packet->cmd)); - function(strbuf, user_data); + debug->func(strbuf, debug->user_data); } static void qrtr_received_control_packet(struct qmi_device_qrtr *node, @@ -2019,22 +2015,21 @@ static void qrtr_received_control_packet(struct qmi_device_qrtr *node, uint32_t qrtr_port; if (len < sizeof(*packet)) { - __debug_device(device, "qrtr packet is too small"); + DEBUG(&node->debug, "packet is too small"); return; } - qrtr_debug_ctrl_request(packet, device->debug_func, device->debug_data); + qrtr_debug_ctrl_request(packet, &node->debug); cmd = L_LE32_TO_CPU(packet->cmd); if (cmd != QRTR_TYPE_NEW_SERVER) { - __debug_device(device, "Unknown command: %d", cmd); + DEBUG(&node->debug, "Unknown command: %d", cmd); return; } if (!packet->server.service && !packet->server.instance && !packet->server.node && !packet->server.port) { - __debug_device(device, - "Initial service discovery has completed"); + DEBUG(&node->debug, "Service lookup complete"); __qrtr_lookup_finished(node); return; } @@ -2046,8 +2041,7 @@ static void qrtr_received_control_packet(struct qmi_device_qrtr *node, qrtr_node = L_LE32_TO_CPU(packet->server.node); qrtr_port = L_LE32_TO_CPU(packet->server.port); - __debug_device(device, - "New server: %d Version: %d Node/Port: %d/%d", + DEBUG(&node->debug, "New server: %d Version: %d Node/Port: %d/%d", type, version, qrtr_node, qrtr_port); memset(&info, 0, sizeof(info)); @@ -2065,11 +2059,12 @@ static void qrtr_received_control_packet(struct qmi_device_qrtr *node, l_timeout_modify(node->lookup.timeout, DISCOVER_TIMEOUT); } -static void qrtr_received_service_message(struct qmi_device *device, +static void qrtr_received_service_message(struct qmi_device_qrtr *node, uint32_t qrtr_node, uint32_t qrtr_port, const void *buf, size_t len) { + struct qmi_device *device = &node->super; const struct l_queue_entry *entry; uint32_t service_type = 0; @@ -2085,14 +2080,12 @@ static void qrtr_received_service_message(struct qmi_device *device, } if (!service_type) { - __debug_device(device, "Message from unknown at node/port %d/%d", + DEBUG(&node->debug, "Message from unknown at node/port %d/%d", qrtr_node, qrtr_port); return; } - __qrtr_debug_msg(' ', buf, len, service_type, - device->debug_func, device->debug_data); - + __qrtr_debug_msg(' ', buf, len, service_type, &node->debug); __rx_message(device, service_type, 0, buf); } @@ -2107,19 +2100,19 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) addr_size = sizeof(addr); bytes_read = recvfrom(l_io_get_fd(qrtr->super.io), buf, sizeof(buf), 0, (struct sockaddr *) &addr, &addr_size); - __debug_device(&qrtr->super, "Received %zd bytes from Node: %d Port: %d", + DEBUG(&qrtr->debug, "Received %zd bytes from Node: %d Port: %d", bytes_read, addr.sq_node, addr.sq_port); if (bytes_read < 0) return true; - l_util_hexdump(true, buf, bytes_read, qrtr->super.debug_func, - qrtr->super.debug_data); + l_util_hexdump(true, buf, bytes_read, + qrtr->debug.func, qrtr->debug.user_data); if (addr.sq_port == QRTR_PORT_CTRL) qrtr_received_control_packet(qrtr, buf, bytes_read); else - qrtr_received_service_message(&qrtr->super, addr.sq_node, + qrtr_received_service_message(qrtr, addr.sq_node, addr.sq_port, buf, bytes_read); return true; @@ -2170,6 +2163,18 @@ void qmi_qrtr_node_free(struct qmi_device *device) l_free(node); } +void qmi_qrtr_node_set_debug(struct qmi_device *device, + qmi_debug_func_t func, void *user_data) +{ + struct qmi_device_qrtr *node; + + if (device == NULL) + return; + + node = l_container_of(device, struct qmi_device_qrtr, super); + __debug_data_init(&node->debug, func, user_data); +} + static void qrtr_lookup_reply_timeout(struct l_timeout *timeout, void *user_data) { @@ -2196,7 +2201,7 @@ int qmi_qrtr_node_lookup(struct qmi_device *device, if (node->lookup.func) return -EALREADY; - __debug_device(device, "node %p discover", node); + DEBUG(&node->debug, "node %p", node); fd = l_io_get_fd(device->io); @@ -2206,13 +2211,12 @@ int qmi_qrtr_node_lookup(struct qmi_device *device, */ addr_len = sizeof(addr); if (getsockname(fd, (struct sockaddr *) &addr, &addr_len) < 0) { - __debug_device(device, "getsockname failed: %s", - strerror(errno)); + DEBUG(&node->debug, "getsockname failed: %s", strerror(errno)); return -errno; } if (addr.sq_family != AF_QIPCRTR || addr_len != sizeof(addr)) { - __debug_device(device, "Unexpected sockaddr family: %d size: %d", + DEBUG(&node->debug, "Unexpected sockaddr family: %d size: %d", addr.sq_family, addr_len); return -EIO; } @@ -2225,13 +2229,12 @@ int qmi_qrtr_node_lookup(struct qmi_device *device, sizeof(packet), 0, (struct sockaddr *) &addr, addr_len); if (bytes_written < 0) { - __debug_device(device, "Failure sending data: %s", - strerror(errno)); + DEBUG(&node->debug, "sendto failed: %s", strerror(errno)); return -errno; } l_util_hexdump(false, &packet, bytes_written, - device->debug_func, device->debug_data); + node->debug.func, node->debug.user_data); node->lookup.func = func; node->lookup.user_data = user_data; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index ef0a8b14c0ef..c85699d0e76f 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -73,7 +73,8 @@ typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); struct qmi_device *qmi_qmux_device_new(const char *device); void qmi_qmux_device_free(struct qmi_device *device); - +void qmi_qmux_device_set_debug(struct qmi_device *device, + qmi_debug_func_t func, void *user_data); bool qmi_qmux_device_create_client(struct qmi_device *device, uint16_t service_type, qmi_qmux_device_create_client_func_t func, @@ -83,9 +84,6 @@ bool qmi_qmux_device_get_service_version(struct qmi_device *device, uint16_t *major, uint16_t *minor); bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type); -void qmi_device_set_debug(struct qmi_device *device, - qmi_debug_func_t func, void *user_data); - int qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, void *user_data, qmi_destroy_func_t destroy); int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, @@ -98,6 +96,8 @@ bool qmi_device_set_expected_data_format(struct qmi_device *device, struct qmi_device *qmi_qrtr_node_new(uint32_t node); void qmi_qrtr_node_free(struct qmi_device *device); +void qmi_qrtr_node_set_debug(struct qmi_device *device, + qmi_debug_func_t func, void *user_data); int qmi_qrtr_node_lookup(struct qmi_device *device, qmi_qrtr_node_lookup_done_func_t func, void *user_data, qmi_destroy_func_t destroy); diff --git a/plugins/gobi.c b/plugins/gobi.c index 323cc50660cb..46f4d50e2ee1 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -515,7 +515,7 @@ static int gobi_enable(struct ofono_modem *modem) return -EIO; if (getenv("OFONO_QMI_DEBUG")) - qmi_device_set_debug(data->device, gobi_debug, "QMI: "); + qmi_qmux_device_set_debug(data->device, gobi_debug, "QMI: "); r = qmi_device_discover(data->device, discover_cb, modem, NULL); if (!r) diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 6f8ee9ce5659..114c9bcb85cc 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -213,7 +213,7 @@ static int qrtrqmi_enable(struct ofono_modem *modem) return -EIO; if (getenv("OFONO_QMI_DEBUG")) - qmi_device_set_debug(data->node, qrtrqmi_debug, "QRTR: "); + qmi_qrtr_node_set_debug(data->node, qrtrqmi_debug, "QRTR: "); r = qmi_qrtr_node_lookup(data->node, lookup_done, modem, NULL); if (!r) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index b6537629f86d..12fab71ba271 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -156,7 +156,7 @@ static struct test_info *test_setup(void) assert(info->node); /* Enable ofono logging */ - qmi_device_set_debug(info->node, debug_log, NULL); + qmi_qrtr_node_set_debug(info->node, debug_log, NULL); info->timeout = l_timeout_create(TEST_TIMEOUT, test_timeout_cb, info, NULL); From patchwork Thu Jun 20 14:51:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705663 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF5841AE84E for ; Thu, 20 Jun 2024 14:52:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895134; cv=none; b=ICFzgjLoKTdur27LfJN3dpfteJsoVtQh7IM8xDxvEBhmfpcKrm/+uZ84ZlKfsz3CuNSDjKrMCm1blKTgAPh+PxI6oMuXmbcwqXiEQ4DbZLqqdZPBguUdThuaszILsBWiQpFvyy6HXuCzw8XiXGFEc82I8vvThQhsEcu6eKVhJQY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895134; c=relaxed/simple; bh=WF/beh672nIScZHr5DfZokSw0hn7GjHI5/2Jybcvxfc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y6l4IQNLoEQV/hSOVtdIdZ2rrgE1qjiVUAtzXVWdaf3Lwaw1NH/fLeKhNc5mEm23p0nAXUa3JOGdM4/HFjY0lM+ixRBWl3e4X4yO/Jgjea5vZHWiWsEDBvcBf9AJInHuwJ7j3r/b7FYSsmrHxEc3EfukEoCv4s4s+Ht5U0VKRp8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ABLdGdnD; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ABLdGdnD" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3c9cc681ee7so404996b6e.1 for ; Thu, 20 Jun 2024 07:52:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895132; x=1719499932; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IxtzOOSjma+dwnvC+zehsPWABOmiS6mckSCt94NLhME=; b=ABLdGdnDz9ELwBN1tdr842nZZm7NLzP6e7RtELurR9wLGMT1amJkDqfXSyqTki2mDA 0qZFDWNLfu48kqEHPh6gZnkGkNrthfJNVzFH3wwc6mR44Xjd4LxbBmuaDpwoJ+dUidYl ddIA7eNv+1eUmMwc8KKr5txLrP5CQpKT5LeVdJ4VZ2wfesx1xY+oKl4Yg9Yu3abiwYxJ f9Ody8/7uE8pyslBQPmZtwf3XHkqyZjoYfM/J3XojwOsAQfk1FNSOskM1L61Zw0cB305 HWx33ZlAF782n9iKfJpyKp/Sv206OckakueczoiRXulib2LXJiwSRLxX1S5tvK7YWKgv ZT8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895132; x=1719499932; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IxtzOOSjma+dwnvC+zehsPWABOmiS6mckSCt94NLhME=; b=WhiLp19i5xW1YupjcYDqDbndyDy8YwJm2BwyTDNONkvCippDGd0jBlX2V1vSouBjcS wdRK30qTkpmhzzmNh+nga16Dxigb2YnH4uwnMGkcNIAIVO76twpGI5uKuXh/xFOSxrV7 UCgYpZGF6g8aI5V9SGowUuLZYTuqgV3EhX1msJxVMF6yo3Piysl4OCeAcjBL/UZdqV1Y hnFs8sEIubtjuNNrslSuOlJbREN3vPioCEOiI1eKC3XjtVZlLh1Hh772XOJHXKBxcSD5 1E/vnHeFAS7A+3MN904J9GlA4/PcbgYLr8c1MTrzn8HJ/NF5qZ2JonZK2GCibrIEg6OR I3TA== X-Gm-Message-State: AOJu0YydLcY/AmvLkguAkBlxLOW95Akfy6zeYfoR3FQEhyjGp29reRn2 PaSjjxbE4tT78sIbTQWhZEodJLpe2Hj2wETv38CYDEg+9I4Am1rVXKfmNA== X-Google-Smtp-Source: AGHT+IGS2r1JspiAJsROPwCcYq+79Dk0khcRmoksUznTUrQCmDFDcKOMHa4pYhsfA9h9SjOn6o//DQ== X-Received: by 2002:a05:6808:2006:b0:3d2:1c7b:e64 with SMTP id 5614622812f47-3d51b6d344dmr2660824b6e.25.1718895131659; Thu, 20 Jun 2024 07:52:11 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:11 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 23/33] qmi: Make qmi_qrtr_node methods take struct qmi_qrtr_node Date: Thu, 20 Jun 2024 09:51:10 -0500 Message-ID: <20240620145139.1135899-23-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 64 ++++++++++++++++++---------------------- drivers/qmimodem/qmi.h | 12 ++++---- plugins/qrtrqmi.c | 10 +++---- unit/test-qmimodem-qmi.c | 2 +- 4 files changed, 40 insertions(+), 48 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index b5fb27c51a31..4dba8186c09d 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1915,7 +1915,7 @@ void qmi_qmux_device_set_debug(struct qmi_device *device, __debug_data_init(&qmux->debug, func, user_data); } -struct qmi_device_qrtr { +struct qmi_qrtr_node { struct qmi_device super; struct debug_data debug; struct { @@ -1926,7 +1926,7 @@ struct qmi_device_qrtr { } lookup; }; -static void __qrtr_lookup_finished(struct qmi_device_qrtr *node) +static void __qrtr_lookup_finished(struct qmi_qrtr_node *node) { if (!node->lookup.func) { DEBUG(&node->debug, "No lookup in progress"); @@ -1942,11 +1942,11 @@ static void __qrtr_lookup_finished(struct qmi_device_qrtr *node) memset(&node->lookup, 0, sizeof(node->lookup)); } -static int qmi_device_qrtr_write(struct qmi_device *device, +static int qmi_qrtr_node_write(struct qmi_device *device, struct qmi_request *req) { - struct qmi_device_qrtr *node = - l_container_of(device, struct qmi_device_qrtr, super); + struct qmi_qrtr_node *node = + l_container_of(device, struct qmi_qrtr_node, super); struct sockaddr_qrtr addr; uint8_t *data; uint16_t len; @@ -2001,7 +2001,7 @@ static void qrtr_debug_ctrl_request(const struct qrtr_ctrl_pkt *packet, debug->func(strbuf, debug->user_data); } -static void qrtr_received_control_packet(struct qmi_device_qrtr *node, +static void qrtr_received_control_packet(struct qmi_qrtr_node *node, const void *buf, size_t len) { struct qmi_device *device = &node->super; @@ -2059,7 +2059,7 @@ static void qrtr_received_control_packet(struct qmi_device_qrtr *node, l_timeout_modify(node->lookup.timeout, DISCOVER_TIMEOUT); } -static void qrtr_received_service_message(struct qmi_device_qrtr *node, +static void qrtr_received_service_message(struct qmi_qrtr_node *node, uint32_t qrtr_node, uint32_t qrtr_port, const void *buf, size_t len) @@ -2091,7 +2091,7 @@ static void qrtr_received_service_message(struct qmi_device_qrtr *node, static bool qrtr_received_data(struct l_io *io, void *user_data) { - struct qmi_device_qrtr *qrtr = user_data; + struct qmi_qrtr_node *qrtr = user_data; struct sockaddr_qrtr addr; unsigned char buf[2048]; ssize_t bytes_read; @@ -2119,21 +2119,21 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) } static const struct qmi_device_ops qrtr_ops = { - .write = qmi_device_qrtr_write, + .write = qmi_qrtr_node_write, .client_release = NULL, .shutdown = NULL, }; -struct qmi_device *qmi_qrtr_node_new(uint32_t node) +struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node) { - struct qmi_device_qrtr *qrtr; + struct qmi_qrtr_node *qrtr; int fd; fd = socket(AF_QIPCRTR, SOCK_DGRAM, 0); if (fd < 0) return NULL; - qrtr = l_new(struct qmi_device_qrtr, 1); + qrtr = l_new(struct qmi_qrtr_node, 1); if (qmi_device_init(&qrtr->super, fd, &qrtr_ops) < 0) { close(fd); @@ -2143,19 +2143,15 @@ struct qmi_device *qmi_qrtr_node_new(uint32_t node) l_io_set_read_handler(qrtr->super.io, qrtr_received_data, qrtr, NULL); - return &qrtr->super; + return qrtr; } -void qmi_qrtr_node_free(struct qmi_device *device) +void qmi_qrtr_node_free(struct qmi_qrtr_node *node) { - struct qmi_device_qrtr *node; - - if (!device) + if (!node) return; - __qmi_device_free(device); - - node = l_container_of(device, struct qmi_device_qrtr, super); + __qmi_device_free(&node->super); if (node->lookup.destroy) node->lookup.destroy(node->lookup.user_data); @@ -2163,47 +2159,42 @@ void qmi_qrtr_node_free(struct qmi_device *device) l_free(node); } -void qmi_qrtr_node_set_debug(struct qmi_device *device, +void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node, qmi_debug_func_t func, void *user_data) { - struct qmi_device_qrtr *node; - - if (device == NULL) + if (!node) return; - node = l_container_of(device, struct qmi_device_qrtr, super); __debug_data_init(&node->debug, func, user_data); } static void qrtr_lookup_reply_timeout(struct l_timeout *timeout, void *user_data) { - struct qmi_device_qrtr *node = user_data; + struct qmi_qrtr_node *node = user_data; __qrtr_lookup_finished(node); } -int qmi_qrtr_node_lookup(struct qmi_device *device, +int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, qmi_qrtr_node_lookup_done_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qrtr *node; struct qrtr_ctrl_pkt packet; struct sockaddr_qrtr addr; socklen_t addr_len; ssize_t bytes_written; int fd; - if (!device || !func) + if (!node || !func) return -EINVAL; - node = l_container_of(device, struct qmi_device_qrtr, super); if (node->lookup.func) return -EALREADY; DEBUG(&node->debug, "node %p", node); - fd = l_io_get_fd(device->io); + fd = l_io_get_fd(node->super.io); /* * The control node is configured by the system. Use getsockname to @@ -2246,13 +2237,14 @@ int qmi_qrtr_node_lookup(struct qmi_device *device, return 0; } -struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, +struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, uint32_t type) { + struct qmi_device *device = &node->super; struct service_family *family; const struct qmi_service_info *info; - if (!device) + if (!node) return NULL; if (type == QMI_SERVICE_CONTROL) @@ -2272,12 +2264,12 @@ done: return service_create(family); } -bool qmi_qrtr_node_has_service(struct qmi_device *device, uint16_t type) +bool qmi_qrtr_node_has_service(struct qmi_qrtr_node *node, uint16_t type) { - if (!device) + if (!node) return false; - return __find_service_info_by_type(device, type); + return __find_service_info_by_type(&node->super, type); } struct qmi_param *qmi_param_new(void) diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index c85699d0e76f..6e6fc6912622 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -94,16 +94,16 @@ enum qmi_device_expected_data_format qmi_device_get_expected_data_format( bool qmi_device_set_expected_data_format(struct qmi_device *device, enum qmi_device_expected_data_format format); -struct qmi_device *qmi_qrtr_node_new(uint32_t node); -void qmi_qrtr_node_free(struct qmi_device *device); -void qmi_qrtr_node_set_debug(struct qmi_device *device, +struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node); +void qmi_qrtr_node_free(struct qmi_qrtr_node *node); +void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node, qmi_debug_func_t func, void *user_data); -int qmi_qrtr_node_lookup(struct qmi_device *device, +int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, qmi_qrtr_node_lookup_done_func_t func, void *user_data, qmi_destroy_func_t destroy); -struct qmi_service *qmi_qrtr_node_get_service(struct qmi_device *device, +struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, uint32_t type); -bool qmi_qrtr_node_has_service(struct qmi_device *device, uint16_t type); +bool qmi_qrtr_node_has_service(struct qmi_qrtr_node *node, uint16_t type); struct qmi_param; diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 114c9bcb85cc..cf04d05f65cc 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -45,7 +45,7 @@ #include struct qrtrqmi_data { - struct qmi_device *node; + struct qmi_qrtr_node *node; struct qmi_service *dms; int main_net_ifindex; char main_net_name[IFNAMSIZ]; @@ -182,7 +182,7 @@ static void lookup_done(void *user_data) { struct ofono_modem *modem = user_data; struct qrtrqmi_data *data = ofono_modem_get_data(modem); - struct qmi_device *node = data->node; + struct qmi_qrtr_node *node = data->node; DBG(""); @@ -288,7 +288,7 @@ static void qrtrqmi_set_online(struct ofono_modem *modem, ofono_bool_t online, static void qrtrqmi_pre_sim(struct ofono_modem *modem) { struct qrtrqmi_data *data = ofono_modem_get_data(modem); - struct qmi_device *node = data->node; + struct qmi_qrtr_node *node = data->node; struct qmi_service *voice; DBG("%p", modem); @@ -363,7 +363,7 @@ static void setup_gprs(struct ofono_modem *modem) static void qrtrqmi_post_sim(struct ofono_modem *modem) { struct qrtrqmi_data *data = ofono_modem_get_data(modem); - struct qmi_device *node = data->node; + struct qmi_qrtr_node *node = data->node; struct qmi_service *wms; DBG("%p", modem); @@ -394,7 +394,7 @@ static void qrtrqmi_post_sim(struct ofono_modem *modem) static void qrtrqmi_post_online(struct ofono_modem *modem) { struct qrtrqmi_data *data = ofono_modem_get_data(modem); - struct qmi_device *node = data->node; + struct qmi_qrtr_node *node = data->node; DBG("%p", modem); diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 12fab71ba271..2ff981391849 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -32,7 +32,7 @@ struct test_info { int service_fds[TEST_SERVICE_COUNT]; - struct qmi_device *node; + struct qmi_qrtr_node *node; struct l_timeout *timeout; /* Data sent to our test service */ From patchwork Thu Jun 20 14:51:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705664 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD4991AE85F for ; Thu, 20 Jun 2024 14:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895135; cv=none; b=t/h2r94tsGKt23LG1/XEnpJbc5MILLdsSaxA5dWX8noN+Mepiyl6NsuMdp0ItVvhcJ8X1TGs180b28G4fNiOv25UNkSyiofDqOOCNzwMBupe89DAngFC6B6d7aQR5Anh+MOLEx7EFgsCrhmP0mbQWU6XZ6ayyfP+VfBwNvtm5O4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895135; c=relaxed/simple; bh=Pi2H5lcgUBz/wFF+rbHv7QL8yhksrdPM0eJW8AZvD0A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CnNk1LHTgpR7+Jk8lVRmZKP51WgM6JOAZWNZDxwQX0m26iMdjYbY0foB2Eb6c4dRyXQlvgo2h6xVJbLw0iPNpEaOR2ORtw3wJVwkjQH8DH+977V9cS+AGervHDOF6DzIOCxJ/0QDH+Tr+jAYf3jpuOv0fqKzZ0mkKF+l4cyhDSc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=O7iF0dbs; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="O7iF0dbs" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3d2469e797fso472257b6e.0 for ; Thu, 20 Jun 2024 07:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895132; x=1719499932; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+1uARSvSci0bypKfsDPhFVwggcZ/HwJ+tRt+gbS2N5E=; b=O7iF0dbsZYpeXScdGL0JyS7tuT0k4BJI6Z9W/5kwkqKuYoVznMx1Ikm6bi7bwj5a7R 5pJ3k5hcmsnAdcFkeViLFUCKeA0Okl/K64nn5NGKMWiWsivr93cwHHECActUP+ZGzxq4 ov6yFYi958bK5fMrIOW9iVt3uCU51x2j1tzCj/3iS2L/pusIPhWu/SRPSTg8bRT2YUY6 ip8wG241w2AY//7sCg7FzlkvyYbJURjaZKBPhSU+7nwCS6C/9wSuPaBtL0qXAjNKNW3C JQ6SHIlYeR965m6xnSJ3m86YUNiy4S3yNkcBy5u/2EF4mPgHsbdF0wzxZNFlGJPlJOuN 5sPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895132; x=1719499932; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+1uARSvSci0bypKfsDPhFVwggcZ/HwJ+tRt+gbS2N5E=; b=bbFAgmar+q9cZDxx4jd4X+pR7ViamxjoNuVYjf2EDE/yjD+B2Oj3mjeuR8JadNWI0r c6MsVjochiNG1aAm/9Wsfglin3F4yzHo3seHGjS+gFdt/t9/O0xcOKKE2OcVCezNvOTj gtvYRUoIg60SMg6w4ZpCUnTf8b/umxcIBcxciMSo5ResFjo+WSZ6pR0FAW5/4dTqtiSG 5Xfq0BdjLJAcQhVpOa6C+7e3C1iJvpBOBnAQUIdufh8DZ9Gsea+/lST75wodM6wSW9FI xwcnXYCpyzXsAtTZH5//GVtYFxLRYlqwZE9bCRY4Ww1Gt+b72U1TdRK8BDvmIni4innf fXxw== X-Gm-Message-State: AOJu0YwN4uS66pEtVdIgW2ZKUeS0u9zyCo0i24p9irjN0FMUr6B8K8wa YwzwSNZvwcGUh5Jgpa9uXoH/UX48dNYfP5iADsZ6oRmL7taCJalQUBBgng== X-Google-Smtp-Source: AGHT+IEEzUW1jn/wjootxG5caKO2ClGXxBzD5uB5RoJ0o+1wDuEuwV+PKtwrrcQyYje1GAwIjsDLOg== X-Received: by 2002:a05:6808:2109:b0:3d5:2ab9:9db2 with SMTP id 5614622812f47-3d52ab9a134mr730535b6e.19.1718895132591; Thu, 20 Jun 2024 07:52:12 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:12 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 24/33] qmi: Move expected data format handling into gobi Date: Thu, 20 Jun 2024 09:51:11 -0500 Message-ID: <20240620145139.1135899-24-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The expected data format logic inside qmi_device was specific to the qmi_wwan driver used for USB QMI (QMUX) devices. Move it to the gobi modem driver that manages such devices. The code is greatly simplified since 'gobi' knows about the network interface name directly. --- drivers/qmimodem/qmi.c | 197 ----------------------------------------- drivers/qmimodem/qmi.h | 11 --- plugins/gobi.c | 67 +++++++++----- 3 files changed, 47 insertions(+), 228 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 4dba8186c09d..306ca6092e5c 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1028,203 +1028,6 @@ int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, return device->ops->shutdown(device, func, user_data, destroy); } -static bool get_device_file_name(struct qmi_device *device, - char *file_name, int size) -{ - pid_t pid; - char temp[100]; - ssize_t result; - int fd = l_io_get_fd(device->io); - - if (size <= 0) - return false; - - pid = getpid(); - - snprintf(temp, 100, "/proc/%d/fd/%d", (int) pid, fd); - temp[99] = 0; - - result = readlink(temp, file_name, size - 1); - - if (result == -1 || result >= size - 1) { - DBG("Error %d in readlink", errno); - return false; - } - - file_name[result] = 0; - - return true; -} - -static char *get_first_dir_in_directory(char *dir_path) -{ - DIR *dir; - struct dirent *dir_entry; - char *dir_name = NULL; - - dir = opendir(dir_path); - - if (!dir) - return NULL; - - dir_entry = readdir(dir); - - while ((dir_entry != NULL)) { - if (dir_entry->d_type == DT_DIR && - strcmp(dir_entry->d_name, ".") != 0 && - strcmp(dir_entry->d_name, "..") != 0) { - dir_name = l_strdup(dir_entry->d_name); - break; - } - - dir_entry = readdir(dir); - } - - closedir(dir); - return dir_name; -} - -static char *get_device_interface(struct qmi_device *device) -{ - char * const driver_names[] = { "usbmisc", "usb" }; - unsigned int i; - char file_path[PATH_MAX]; - const char *file_name; - char *interface = NULL; - - if (!get_device_file_name(device, file_path, sizeof(file_path))) - return NULL; - - file_name = l_basename(file_path); - - for (i = 0; i < L_ARRAY_SIZE(driver_names) && !interface; i++) { - char *sysfs_path; - - sysfs_path = l_strdup_printf("/sys/class/%s/%s/device/net/", - driver_names[i], file_name); - interface = get_first_dir_in_directory(sysfs_path); - l_free(sysfs_path); - } - - return interface; -} - -enum qmi_device_expected_data_format qmi_device_get_expected_data_format( - struct qmi_device *device) -{ - char *sysfs_path = NULL; - char *interface = NULL; - int fd = -1; - char value; - enum qmi_device_expected_data_format expected = - QMI_DEVICE_EXPECTED_DATA_FORMAT_UNKNOWN; - - if (!device) - goto done; - - interface = get_device_interface(device); - - if (!interface) { - DBG("Error while getting interface name"); - goto done; - } - - /* Build sysfs file path and open it */ - sysfs_path = l_strdup_printf("/sys/class/net/%s/qmi/raw_ip", interface); - - fd = open(sysfs_path, O_RDONLY); - if (fd < 0) { - /* maybe not supported by kernel */ - DBG("Error %d in open(%s)", errno, sysfs_path); - goto done; - } - - if (read(fd, &value, 1) != 1) { - DBG("Error %d in read(%s)", errno, sysfs_path); - goto done; - } - - if (value == 'Y') - expected = QMI_DEVICE_EXPECTED_DATA_FORMAT_RAW_IP; - else if (value == 'N') - expected = QMI_DEVICE_EXPECTED_DATA_FORMAT_802_3; - else - DBG("Unexpected sysfs file contents"); - -done: - if (fd >= 0) - close(fd); - - if (sysfs_path) - l_free(sysfs_path); - - if (interface) - l_free(interface); - - return expected; -} - -bool qmi_device_set_expected_data_format(struct qmi_device *device, - enum qmi_device_expected_data_format format) -{ - bool res = false; - char *sysfs_path = NULL; - char *interface = NULL; - int fd = -1; - char value; - - if (!device) - goto done; - - switch (format) { - case QMI_DEVICE_EXPECTED_DATA_FORMAT_802_3: - value = 'N'; - break; - case QMI_DEVICE_EXPECTED_DATA_FORMAT_RAW_IP: - value = 'Y'; - break; - default: - DBG("Unhandled format: %d", (int) format); - goto done; - } - - interface = get_device_interface(device); - - if (!interface) { - DBG("Error while getting interface name"); - goto done; - } - - /* Build sysfs file path and open it */ - sysfs_path = l_strdup_printf("/sys/class/net/%s/qmi/raw_ip", interface); - - fd = open(sysfs_path, O_WRONLY); - if (fd < 0) { - /* maybe not supported by kernel */ - DBG("Error %d in open(%s)", errno, sysfs_path); - goto done; - } - - if (write(fd, &value, 1) != 1) { - DBG("Error %d in write(%s)", errno, sysfs_path); - goto done; - } - - res = true; - -done: - if (fd >= 0) - close(fd); - - if (sysfs_path) - l_free(sysfs_path); - - if (interface) - l_free(interface); - - return res; -} - static int qmi_device_qmux_write(struct qmi_device *device, struct qmi_request *req) { diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 6e6fc6912622..1158600989c5 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -41,12 +41,6 @@ #define QMI_SERVICE_RMS 225 /* Remote management service */ #define QMI_SERVICE_OMA 226 /* OMA device management service */ -enum qmi_device_expected_data_format { - QMI_DEVICE_EXPECTED_DATA_FORMAT_UNKNOWN, - QMI_DEVICE_EXPECTED_DATA_FORMAT_802_3, - QMI_DEVICE_EXPECTED_DATA_FORMAT_RAW_IP, -}; - enum qmi_data_endpoint_type { QMI_DATA_ENDPOINT_TYPE_UNKNOWN = 0x00, QMI_DATA_ENDPOINT_TYPE_HSIC = 0x01, @@ -89,11 +83,6 @@ int qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); -enum qmi_device_expected_data_format qmi_device_get_expected_data_format( - struct qmi_device *device); -bool qmi_device_set_expected_data_format(struct qmi_device *device, - enum qmi_device_expected_data_format format); - struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node); void qmi_qrtr_node_free(struct qmi_qrtr_node *node); void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node, diff --git a/plugins/gobi.c b/plugins/gobi.c index 46f4d50e2ee1..3f337efe7b06 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -76,12 +76,13 @@ struct gobi_data { unsigned long features; unsigned int discover_attempts; uint8_t oper_mode; - bool using_mux; - bool using_qmi_wwan_q; int main_net_ifindex; char main_net_name[IFNAMSIZ]; uint32_t max_aggregation_size; uint32_t set_powered_id; + bool using_mux : 1; + bool using_qmi_wwan : 1; + bool using_qmi_wwan_q : 1; }; static void gobi_debug(const char *str, void *user_data) @@ -134,6 +135,8 @@ static int gobi_probe(struct ofono_modem *modem) if (!strcmp(if_driver, "qmi_wwan_q")) data->using_qmi_wwan_q = true; + else if (!strcmp(if_driver, "qmi_wwan")) + data->using_qmi_wwan = true; data->main_net_ifindex = ofono_modem_get_integer(modem, "NetworkInterfaceIndex"); @@ -332,12 +335,49 @@ error: shutdown_device(modem); } +static void setup_qmi_wwan(const char *interface, uint32_t llproto) +{ + char raw_ip; + char new_raw_ip; + + if (l_sysctl_get_char(&raw_ip, "/sys/class/net/%s/qmi/raw_ip", + interface) < 0) { + DBG("Couldn't query raw_ip setting"); + return; + } + + if (raw_ip != 'Y' && raw_ip != 'N') { + DBG("Unexpected value: %c", raw_ip); + return; + } + + switch (llproto) { + case QMI_WDA_DATA_LINK_PROTOCOL_802_3: + new_raw_ip = 'N'; + break; + case QMI_WDA_DATA_LINK_PROTOCOL_RAW_IP: + new_raw_ip = 'Y'; + break; + default: + DBG("Unknown WDA Link Protocol"); + return; + } + + DBG("raw_ip: %c, want: %c", raw_ip, new_raw_ip); + + if (raw_ip == new_raw_ip) + return; + + if (l_sysctl_set_char(new_raw_ip, "/sys/class/net/%s/qmi/raw_ip", + interface) < 0) + DBG("Fail to set raw_ip to %c", new_raw_ip); +} + static void get_data_format_cb(struct qmi_result *result, void *user_data) { struct ofono_modem *modem = user_data; struct gobi_data *data = ofono_modem_get_data(modem); uint32_t llproto; - enum qmi_device_expected_data_format expected_llproto; DBG(""); @@ -347,24 +387,11 @@ static void get_data_format_cb(struct qmi_result *result, void *user_data) if (!qmi_result_get_uint32(result, QMI_WDA_LL_PROTOCOL, &llproto)) goto done; - expected_llproto = qmi_device_get_expected_data_format(data->device); + if (data->using_qmi_wwan) { + const char *interface = + ofono_modem_get_string(modem, "NetworkInterface"); - if ((llproto == QMI_WDA_DATA_LINK_PROTOCOL_802_3) && - (expected_llproto == - QMI_DEVICE_EXPECTED_DATA_FORMAT_RAW_IP)) { - if (!qmi_device_set_expected_data_format(data->device, - QMI_DEVICE_EXPECTED_DATA_FORMAT_802_3)) - DBG("Fail to set expected data to 802.3"); - else - DBG("expected data set to 802.3"); - } else if ((llproto == QMI_WDA_DATA_LINK_PROTOCOL_RAW_IP) && - (expected_llproto == - QMI_DEVICE_EXPECTED_DATA_FORMAT_802_3)) { - if (!qmi_device_set_expected_data_format(data->device, - QMI_DEVICE_EXPECTED_DATA_FORMAT_RAW_IP)) - DBG("Fail to set expected data to raw-ip"); - else - DBG("expected data set to raw-ip"); + setup_qmi_wwan(interface, llproto); } done: From patchwork Thu Jun 20 14:51:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705665 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6C641AE84E for ; Thu, 20 Jun 2024 14:52:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895136; cv=none; b=kQMKNweStlTGdywHMSg+nqRiWoBLwg3ND2HeIkNVoBG6LYGz730hMc4YALSv/iDQNp6I+HdsqkMfsZZn5+Obyq9doneqgROUjijwUoip+fnKs6uLXSjtt4nH9jTVEV2ZX0ra4CMFmjkIXCFUWLpZuX/gHkfm0bzje2QdtpeCYQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895136; c=relaxed/simple; bh=Gyp57V3skZgzDcei9QpH7NqtJEclIyGb7HWcUxCryZs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gnRqTlfMQvpj2m9F/VeC06qvSfn3y0epByUMAHExARetfYa4gy5L/teMcT/4Kjw99+qACJPyh/y8kQsxd/pKoKyW/zuefjlwLVFEslOJbXgohCihhfFhyKf0MGt8Cvs9DaOdt1FkpRclfpnnwvJDYUu+aqTTx6HfxmDmjoDSUJI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C/EjCuFj; arc=none smtp.client-ip=209.85.167.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C/EjCuFj" Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3d513eb6e56so470391b6e.0 for ; Thu, 20 Jun 2024 07:52:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895134; x=1719499934; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tAll7yBwVJl+NkpULUgoA2LqZoED9iWB5R2jE13yaZ0=; b=C/EjCuFjvYkyaaAIJBw2sz77iiZI4okbS1xhg4GIyV4S4Le5BRL0zP4YD77bKj3C/k X+kDuA/i+Fl1YwFoPb1LXGmV+c19rEqYgjFfx1My3k0+WrZ6W947QrRmnodsFTRiDF9l i0TJPp70Zk+t4jXOQ2cmkacikMr8KBmqOdf1eHjunBLafZPlywBYVDDoSvuIrlC11csF HaTVQCL2g94z4eTA17TBAuB0C9XBGVyjQ88tMpv1VKiUaoAOFbhK5TNq/1atNODorMIq uRhBL4zB/cyt/0cMLrhcDySqnv3qjD5X78PtKEBl1GfmnYmRiZBjGY/wCnHCtBQdyX+g shVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895134; x=1719499934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tAll7yBwVJl+NkpULUgoA2LqZoED9iWB5R2jE13yaZ0=; b=Hw0txIKbsNYT5xYavxRSxi1jek0stcMUpjRIELGNkNHgMC6HCDZc/QolPg4KC7cntl 8cTg8v/+RcHGUJgmtllAU+DMi57/s0Cf9O8pJlmpgkhu2DunVKa7XzLSElk6+hdvrVft 2+wJqwyiqlEWjqW4wtRcMlWp4eCNrek2hB9umC1mjsmxa5mWKmhfqBOgSUa0a8VCCUMW cV+2K0QHbn16dAETpnwm7CTSEzJi71NVmEvlLl4uR38iinyyvf+qBQKSao7uZIVpDhme KQDdBuBoiPIB7BEYDnuDNGyEWi5VuxNQ1XaeWkvt99LAn/V/f9CJTyxuUOCzLq048SA3 GHVQ== X-Gm-Message-State: AOJu0Yw74p9oJfsl19A4uaGkLaXfboHKLy6GHWxnZGqBU7BwSHtxjgKG x4ElalanXHqvEtAd2winZ0mnVfgPfwLUxfW7C+zpB1xWg/sFwBXpWgzITg== X-Google-Smtp-Source: AGHT+IG2X3TATO9Sns9zE3ezAlYrJ0bgQndikbUw9gczWa+DIANz30pVQse2L+bugz5l+O9D9roELQ== X-Received: by 2002:a05:6808:1b26:b0:3d2:49b2:c010 with SMTP id 5614622812f47-3d51b977bc9mr6174941b6e.10.1718895133519; Thu, 20 Jun 2024 07:52:13 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:13 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 25/33] qmi: Rename and refactor qmi_device_discover Date: Thu, 20 Jun 2024 09:51:12 -0500 Message-ID: <20240620145139.1135899-25-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Refactor the discover implementation to not use struct discover_data or the discovery queue. Use a dedicated 'discover' structure instead. Remove the now unused discover() method from qmi_device_ops. --- drivers/qmimodem/qmi.c | 153 ++++++++++++++++------------------------- drivers/qmimodem/qmi.h | 7 +- plugins/gobi.c | 5 +- 3 files changed, 66 insertions(+), 99 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 306ca6092e5c..2aebb197fac0 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -65,9 +65,6 @@ struct qmi_request { struct qmi_device_ops { int (*write)(struct qmi_device *device, struct qmi_request *req); - int (*discover)(struct qmi_device *device, - qmi_discover_func_t discover_func, - void *user, qmi_destroy_func_t destroy); void (*client_release)(struct qmi_device *device, uint16_t service_type, uint16_t client_id); int (*shutdown)(struct qmi_device *device, @@ -105,6 +102,13 @@ struct qmi_device_qmux { qmi_destroy_func_t shutdown_destroy; struct l_idle *shutdown_idle; unsigned int release_users; + struct { + qmi_qmux_device_discover_func_t func; + void *user_data; + qmi_destroy_func_t destroy; + struct l_timeout *timeout; + uint16_t tid; + } discover; uint8_t next_control_tid; struct l_queue *control_queue; bool shutting_down : 1; @@ -981,41 +985,6 @@ bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type) return __find_service_info_by_type(device, type); } -struct discover_data { - struct discovery super; - struct qmi_device *device; - qmi_discover_func_t func; - void *user_data; - qmi_destroy_func_t destroy; - uint16_t tid; - struct l_timeout *timeout; -}; - -static void discover_data_free(void *user_data) -{ - struct discover_data *data = user_data; - - if (data->timeout) - l_timeout_remove(data->timeout); - - if (data->destroy) - data->destroy(data->user_data); - - l_free(data); -} - -int qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, - void *user_data, qmi_destroy_func_t destroy) -{ - if (!device) - return -EINVAL; - - if (!device->ops->discover) - return -ENOTSUP; - - return device->ops->discover(device, func, user_data, destroy); -} - int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy) { @@ -1255,37 +1224,30 @@ static struct qmi_request *find_control_request(struct qmi_device_qmux *qmux, return req; } -static void qmux_sync_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void __qmux_discovery_finished(struct qmi_device_qmux *qmux) { - struct discover_data *data = user_data; + l_timeout_remove(qmux->discover.timeout); + qmux->discover.func(qmux->discover.user_data); - DISCOVERY_DONE(data, data->user_data); + if (qmux->discover.destroy) + qmux->discover.destroy(qmux->discover.user_data); + + memset(&qmux->discover, 0, sizeof(qmux->discover)); } -/* sync will release all previous clients */ -static bool qmi_device_qmux_sync(struct qmi_device_qmux *qmux, - struct discover_data *data) +static void qmux_sync_callback(uint16_t message, uint16_t length, + const void *buffer, void *user_data) { - struct qmi_request *req; - - DEBUG(&qmux->debug, "Sending sync to reset QMI"); - - req = __control_request_alloc(QMI_CTL_SYNC, NULL, 0, - qmux_sync_callback, data); - - __ctl_request_submit(qmux, req); + struct qmi_device_qmux *qmux = user_data; - return true; + __qmux_discovery_finished(qmux); } static void qmux_discover_callback(uint16_t message, uint16_t length, const void *buffer, void *user_data) { - struct discover_data *data = user_data; - struct qmi_device *device = data->device; - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_device_qmux *qmux = user_data; + struct qmi_device *device = &qmux->super; const struct qmi_result_code *result_code; const struct qmi_service_list *service_list; const void *ptr; @@ -1344,69 +1306,68 @@ static void qmux_discover_callback(uint16_t message, uint16_t length, DEBUG(&qmux->debug, "version string: %s", qmux->version_str); done: - /* if the device support the QMI call SYNC over the CTL interface */ + /* + * If the device support the QMI call SYNC over the CTL interface, + * invoke it to reset the state, including release all previously + * allocated clients + */ if ((qmux->control_major == 1 && qmux->control_minor >= 5) || qmux->control_major > 1) { - qmi_device_qmux_sync(qmux, data); + struct qmi_request *req = + __control_request_alloc(QMI_CTL_SYNC, NULL, 0, + qmux_sync_callback, qmux); + + DEBUG(&qmux->debug, "Sending sync to reset QMI"); + qmux->discover.tid = __ctl_request_submit(qmux, req); return; } - DISCOVERY_DONE(data, data->user_data); + __qmux_discovery_finished(qmux); } static void qmux_discover_reply_timeout(struct l_timeout *timeout, void *user_data) { - struct discover_data *data = user_data; - struct qmi_device *device = data->device; + struct qmi_device *device = user_data; struct qmi_device_qmux *qmux = l_container_of(device, struct qmi_device_qmux, super); struct qmi_request *req; - l_timeout_remove(data->timeout); - data->timeout = NULL; - /* remove request from queues */ - req = find_control_request(qmux, data->tid); - - DISCOVERY_DONE(data, data->user_data); - + req = find_control_request(qmux, qmux->discover.tid); if (req) __request_free(req); + + __qmux_discovery_finished(qmux); } -static int qmi_device_qmux_discover(struct qmi_device *device, - qmi_discover_func_t func, - void *user_data, - qmi_destroy_func_t destroy) +int qmi_qmux_device_discover(struct qmi_device *device, + qmi_qmux_device_discover_func_t func, + void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); - struct discover_data *data; + struct qmi_device_qmux *qmux; struct qmi_request *req; - DEBUG(&qmux->debug, "device %p", qmux); + if (!device) + return -EINVAL; - if (l_queue_length(device->service_infos) > 0) - return -EALREADY; + qmux = l_container_of(device, struct qmi_device_qmux, super); - data = l_new(struct discover_data, 1); + DEBUG(&qmux->debug, "device %p", qmux); - data->super.destroy = discover_data_free; - data->device = device; - data->func = func; - data->user_data = user_data; - data->destroy = destroy; + if (l_queue_length(device->service_infos) > 0 || qmux->discover.tid) + return -EALREADY; req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0, - qmux_discover_callback, data); - - data->tid = __ctl_request_submit(qmux, req); - data->timeout = l_timeout_create(DISCOVER_TIMEOUT, - qmux_discover_reply_timeout, - data, NULL); + qmux_discover_callback, qmux); - __qmi_device_discovery_started(device, &data->super); + qmux->discover.func = func; + qmux->discover.user_data = user_data; + qmux->discover.destroy = destroy; + qmux->discover.tid = __ctl_request_submit(qmux, req); + qmux->discover.timeout = + l_timeout_create(DISCOVER_TIMEOUT, qmux_discover_reply_timeout, + qmux, NULL); return 0; } @@ -1593,6 +1554,11 @@ static void __qmux_device_free(struct qmi_device_qmux *qmux) { l_queue_destroy(qmux->control_queue, __request_free); + l_timeout_remove(qmux->discover.timeout); + + if (qmux->discover.destroy) + qmux->discover.destroy(qmux->discover.user_data); + if (qmux->shutdown_idle) l_idle_remove(qmux->shutdown_idle); @@ -1658,7 +1624,6 @@ static int qmi_device_qmux_shutdown(struct qmi_device *device, static const struct qmi_device_ops qmux_ops = { .write = qmi_device_qmux_write, - .discover = qmi_device_qmux_discover, .client_release = qmi_device_qmux_client_release, .shutdown = qmi_device_qmux_shutdown, }; diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 1158600989c5..152ebf1eb14b 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -58,7 +58,7 @@ struct qmi_service; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); typedef void (*qmi_shutdown_func_t)(void *user_data); -typedef void (*qmi_discover_func_t)(void *user_data); +typedef void (*qmi_qmux_device_discover_func_t)(void *user_data); typedef void (*qmi_qmux_device_create_client_func_t)(struct qmi_service *, void *user_data); typedef void (*qmi_qrtr_node_lookup_done_func_t)(void *); @@ -69,6 +69,9 @@ struct qmi_device *qmi_qmux_device_new(const char *device); void qmi_qmux_device_free(struct qmi_device *device); void qmi_qmux_device_set_debug(struct qmi_device *device, qmi_debug_func_t func, void *user_data); +int qmi_qmux_device_discover(struct qmi_device *device, + qmi_qmux_device_discover_func_t func, + void *user_data, qmi_destroy_func_t destroy); bool qmi_qmux_device_create_client(struct qmi_device *device, uint16_t service_type, qmi_qmux_device_create_client_func_t func, @@ -78,8 +81,6 @@ bool qmi_qmux_device_get_service_version(struct qmi_device *device, uint16_t *major, uint16_t *minor); bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type); -int qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func, - void *user_data, qmi_destroy_func_t destroy); int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); diff --git a/plugins/gobi.c b/plugins/gobi.c index 3f337efe7b06..e7fe520a6854 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -499,7 +499,8 @@ static void discover_cb(void *user_data) if (!(data->features & GOBI_DMS)) { if (++data->discover_attempts < 3 && - !qmi_device_discover(data->device, discover_cb, + !qmi_qmux_device_discover(data->device, + discover_cb, modem, NULL)) return; @@ -544,7 +545,7 @@ static int gobi_enable(struct ofono_modem *modem) if (getenv("OFONO_QMI_DEBUG")) qmi_qmux_device_set_debug(data->device, gobi_debug, "QMI: "); - r = qmi_device_discover(data->device, discover_cb, modem, NULL); + r = qmi_qmux_device_discover(data->device, discover_cb, modem, NULL); if (!r) return -EINPROGRESS; From patchwork Thu Jun 20 14:51:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705666 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5FFE1AE85F for ; Thu, 20 Jun 2024 14:52:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895137; cv=none; b=kx9mHnL3XdXErVa8RHB7odzr/Knis6YAAhPAalNKzXL01/+Z8QtD7S8JM5HYeQBL7dNNvhE4q8geh3jPDWLIT8gHidvTwKWBNpg2yXviu2ozmRHQ0FKTKa6CMOIqtSvucn3kKf1oziKVUZ4CmBpKNRXOWpvt8CfS4tRrEmsf1eE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895137; c=relaxed/simple; bh=HhVe4YHfvg9uiv8dcxLywUGSRQWtX+zv1IwuworJD58=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lDoJH0onqNQQvuThM1S15H7hMCJzwB8ery4FX+E4ZbIlQD3lvfDZYTusfhcvCcvy5MkQr+7besyq5v/dUss3BBExs+PTYsIuACOUSvXJPZEyLEuxTv5YZeTpTi8IuMPa01w+YN1fpdAyKZk/oGQWK9GOt7Pi7hX3JP/w+XUAaTM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jMorn2RF; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jMorn2RF" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3d227b1f4f0so491411b6e.3 for ; Thu, 20 Jun 2024 07:52:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895134; x=1719499934; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0q86Tpfbx3ChOKNcPVWASWmUl/ZE4eKlZiZga3fsLK0=; b=jMorn2RFSIwDNcMAG5wmuqVFh/gvjspriwbUovNDBhV/cx+LMSH1ITh1FXLDpp4nk7 b/hrzPve3MhX6VK9ghe46h5cj7eDu5CthNd95XM790aUCC7i4BGqQqihVvKM+QkcN2qW rKEpnOvxpEJ1gYz0BdB/mi/uKUiSnppG1inmvnYC1I7qM5UYNDX3CqhPVHQJWqGM6225 eLaecymNQl1bnZv9olFmlNbX9wKS5XbZNQDhk9jaPi4O7LMz7Hh8ncs8eLoCsNUgeHMa CohpeHfvyIGTpSC7xaerS4DGuAD1/z3rO9Q9WrVpRgriDNI4vLESVMS39piYNmP1l0Ty kHmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895134; x=1719499934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0q86Tpfbx3ChOKNcPVWASWmUl/ZE4eKlZiZga3fsLK0=; b=Qp8dWRjffGq78EXuzMXa4TGrQbDSvPnI4EoqyT4sCtYp514tR/fFoehh0NPb1wfZYx j1UAVqBOQgvBBawYJcjxhIWiIwyn2xq5v7rRaWreeTbFkyuT40/DGapQuEZYROV91num 59V166M5YnklsB3aP2H7q2Xh4VIPI5UObm1pUkoa7+HsaaXcIl2W2WyKPbu2U7fHzVwu PxezaYHSl8L54Xtz8Zlrao0Vue+zIOSZqzx6F8JtJa+vplptdAsQ5ABSyYuAjEISGI0u EWYQZz72OxfBwX/CHseGiHLLg1nmeVx+edveAO32v/lhCKgYhxxcBNX4zH02xs5XmEx2 G2Sg== X-Gm-Message-State: AOJu0YzCLr/NtWCt8RL+pb4x8DyO/GAQmY+J+0EmG96TTV3EAC2g1y96 JYDz4Lfly+C9c5Y0zOynArz8FTxr3s2HcvVZgTcCLM3l+zDosWFR5d22Zg== X-Google-Smtp-Source: AGHT+IHBJaBXUsj3wy9hsaWedNnQFlhxc/akRQ1oM+VihpfXLf9/Fm7zg5CRQqW3jzKmPkRdu1ybSA== X-Received: by 2002:a05:6808:1381:b0:3d2:283c:e51b with SMTP id 5614622812f47-3d51baeef5emr5908216b6e.52.1718895134362; Thu, 20 Jun 2024 07:52:14 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:13 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 26/33] qmi: Rename qmi_device_shutdown Date: Thu, 20 Jun 2024 09:51:13 -0500 Message-ID: <20240620145139.1135899-26-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Rename qmi_device_shutdown to qmi_qmux_device_shutdown to make it clear that only the QMUX implementation requires this operation. Remove the shutdown() method from qmi_device_ops since it is no longer needed. While here, move shutdown operation related members to a dedicated 'shutdown' structure inside qmi_device_qmux. This makes it more consistent with how discovery related members are setup. --- drivers/qmimodem/qmi.c | 75 ++++++++++++++++++------------------------ drivers/qmimodem/qmi.h | 6 ++-- plugins/gobi.c | 2 +- 3 files changed, 36 insertions(+), 47 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 2aebb197fac0..2844ea9f06f6 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -67,9 +67,6 @@ struct qmi_device_ops { int (*write)(struct qmi_device *device, struct qmi_request *req); void (*client_release)(struct qmi_device *device, uint16_t service_type, uint16_t client_id); - int (*shutdown)(struct qmi_device *device, - qmi_shutdown_func_t shutdown_func, - void *user, qmi_destroy_func_t destroy); }; struct debug_data { @@ -97,11 +94,6 @@ struct qmi_device_qmux { uint16_t control_minor; char *version_str; struct debug_data debug; - qmi_shutdown_func_t shutdown_func; - void *shutdown_user_data; - qmi_destroy_func_t shutdown_destroy; - struct l_idle *shutdown_idle; - unsigned int release_users; struct { qmi_qmux_device_discover_func_t func; void *user_data; @@ -109,6 +101,13 @@ struct qmi_device_qmux { struct l_timeout *timeout; uint16_t tid; } discover; + struct { + qmi_qmux_device_shutdown_func_t func; + void *user_data; + qmi_destroy_func_t destroy; + struct l_idle *idle; + unsigned int release_users; + } shutdown; uint8_t next_control_tid; struct l_queue *control_queue; bool shutting_down : 1; @@ -985,18 +984,6 @@ bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type) return __find_service_info_by_type(device, type); } -int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, - void *user_data, qmi_destroy_func_t destroy) -{ - if (!device) - return -EINVAL; - - if (!device->ops->shutdown) - return -ENOTSUP; - - return device->ops->shutdown(device, func, user_data, destroy); -} - static int qmi_device_qmux_write(struct qmi_device *device, struct qmi_request *req) { @@ -1529,7 +1516,7 @@ static void qmux_client_release_callback(uint16_t message, uint16_t length, { struct qmi_device_qmux *qmux = user_data; - qmux->release_users--; + qmux->shutdown.release_users--; } static void qmi_device_qmux_client_release(struct qmi_device *device, @@ -1541,7 +1528,7 @@ static void qmi_device_qmux_client_release(struct qmi_device *device, uint8_t release_req[] = { 0x01, 0x02, 0x00, service_type, client_id }; struct qmi_request *req; - qmux->release_users++; + qmux->shutdown.release_users++; req = __control_request_alloc(QMI_CTL_RELEASE_CLIENT_ID, release_req, sizeof(release_req), @@ -1559,8 +1546,8 @@ static void __qmux_device_free(struct qmi_device_qmux *qmux) if (qmux->discover.destroy) qmux->discover.destroy(qmux->discover.user_data); - if (qmux->shutdown_idle) - l_idle_remove(qmux->shutdown_idle); + if (qmux->shutdown.idle) + l_idle_remove(qmux->shutdown.idle); l_free(qmux->version_str); l_free(qmux); @@ -1570,10 +1557,10 @@ static void qmux_shutdown_destroy(void *user_data) { struct qmi_device_qmux *qmux = user_data; - if (qmux->shutdown_destroy) - qmux->shutdown_destroy(qmux->shutdown_user_data); + if (qmux->shutdown.destroy) + qmux->shutdown.destroy(qmux->shutdown.user_data); - qmux->shutdown_idle = NULL; + qmux->shutdown.idle = NULL; if (qmux->destroyed) __qmux_device_free(qmux); @@ -1583,41 +1570,45 @@ static void qmux_shutdown_callback(struct l_idle *idle, void *user_data) { struct qmi_device_qmux *qmux = user_data; - if (qmux->release_users > 0) + if (qmux->shutdown.release_users > 0) return; qmux->shutting_down = true; - if (qmux->shutdown_func) - qmux->shutdown_func(qmux->shutdown_user_data); + if (qmux->shutdown.func) + qmux->shutdown.func(qmux->shutdown.user_data); qmux->shutting_down = false; - l_idle_remove(qmux->shutdown_idle); + l_idle_remove(qmux->shutdown.idle); } -static int qmi_device_qmux_shutdown(struct qmi_device *device, - qmi_shutdown_func_t func, +int qmi_qmux_device_shutdown(struct qmi_device *device, + qmi_qmux_device_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_device_qmux *qmux; + + if (!device) + return -EINVAL; + + qmux = l_container_of(device, struct qmi_device_qmux, super); - if (qmux->shutdown_idle) + if (qmux->shutdown.idle) return -EALREADY; DEBUG(&qmux->debug, "device %p", &qmux); - qmux->shutdown_idle = l_idle_create(qmux_shutdown_callback, qmux, + qmux->shutdown.idle = l_idle_create(qmux_shutdown_callback, qmux, qmux_shutdown_destroy); - if (!qmux->shutdown_idle) + if (!qmux->shutdown.idle) return -EIO; - qmux->shutdown_func = func; - qmux->shutdown_user_data = user_data; - qmux->shutdown_destroy = destroy; + qmux->shutdown.func = func; + qmux->shutdown.user_data = user_data; + qmux->shutdown.destroy = destroy; return 0; } @@ -1625,7 +1616,6 @@ static int qmi_device_qmux_shutdown(struct qmi_device *device, static const struct qmi_device_ops qmux_ops = { .write = qmi_device_qmux_write, .client_release = qmi_device_qmux_client_release, - .shutdown = qmi_device_qmux_shutdown, }; struct qmi_device *qmi_qmux_device_new(const char *device) @@ -1889,7 +1879,6 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) static const struct qmi_device_ops qrtr_ops = { .write = qmi_qrtr_node_write, .client_release = NULL, - .shutdown = NULL, }; struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node) diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 152ebf1eb14b..64eebc27c17c 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -57,10 +57,10 @@ struct qmi_result; struct qmi_service; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); -typedef void (*qmi_shutdown_func_t)(void *user_data); typedef void (*qmi_qmux_device_discover_func_t)(void *user_data); typedef void (*qmi_qmux_device_create_client_func_t)(struct qmi_service *, void *user_data); +typedef void (*qmi_qmux_device_shutdown_func_t)(void *user_data); typedef void (*qmi_qrtr_node_lookup_done_func_t)(void *); typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); @@ -80,8 +80,8 @@ bool qmi_qmux_device_get_service_version(struct qmi_device *device, uint16_t type, uint16_t *major, uint16_t *minor); bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type); - -int qmi_device_shutdown(struct qmi_device *device, qmi_shutdown_func_t func, +int qmi_qmux_device_shutdown(struct qmi_device *device, + qmi_qmux_device_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node); diff --git a/plugins/gobi.c b/plugins/gobi.c index e7fe520a6854..3676c130f614 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -234,7 +234,7 @@ static void shutdown_device(struct ofono_modem *modem) cleanup_services(data); - if (qmi_device_shutdown(data->device, shutdown_cb, modem, NULL) < 0) + if (qmi_qmux_device_shutdown(data->device, shutdown_cb, modem, NULL) < 0) shutdown_cb(modem); } From patchwork Thu Jun 20 14:51:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705667 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B6D61AE863 for ; Thu, 20 Jun 2024 14:52:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895137; cv=none; b=evQpbRhqaOjxq9y3k4VxnOhUvbpx28RHhLdlIM3BE8f3TyvZFBEo17jN5XMFXJOIVGt/jZcaklqMb/bbeYt+wvpyz8lGwiAS0qwIQCgswlvVM3o+HqXz+VAnr4MkvbwdSUMdSZkQQf3StpE4ov3oPhxuB/ZPuIoJT4MBJROaxuk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895137; c=relaxed/simple; bh=1ByNebelWl9f4YdnvJ3Bax8lqU/4oSH9sh6q4mjNkHU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dNSmktwbXjV7HyO4J0Ez8QYjsG9WU2AuPQlBxXSraNrvvOoNRYjUo3wI9Sf31fd57vL4xnEoz0wtXS2w+FHjQ34q1Sj+j9Js3v9ExxUHf8r8G33/IxS/joA0gd129CDxUgeitTxQC6oCRRvI2aQThlkmOz4pHdCFGhANenA+PTc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dTIPMGJj; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dTIPMGJj" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3d518cdb252so453356b6e.1 for ; Thu, 20 Jun 2024 07:52:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895135; x=1719499935; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=udO/L9DMI2zI7TIPMBxhylWJvX/iPlh3ntGUU1b17lg=; b=dTIPMGJjjTNuGZGw2ejLhxK8t8+T2qhqze0eKyQzwFvwaZznfjsG1ju2gmYwJmRLA/ 48MPdl9fo4HdxGfb9EXAQZWlf6PVJ8oeo24WfxLYPFQl8wHcI69KPe9hb/RSvx8jnfIb 83qDZhIN9IyggTm6PkFLAfu7NmS7lHOIcXkSs/o6UgjTJ0C+L/LDNWvoFppmD4/gTOq7 GOQRnjFC5P6JSJymq41I1ivnrqMWWq+tJAzbA6VhvF/nTNnqB30xXvrWZyyTW3i8JnKs iLICAtg6SIFIAvHOXWGWjbgkjVdaZcCxgzzm6LjN2Jqd1o7G8YBexh2XRes2g40BHUwe 5o/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895135; x=1719499935; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=udO/L9DMI2zI7TIPMBxhylWJvX/iPlh3ntGUU1b17lg=; b=GqnLESI6W5uhXYoo0lQBcfbhZhu2wKbvIi4+4n7RZqkQUpDVcKwKcO9c5q1furUvi3 4eKxR0SG24/3GszzwBJ2fLDdLKxUYkHXoYL2u7uNDb93rwHT2q9BaZvY3LBhrh7rvQiS n8teVqR7mFb3tFfJ+ctRjlBDPDpsbzcdp2HT5RC5mbfyAGr/6txgMvYWCqtMRDVTNM5N YNrV1R7XLPoLUgAmW8nbHLrGA5G+9TyQWtlUYaKKV04LIyrxZ4wjaLF/anVX367h28ih eNUpWhWuHFkdjHIICbq/5fYz4atfZpj9q8hQIA5N5Mj6McMbykDVi8pZoedFC9hIDtHQ bggA== X-Gm-Message-State: AOJu0YwZqVIgj3HxnTLiKgQ4Urw0jI3xMO2TuGbtLrumg/TvEavmbGVg uBuqMQw5EddtJ4XKqB36UkF4qyE2dUb3w8vXNc3MgBBdenw1ByFljBsbFw== X-Google-Smtp-Source: AGHT+IGzBaA7wjSFWQKTwTUY35e8tD/5tPScZcot7l8us2TtuSeU55Rm09mmIK4vmlC9qiVfPOPdEA== X-Received: by 2002:a05:6808:6542:b0:3d5:108a:5af3 with SMTP id 5614622812f47-3d51badd77dmr5516917b6e.56.1718895135133; Thu, 20 Jun 2024 07:52:15 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:14 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 27/33] qmi: Rename qmi_device_qmux to qmi_qmux_device Date: Thu, 20 Jun 2024 09:51:14 -0500 Message-ID: <20240620145139.1135899-27-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 76 +++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 2844ea9f06f6..0d67b07fa729 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -88,7 +88,7 @@ struct qmi_device { bool writer_active : 1; }; -struct qmi_device_qmux { +struct qmi_qmux_device { struct qmi_device super; uint16_t control_major; uint16_t control_minor; @@ -984,11 +984,11 @@ bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type) return __find_service_info_by_type(device, type); } -static int qmi_device_qmux_write(struct qmi_device *device, +static int qmi_qmux_device_write(struct qmi_device *device, struct qmi_request *req) { - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_qmux_device *qmux = + l_container_of(device, struct qmi_qmux_device, super); struct qmi_mux_hdr *hdr; ssize_t bytes_written; @@ -1012,7 +1012,7 @@ static int qmi_device_qmux_write(struct qmi_device *device, return 0; } -static void __rx_ctl_message(struct qmi_device_qmux *qmux, +static void __rx_ctl_message(struct qmi_qmux_device *qmux, uint8_t service_type, uint8_t client_id, const void *buf) { @@ -1049,7 +1049,7 @@ static void __rx_ctl_message(struct qmi_device_qmux *qmux, static bool received_qmux_data(struct l_io *io, void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; struct qmi_mux_hdr *hdr; unsigned char buf[2048]; ssize_t bytes_read; @@ -1138,7 +1138,7 @@ done: l_free(family); } -static uint8_t __ctl_request_submit(struct qmi_device_qmux *qmux, +static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, struct qmi_request *req) { struct qmi_control_hdr *hdr = @@ -1193,7 +1193,7 @@ static struct qmi_service *service_create(struct service_family *family) return service; } -static struct qmi_request *find_control_request(struct qmi_device_qmux *qmux, +static struct qmi_request *find_control_request(struct qmi_qmux_device *qmux, uint16_t tid) { struct qmi_request *req; @@ -1211,7 +1211,7 @@ static struct qmi_request *find_control_request(struct qmi_device_qmux *qmux, return req; } -static void __qmux_discovery_finished(struct qmi_device_qmux *qmux) +static void __qmux_discovery_finished(struct qmi_qmux_device *qmux) { l_timeout_remove(qmux->discover.timeout); qmux->discover.func(qmux->discover.user_data); @@ -1225,7 +1225,7 @@ static void __qmux_discovery_finished(struct qmi_device_qmux *qmux) static void qmux_sync_callback(uint16_t message, uint16_t length, const void *buffer, void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; __qmux_discovery_finished(qmux); } @@ -1233,7 +1233,7 @@ static void qmux_sync_callback(uint16_t message, uint16_t length, static void qmux_discover_callback(uint16_t message, uint16_t length, const void *buffer, void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; struct qmi_device *device = &qmux->super; const struct qmi_result_code *result_code; const struct qmi_service_list *service_list; @@ -1316,8 +1316,8 @@ static void qmux_discover_reply_timeout(struct l_timeout *timeout, void *user_data) { struct qmi_device *device = user_data; - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_qmux_device *qmux = + l_container_of(device, struct qmi_qmux_device, super); struct qmi_request *req; /* remove request from queues */ @@ -1332,13 +1332,13 @@ int qmi_qmux_device_discover(struct qmi_device *device, qmi_qmux_device_discover_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; struct qmi_request *req; if (!device) return -EINVAL; - qmux = l_container_of(device, struct qmi_device_qmux, super); + qmux = l_container_of(device, struct qmi_qmux_device, super); DEBUG(&qmux->debug, "device %p", qmux); @@ -1390,8 +1390,8 @@ static void qmux_client_create_timeout(struct l_timeout *timeout, { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_qmux_device *qmux = + l_container_of(device, struct qmi_qmux_device, super); struct qmi_request *req; DEBUG(&qmux->debug, ""); @@ -1412,8 +1412,8 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, { struct qmux_client_create_data *data = user_data; struct qmi_device *device = data->device; - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_qmux_device *qmux = + l_container_of(device, struct qmi_qmux_device, super); struct service_family *family = NULL; struct qmi_service *service = NULL; struct qmi_service_info info; @@ -1470,7 +1470,7 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, { unsigned char client_req[] = { 0x01, 0x01, 0x00, service_type }; const struct qmi_service_info *info; - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; struct qmi_request *req; struct qmux_client_create_data *create_data; @@ -1484,7 +1484,7 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, if (!info) return false; - qmux = l_container_of(device, struct qmi_device_qmux, super); + qmux = l_container_of(device, struct qmi_qmux_device, super); create_data = l_new(struct qmux_client_create_data, 1); create_data->super.destroy = qmux_client_create_data_free; @@ -1514,17 +1514,17 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, static void qmux_client_release_callback(uint16_t message, uint16_t length, const void *buffer, void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; qmux->shutdown.release_users--; } -static void qmi_device_qmux_client_release(struct qmi_device *device, +static void qmi_qmux_device_client_release(struct qmi_device *device, uint16_t service_type, uint16_t client_id) { - struct qmi_device_qmux *qmux = - l_container_of(device, struct qmi_device_qmux, super); + struct qmi_qmux_device *qmux = + l_container_of(device, struct qmi_qmux_device, super); uint8_t release_req[] = { 0x01, 0x02, 0x00, service_type, client_id }; struct qmi_request *req; @@ -1537,7 +1537,7 @@ static void qmi_device_qmux_client_release(struct qmi_device *device, __ctl_request_submit(qmux, req); } -static void __qmux_device_free(struct qmi_device_qmux *qmux) +static void __qmux_device_free(struct qmi_qmux_device *qmux) { l_queue_destroy(qmux->control_queue, __request_free); @@ -1555,7 +1555,7 @@ static void __qmux_device_free(struct qmi_device_qmux *qmux) static void qmux_shutdown_destroy(void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; if (qmux->shutdown.destroy) qmux->shutdown.destroy(qmux->shutdown.user_data); @@ -1568,7 +1568,7 @@ static void qmux_shutdown_destroy(void *user_data) static void qmux_shutdown_callback(struct l_idle *idle, void *user_data) { - struct qmi_device_qmux *qmux = user_data; + struct qmi_qmux_device *qmux = user_data; if (qmux->shutdown.release_users > 0) return; @@ -1588,12 +1588,12 @@ int qmi_qmux_device_shutdown(struct qmi_device *device, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; if (!device) return -EINVAL; - qmux = l_container_of(device, struct qmi_device_qmux, super); + qmux = l_container_of(device, struct qmi_qmux_device, super); if (qmux->shutdown.idle) return -EALREADY; @@ -1614,20 +1614,20 @@ int qmi_qmux_device_shutdown(struct qmi_device *device, } static const struct qmi_device_ops qmux_ops = { - .write = qmi_device_qmux_write, - .client_release = qmi_device_qmux_client_release, + .write = qmi_qmux_device_write, + .client_release = qmi_qmux_device_client_release, }; struct qmi_device *qmi_qmux_device_new(const char *device) { - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; int fd; fd = open(device, O_RDWR | O_NONBLOCK | O_CLOEXEC); if (fd < 0) return NULL; - qmux = l_new(struct qmi_device_qmux, 1); + qmux = l_new(struct qmi_qmux_device, 1); if (qmi_device_init(&qmux->super, fd, &qmux_ops) < 0) { close(fd); @@ -1644,12 +1644,12 @@ struct qmi_device *qmi_qmux_device_new(const char *device) void qmi_qmux_device_free(struct qmi_device *device) { - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; if (!device) return; - qmux = l_container_of(device, struct qmi_device_qmux, super); + qmux = l_container_of(device, struct qmi_qmux_device, super); DEBUG(&qmux->debug, "device %p", qmux); __qmi_device_free(device); @@ -1664,12 +1664,12 @@ void qmi_qmux_device_free(struct qmi_device *device) void qmi_qmux_device_set_debug(struct qmi_device *device, qmi_debug_func_t func, void *user_data) { - struct qmi_device_qmux *qmux; + struct qmi_qmux_device *qmux; if (device == NULL) return; - qmux = l_container_of(device, struct qmi_device_qmux, super); + qmux = l_container_of(device, struct qmi_qmux_device, super); __debug_data_init(&qmux->debug, func, user_data); } From patchwork Thu Jun 20 14:51:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705668 Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E32A61AE84E for ; Thu, 20 Jun 2024 14:52:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895138; cv=none; b=nRgSCAxaqLVVcLhQ2DKkhE7Cch3ExBvOnNc0XM+du8UTHeQvHMg2SBUTECP53Ua74ZE/oCA/oF96Jgui2N27PEOGW7bhd8HcBc6y5dIqRTvy1VJocS+KA25dc324QlRphOWz29pM7JIpwAuDLsAdZ2D1VH4NqZQvOgFfN9u/yiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895138; c=relaxed/simple; bh=ctS1BZKPNRDgevSky/pCEldnFDI35nGrtZ4u60dE0Rw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KciOZmZRAbHanEQ58Qq7FVHMWWivSCj3vZwTYG3kFv0YFxUiK43lipHx5f61RfbM9IJeUpEUK+iUnj1+wzpy65I7cSrU+Raj2HTGCqa8OGjS4YkkySI5PPwR+Az2WCA6oo8c9i6UCLve6+EypQKt2JFBBFGJXj20J/xMBv0PZNs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nrT+eODn; arc=none smtp.client-ip=209.85.167.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nrT+eODn" Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-3d516d3f0b2so563302b6e.1 for ; Thu, 20 Jun 2024 07:52:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895136; x=1719499936; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2bugyZioKe2x5rBXXZghaBG+FpRUXnMfDJnuLU3ec04=; b=nrT+eODnSmuuGq/NNVJ5YJudlz0fj99FlZIO7DDeGY5zqD52y6tR/XmiCV7KSkQxKj P5J/pKSQGuXVThbEkf/3sMTYEEi+WPoFL5JuWzy484m9YBP9pIE2zXvFcn4wZ5Vrz95v A36LtsPQB/HYvjOASz+aNhQ4be634ILSKmnNaHVragBoD3Z+xyAtxJi9Z/H3bxdV335O igP/VHaTCVwpOfYvsP80NQ9KurnjQ0WtBUmdfEqSv9qhi28fQRYiJqkK8Kl2MfDdvCI1 DEI10/dJxFNtoqnxYwgCKUZZ9na1mJYAskI6dFMGv2OLlm+lbdyjXdYXYxyO/FpTLTn9 BcdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895136; x=1719499936; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2bugyZioKe2x5rBXXZghaBG+FpRUXnMfDJnuLU3ec04=; b=Im8s/XQ/uOGucEa/1eXFHV+2PrMOMlCgje34sEeO+B2uOLADJeGi/Xl6zPlMXx2hmn x1ZO2xtWOhjPPhr7pr9g0J+tXtTVPAy5BpqNsTewyN3rG+jdvszlyxTzxDWn/CG/JLb9 I6Ar4SlLFDtazSwXIbMqBl+14ZY9K2miljT1VZVfquFqon8x4NRw3/vhT386ykj5F+QU lOKLb/lVOl8Qs5SzbrVFXU/bwbTxzyjSRDv5J/SpWo9TczAHaJ6N4WeTl/VtKRAH1RzO 7UMeaCtpWfLXh+d2X1ijR4lrraBuUXjEeTCha1oflzRSR8+LDPuWaXfr+Y19X69HE/ke Ikmg== X-Gm-Message-State: AOJu0Yx3UvWXIozlS9tZaNrei2rcqdseASdnCKRXcAYrgLK3jktY3npa lcC6zUvXRmxLsWH7oJmD3F1UvrNI7Ntm/sOdepunOpPKFUfq2uU/ZN0jTg== X-Google-Smtp-Source: AGHT+IEeaB6IJtKiGOFHUyF07RqYRwc7feS6FDk3c2D8Rnkp0VbgBKF6J6nkUEWpA7CyA6o9eh8mxw== X-Received: by 2002:a05:6808:bce:b0:3d2:4fe3:50ef with SMTP id 5614622812f47-3d51bae53f6mr6688267b6e.41.1718895135852; Thu, 20 Jun 2024 07:52:15 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:15 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 28/33] qmi: Make qmux methods operate on 'qmi_qmux_device' Date: Thu, 20 Jun 2024 09:51:15 -0500 Message-ID: <20240620145139.1135899-28-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- drivers/qmimodem/qmi.c | 70 ++++++++++++++++++------------------------ drivers/qmimodem/qmi.h | 19 ++++++------ plugins/gobi.c | 2 +- 3 files changed, 40 insertions(+), 51 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 0d67b07fa729..6e66060b1d3c 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -38,6 +38,8 @@ typedef void (*qmi_message_func_t)(uint16_t message, uint16_t length, const void *buffer, void *user_data); +struct qmi_device; + struct discovery { qmi_destroy_func_t destroy; }; @@ -961,13 +963,16 @@ static const struct qmi_service_info *__find_service_info_by_type( return info; } -bool qmi_qmux_device_get_service_version(struct qmi_device *device, +bool qmi_qmux_device_get_service_version(struct qmi_qmux_device *qmux, uint16_t type, uint16_t *major, uint16_t *minor) { const struct qmi_service_info *info; - info = __find_service_info_by_type(device, type); + if (!qmux) + return false; + + info = __find_service_info_by_type(&qmux->super, type); if (!info) return false; @@ -976,12 +981,12 @@ bool qmi_qmux_device_get_service_version(struct qmi_device *device, return true; } -bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type) +bool qmi_qmux_device_has_service(struct qmi_qmux_device *qmux, uint16_t type) { - if (!device) + if (!qmux) return false; - return __find_service_info_by_type(device, type); + return __find_service_info_by_type(&qmux->super, type); } static int qmi_qmux_device_write(struct qmi_device *device, @@ -1328,21 +1333,18 @@ static void qmux_discover_reply_timeout(struct l_timeout *timeout, __qmux_discovery_finished(qmux); } -int qmi_qmux_device_discover(struct qmi_device *device, +int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, qmi_qmux_device_discover_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_qmux_device *qmux; struct qmi_request *req; - if (!device) + if (!qmux) return -EINVAL; - qmux = l_container_of(device, struct qmi_qmux_device, super); - DEBUG(&qmux->debug, "device %p", qmux); - if (l_queue_length(device->service_infos) > 0 || qmux->discover.tid) + if (l_queue_length(qmux->super.service_infos) > 0 || qmux->discover.tid) return -EALREADY; req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0, @@ -1444,14 +1446,15 @@ static void qmux_client_create_callback(uint16_t message, uint16_t length, info.major = data->major; info.minor = data->minor; - family = service_family_create(device, &info, client_id->client); + family = service_family_create(&qmux->super, &info, client_id->client); DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", family->client_id, family->info.service_type); family = service_family_ref(family); hash_id = family_list_create_hash(family->info.service_type, family->client_id); - l_hashmap_insert(device->family_list, L_UINT_TO_PTR(hash_id), family); + l_hashmap_insert(qmux->super.family_list, + L_UINT_TO_PTR(hash_id), family); done: if (family) @@ -1463,32 +1466,29 @@ done: service_family_unref(family); } -bool qmi_qmux_device_create_client(struct qmi_device *device, +bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, uint16_t service_type, qmi_qmux_device_create_client_func_t func, void *user_data, qmi_destroy_func_t destroy) { unsigned char client_req[] = { 0x01, 0x01, 0x00, service_type }; const struct qmi_service_info *info; - struct qmi_qmux_device *qmux; struct qmi_request *req; struct qmux_client_create_data *create_data; - if (!device || !func) + if (!qmux || !func) return false; if (service_type == QMI_SERVICE_CONTROL) return false; - info = __find_service_info_by_type(device, service_type); + info = __find_service_info_by_type(&qmux->super, service_type); if (!info) return false; - qmux = l_container_of(device, struct qmi_qmux_device, super); - create_data = l_new(struct qmux_client_create_data, 1); create_data->super.destroy = qmux_client_create_data_free; - create_data->device = device; + create_data->device = &qmux->super; create_data->type = service_type; create_data->major = info->major; create_data->minor = info->minor; @@ -1507,7 +1507,7 @@ bool qmi_qmux_device_create_client(struct qmi_device *device, create_data->timeout = l_timeout_create(8, qmux_client_create_timeout, create_data, NULL); - __qmi_device_discovery_started(device, &create_data->super); + __qmi_device_discovery_started(&qmux->super, &create_data->super); return true; } @@ -1583,18 +1583,14 @@ static void qmux_shutdown_callback(struct l_idle *idle, void *user_data) l_idle_remove(qmux->shutdown.idle); } -int qmi_qmux_device_shutdown(struct qmi_device *device, +int qmi_qmux_device_shutdown(struct qmi_qmux_device *qmux, qmi_qmux_device_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_qmux_device *qmux; - - if (!device) + if (!qmux) return -EINVAL; - qmux = l_container_of(device, struct qmi_qmux_device, super); - if (qmux->shutdown.idle) return -EALREADY; @@ -1618,7 +1614,7 @@ static const struct qmi_device_ops qmux_ops = { .client_release = qmi_qmux_device_client_release, }; -struct qmi_device *qmi_qmux_device_new(const char *device) +struct qmi_qmux_device *qmi_qmux_device_new(const char *device) { struct qmi_qmux_device *qmux; int fd; @@ -1639,19 +1635,16 @@ struct qmi_device *qmi_qmux_device_new(const char *device) qmux->control_queue = l_queue_new(); l_io_set_read_handler(qmux->super.io, received_qmux_data, qmux, NULL); - return &qmux->super; + return qmux; } -void qmi_qmux_device_free(struct qmi_device *device) +void qmi_qmux_device_free(struct qmi_qmux_device *qmux) { - struct qmi_qmux_device *qmux; - - if (!device) + if (!qmux) return; - qmux = l_container_of(device, struct qmi_qmux_device, super); DEBUG(&qmux->debug, "device %p", qmux); - __qmi_device_free(device); + __qmi_device_free(&qmux->super); if (qmux->shutting_down) { qmux->destroyed = true; @@ -1661,15 +1654,12 @@ void qmi_qmux_device_free(struct qmi_device *device) __qmux_device_free(qmux); } -void qmi_qmux_device_set_debug(struct qmi_device *device, +void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, qmi_debug_func_t func, void *user_data) { - struct qmi_qmux_device *qmux; - - if (device == NULL) + if (!qmux) return; - qmux = l_container_of(device, struct qmi_qmux_device, super); __debug_data_init(&qmux->debug, func, user_data); } diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 64eebc27c17c..966f99f114fe 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -52,9 +52,8 @@ enum qmi_data_endpoint_type { typedef void (*qmi_destroy_func_t)(void *user_data); -struct qmi_device; -struct qmi_result; struct qmi_service; +struct qmi_result; typedef void (*qmi_debug_func_t)(const char *str, void *user_data); typedef void (*qmi_qmux_device_discover_func_t)(void *user_data); @@ -65,22 +64,22 @@ typedef void (*qmi_qrtr_node_lookup_done_func_t)(void *); typedef void (*qmi_service_result_func_t)(struct qmi_result *, void *); -struct qmi_device *qmi_qmux_device_new(const char *device); -void qmi_qmux_device_free(struct qmi_device *device); -void qmi_qmux_device_set_debug(struct qmi_device *device, +struct qmi_qmux_device *qmi_qmux_device_new(const char *device); +void qmi_qmux_device_free(struct qmi_qmux_device *qmux); +void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, qmi_debug_func_t func, void *user_data); -int qmi_qmux_device_discover(struct qmi_device *device, +int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, qmi_qmux_device_discover_func_t func, void *user_data, qmi_destroy_func_t destroy); -bool qmi_qmux_device_create_client(struct qmi_device *device, +bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, uint16_t service_type, qmi_qmux_device_create_client_func_t func, void *user_data, qmi_destroy_func_t destroy); -bool qmi_qmux_device_get_service_version(struct qmi_device *device, +bool qmi_qmux_device_get_service_version(struct qmi_qmux_device *qmux, uint16_t type, uint16_t *major, uint16_t *minor); -bool qmi_qmux_device_has_service(struct qmi_device *device, uint16_t type); -int qmi_qmux_device_shutdown(struct qmi_device *device, +bool qmi_qmux_device_has_service(struct qmi_qmux_device *qmux, uint16_t type); +int qmi_qmux_device_shutdown(struct qmi_qmux_device *qmux, qmi_qmux_device_shutdown_func_t func, void *user_data, qmi_destroy_func_t destroy); diff --git a/plugins/gobi.c b/plugins/gobi.c index 3676c130f614..128874f12cfa 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -61,7 +61,7 @@ struct service_request { }; struct gobi_data { - struct qmi_device *device; + struct qmi_qmux_device *device; struct qmi_service *dms; struct qmi_service *wda; struct qmi_service *nas; From patchwork Thu Jun 20 14:51:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705669 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DBF81AE85F for ; Thu, 20 Jun 2024 14:52:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895139; cv=none; b=Xvu2dF6Ax/hgUlyihuXOCdXzrg3k+jUqaq2NLRZtWlKIQnsY+8th5mLBz3StLDv+RAZPd/7l8QlOgNSRjnx8RwOvM7I020bfpHT6dI9VZJ1Ti95ogV5CK2YXIYVmVbXb8g8towOwuvmNLpPcSR+ynSNA15UpMBBqDLP+DyzdNGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895139; c=relaxed/simple; bh=U+peojbnu1k6q75LXI5k3vZfdNuC+ooo2jo7B+/NZ08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nUDEiyO7pWBJU4oAvjYjCqDWz+KKvF5PRNjs2YTTrN4JDnno7LUJoSjj6bkhLdYIQNyxj6RnuHsue8dFw6Mp75jKEx+15uPqfg6ubCBuXofLldkErUqEOUY5CA7AhKsWcCUoqK7GPll5pM3+7mYRsA4tnHwpNSwX1ErzDNEaOw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VIDCQEGu; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VIDCQEGu" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3c9cc681ee7so405049b6e.1 for ; Thu, 20 Jun 2024 07:52:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895137; x=1719499937; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9VNQjO4dvYVwxmdLCHVnJaHkQJpsvDJRxhitap70k/I=; b=VIDCQEGuDafpidBF1ZCVMK2J2jpUGX+WPlVo/wQHzWsKJzzwmSTnJmAG+AJ3udaHmZ ucqxpQJ96kG9/FIKlWghnZBf9SUFqXKLIegtmGqabPYgPy8dKrpmBnIgFn6duNvm7qJr QEL5SKGZfL80QBLybu/3+7JlUwNuzpWbnWbbiGl9mglXT5hZcbFtSH8j+Tu7CEVkuTEI 0tI3bgbXkchOltjq15kckkrNL9q4QMLBf9ym0RGDsC5yoJnUvO9tCVBcL9vsve+/1zGf /ABbm1IUX+czpnvawtHj5Sw1um7EVJ8U4PL9xRW0OA4FIhbQO+YtXciFzzF9v1wh7Jma uClg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895137; x=1719499937; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9VNQjO4dvYVwxmdLCHVnJaHkQJpsvDJRxhitap70k/I=; b=qyneYeoH/Z4blD2ld8V034bA/W3MbdeLbxidwd/KSbdE+BOy7wWNU9oz0XF4Y0R5vn 08kb/k3mYvklvRtPrEBWQKDhe5SVZR+r5IfoOb8RgD1+O0cMFQ4IFxf0isqqZVGvNjId MKjuNX30LwHBnUZbKcyvYkDeA7JkGQV6pZMqaVGsvmLXwcxgTtqP7hFjoE9MLr1rztLE ElSWvrB1a63/sh1pH5v/fkFsY7oBiURbSPsHlHO8qP0vQ6l6Ucb95ryUdMTBFdOUXioT +fydkZUQsfEvHY2zHlXFcuKOLiZsfOTcX6uXxaH7jZc4dbWcqE6PgI01meEI9lSxMVdb Tmqg== X-Gm-Message-State: AOJu0YyXxG3+aGBahl5+p3J1SyMCr5A4KJRvzGqfJxqQNMjOx/+zpjLd LYbr8d4JsV6wp5PnOe+BRmwlfNCeyYfIDixyn4AFDgrZVBxegeorxA6YQA== X-Google-Smtp-Source: AGHT+IEpLdQSCb5tYdfRgijgSzapMEArbDXVkuseH+GIUEex9YlX3oUr89OXHKHc0t2ka6osLOUkgA== X-Received: by 2002:a05:6808:23ca:b0:3d2:220c:6ebd with SMTP id 5614622812f47-3d51b5e70bfmr2646338b6e.11.1718895136671; Thu, 20 Jun 2024 07:52:16 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:16 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 29/33] qmi: combine service_send_data into qmi_request Date: Thu, 20 Jun 2024 09:51:16 -0500 Message-ID: <20240620145139.1135899-29-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Instead of allocating a separate service_send_data structure for each request, simply extend the qmi_request structure with the needed parameters. This saves an extra memory allocation since service_send_data lifetime was already tied to the qmi_request lifetime. While here, remove __service_request_alloc function. This helper was used in a single location and is unlikely to be used elsewhere. --- drivers/qmimodem/qmi.c | 194 +++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 102 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 6e66060b1d3c..3742e8fc4b73 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -10,6 +10,7 @@ #endif #define _GNU_SOURCE +#include #include #include #include @@ -35,10 +36,11 @@ l_util_debug((debug)->func, (debug)->user_data, "%s:%i " fmt, \ __func__, __LINE__, ## args) -typedef void (*qmi_message_func_t)(uint16_t message, uint16_t length, - const void *buffer, void *user_data); - struct qmi_device; +struct qmi_request; + +typedef void (*response_func_t)(struct qmi_request *, uint16_t message, + uint16_t length, const void *buffer); struct discovery { qmi_destroy_func_t destroy; @@ -59,12 +61,20 @@ struct qmi_request { unsigned int service_handle; /* Always 0 for control */ uint8_t client; /* Always 0 for control and qrtr */ struct qmi_service_info info; /* Not used for control requests */ - qmi_message_func_t callback; void *user_data; + response_func_t callback; + void (*free_request)(struct qmi_request *req); uint16_t len; uint8_t data[]; }; +struct qmi_service_request { + qmi_service_result_func_t func; + void *user_data; + qmi_destroy_func_t destroy; + struct qmi_request super; +}; + struct qmi_device_ops { int (*write)(struct qmi_device *device, struct qmi_request *req); void (*client_release)(struct qmi_device *device, @@ -215,12 +225,12 @@ static void __qmi_service_appeared(struct qmi_device *device, l_memdup(info, sizeof(struct qmi_service_info))); } -static struct qmi_request *__request_alloc(uint32_t service_type, - uint8_t client, uint16_t message, - const void *data, - uint16_t length, qmi_message_func_t func, - void *user_data) +static void *__request_alloc(uint32_t service_type, + uint8_t client, uint16_t message, + const void *data, uint16_t length, + size_t offset) { + void *mem; struct qmi_request *req; struct qmi_mux_hdr *hdr; struct qmi_message_hdr *msg; @@ -233,10 +243,9 @@ static struct qmi_request *__request_alloc(uint32_t service_type, hdrlen += QMI_SERVICE_HDR_SIZE; msglen = hdrlen + QMI_MESSAGE_HDR_SIZE + length; - req = l_malloc(sizeof(struct qmi_request) + msglen); - req->tid = 0; - req->group_id = 0; - req->service_handle = 0; + mem = l_malloc(offset + sizeof(struct qmi_request) + msglen); + req = mem + offset; + memset(req, 0, sizeof(struct qmi_request)); req->len = msglen; req->client = client; @@ -256,40 +265,24 @@ static struct qmi_request *__request_alloc(uint32_t service_type, if (data && length > 0) memcpy(req->data + hdrlen + QMI_MESSAGE_HDR_SIZE, data, length); - req->callback = func; - req->user_data = user_data; - - return req; + return mem; } static struct qmi_request *__control_request_alloc(uint16_t message, - const void *data, uint16_t length, - qmi_message_func_t func, void *user_data) + const void *data, uint16_t length) { return __request_alloc(QMI_SERVICE_CONTROL, 0x00, message, - data, length, func, user_data); -} - -static struct qmi_request *__service_request_alloc( - struct qmi_service_info *info, - uint8_t client, uint16_t message, - const void *data, uint16_t length, - qmi_message_func_t func, void *user_data) -{ - struct qmi_request *req; - - req = __request_alloc(info->service_type, client, message, - data, length, func, user_data); - memcpy(&req->info, info, sizeof(req->info)); - - return req; + data, length, 0); } static void __request_free(void *data) { struct qmi_request *req = data; - l_free(req); + if (req->free_request) + req->free_request(req); + else + l_free(req); } static bool __request_compare(const void *a, const void *b) @@ -817,7 +810,7 @@ static void __rx_message(struct qmi_device *device, return; if (req->callback) - req->callback(message, length, data, req->user_data); + req->callback(req, message, length, data); __request_free(req); } @@ -1047,7 +1040,7 @@ static void __rx_ctl_message(struct qmi_qmux_device *qmux, return; if (req->callback) - req->callback(message, length, data, req->user_data); + req->callback(req, message, length, data); __request_free(req); } @@ -1144,7 +1137,8 @@ done: } static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, - struct qmi_request *req) + struct qmi_request *req, + response_func_t callback) { struct qmi_control_hdr *hdr = (struct qmi_control_hdr *) &req->data[QMI_MUX_HDR_SIZE]; @@ -1156,6 +1150,7 @@ static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, qmux->next_control_tid = 1; req->tid = hdr->transaction; + req->callback = callback; l_queue_push_tail(qmux->super.req_queue, req); wakeup_writer(&qmux->super); @@ -1227,18 +1222,18 @@ static void __qmux_discovery_finished(struct qmi_qmux_device *qmux) memset(&qmux->discover, 0, sizeof(qmux->discover)); } -static void qmux_sync_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void qmux_sync_callback(struct qmi_request *req, uint16_t message, + uint16_t length, const void *buffer) { - struct qmi_qmux_device *qmux = user_data; + struct qmi_qmux_device *qmux = req->user_data; __qmux_discovery_finished(qmux); } -static void qmux_discover_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void qmux_discover_callback(struct qmi_request *req, uint16_t message, + uint16_t length, const void *buffer) { - struct qmi_qmux_device *qmux = user_data; + struct qmi_qmux_device *qmux = req->user_data; struct qmi_device *device = &qmux->super; const struct qmi_result_code *result_code; const struct qmi_service_list *service_list; @@ -1306,11 +1301,14 @@ done: if ((qmux->control_major == 1 && qmux->control_minor >= 5) || qmux->control_major > 1) { struct qmi_request *req = - __control_request_alloc(QMI_CTL_SYNC, NULL, 0, - qmux_sync_callback, qmux); + __control_request_alloc(QMI_CTL_SYNC, NULL, 0); + + req->user_data = qmux; DEBUG(&qmux->debug, "Sending sync to reset QMI"); - qmux->discover.tid = __ctl_request_submit(qmux, req); + qmux->discover.tid = __ctl_request_submit(qmux, req, + qmux_sync_callback); + return; } @@ -1347,13 +1345,14 @@ int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, if (l_queue_length(qmux->super.service_infos) > 0 || qmux->discover.tid) return -EALREADY; - req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0, - qmux_discover_callback, qmux); + req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0); + req->user_data = qmux; qmux->discover.func = func; qmux->discover.user_data = user_data; qmux->discover.destroy = destroy; - qmux->discover.tid = __ctl_request_submit(qmux, req); + qmux->discover.tid = __ctl_request_submit(qmux, req, + qmux_discover_callback); qmux->discover.timeout = l_timeout_create(DISCOVER_TIMEOUT, qmux_discover_reply_timeout, qmux, NULL); @@ -1409,10 +1408,11 @@ static void qmux_client_create_timeout(struct l_timeout *timeout, DISCOVERY_DONE(data, NULL, data->user_data); } -static void qmux_client_create_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void qmux_client_create_callback(struct qmi_request *req, + uint16_t message, uint16_t length, + const void *buffer) { - struct qmux_client_create_data *data = user_data; + struct qmux_client_create_data *data = req->user_data; struct qmi_device *device = data->device; struct qmi_qmux_device *qmux = l_container_of(device, struct qmi_qmux_device, super); @@ -1499,11 +1499,11 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, DEBUG(&qmux->debug, "creating client [type=%d]", service_type); req = __control_request_alloc(QMI_CTL_GET_CLIENT_ID, - client_req, sizeof(client_req), - qmux_client_create_callback, - create_data); + client_req, sizeof(client_req)); + req->user_data = create_data; - create_data->tid = __ctl_request_submit(qmux, req); + create_data->tid = __ctl_request_submit(qmux, req, + qmux_client_create_callback); create_data->timeout = l_timeout_create(8, qmux_client_create_timeout, create_data, NULL); @@ -1511,10 +1511,11 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, return true; } -static void qmux_client_release_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void qmux_client_release_callback(struct qmi_request *req, + uint16_t message, uint16_t length, + const void *buffer) { - struct qmi_qmux_device *qmux = user_data; + struct qmi_qmux_device *qmux = req->user_data; qmux->shutdown.release_users--; } @@ -1531,10 +1532,10 @@ static void qmi_qmux_device_client_release(struct qmi_device *device, qmux->shutdown.release_users++; req = __control_request_alloc(QMI_CTL_RELEASE_CLIENT_ID, - release_req, sizeof(release_req), - qmux_client_release_callback, qmux); + release_req, sizeof(release_req)); + req->user_data = qmux; - __ctl_request_submit(qmux, req); + __ctl_request_submit(qmux, req, qmux_client_release_callback); } static void __qmux_device_free(struct qmi_qmux_device *qmux) @@ -2322,24 +2323,22 @@ bool qmi_service_get_version(struct qmi_service *service, uint8_t *out_version) return true; } -struct service_send_data { - qmi_service_result_func_t func; - void *user_data; - qmi_destroy_func_t destroy; -}; - -static void service_send_free(struct service_send_data *data) +static void qmi_service_request_free(struct qmi_request *req) { - if (data->destroy) - data->destroy(data->user_data); + struct qmi_service_request *sreq = l_container_of(req, + struct qmi_service_request, super); - l_free(data); + if (sreq->destroy) + sreq->destroy(sreq->user_data); + + l_free(sreq); } -static void service_send_callback(uint16_t message, uint16_t length, - const void *buffer, void *user_data) +static void service_send_callback(struct qmi_request *req, uint16_t message, + uint16_t length, const void *buffer) { - struct service_send_data *data = user_data; + struct qmi_service_request *sreq = l_container_of(req, + struct qmi_service_request, super); const struct qmi_result_code *result_code; uint16_t len; struct qmi_result result; @@ -2359,10 +2358,8 @@ static void service_send_callback(uint16_t message, uint16_t length, result.error = L_LE16_TO_CPU(result_code->error); done: - if (data->func) - data->func(&result, data->user_data); - - service_send_free(data); + if (sreq->func) + sreq->func(&result, sreq->user_data); } uint16_t qmi_service_send(struct qmi_service *service, @@ -2372,15 +2369,13 @@ uint16_t qmi_service_send(struct qmi_service *service, { struct qmi_device *device; struct service_family *family; - struct service_send_data *data; - struct qmi_request *req; - uint16_t tid; + struct qmi_service_request *sreq; + struct qmi_service_info *info; if (!service) return 0; family = service->family; - if (!family->group_id) return 0; @@ -2388,23 +2383,21 @@ uint16_t qmi_service_send(struct qmi_service *service, if (!device) return 0; - data = l_new(struct service_send_data, 1); - - data->func = func; - data->user_data = user_data; - data->destroy = destroy; - - req = __service_request_alloc(&family->info, - family->client_id, message, - param ? param->data : NULL, - param ? param->length : 0, - service_send_callback, data); - + info = &family->info; + sreq = __request_alloc(info->service_type, family->client_id, message, + param ? param->data : NULL, + param ? param->length : 0, + offsetof(struct qmi_service_request, super)); qmi_param_free(param); - tid = __service_request_submit(device, service, req); + memcpy(&sreq->super.info, info, sizeof(*info)); + sreq->super.callback = service_send_callback; + sreq->super.free_request = qmi_service_request_free; + sreq->func = func; + sreq->user_data = user_data; + sreq->destroy = destroy; - return tid; + return __service_request_submit(device, service, &sreq->super); } bool qmi_service_cancel(struct qmi_service *service, uint16_t id) @@ -2435,8 +2428,6 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) return false; } - service_send_free(req->user_data); - __request_free(req); return true; @@ -2450,7 +2441,6 @@ static bool remove_req_if_match(void *data, void *user_data) if (req->service_handle != service_handle) return false; - service_send_free(req->user_data); __request_free(req); return true; From patchwork Thu Jun 20 14:51:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705670 Received: from mail-oi1-f175.google.com (mail-oi1-f175.google.com [209.85.167.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 856D01AE863 for ; Thu, 20 Jun 2024 14:52:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895140; cv=none; b=oWOgDbgP8ydC2aloqV6Ui4udByWe3YHheV4K2g+YW+7bve7ubtydWhMbXOLm8G2r/8rz9ATIsKYLSTWWrYrLPeOPrXpetjwWv9r1Y8JiDCdE5tjA8Dk3v4/PIn5u8zwzei7xwHXGvjigD3tPBxIGX4p9jk0JW/4HeGFX4xumLmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895140; c=relaxed/simple; bh=ct6NBoejunpbdL+Y28R2VpykRFG30hZW+BMxLKieUbc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RSK/pMRLryOPSDcAHGg1/M0RaS5uj6pFX5irk2B1v/J9C2hWNULUZdg5YANQJFdfMQh2I0F+IkW1h84TUjGJjA86z8azJ0QEucGzMUEsJJWHYlOD1nG++L8KpGztPGH+/N5FmN8R4MCLQhTWB9w8wrHwWAFVMjzT9aaNOWR0CKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VatlP/DS; arc=none smtp.client-ip=209.85.167.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VatlP/DS" Received: by mail-oi1-f175.google.com with SMTP id 5614622812f47-3d2472450d6so497003b6e.3 for ; Thu, 20 Jun 2024 07:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895137; x=1719499937; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BHhgRNI//pbHnUOtJhh2c15VzZvNnAL1vsZ9a8EnmmA=; b=VatlP/DSY/ejx3jFncPL6AQVHGhM1IRFAKN3gSXK5I1M7UeXbr7YfYeFx4iLRTYvap rh9RvtUem/tYriAo4zUfGrJFH3Yd73nJkcoygrnMnBWwBzpYAuIzf1KGGwbhkk8awpz8 yMslAwktOgZh0qYk+8qmofrn59oEezT2DOWJslVT9L9Hqr1IrmoWEmapVydC09jPZWyL adoxcuzzGyQfCOedBszOKtvZrwJpRPGkfKfYQ731Cg8ZhAqMDoNnZEeTGwrolGITkXgK i1FZmRyHcRyrb1xMNhwGVFo85Ty4jQv0wOTrKVlRQKoHS2AKcS0NPCWmdqSqdQAEwZ1f CogQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895137; x=1719499937; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BHhgRNI//pbHnUOtJhh2c15VzZvNnAL1vsZ9a8EnmmA=; b=ajiievrhq6RyKqly43ul62siTwP2ragO1HEGCWSv0IeRg192tGc86WBj9OCvUZPU6W uRGdJmfscAXAcNdIxvOJCt/Pq0Vo9TZooOUy9bWy2eeugou+xvlLetQy7NQ1qGkDCBpz JrRCJap8sg5yapEHEpR1M5Hmz7Hu/niF7qTxJMwlRAITtbO4RJCvbNp7JAXcewV9Vshy 8nQ52ymR5F1J5y6mwRtXLrCEyFgqiuo7H62UuGlnRkKdJdKTDlq+VWfieIHZZ8cD3FYs jsAoY+qcqmL0v1wwwY2aoLTsPj4HB1UdXg+mSYpI3C5veqKQ0wFnJ73LY1DDH0/hToqA U9lQ== X-Gm-Message-State: AOJu0YxSq7PEfHFhSs6eVngv74OgTMMaXfx0mSs7bEESN0AZQoTtFAtB wnOLGq0bYIC0ALml+Nz48XnLpWg0Bld052N8pygOzEBZ99SAA/uaWfwz7A== X-Google-Smtp-Source: AGHT+IFzZFUk7fOFDGH5br0nGv0PBdclg3XURVkv11RY95c/wO2h7G7+X/f/YJRwU3Hvb5wYo+GYVQ== X-Received: by 2002:a05:6808:130c:b0:3d2:2d1d:3796 with SMTP id 5614622812f47-3d51b9ad6femr6161129b6e.18.1718895137488; Thu, 20 Jun 2024 07:52:17 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:17 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 30/33] qmi: combine qmux_client_create_data into qmi_request Date: Thu, 20 Jun 2024 09:51:17 -0500 Message-ID: <20240620145139.1135899-30-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Similarly to the previous commit, do not allocate a separate data structure to hold client creation details, and instead allocate it as a qmi_request specialization. Since the lifetime of struct qmux_client_create_data was already tied to the lifetime of the request (and vice-versa), this change allows the extra allocation to be optimized away. While here, remove all vestiges of discovery and discovery_queue. This functionality is no longer needed since any data associated with the request will be freed when struct qmi_request is freed. --- drivers/qmimodem/qmi.c | 153 ++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 102 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 3742e8fc4b73..e3a8b225140f 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -42,10 +42,6 @@ struct qmi_request; typedef void (*response_func_t)(struct qmi_request *, uint16_t message, uint16_t length, const void *buffer); -struct discovery { - qmi_destroy_func_t destroy; -}; - struct qmi_service_info { uint32_t service_type; uint32_t qrtr_port; /* Always 0 on qmux */ @@ -90,7 +86,6 @@ struct qmi_device { struct l_io *io; struct l_queue *req_queue; struct l_queue *service_queue; - struct l_queue *discovery_queue; unsigned int next_group_id; /* Matches requests with services */ unsigned int next_service_handle; uint16_t next_service_tid; @@ -268,11 +263,12 @@ static void *__request_alloc(uint32_t service_type, return mem; } -static struct qmi_request *__control_request_alloc(uint16_t message, - const void *data, uint16_t length) +static void *__control_request_alloc(uint16_t message, + const void *data, uint16_t length, + size_t offset) { return __request_alloc(QMI_SERVICE_CONTROL, 0x00, message, - data, length, 0); + data, length, offset); } static void __request_free(void *data) @@ -293,14 +289,6 @@ static bool __request_compare(const void *a, const void *b) return req->tid == tid; } -static void __discovery_free(void *data) -{ - struct discovery *d = data; - qmi_destroy_func_t destroy = d->destroy; - - destroy(d); -} - static void __notify_free(void *data) { struct qmi_notify *notify = data; @@ -815,33 +803,6 @@ static void __rx_message(struct qmi_device *device, __request_free(req); } -static void __qmi_device_discovery_started(struct qmi_device *device, - struct discovery *d) -{ - l_queue_push_tail(device->discovery_queue, d); -} - -static void __qmi_device_discovery_complete(struct qmi_device *device, - struct discovery *d) -{ - if (!l_queue_remove(device->discovery_queue, d)) - return; -} - -/* - * Prevents re-entrancy problems by removing the entry from the discovery_queue - * before calling the callback. - */ -#define DISCOVERY_DONE(data, ...)\ -do {\ - __qmi_device_discovery_complete(data->device, &data->super);\ -\ - if (data->func)\ - data->func(__VA_ARGS__);\ -\ - __discovery_free(&data->super);\ -} while (0) - static void family_destroy(void *data) { struct service_family *family = data; @@ -873,7 +834,6 @@ static int qmi_device_init(struct qmi_device *device, int fd, device->req_queue = l_queue_new(); device->service_queue = l_queue_new(); - device->discovery_queue = l_queue_new(); device->service_infos = l_queue_new(); device->family_list = l_hashmap_new(); @@ -888,7 +848,6 @@ static void __qmi_device_free(struct qmi_device *device) { l_queue_destroy(device->service_queue, __request_free); l_queue_destroy(device->req_queue, __request_free); - l_queue_destroy(device->discovery_queue, __discovery_free); l_io_destroy(device->io); @@ -1301,7 +1260,7 @@ done: if ((qmux->control_major == 1 && qmux->control_minor >= 5) || qmux->control_major > 1) { struct qmi_request *req = - __control_request_alloc(QMI_CTL_SYNC, NULL, 0); + __control_request_alloc(QMI_CTL_SYNC, NULL, 0, 0); req->user_data = qmux; @@ -1345,7 +1304,7 @@ int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, if (l_queue_length(qmux->super.service_infos) > 0 || qmux->discover.tid) return -EALREADY; - req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0); + req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0, 0); req->user_data = qmux; qmux->discover.func = func; @@ -1360,9 +1319,8 @@ int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, return 0; } -struct qmux_client_create_data { - struct discovery super; - struct qmi_device *device; +struct qmux_create_client_request { + struct qmi_qmux_device *qmux; uint8_t type; uint16_t major; uint16_t minor; @@ -1370,52 +1328,46 @@ struct qmux_client_create_data { void *user_data; qmi_destroy_func_t destroy; struct l_timeout *timeout; - uint16_t tid; + struct qmi_request super; }; -static void qmux_client_create_data_free(void *user_data) +static void qmux_create_client_request_free(struct qmi_request *r) { - struct qmux_client_create_data *data = user_data; + struct qmux_create_client_request *req = + l_container_of(r, struct qmux_create_client_request, super); - if (data->timeout) - l_timeout_remove(data->timeout); + if (req->timeout) + l_timeout_remove(req->timeout); - if (data->destroy) - data->destroy(data->user_data); + if (req->destroy) + req->destroy(req->user_data); - l_free(data); + l_free(req); } -static void qmux_client_create_timeout(struct l_timeout *timeout, +static void qmux_create_client_timeout(struct l_timeout *timeout, void *user_data) { - struct qmux_client_create_data *data = user_data; - struct qmi_device *device = data->device; - struct qmi_qmux_device *qmux = - l_container_of(device, struct qmi_qmux_device, super); - struct qmi_request *req; + struct qmux_create_client_request *req = user_data; + struct qmi_qmux_device *qmux = req->qmux; DEBUG(&qmux->debug, ""); - l_timeout_remove(data->timeout); - data->timeout = NULL; + l_timeout_remove(req->timeout); + req->timeout = NULL; /* remove request from queues */ - req = find_control_request(qmux, data->tid); - if (req) - __request_free(req); - - DISCOVERY_DONE(data, NULL, data->user_data); + find_control_request(qmux, req->super.tid); + __request_free(&req->super); } -static void qmux_client_create_callback(struct qmi_request *req, +static void qmux_create_client_callback(struct qmi_request *r, uint16_t message, uint16_t length, const void *buffer) { - struct qmux_client_create_data *data = req->user_data; - struct qmi_device *device = data->device; - struct qmi_qmux_device *qmux = - l_container_of(device, struct qmi_qmux_device, super); + struct qmux_create_client_request *req = + l_container_of(r, struct qmux_create_client_request, super); + struct qmi_qmux_device *qmux = req->qmux; struct service_family *family = NULL; struct qmi_service *service = NULL; struct qmi_service_info info; @@ -1438,13 +1390,13 @@ static void qmux_client_create_callback(struct qmi_request *req, if (len != QMI_CLIENT_ID_SIZE) goto done; - if (client_id->service != data->type) + if (client_id->service != req->type) goto done; memset(&info, 0, sizeof(family->info)); - info.service_type = data->type; - info.major = data->major; - info.minor = data->minor; + info.service_type = req->type; + info.major = req->major; + info.minor = req->minor; family = service_family_create(&qmux->super, &info, client_id->client); DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", @@ -1460,7 +1412,8 @@ done: if (family) service = service_create(family); - DISCOVERY_DONE(data, service, data->user_data); + if (req->func) + req->func(service, req->user_data); if (family) service_family_unref(family); @@ -1473,8 +1426,7 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, { unsigned char client_req[] = { 0x01, 0x01, 0x00, service_type }; const struct qmi_service_info *info; - struct qmi_request *req; - struct qmux_client_create_data *create_data; + struct qmux_create_client_request *req; if (!qmux || !func) return false; @@ -1486,28 +1438,25 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, if (!info) return false; - create_data = l_new(struct qmux_client_create_data, 1); - create_data->super.destroy = qmux_client_create_data_free; - create_data->device = &qmux->super; - create_data->type = service_type; - create_data->major = info->major; - create_data->minor = info->minor; - create_data->func = func; - create_data->user_data = user_data; - create_data->destroy = destroy; - DEBUG(&qmux->debug, "creating client [type=%d]", service_type); req = __control_request_alloc(QMI_CTL_GET_CLIENT_ID, - client_req, sizeof(client_req)); - req->user_data = create_data; - - create_data->tid = __ctl_request_submit(qmux, req, - qmux_client_create_callback); - create_data->timeout = l_timeout_create(8, qmux_client_create_timeout, - create_data, NULL); + client_req, sizeof(client_req), + offsetof(struct qmux_create_client_request, + super)); + req->super.free_request = qmux_create_client_request_free; + req->qmux = qmux; + req->type = service_type; + req->major = info->major; + req->minor = info->minor; + req->func = func; + req->user_data = user_data; + req->destroy = destroy; + req->timeout = l_timeout_create(8, qmux_create_client_timeout, + req, NULL); + + __ctl_request_submit(qmux, &req->super, qmux_create_client_callback); - __qmi_device_discovery_started(&qmux->super, &create_data->super); return true; } @@ -1532,7 +1481,7 @@ static void qmi_qmux_device_client_release(struct qmi_device *device, qmux->shutdown.release_users++; req = __control_request_alloc(QMI_CTL_RELEASE_CLIENT_ID, - release_req, sizeof(release_req)); + release_req, sizeof(release_req), 0); req->user_data = qmux; __ctl_request_submit(qmux, req, qmux_client_release_callback); From patchwork Thu Jun 20 14:51:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705671 Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03BD61AE84E for ; Thu, 20 Jun 2024 14:52:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895140; cv=none; b=sSQij0MVPQJ8Cr2d0HW8REKg5vbqetBYdc/temRXOu/SK/uVLeTJS7/AninXB+MmhWraZ7vmJPGDCjGZlJAtBtYeXuG53ENB052WZAsUDIrsBtOACkoQqTvjxV9Rvv/nO+ixmw7St7OCn+g6xoLGaH/2nDtu57pwLZrjqBHPVEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895140; c=relaxed/simple; bh=yCASfTUa+mVbFQpxIgvKw6xLhMDlWjmwUkHHvr0CTFA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=awdVCR943LS/kwNENQLYb5L6zz1SlK0swipi4ad/pWl9dgI+KGtLlv8iBoEurzWv0HbiVDR0nB+qdQLxqxXmTN+H+UcPhurdihdosbUEhGdRN4xp4P9n1fNfUVgRh9Ew25m8kEhjhYXiEQSzvAFNtZPNl4jYapZRyO1S4cIpSh4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=H1kctCW2; arc=none smtp.client-ip=209.85.167.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H1kctCW2" Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-3c9b94951cfso524634b6e.3 for ; Thu, 20 Jun 2024 07:52:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895138; x=1719499938; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3wIy4qRUI1gV6a2AuRMXprV+NjXE4khA/yj+e1Qp8qQ=; b=H1kctCW25YvP/EK4Z0zf6qUb8IhuAUEzC/ncSHLmbVpJRVLm3UAqGZClxhEnyyGCIj R8usjk+pXpn3Xc+rsc69FFIf2LB1flSGnJZ2W6MF5M/+M+lDgaMDdBBVW+P4VdUmvLeq lJIdaP7TnZH/VmVJNbuq4ExOyYJDgHuRqPlBwK2wI1xDSv+x38ohKzKEQt76pCfTieLT gsSXqAGg6PeJ8K94bo00aoPWltInxWv8QT5esqQKpGRPHX0qSMRs6sxlS+3WZcy/CPJ+ ypXrqmZPp6f6xGyDmBHnbfT8cLFdUn9stYmPvl0d/0oPLBjKrAlbhutZ8FzUJhBwkXse HfKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895138; x=1719499938; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3wIy4qRUI1gV6a2AuRMXprV+NjXE4khA/yj+e1Qp8qQ=; b=MNcfqWvvVeC54WxevF8syi8x5WhGFJzOHzh4rRNw8uSDCooh/4FcvDr8XsqqKIq4ae zL1OkKHkoe71fJQPBg7bAXVjToysW/r4kUBSGYugss2q2mJP+bxBsmycoXuMd2OZrsK+ I49WqvoeeV101Hvcb7K79cG7O8nEMpCnJBa+GEhhzlG81ouTsnAOCMtTw3lyXxsBX4hs GWsHIE40sn9w+NwUmq64Yj4Jvn0QytgV++dXGiLAtqfwByCNPcuAnA//ef0InGLE4w5c nAUAm4UmHQSYtqU7XE9Kop25P7OnPgWKK4fC7EuT9Q0BFmUIAFxYWMf6Um5bbOJkc5Z2 TNIg== X-Gm-Message-State: AOJu0YymuEeY2t6nuSTD+riLYTS35lXSn3k9SE2KDIuhFkFTwWmBDOZ9 Y2Hi3koBEe/xR+USXpkIaGPycMoGuAweDABs8IkKvVaxTSwbrD7YCKSliQ== X-Google-Smtp-Source: AGHT+IFmEYX07HhrhzpO/agtfH/ng9ATwkLdzq8GHJkw03RxR+KGLoYmpPjb7aMYhFImX+yGkh3oQg== X-Received: by 2002:a05:6808:15a6:b0:3d5:123b:e2db with SMTP id 5614622812f47-3d51bac5225mr5788112b6e.41.1718895138160; Thu, 20 Jun 2024 07:52:18 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:17 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 31/33] gprs: Fix memory leak Date: Thu, 20 Jun 2024 09:51:18 -0500 Message-ID: <20240620145139.1135899-31-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 As reported by lsan: ==1120532==ERROR: LeakSanitizer: detected memory leaks Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x761c0dadf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69 #1 0x9ae9b9 in l_malloc ell/util.c:49 #2 0x9f41a7 in l_uintset_new_from_range ell/uintset.c:181 #3 0x8e486f in ofono_gprs_set_cid_range src/gprs.c:2669 #4 0x55b8d0 in get_default_profile_number_cb drivers/qmimodem/gprs.c:399 #5 0x52f822 in service_send_callback drivers/qmimodem/qmi.c:2311 #6 0x51f461 in __rx_message drivers/qmimodem/qmi.c:801 #7 0x521d22 in received_qmux_data drivers/qmimodem/qmi.c:1052 #8 0x9da348 in io_callback ell/io.c:105 #9 0x9d5077 in l_main_iterate ell/main.c:461 #10 0x7811df in event_check src/main.c:182 #11 0x761c0e1260ed (/usr/lib/libglib-2.0.so.0+0x5b0ed) (BuildId: e717410de6953d0e1e85882d796204ca2675f1d4) #12 0x7ffe00000000 () Indirect leak of 8 byte(s) in 1 object(s) allocated from: #0 0x761c0dadf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69 #1 0x9ae9b9 in l_malloc ell/util.c:49 #2 0x9f4211 in l_uintset_new_from_range ell/uintset.c:182 #3 0x8e486f in ofono_gprs_set_cid_range src/gprs.c:2669 #4 0x55b8d0 in get_default_profile_number_cb drivers/qmimodem/gprs.c:399 #5 0x52f822 in service_send_callback drivers/qmimodem/qmi.c:2311 #6 0x51f461 in __rx_message drivers/qmimodem/qmi.c:801 #7 0x521d22 in received_qmux_data drivers/qmimodem/qmi.c:1052 #8 0x9da348 in io_callback ell/io.c:105 #9 0x9d5077 in l_main_iterate ell/main.c:461 #10 0x7811df in event_check src/main.c:182 #11 0x761c0e1260ed (/usr/lib/libglib-2.0.so.0+0x5b0ed) (BuildId: e717410de6953d0e1e85882d796204ca2675f1d4) #12 0x7ffe00000000 () The cid range can be set by the driver at any time. If the gprs atom is removed prior to being registered, the memory is not freed. Fix that by moving uintset deallocation to the remove method. --- src/gprs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gprs.c b/src/gprs.c index 57b823b0f1c6..97d6f382e87d 100644 --- a/src/gprs.c +++ b/src/gprs.c @@ -3014,9 +3014,6 @@ static void gprs_unregister(struct ofono_atom *atom) free_contexts(gprs); - l_uintset_free(gprs->used_cids); - gprs->used_cids = NULL; - if (gprs->netreg_watch) { if (gprs->status_watch) { __ofono_netreg_remove_status_watch(gprs->netreg, @@ -3055,6 +3052,9 @@ static void gprs_remove(struct ofono_atom *atom) if (gprs->suspend_timeout) g_source_remove(gprs->suspend_timeout); + l_uintset_free(gprs->used_cids); + gprs->used_cids = NULL; + l_uintset_free(gprs->used_pids); gprs->used_pids = NULL; From patchwork Thu Jun 20 14:51:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705672 Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7E031AE87D for ; Thu, 20 Jun 2024 14:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895141; cv=none; b=gIzDWgEJD5ACsh9nWDccMmdMR+w/FOQ4ILpteA+9D4TbHOYt9Mz/EWzHpVUpF6rMQgecqhQgc0ftA1Dqb6fQjiF7Z5Fc2cjk6Dd0k16saZsRtdgtbUiCFDwu+55dOhj8dL6Px96KjPXD+xJpH9UZqxSxa4eOf/T729dbH+S4C5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895141; c=relaxed/simple; bh=cKIaJ66AL5AWhs8O/mUG2hL2EMBYlebuTzuZ866/o7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kipwsu3uo/ErtA1TWj5zYWq7fKpC6ZuuN/ijbjHYT3EMWj4DGza40Pxh7P+GnUuqoSHdph5yddGz9tZBsfOJhnKkxh5lb0jE2uAlSynAO2hrsmOv+nRiPXgEmNpo2BJjo9r7HDPYk5bXGKCN3pXV1Vk6argNJoBl59aLI/68ET4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y5ePTaHq; arc=none smtp.client-ip=209.85.167.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y5ePTaHq" Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3c9cc681ee7so405071b6e.1 for ; Thu, 20 Jun 2024 07:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895139; x=1719499939; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=inCgtKfHc5T0FMjikFwxW/MC3LMHDrydzTA6wxZFvbk=; b=Y5ePTaHq1geLavCZZ0lXDgEbz0m7LxT249lmuGpKODUY7f8rvC6hi1+LmA8Zr/7coN g72D4U/qf5Z02Y6zm8L4u6d7FrtpfLT8KLQDLMC/xNBWcDnoLDkykfwrPeoQsjC9+L+7 ve23oSQ9KIyez/rKJDffjP3Rj3Lwnhq9RaybT5nUWc0ttaHqvAaJAnQsxBkLz3mD2l7T TzUqmdFq1HNYyQ0FaVkEivrEJcg7Dyd0lNQ1ms/4BBZUne6yrXfIR0Sr39zNqZxFqUcD ztHK7uzvC9+4Xk0VVI/kPA7D8ebsu05tPdRhdEgww//PqEtd1P/AS0e9xcNlPcAeO06I v8rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895139; x=1719499939; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=inCgtKfHc5T0FMjikFwxW/MC3LMHDrydzTA6wxZFvbk=; b=u+CziKsXM8ains+8FoanZJwaIIrlg2Sb4q5sw/PnIYU73GMbbEvT+w3Ew3ZZUu4WKR BWn25pc7ZKkxGKXbSBONjKTYMLKtl+ziWHJ4cYkyiKTi6BVyiHXCn8aFQd72wRQNEB2i baF48/Y4qKzFjixlmxs12i58ZBiHcELF4DmO3RxuXmATvLAg5mJiImWbp9tdcJIAXyt7 VULKJz60GCXX20chmkm4V+X2px39N9ZNqpIyDbY+nOgpx0QSPm5ejnVJFxonjqzq8dSE m8YBbt1N0tjCHHqIqjMM91GpsuR8DqxmNolhv2C6WqiiFJdYin0r59mnA5rg9oy75EZ/ BWPw== X-Gm-Message-State: AOJu0Yxwb90jBKaP88U1jzMzOVul9mmHq7dpCWVFU9hkadMd+7f+tyxU C/g5Wgu/mZx5v1vGZNTSLWlAj13v5GDVu3OwB/GhpgWs4ElCu9amtUB4Xg== X-Google-Smtp-Source: AGHT+IELyrsl/SSQh7UysshFcz7fVf+YPfjnaXhDmZ7jcHN+BmuSFZ0VRVcxuqX9Wwq4HufK0U4Dtw== X-Received: by 2002:a05:6808:1b14:b0:3d5:145e:36aa with SMTP id 5614622812f47-3d51b5d6383mr2836436b6e.8.1718895138775; Thu, 20 Jun 2024 07:52:18 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:18 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 32/33] qmi:gprs: Don't fail on unsupported INDICATION_REGISTER Date: Thu, 20 Jun 2024 09:51:19 -0500 Message-ID: <20240620145139.1135899-32-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Some modems (like Sierra MC7710) seemingly do not support INDICATION_REGISTER request on WDS. Do not fail gprs atom registration if so. Only indications of interest are currently used only for informational output to syslog. ofonod[1120532]: drivers/qmimodem/gprs.c:set_event_report_cb() ofonod[1120532]: drivers/qmimodem/lte.c:modify_profile_cb() ofonod[1120532]: drivers/qmimodem/gprs.c:indication_register_cb() ofonod[1120532]: indication_register_cb: 71 ofonod[1120532]: src/gprs.c:gprs_remove() atom: 0x504000022a90 ofonod[1120532]: drivers/qmimodem/gprs.c:qmi_gprs_remove() --- drivers/qmimodem/gprs.c | 8 ++++++-- drivers/qmimodem/qmi.h | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/qmimodem/gprs.c b/drivers/qmimodem/gprs.c index da7ad63c49cb..547b32059da4 100644 --- a/drivers/qmimodem/gprs.c +++ b/drivers/qmimodem/gprs.c @@ -279,8 +279,12 @@ static void indication_register_cb(struct qmi_result *result, void *user_data) DBG(""); if (qmi_result_set_error(result, &error)) { - ofono_error("indication_register_cb: %hd", error); - goto error; + ofono_error("%s: %s(%hd)", __func__, + qmi_result_get_error(result), error); + + /* Some modems do not support indications, ignore */ + if (error != QMI_ERROR_INVALID_QMI_COMMAND) + goto error; } /* diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index 966f99f114fe..db20280f9aa3 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -50,6 +50,10 @@ enum qmi_data_endpoint_type { QMI_DATA_ENDPOINT_TYPE_BAM_DMUX = 0x05, }; +enum qmi_error { + QMI_ERROR_INVALID_QMI_COMMAND = 71, +}; + typedef void (*qmi_destroy_func_t)(void *user_data); struct qmi_service; From patchwork Thu Jun 20 14:51:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13705673 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 08C3B1AE84E for ; Thu, 20 Jun 2024 14:52:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895142; cv=none; b=EgQ96GhD5Fjm63bBhmqogKn64OhauztrTdvGQG6uaDlf9JPqqLrN4w6oRZhq+Zh8tmVyynP8yXam76ZVG4jcW/4HC2vpHppB6X/xrOIYZggR/N7MPh7lngX3h8AgpQ+70QOnsvIWf/W0E6AI87WcxxxBRcW34s+E6w2nziTwgEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718895142; c=relaxed/simple; bh=u4r4Z5B8nPfLOx8kkNZYKuTGuZ/ZqXJ+XTDUWU9gmHU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pv4I2NGiuD9SkC1BzAulOohZqEE5F25r18vLMOfBVUBl/6eCFU9zaD4JuRpzyWJPM2rC2Xokg5QpQtTQXVL6GJYzc4q+ZaZ0+6Jsb8JJ4MdTHJp1b0GycwaWrLUmfcK1FTV4aZU3wNzdyw7VydU6cmRND8+yJfZHC5Fr/3xsOVY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=noz7NREL; arc=none smtp.client-ip=209.85.167.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="noz7NREL" Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3d220039bc6so496510b6e.2 for ; Thu, 20 Jun 2024 07:52:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718895140; x=1719499940; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0fhBGXltfy/mdExm/l1Sr4wjj3GAkKUjYJEb9m/uMV4=; b=noz7NRELCmfn2z2g2MRmr1fJ+nD6U7apKwUkavhxdMDfLJ4+RkxX/rmWT4RZ08dvW4 4QulcrjtM95NLa+RdDtC3q5oVP4N/HcG9KpVg3vZXx9WRCjOoFA7bQ3QzVrUdmVZmUEW fBuNNBXHLxOJgF+oVGA+RPPFEMfrHQJo/bWcWZG/ceTKJlVPG3YSYh7pCd1AesfST8Vn GeF1CDIkFLXgoIFJeDBOhpOYsby17IV6wEn7HE0xVrZpCpRQqPisqrurh88DEpaelHKg 2W/KI0ERcOqPnl/a8qJah2rFR7Lq6B+8Ak2XnJBz6itbo6K97Yx1cTO/sVmxJwy3L8dU KQ9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718895140; x=1719499940; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0fhBGXltfy/mdExm/l1Sr4wjj3GAkKUjYJEb9m/uMV4=; b=FJMp4c1gRQKK01UFlSnmdJ2+NBHsFHSRJ7+Eem+0kdtWgxPguMKijJdcz186u9L18p pg8vtb6fsxizycBfojLU2kmoOPvxthNNg6CdxOs1EDWol2aIBmXbGRavlNHpJuuPqXHW ZBlvkGHl5BD6SeWFBr5ehFpsxuu5WOMNZSJxhQAeHyfZ/d9mWZwMAYrFVnKzcSwBqgFg XJx6X2H4jVV136LTSgAQnBkLzeu6jeI+4M1K6dqlfC+id8fO+8DrbkV7uiezYt0bnq55 BvmENOF6z7zo8gqAD8ndCj9ZsPNBF+BVczE0EDLVwzEgLthiwh/Eg5ITU4e8m5omQBaa jnLA== X-Gm-Message-State: AOJu0YwBzLAQYWVTfO5r2jXefupsuXa+j4ThSKyw1+pwTobTxVKpxWGZ 6BlkARnQq9p705KA479Piqdq650p63yjNi7xphdNVtaDkMsCl3A8yyxpgQ== X-Google-Smtp-Source: AGHT+IFpVbKoT6DQgaJb9bt6p7dm0UuBHgB/ZZmwsq+vytVKkiG+rCGMeQhb0ZPZNtJ6+vRmJnR9Sg== X-Received: by 2002:a05:6808:128b:b0:3d5:1f50:188b with SMTP id 5614622812f47-3d51f502960mr5508374b6e.23.1718895140056; Thu, 20 Jun 2024 07:52:20 -0700 (PDT) Received: from localhost.localdomain (syn-070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d2476069ffsm2510209b6e.13.2024.06.20.07.52.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 07:52:19 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v3 33/33] qmi: non-premultiplexed MHI devices Date: Thu, 20 Jun 2024 09:51:20 -0500 Message-ID: <20240620145139.1135899-33-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240620145139.1135899-1-denkenz@gmail.com> References: <20240620145139.1135899-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 MHI devices by default create a single main interface and support a single bearer over it. However, this requires a WDS Bind Data Mux command to be issued with 'mux_id' 0. Update the qmi gprs_context atom driver to support multiple arguments, one of them being the mux_id and the other being the WDS service lightweight handle. If mux_id is -1, then the WDS Bind Data Mux command is skipped. Update gobi and qrtrqmi drivers to the new API. --- drivers/qmimodem/gprs-context.c | 15 ++++++++------- plugins/gobi.c | 4 ++-- plugins/qrtrqmi.c | 9 ++++++++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/qmimodem/gprs-context.c b/drivers/qmimodem/gprs-context.c index aae058f35a9b..3c18476142ea 100644 --- a/drivers/qmimodem/gprs-context.c +++ b/drivers/qmimodem/gprs-context.c @@ -550,16 +550,17 @@ static int qmi_gprs_context_bind_mux(struct ofono_gprs_context *gc, return -EIO; } -static int qmi_gprs_context_probe(struct ofono_gprs_context *gc, - unsigned int vendor, void *user_data) +static int qmi_gprs_context_probev(struct ofono_gprs_context *gc, + unsigned int vendor, va_list args) { - struct qmi_service *wds = user_data; + int mux_id = va_arg(args, int); + struct qmi_service *wds = va_arg(args, struct qmi_service *); struct gprs_context_data *data; DBG(""); - if (vendor) { - int r = qmi_gprs_context_bind_mux(gc, wds, vendor); + if (mux_id != -1) { + int r = qmi_gprs_context_bind_mux(gc, wds, mux_id); if (r < 0) { qmi_service_free(wds); @@ -569,7 +570,7 @@ static int qmi_gprs_context_probe(struct ofono_gprs_context *gc, data = l_new(struct gprs_context_data, 1); data->wds = wds; - data->mux_id = vendor; + data->mux_id = mux_id; qmi_service_register(data->wds, QMI_WDS_PACKET_SERVICE_STATUS, pkt_status_notify, gc, NULL); @@ -593,7 +594,7 @@ static void qmi_gprs_context_remove(struct ofono_gprs_context *gc) static const struct ofono_gprs_context_driver driver = { .flags = OFONO_ATOM_DRIVER_FLAG_REGISTER_ON_PROBE, - .probe = qmi_gprs_context_probe, + .probev = qmi_gprs_context_probev, .remove = qmi_gprs_context_remove, .activate_primary = qmi_activate_primary, .deactivate_primary = qmi_deactivate_primary, diff --git a/plugins/gobi.c b/plugins/gobi.c index 128874f12cfa..e25807753e20 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -762,7 +762,7 @@ static void gobi_setup_gprs(struct ofono_modem *modem) if (n_premux == 0) { interface = ofono_modem_get_string(modem, "NetworkInterface"); - gc = ofono_gprs_context_create(modem, 0, "qmimodem", + gc = ofono_gprs_context_create(modem, 0, "qmimodem", -1, qmi_service_clone(data->wds)); if (!gc) { ofono_warn("Unable to create gprs-context for: %s", @@ -788,7 +788,7 @@ static void gobi_setup_gprs(struct ofono_modem *modem) sprintf(buf, "PremuxInterface%dMuxId", i + 1); mux_id = ofono_modem_get_integer(modem, buf); - gc = ofono_gprs_context_create(modem, mux_id, "qmimodem", + gc = ofono_gprs_context_create(modem, 0, "qmimodem", mux_id, qmi_service_clone(data->wds)); if (!gc) { diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index cf04d05f65cc..4117cac11423 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -315,7 +315,7 @@ static int setup_gprs_context(uint8_t mux_id, const char *interface, struct qmi_qrtr_node *node = data->node; struct ofono_gprs_context *gc; - gc = ofono_gprs_context_create(modem, 0, "qmimodem", + gc = ofono_gprs_context_create(modem, 0, "qmimodem", mux_id, qmi_qrtr_node_get_service(node, QMI_SERVICE_WDS)); if (!gc) { ofono_warn("Unable to create gprs-context for: %s, %s[%u]", @@ -347,6 +347,13 @@ static void setup_gprs(struct ofono_modem *modem) return; } + /* Upstream driver default, single interface, single context */ + if (!n_premux) { + interface = ofono_modem_get_string(modem, "NetworkInterface"); + setup_gprs_context(0, interface, gprs); + return; + } + for (i = 0; i < n_premux; i++) { int mux_id;