Skip to content

Commit 620e190

Browse files
WuHao270gregkh
authored andcommitted
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 <[email protected]> Signed-off-by: Enno Luebbers <[email protected]> Signed-off-by: Shiva Rao <[email protected]> Signed-off-by: Christopher Rauer <[email protected]> Signed-off-by: Xiao Guangrong <[email protected]> Signed-off-by: Wu Hao <[email protected]> Acked-by: Alan Tull <[email protected]> Acked-by: Moritz Fischer <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 0a27ff2 commit 620e190

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

Documentation/ioctl/ioctl-number.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ Code Seq#(hex) Include File Comments
322322
0xB3 00 linux/mmc/ioctl.h
323323
0xB4 00-0F linux/gpio.h <mailto:[email protected]>
324324
0xB5 00-0F uapi/linux/rpmsg.h <mailto:[email protected]>
325+
0xB6 all linux/fpga-dfl.h
325326
0xC0 00-0F linux/usb/iowarrior.h
326327
0xCA 00-0F uapi/misc/cxl.h
327328
0xCA 10-2F uapi/misc/ocxl.h

drivers/fpga/dfl-fme-main.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include <linux/kernel.h>
1818
#include <linux/module.h>
19+
#include <linux/fpga-dfl.h>
1920

2021
#include "dfl.h"
2122

@@ -116,6 +117,13 @@ static struct dfl_feature_driver fme_feature_drvs[] = {
116117
},
117118
};
118119

120+
static long fme_ioctl_check_extension(struct dfl_feature_platform_data *pdata,
121+
unsigned long arg)
122+
{
123+
/* No extension support for now */
124+
return 0;
125+
}
126+
119127
static int fme_open(struct inode *inode, struct file *filp)
120128
{
121129
struct platform_device *fdev = dfl_fpga_inode_to_feature_dev(inode);
@@ -156,6 +164,10 @@ static long fme_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
156164
dev_dbg(&pdev->dev, "%s cmd 0x%x\n", __func__, cmd);
157165

158166
switch (cmd) {
167+
case DFL_FPGA_GET_API_VERSION:
168+
return DFL_FPGA_API_VERSION;
169+
case DFL_FPGA_CHECK_EXTENSION:
170+
return fme_ioctl_check_extension(pdata, arg);
159171
default:
160172
/*
161173
* Let sub-feature's ioctl function to handle the cmd.

include/uapi/linux/fpga-dfl.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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 <[email protected]>
9+
* Zhang Yi <[email protected]>
10+
* Wu Hao <[email protected]>
11+
* Xiao Guangrong <[email protected]>
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 */

0 commit comments

Comments
 (0)