1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2019 Marvell International Ltd.
8 #include <rte_bus_pci.h>
10 #include "otx2_common.h"
12 #include "otx2_mbox.h"
14 /* Common HWCAP flags. Use from LSB bits */
15 #define OTX2_HWCAP_F_VF BIT_ULL(0) /* VF device */
16 #define otx2_dev_is_vf(dev) (dev->hwcap & OTX2_HWCAP_F_VF)
17 #define otx2_dev_is_pf(dev) (!(dev->hwcap & OTX2_HWCAP_F_VF))
18 #define otx2_dev_is_lbk(dev) ((dev->hwcap & OTX2_HWCAP_F_VF) && \
19 (dev->tx_chan_base < 0x700))
21 #define OTX2_HWCAP_F_A0 BIT_ULL(1) /* A0 device */
22 #define otx2_dev_is_A0(dev) (dev->hwcap & OTX2_HWCAP_F_A0)
27 int node __rte_cache_aligned; \
31 uint8_t mbox_active; \
33 uint64_t active_vfs[MAX_VFPF_DWORD_BITS]; \
36 struct otx2_mbox mbox_local; \
37 struct otx2_mbox mbox_up; \
38 struct otx2_mbox mbox_vfpf; \
39 struct otx2_mbox mbox_vfpf_up; \
41 int timer_set; /* ~0 : no alarm handling */ \
43 struct otx2_npa_lf npalf; \
44 struct otx2_mbox *mbox; \
46 const struct otx2_dev_ops *ops
52 int otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev);
53 void otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev);
54 int otx2_dev_active_vfs(void *otx2_dev);
56 #define RVU_PFVF_PF_SHIFT 10
57 #define RVU_PFVF_PF_MASK 0x3F
58 #define RVU_PFVF_FUNC_SHIFT 0
59 #define RVU_PFVF_FUNC_MASK 0x3FF
62 otx2_get_vf(uint16_t pf_func)
64 return (((pf_func >> RVU_PFVF_FUNC_SHIFT) & RVU_PFVF_FUNC_MASK) - 1);
68 otx2_get_pf(uint16_t pf_func)
70 return (pf_func >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
74 otx2_pfvf_func(int pf, int vf)
76 return (pf << RVU_PFVF_PF_SHIFT) | ((vf << RVU_PFVF_FUNC_SHIFT) + 1);
80 otx2_is_afvf(uint16_t pf_func)
82 return !(pf_func & ~RVU_PFVF_FUNC_MASK);
85 #endif /* _OTX2_DEV_H */