Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2021 Marvell. 3 : : */ 4 : : 5 : : #ifndef _ROC_DEV_PRIV_H 6 : : #define _ROC_DEV_PRIV_H 7 : : 8 : : #define DEV_HWCAP_F_VF BIT_ULL(0) /* VF device */ 9 : : 10 : : #define RVU_PFVF_PF_SHIFT 10 11 : : #define RVU_PFVF_PF_MASK 0x3F 12 : : #define RVU_PFVF_FUNC_SHIFT 0 13 : : #define RVU_PFVF_FUNC_MASK 0x3FF 14 : : #define RVU_MAX_VF 64 /* RVU_PF_VFPF_MBOX_INT(0..1) */ 15 : : #define RVU_MAX_INT_RETRY 3 16 : : 17 : : /* PF/VF message handling timer */ 18 : : #define VF_PF_MBOX_TIMER_MS (20 * 1000) 19 : : 20 : : typedef struct { 21 : : /* 128 devices translate to two 64 bits dwords */ 22 : : #define MAX_VFPF_DWORD_BITS 2 23 : : uint64_t bits[MAX_VFPF_DWORD_BITS]; 24 : : } dev_intr_t; 25 : : 26 : : /* Link status update callback */ 27 : : typedef void (*link_info_t)(void *roc_nix, 28 : : struct cgx_link_user_info *link); 29 : : 30 : : /* PTP info callback */ 31 : : typedef int (*ptp_info_t)(void *roc_nix, bool enable); 32 : : 33 : : /* Queue Error get callback */ 34 : : typedef void (*q_err_cb_t)(void *roc_nix, void *data); 35 : : 36 : : /* Link status get callback */ 37 : : typedef void (*link_status_get_t)(void *roc_nix, 38 : : struct cgx_link_user_info *link); 39 : : /* Representee notification callback */ 40 : : typedef int (*repte_notify_t)(void *roc_nix, void *notify_msg); 41 : : 42 : : struct dev_ops { 43 : : link_info_t link_status_update; 44 : : ptp_info_t ptp_info_update; 45 : : link_status_get_t link_status_get; 46 : : q_err_cb_t q_err_cb; 47 : : repte_notify_t repte_notify; 48 : : }; 49 : : 50 : : #define dev_is_vf(dev) ((dev)->hwcap & DEV_HWCAP_F_VF) 51 : : 52 : : static inline int 53 : : dev_get_vf(uint16_t pf_func) 54 : : { 55 : 0 : return (((pf_func >> RVU_PFVF_FUNC_SHIFT) & RVU_PFVF_FUNC_MASK) - 1); 56 : : } 57 : : 58 : : static inline int 59 : : dev_get_pf(uint16_t pf_func) 60 : : { 61 [ # # # # ]: 0 : return (pf_func >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK; 62 : : } 63 : : 64 : : static inline int 65 : : dev_pf_func(int pf, int vf) 66 : : { 67 [ # # # # : 0 : return (pf << RVU_PFVF_PF_SHIFT) | ((vf << RVU_PFVF_FUNC_SHIFT) + 1); # ] 68 : : } 69 : : 70 : : static inline int 71 : : dev_is_afvf(uint16_t pf_func) 72 : : { 73 : : return !(pf_func & ~RVU_PFVF_FUNC_MASK); 74 : : } 75 : : 76 : : struct mbox_sync { 77 : : bool start_thread; 78 : : uint8_t msg_avail; 79 : : plt_thread_t pfvf_msg_thread; 80 : : pthread_cond_t pfvf_msg_cond; 81 : : pthread_mutex_t mutex; 82 : : }; 83 : : 84 : : struct dev { 85 : : uint16_t pf; 86 : : int16_t vf; 87 : : uint16_t pf_func; 88 : : uint8_t mbox_active; 89 : : bool drv_inited; 90 : : uint64_t active_vfs[MAX_VFPF_DWORD_BITS]; 91 : : uintptr_t bar2; 92 : : uintptr_t bar4; 93 : : uintptr_t lmt_base; 94 : : struct mbox mbox_local; 95 : : struct mbox mbox_up; 96 : : struct mbox mbox_vfpf; 97 : : struct mbox mbox_vfpf_up; 98 : : dev_intr_t intr; 99 : : dev_intr_t flr; 100 : : uint64_t hwcap; 101 : : struct npa_lf npa; 102 : : struct mbox *mbox; 103 : : uint16_t maxvf; 104 : : struct dev_ops *ops; 105 : : void *roc_nix; 106 : : void *roc_cpt; 107 : : void *roc_tim; 108 : : void *roc_ml; 109 : : bool disable_shared_lmt; /* false(default): shared lmt mode enabled */ 110 : : const struct plt_memzone *lmt_mz; 111 : : struct mbox_sync sync; 112 : : } __plt_cache_aligned; 113 : : 114 : : struct npa { 115 : : struct plt_pci_device *pci_dev; 116 : : struct dev dev; 117 : : } __plt_cache_aligned; 118 : : 119 : : extern uint16_t dev_rclk_freq; 120 : : extern uint16_t dev_sclk_freq; 121 : : 122 : : int dev_init(struct dev *dev, struct plt_pci_device *pci_dev); 123 : : int dev_fini(struct dev *dev, struct plt_pci_device *pci_dev); 124 : : int dev_active_vfs(struct dev *dev); 125 : : 126 : : int dev_irq_register(struct plt_intr_handle *intr_handle, 127 : : plt_intr_callback_fn cb, void *data, unsigned int vec); 128 : : void dev_irq_unregister(struct plt_intr_handle *intr_handle, 129 : : plt_intr_callback_fn cb, void *data, unsigned int vec); 130 : : int dev_irqs_disable(struct plt_intr_handle *intr_handle); 131 : : int dev_irq_reconfigure(struct plt_intr_handle *intr_handle, uint16_t max_intr); 132 : : 133 : : int dev_mbox_register_irq(struct plt_pci_device *pci_dev, struct dev *dev); 134 : : int dev_vf_flr_register_irqs(struct plt_pci_device *pci_dev, struct dev *dev); 135 : : 136 : : #endif /* _ROC_DEV_PRIV_H */