Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752891AbdFMGwx (ORCPT ); Tue, 13 Jun 2017 02:52:53 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:34387 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752191AbdFMGwt (ORCPT ); Tue, 13 Jun 2017 02:52:49 -0400 From: Tal Shorer To: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, gregkh@linuxfoundation.org, balbi@kernel.org, corbet@lwn.net Cc: Tal Shorer Subject: [PATCH v2 6/8] usb: gadget: f_acm: add an ioctl to get the current line coding Date: Tue, 13 Jun 2017 09:52:12 +0300 Message-Id: <1497336734-19368-7-git-send-email-tal.shorer@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1497336734-19368-1-git-send-email-tal.shorer@gmail.com> References: <1497336734-19368-1-git-send-email-tal.shorer@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2839 Lines: 87 The user can issue USB_F_GET_LINE_CODING to get the current line coding as set by the host (or the default if unset yet). Signed-off-by: Tal Shorer --- Documentation/ioctl/ioctl-number.txt | 1 + drivers/usb/gadget/function/f_acm.c | 19 +++++++++++++++++++ include/uapi/linux/usb/f_acm.h | 12 ++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 include/uapi/linux/usb/f_acm.h diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index 1e9fcb4..3d70680 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt @@ -329,6 +329,7 @@ Code Seq#(hex) Include File Comments 0xCA 80-8F uapi/scsi/cxlflash_ioctl.h 0xCB 00-1F CBM serial IEC bus in development: +0xCD 10-1F linux/usb/f_acm.h 0xCD 01 linux/reiserfs_fs.h 0xCF 02 fs/cifs/ioctl.c 0xDB 00-0F drivers/char/mwave/mwavepub.h diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c index 188d314..5feea7c 100644 --- a/drivers/usb/gadget/function/f_acm.c +++ b/drivers/usb/gadget/function/f_acm.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "u_serial.h" @@ -611,6 +612,23 @@ static int acm_send_break(struct gserial *port, int duration) return acm_notify_serial_state(acm); } +static int acm_ioctl(struct gserial *port, unsigned int cmd, unsigned long arg) +{ + struct f_acm *acm = port_to_acm(port); + int ret = -ENOIOCTLCMD; + + switch (cmd) { + case USB_F_ACM_GET_LINE_CODING: + if (copy_to_user((__user void *)arg, &acm->port_line_coding, + sizeof(acm->port_line_coding))) + ret = -EFAULT; + else + ret = 0; + break; + } + return ret; +} + /*-------------------------------------------------------------------------*/ /* ACM function driver setup/binding */ @@ -749,6 +767,7 @@ static struct usb_function *acm_alloc_func(struct usb_function_instance *fi) acm->port.connect = acm_connect; acm->port.disconnect = acm_disconnect; acm->port.send_break = acm_send_break; + acm->port.ioctl = acm_ioctl; acm->port.func.name = "acm"; acm->port.func.strings = acm_strings; diff --git a/include/uapi/linux/usb/f_acm.h b/include/uapi/linux/usb/f_acm.h new file mode 100644 index 0000000..51f96f0 --- /dev/null +++ b/include/uapi/linux/usb/f_acm.h @@ -0,0 +1,12 @@ +/* f_acm.h -- Header file for USB CDC-ACM gadget function */ + +#ifndef __UAPI_LINUX_USB_F_ACM_H +#define __UAPI_LINUX_USB_F_ACM_H + +#include +#include + +/* The 0xCD code is also used by reiserfs. we use 0x10-0x1F range */ +#define USB_F_ACM_GET_LINE_CODING _IOR(0xCD, 0x10, struct usb_cdc_line_coding) + +#endif /* __UAPI_LINUX_USB_F_ACM_H */ -- 2.7.4