Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp5434774pxu; Thu, 22 Oct 2020 02:07:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdMRSnUtSt845JD+yev+UzBTSR1npaPDflOxdhQUEzm4DVS1se97YVG70JD4dCGs6OlZzr X-Received: by 2002:a50:fd17:: with SMTP id i23mr1240379eds.50.1603357644865; Thu, 22 Oct 2020 02:07:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603357644; cv=none; d=google.com; s=arc-20160816; b=kfSBeQnwDJfAJ6AsclWxKbslrmRl6ScyJpu/Ei0zhKKxFhw7v/933I7aGmibdWquX0 m0nM9pFbutQTrPe0voLe3oKZinGu+9EkcPrcDg2KJG0m2IsCUeATAVO+5fdNzyLdnnvn IgDw5nr0H7lk4w50MUiEwloBCmEt3GpRIOanMUAB44Ut+4aSvPbT0AC5vGC8S73gT2Yf 8ADlMj5C8lFNReKuOyb8ChswCNebERCFVieqQAAjuwrxVyfSXt4JKhtf4sLXxehxFWzU HBN3gjvVc8YP0BEl16Z756dEBrW3L8agcX6oaSSCgyaSnT1HLPMpv2RO4LvNaHYltzWL i+kw== 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=qoVYRfC82HP6ntvSqaZuxC+KWwGG0EWGKLq1cKl7bh8=; b=pDa5btpTB0MD7URtqFtb3T+QSWc7sz+zLpHEKCmNj7b1iloA2JEtm5+1mz8ZeoGCn4 xzzFw8JR1I1eXSbTHmOxIZ8wGyJbRCxn56BPJQNrG2pSZu9P8ygZOlmZBm3ZTuWjFZfb hnTryu1A1DuaYITN9Q5pnG1mvqgtd7E3m4OGmWA0hAY/aqEXeY80cXJzufk9lptJ90r8 p1OtZWbuNPCMyUqyVfr/+NK4aIg/5xG5QEGYgqgajhYBjhmt1Hr64YDrp+b8agd1U5NZ Ok84DKISuF0MBOUDvX7RTWg5BIDleR4poMDHBM6n6nQ6OVBv0g+mwLQAHOENCrWpMU3S W7/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mg.codeaurora.org header.s=smtp header.b=sr+gmexg; 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 ba2si557404edb.503.2020.10.22.02.07.02; Thu, 22 Oct 2020 02:07:24 -0700 (PDT) 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=sr+gmexg; 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 S2895658AbgJVIXI (ORCPT + 99 others); Thu, 22 Oct 2020 04:23:08 -0400 Received: from m42-4.mailgun.net ([69.72.42.4]:40284 "EHLO m42-4.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2895503AbgJVIXG (ORCPT ); Thu, 22 Oct 2020 04:23:06 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1603354986; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=qoVYRfC82HP6ntvSqaZuxC+KWwGG0EWGKLq1cKl7bh8=; b=sr+gmexgNgruc3CKIBNbi+X9u8Z1p63bLYMGakIvI9CYAgKIewo4tUuWVR106RnRZKzCYRhj ag+xEYR86wi4QPH/gm0/rHxzKtUB7uEGRG1uBd0buEokd3tE9vCRvxOxD8r86OW8ehe3+hgq O1Wrmw7rnbYvrsdE46LKn2gmiq8= X-Mailgun-Sending-Ip: 69.72.42.4 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-n04.prod.us-east-1.postgun.com with SMTP id 5f9141584f8cc67c31954a80 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Thu, 22 Oct 2020 08:22:48 GMT Sender: hemantk=codeaurora.org@mg.codeaurora.org Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 4FF41C433C9; Thu, 22 Oct 2020 08:22:48 +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 0D830C43391; Thu, 22 Oct 2020 08:22:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 0D830C43391 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, Hemant Kumar Subject: [PATCH v8 3/4] docs: Add documentation for userspace client interface Date: Thu, 22 Oct 2020 01:22:37 -0700 Message-Id: <1603354958-24025-4-git-send-email-hemantk@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1603354958-24025-1-git-send-email-hemantk@codeaurora.org> References: <1603354958-24025-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 Loopback MHI channel is supported by this driver. Signed-off-by: Hemant Kumar --- Documentation/mhi/index.rst | 1 + Documentation/mhi/uci.rst | 83 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 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..fe901c4 --- /dev/null +++ b/Documentation/mhi/uci.rst @@ -0,0 +1,83 @@ +.. 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. + +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, TRE buffer is copied to +pending list. Reader is unblocked and data is copied to userspace buffer. TRE +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. MHI channels +move to disabled state upon driver remove. + +release +------- + +Decrements UCI device reference count and UCI channel reference count upon last +release(). UCI channel clean up is performed. MHI channel moves to disabled +state and inbound buffers are freed. + +Usage +===== + +Device file node is created with format:- + +/dev/mhi__ + +controller_name is the name of underlying bus used to transfer data. mhi_device +name is 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. + +LOOPBACK Channel +---------------- + +Userspace MHI client using LOOPBACK channel opens device file node. As part of +open operation TREs to transfer ring of LOOPBACK channel 1 gets queued and channel +doorbell is rung. When userspace MHI client performs write operation on device node, +data buffer gets queued as a TRE to transfer ring of LOOPBACK channel 0. MHI Core +driver rings the channel doorbell for MHI device to move data over underlying bus. +When userspace MHI client driver performs read operation, same data gets looped back +to MHI host using LOOPBACK channel 1. LOOPBACK channel is used to verify data path +and data integrity between MHI Host and MHI device. + +Other Use Cases +--------------- + +Getting MHI device specific diagnostics information to userspace MHI diag 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