From patchwork Tue Jun 25 16:41:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711614 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (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 58B0513B2B0 for ; Tue, 25 Jun 2024 16:42:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333723; cv=none; b=mT41ohoKDavWg2qvQJXBwi4q+Lx1gYficzAGwJiwi51ksX5ETBUWWCpTpE18frr1RHhFhebUD0SLTDbnv4bOFtXgsP83cTJYtO8AL9dQcU8y+VFlnLgETOIUz1eVcY5mhHxolgtqYrDU2XSjveRspMV5NpfEDmAMpUTx7cT7phQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333723; c=relaxed/simple; bh=Xo2CMnnhdZCjUQ8KD72oaOqWYOQkHwkLUt1WR6/X6fs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Wnb6X4FFf3Fu74v0IuzvG+VPLMNEbI3oo9KQlmBpWjrcix6iWpUrPuED2wWyyYcTezoJRqJLGVL4hrhY+Bggrm1pdNga/Y+ZSPaHz5Hp4bFPjkNtnqoBFXV2eDfywC9BDlvF4zdcMEkCmb8oQQao34p3qsB3Km6RB7sdVMJTAl8= 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=AqiEGlTL; arc=none smtp.client-ip=209.85.210.52 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="AqiEGlTL" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-700cc366e0dso283545a34.2 for ; Tue, 25 Jun 2024 09:42:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333721; x=1719938521; 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=qoQMBeoAJX2jdeuccsEmvFoUIEAC93FlI9juVRlE0Zo=; b=AqiEGlTLKPZ84N1whJQSOmaYHcG9jsgEeKK8GqgWYdW6Gf3qCvcSbURPq/QO3OCBd8 hv0k+8LDNvt+XshtQf2yP6esHVx0ftpM7fynO46oOPzKjrlPlzfASkaQ/OTAxoShynkB LV2fEWsk3D7bfOWzv+EaYzbJgkiZddzcXkQ2wD9+xNe0y0k9sfFKKCEEAhQO8H49+gXV UUS76ks0+2f9CtRJxpsTUOnBGmBnIN7YF18j1egBLx6lk7cAjzy5FcQkGvn75h3LiwGQ jseI5Ejw1/LPhYprrfpybWQDD/WDgYYh+aOpQwe4B+PD9Q8WuMPHmN8FyxDFRLx3Opoz 4V/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333721; x=1719938521; 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=qoQMBeoAJX2jdeuccsEmvFoUIEAC93FlI9juVRlE0Zo=; b=KXEbRAeBd8WeLEHKG/UnMtOeMf69uoFSbZfYB+ZQp1eOZOFUjKLAgA1ct+s0eGvijC yjs8phmzvth6EJ9ShSgD2VKi2MG+GJvst6bReIwI6Tq7jrPcAjgvXrnUONG7CyiWz76k IqXDgqha/ot/USlIFje14hnLA3qQhgIW38KNHAWcJ2HKji1iiJRYLZKGJzNcFxbwmj3z okj3atra19ve+4PEbLqCMu2RcgpZk4E9aJX7ROwqT64Q6g9j0uMtfcfg9e7ckjyxjDgS OsM+8/RjeecLB+duUcQOQRqIQbaplN9fnf/fTicBpymezRHl9HiicO2qcaTumlOjWT4Z NLmw== X-Gm-Message-State: AOJu0Yzm2fKVdi4LldZ0PFmRcKWdldIP21C0W+Fvy48rC5LH8KqekjSl WkDvrN6n9r3LXQ3wMp2KCqi/gSxEQSp1vrwv84PHI4a4eiI2Zodrgp7yxw== X-Google-Smtp-Source: AGHT+IEmapcaLCyQaZTXkaZlYp8iR0gRr1iPwaL2mZ6idlSuDooUIUgl+EEv1Y40EXAxs5cm6iIvGg== X-Received: by 2002:a05:6830:22e7:b0:700:a962:ad17 with SMTP id 46e09a7af769-700b1201662mr8581918a34.16.1719333721199; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:00 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 01/14] qmi: Introduce SERVICE_VERSION macro Date: Tue, 25 Jun 2024 11:41:37 -0500 Message-ID: <20240625164158.1170937-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 will make it easier to compare service major.minor versions in a more readable manner. --- drivers/qmimodem/qmi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index e3a8b225140f..5f29c4384803 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -36,6 +36,9 @@ l_util_debug((debug)->func, (debug)->user_data, "%s:%i " fmt, \ __func__, __LINE__, ## args) +#define SERVICE_VERSION(major, minor) \ + (((major) << 16) | (minor)) + struct qmi_device; struct qmi_request; @@ -1199,6 +1202,7 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, const void *ptr; uint16_t len; unsigned int i; + uint32_t control_version = 0; result_code = tlv_get(buffer, length, 0x02, &len); if (!result_code) @@ -1233,6 +1237,7 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, if (type == QMI_SERVICE_CONTROL) { qmux->control_major = major; qmux->control_minor = minor; + control_version = SERVICE_VERSION(major, minor); continue; } @@ -1257,8 +1262,7 @@ done: * 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) { + if (control_version >= SERVICE_VERSION(1, 5)) { struct qmi_request *req = __control_request_alloc(QMI_CTL_SYNC, NULL, 0, 0); From patchwork Tue Jun 25 16:41:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711615 Received: from mail-oo1-f53.google.com (mail-oo1-f53.google.com [209.85.161.53]) (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 301A2171E75 for ; Tue, 25 Jun 2024 16:42:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333724; cv=none; b=tUUXDx+q7xcWb6DbHQoH2VyOoQLZRchej1eKEykrFklW+vQcbQCnYJnCkfztaPNDn+ZiKN11/p3XHJ+lObzmcJZLwhixdpaHUNeRnWnKpyyTJQgD0juBygCZcAIeH3t9+pD/ANpo97RFdI9P7R90AWmZ2hjZrtT9/r0CTtRjzL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333724; c=relaxed/simple; bh=dbqjMrjUQTfCTyD3Ho8KYPphw9aERUYXc7ogkqsrMf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m4qph8nnmt6hnyaWXmWp0a+U6Vw4dIFaDc7lkMFnBlZmWzhoovHjCWV9p/S42bWlBoCDmNuNKZBKyKyTHbIOCZvgG4sYYG9CZ/Au5o5JENkOu3Y8RXgzmLaPvxZEwJY9qVgeWqfgQQzwovv9x8gGvQjU8hxwrg26XxBstcsvlBQ= 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=BU2USQjs; arc=none smtp.client-ip=209.85.161.53 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="BU2USQjs" Received: by mail-oo1-f53.google.com with SMTP id 006d021491bc7-5b970e90ab8so3249805eaf.3 for ; Tue, 25 Jun 2024 09:42:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333722; x=1719938522; 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=INYROVZP49t7Kd5s53aJh9lmOKM9To7nJkG2blZxgp8=; b=BU2USQjsgPM9z0FSfq/SBE+sz2gkyy1j6WA0srNBJClHNVR8aR2pPbZQ7QgzOh0qVO N6OD/AjuU8f6BDyspt5LFNwMfjnKKn+RNYLniuEWc3wh1SE4u8BGOmbpSAGbG8ihuCAn CAimg31cO4mgzSmnZAZNB8+Kf6B9oo81gkHVLP3q/gQ4RYOnBY7i2kf/0D0DNDC07FSo pinr1c4jBFPw9GbosXNPNhWghreGorzKPWZiGLG968rxz096ABo2J31R2Ve1XJgqGnG6 jdh5rNA3WM+rgeAegKQEE/qb2wsPFX6AYRKwrQzUq8N6E8hkBaAxHyUU118RhLN8ibla FVcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333722; x=1719938522; 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=INYROVZP49t7Kd5s53aJh9lmOKM9To7nJkG2blZxgp8=; b=i0cswi9FmUt1ZrQGWJLric8ZHOWZncVAZLNAi1RD2/8beGAkmp55+4doRVcx8PJRBw kegMiZcvxC8JRFvu52V2hqY1Ct07CAp04+hkQi50ZEqfAxCv339To88ce5HocQd2JZ4L XetLMwnLA1I8Qxjvkk8NApojI4G26g53yw1WAQoxHzumWffaw6haL1xQsQ3eK+ed5g9l D9aLqo1V4ffxst+SMFU+xgrBn6K54KNuoYnfR1qNeJNKyKkz9tddnWBz66yFWBqJJyk6 jIGWMd1xmuFYhjXCBck58qsu/4nUcsI2idxZt4ZMtii6h+09YtxzKg3si668rmjn8TYW Cppg== X-Gm-Message-State: AOJu0Yy5gqnlpNJEfnDQ6hI5GHnCG/fVzvfDO9mRbghc3LlTcLpqracs F9m54ekw8dN71lLte3+i/R9ZLDJYZr2DYVcTyNledSY6U4LDtliIdXjwTA== X-Google-Smtp-Source: AGHT+IEWcHk6lbrzobrKdIvFQJ4QRCGupY7zqAMSebvCcT+AFYwv9OY62G/ndDWHdqLPw4QsI8xyrQ== X-Received: by 2002:a4a:6811:0:b0:5ba:ec8b:44b5 with SMTP id 006d021491bc7-5c1eec2b3fdmr7907479eaf.3.1719333721951; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:01 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 02/14] qmi: Remove control_major and control_minor Date: Tue, 25 Jun 2024 11:41:38 -0500 Message-ID: <20240625164158.1170937-2-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 These attributes are no longer used, remove them. --- drivers/qmimodem/qmi.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 5f29c4384803..238039d4add7 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -100,8 +100,6 @@ struct qmi_device { struct qmi_qmux_device { struct qmi_device super; - uint16_t control_major; - uint16_t control_minor; char *version_str; struct debug_data debug; struct { @@ -1235,8 +1233,6 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, type, major, minor); if (type == QMI_SERVICE_CONTROL) { - qmux->control_major = major; - qmux->control_minor = minor; control_version = SERVICE_VERSION(major, minor); continue; } From patchwork Tue Jun 25 16:41:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711616 Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) (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 C5748173324 for ; Tue, 25 Jun 2024 16:42:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333725; cv=none; b=BuI+En7pnlBA2HL8Muk1rGGxb0gftaVWOsRhXGHVd9kU3RFkFicON51w7cxhXlrleJsCnv1aB2JNv9rv7XY7lj8YAaOoAYnCGk51dPgv5fIu++9LB/YYSqYQw0+fAtmrhe8Q5+s4zhUWY0xF/JRX2n/o8NAh0wndkIUXO/l4zFo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333725; c=relaxed/simple; bh=1+sQ9K8OPFNJBbvDYPpjxVlqqc6+2sxYzZRnuyh8aAg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rgutUOR+76ptVbmpAu+seuik6xJO9ilt6fewtS42KNZu5DoSmZkbxr8UFWPJITRMUsrOUuz8QlLG9ookg23BPjUuR9mxdVuxxIriLzqMjpTdo1zH5XmCFlKHlCUnGqpdG01zK0nC2zEMgNzBEhGVwhCmN3S2YvVD3HaspjsX+nM= 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=h3QgcVxp; arc=none smtp.client-ip=209.85.210.46 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="h3QgcVxp" Received: by mail-ot1-f46.google.com with SMTP id 46e09a7af769-700cc388839so341867a34.0 for ; Tue, 25 Jun 2024 09:42:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333723; x=1719938523; 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=psw16ttjtER33796PhTeXerRJsahRiSzkaP+NSpJRiU=; b=h3QgcVxpn5OA/6QZrBsQCK+zJYDoANaOtqtsHeU+TVjp6OYMOWNVwgElFAnWzmSpph nObR5tvqoOZMamBT41zmskAeDsnGsPPGGarA5LAg9L0Zj/r9Cnm7OQ2WjJekv5qtsxqX jwNdmzhmPawWrQ3abC2aHI+4jemf0un4culXGBxZGjJrr1jBUfC0j+Y8ytK7bJadIJq5 sh3tJhCWtwEmlN0gUgXvBOEuorT+2w3gbQySZugXNN+P6HqlHW/5Fb4FKtRVDdYVYstu UU+tK+0MYD8nv3dp4izRJ113+cvs6zdCa0Ig/sownLTdL8ctYnLtUTL8NoPceJvCh5cl wXYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333723; x=1719938523; 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=psw16ttjtER33796PhTeXerRJsahRiSzkaP+NSpJRiU=; b=Va5+zvz/L/7cdlbF4zV2wP5PxNa778rF5UkMbc0WgUmMLlaMfUTgaUnpbmN2AmH59Q JS1I2xaWJxhBVmAfrYol64Rjsf2iTustZrGDb9q+nuVHmw3mTB+dTAJqtMlBzyKHybc/ 9HM1eOmP3ChaxGenQzqS3aDPNhbuR1m8jbrfvxrrtbSB+6YEHZ8t33hbkjp2qsQTE34T xyFmVrOlDoKoJAQqt+dUgLsL93QyeofUJ0wUqmkQGWaTOnymPm/iMJvV8/BuRQ9s757g OInw5ZZU1JEzl41Pa6EyVo8jZiDIK1bhr8PSfVD4Wma6KFaHS8sPn55e7eLU7GD035gf pi+Q== X-Gm-Message-State: AOJu0YxKsoAVZcY6Afwy5+8H6IQxhFCGq2lxJZoMElFk2C+bSecltzZt D3Ie8kbjDXwkzR2oOfxq7HpLiL06hmU2n3Tm3sta9BLMTaIkF5g9luyqiQ== X-Google-Smtp-Source: AGHT+IG6gsmhKtJt4IcWoOO6A6yFyOhwlsJsb/tB2OwQGIJadT73/VkvMxYTX1tnU5YvHENFepe20A== X-Received: by 2002:a05:6830:16c1:b0:6fb:8411:2f16 with SMTP id 46e09a7af769-700afa4b5abmr8717409a34.31.1719333722739; Tue, 25 Jun 2024 09:42:02 -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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:02 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 03/14] qmi: Move service_handle allocation to service_family Date: Tue, 25 Jun 2024 11:41:39 -0500 Message-ID: <20240625164158.1170937-3-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 A unique service handle identifiers is allocated every time a new service is created. The unique identifier is generated by qmi_device and is monotonically increasing. qmi_device has now been completely refactored out of the public API and only remains as an implementation detail. It is desirable to remove it and transform it into a QMI transport abstraction. As a first step, remove service handle id allocation from struct qmi_device and move it into struct service_family instead. As a consequence, ensure that when a request is canceled, compare both the service_handle and the service_family group_id since both are required to identify that a request belongs to a particular service. As a side effect, lightweight service handles are now not able to accidentally cancel (by tid) requests they do not own. --- drivers/qmimodem/qmi.c | 65 +++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 238039d4add7..828f62584ea0 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -90,7 +90,6 @@ struct qmi_device { struct l_queue *req_queue; struct l_queue *service_queue; unsigned int next_group_id; /* Matches requests with services */ - unsigned int next_service_handle; uint16_t next_service_tid; struct l_queue *service_infos; struct l_hashmap *family_list; @@ -129,6 +128,7 @@ struct service_family { unsigned int group_id; uint8_t client_id; uint16_t next_notify_id; + unsigned int next_service_handle; struct l_queue *notify_list; }; @@ -1140,14 +1140,13 @@ static struct service_family *service_family_create(struct qmi_device *device, static struct qmi_service *service_create(struct service_family *family) { - struct qmi_device *device = family->device; struct qmi_service *service; - if (device->next_service_handle == 0) /* 0 is reserved for control */ - device->next_service_handle = 1; + if (family->next_service_handle == 0) /* 0 is reserved for control */ + family->next_service_handle = 1; service = l_new(struct qmi_service, 1); - service->handle = device->next_service_handle++; + service->handle = family->next_service_handle++; service->family = service_family_ref(family); return service; @@ -2349,11 +2348,32 @@ uint16_t qmi_service_send(struct qmi_service *service, return __service_request_submit(device, service, &sreq->super); } +struct request_lookup { + uint16_t tid; + unsigned int service_handle; + unsigned int group_id; +}; + +static bool __request_compare_for_cancel(const void *a, const void *b) +{ + const struct qmi_request *req = a; + const struct request_lookup *lookup = b; + + if (req->service_handle != lookup->service_handle) + return false; + + if (req->group_id != lookup->group_id) + return false; + + return req->tid == lookup->tid; +} + bool qmi_service_cancel(struct qmi_service *service, uint16_t id) { struct qmi_device *device; struct qmi_request *req; struct service_family *family; + struct request_lookup lookup = { .tid = id }; if (!service || !id) return false; @@ -2367,12 +2387,15 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) if (!device) return false; - req = l_queue_remove_if(device->req_queue, __request_compare, - L_UINT_TO_PTR(id)); + lookup.group_id = family->group_id; + lookup.service_handle = service->handle; + + req = l_queue_remove_if(device->req_queue, __request_compare_for_cancel, + &lookup); if (!req) { req = l_queue_remove_if(device->service_queue, - __request_compare, - L_UINT_TO_PTR(id)); + __request_compare_for_cancel, + &lookup); if (!req) return false; } @@ -2385,9 +2408,12 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) static bool remove_req_if_match(void *data, void *user_data) { struct qmi_request *req = data; - unsigned int service_handle = L_PTR_TO_UINT(user_data); + struct request_lookup *lookup = user_data; - if (req->service_handle != service_handle) + if (req->service_handle != lookup->service_handle) + return false; + + if (req->group_id != lookup->group_id) return false; __request_free(req); @@ -2395,10 +2421,15 @@ static bool remove_req_if_match(void *data, void *user_data) return true; } -static void remove_client(struct l_queue *queue, unsigned int service_handle) +static void remove_client(struct l_queue *queue, unsigned int group_id, + unsigned int service_handle) { - l_queue_foreach_remove(queue, remove_req_if_match, - L_UINT_TO_PTR(service_handle)); + struct request_lookup lookup = { + .group_id = group_id, + .service_handle = service_handle, + }; + + l_queue_foreach_remove(queue, remove_req_if_match, &lookup); } static bool qmi_service_cancel_all(struct qmi_service *service) @@ -2415,8 +2446,10 @@ static bool qmi_service_cancel_all(struct qmi_service *service) if (!device) return false; - remove_client(device->req_queue, service->handle); - remove_client(device->service_queue, service->handle); + remove_client(device->req_queue, + service->family->group_id, service->handle); + remove_client(device->service_queue, + service->family->group_id, service->handle); return true; } From patchwork Tue Jun 25 16:41:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711617 Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.51]) (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 A586D17334B for ; Tue, 25 Jun 2024 16:42:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333726; cv=none; b=N7/qpqzs5R4j7qzi+XnrI8IIAEZxoXlcjkzV+v/pk1qwNhV7Lw7XS+vs2WDusJmMbNpk8DjKSUD/2X39gpSK3r162crejXXoz8OaV7NqT+RtGEjNfDaBxTECOMQ00aAQ9GGLJbe+t4lF5xJyFk2qDt7QC88St0Cc0hJGQv4mzVI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333726; c=relaxed/simple; bh=x3lulOVynjNZfS6qC1lx4Kq8eCSVP0h4tOyBr2qglqQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ubd27E1oYfuCy7pd5RO2HUPPOZYLhIrrj6U0KJyLIRVuKDQ6m93ffnzXp/dUd1WhtlukAZFx/R0coUZCxZ9bi19T8Orej9QLdoXSxlG4dFvOr/yfMWnnQE2YbrPkS7drT5hu3m0csek19JzVqkVYjFv+NOSkCZsSEzg0CMoQBtQ= 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=RWJgoaCY; arc=none smtp.client-ip=209.85.161.51 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="RWJgoaCY" Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-5b9776123a3so2577827eaf.0 for ; Tue, 25 Jun 2024 09:42:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333723; x=1719938523; 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=sMFARyTsy6XXkj+xUBaXbSXxxujjadb8XkGI0ICr1Z8=; b=RWJgoaCYwTQpFW+rvrUCcnlse9XEsu935uPAh7GFVJLBbOfbH/IwWIG81Uv1HZoBfB ZL5AAHGzYj3epJIRRw/zeiQQJ/WpyDYeDxJqSYRYmEjAoYyTbF0kK2YUex8P4Tre+zIq YzJVjaQ6pU52C1O3jwOl9d7A/IrAB48cFyTadcoAcGOQdxoXFo87McXNrYlVqrofH5xM 5Ew3vTWvn+0/aHpUNngiDMJZal9EOXcS49DJ2nRp70H0g8VrpwvvIPrB922Y7LnUybeQ 0V3rF4hNFpV+8J+x1Lxv4ScqHFpxI0CbKybpkrkZ2UTkkcK3jdkg2ZR/zQfh9TwVnJw5 ItvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333723; x=1719938523; 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=sMFARyTsy6XXkj+xUBaXbSXxxujjadb8XkGI0ICr1Z8=; b=lKZjTD51uLRAlTeb0bx35MD5sQoKXzZlI5hHW6N5ubHw5nPt4Gx9cXPESKg16sH7YW IE8O1lKV+MFs4xnV2s0RDJucvc1n/s3dO+eEEBV+dMnAceygu9FVYoi/cn2Nv3YL3C0Q JiNtMLKyCb//pfUsGIsAzDmGDbE6Fm6wv2gpENxTLaDFCNw34ohUbh+ZoFaXtk9T08nb mPyG7CrsHFT/r2Neesn+6jfqKELmEyw+pi/TC7026eIjQHppc2R+ti8/S2OqbHUz1Av5 zEOUj0jjKa4wqJStVqWRmaW+CChzZc3qnmSwiZwQKb1ulpPp/OKfqY0qTTKPtWfMy+LK ZFZA== X-Gm-Message-State: AOJu0YyFqnOgL2GgaQI/rb/BvC+rxFfIBIok30vzKSwK+XCvoY1kZlqC HevkzQOufNPc6x9zmj34izg9m9nIqyEn3ZNiUt6+wkEjLM1/qYVKMIgayw== X-Google-Smtp-Source: AGHT+IEgpUOH7AYuD2vX4S6r0x2jJHWi8qWsArXY/qyWWdTjM20cQb26qW4v3c1WxXKpxZMP79cCDg== X-Received: by 2002:a4a:85c1:0:b0:5c1:bdf5:df22 with SMTP id 006d021491bc7-5c1eecf1addmr7654882eaf.4.1719333723450; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:03 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 04/14] qmi: Move group id allocation out of qmi_device Date: Tue, 25 Jun 2024 11:41:40 -0500 Message-ID: <20240625164158.1170937-4-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 As another step of removing qmi_device vestiges, move group_id allocation into qmi_qrtr_node and qmi_qmux_device classes. --- drivers/qmimodem/qmi.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 828f62584ea0..2095a952fffd 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -89,7 +89,6 @@ struct qmi_device { struct l_io *io; struct l_queue *req_queue; struct l_queue *service_queue; - unsigned int next_group_id; /* Matches requests with services */ uint16_t next_service_tid; struct l_queue *service_infos; struct l_hashmap *family_list; @@ -116,6 +115,7 @@ struct qmi_qmux_device { unsigned int release_users; } shutdown; uint8_t next_control_tid; + unsigned int next_group_id; /* Matches requests with services */ struct l_queue *control_queue; bool shutting_down : 1; bool destroyed : 1; @@ -194,6 +194,14 @@ struct qmi_tlv_hdr { } __attribute__ ((packed)); #define QMI_TLV_HDR_SIZE 3 +static unsigned int next_id(unsigned int *id) +{ + if (*id == 0) /* 0 is reserved for control */ + *id = 1; + + return *id++; +} + static bool qmi_service_info_matches(const void *data, const void *user) { const struct qmi_service_info *info = data; @@ -1119,6 +1127,7 @@ static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, } static struct service_family *service_family_create(struct qmi_device *device, + unsigned int group_id, const struct qmi_service_info *info, uint8_t client_id) { struct service_family *family = l_new(struct service_family, 1); @@ -1127,12 +1136,7 @@ static struct service_family *service_family_create(struct qmi_device *device, family->device = device; family->client_id = client_id; family->notify_list = l_queue_new(); - - if (device->next_group_id == 0) /* 0 is reserved for control */ - device->next_group_id = 1; - - family->group_id = device->next_group_id++; - + family->group_id = group_id; memcpy(&family->info, info, sizeof(family->info)); return family; @@ -1397,7 +1401,9 @@ static void qmux_create_client_callback(struct qmi_request *r, info.major = req->major; info.minor = req->minor; - family = service_family_create(&qmux->super, &info, client_id->client); + family = service_family_create(&qmux->super, + next_id(&qmux->next_group_id), + &info, client_id->client); DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", family->client_id, family->info.service_type); @@ -1614,6 +1620,7 @@ void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, struct qmi_qrtr_node { struct qmi_device super; + unsigned int next_group_id; /* Matches requests with services */ struct debug_data debug; struct { qmi_qrtr_node_lookup_done_func_t func; @@ -1954,7 +1961,8 @@ struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, if (!info) return NULL; - family = service_family_create(device, info, 0); + family = service_family_create(device, next_id(&node->next_group_id), + info, 0); l_hashmap_insert(device->family_list, L_UINT_TO_PTR(type), family); done: return service_create(family); From patchwork Tue Jun 25 16:41:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711618 Received: from mail-ot1-f44.google.com (mail-ot1-f44.google.com [209.85.210.44]) (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 388B417334B for ; Tue, 25 Jun 2024 16:42:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333728; cv=none; b=UiA+LhlszRmF0chmRACdcuUvWBpoY0PTGg71IFv+RX3SIvBUq0e0KG+dM0fq64mbDLGzJVysSCgT20s0o2YzD5C3uYLD9KllW3U6+ZjOjNrTW9xa5LettS3TBbgtyBntLPLHFTSbOdaciS8KM+x24CxyHMVx+c6kz9/65MnxvVE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333728; c=relaxed/simple; bh=Y6pk/Epc+DnYPENa/ALKt7JWYOnYzQLreTucHf93GOQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PQVmRdhm3kZK6vBYNE+czMtJnf5FVNKZzHrFT+64OLEh5xyRyyd0lUvr2c013tFsjxCtmxbfEBTtkwLMcmydMBNZyuIXOhWMd8T81sNt/cKKdRBg4sYfnBbcnSuUvSLBp4fFfAic1l2QBn0AqQzDXMtL+LSe5gbVTxWQjmjFHVc= 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=UuJtllTY; arc=none smtp.client-ip=209.85.210.44 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="UuJtllTY" Received: by mail-ot1-f44.google.com with SMTP id 46e09a7af769-70024655285so3405580a34.0 for ; Tue, 25 Jun 2024 09:42:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333726; x=1719938526; 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=PKlhb3KKjn5rkdS+78jiw2gNekNCU7VOTiVTG5mkm9U=; b=UuJtllTYxRQGbzUnkQK9UfCPHYIMUF1iltXf0kejsSp+SwFSzwh1tv04w+DGBprKc9 lRViic9NFFNqGwmL/Q2FbXq9ZocQN/wFiK85ibnkJm/RMNyVYPwQL4ojXnrc8kJv6Zjl Ri466gV/TrMHEY4DPQJmEu+bWZPAe2Vz4oau8G9rplX/4lOdtuwreCDcV9SN7bKk6dc7 3cJ7ZgoZy8ErfmBy4x5vFXxQjzCAKKRWz46nX+SH0xlZdxaBzw76eCzchEBeCsPOptsj m/wVqI4OGS6aInm9tZzPWlwFqvtkorSasInyk7k80vQcGwYkgWrJt4X92YhzwV/t2jo4 gJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333726; x=1719938526; 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=PKlhb3KKjn5rkdS+78jiw2gNekNCU7VOTiVTG5mkm9U=; b=UkJBsKYl4wwlx/G3Bu5DMmVn5eCOp2SUcYP1ejOYjYIrntbMpFDjTGKm8YJRwwpIAT BD9un/s+n0HEGayDuFsZ/KbOG9Yms+zJSuaI4QcfcoCQuEvhsdLWAX+1vZ+fRhk6ZEwG uZ+7ZAB3ZyEOFaXna+NQXRK/IZCDGQJEmNMbXqPojPmKxudnsky9blxRQPhuewOWSODF VZwMN7h8XF91bIFO6o5cEDRlt9quVTbGjN7a8p20JutX2kXsAB4z0HByySBETbHXiQcM ijTS1F5iXdaOUS3L8WR/5xJd/VjiJusyyScT42/VDL51/TT01Jx5njwP9cnvc7zve6/X PoeA== X-Gm-Message-State: AOJu0YwztCWcqM8RaOzVuhTOTQbkoYdiCqTaXwNi9G/VYg6xG2h8JfnI k9NoNfrB4ccrlcUQ9ZPQ0MeDVL8jMXM7iIhQvKwL9tQyrltceLRxZIreLA== X-Google-Smtp-Source: AGHT+IF44mx8ThC9+nxOlbltV1ZWwGeqA2CzNv9NuiseVG250ho6Jj+DiVMGB5GgS5XpNx2dzep/kw== X-Received: by 2002:a05:6830:120f:b0:700:cc10:6622 with SMTP id 46e09a7af769-700cc106639mr1263419a34.25.1719333724225; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:03 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 05/14] qmi: Move service_info management into qrtr/qmux Date: Tue, 25 Jun 2024 11:41:41 -0500 Message-ID: <20240625164158.1170937-5-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Break out service_info management from struct qmi_device into qrtr and qmux classes. This allows to optimize how service info is managed slightly: - On QMUX, the list is static and obtained during discovery. An array can be used instead of a linked list. Certain comparisons which are only relevant for QRTR can be skipped. - QRTR behavior remains the same. --- drivers/qmimodem/qmi.c | 103 +++++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 44 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 2095a952fffd..59a50eabeb2b 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -90,7 +90,6 @@ struct qmi_device { struct l_queue *req_queue; struct l_queue *service_queue; uint16_t next_service_tid; - struct l_queue *service_infos; struct l_hashmap *family_list; const struct qmi_device_ops *ops; bool writer_active : 1; @@ -98,6 +97,8 @@ struct qmi_device { struct qmi_qmux_device { struct qmi_device super; + struct qmi_service_info *service_list; + uint16_t n_services; char *version_str; struct debug_data debug; struct { @@ -219,16 +220,6 @@ static bool qmi_service_info_matches(const void *data, const void *user) return true; } -static void __qmi_service_appeared(struct qmi_device *device, - const struct qmi_service_info *info) -{ - if (l_queue_find(device->service_infos, qmi_service_info_matches, info)) - return; - - l_queue_push_tail(device->service_infos, - l_memdup(info, sizeof(struct qmi_service_info))); -} - static void *__request_alloc(uint32_t service_type, uint8_t client, uint16_t message, const void *data, uint16_t length, @@ -843,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->service_infos = l_queue_new(); device->family_list = l_hashmap_new(); device->next_service_tid = 256; @@ -861,8 +851,6 @@ static void __qmi_device_free(struct qmi_device *device) l_io_destroy(device->io); l_hashmap_destroy(device->family_list, family_destroy); - - l_queue_destroy(device->service_infos, l_free); } void qmi_result_print_tlvs(struct qmi_result *result) @@ -905,23 +893,17 @@ static const void *tlv_get(const void *data, uint16_t size, return NULL; } -static const struct qmi_service_info *__find_service_info_by_type( - struct qmi_device *device, uint16_t type) +static const struct qmi_service_info *__qmux_service_info_find( + struct qmi_qmux_device *qmux, uint16_t type) { - const struct qmi_service_info *info = NULL; - const struct l_queue_entry *entry; - - for (entry = l_queue_get_entries(device->service_infos); - entry; entry = entry->next) { - struct qmi_service_info *data = entry->data; + unsigned int i; - if (data->service_type == type) { - info = data; - break; - } + for (i = 0; i < qmux->n_services; i++) { + if (qmux->service_list[i].service_type == type) + return qmux->service_list + i; } - return info; + return NULL; } bool qmi_qmux_device_get_service_version(struct qmi_qmux_device *qmux, @@ -933,7 +915,7 @@ bool qmi_qmux_device_get_service_version(struct qmi_qmux_device *qmux, if (!qmux) return false; - info = __find_service_info_by_type(&qmux->super, type); + info = __qmux_service_info_find(qmux, type); if (!info) return false; @@ -947,7 +929,7 @@ bool qmi_qmux_device_has_service(struct qmi_qmux_device *qmux, uint16_t type) if (!qmux) return false; - return __find_service_info_by_type(&qmux->super, type); + return __qmux_service_info_find(qmux, type); } static int qmi_qmux_device_write(struct qmi_device *device, @@ -1197,7 +1179,6 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, uint16_t length, const void *buffer) { 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; const void *ptr; @@ -1219,6 +1200,13 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, if (len < QMI_SERVICE_LIST_SIZE) goto done; + if (!service_list->count) + goto done; + + l_free(qmux->service_list); + qmux->n_services = 0; + qmux->service_list = l_new(struct qmi_service_info, service_list->count); + for (i = 0; i < service_list->count; i++) { uint16_t major = L_LE16_TO_CPU(service_list->services[i].major); @@ -1226,7 +1214,6 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, L_LE16_TO_CPU(service_list->services[i].minor); uint8_t type = service_list->services[i].type; const char *name = __service_type_to_string(type); - struct qmi_service_info info; if (name) DEBUG(&qmux->debug, "discovered service [%s %d.%d]", @@ -1240,12 +1227,10 @@ static void qmux_discover_callback(struct qmi_request *req, uint16_t message, continue; } - memset(&info, 0, sizeof(info)); - info.service_type = type; - info.major = major; - info.minor = minor; - - __qmi_service_appeared(device, &info); + qmux->service_list[qmux->n_services].service_type = type; + qmux->service_list[qmux->n_services].major = major; + qmux->service_list[qmux->n_services].minor = minor; + qmux->n_services += 1; } ptr = tlv_get(buffer, length, 0x10, &len); @@ -1304,7 +1289,7 @@ int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, DEBUG(&qmux->debug, "device %p", qmux); - if (l_queue_length(qmux->super.service_infos) > 0 || qmux->discover.tid) + if (qmux->n_services || qmux->discover.tid) return -EALREADY; req = __control_request_alloc(QMI_CTL_GET_VERSION_INFO, NULL, 0, 0); @@ -1439,7 +1424,7 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, if (service_type == QMI_SERVICE_CONTROL) return false; - info = __find_service_info_by_type(&qmux->super, service_type); + info = __qmux_service_info_find(qmux, service_type); if (!info) return false; @@ -1504,6 +1489,7 @@ static void __qmux_device_free(struct qmi_qmux_device *qmux) if (qmux->shutdown.idle) l_idle_remove(qmux->shutdown.idle); + l_free(qmux->service_list); l_free(qmux->version_str); l_free(qmux); } @@ -1621,6 +1607,7 @@ void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, struct qmi_qrtr_node { struct qmi_device super; unsigned int next_group_id; /* Matches requests with services */ + struct l_queue *service_infos; struct debug_data debug; struct { qmi_qrtr_node_lookup_done_func_t func; @@ -1630,6 +1617,32 @@ struct qmi_qrtr_node { } lookup; }; +static const struct qmi_service_info *__qrtr_service_info_find( + struct qmi_qrtr_node *node, uint16_t type) +{ + const struct l_queue_entry *entry; + + for (entry = l_queue_get_entries(node->service_infos); + entry; entry = entry->next) { + struct qmi_service_info *info = entry->data; + + if (info->service_type == type) + return info; + } + + return NULL; +} + +static void __qrtr_service_appeared(struct qmi_qrtr_node *node, + const struct qmi_service_info *info) +{ + if (l_queue_find(node->service_infos, qmi_service_info_matches, info)) + return; + + l_queue_push_tail(node->service_infos, + l_memdup(info, sizeof(struct qmi_service_info))); +} + static void __qrtr_lookup_finished(struct qmi_qrtr_node *node) { if (!node->lookup.func) { @@ -1708,7 +1721,6 @@ static void qrtr_debug_ctrl_request(const struct qrtr_ctrl_pkt *packet, static void qrtr_received_control_packet(struct qmi_qrtr_node *node, const void *buf, size_t len) { - struct qmi_device *device = &node->super; const struct qrtr_ctrl_pkt *packet = buf; struct qmi_service_info info; uint32_t cmd; @@ -1755,7 +1767,7 @@ static void qrtr_received_control_packet(struct qmi_qrtr_node *node, info.major = version; info.instance = instance; - __qmi_service_appeared(device, &info); + __qrtr_service_appeared(node, &info); if (!node->lookup.func) return; @@ -1772,7 +1784,7 @@ static void qrtr_received_service_message(struct qmi_qrtr_node *node, const struct l_queue_entry *entry; uint32_t service_type = 0; - for (entry = l_queue_get_entries(device->service_infos); + for (entry = l_queue_get_entries(node->service_infos); entry; entry = entry->next) { struct qmi_service_info *info = entry->data; @@ -1844,6 +1856,8 @@ struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node) return NULL; } + qrtr->service_infos = l_queue_new(); + l_io_set_read_handler(qrtr->super.io, qrtr_received_data, qrtr, NULL); return qrtr; @@ -1855,6 +1869,7 @@ void qmi_qrtr_node_free(struct qmi_qrtr_node *node) return; __qmi_device_free(&node->super); + l_queue_destroy(node->service_infos, l_free); if (node->lookup.destroy) node->lookup.destroy(node->lookup.user_data); @@ -1957,7 +1972,7 @@ struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, if (family) goto done; - info = __find_service_info_by_type(device, type); + info = __qrtr_service_info_find(node, type); if (!info) return NULL; @@ -1973,7 +1988,7 @@ bool qmi_qrtr_node_has_service(struct qmi_qrtr_node *node, uint16_t type) if (!node) return false; - return __find_service_info_by_type(&node->super, type); + return __qrtr_service_info_find(node, type); } struct qmi_param *qmi_param_new(void) From patchwork Tue Jun 25 16:41:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711619 Received: from mail-oo1-f53.google.com (mail-oo1-f53.google.com [209.85.161.53]) (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 582D3171E75 for ; Tue, 25 Jun 2024 16:42:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; cv=none; b=i2cDyMhKKlrNIdS2RcouCK0sNrtcf/JqGsBMwdNm23cQuuM03Hogkg9VzRKPBChaFTJqunMZoq3DHAP+BnUD0harHPicwZZBqH7cQzaLa/DZjsWq0IqtdsSyzwcGfRLo/3O/25KTAQrKVSdzoiFtVX/UP15VdOEj7KdMr3jjtQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; c=relaxed/simple; bh=qhIlzdE5YhnvLj6fu+OAX9qabULSZCjtB3FShraopMc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kvbXQJSERIoI8nRoBdmReeEf6WbRKOgAHE3CfqRZ7tI9YTTebTHd8mGhZJPhJ6ByICbtnGu9LUsT2tn1qQH+lJeWrxQNK0ecsWMCTcgETQAqa80y1a1rhfOoDLpzLsw+pISW94/+MWvcF3irVSadyPcVQnkYrWUczSia5mh6ReQ= 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=S7UPDR5o; arc=none smtp.client-ip=209.85.161.53 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="S7UPDR5o" Received: by mail-oo1-f53.google.com with SMTP id 006d021491bc7-5bfa5f9bbe6so2811359eaf.3 for ; Tue, 25 Jun 2024 09:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333727; x=1719938527; 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=qKyPV9p0M0ujvgaKTIG6sjKSVkVoJsb1MLlJ4Ul5+ow=; b=S7UPDR5oqcXOz+9Q8nwmR3LJo7kqydSnnqnVsoP0VCEFtflUg0QRmDsYZNUEuFBh97 TvGpcqHLOXYu/+8YRETr2z7FshD3irdO3iHPW85dRW+mwQGG42XmoFMsZdsx7rRRGrIA dKSBmIMTqDwKSMmhbL6NFc2gDobiwKJvkN+A7C8rTk1SZOG9Ja8gLpcOrL/YKKWP8kUr /iiYqH9G/HfedPxZn5Q1tL9eAbMV41RKMvqPG5OkAXK33y1Xno6xnujaSj+b8NRejy3k NQiaQ8Y1VvLW4KxfmtNr9KFlKUe27B8+U8YFvsiAX1qJUXOIGaBsY36CfzdbHoNZNfjj zy3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333727; x=1719938527; 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=qKyPV9p0M0ujvgaKTIG6sjKSVkVoJsb1MLlJ4Ul5+ow=; b=JcfGEs2juxWaDtWooxmjdI9DdwzHDbSWUuZFcFrS5R87ZoUIeFZorCHVvCggaA1Fnp i/Ey32nC1wJPE6C7kOcqbA4BkKB+IyaO5dEgimNijl9WrMKVK++FMNlJUJ1W6XOOzBBU rc5wAGGChum3iKG/OoggTYnIfqeeYN3LFOxraXLm5CNTXJluzeOLg1jUXdxKxhlbT9va woctbOU64t4phMrLHcU2sk2672PXxmtLXD8n2u5+19rq4leakt7871ztvoLG1Y48P6H+ TmUo8fMUcBkN6XQ2YM+PvInt7gile3nAUp5cPafI2gOT5apJ7uYbDODrC6g/HY5mKahA WrfQ== X-Gm-Message-State: AOJu0YyPoKNY0dI6prJWh6KzUIN9t9nvEvYAtPImXTBe9yV9foVNkRwv nRrPN3O/ET94eb2gEYishOiqobDyDsWhh8uHbPdpp9f3ldhtb0Voj/RdZA== X-Google-Smtp-Source: AGHT+IHW58CIkN+MhQbbVvmBLqC0vS8Vko9zW/6B65KgIxJK0ZMpz9hholh5/kL2Hki0N1ghqZTAuA== X-Received: by 2002:a4a:3114:0:b0:5c2:1f77:681e with SMTP id 006d021491bc7-5c21f77691bmr69912eaf.7.1719333727061; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:06 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 06/14] qmi: Rename qmi_device to qmi_transport Date: Tue, 25 Jun 2024 11:41:42 -0500 Message-ID: <20240625164158.1170937-6-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-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 | 233 +++++++++++++++++++++-------------------- 1 file changed, 117 insertions(+), 116 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 59a50eabeb2b..f4af59a1b783 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -39,7 +39,7 @@ #define SERVICE_VERSION(major, minor) \ (((major) << 16) | (minor)) -struct qmi_device; +struct qmi_transport; struct qmi_request; typedef void (*response_func_t)(struct qmi_request *, uint16_t message, @@ -74,31 +74,31 @@ struct qmi_service_request { 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, - uint16_t service_type, uint16_t client_id); -}; - struct debug_data { qmi_debug_func_t func; void *user_data; }; -struct qmi_device { +struct qmi_transport_ops { + int (*write)(struct qmi_transport *transport, struct qmi_request *req); + void (*client_release)(struct qmi_transport *transport, + uint16_t service_type, uint16_t client_id); +}; + +struct qmi_transport { struct l_io *io; struct l_queue *req_queue; struct l_queue *service_queue; uint16_t next_service_tid; struct l_hashmap *family_list; - const struct qmi_device_ops *ops; + const struct qmi_transport_ops *ops; bool writer_active : 1; }; struct qmi_qmux_device { - struct qmi_device super; struct qmi_service_info *service_list; uint16_t n_services; + struct qmi_transport transport; char *version_str; struct debug_data debug; struct { @@ -124,7 +124,7 @@ struct qmi_qmux_device { struct service_family { int ref_count; - struct qmi_device *device; + struct qmi_transport *transport; struct qmi_service_info info; unsigned int group_id; uint8_t client_id; @@ -651,21 +651,21 @@ static void __qrtr_debug_msg(const char dir, const void *buf, size_t len, static bool can_write_data(struct l_io *io, void *user_data) { - struct qmi_device *device = user_data; + struct qmi_transport *transport = user_data; struct qmi_request *req; int r; - req = l_queue_pop_head(device->req_queue); + req = l_queue_pop_head(transport->req_queue); if (!req) return false; - r = device->ops->write(device, req); + r = transport->ops->write(transport, req); if (r < 0) { __request_free(req); return false; } - if (l_queue_length(device->req_queue) > 0) + if (l_queue_length(transport->req_queue) > 0) return true; return false; @@ -673,33 +673,33 @@ static bool can_write_data(struct l_io *io, void *user_data) static void write_watch_destroy(void *user_data) { - struct qmi_device *device = user_data; + struct qmi_transport *transport = user_data; - device->writer_active = false; + transport->writer_active = false; } -static void wakeup_writer(struct qmi_device *device) +static void wakeup_writer(struct qmi_transport *transport) { - if (device->writer_active) + if (transport->writer_active) return; - l_io_set_write_handler(device->io, can_write_data, device, + l_io_set_write_handler(transport->io, can_write_data, transport, write_watch_destroy); - device->writer_active = true; + transport->writer_active = true; } -static uint16_t __service_request_submit(struct qmi_device *device, +static uint16_t __service_request_submit(struct qmi_transport *transport, struct qmi_service *service, struct qmi_request *req) { struct qmi_service_hdr *hdr = (struct qmi_service_hdr *) &req->data[QMI_MUX_HDR_SIZE]; - req->tid = device->next_service_tid++; + req->tid = transport->next_service_tid++; - if (device->next_service_tid < 256) - device->next_service_tid = 256; + if (transport->next_service_tid < 256) + transport->next_service_tid = 256; req->group_id = service->family->group_id; req->service_handle = service->handle; @@ -707,8 +707,8 @@ static uint16_t __service_request_submit(struct qmi_device *device, hdr->type = 0x00; hdr->transaction = L_CPU_TO_LE16(req->tid); - l_queue_push_tail(device->req_queue, req); - wakeup_writer(device); + l_queue_push_tail(transport->req_queue, req); + wakeup_writer(transport); return req->tid; } @@ -737,7 +737,7 @@ static unsigned int family_list_create_hash(uint16_t service_type, return (service_type | (client_id << 16)); } -static void handle_indication(struct qmi_device *device, +static void handle_indication(struct qmi_transport *transport, uint32_t service_type, uint8_t client_id, uint16_t message, uint16_t length, const void *data) { @@ -755,13 +755,13 @@ static void handle_indication(struct qmi_device *device, result.length = length; if (client_id == 0xff) { - l_hashmap_foreach(device->family_list, service_notify, + l_hashmap_foreach(transport->family_list, service_notify, &result); return; } hash_id = family_list_create_hash(service_type, client_id); - family = l_hashmap_lookup(device->family_list, + family = l_hashmap_lookup(transport->family_list, L_UINT_TO_PTR(hash_id)); if (!family) @@ -770,7 +770,7 @@ static void handle_indication(struct qmi_device *device, service_notify(NULL, family, &result); } -static void __rx_message(struct qmi_device *device, +static void __rx_message(struct qmi_transport *transport, uint32_t service_type, uint8_t client_id, const void *buf) { @@ -787,12 +787,12 @@ static void __rx_message(struct qmi_device *device, tid = L_LE16_TO_CPU(service->transaction); if (service->type == 0x04) { - handle_indication(device, service_type, client_id, + handle_indication(transport, service_type, client_id, message, length, data); return; } - req = l_queue_remove_if(device->service_queue, __request_compare, + req = l_queue_remove_if(transport->service_queue, __request_compare, L_UINT_TO_PTR(tid)); if (!req) return; @@ -807,14 +807,14 @@ static void family_destroy(void *data) { struct service_family *family = data; - if (!family->device) + if (!family->transport) return; - family->device = NULL; + family->transport = NULL; } -static int qmi_device_init(struct qmi_device *device, int fd, - const struct qmi_device_ops *ops) +static int qmi_transport_open(struct qmi_transport *transport, int fd, + const struct qmi_transport_ops *ops) { long flags; @@ -829,28 +829,26 @@ static int qmi_device_init(struct qmi_device *device, int fd, return -errno; } - device->io = l_io_new(fd); - l_io_set_close_on_destroy(device->io, true); - - device->req_queue = l_queue_new(); - device->service_queue = l_queue_new(); - device->family_list = l_hashmap_new(); + transport->io = l_io_new(fd); + l_io_set_close_on_destroy(transport->io, true); - device->next_service_tid = 256; - - device->ops = ops; + transport->req_queue = l_queue_new(); + transport->service_queue = l_queue_new(); + transport->next_service_tid = 256; + transport->ops = ops; + transport->family_list = l_hashmap_new(); return 0; } -static void __qmi_device_free(struct qmi_device *device) +static void qmi_transport_close(struct qmi_transport *transport) { - l_queue_destroy(device->service_queue, __request_free); - l_queue_destroy(device->req_queue, __request_free); + l_queue_destroy(transport->service_queue, __request_free); + l_queue_destroy(transport->req_queue, __request_free); - l_io_destroy(device->io); + l_io_destroy(transport->io); - l_hashmap_destroy(device->family_list, family_destroy); + l_hashmap_destroy(transport->family_list, family_destroy); } void qmi_result_print_tlvs(struct qmi_result *result) @@ -932,15 +930,15 @@ bool qmi_qmux_device_has_service(struct qmi_qmux_device *qmux, uint16_t type) return __qmux_service_info_find(qmux, type); } -static int qmi_qmux_device_write(struct qmi_device *device, +static int qmi_qmux_device_write(struct qmi_transport *transport, struct qmi_request *req) { struct qmi_qmux_device *qmux = - l_container_of(device, struct qmi_qmux_device, super); + l_container_of(transport, struct qmi_qmux_device, transport); struct qmi_mux_hdr *hdr; ssize_t bytes_written; - bytes_written = write(l_io_get_fd(device->io), req->data, req->len); + bytes_written = write(l_io_get_fd(transport->io), req->data, req->len); if (bytes_written < 0) return -errno; @@ -955,7 +953,7 @@ static int qmi_qmux_device_write(struct qmi_device *device, if (hdr->service == QMI_SERVICE_CONTROL) l_queue_push_tail(qmux->control_queue, req); else - l_queue_push_tail(device->service_queue, req); + l_queue_push_tail(transport->service_queue, req); return 0; } @@ -979,7 +977,7 @@ static void __rx_ctl_message(struct qmi_qmux_device *qmux, length = L_LE16_TO_CPU(msg->length); if (control->type == 0x02 && control->transaction == 0x00) { - handle_indication(&qmux->super, service_type, client_id, + handle_indication(&qmux->transport, service_type, client_id, message, length, data); return; } @@ -1003,7 +1001,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data) ssize_t bytes_read; uint16_t offset; - bytes_read = read(l_io_get_fd(qmux->super.io), buf, sizeof(buf)); + bytes_read = read(l_io_get_fd(qmux->transport.io), buf, sizeof(buf)); if (bytes_read < 0) return true; @@ -1040,7 +1038,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data) if (hdr->service == QMI_SERVICE_CONTROL) __rx_ctl_message(qmux, hdr->service, hdr->client, msg); else - __rx_message(&qmux->super, + __rx_message(&qmux->transport, hdr->service, hdr->client, msg); offset += len; @@ -1058,28 +1056,29 @@ static struct service_family *service_family_ref(struct service_family *family) static void service_family_unref(struct service_family *family) { - struct qmi_device *device; + struct qmi_transport *transport; if (--family->ref_count) return; - device = family->device; - if (!device) + transport = family->transport; + if (!transport) goto done; if (family->client_id) { unsigned int hash_id = family_list_create_hash(family->info.service_type, family->client_id); - l_hashmap_remove(device->family_list, L_UINT_TO_PTR(hash_id)); + l_hashmap_remove(transport->family_list, L_UINT_TO_PTR(hash_id)); } - l_hashmap_remove(device->family_list, + l_hashmap_remove(transport->family_list, L_UINT_TO_PTR(family->info.service_type)); - if (device->ops->client_release) - device->ops->client_release(device, family->info.service_type, - family->client_id); + if (transport->ops->client_release) + transport->ops->client_release(transport, + family->info.service_type, + family->client_id); done: l_queue_destroy(family->notify_list, NULL); @@ -1102,20 +1101,21 @@ static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, req->tid = hdr->transaction; req->callback = callback; - l_queue_push_tail(qmux->super.req_queue, req); - wakeup_writer(&qmux->super); + l_queue_push_tail(qmux->transport.req_queue, req); + wakeup_writer(&qmux->transport); return req->tid; } -static struct service_family *service_family_create(struct qmi_device *device, +static struct service_family *service_family_create( + struct qmi_transport *transport, unsigned int group_id, const struct qmi_service_info *info, uint8_t client_id) { struct service_family *family = l_new(struct service_family, 1); family->ref_count = 0; - family->device = device; + family->transport = transport; family->client_id = client_id; family->notify_list = l_queue_new(); family->group_id = group_id; @@ -1146,7 +1146,7 @@ static struct qmi_request *find_control_request(struct qmi_qmux_device *qmux, if (!tid) return NULL; - req = l_queue_remove_if(qmux->super.req_queue, + req = l_queue_remove_if(qmux->transport.req_queue, __request_compare, L_UINT_TO_PTR(tid)); if (req) return req; @@ -1265,9 +1265,7 @@ done: static void qmux_discover_reply_timeout(struct l_timeout *timeout, void *user_data) { - struct qmi_device *device = user_data; - struct qmi_qmux_device *qmux = - l_container_of(device, struct qmi_qmux_device, super); + struct qmi_qmux_device *qmux = user_data; struct qmi_request *req; /* remove request from queues */ @@ -1386,7 +1384,7 @@ static void qmux_create_client_callback(struct qmi_request *r, info.major = req->major; info.minor = req->minor; - family = service_family_create(&qmux->super, + family = service_family_create(&qmux->transport, next_id(&qmux->next_group_id), &info, client_id->client); DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", @@ -1395,7 +1393,7 @@ static void qmux_create_client_callback(struct qmi_request *r, family = service_family_ref(family); hash_id = family_list_create_hash(family->info.service_type, family->client_id); - l_hashmap_insert(qmux->super.family_list, + l_hashmap_insert(qmux->transport.family_list, L_UINT_TO_PTR(hash_id), family); done: @@ -1459,12 +1457,12 @@ static void qmux_client_release_callback(struct qmi_request *req, qmux->shutdown.release_users--; } -static void qmi_qmux_device_client_release(struct qmi_device *device, +static void qmi_qmux_device_client_release(struct qmi_transport *transport, uint16_t service_type, uint16_t client_id) { struct qmi_qmux_device *qmux = - l_container_of(device, struct qmi_qmux_device, super); + l_container_of(transport, struct qmi_qmux_device, transport); uint8_t release_req[] = { 0x01, 0x02, 0x00, service_type, client_id }; struct qmi_request *req; @@ -1550,7 +1548,7 @@ int qmi_qmux_device_shutdown(struct qmi_qmux_device *qmux, return 0; } -static const struct qmi_device_ops qmux_ops = { +static const struct qmi_transport_ops qmux_ops = { .write = qmi_qmux_device_write, .client_release = qmi_qmux_device_client_release, }; @@ -1566,7 +1564,7 @@ struct qmi_qmux_device *qmi_qmux_device_new(const char *device) qmux = l_new(struct qmi_qmux_device, 1); - if (qmi_device_init(&qmux->super, fd, &qmux_ops) < 0) { + if (qmi_transport_open(&qmux->transport, fd, &qmux_ops) < 0) { close(fd); l_free(qmux); return NULL; @@ -1574,7 +1572,8 @@ struct qmi_qmux_device *qmi_qmux_device_new(const char *device) qmux->next_control_tid = 1; qmux->control_queue = l_queue_new(); - l_io_set_read_handler(qmux->super.io, received_qmux_data, qmux, NULL); + l_io_set_read_handler(qmux->transport.io, + received_qmux_data, qmux, NULL); return qmux; } @@ -1585,7 +1584,7 @@ void qmi_qmux_device_free(struct qmi_qmux_device *qmux) return; DEBUG(&qmux->debug, "device %p", qmux); - __qmi_device_free(&qmux->super); + qmi_transport_close(&qmux->transport); if (qmux->shutting_down) { qmux->destroyed = true; @@ -1605,7 +1604,6 @@ void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, } struct qmi_qrtr_node { - struct qmi_device super; unsigned int next_group_id; /* Matches requests with services */ struct l_queue *service_infos; struct debug_data debug; @@ -1615,6 +1613,7 @@ struct qmi_qrtr_node { qmi_destroy_func_t destroy; struct l_timeout *timeout; } lookup; + struct qmi_transport transport; }; static const struct qmi_service_info *__qrtr_service_info_find( @@ -1659,16 +1658,16 @@ static void __qrtr_lookup_finished(struct qmi_qrtr_node *node) memset(&node->lookup, 0, sizeof(node->lookup)); } -static int qmi_qrtr_node_write(struct qmi_device *device, +static int qmi_qrtr_node_write(struct qmi_transport *transport, struct qmi_request *req) { struct qmi_qrtr_node *node = - l_container_of(device, struct qmi_qrtr_node, super); + l_container_of(transport, struct qmi_qrtr_node, transport); struct sockaddr_qrtr addr; uint8_t *data; uint16_t len; ssize_t bytes_written; - int fd = l_io_get_fd(device->io); + int fd = l_io_get_fd(transport->io); /* Skip the QMUX header */ data = req->data + QMI_MUX_HDR_SIZE; @@ -1692,7 +1691,7 @@ static int qmi_qrtr_node_write(struct qmi_device *device, __qrtr_debug_msg(' ', data, bytes_written, req->info.service_type, &node->debug); - l_queue_push_tail(device->service_queue, req); + l_queue_push_tail(transport->service_queue, req); return 0; } @@ -1780,7 +1779,7 @@ static void qrtr_received_service_message(struct qmi_qrtr_node *node, uint32_t qrtr_port, const void *buf, size_t len) { - struct qmi_device *device = &node->super; + struct qmi_transport *transport = &node->transport; const struct l_queue_entry *entry; uint32_t service_type = 0; @@ -1802,7 +1801,7 @@ static void qrtr_received_service_message(struct qmi_qrtr_node *node, } __qrtr_debug_msg(' ', buf, len, service_type, &node->debug); - __rx_message(device, service_type, 0, buf); + __rx_message(transport, service_type, 0, buf); } static bool qrtr_received_data(struct l_io *io, void *user_data) @@ -1814,7 +1813,8 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) socklen_t addr_size; addr_size = sizeof(addr); - bytes_read = recvfrom(l_io_get_fd(qrtr->super.io), buf, sizeof(buf), 0, + bytes_read = recvfrom(l_io_get_fd(qrtr->transport.io), + buf, sizeof(buf), 0, (struct sockaddr *) &addr, &addr_size); DEBUG(&qrtr->debug, "Received %zd bytes from Node: %d Port: %d", bytes_read, addr.sq_node, addr.sq_port); @@ -1834,9 +1834,8 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) return true; } -static const struct qmi_device_ops qrtr_ops = { +static const struct qmi_transport_ops qrtr_ops = { .write = qmi_qrtr_node_write, - .client_release = NULL, }; struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node) @@ -1850,15 +1849,15 @@ struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node) qrtr = l_new(struct qmi_qrtr_node, 1); - if (qmi_device_init(&qrtr->super, fd, &qrtr_ops) < 0) { + if (qmi_transport_open(&qrtr->transport, fd, &qrtr_ops) < 0) { close(fd); l_free(qrtr); return NULL; } qrtr->service_infos = l_queue_new(); - - l_io_set_read_handler(qrtr->super.io, qrtr_received_data, qrtr, NULL); + l_io_set_read_handler(qrtr->transport.io, + qrtr_received_data, qrtr, NULL); return qrtr; } @@ -1868,7 +1867,7 @@ void qmi_qrtr_node_free(struct qmi_qrtr_node *node) if (!node) return; - __qmi_device_free(&node->super); + qmi_transport_close(&node->transport); l_queue_destroy(node->service_infos, l_free); if (node->lookup.destroy) @@ -1912,7 +1911,7 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, DEBUG(&node->debug, "node %p", node); - fd = l_io_get_fd(node->super.io); + fd = l_io_get_fd(node->transport.io); /* * The control node is configured by the system. Use getsockname to @@ -1958,7 +1957,7 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, uint32_t type) { - struct qmi_device *device = &node->super; + struct qmi_transport *transport; struct service_family *family; const struct qmi_service_info *info; @@ -1968,7 +1967,9 @@ struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, if (type == QMI_SERVICE_CONTROL) return NULL; - family = l_hashmap_lookup(device->family_list, L_UINT_TO_PTR(type)); + transport = &node->transport; + + family = l_hashmap_lookup(transport->family_list, L_UINT_TO_PTR(type)); if (family) goto done; @@ -1976,9 +1977,9 @@ struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, if (!info) return NULL; - family = service_family_create(device, next_id(&node->next_group_id), + family = service_family_create(transport, next_id(&node->next_group_id), info, 0); - l_hashmap_insert(device->family_list, L_UINT_TO_PTR(type), family); + l_hashmap_insert(transport->family_list, L_UINT_TO_PTR(type), family); done: return service_create(family); } @@ -2338,8 +2339,8 @@ uint16_t qmi_service_send(struct qmi_service *service, qmi_service_result_func_t func, void *user_data, qmi_destroy_func_t destroy) { - struct qmi_device *device; struct service_family *family; + struct qmi_transport *transport; struct qmi_service_request *sreq; struct qmi_service_info *info; @@ -2350,8 +2351,8 @@ uint16_t qmi_service_send(struct qmi_service *service, if (!family->group_id) return 0; - device = family->device; - if (!device) + transport = family->transport; + if (!transport) return 0; info = &family->info; @@ -2368,7 +2369,7 @@ uint16_t qmi_service_send(struct qmi_service *service, sreq->user_data = user_data; sreq->destroy = destroy; - return __service_request_submit(device, service, &sreq->super); + return __service_request_submit(transport, service, &sreq->super); } struct request_lookup { @@ -2393,7 +2394,7 @@ static bool __request_compare_for_cancel(const void *a, const void *b) bool qmi_service_cancel(struct qmi_service *service, uint16_t id) { - struct qmi_device *device; + struct qmi_transport *transport; struct qmi_request *req; struct service_family *family; struct request_lookup lookup = { .tid = id }; @@ -2406,17 +2407,17 @@ bool qmi_service_cancel(struct qmi_service *service, uint16_t id) if (!family->client_id) return false; - device = family->device; - if (!device) + transport = family->transport; + if (!transport) return false; lookup.group_id = family->group_id; lookup.service_handle = service->handle; - req = l_queue_remove_if(device->req_queue, __request_compare_for_cancel, - &lookup); + req = l_queue_remove_if(transport->req_queue, + __request_compare_for_cancel, &lookup); if (!req) { - req = l_queue_remove_if(device->service_queue, + req = l_queue_remove_if(transport->service_queue, __request_compare_for_cancel, &lookup); if (!req) @@ -2457,7 +2458,7 @@ static void remove_client(struct l_queue *queue, unsigned int group_id, static bool qmi_service_cancel_all(struct qmi_service *service) { - struct qmi_device *device; + struct qmi_transport *transport; if (!service) return false; @@ -2465,13 +2466,13 @@ static bool qmi_service_cancel_all(struct qmi_service *service) if (!service->family->group_id) return false; - device = service->family->device; - if (!device) + transport = service->family->transport; + if (!transport) return false; - remove_client(device->req_queue, + remove_client(transport->req_queue, service->family->group_id, service->handle); - remove_client(device->service_queue, + remove_client(transport->service_queue, service->family->group_id, service->handle); return true; From patchwork Tue Jun 25 16:41:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711620 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (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 09691174EC0 for ; Tue, 25 Jun 2024 16:42:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; cv=none; b=gJYfRpmH435nMfyhaoRDFm2NxQusjliwSBj3/m58Y2chArzioA8t5cmyfJzZ0hkFtkYGSOPEgVUJb+TqbSntt9JR65cIQOspy2iSOjWb6uFFyVMOSzi++A+SRFd0MZo+LUuj1fsSOP8ShLOWsGfD8OaRJtoB/K6BaR6PLvuoK80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; c=relaxed/simple; bh=HqrTWlPLfzO9qKEgcKbeoIloU98LR0/H19BpUtznX4M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m1wfGp9u2uJLLolH8a4O7hfTzZESNfhihBlNCKdmQzrGv/ux7kbnp13e/jAPa4YayguPiOVY746/ZDfJP5QT4Or/I84/P3/rN6PLAsAtQ2CXv9uzdOZTvp325QdBp3nN6Yeg4v3etb+1c3cJG5v4p51rsgBU5T8x6HIXRH9Cjd0= 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=kmFmyCSq; arc=none smtp.client-ip=209.85.210.50 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="kmFmyCSq" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-700a6853664so2121893a34.1 for ; Tue, 25 Jun 2024 09:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333728; x=1719938528; 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=1uc4UjTVkQoxnxpsdmRlaru0EVewRrLvUGFrVslChNw=; b=kmFmyCSqZDumdCC0AzALeNG/eP1QrCv0NFBfQIqZCkcQcZxABxqFipENTEaz12sUoN w5n73DcdA3/17L4fsQPJCkz82A5QFIxEG2DU+lxy/OkgU3VtVmGf2MPtL+Z4CbSYfAe2 FCdgicL5ke6yA2EdLwEF9mVHZZ1jV4JZvL6PNXC0pceuXfCIUXaVH25Q/2jIKULZtGNR rBnZTgdWdYZncgpV6daOG0tRhw+8tY6zwAGrA9+8rZ6PgFH5KXY3QDpECkaHRHcL9j22 FopH4kp81Vvjn0AQ/TPpUpE12nKwLXRG0NEOiBsP/x+HAzSzzcUX+nvVwB/pAp9DCBqq C85A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333728; x=1719938528; 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=1uc4UjTVkQoxnxpsdmRlaru0EVewRrLvUGFrVslChNw=; b=smddyjf+3SNHJ6grmiz7ksa8cG62YVqhh+xuAHDPNbTstSxYsyJc87j6SVtO5H+nWZ alYdmpIqf65KU/E89Qh8OaBr7OXT8yXwAU5XF7DiEHR0RPdcMkkQps3UoLS16/Xb5iLu mytrqI5/lNx1REJwRlNoc2URTfiwfZI09rcWQhnFBZiTJC7XMss6AgOrP41kX0RFArOs 3NtVZk1gLlOepDcoO1AZIB24WBCEc7mk+R8eAO4zrl4lJtWTdr6vUHxiWbF/hjHJSC/5 TsPvoJ3ZmbpY/+xxPyumUrneOo7Ix8boixoPEnt8VNkikcX0fsszycXzubALf3uYRsYy 31EQ== X-Gm-Message-State: AOJu0YwMLt0jRqSnIYy3UTk2+VqP2cNtXx1en9ZSPdYM18uJCelDD+0A lltkd3ROEG7I2R7OuAKEm3yFtJb+eIbbFSnyIid+MC921Y7DMnwBlTH+vw== X-Google-Smtp-Source: AGHT+IHin8i/7CVfESTTIc0ba8auWoTvWqGdoLQ8BrrnhflanBd/TPERL9SmYyr7uF92n0hZ9vXfWQ== X-Received: by 2002:a05:6830:1002:b0:6f9:b69f:b64f with SMTP id 46e09a7af769-700afa4553dmr8138473a34.35.1719333727820; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:07 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 07/14] qmi: Separate transport from qmux/qrtr debugging Date: Tue, 25 Jun 2024 11:41:43 -0500 Message-ID: <20240625164158.1170937-7-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Functions that send and receive bytes on the QMI transport are quite verbose (using hexdump, etc). It might be desirable to output debug information from the internal state of qmi_qrtr_node / qmi_qmux_device without also outputting everything coming and going over the wire. Add qmi_qmux_set_io_debug and qmi_qrtr_node_set_io_debug setters for shuttling low-level transport debug information. Update lower level rx and tx path functions to use the transport debug handlers instead of the ones on struct qmi_qrtr_node / struct qmi_qmux_device. --- drivers/qmimodem/qmi.c | 54 +++++++++++++++++++++++++++++------------- drivers/qmimodem/qmi.h | 4 ++++ 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index f4af59a1b783..a2b5e652ef93 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -92,6 +92,7 @@ struct qmi_transport { uint16_t next_service_tid; struct l_hashmap *family_list; const struct qmi_transport_ops *ops; + struct debug_data debug; bool writer_active : 1; }; @@ -943,10 +944,10 @@ static int qmi_qmux_device_write(struct qmi_transport *transport, return -errno; l_util_hexdump(false, req->data, bytes_written, - qmux->debug.func, qmux->debug.user_data); + transport->debug.func, transport->debug.user_data); __qmux_debug_msg(' ', req->data, bytes_written, - qmux->debug.func, qmux->debug.user_data); + transport->debug.func, transport->debug.user_data); hdr = (struct qmi_mux_hdr *) req->data; @@ -996,6 +997,7 @@ static void __rx_ctl_message(struct qmi_qmux_device *qmux, static bool received_qmux_data(struct l_io *io, void *user_data) { struct qmi_qmux_device *qmux = user_data; + struct qmi_transport *transport = &qmux->transport; struct qmi_mux_hdr *hdr; unsigned char buf[2048]; ssize_t bytes_read; @@ -1006,7 +1008,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data) return true; l_util_hexdump(true, buf, bytes_read, - qmux->debug.func, qmux->debug.user_data); + transport->debug.func, transport->debug.user_data); offset = 0; @@ -1031,7 +1033,8 @@ static bool received_qmux_data(struct l_io *io, void *user_data) break; __qmux_debug_msg(' ', buf + offset, len, - qmux->debug.func, qmux->debug.user_data); + transport->debug.func, + transport->debug.user_data); msg = buf + offset + QMI_MUX_HDR_SIZE; @@ -1603,6 +1606,15 @@ void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux, __debug_data_init(&qmux->debug, func, user_data); } +void qmi_qmux_device_set_io_debug(struct qmi_qmux_device *qmux, + qmi_debug_func_t func, void *user_data) +{ + if (!qmux) + return; + + __debug_data_init(&qmux->transport.debug, func, user_data); +} + struct qmi_qrtr_node { unsigned int next_group_id; /* Matches requests with services */ struct l_queue *service_infos; @@ -1661,8 +1673,6 @@ static void __qrtr_lookup_finished(struct qmi_qrtr_node *node) static int qmi_qrtr_node_write(struct qmi_transport *transport, struct qmi_request *req) { - struct qmi_qrtr_node *node = - l_container_of(transport, struct qmi_qrtr_node, transport); struct sockaddr_qrtr addr; uint8_t *data; uint16_t len; @@ -1681,15 +1691,15 @@ static int qmi_qrtr_node_write(struct qmi_transport *transport, bytes_written = sendto(fd, data, len, 0, (struct sockaddr *) &addr, sizeof(addr)); if (bytes_written < 0) { - DEBUG(&node->debug, "sendto: %s", strerror(errno)); + DEBUG(&transport->debug, "sendto: %s", strerror(errno)); return -errno; } l_util_hexdump(false, data, bytes_written, - node->debug.func, node->debug.user_data); + transport->debug.func, transport->debug.user_data); __qrtr_debug_msg(' ', data, bytes_written, - req->info.service_type, &node->debug); + req->info.service_type, &transport->debug); l_queue_push_tail(transport->service_queue, req); @@ -1800,13 +1810,14 @@ static void qrtr_received_service_message(struct qmi_qrtr_node *node, return; } - __qrtr_debug_msg(' ', buf, len, service_type, &node->debug); + __qrtr_debug_msg(' ', buf, len, service_type, &transport->debug); __rx_message(transport, service_type, 0, buf); } static bool qrtr_received_data(struct l_io *io, void *user_data) { struct qmi_qrtr_node *qrtr = user_data; + struct debug_data *debug = &qrtr->transport.debug; struct sockaddr_qrtr addr; unsigned char buf[2048]; ssize_t bytes_read; @@ -1816,14 +1827,13 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) bytes_read = recvfrom(l_io_get_fd(qrtr->transport.io), buf, sizeof(buf), 0, (struct sockaddr *) &addr, &addr_size); - DEBUG(&qrtr->debug, "Received %zd bytes from Node: %d Port: %d", + DEBUG(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->debug.func, qrtr->debug.user_data); + l_util_hexdump(true, buf, bytes_read, debug->func, debug->user_data); if (addr.sq_port == QRTR_PORT_CTRL) qrtr_received_control_packet(qrtr, buf, bytes_read); @@ -1885,6 +1895,15 @@ void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node, __debug_data_init(&node->debug, func, user_data); } +void qmi_qrtr_node_set_io_debug(struct qmi_qrtr_node *node, + qmi_debug_func_t func, void *user_data) +{ + if (!node) + return; + + __debug_data_init(&node->transport.debug, func, user_data); +} + static void qrtr_lookup_reply_timeout(struct l_timeout *timeout, void *user_data) { @@ -1902,6 +1921,7 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, socklen_t addr_len; ssize_t bytes_written; int fd; + struct debug_data *debug = &node->transport.debug; if (!node || !func) return -EINVAL; @@ -1919,12 +1939,12 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, */ addr_len = sizeof(addr); if (getsockname(fd, (struct sockaddr *) &addr, &addr_len) < 0) { - DEBUG(&node->debug, "getsockname failed: %s", strerror(errno)); + DEBUG(debug, "getsockname failed: %s", strerror(errno)); return -errno; } if (addr.sq_family != AF_QIPCRTR || addr_len != sizeof(addr)) { - DEBUG(&node->debug, "Unexpected sockaddr family: %d size: %d", + DEBUG(debug, "Unexpected sockaddr family: %d size: %d", addr.sq_family, addr_len); return -EIO; } @@ -1937,12 +1957,12 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, sizeof(packet), 0, (struct sockaddr *) &addr, addr_len); if (bytes_written < 0) { - DEBUG(&node->debug, "sendto failed: %s", strerror(errno)); + DEBUG(debug, "sendto failed: %s", strerror(errno)); return -errno; } l_util_hexdump(false, &packet, bytes_written, - node->debug.func, node->debug.user_data); + debug->func, 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 db20280f9aa3..e61e9cc9e878 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -72,6 +72,8 @@ 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); +void qmi_qmux_device_set_io_debug(struct qmi_qmux_device *qmux, + qmi_debug_func_t func, void *user_data); 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); @@ -91,6 +93,8 @@ 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); +void qmi_qrtr_node_set_io_debug(struct qmi_qrtr_node *node, + qmi_debug_func_t func, void *user_data); 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); From patchwork Tue Jun 25 16:41:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711621 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (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 937CA17334B for ; Tue, 25 Jun 2024 16:42:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; cv=none; b=dmIZRYZSLULny3P7PtSAz23Dc+Tz4lfr2Q32I0XWhfn0IfM5DHooW/cRT8eF7SvcfBOzIUQiCXbz+kgA7EB5lyS5EhH1IjodtoO2HlJSj+snusTn1F+pWRKYxR7OH8KV1/UotoNw8qurBjc5GRGi9n+9OC/+lhpaqdin4O/na1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333730; c=relaxed/simple; bh=N1uKVcD0uw4noIf+jmTYaK+rEmryhD2zpY7EGzkwxNs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k/lxmaKQpVLc0YCUbL+7PyujI8x7gCv4alWOTiEeo6K3G96shUIoLXEBjqNiNRhBnMIl9dcWFak7I1LUXKUzBdqVYRqKm4SNyxdUI8yks2kGuFB4bLV80LnTxWPYEVN7XSiwWyQkT/70WqBrmCmaeYD1VVzcsJhf5UDaMr5zx9c= 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=B7gcwhhX; arc=none smtp.client-ip=209.85.210.50 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="B7gcwhhX" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-6f96445cfaeso3184791a34.2 for ; Tue, 25 Jun 2024 09:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333728; x=1719938528; 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=UeT9+Ikd9VFzsN+KD509wRzZWwFtwP5snd+Dz/9Sh+8=; b=B7gcwhhX0qNmlFE4D3MPCs7pCZtAglNVBsMzeJFZ3W/45JOFcKVoApityXVqI8vDXA 0Z+9yulMtDWlqQ/GV0bQvAhI1uSo2lJh80p4318QFkJ24RyHuoSwXxTM5KUD/E99f/Ze DlTwdTILDYLgksf9kqLoukojUXoZDayIGtX6m1gIfWZNJpRnOiyGmM7QWcrS9Jl/cqln UiSBWQP7d0b1nn5SaOa17H4xFIF1oqDuiVix5Y69FzOJRv0WenkI2V3JVnQg/IxM4AZ+ LpdOOu5aTYcJlYnUZCxBZ44JtgQOhg1f4iVhjnVJb25caNeIyXnVj602OSFkJnFoGUVK 5s5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333728; x=1719938528; 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=UeT9+Ikd9VFzsN+KD509wRzZWwFtwP5snd+Dz/9Sh+8=; b=cB0FEDv+dH9XiigdSLQAhg6WjneRXH5DMkT+U3W+YmaKcIM3Dq6XX9MxS3XwI+Wze7 JwQ7Z2Gi6Kova1zRrNVEvtBWqi2HHeeHOaHUzow1c76CNMl7Ei0jrZeiOb5rxjrgOLE1 6aGT0iUPkDyD2gSV6emhK9tvmOaj5hFFLJY69sIOx59W3SkNs1VlBLPPm5Zo6naQ8SBL DMX+uOwQDT5gdswZB6HSfVg4C/bqZqIPMW0erzG8ZuE6lFVed1PjAXYKHPhSoaSsc9wU WEDtX7YkmY8DBQW4qSe3gFVc4917ldkI9/ot/XVgNF91yo7YH/c3zIecTQxvt+TA+Rfh HnFw== X-Gm-Message-State: AOJu0Yz335hF/8s0H7DPb0BNu10g6xQt9wVbUHMBxKNHzeiavcbSc/bB dEx9MHeoOuCWwXGgzpbEt24nF4c9bSfFjZjs0KPE8arKhRbRhhCEt/yIDQ== X-Google-Smtp-Source: AGHT+IFsvQ5ZAtD9Rt7vbX+qkDbyWJ8/0Wri9b9cGBtABVl5ZDX+n5DM5maiDUJ1VCPkxFeAkO9wXg== X-Received: by 2002:a05:6830:1da6:b0:6f9:6518:27d9 with SMTP id 46e09a7af769-700b11c2d15mr8754645a34.3.1719333728546; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:08 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 08/14] gobi: Enable io debugging only if OFONO_QMI_IO_DEBUG is set Date: Tue, 25 Jun 2024 11:41:44 -0500 Message-ID: <20240625164158.1170937-8-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 QMUX/QMI protocol details are now mostly stable to the point that hexdumping what is being sent / received over the wire is just noise. qmi_qmux_device now supports setting separate debug handlers for the underlying object and the low-level IO. If OFONO_QMI_DEBUG environment variable is set, enable debugging for core QMUX/QMI implementation but disable low-level IO debugging. If IO debugging is desired, use the OFONO_QMI_IO_DEBUG environment variable. --- plugins/gobi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/gobi.c b/plugins/gobi.c index e25807753e20..88e4c7fc4887 100644 --- a/plugins/gobi.c +++ b/plugins/gobi.c @@ -89,7 +89,14 @@ static void gobi_debug(const char *str, void *user_data) { const char *prefix = user_data; - ofono_info("%s%s", prefix, str); + ofono_debug("%s%s", prefix, str); +} + +static void gobi_io_debug(const char *str, void *user_data) +{ + const char *prefix = user_data; + + ofono_debug("%s%s", prefix, str); } /* @@ -543,7 +550,11 @@ static int gobi_enable(struct ofono_modem *modem) return -EIO; if (getenv("OFONO_QMI_DEBUG")) - qmi_qmux_device_set_debug(data->device, gobi_debug, "QMI: "); + qmi_qmux_device_set_debug(data->device, gobi_debug, ""); + + if (getenv("OFONO_QMI_IO_DEBUG")) + qmi_qmux_device_set_io_debug(data->device, + gobi_io_debug, "QMI: "); r = qmi_qmux_device_discover(data->device, discover_cb, modem, NULL); if (!r) From patchwork Tue Jun 25 16:41:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711622 Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) (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 72EA2174EC6 for ; Tue, 25 Jun 2024 16:42:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333731; cv=none; b=GInZwT3zkhgWKQNMoWNJnB3zkSv8DObeuBS+52Rvsbnhx2HRr90515YuSgBihquIg074svMMhziyr745UKgF/rEtdD6frT/PSvL8m7mZkc8edDDn9uhFmdGqJxS5uPE00DWjApkL/XwCRS3A7uf5u6NpJHQSWoMI4LpP2T02FzU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333731; c=relaxed/simple; bh=ZGtiHPN21MhCAaqJM6rSmOMD38smuTtO7u5r8aJN/JU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HUvXG55j5udD7BLEIK75aniSULmxihkxXoaPBtp7nxKjX+I0Voa4aiJDmKMmICqCRxHQcoq1VFPLfN+baw0OtUdHIqXeLLoX/4TKr6CzchGtd55A3evh8m7XvEhn9cod+V1EdYrrwS+umLxOhFZyreMEGc1xBBCQjJ6tkvGNX+c= 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=UumiBCN6; arc=none smtp.client-ip=209.85.210.41 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="UumiBCN6" Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-6fa11ac8695so3364867a34.3 for ; Tue, 25 Jun 2024 09:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333729; x=1719938529; 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=6qAO34xzasG+cTdqhTqw6kXz7aXB7KmCOSR39U9iINc=; b=UumiBCN6TyQrvG3unCB+ePDciK5BAs2H5hlB8SejIOwMXYOFeA0AEz9RtNRPXqqK2u pksKAjx/CuSch+geLjOYYUdJxfaIh0DrSBpw++brjg06GHjmiU9nlayNUH+uiF2Zrqff rfepSprR2Xy5sOLg0cQ4OrbFsstsTbM5uYPNWqgn78rCsE76vE5uBQhgJlKn0/5j8IxQ nuRnPXysGVmIJGE+R8F7vc8t5dbTbtv+vrJA+FlFzquiVzPheV0rOrcWLb+hfi8i0ivN i1PrAokTxMgVwNU+7WIwS3bexihh7VuDRFHftmjJBnbNNz9MdpFWq9zATmJiOigSePyW 61eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333729; x=1719938529; 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=6qAO34xzasG+cTdqhTqw6kXz7aXB7KmCOSR39U9iINc=; b=sr5iZECHYYY1C6E62igPAZn1lEI//MuN6Es9PcbYYIqHgH1CsiyiyPZburcx63xkDi qdFezJEcPQ+IRF3AtPwmSITEQ3DynSJP1NpbOPj3/TbBRw8VorqspTpetRzaKoisRiIl bqtwbNTzzxouL/z1KTfCTIB3px18sdex2RYnme95yLDWDuO38v64aW6C3iUQgDBSU9OO xZcm0M1GXmsHP4CLN7QorXvKodGjhW4S3Qa9ri5l/FnPLmSMIW5IIJ1IUUl5FSHka9Lt msGX6BQe9VFzz+2s83/NdjajDLR9NtxK3AKxWlhQBZE+cmSXHV/aQQXz/rzVF2vRZCqB IoFg== X-Gm-Message-State: AOJu0YxfEeGjN5fdARyDEDbAUU2hkAngVqbOs6x+YOxOuJFjH7J/Hl4v j4uXUGOlhNXiOO+AKUw2kraWSpwrWcgYAN+DU9qDs0nwaSH1uNRlwkfmpw== X-Google-Smtp-Source: AGHT+IGhc+Hk5GaK+V9+zW0LdpHGLJ9gGhejC7eeaopli2uYNxGZMi5e267cY91eeVfvoUKw65Pzjg== X-Received: by 2002:a9d:7385:0:b0:6f9:6065:5253 with SMTP id 46e09a7af769-700b1301e32mr8148615a34.38.1719333729351; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:09 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 09/14] qmiqrtr: Enable io debugging only if OFONO_QMI_IO_DEBUG is set Date: Tue, 25 Jun 2024 11:41:45 -0500 Message-ID: <20240625164158.1170937-9-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 QRTR/QMI protocol details are now mostly stable to the point that hexdumping what is being sent / received over the wire is just noise. qmi_qrtr_node now supports setting separate debug handlers for the underlying object and the low-level IO. If OFONO_QMI_DEBUG environment variable is set, enable debugging for core QRTR/QMI implementation but disable low-level IO debugging. If IO debugging is desired, use the OFONO_QMI_IO_DEBUG environment variable. --- plugins/qrtrqmi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/qrtrqmi.c b/plugins/qrtrqmi.c index 4117cac11423..b64ab355a2e8 100644 --- a/plugins/qrtrqmi.c +++ b/plugins/qrtrqmi.c @@ -52,13 +52,20 @@ struct qrtrqmi_data { bool have_voice : 1; }; -static void qrtrqmi_debug(const char *str, void *user_data) +static void qrtrqmi_io_debug(const char *str, void *user_data) { const char *prefix = user_data; ofono_info("%s%s", prefix, str); } +static void qrtrqmi_debug(const char *str, void *user_data) +{ + const char *prefix = user_data; + + ofono_debug("%s%s", prefix, str); +} + /* * Probe the modem. The following modem properties are expected to be set * in order to initialize the driver properly: @@ -213,7 +220,11 @@ static int qrtrqmi_enable(struct ofono_modem *modem) return -EIO; if (getenv("OFONO_QMI_DEBUG")) - qmi_qrtr_node_set_debug(data->node, qrtrqmi_debug, "QRTR: "); + qmi_qrtr_node_set_debug(data->node, qrtrqmi_debug, ""); + + if (getenv("OFONO_QMI_IO_DEBUG")) + qmi_qrtr_node_set_io_debug(data->node, + qrtrqmi_io_debug, "QRTR: "); r = qmi_qrtr_node_lookup(data->node, lookup_done, modem, NULL); if (!r) From patchwork Tue Jun 25 16:41:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711623 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (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 0D3BF174EDB for ; Tue, 25 Jun 2024 16:42:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333732; cv=none; b=oTkdYy8cHySEpY5OMMlntdNBxv7h316C3cWxrw8RMCJoe25tAWNOwlGbhTL3/OVYzNAR8Ks6filEDD6/A9Z4GjGQe6X1N3NoaBVOf+kORzxF9z8rB/wZkNWxhg/5UZTf7634LfYYZTByBYQImT3OtrXxLSCmWyYFiqQlCMIvpk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333732; c=relaxed/simple; bh=+PU0Xu9x/C9ZAoFWH87Y3iEsdnsJqBZcrK13s8QAfzg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f13JSWCHMQRZp8YZKZ7nPhs6DmRpNm3mjkqrG/ZabGSJ3Encodqkm6TnC17u6K6kZFMP6Uo+fNkA8sq3dqEO73vk8knsBT6t2fcGvH9kzSyNAiRmamSvAxc/k0EpJ2R2RQlXb0WmD+Ao1eszqRE/h+T+Xu52igG6GlczMQ3eKLg= 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=GRG0VM4e; arc=none smtp.client-ip=209.85.210.52 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="GRG0VM4e" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-700cd43564eso246600a34.1 for ; Tue, 25 Jun 2024 09:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333730; x=1719938530; 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=O0PgN25RgsZ3iA8ftMEVOI7/8bdomop36UcJIG9G5KE=; b=GRG0VM4evKCr2rz46VdQMOmCi/FmigEr2ohYjxTAqFz6sbrM+mM/CfukFLLrw5iegA 7yD3dmTPhHep95/7CUugKsRFYpNh1EdjG+iIDuHk64FhOHWtaRqXN9yDLKGaI0Kj6817 9pf3UYXB8oi4CjN7Z/tCZUoHzNP9opskmeV8vw5ZmtFB/bbZKqiwxtyTCg3zyja8gSZe DA5HLsEB9RmL3texI0u128ZLS3rcP154dml4aMjz9dret3nNsOUmUGiBwO1u1SAc5iiF b+z8ixBcKbw7J/zzgy3O80HrISf2S/Ubk/Ch5d4ASD4SwiaaOqn/H6wjiU0j9jvfryyN G+Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333730; x=1719938530; 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=O0PgN25RgsZ3iA8ftMEVOI7/8bdomop36UcJIG9G5KE=; b=FnlHbcptzbld8nrI2jn5CFFLJF7ZX3vY63eL3YwzNUaDiX8+hkM/28HbTQrzyeOC6a pL392sXTpSS0ylfyczpX2EHHsBd7cS33m0hHX9QkULZNy5lE/b+rpsfST8S5VEu212oI /5nsCNnD3NcbVNaD6UqFUMjYxattrojkd8laKFVxH6CSWfkTFhLaQFUzkstFHo6TtSw4 0EVwNJZTK0y0DYKWbn5lMwR7Un8bJ4JGVsmwlqacfO6nQiLG5O9fo7bWjCtgsjWXuDQw 3Wae8B8hCy0qU5gMfKMWTi2yWy/kzwYdekdhuxDYLFHT5MRhYyusixZcK7DDeXUNFjgC UTuw== X-Gm-Message-State: AOJu0YybVMb1SgICtajLiFegQlmKOxo47E/BrsaiPeN4oTxCd6EDG01J TErIMmYQ3meon8xOR5n1nGOXARultMKgqhI6PxHm/+bx7HJoT8gNxHcvZg== X-Google-Smtp-Source: AGHT+IEMQqBUY3vVTsUvNQDhJsjiJ8AvEGs+qeqzqj4yrDVV7Zq1yWQwDpbXOeOCIIEkrXhcOX2SEg== X-Received: by 2002:a9d:63c3:0:b0:700:ae03:7645 with SMTP id 46e09a7af769-700ae037700mr8817482a34.31.1719333730015; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:09 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 10/14] qmi: Move release_client operation into service_family Date: Tue, 25 Jun 2024 11:41:46 -0500 Message-ID: <20240625164158.1170937-10-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 qmi_device has been renamed into qmi_transport which now encapsulated the details of maintaining a list of outstanding requests, active service families and low-level tx/rx details. The client_remove operation is now out of place and logically fits much better on the service_family object. Remove the release_client operation from qmi_transport_ops. Introduce two specializations of service_family for qrtr and qmux respectively. Release of QMUX clients will now be triggered when the QMUX service family object is destroyed. --- drivers/qmimodem/qmi.c | 121 +++++++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 47 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index a2b5e652ef93..5720218072bc 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -81,8 +81,6 @@ struct debug_data { struct qmi_transport_ops { int (*write)(struct qmi_transport *transport, struct qmi_request *req); - void (*client_release)(struct qmi_transport *transport, - uint16_t service_type, uint16_t client_id); }; struct qmi_transport { @@ -132,6 +130,7 @@ struct service_family { uint16_t next_notify_id; unsigned int next_service_handle; struct l_queue *notify_list; + void (*free_family)(struct service_family *family); }; struct qmi_service { @@ -1078,14 +1077,9 @@ static void service_family_unref(struct service_family *family) l_hashmap_remove(transport->family_list, L_UINT_TO_PTR(family->info.service_type)); - if (transport->ops->client_release) - transport->ops->client_release(transport, - family->info.service_type, - family->client_id); - done: l_queue_destroy(family->notify_list, NULL); - l_free(family); + family->free_family(family); } static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, @@ -1110,21 +1104,18 @@ static uint8_t __ctl_request_submit(struct qmi_qmux_device *qmux, return req->tid; } -static struct service_family *service_family_create( - struct qmi_transport *transport, - unsigned int group_id, - const struct qmi_service_info *info, uint8_t client_id) +static void __service_family_init(struct service_family *family, + struct qmi_transport *transport, + unsigned int group_id, + const struct qmi_service_info *info, + uint8_t client_id) { - struct service_family *family = l_new(struct service_family, 1); - family->ref_count = 0; family->transport = transport; family->client_id = client_id; family->notify_list = l_queue_new(); family->group_id = group_id; memcpy(&family->info, info, sizeof(family->info)); - - return family; } static struct qmi_service *service_create(struct service_family *family) @@ -1308,6 +1299,50 @@ int qmi_qmux_device_discover(struct qmi_qmux_device *qmux, return 0; } +static void qmux_client_release_callback(struct qmi_request *req, + uint16_t message, uint16_t length, + const void *buffer) +{ + struct qmi_qmux_device *qmux = req->user_data; + + qmux->shutdown.release_users--; +} + +static void qmux_service_family_free(struct service_family *family) +{ + struct qmi_qmux_device *qmux = l_container_of(family->transport, + struct qmi_qmux_device, + transport); + uint8_t release_req[] = { 0x01, 0x02, 0x00, + family->info.service_type, family->client_id }; + struct qmi_request *req; + + if (family->transport) { + qmux->shutdown.release_users++; + req = __control_request_alloc(QMI_CTL_RELEASE_CLIENT_ID, + release_req, sizeof(release_req), 0); + req->user_data = qmux; + + __ctl_request_submit(qmux, req, qmux_client_release_callback); + } + + l_free(family); +} + +static struct service_family *qmux_service_family_new( + struct qmi_transport *transport, + unsigned int group_id, + const struct qmi_service_info *info, + uint8_t client_id) +{ + struct service_family *family = l_new(struct service_family, 1); + + __service_family_init(family, transport, group_id, info, client_id); + family->free_family = qmux_service_family_free; + + return family; +} + struct qmux_create_client_request { struct qmi_qmux_device *qmux; uint8_t type; @@ -1387,7 +1422,7 @@ static void qmux_create_client_callback(struct qmi_request *r, info.major = req->major; info.minor = req->minor; - family = service_family_create(&qmux->transport, + family = qmux_service_family_new(&qmux->transport, next_id(&qmux->next_group_id), &info, client_id->client); DEBUG(&qmux->debug, "service family created [client=%d,type=%d]", @@ -1451,33 +1486,6 @@ bool qmi_qmux_device_create_client(struct qmi_qmux_device *qmux, return true; } -static void qmux_client_release_callback(struct qmi_request *req, - uint16_t message, uint16_t length, - const void *buffer) -{ - struct qmi_qmux_device *qmux = req->user_data; - - qmux->shutdown.release_users--; -} - -static void qmi_qmux_device_client_release(struct qmi_transport *transport, - uint16_t service_type, - uint16_t client_id) -{ - struct qmi_qmux_device *qmux = - l_container_of(transport, struct qmi_qmux_device, transport); - uint8_t release_req[] = { 0x01, 0x02, 0x00, service_type, client_id }; - struct qmi_request *req; - - qmux->shutdown.release_users++; - - req = __control_request_alloc(QMI_CTL_RELEASE_CLIENT_ID, - release_req, sizeof(release_req), 0); - req->user_data = qmux; - - __ctl_request_submit(qmux, req, qmux_client_release_callback); -} - static void __qmux_device_free(struct qmi_qmux_device *qmux) { l_queue_destroy(qmux->control_queue, __request_free); @@ -1553,7 +1561,6 @@ int qmi_qmux_device_shutdown(struct qmi_qmux_device *qmux, static const struct qmi_transport_ops qmux_ops = { .write = qmi_qmux_device_write, - .client_release = qmi_qmux_device_client_release, }; struct qmi_qmux_device *qmi_qmux_device_new(const char *device) @@ -1670,6 +1677,25 @@ static void __qrtr_lookup_finished(struct qmi_qrtr_node *node) memset(&node->lookup, 0, sizeof(node->lookup)); } +static void qrtr_service_family_free(struct service_family *family) +{ + l_free(family); +} + +static struct service_family *qrtr_service_family_new( + struct qmi_transport *transport, + unsigned int group_id, + const struct qmi_service_info *info, + uint8_t client_id) +{ + struct service_family *family = l_new(struct service_family, 1); + + __service_family_init(family, transport, group_id, info, client_id); + family->free_family = qrtr_service_family_free; + + return family; +} + static int qmi_qrtr_node_write(struct qmi_transport *transport, struct qmi_request *req) { @@ -1997,8 +2023,9 @@ struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, if (!info) return NULL; - family = service_family_create(transport, next_id(&node->next_group_id), - info, 0); + family = qrtr_service_family_new(transport, + next_id(&node->next_group_id), + info, 0); l_hashmap_insert(transport->family_list, L_UINT_TO_PTR(type), family); done: return service_create(family); From patchwork Tue Jun 25 16:41:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13711624 Received: from mail-oo1-f49.google.com (mail-oo1-f49.google.com [209.85.161.49]) (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 B3BA3174EE1 for ; Tue, 25 Jun 2024 16:42:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333733; cv=none; b=ksGc+/C9bWzbf7sApZ0yYTd153RbzD+cvxWiBFDed5gCfzAvxgACaBNax+lTCJREPnzNKbtqlf7+9yMU+K2VJy7EbO2FMVt9SltQyZrqJOspiB/t8qY4jzUFeeVZLRPYduOahqhhOoVXv8Id5ks3r0ZXR8AhFtBlVrNGlxj3A5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333733; c=relaxed/simple; bh=klw4aUAqr1SSW5HavJsfYv2XgInENxpmj73HNLuzZpw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MQlon455VpF4SkJWvP4F6fUcs2PdMz7et4RUhwejzoylCLzT3pntQXf/PL6yAQIVhmja55yd3/IjDFdADkyXZQ5vAsBT+K5dXP28ZJdNM1zeqUW9O4ShzYNZkmlqqUKrYw+ISaU71FUFaTu5pEZ/vgdG+LRF5m26LdlZ8JpnQeg= 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=jW0y2bS6; arc=none smtp.client-ip=209.85.161.49 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="jW0y2bS6" Received: by mail-oo1-f49.google.com with SMTP id 006d021491bc7-5c21a177affso282610eaf.2 for ; Tue, 25 Jun 2024 09:42:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333731; x=1719938531; 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=TUJpeG5XySb/w5sbrmkfL9s3artarsq5RkfLny/9zbI=; b=jW0y2bS6PwbIX/Q4sEaU9RuhuX6Keb6V15arDRCWyDNg7Mbn9WcR5TcSXzH4trzKMQ avcZXpF+eVmhq8oGtiPnPX+Ff0RlrAyPImb/RS1AKihaR3kTms3LS7rKbdAoFTWyxgpg rTpSXBqPOhndpSJq5mbrhYvGYj+V50Y1931qzv3tJF3eg5qUQOB6Efm8Cm/Zju81LraH hL3Cl/KkJhri2qZxijJ+nv/rzf3BMpIUS3r6aQ/8+/y1XDcfiG+/kl4ah0sBH5exmK73 TWVgQO/fvJhDSaXVboA/jYE3NVKeDHcqKw02YwldVIFsBvc/c7TN4CmAw8SvnR79mFWk u3+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333731; x=1719938531; 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=TUJpeG5XySb/w5sbrmkfL9s3artarsq5RkfLny/9zbI=; b=JaW2F9wynf7ngO/PQVVHScTDUT3ehlDvVRwoZ4JEDHuOa0Uyb+q0jmPj5rYu1qFA4A /h9RUkU/lzVDG5zagFEUHmn5kgOR1EMi4ydwc2b6k0Ciy1S4RiKXPiHMF3D80eUgEjeD 3QND8DOisiSgjH/wvoxXYGEOHkqZjnkGSR6W8r1nzNZCK+ZcL9mXOKR0vXKB8dR0WAM1 H5kPjLGl6Otpoh+o1SHWv/Np9KHJ0Bl9jSyNyQaPya7kkPIDT5ObVQA3Cux4TtjqDJwI qjImB0rWJZd/BajjmMIt331zwSaQLNoVvkv9umObvprd22F6Z1+zuU3FoqciZS6zBPXt whig== X-Gm-Message-State: AOJu0YyFsF4MzGZFMTTxBNBZtKk1JwGV29acnAh3tgHHDploNQ5WVHED QRNU/pVR8F4CurjUKdYGEFdeytoZiRDir4yV2rQolDnq1CjiMja81GV1Xw== X-Google-Smtp-Source: AGHT+IFk9jdkE7JQRcnbu1OYQVD1We+keOFqbkPf9k/o6+aLF2Xt/n1dmtmRt9fCkNpiCDCupFA/Ww== X-Received: by 2002:a4a:6249:0:b0:5bb:1b9d:24d7 with SMTP id 006d021491bc7-5c1ebb1d285mr8755773eaf.6.1719333730661; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:10 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 11/14] qmi: Add dedicated service for qrtr Date: Tue, 25 Jun 2024 11:41:47 -0500 Message-ID: <20240625164158.1170937-11-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-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 | 91 ++++++++++++++++++++++++++++++++++++++++++ drivers/qmimodem/qmi.h | 3 ++ 2 files changed, 94 insertions(+) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 5720218072bc..24d2ff8075fe 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -2039,6 +2039,97 @@ bool qmi_qrtr_node_has_service(struct qmi_qrtr_node *node, uint16_t type) return __qrtr_service_info_find(node, type); } +struct qrtr_service_family_dedicated { + struct service_family super; + struct qmi_transport transport; +}; + +static void qrtr_service_family_dedicated_free(struct service_family *family) +{ + struct qrtr_service_family_dedicated *dfamily = + l_container_of(family, + struct qrtr_service_family_dedicated, super); + + qmi_transport_close(&dfamily->transport); + l_free(dfamily); +} + +static bool qrtr_service_family_dedicated_rx(struct l_io *io, void *user_data) +{ + struct qrtr_service_family_dedicated *family = user_data; + struct debug_data *debug = &family->transport.debug; + const struct qmi_service_info *info = &family->super.info; + struct sockaddr_qrtr addr; + unsigned char buf[2048]; + ssize_t bytes_read; + socklen_t addr_size; + int fd = l_io_get_fd(family->transport.io); + + addr_size = sizeof(addr); + bytes_read = recvfrom(fd, buf, sizeof(buf), 0, + (struct sockaddr *) &addr, &addr_size); + DEBUG(debug, "fd %d Received %zd bytes from Node: %d Port: %d", + fd, bytes_read, addr.sq_node, addr.sq_port); + + if (bytes_read < 0) + return true; + + if (addr.sq_port != info->qrtr_port && addr.sq_node != info->qrtr_node) + return true; + + l_util_hexdump(true, buf, bytes_read, debug->func, debug->user_data); + __qrtr_debug_msg(' ', buf, bytes_read, info->service_type, debug); + __rx_message(&family->transport, info->service_type, 0, buf); + + return true; +} + +struct qmi_service *qmi_qrtr_node_get_dedicated_service( + struct qmi_qrtr_node *node, + uint16_t type) +{ + struct qrtr_service_family_dedicated *family; + const struct qmi_service_info *info; + int fd; + + if (!node) + return NULL; + + if (type == QMI_SERVICE_CONTROL) + return NULL; + + info = __qrtr_service_info_find(node, type); + if (!info) + return NULL; + + fd = socket(AF_QIPCRTR, SOCK_DGRAM, 0); + if (fd < 0) + return NULL; + + family = l_new(struct qrtr_service_family_dedicated, 1); + + if (qmi_transport_open(&family->transport, fd, &qrtr_ops) < 0) { + close(fd); + l_free(family); + return NULL; + } + + DEBUG(&node->debug, "Opening dedicated service for %u", type); + __service_family_init(&family->super, &family->transport, + next_id(&node->next_group_id), info, 0); + family->super.free_family = qrtr_service_family_dedicated_free; + l_hashmap_insert(family->transport.family_list, + L_UINT_TO_PTR(type), family); + + l_io_set_read_handler(family->transport.io, + qrtr_service_family_dedicated_rx, + family, NULL); + memcpy(&family->transport.debug, &node->transport.debug, + sizeof(struct debug_data)); + + return service_create(&family->super); +} + 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 e61e9cc9e878..0e48313ebb64 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -100,6 +100,9 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node, void *user_data, qmi_destroy_func_t destroy); struct qmi_service *qmi_qrtr_node_get_service(struct qmi_qrtr_node *node, uint32_t type); +struct qmi_service *qmi_qrtr_node_get_dedicated_service( + struct qmi_qrtr_node *node, + uint16_t type); bool qmi_qrtr_node_has_service(struct qmi_qrtr_node *node, uint16_t type); struct qmi_param; From patchwork Tue Jun 25 16:41: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: 13711625 Received: from mail-oo1-f47.google.com (mail-oo1-f47.google.com [209.85.161.47]) (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 6FBA6174EE2 for ; Tue, 25 Jun 2024 16:42:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333733; cv=none; b=qFn24rzzD2ua+gVVeVUr9KCVr8NpycMj0LNDrcu4f/yb52y9BbRZXmOctFmDgj9NK6bInyhYHbFP5rz2ti56x2aqPw117C3o527+Hx3N1z9JjnGESQYd8i9w92PlluG3aEM/E1zmAzQoP335swu00ZBBhy7hj/sAnetDqHI2huQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333733; c=relaxed/simple; bh=jRPBM5xekjHWFqiU8Ck/lFlEELvji27XV0Yh7BxYJOQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fDdVj2EcnCs/nh5jR27Kzj511l4vnWu3a4CNBYlAA6ERg/ruDfwobdsI6TJpw8ZhJLbn5WNqed6wgu/LKss6p7UGpHXFaE/adb1HjTs+7+F3tQHb3hVLg6U0mivRqTV0be/R4Z1uVQTWjn+OaJYW/HhTytXfK8vRvAoptSebTCg= 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=Zt2s3k/6; arc=none smtp.client-ip=209.85.161.47 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="Zt2s3k/6" Received: by mail-oo1-f47.google.com with SMTP id 006d021491bc7-5c21c5eb371so233691eaf.1 for ; Tue, 25 Jun 2024 09:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333731; x=1719938531; 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=0r2ayXQES330bJ9gbaY8g0WCybk0+7O5CYFHOwOpFnk=; b=Zt2s3k/6SIykGnH5ULHwJ9+UM8VTUqcMWkaeLGwnbndimGg5nac5EergQIJndupSb8 chFFiulWNmYMrr8qPptyRWuXUjlvXgndBdNFzFk/FAT0fNX/Feesxkr2Eod2c+Shj/uz +TzpmGClRjDT1lwPctH047j37oclZUaApp/zPdaBBYgNk3Lsn7Mq2vgvNLkLdKXAvlZ8 a0SS/6AA1VRRTSMZC28VnXfkq2mq70zmWov71eeo24ofE3D71fqY3HsJlZYTfFucScms BMz1Yq4/A3saY0zKVKjkWvbjDoqidcekV8H/7J9uwXtBSpUJiyI476q9lW3XlgMsdm9s 25iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333731; x=1719938531; 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=0r2ayXQES330bJ9gbaY8g0WCybk0+7O5CYFHOwOpFnk=; b=nxqtBH5rI2RGOqEWDOowBCSeZ+yRmrQ9oj90qps8qaEDzkuY+cn+ZbyrvVRJzZvqr4 UGA9luRY8XLCV9dzkMxB4suCJ6B2H/2DSCsVPI60y8OLQ1zUfkbCEhEel7gMLBrDfrtO 3hmDGI0o9E74jb/wIkiOB045BfbHrNf+okbF3vYMvuBQTUDKbaRu0wYGVXxgANZ9N5hp jLXMhQFB7kXTCf3z5IlYSkmy58dys4DRG73Oy9eIZizjNhK12POmSu6IXCqUrpNJEf8P Zc7RwikYuCZS0TTtmUBxDdjKw1asGOox/OcW6vcKsf6aPuDSHmtRa5wRqze3JVmAlKym RHGQ== X-Gm-Message-State: AOJu0YySiTTKRCjxoDPaJxz1H3O7nJztDtuaTNVul6z61V2MFaxxzSPM 3vZeVr/YyaxBdRS6ZiKpnZEYPpck4u0Tb0F+CIUmFwrtAdHEJ4qEfTYkEg== X-Google-Smtp-Source: AGHT+IFE45Dlu8xVmSaEpbKjFQ7DasBcxqil2apIy8pvne3L6AGvqbM4x2iq39URHJXB6KB54+3r8A== X-Received: by 2002:a4a:8005:0:b0:5ba:e995:3f00 with SMTP id 006d021491bc7-5c1eec0b5d2mr8695347eaf.1.1719333731303; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:11 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 12/14] qmi: debug print fd that QRTR data was received on Date: Tue, 25 Jun 2024 11:41:48 -0500 Message-ID: <20240625164158.1170937-12-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-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 qrtr_service_family_dedicated_rx(), output the fd for the rx operation. --- drivers/qmimodem/qmi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 24d2ff8075fe..b8f46a5b4a0e 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1848,13 +1848,13 @@ static bool qrtr_received_data(struct l_io *io, void *user_data) unsigned char buf[2048]; ssize_t bytes_read; socklen_t addr_size; + int fd = l_io_get_fd(qrtr->transport.io); addr_size = sizeof(addr); - bytes_read = recvfrom(l_io_get_fd(qrtr->transport.io), - buf, sizeof(buf), 0, + bytes_read = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *) &addr, &addr_size); - DEBUG(debug, "Received %zd bytes from Node: %d Port: %d", - bytes_read, addr.sq_node, addr.sq_port); + DEBUG(debug, "fd %d Received %zd bytes from Node: %d Port: %d", + fd, bytes_read, addr.sq_node, addr.sq_port); if (bytes_read < 0) return true; From patchwork Tue Jun 25 16:41: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: 13711626 Received: from mail-oo1-f51.google.com (mail-oo1-f51.google.com [209.85.161.51]) (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 1D984174EC7 for ; Tue, 25 Jun 2024 16:42:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333734; cv=none; b=leebh736dqbXourjQWMxH2HMBtsKDJMYMyKTAbZ7U/hzLBIhF0KXPMXx36ArhgFnQmoxwut91r1V7bCW3YCwbQILTV7rOPGGSF/+m5ub8GYPR4plBVgCREus7xHu+mDuHPv13OusK8CajnraVrTk6xTBgFK30A2QUbDs5v1Q1CY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333734; c=relaxed/simple; bh=93oYdyo4JFmMCEn08uVMKUDs6mcIc+WMr9jtGBbghxU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KsBgDNaKwmgts2BH3oVW47/0eKy46y0n0DPvYRmUKkbiOclz5zJHkWavVEF5iA39a/KD0LJfggv0eWEf7srbvZH/nVYqa7tVyZURKdGrfm1FdVRzGcd73f8I4ZGFWWGqKWQqacHyYTyq+kRAP8guDLmUF3NVrjAW9kDTAOkF/04= 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=SI1J4Z4L; arc=none smtp.client-ip=209.85.161.51 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="SI1J4Z4L" Received: by mail-oo1-f51.google.com with SMTP id 006d021491bc7-5c1adbcaad3so2548086eaf.1 for ; Tue, 25 Jun 2024 09:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333732; x=1719938532; 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=BRe5GLPV3MGyiCXYMpc6TBo/8Mio8zmDcg+zyGSPYqk=; b=SI1J4Z4LNQBYFWjxDsoVbH21mnyk60RniFsn4HyjzzbFDQ3AzV3QvL5frmOVv5QVyj x2a9Ct1DRfJjmAVTiDyW3zH2DCpwPsdKQKVYErMMHQGlZhPxS42P5vAEKwE11L91V4rb aIw8kKlW+bSMPyNS1fLWxlJq1GbiFh8dcNMqz2xyfmdeaDuQHw6UvSvaCylflXyDCD4L rxe5+tFyKAclXEIQnqtOclA1hmA+FQ/BLdODfKMHnK+EtJLJfYHC8pt2SK6R2CMU7rWM g1x9/tnvIiAahHS6P7Z28nzVRQZheknRFeEcvm9kXsfsuIhqFqWsqYvmCixJGLcC5bIX qJhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333732; x=1719938532; 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=BRe5GLPV3MGyiCXYMpc6TBo/8Mio8zmDcg+zyGSPYqk=; b=ltinMrrjYYqKbmGIAVuPHXQm9JP21g7gnwczRuWK9yyDDYdLIPnffn/zd74HexJO1m LnHpyZT5l+U/GjHLH+22YQqP8NoqXC5Dron6Zq5sHMuyP2D7ZaG3FeEHZJot1kWG2Dx+ n/utu3jhpQi7MwMKruVO7SlD6S7IT0foE5qTW5Vu9cLlkQVRQgFoONOQxwaF2OyiUbZA kqYGpVeTtx7x3ahqq9IkIkFh2SD9fPm9ikST/UJQ2xLuKOdMOimWxVuXZEHKkFGJ0doD VRr+WoPhJtsKcewPhjmY1QTGjf7DLja1uGZzbi6qKuWwl+YH2x/c2O77Azla5KnCJGv3 cVjw== X-Gm-Message-State: AOJu0YziGHtjpr4n9MhKtTUf3+NrPbSlPDA996zOmVwjMF0WNq1Qb3Cn i364Z0YhKSXKyIuVxPkJ6n/f2MYBu+rjvzz4icqc+OuujqTiCT2PidgXVw== X-Google-Smtp-Source: AGHT+IHI+m8Ld3A0chJVYd+PXvUJIFxIOa4VESk/Ryn9Dp6COQvibvM3Q/4dCVU78lsjb6nKUqouxw== X-Received: by 2002:a4a:8804:0:b0:5c1:9e5a:ad9e with SMTP id 006d021491bc7-5c20ea000eamr1891006eaf.0.1719333732103; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:11 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 13/14] unit: Use _auto_ to automatically tear-down test setup Date: Tue, 25 Jun 2024 11:41:49 -0500 Message-ID: <20240625164158.1170937-13-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-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 | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index 2ff981391849..e68f5a7bdd8f 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -181,11 +181,11 @@ static void test_cleanup(struct test_info *info) l_main_exit(); } +static void _l_test_cleanup_cleanup(void *p) { test_cleanup(*(void **) p); } + static void test_create_qrtr_node(const void *data) { - struct test_info *info = test_setup(); - - test_cleanup(info); + _auto_(test_cleanup) struct test_info *info = test_setup(); } static void lookup_complete_cb(void *user_data) @@ -205,11 +205,9 @@ static void perform_lookup(struct test_info *info) static void test_lookup(const void *data) { - struct test_info *info = test_setup(); + _auto_(test_cleanup) struct test_info *info = test_setup(); perform_lookup(info); - - test_cleanup(info); } /* Callbacks could queue other callbacks so continue until there are no more. */ @@ -223,7 +221,7 @@ static void perform_all_pending_work(void) static void test_create_services(const void *data) { - struct test_info *info = test_setup(); + _auto_(test_cleanup) struct test_info *info = test_setup(); struct qmi_service *services[3]; uint32_t service_type; size_t i; @@ -262,8 +260,6 @@ static void test_create_services(const void *data) for (i = 0; i < L_ARRAY_SIZE(services); i++) qmi_service_free(services[i]); - - test_cleanup(info); } static bool received_data(struct l_io *io, void *user_data) @@ -423,7 +419,7 @@ static void send_response_to_client(struct test_info *info, struct l_io *io) */ static void test_send_data(const void *data) { - struct test_info *info = test_setup(); + _auto_(test_cleanup) struct test_info *info = test_setup(); struct l_io *io; uint32_t service_type; struct qmi_service *service; @@ -443,8 +439,6 @@ static void test_send_data(const void *data) l_io_destroy(io); qmi_service_free(service); - - test_cleanup(info); } @@ -469,7 +463,7 @@ static void internal_timeout_cb(struct l_timeout *timeout, void *user_data) static void test_notifications(const void *data) { - struct test_info *info = test_setup(); + _auto_(test_cleanup) struct test_info *info = test_setup(); struct l_io *io; uint32_t service_type; struct qmi_service *service; @@ -517,12 +511,11 @@ static void test_notifications(const void *data) l_timeout_remove(receive_timeout); l_io_destroy(io); - test_cleanup(info); } static void test_service_notification_independence(const void *data) { - struct test_info *info = test_setup(); + _auto_(test_cleanup) struct test_info *info = test_setup(); struct l_io *io; uint32_t service_type; struct qmi_service *services[2]; @@ -563,7 +556,6 @@ static void test_service_notification_independence(const void *data) qmi_service_free(services[i]); l_io_destroy(io); - test_cleanup(info); } static void exit_if_qrtr_not_supported(void) From patchwork Tue Jun 25 16:41: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: 13711627 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (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 D5414174ECF for ; Tue, 25 Jun 2024 16:42:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333735; cv=none; b=RkYC1SHYHk/zHo4OyFb4JAQmwOPORYfUYQtxMbFWN+fz8rIqF5fXny3ymGVp3hLb1O8V3Xp6GSdt6MjDGwsW5KLN5/uX9ylQjo2+8YcTJxMPq0JhQ4YeugqGzMBjbmdJ1so58OZcVGynC16V6CBKrZMtsNpOKfBfxzoX0a6/+f8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719333735; c=relaxed/simple; bh=/T5J0bBrC48jeSha7+fYGXWak7+mAdNB6W4S6FP0UYQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oQz8xdSskzKljX8U4aKyGy/LN6DiwaPY7Z+ZLdBzZtQhxvmeCeWhTDyV1EP4KTr3c77F4H5dm98mWKDbN3Rmw7A1iEl5+x4daPVs9a+H6039n63TCs+SrXVshDHO/E1VJXdXJ8rCMT/bfLPG/FdclieVIdZ74S3F8zAGaxaiGa0= 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=fLz2NZ/b; arc=none smtp.client-ip=209.85.210.50 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="fLz2NZ/b" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-6f99555c922so3330843a34.3 for ; Tue, 25 Jun 2024 09:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719333733; x=1719938533; 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=6bbtDJ3m87AQNzaszUaZlYQ5b5tKALGpvm/H+4yrLOU=; b=fLz2NZ/bQuBw4k+iKJYgcuIYnwtabjjfcljvZbB5UZSM0tIPiWpxjrS9JPKV+zLx9k d6cYSx9u3RwyC+7ZCAXwSnpS5QUZ7rnijtSV9PrxP3ztXvnl7dX6zM9QbdWDHED6O7Yv swJaAlCH11JHaeRl4eBDpeWJYub0N4vU5aIV25/l9yBGX+vzSoJ4U/BImi/hLx+ELYDO cV+6mzOtkTqiJEvkoKoFFakoZpN0NZHg3BwEaD0ZwkCdXnbmLM1p9trdu9fCtHDQXVKr y9xjkGp8QfDUIBhQ2MK9X5fq0kKvno3/sIk5x7RyBGfTuIjGNhcXcCmxljPB8Xpe8vMR PiYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719333733; x=1719938533; 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=6bbtDJ3m87AQNzaszUaZlYQ5b5tKALGpvm/H+4yrLOU=; b=n905ZA1vQ69t+bUtLbvcAcN6jc4FZPUUhUmWB9n34AYeqd41cS8Pau4f/Q8zlR7qpc VapO6HgKlJ+ctKj9LiNty2VqGIDsn/sYhjIM8C4XpfcKl9UJWf7A6q/gJmpry7N1mjcB 6cibwJr3+Ziy+j5+4YhS87YAmJpn8aEvAgjogDey2oKZ9nAdIesuTj5FJYBMO7jfEq+H vDajgfdVtmK/sEsP8m5YSDMGQiOONnNRIkjdQ/z9ZXO4tbx7BXnz9+/XV6hGwsOoWv82 1ZdfdFO3snDpcbjJeuV/R3MW966bV2Gyg0KMOaLIgd17KBWsG65Pix1NgF3ugVTBR6Ch 29lA== X-Gm-Message-State: AOJu0YzdAHbslTFNvDW5ZHSIx5M6KLXVrfz+73xgHZn4Lz1VheNvd67f mIuSe736QdKo2JLD2111OvTq9wIZeSVlgiN3rwq6a6YbFXOdyN0JxhJYJg== X-Google-Smtp-Source: AGHT+IGwVy1DkyUYdcf7zZHXuAFj1jQODaEIgU+TO4cSFUg1ywKXZkvU3bTMG4KK1n8Nu/S3vj63qQ== X-Received: by 2002:a05:6830:1bed:b0:6f9:7a21:b3ad with SMTP id 46e09a7af769-700af928336mr8722999a34.21.1719333732767; Tue, 25 Jun 2024 09:42: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 006d021491bc7-5c1d55dc2dcsm1884844eaf.27.2024.06.25.09.42.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jun 2024 09:42:12 -0700 (PDT) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH v2 14/14] unit: Add unit test for QRTR dedicated services Date: Tue, 25 Jun 2024 11:41:50 -0500 Message-ID: <20240625164158.1170937-14-denkenz@gmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240625164158.1170937-1-denkenz@gmail.com> References: <20240625164158.1170937-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, also add a couple of helper functions that perform boiler-plate operations. The service_common_setup helper takes a 'dedicated' parameter which is used to select whether qmi_qrtr_node_get_service or qmi_qrtr_node_get_service_dedicated is used for service creation. --- unit/test-qmimodem-qmi.c | 73 +++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/unit/test-qmimodem-qmi.c b/unit/test-qmimodem-qmi.c index e68f5a7bdd8f..bc021901ce74 100644 --- a/unit/test-qmimodem-qmi.c +++ b/unit/test-qmimodem-qmi.c @@ -413,26 +413,45 @@ static void send_response_to_client(struct test_info *info, struct l_io *io) l_main_iterate(-1); } -/* - * Initiates a send of the TLV data payload to the test service. The test - * service will respond with the same data payload. - */ -static void test_send_data(const void *data) +static struct qmi_service *service_common_setup(struct test_info *info, + bool dedicated) { - _auto_(test_cleanup) struct test_info *info = test_setup(); - struct l_io *io; uint32_t service_type; struct qmi_service *service; perform_lookup(info); service_type = unique_service_type(0); /* Use the first service */ - service = qmi_qrtr_node_get_service(info->node, service_type); + + if (dedicated) + service = qmi_qrtr_node_get_dedicated_service(info->node, + service_type); + else + service = qmi_qrtr_node_get_service(info->node, service_type); + assert(service); - io = l_io_new(info->service_fds[0]); + return service; +} + +static struct l_io *setup_io(int fd, void *user_data) +{ + struct l_io *io = l_io_new(fd); + assert(io); - l_io_set_read_handler(io, received_data, info, NULL); + l_io_set_read_handler(io, received_data, user_data, NULL); + return io; +} + +/* + * Initiates a send of the TLV data payload to the test service. The test + * service will respond with the same data payload. + */ +static void test_send_data(const void *data) +{ + _auto_(test_cleanup) struct test_info *info = test_setup(); + struct l_io *io = setup_io(info->service_fds[0], info); + struct qmi_service *service = service_common_setup(info, false); send_request_via_qmi(info, service); send_response_to_client(info, io); @@ -441,7 +460,6 @@ static void test_send_data(const void *data) qmi_service_free(service); } - static void notify_cb(struct qmi_result *result, void *user_data) { struct test_info *info = user_data; @@ -464,21 +482,10 @@ static void internal_timeout_cb(struct l_timeout *timeout, void *user_data) static void test_notifications(const void *data) { _auto_(test_cleanup) struct test_info *info = test_setup(); - struct l_io *io; - uint32_t service_type; - struct qmi_service *service; + struct qmi_service *service = service_common_setup(info, false); + struct l_io *io = setup_io(info->service_fds[0], info); struct l_timeout *receive_timeout; - perform_lookup(info); - - service_type = unique_service_type(0); /* Use the first service */ - service = qmi_qrtr_node_get_service(info->node, service_type); - assert(service); - - io = l_io_new(info->service_fds[0]); - assert(io); - l_io_set_read_handler(io, received_data, info, NULL); - send_request_via_qmi(info, service); send_response_to_client(info, io); @@ -525,9 +532,7 @@ static void test_service_notification_independence(const void *data) service_type = unique_service_type(0); /* Use the first service */ - io = l_io_new(info->service_fds[0]); - assert(io); - l_io_set_read_handler(io, received_data, info, NULL); + io = setup_io(info->service_fds[0], info); for (i = 0; i < L_ARRAY_SIZE(services); i++) { services[i] = qmi_qrtr_node_get_service(info->node, @@ -558,6 +563,19 @@ static void test_service_notification_independence(const void *data) l_io_destroy(io); } +static void test_dedicated(const void *data) +{ + _auto_(test_cleanup) struct test_info *info = test_setup(); + struct qmi_service *service = service_common_setup(info, true); + struct l_io *io = setup_io(info->service_fds[0], info); + + send_request_via_qmi(info, service); + send_response_to_client(info, io); + + l_io_destroy(io); + qmi_service_free(service); +} + static void exit_if_qrtr_not_supported(void) { int fd; @@ -590,6 +608,7 @@ int main(int argc, char **argv) l_test_add("QRTR notifications", test_notifications, NULL); l_test_add("QRTR service notifications are independent", test_service_notification_independence, NULL); + l_test_add("QRTR dedicated service", test_dedicated, NULL); result = l_test_run(); __ofono_log_cleanup();