From patchwork Mon Jul 2 22:01:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerry Zhang X-Patchwork-Id: 10502513 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 278C260284 for ; Mon, 2 Jul 2018 22:01:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1771128C50 for ; Mon, 2 Jul 2018 22:01:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0BC4F28C52; Mon, 2 Jul 2018 22:01:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D26D28C50 for ; Mon, 2 Jul 2018 22:01:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932290AbeGBWBe (ORCPT ); Mon, 2 Jul 2018 18:01:34 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:43790 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932276AbeGBWBc (ORCPT ); Mon, 2 Jul 2018 18:01:32 -0400 Received: by mail-pg0-f65.google.com with SMTP id v13-v6so2079295pgr.10 for ; Mon, 02 Jul 2018 15:01:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KGAdQzUo7B3pSyl8+RKCu46oOmcEwvCG8jojWXs8h0c=; b=OvE7poQryp3gH0zUrAJmaqSDJEEkBkHMMRJnAyYXB/Oalj3AFJS4bwtjjIzLN2CM3U m8NupHQFHNxOB30SWEQ5EvdtBxSrA48PnFCvgTT5fHzUUmI5YfJRtrBD6ws1uoaIJgPU QNszSQRyToHSmPeCV4zZJD7IMnqgcwwmuHfLOFMzKU/Le7JLv7/uT3YBNhn8XwhLHRu4 Y7qW9FZw6FCKoDp+HaUN75O0NVccGyOiXTRVJZW0vTk5P3fyL+cx7HQpK92ln67vsc76 wXo1qXHX1OGVGYuz+LJmqKim3sBtpCrkyTI9sCYy3a5d5p4xmjEQ8drGF1Dr6Ue7GE5/ hCpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KGAdQzUo7B3pSyl8+RKCu46oOmcEwvCG8jojWXs8h0c=; b=nuQwCIkP3fcfuk8sjeqN/q8BKr60CgpxlgbbdIEzGgnq65h0A37vrY9dJGZmuVErjI QIfYLOh4RD0zFJ1C2Gbx/gjbjQUEA451CeGH2RBLrmc2U1UF4TVzgShnkBBjlMAfV3X9 UVarBVMidr6ICtuSPhq4uuldwEApnxO9098atyEi+RPyX6KD347irt3EGAGZl/bRM+w/ Gjl1XRv7mK+e8SJH7lyutdvvabFmJw0b9O/HkNhpunUnMDPHLm1TMvS8ZAkF+4ydXKHU SlR2vcTHfUMX4DFqdbLTBvzcdwkltum9mltTo1RpmiyQNZ9aEYQs8lr59N/9jve1AGvZ oAFA== X-Gm-Message-State: APt69E1j1C7dXlsMrBYs0m+lnoVp35EXuLCxpHS8Y3V4KZTVF9pFDfAL 8FJKv2EqydsS91CcPrxj/R7lsQ== X-Google-Smtp-Source: AAOMgpfyFb9ntDWUtXI0vREvGi4VNGgyyGNK+EiBxdiFthtHwYtCJ6t1dReL3Jo1EmON4MeuxdHdhw== X-Received: by 2002:a65:5a8a:: with SMTP id c10-v6mr18828670pgt.389.1530568889735; Mon, 02 Jul 2018 15:01:29 -0700 (PDT) Received: from zhangjerry.mtv.corp.google.com ([2620:0:1000:1611:ee20:2649:babf:1d14]) by smtp.gmail.com with ESMTPSA id a8-v6sm33725469pfe.72.2018.07.02.15.01.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jul 2018 15:01:29 -0700 (PDT) From: Jerry Zhang To: Felipe Balbi , Michal Nazarewicz , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, zhangjerry@google.com, jerryxzha@gmail.com, android-kernel-team@google.com Subject: [PATCH 2/3] usb: gadget: f_fs: Add FUNCTIONFS_CONTROL_ONLY flag Date: Mon, 2 Jul 2018 15:01:02 -0700 Message-Id: <20180702220103.176398-3-zhangjerry@google.com> X-Mailer: git-send-email 2.18.0.399.gad0ab374a1-goog In-Reply-To: <20180702220103.176398-1-zhangjerry@google.com> References: <20180702220103.176398-1-zhangjerry@google.com> Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This flag allows users to directly specify when they want a ffs instance to be used for handling control requests only via the configfs control_config/ group. When the flag is set, user must set *none* of the speed descriptor flags and provide no speeds in the descriptor. This ensures that it cannot be mixed up with a normal function. Signed-off-by: Jerry Zhang --- drivers/usb/gadget/function/f_fs.c | 22 +++++++++++----------- include/uapi/linux/usb/functionfs.h | 1 + 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index a6868f936c78..ddec3606c0e1 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -339,11 +339,6 @@ static ssize_t ffs_ep0_write(struct file *file, const char __user *buf, case FFS_READ_DESCRIPTORS: case FFS_READ_STRINGS: /* Copy data */ - if (unlikely(len < 16)) { - ret = -EINVAL; - break; - } - data = ffs_prepare_buffer(buf, len); if (IS_ERR(data)) { ret = PTR_ERR(data); @@ -2393,10 +2388,19 @@ static int __ffs_data_got_descs(struct ffs_data *ffs, FUNCTIONFS_VIRTUAL_ADDR | FUNCTIONFS_EVENTFD | FUNCTIONFS_ALL_CTRL_RECIP | - FUNCTIONFS_CONFIG0_SETUP)) { + FUNCTIONFS_CONFIG0_SETUP | + FUNCTIONFS_CONTROL_ONLY)) { ret = -ENOSYS; goto error; } + if ((bool) (flags & (FUNCTIONFS_HAS_FS_DESC | + FUNCTIONFS_HAS_HS_DESC | + FUNCTIONFS_HAS_SS_DESC)) == + (bool) (flags & FUNCTIONFS_CONTROL_ONLY)) { + pr_err("Must have at least one speed descriptor " + "or CONTROL_ONLY (but not both)\n"); + goto error; + } data += 12; len -= 12; break; @@ -2476,7 +2480,7 @@ static int __ffs_data_got_descs(struct ffs_data *ffs, len -= ret; } - if (raw_descs == data || len) { + if (len) { ret = -EINVAL; goto error; } @@ -3030,10 +3034,6 @@ static int _ffs_func_bind(struct usb_configuration *c, ENTER(); - /* Has descriptors only for speeds gadget does not support */ - if (unlikely(!(full | high | super))) - return -ENOTSUPP; - /* Allocate a single chunk, less management later on */ vlabuf = kzalloc(vla_group_size(d), GFP_KERNEL); if (unlikely(!vlabuf)) diff --git a/include/uapi/linux/usb/functionfs.h b/include/uapi/linux/usb/functionfs.h index d77ee6b65328..25e55f485a6e 100644 --- a/include/uapi/linux/usb/functionfs.h +++ b/include/uapi/linux/usb/functionfs.h @@ -24,6 +24,7 @@ enum functionfs_flags { FUNCTIONFS_EVENTFD = 32, FUNCTIONFS_ALL_CTRL_RECIP = 64, FUNCTIONFS_CONFIG0_SETUP = 128, + FUNCTIONFS_CONTROL_ONLY = 256, }; /* Descriptor of an non-audio endpoint */