common/cnxk: support anti-replay check in SW for cn9k
[dpdk.git] / drivers / common / cnxk / roc_dev_priv.h
index c7f79f7..302dc0f 100644 (file)
@@ -5,9 +5,106 @@
 #ifndef _ROC_DEV_PRIV_H
 #define _ROC_DEV_PRIV_H
 
+#define DEV_HWCAP_F_VF BIT_ULL(0) /* VF device */
+
+#define RVU_PFVF_PF_SHIFT   10
+#define RVU_PFVF_PF_MASK    0x3F
+#define RVU_PFVF_FUNC_SHIFT 0
+#define RVU_PFVF_FUNC_MASK  0x3FF
+#define RVU_MAX_VF         64 /* RVU_PF_VFPF_MBOX_INT(0..1) */
+#define RVU_MAX_INT_RETRY   3
+
+/* PF/VF message handling timer */
+#define VF_PF_MBOX_TIMER_MS (20 * 1000)
+
+typedef struct {
+/* 128 devices translate to two 64 bits dwords */
+#define MAX_VFPF_DWORD_BITS 2
+       uint64_t bits[MAX_VFPF_DWORD_BITS];
+} dev_intr_t;
+
+/* Link status update callback */
+typedef void (*link_info_t)(void *roc_nix,
+                           struct cgx_link_user_info *link);
+
+/* PTP info callback */
+typedef int (*ptp_info_t)(void *roc_nix, bool enable);
+
+/* Link status get callback */
+typedef void (*link_status_get_t)(void *roc_nix,
+                                 struct cgx_link_user_info *link);
+
+struct dev_ops {
+       link_info_t link_status_update;
+       ptp_info_t ptp_info_update;
+       link_status_get_t link_status_get;
+};
+
+#define dev_is_vf(dev) ((dev)->hwcap & DEV_HWCAP_F_VF)
+
+static inline int
+dev_get_vf(uint16_t pf_func)
+{
+       return (((pf_func >> RVU_PFVF_FUNC_SHIFT) & RVU_PFVF_FUNC_MASK) - 1);
+}
+
+static inline int
+dev_get_pf(uint16_t pf_func)
+{
+       return (pf_func >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
+}
+
+static inline int
+dev_pf_func(int pf, int vf)
+{
+       return (pf << RVU_PFVF_PF_SHIFT) | ((vf << RVU_PFVF_FUNC_SHIFT) + 1);
+}
+
+static inline int
+dev_is_afvf(uint16_t pf_func)
+{
+       return !(pf_func & ~RVU_PFVF_FUNC_MASK);
+}
+
+struct dev {
+       uint16_t pf;
+       int16_t vf;
+       uint16_t pf_func;
+       uint8_t mbox_active;
+       bool drv_inited;
+       uint64_t active_vfs[MAX_VFPF_DWORD_BITS];
+       uintptr_t bar2;
+       uintptr_t bar4;
+       uintptr_t lmt_base;
+       struct mbox mbox_local;
+       struct mbox mbox_up;
+       struct mbox mbox_vfpf;
+       struct mbox mbox_vfpf_up;
+       dev_intr_t intr;
+       int timer_set; /* ~0 : no alarm handling */
+       uint64_t hwcap;
+       struct npa_lf npa;
+       struct mbox *mbox;
+       uint16_t maxvf;
+       struct dev_ops *ops;
+       void *roc_nix;
+       void *roc_cpt;
+       bool disable_shared_lmt; /* false(default): shared lmt mode enabled */
+       const struct plt_memzone *lmt_mz;
+} __plt_cache_aligned;
+
+struct npa {
+       struct plt_pci_device *pci_dev;
+       struct dev dev;
+} __plt_cache_aligned;
+
 extern uint16_t dev_rclk_freq;
 extern uint16_t dev_sclk_freq;
 
+int dev_init(struct dev *dev, struct plt_pci_device *pci_dev);
+int dev_fini(struct dev *dev, struct plt_pci_device *pci_dev);
+int dev_active_vfs(struct dev *dev);
+
 int dev_irq_register(struct plt_intr_handle *intr_handle,
                     plt_intr_callback_fn cb, void *data, unsigned int vec);
 void dev_irq_unregister(struct plt_intr_handle *intr_handle,