xref: /dpdk/drivers/raw/ifpga/ifpga_rawdev.h (revision fd51012de5369679e807be1d6a81d63ef15015ce)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2018 Intel Corporation
3  */
4 
5 #ifndef _IFPGA_RAWDEV_H_
6 #define _IFPGA_RAWDEV_H_
7 
8 extern int ifpga_rawdev_logtype;
9 #define RTE_LOGTYPE_IFPGA_RAWDEV ifpga_rawdev_logtype
10 
11 #define IFPGA_RAWDEV_NAME_FMT "IFPGA:%02x:%02x.%x"
12 
13 #define IFPGA_RAWDEV_PMD_LOG(level, ...) \
14 	RTE_LOG_LINE_PREFIX(level, IFPGA_RAWDEV, "%s(): ", __func__, __VA_ARGS__)
15 
16 #define IFPGA_RAWDEV_PMD_FUNC_TRACE() IFPGA_RAWDEV_PMD_LOG(DEBUG, ">>")
17 
18 #define IFPGA_RAWDEV_PMD_DEBUG(fmt, ...) \
19 	IFPGA_RAWDEV_PMD_LOG(DEBUG, fmt, ## __VA_ARGS__)
20 #define IFPGA_RAWDEV_PMD_INFO(fmt, ...) \
21 	IFPGA_RAWDEV_PMD_LOG(INFO, fmt, ## __VA_ARGS__)
22 #define IFPGA_RAWDEV_PMD_ERR(fmt, ...) \
23 	IFPGA_RAWDEV_PMD_LOG(ERR, fmt, ## __VA_ARGS__)
24 #define IFPGA_RAWDEV_PMD_WARN(fmt, ...) \
25 	IFPGA_RAWDEV_PMD_LOG(WARNING, fmt, ## __VA_ARGS__)
26 
27 enum ifpga_rawdev_device_state {
28 	IFPGA_IDLE,
29 	IFPGA_READY,
30 	IFPGA_ERROR
31 };
32 
33 /** Set a bit in the uint64 variable */
34 #define IFPGA_BIT_SET(var, pos) \
35 	((var) |= ((uint64_t)1 << ((pos))))
36 
37 /** Reset the bit in the variable */
38 #define IFPGA_BIT_RESET(var, pos) \
39 	((var) &= ~((uint64_t)1 << ((pos))))
40 
41 /** Check the bit is set in the variable */
42 #define IFPGA_BIT_ISSET(var, pos) \
43 	(((var) & ((uint64_t)1 << ((pos)))) ? 1 : 0)
44 
45 static inline struct opae_adapter *
46 ifpga_rawdev_get_priv(const struct rte_rawdev *rawdev)
47 {
48 	return (struct opae_adapter *)rawdev->dev_private;
49 }
50 
51 #define IFPGA_RAWDEV_MSIX_IRQ_NUM 7
52 #define IFPGA_RAWDEV_NUM 32
53 #define IFPGA_MAX_VDEV 4
54 #define IFPGA_MAX_IRQ 12
55 
56 struct ifpga_rawdev {
57 	int dev_id;
58 	struct rte_rawdev *rawdev;
59 	int aer_enable;
60 	int intr_fd[IFPGA_RAWDEV_MSIX_IRQ_NUM+1];
61 	uint32_t aer_old[2];
62 	char fvl_bdf[8][16];
63 	char parent_bdf[16];
64 	/* 0 for FME interrupt, others are reserved for AFU irq */
65 	void *intr_handle[IFPGA_MAX_IRQ];
66 	/* enable monitor thread poll device's sensors or not */
67 	int poll_enabled;
68 	/* name of virtual devices created on raw device */
69 	char *vdev_name[IFPGA_MAX_VDEV];
70 };
71 
72 struct ifpga_vdev_args {
73 	char bdf[PCI_PRI_STR_SIZE];
74 	int port;
75 };
76 
77 struct ifpga_rawdev *
78 ifpga_rawdev_get(const struct rte_rawdev *rawdev);
79 
80 enum ifpga_irq_type {
81 	IFPGA_FME_IRQ = 0,
82 	IFPGA_AFU_IRQ = 1,
83 };
84 
85 int
86 ifpga_register_msix_irq(struct ifpga_rawdev *dev, int port_id,
87 		enum ifpga_irq_type type, int vec_start, int count,
88 		rte_intr_callback_fn handler, const char *name,
89 		void *arg);
90 int
91 ifpga_unregister_msix_irq(struct ifpga_rawdev *dev, enum ifpga_irq_type type,
92 		int vec_start, rte_intr_callback_fn handler, void *arg);
93 
94 int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port,
95 	const char *file);
96 void ifpga_rawdev_cleanup(void);
97 
98 #endif /* _IFPGA_RAWDEV_H_ */
99