Received: by 10.223.185.116 with SMTP id b49csp219267wrg; Mon, 19 Feb 2018 20:48:59 -0800 (PST) X-Google-Smtp-Source: AH8x224GBHZ2TAaJ5T53H/LHpwWqoqS833cgq9AshuVT/xIS13gqcrfYIDsEAuuPQDFjnZ5Cj1Im X-Received: by 10.98.0.67 with SMTP id 64mr12886311pfa.63.1519102138903; Mon, 19 Feb 2018 20:48:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519102138; cv=none; d=google.com; s=arc-20160816; b=sZszF0LDUmVT7Syp1TNkddnVDGSv3WkJmVT+UdwKP6Y7W+Ugebg61ERdAizc3gvftZ F6irhRuDmiMM4SUf+5rVYYzLfFYqqShzAtp0QSv+mtYhe6GYO3Pyy20hOQbu77w0B4ra 2ye3IcRh7eu9zWVi7VWqszIjiypq+UTMgL/VewxqCNq4euUubtRyKH8uQFrNZsiEn3GL RAcIVr0ZEU/TsZeMCwFZYBK/pKwNTLXwonfFduAm6s8a0RZEz6pHiTjIBi8Kghq+rSze Xle22fW4+oNSQMW6km5GLgrUajSkerfGPorq0HYMtddcQ5CEi1yckoQk7Et8vkWR0XVG tHTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=ah7cnksrju1JBuiZnB++Q9PsolGThjztwMRKMM8iRWU=; b=QhWjLPJTgy1CmL0JZy5p44pgaumdfwCWjKOw4Tkl2DeWIQW4sgJ2dR4ABb5qkavgq2 Ttf52uk/2RosEMo1bxRepKG1Jt+XnWYLMmjbYYZGr2UCSwneBlupSvY4zwEMN6XG/xFe wqQBSoB0ly6Cfv+Kmkmjid/PHHldyfvvP4tBIS6vM17pFs+w2qgU2DnsYmf3XwpWfXAO dUwbX0c3gHXS8FCfNUIpa1DGkcYtsUxmCr+wptv5YFDxC1F1t7yRvkAPFFjpX8VFKILT 8WiZXaYS79mRsn/RtKuY1RuwLs+jvUVfqEKB+nQxpDaVlYbOHwIGUcAlf02LudywlY94 dQug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=QL5BGepc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i8si5656532pgf.196.2018.02.19.20.48.44; Mon, 19 Feb 2018 20:48:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=QL5BGepc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751855AbeBTErH (ORCPT + 99 others); Mon, 19 Feb 2018 23:47:07 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:45225 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751511AbeBTEp1 (ORCPT ); Mon, 19 Feb 2018 23:45:27 -0500 Received: by mail-pg0-f66.google.com with SMTP id e11so6688900pgq.12 for ; Mon, 19 Feb 2018 20:45:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ah7cnksrju1JBuiZnB++Q9PsolGThjztwMRKMM8iRWU=; b=QL5BGepc4F2Qprj1M6g55sfmaf1CRdTfLompy6WYj4IQ2nvmxoyqymLRB50IrzCIuU G7BELuLXM9ySahHC0KFEH9kPcWyMBoFrbbb/smFDK3KUzul4XTFWA2qBAf0SzEGqhoQw ASrtN0DUgKIYkehGfPjSOzM7Qg4SZdaGOn7SQ= 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=ah7cnksrju1JBuiZnB++Q9PsolGThjztwMRKMM8iRWU=; b=iXQqqrVVU20gABhDknB+5VAGrqfYsI9woD+tkDvfVgN0IvyxgGA28s1wdo+DN3hEj7 UujqctxuW9hnS5f69l1qI4AkrJ/MvEa5w3V/EWwaNEWffX1wL1D8W2cjcze5YiImiQr1 wEyJEycOuosJXakDVaJKTd3ssxrvGk973gK1syp1+WCpXKGhheP6g7SvynIESVmrYYFS ur3SyLA4opF/o2GcZzdh5XUww2X5VNUyiJzeYZqFmExpX5PtgclMP7+/dhCqon7+MsoC oengZ2OR2MpmETpVRl23izVypU/IVGpR78P2YK/IES0/Vv7Ba2dsyPdjxtIrAO5tsw7C ca2g== X-Gm-Message-State: APf1xPBptEcaCb6OlAnYljhaqtWuXtz7mQlPxF7a9EJkJz1Y9I53BaLH VRsEoFn199139DzplhQWqU1Vhg== X-Received: by 10.101.81.12 with SMTP id f12mr13864797pgq.81.1519101926967; Mon, 19 Feb 2018 20:45:26 -0800 (PST) Received: from acourbot.tok.corp.google.com ([2401:fa00:4:1002:a6cd:a898:e07b:a331]) by smtp.gmail.com with ESMTPSA id q9sm783397pgs.28.2018.02.19.20.45.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Feb 2018 20:45:26 -0800 (PST) From: Alexandre Courbot To: Mauro Carvalho Chehab , Hans Verkuil , Laurent Pinchart , Pawel Osciak , Marek Szyprowski , Tomasz Figa , Sakari Ailus Cc: Gustavo Padovan , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot Subject: [RFCv4 16/21] v4l2: video_device: support for creating requests Date: Tue, 20 Feb 2018 13:44:20 +0900 Message-Id: <20180220044425.169493-17-acourbot@chromium.org> X-Mailer: git-send-email 2.16.1.291.g4437f3f132-goog In-Reply-To: <20180220044425.169493-1-acourbot@chromium.org> References: <20180220044425.169493-1-acourbot@chromium.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a new VIDIOC_NEW_REQUEST ioctl, which allows to instanciate requests on devices that support the request API. Requests created that way can only control the device they originate from, making them suitable for simple devices, but not complex pipelines. Signed-off-by: Alexandre Courbot --- Documentation/ioctl/ioctl-number.txt | 1 + drivers/media/v4l2-core/v4l2-dev.c | 2 ++ drivers/media/v4l2-core/v4l2-ioctl.c | 25 +++++++++++++++++++++++++ include/media/v4l2-dev.h | 2 ++ include/uapi/linux/videodev2.h | 3 +++ 5 files changed, 33 insertions(+) diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index 6501389d55b9..afdc9ed255b0 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt @@ -286,6 +286,7 @@ Code Seq#(hex) Include File Comments 'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict! '|' 00-7F linux/media.h +'|' 80-9F linux/media-request.h 0x80 00-1F linux/fb.h 0x89 00-06 arch/x86/include/asm/sockios.h 0x89 0B-DF linux/sockios.h diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index 0301fe426a43..062ebee5bffc 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -559,6 +559,8 @@ static void determine_valid_ioctls(struct video_device *vdev) set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls); if (vdev->ctrl_handler || ops->vidioc_querymenu) set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls); + if (vdev->req_mgr) + set_bit(_IOC_NR(VIDIOC_NEW_REQUEST), valid_ioctls); SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency); SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency); SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status); diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index ab4968ea443f..a45fe078f8ae 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -21,6 +21,7 @@ #include +#include #include #include #include @@ -842,6 +843,13 @@ static void v4l_print_freq_band(const void *arg, bool write_only) p->rangehigh, p->modulation); } +static void vidioc_print_new_request(const void *arg, bool write_only) +{ + const struct media_request_new *new = arg; + + pr_cont("fd=0x%x\n", new->fd); +} + static void v4l_print_edid(const void *arg, bool write_only) { const struct v4l2_edid *p = arg; @@ -2486,6 +2494,22 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops, return -ENOTTY; } +static int vidioc_new_request(const struct v4l2_ioctl_ops *ops, + struct file *file, void *fh, void *arg) +{ +#if IS_ENABLED(CONFIG_MEDIA_REQUEST_API) + struct media_request_new *new = arg; + struct video_device *vfd = video_devdata(file); + + if (!vfd->req_mgr) + return -ENOTTY; + + return media_request_ioctl_new(vfd->req_mgr, new); +#else + return -ENOTTY; +#endif +} + struct v4l2_ioctl_info { unsigned int ioctl; u32 flags; @@ -2617,6 +2641,7 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0), IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), IOCTL_INFO_FNC(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, id)), + IOCTL_INFO_FNC(VIDIOC_NEW_REQUEST, vidioc_new_request, vidioc_print_new_request, 0), }; #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 53f32022fabe..e6c4e10889bc 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h @@ -209,6 +209,7 @@ struct v4l2_file_operations { * @entity: &struct media_entity * @intf_devnode: pointer to &struct media_intf_devnode * @pipe: &struct media_pipeline + * @req_mgr: request manager to use if this device supports creating requests * @fops: pointer to &struct v4l2_file_operations for the video device * @device_caps: device capabilities as used in v4l2_capabilities * @dev: &struct device for the video device @@ -251,6 +252,7 @@ struct video_device struct media_intf_devnode *intf_devnode; struct media_pipeline pipe; #endif + struct media_request_mgr *req_mgr; const struct v4l2_file_operations *fops; u32 device_caps; diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 91cfe0cbd5c5..35706204e81d 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -63,6 +63,7 @@ #include #include #include +#include #include #include @@ -2407,6 +2408,8 @@ struct v4l2_create_buffers { #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl) +#define VIDIOC_NEW_REQUEST _IOWR('V', 104, struct media_request_new) + /* Reminder: when adding new ioctls please add support for them to drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */ -- 2.16.1.291.g4437f3f132-goog