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