xref: /dpdk/drivers/raw/ifpga/ifpga_rawdev.h (revision 68a03efeed657e6e05f281479b33b51102797e15)
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 
10 #define IFPGA_RAWDEV_PMD_LOG(level, fmt, args...) \
11 	rte_log(RTE_LOG_ ## level, ifpga_rawdev_logtype, "%s(): " fmt "\n", \
12 				__func__, ##args)
13 
14 #define IFPGA_RAWDEV_PMD_FUNC_TRACE() IFPGA_RAWDEV_PMD_LOG(DEBUG, ">>")
15 
16 #define IFPGA_RAWDEV_PMD_DEBUG(fmt, args...) \
17 	IFPGA_RAWDEV_PMD_LOG(DEBUG, fmt, ## args)
18 #define IFPGA_RAWDEV_PMD_INFO(fmt, args...) \
19 	IFPGA_RAWDEV_PMD_LOG(INFO, fmt, ## args)
20 #define IFPGA_RAWDEV_PMD_ERR(fmt, args...) \
21 	IFPGA_RAWDEV_PMD_LOG(ERR, fmt, ## args)
22 #define IFPGA_RAWDEV_PMD_WARN(fmt, args...) \
23 	IFPGA_RAWDEV_PMD_LOG(WARNING, fmt, ## args)
24 
25 enum ifpga_rawdev_device_state {
26 	IFPGA_IDLE,
27 	IFPGA_READY,
28 	IFPGA_ERROR
29 };
30 
31 /** Set a bit in the uint64 variable */
32 #define IFPGA_BIT_SET(var, pos) \
33 	((var) |= ((uint64_t)1 << ((pos))))
34 
35 /** Reset the bit in the variable */
36 #define IFPGA_BIT_RESET(var, pos) \
37 	((var) &= ~((uint64_t)1 << ((pos))))
38 
39 /** Check the bit is set in the variable */
40 #define IFPGA_BIT_ISSET(var, pos) \
41 	(((var) & ((uint64_t)1 << ((pos)))) ? 1 : 0)
42 
43 static inline struct opae_adapter *
44 ifpga_rawdev_get_priv(const struct rte_rawdev *rawdev)
45 {
46 	return (struct opae_adapter *)rawdev->dev_private;
47 }
48 
49 #define IFPGA_RAWDEV_MSIX_IRQ_NUM 7
50 #define IFPGA_RAWDEV_NUM 32
51 
52 struct ifpga_rawdev {
53 	int dev_id;
54 	struct rte_rawdev *rawdev;
55 	int aer_enable;
56 	int intr_fd[IFPGA_RAWDEV_MSIX_IRQ_NUM+1];
57 	uint32_t aer_old[2];
58 	char fvl_bdf[8][16];
59 	char parent_bdf[16];
60 };
61 
62 struct ifpga_rawdev *
63 ifpga_rawdev_get(const struct rte_rawdev *rawdev);
64 
65 enum ifpga_irq_type {
66 	IFPGA_FME_IRQ = 0,
67 	IFPGA_AFU_IRQ = 1,
68 };
69 
70 int
71 ifpga_register_msix_irq(struct rte_rawdev *dev, int port_id,
72 		enum ifpga_irq_type type, int vec_start, int count,
73 		rte_intr_callback_fn handler, const char *name,
74 		void *arg);
75 int
76 ifpga_unregister_msix_irq(enum ifpga_irq_type type,
77 		int vec_start, rte_intr_callback_fn handler, void *arg);
78 
79 struct rte_pci_bus *ifpga_get_pci_bus(void);
80 int ifpga_rawdev_partial_reconfigure(struct rte_rawdev *dev, int port,
81 	const char *file);
82 void ifpga_rawdev_cleanup(void);
83 
84 #endif /* _IFPGA_RAWDEV_H_ */
85