summaryrefslogtreecommitdiffstats
path: root/include/linux/fpga
diff options
context:
space:
mode:
authorAlan Tull <atull@opensource.altera.com>2016-11-01 15:14:28 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-10 11:03:35 -0500
commit21aeda950c5f84a8351b862816d832120b217a9b (patch)
tree265b6231d1f8cde927c3de7f674e85c34b4527a2 /include/linux/fpga
parent12e2508213acac638cd05b647237fde19eb132aa (diff)
fpga: add fpga bridge framework
This framework adds API functions for enabling/ disabling FPGA bridges under kernel control. This allows the Linux kernel to disable FPGA bridges during FPGA reprogramming and to enable FPGA bridges when FPGA reprogramming is done. This framework is be manufacturer-agnostic, allowing it to be used in interfaces that use the FPGA Manager Framework to reprogram FPGA's. The functions are: * of_fpga_bridge_get * fpga_bridge_put Get/put an exclusive reference to a FPGA bridge. * fpga_bridge_enable * fpga_bridge_disable Enable/Disable traffic through a bridge. * fpga_bridge_register * fpga_bridge_unregister Register/unregister a device-specific low level FPGA Bridge driver. Get an exclusive reference to a bridge and add it to a list: * fpga_bridge_get_to_list To enable/disable/put a set of bridges that are on a list: * fpga_bridges_enable * fpga_bridges_disable * fpga_bridges_put Signed-off-by: Alan Tull <atull@opensource.altera.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/fpga')
-rw-r--r--include/linux/fpga/fpga-bridge.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/linux/fpga/fpga-bridge.h b/include/linux/fpga/fpga-bridge.h
new file mode 100644
index 000000000000..dba6e3c697c7
--- /dev/null
+++ b/include/linux/fpga/fpga-bridge.h
@@ -0,0 +1,60 @@
1#include <linux/device.h>
2#include <linux/fpga/fpga-mgr.h>
3
4#ifndef _LINUX_FPGA_BRIDGE_H
5#define _LINUX_FPGA_BRIDGE_H
6
7struct fpga_bridge;
8
9/**
10 * struct fpga_bridge_ops - ops for low level FPGA bridge drivers
11 * @enable_show: returns the FPGA bridge's status
12 * @enable_set: set a FPGA bridge as enabled or disabled
13 * @fpga_bridge_remove: set FPGA into a specific state during driver remove
14 */
15struct fpga_bridge_ops {
16 int (*enable_show)(struct fpga_bridge *bridge);
17 int (*enable_set)(struct fpga_bridge *bridge, bool enable);
18 void (*fpga_bridge_remove)(struct fpga_bridge *bridge);
19};
20
21/**
22 * struct fpga_bridge - FPGA bridge structure
23 * @name: name of low level FPGA bridge
24 * @dev: FPGA bridge device
25 * @mutex: enforces exclusive reference to bridge
26 * @br_ops: pointer to struct of FPGA bridge ops
27 * @info: fpga image specific information
28 * @node: FPGA bridge list node
29 * @priv: low level driver private date
30 */
31struct fpga_bridge {
32 const char *name;
33 struct device dev;
34 struct mutex mutex; /* for exclusive reference to bridge */
35 const struct fpga_bridge_ops *br_ops;
36 struct fpga_image_info *info;
37 struct list_head node;
38 void *priv;
39};
40
41#define to_fpga_bridge(d) container_of(d, struct fpga_bridge, dev)
42
43struct fpga_bridge *of_fpga_bridge_get(struct device_node *node,
44 struct fpga_image_info *info);
45void fpga_bridge_put(struct fpga_bridge *bridge);
46int fpga_bridge_enable(struct fpga_bridge *bridge);
47int fpga_bridge_disable(struct fpga_bridge *bridge);
48
49int fpga_bridges_enable(struct list_head *bridge_list);
50int fpga_bridges_disable(struct list_head *bridge_list);
51void fpga_bridges_put(struct list_head *bridge_list);
52int fpga_bridge_get_to_list(struct device_node *np,
53 struct fpga_image_info *info,
54 struct list_head *bridge_list);
55
56int fpga_bridge_register(struct device *dev, const char *name,
57 const struct fpga_bridge_ops *br_ops, void *priv);
58void fpga_bridge_unregister(struct device *dev);
59
60#endif /* _LINUX_FPGA_BRIDGE_H */