Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp2321457pxu; Sat, 28 Nov 2020 10:04:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJyvQPFasilGZrGx+3CO4rokV4TSsG47K8EVA0lmn8NsiWBax7xdzLX+CozJYBEDs/C247PQ X-Received: by 2002:a50:ab07:: with SMTP id s7mr14175972edc.374.1606586694542; Sat, 28 Nov 2020 10:04:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606586694; cv=none; d=google.com; s=arc-20160816; b=Dml2eiFkmUO+qNnsvpW2Zy0LSXMRviou7Ad10tf0vqwln9RxTSvbqrUOzIOaAtzwFx 7s4XlyS+Y+BkbaSoMp4Bg4TG3SffCP+UyjgAYI/A2r7uGfCA1wO/kqEzbCRlS23ENAar pUXMH1odaryuAce+BwRR2bRgzkFGgAecnto9eBMnSEg+eGrcf7rSLRmxwbQ5bnYD9AnK /mrFVPOOjpn2geDhIcUnNEG3Z4TPg0RtpsmterkbLBkfW9ty2IyBIW+ZmnSTM9asXsqA zH/J25QnMaP3FoH+v998gJvvEhB9YZyXKHq5VDmBJoeprQ81xhbUUP9lr0qToZbywuKl qyAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dmarc-filter:sender:dkim-signature; bh=82RyCiKwAFMqEHLu7jQaIr6mzZ0JmGASM/p7IcuDeXU=; b=suBKI7372ux5pEOAY6OMZDZkTlO3vYgwg+w3YsvbalI1yFleW9yDyyZJDlBGUX1Wxc PBWibrb8ERb4QCfxIonlo8oPB7vZnfOG8dHGkmqaV+asDyfZEbYmp+VznrdpW25e46qt cobt3sE8IDNV2O6O8qzM2Z/AhqkzY5T5vu9WpNIpVZPxCT3x13QmhUuXe62KlHhmOUxz Qj3F28gPZG5nYGYA2WS5RI0RW8qsA70tR15iNF6bz0xnam5IMYXViDrWiPZUo3IFO4zL XlqzBSXFcWQQqgQxvvzIjYDZgRdONszt2EqCZ4NFOkfzke2TMGqUGAGva8h4ampSGQ/9 F7kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=bH1MM+VK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x11si9374968edi.448.2020.11.28.10.04.27; Sat, 28 Nov 2020 10:04:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=bH1MM+VK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731252AbgK1D3Q (ORCPT + 99 others); Fri, 27 Nov 2020 22:29:16 -0500 Received: from z5.mailgun.us ([104.130.96.5]:23329 "EHLO z5.mailgun.us" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731037AbgK1D0r (ORCPT ); Fri, 27 Nov 2020 22:26:47 -0500 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1606533980; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=82RyCiKwAFMqEHLu7jQaIr6mzZ0JmGASM/p7IcuDeXU=; b=bH1MM+VKJok0pSvDMFqdg8RISOrq4IX7K0xh+CEAhO9L9y8aneRGgqPzzfue9AmriIuHddmt xG6JA+eTQ/pAoC5oXe+kxGcM9M2gF+9UtaG6FriLzrYcVvmqKxN9Jzh/ujPGjHMtUoFDasap eKlu5yagNfc7Iu2P++6aZAHuGh8= X-Mailgun-Sending-Ip: 104.130.96.5 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n01.prod.us-east-1.postgun.com with SMTP id 5fc1c359b9b39088ed90a406 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Sat, 28 Nov 2020 03:26:17 GMT Sender: hemantk=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 4ADAAC433C6; Sat, 28 Nov 2020 03:26:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=ALL_TRUSTED,BAYES_00,SPF_FAIL, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from codeaurora.org (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: hemantk) by smtp.codeaurora.org (Postfix) with ESMTPSA id 23205C43462; Sat, 28 Nov 2020 03:26:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 23205C43462 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=hemantk@codeaurora.org From: Hemant Kumar To: manivannan.sadhasivam@linaro.org, gregkh@linuxfoundation.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, jhugo@codeaurora.org, bbhatt@codeaurora.org, loic.poulain@linaro.org, netdev@vger.kernel.org, Hemant Kumar Subject: [PATCH v13 3/4] docs: Add documentation for userspace client interface Date: Fri, 27 Nov 2020 19:26:05 -0800 Message-Id: <1606533966-22821-4-git-send-email-hemantk@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1606533966-22821-1-git-send-email-hemantk@codeaurora.org> References: <1606533966-22821-1-git-send-email-hemantk@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org MHI userspace client driver is creating device file node for user application to perform file operations. File operations are handled by MHI core driver. Currently QMI MHI channel is supported by this driver. Signed-off-by: Hemant Kumar --- Documentation/mhi/index.rst | 1 + Documentation/mhi/uci.rst | 94 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 Documentation/mhi/uci.rst diff --git a/Documentation/mhi/index.rst b/Documentation/mhi/index.rst index 1d8dec3..c75a371 100644 --- a/Documentation/mhi/index.rst +++ b/Documentation/mhi/index.rst @@ -9,6 +9,7 @@ MHI mhi topology + uci .. only:: subproject and html diff --git a/Documentation/mhi/uci.rst b/Documentation/mhi/uci.rst new file mode 100644 index 0000000..ad22650 --- /dev/null +++ b/Documentation/mhi/uci.rst @@ -0,0 +1,94 @@ +.. SPDX-License-Identifier: GPL-2.0 + +================================= +Userspace Client Interface (UCI) +================================= + +UCI driver enables userspace clients to communicate to external MHI devices +like modem and WLAN. UCI driver probe creates standard character device file +nodes for userspace clients to perform open, read, write, poll and release file +operations. UCI device object represents UCI device file node which gets +instantiated as part of MHI UCI driver probe. UCI channel object represents +MHI uplink or downlink channel. + +Operations +========== + +open +---- + +Instantiates UCI channel object and starts MHI channels to move it to running +state. Inbound buffers are queued to downlink channel transfer ring. Every +subsequent open() increments UCI device reference count as well as UCI channel +reference count. + +read +---- + +When data transfer is completed on downlink channel, transfer ring element +buffer is copied to pending list. Reader is unblocked and data is copied to +userspace buffer. Transfer ring element buffer is queued back to downlink +channel transfer ring. + +write +----- + +Write buffer is queued to uplink channel transfer ring if ring is not full. Upon +uplink transfer completion buffer is freed. + +poll +---- + +Returns EPOLLIN | EPOLLRDNORM mask if pending list has buffers to be read by +userspace. Returns EPOLLOUT | EPOLLWRNORM mask if MHI uplink channel transfer +ring is not empty. Returns EPOLLERR when UCI driver is removed. + +release +------- + +Decrements UCI device reference count and UCI channel reference count upon last +release(). UCI channel clean up is performed. MHI channel moves to disable +state and inbound buffers are freed. + +Usage +===== + +Device file node is created with format:- + +/dev/mhi_ + +mhi_device_name includes mhi controller name and the name of the MHI channel +being used by MHI client in userspace to send or receive data using MHI +protocol. + +There is a separate character device file node created for each channel +specified in MHI device id table. MHI channels are statically defined by MHI +specification. The list of supported channels is in the channel list variable +of mhi_device_id table in UCI driver. + +Qualcomm MSM Interface(QMI) Channel +----------------------------------- + +Qualcomm MSM Interface(QMI) is a modem control messaging protocol used to +communicate between software components in the modem and other peripheral +subsystems. QMI communication is of request/response type or an unsolicited +event type. libqmi is userspace MHI client which communicates to a QMI service +using UCI device. It sends a QMI request to a QMI service using MHI channel 14 +or 16. QMI response is received using MHI channel 15 or 17 respectively. libqmi +is a glib-based library for talking to WWAN modems and devices which speaks QMI +protocol. For more information about libqmi please refer +https://www.freedesktop.org/wiki/Software/libqmi/ + +Usage Example +~~~~~~~~~~~~~ + +QMI command to retrieve device mode +$ sudo qmicli -d /dev/mhi_0000\:02\:00.0_QMI --dms-get-model +[/dev/mhi_0000:02:00.0_QMI] Device model retrieved: + Model: 'FN980m' + +Other Use Cases +--------------- + +Getting MHI device specific diagnostics information to userspace MHI diagnostic +client using DIAG channel 4 (Host to device) and 5 (Device to Host). -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project