common/octeontx2: mark internal symbols
[dpdk.git] / drivers / common / octeontx2 / otx2_common.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2019 Marvell International Ltd.
3  */
4
5 #ifndef _OTX2_COMMON_H_
6 #define _OTX2_COMMON_H_
7
8 #include <rte_atomic.h>
9 #include <rte_common.h>
10 #include <rte_cycles.h>
11 #include <rte_memory.h>
12 #include <rte_memzone.h>
13 #include <rte_io.h>
14
15 #include "hw/otx2_rvu.h"
16 #include "hw/otx2_nix.h"
17 #include "hw/otx2_npc.h"
18 #include "hw/otx2_npa.h"
19 #include "hw/otx2_sdp.h"
20 #include "hw/otx2_sso.h"
21 #include "hw/otx2_ssow.h"
22 #include "hw/otx2_tim.h"
23
24 /* Alignment */
25 #define OTX2_ALIGN  128
26
27 /* Bits manipulation */
28 #ifndef BIT_ULL
29 #define BIT_ULL(nr) (1ULL << (nr))
30 #endif
31 #ifndef BIT
32 #define BIT(nr)     (1UL << (nr))
33 #endif
34
35 #ifndef BITS_PER_LONG
36 #define BITS_PER_LONG   (__SIZEOF_LONG__ * 8)
37 #endif
38 #ifndef BITS_PER_LONG_LONG
39 #define BITS_PER_LONG_LONG (__SIZEOF_LONG_LONG__ * 8)
40 #endif
41
42 #ifndef GENMASK
43 #define GENMASK(h, l) \
44                 (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
45 #endif
46 #ifndef GENMASK_ULL
47 #define GENMASK_ULL(h, l) \
48         (((~0ULL) - (1ULL << (l)) + 1) & \
49          (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
50 #endif
51
52 /* Intra device related functions */
53 struct otx2_npa_lf;
54 struct otx2_idev_cfg {
55         uint16_t sso_pf_func;
56         uint16_t npa_pf_func;
57         struct otx2_npa_lf *npa_lf;
58         RTE_STD_C11
59         union {
60                 rte_atomic16_t npa_refcnt;
61                 uint16_t npa_refcnt_u16;
62         };
63 };
64
65 __rte_internal
66 struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
67 __rte_internal
68 void otx2_sso_pf_func_set(uint16_t sso_pf_func);
69 __rte_internal
70 uint16_t otx2_sso_pf_func_get(void);
71 __rte_internal
72 uint16_t otx2_npa_pf_func_get(void);
73 __rte_internal
74 struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
75 __rte_internal
76 void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
77 __rte_internal
78 int otx2_npa_lf_active(void *dev);
79 __rte_internal
80 int otx2_npa_lf_obj_ref(void);
81
82 /* Log */
83 extern int otx2_logtype_base;
84 extern int otx2_logtype_mbox;
85 extern int otx2_logtype_npa;
86 extern int otx2_logtype_nix;
87 extern int otx2_logtype_sso;
88 extern int otx2_logtype_npc;
89 extern int otx2_logtype_tm;
90 extern int otx2_logtype_tim;
91 extern int otx2_logtype_dpi;
92 extern int otx2_logtype_ep;
93
94 #define otx2_err(fmt, args...)                  \
95         RTE_LOG(ERR, PMD, "%s():%u " fmt "\n",  \
96                 __func__, __LINE__, ## args)
97
98 #define otx2_info(fmt, args...)                                         \
99         RTE_LOG(INFO, PMD, fmt"\n", ## args)
100
101 #define otx2_dbg(subsystem, fmt, args...)                               \
102         rte_log(RTE_LOG_DEBUG, otx2_logtype_ ## subsystem,              \
103                 "[%s] %s():%u " fmt "\n",                               \
104                  #subsystem, __func__, __LINE__, ##args)
105
106 #define otx2_base_dbg(fmt, ...) otx2_dbg(base, fmt, ##__VA_ARGS__)
107 #define otx2_mbox_dbg(fmt, ...) otx2_dbg(mbox, fmt, ##__VA_ARGS__)
108 #define otx2_npa_dbg(fmt, ...) otx2_dbg(npa, fmt, ##__VA_ARGS__)
109 #define otx2_nix_dbg(fmt, ...) otx2_dbg(nix, fmt, ##__VA_ARGS__)
110 #define otx2_sso_dbg(fmt, ...) otx2_dbg(sso, fmt, ##__VA_ARGS__)
111 #define otx2_npc_dbg(fmt, ...) otx2_dbg(npc, fmt, ##__VA_ARGS__)
112 #define otx2_tm_dbg(fmt, ...) otx2_dbg(tm, fmt, ##__VA_ARGS__)
113 #define otx2_tim_dbg(fmt, ...) otx2_dbg(tim, fmt, ##__VA_ARGS__)
114 #define otx2_dpi_dbg(fmt, ...) otx2_dbg(dpi, fmt, ##__VA_ARGS__)
115 #define otx2_sdp_dbg(fmt, ...) otx2_dbg(ep, fmt, ##__VA_ARGS__)
116
117 /* PCI IDs */
118 #define PCI_VENDOR_ID_CAVIUM                    0x177D
119 #define PCI_DEVID_OCTEONTX2_RVU_PF              0xA063
120 #define PCI_DEVID_OCTEONTX2_RVU_VF              0xA064
121 #define PCI_DEVID_OCTEONTX2_RVU_AF              0xA065
122 #define PCI_DEVID_OCTEONTX2_RVU_SSO_TIM_PF      0xA0F9
123 #define PCI_DEVID_OCTEONTX2_RVU_SSO_TIM_VF      0xA0FA
124 #define PCI_DEVID_OCTEONTX2_RVU_NPA_PF          0xA0FB
125 #define PCI_DEVID_OCTEONTX2_RVU_NPA_VF          0xA0FC
126 #define PCI_DEVID_OCTEONTX2_RVU_CPT_PF          0xA0FD
127 #define PCI_DEVID_OCTEONTX2_RVU_CPT_VF          0xA0FE
128 #define PCI_DEVID_OCTEONTX2_RVU_AF_VF           0xA0f8
129 #define PCI_DEVID_OCTEONTX2_DPI_VF              0xA081
130 #define PCI_DEVID_OCTEONTX2_EP_VF               0xB203 /* OCTEON TX2 EP mode */
131 #define PCI_DEVID_OCTEONTX2_RVU_SDP_PF          0xA0f6
132 #define PCI_DEVID_OCTEONTX2_RVU_SDP_VF          0xA0f7
133
134 /*
135  * REVID for RVU PCIe devices.
136  * Bits 0..1: minor pass
137  * Bits 3..2: major pass
138  * Bits 7..4: midr id, 0:96, 1:95, 2:loki, f:unknown
139  */
140
141 #define RVU_PCI_REV_MIDR_ID(rev_id)             (rev_id >> 4)
142 #define RVU_PCI_REV_MAJOR(rev_id)               ((rev_id >> 2) & 0x3)
143 #define RVU_PCI_REV_MINOR(rev_id)               (rev_id & 0x3)
144
145 #define RVU_PCI_CN96XX_MIDR_ID                  0x0
146 #define RVU_PCI_CNF95XX_MIDR_ID                 0x1
147
148 /* PCI Config offsets */
149 #define RVU_PCI_REVISION_ID                     0x08
150
151 /* IO Access */
152 #define otx2_read64(addr) rte_read64_relaxed((void *)(addr))
153 #define otx2_write64(val, addr) rte_write64_relaxed((val), (void *)(addr))
154
155 #if defined(RTE_ARCH_ARM64)
156 #include "otx2_io_arm64.h"
157 #else
158 #include "otx2_io_generic.h"
159 #endif
160
161 /* Fastpath lookup */
162 #define OTX2_NIX_FASTPATH_LOOKUP_MEM    "otx2_nix_fastpath_lookup_mem"
163 #define OTX2_NIX_SA_TBL_START           (4096*4 + 69632*2)
164
165 #endif /* _OTX2_COMMON_H_ */