Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fpga: dfl: fme: add DFL_FPGA_GET_API_VERSION/CHECK_EXTENSION ioctls support

DFL_FPGA_GET_API_VERSION and DFL_FPGA_CHECK_EXTENSION ioctls are common
ones which need to be supported by all feature devices drivers including
FME and AFU. Userspace application can use these ioctl interfaces to get
the API info and check if specific extension is supported or not in
current driver.

This patch implements above 2 ioctls in FPGA Management Engine (FME)
driver.

Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
Signed-off-by: Enno Luebbers <enno.luebbers@intel.com>
Signed-off-by: Shiva Rao <shiva.rao@intel.com>
Signed-off-by: Christopher Rauer <christopher.rauer@intel.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Signed-off-by: Wu Hao <hao.wu@intel.com>
Acked-by: Alan Tull <atull@kernel.org>
Acked-by: Moritz Fischer <mdf@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Wu Hao and committed by
Greg Kroah-Hartman
620e1902 0a27ff24

+63
+1
Documentation/ioctl/ioctl-number.txt
··· 322 322 0xB3 00 linux/mmc/ioctl.h 323 323 0xB4 00-0F linux/gpio.h <mailto:linux-gpio@vger.kernel.org> 324 324 0xB5 00-0F uapi/linux/rpmsg.h <mailto:linux-remoteproc@vger.kernel.org> 325 + 0xB6 all linux/fpga-dfl.h 325 326 0xC0 00-0F linux/usb/iowarrior.h 326 327 0xCA 00-0F uapi/misc/cxl.h 327 328 0xCA 10-2F uapi/misc/ocxl.h
+12
drivers/fpga/dfl-fme-main.c
··· 16 16 17 17 #include <linux/kernel.h> 18 18 #include <linux/module.h> 19 + #include <linux/fpga-dfl.h> 19 20 20 21 #include "dfl.h" 21 22 ··· 117 116 }, 118 117 }; 119 118 119 + static long fme_ioctl_check_extension(struct dfl_feature_platform_data *pdata, 120 + unsigned long arg) 121 + { 122 + /* No extension support for now */ 123 + return 0; 124 + } 125 + 120 126 static int fme_open(struct inode *inode, struct file *filp) 121 127 { 122 128 struct platform_device *fdev = dfl_fpga_inode_to_feature_dev(inode); ··· 164 156 dev_dbg(&pdev->dev, "%s cmd 0x%x\n", __func__, cmd); 165 157 166 158 switch (cmd) { 159 + case DFL_FPGA_GET_API_VERSION: 160 + return DFL_FPGA_API_VERSION; 161 + case DFL_FPGA_CHECK_EXTENSION: 162 + return fme_ioctl_check_extension(pdata, arg); 167 163 default: 168 164 /* 169 165 * Let sub-feature's ioctl function to handle the cmd.
+50
include/uapi/linux/fpga-dfl.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 + /* 3 + * Header File for FPGA DFL User API 4 + * 5 + * Copyright (C) 2017-2018 Intel Corporation, Inc. 6 + * 7 + * Authors: 8 + * Kang Luwei <luwei.kang@intel.com> 9 + * Zhang Yi <yi.z.zhang@intel.com> 10 + * Wu Hao <hao.wu@intel.com> 11 + * Xiao Guangrong <guangrong.xiao@linux.intel.com> 12 + */ 13 + 14 + #ifndef _UAPI_LINUX_FPGA_DFL_H 15 + #define _UAPI_LINUX_FPGA_DFL_H 16 + 17 + #include <linux/ioctl.h> 18 + 19 + #define DFL_FPGA_API_VERSION 0 20 + 21 + /* 22 + * The IOCTL interface for DFL based FPGA is designed for extensibility by 23 + * embedding the structure length (argsz) and flags into structures passed 24 + * between kernel and userspace. This design referenced the VFIO IOCTL 25 + * interface (include/uapi/linux/vfio.h). 26 + */ 27 + 28 + #define DFL_FPGA_MAGIC 0xB6 29 + 30 + #define DFL_FPGA_BASE 0 31 + 32 + /** 33 + * DFL_FPGA_GET_API_VERSION - _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 0) 34 + * 35 + * Report the version of the driver API. 36 + * Return: Driver API Version. 37 + */ 38 + 39 + #define DFL_FPGA_GET_API_VERSION _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 0) 40 + 41 + /** 42 + * DFL_FPGA_CHECK_EXTENSION - _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 1) 43 + * 44 + * Check whether an extension is supported. 45 + * Return: 0 if not supported, otherwise the extension is supported. 46 + */ 47 + 48 + #define DFL_FPGA_CHECK_EXTENSION _IO(DFL_FPGA_MAGIC, DFL_FPGA_BASE + 1) 49 + 50 + #endif /* _UAPI_LINUX_FPGA_DFL_H */