xref: /dpdk/drivers/net/bnxt/tf_core/tf_device_p4.h (revision 891f8260)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2021 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef _TF_DEVICE_P4_H_
7 #define _TF_DEVICE_P4_H_
8 
9 #include "cfa_resource_types.h"
10 #include "tf_core.h"
11 #include "tf_rm.h"
12 #include "tf_if_tbl.h"
13 #include "tf_global_cfg.h"
14 
15 extern struct tf_rm_element_cfg tf_tbl_p4[TF_DIR_MAX][TF_TBL_TYPE_MAX];
16 
17 struct tf_rm_element_cfg tf_ident_p4[TF_IDENT_TYPE_MAX] = {
18 	[TF_IDENT_TYPE_L2_CTXT_HIGH] = {
19 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_HIGH,
20 		0, 0
21 	},
22 	[TF_IDENT_TYPE_L2_CTXT_LOW] = {
23 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_LOW,
24 		0, 0
25 	},
26 	[TF_IDENT_TYPE_PROF_FUNC] = {
27 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_PROF_FUNC,
28 		0, 0
29 	},
30 	[TF_IDENT_TYPE_WC_PROF] = {
31 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_WC_TCAM_PROF_ID,
32 		0, 0
33 	},
34 	[TF_IDENT_TYPE_EM_PROF] = {
35 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_EM_PROF_ID,
36 		0, 0
37 	},
38 };
39 
40 struct tf_rm_element_cfg tf_tcam_p4[TF_TCAM_TBL_TYPE_MAX] = {
41 	[TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_HIGH] = {
42 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_HIGH,
43 		0, 0
44 	},
45 	[TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW] = {
46 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_LOW,
47 		0, 0
48 	},
49 	[TF_TCAM_TBL_TYPE_PROF_TCAM] = {
50 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_PROF_TCAM,
51 		0, 0
52 	},
53 	[TF_TCAM_TBL_TYPE_WC_TCAM] = {
54 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_WC_TCAM,
55 		0, 0
56 	},
57 	[TF_TCAM_TBL_TYPE_SP_TCAM] = {
58 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_SP_TCAM,
59 		0, 0
60 	},
61 };
62 
63 struct tf_rm_element_cfg tf_em_ext_p4[TF_EM_TBL_TYPE_MAX] = {
64 	[TF_EM_TBL_TYPE_TBL_SCOPE] = {
65 		TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_TBL_SCOPE,
66 		0, 0
67 	},
68 };
69 
70 struct tf_rm_element_cfg tf_em_int_p4[TF_EM_TBL_TYPE_MAX] = {
71 	[TF_EM_TBL_TYPE_EM_RECORD] = {
72 		TF_RM_ELEM_CFG_HCAPI, CFA_RESOURCE_TYPE_P4_EM_REC,
73 		0, 0
74 	},
75 };
76 
77 /* Note that hcapi_types from this table are from hcapi_cfa_p4.h
78  * These are not CFA resource types because they are not allocated
79  * CFA resources - they are identifiers for the interface tables
80  * shared between the firmware and the host.  It may make sense to
81  * move these types to cfa_resource_types.h.
82  */
83 struct tf_if_tbl_cfg tf_if_tbl_p4[TF_IF_TBL_TYPE_MAX] = {
84 	[TF_IF_TBL_TYPE_PROF_SPIF_DFLT_L2_CTXT] = {
85 		TF_IF_TBL_CFG, CFA_P4_TBL_PROF_SPIF_DFLT_L2CTXT
86 	},
87 	[TF_IF_TBL_TYPE_PROF_PARIF_DFLT_ACT_REC_PTR] = {
88 		TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_DFLT_ACT_REC_PTR
89 	},
90 	[TF_IF_TBL_TYPE_PROF_PARIF_ERR_ACT_REC_PTR] = {
91 		TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_ERR_ACT_REC_PTR
92 	},
93 	[TF_IF_TBL_TYPE_LKUP_PARIF_DFLT_ACT_REC_PTR] = {
94 		TF_IF_TBL_CFG, CFA_P4_TBL_LKUP_PARIF_DFLT_ACT_REC_PTR
95 	},
96 };
97 
98 struct tf_global_cfg_cfg tf_global_cfg_p4[TF_GLOBAL_CFG_TYPE_MAX] = {
99 	[TF_TUNNEL_ENCAP] = {
100 		TF_GLOBAL_CFG_CFG_HCAPI, TF_TUNNEL_ENCAP
101 	},
102 	[TF_ACTION_BLOCK] = {
103 		TF_GLOBAL_CFG_CFG_HCAPI, TF_ACTION_BLOCK
104 	},
105 };
106 
107 const struct tf_hcapi_resource_map tf_hcapi_res_map_p4[CFA_RESOURCE_TYPE_P4_LAST + 1] = {
108 	[CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_HIGH] = {
109 		TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_L2_CTXT_HIGH
110 	},
111 	[CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_LOW] = {
112 		TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_L2_CTXT_LOW
113 	},
114 	[CFA_RESOURCE_TYPE_P4_PROF_FUNC] = {
115 		TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_PROF_FUNC
116 	},
117 	[CFA_RESOURCE_TYPE_P4_WC_TCAM_PROF_ID] = {
118 		TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_WC_PROF
119 	},
120 	[CFA_RESOURCE_TYPE_P4_EM_PROF_ID] = {
121 		TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_EM_PROF
122 	},
123 	[CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_HIGH] = {
124 		TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_HIGH
125 	},
126 	[CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_LOW] = {
127 		TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW
128 	},
129 	[CFA_RESOURCE_TYPE_P4_PROF_TCAM] = {
130 		TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_PROF_TCAM
131 	},
132 	[CFA_RESOURCE_TYPE_P4_WC_TCAM] = {
133 		TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_WC_TCAM
134 	},
135 	[CFA_RESOURCE_TYPE_P4_SP_TCAM] = {
136 		TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_SP_TCAM
137 	},
138 	[CFA_RESOURCE_TYPE_P4_NAT_IPV4] = {
139 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_MODIFY_IPV4
140 	},
141 	[CFA_RESOURCE_TYPE_P4_METER_PROF] = {
142 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_METER_PROF
143 	},
144 	[CFA_RESOURCE_TYPE_P4_METER] = {
145 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_METER_INST
146 	},
147 	[CFA_RESOURCE_TYPE_P4_MIRROR] = {
148 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_MIRROR_CONFIG
149 	},
150 	[CFA_RESOURCE_TYPE_P4_FULL_ACTION] = {
151 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_FULL_ACT_RECORD
152 	},
153 	[CFA_RESOURCE_TYPE_P4_MCG] = {
154 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_MCAST_GROUPS
155 	},
156 	[CFA_RESOURCE_TYPE_P4_ENCAP_8B] = {
157 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_8B
158 	},
159 	[CFA_RESOURCE_TYPE_P4_ENCAP_16B] = {
160 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_16B
161 	},
162 	[CFA_RESOURCE_TYPE_P4_ENCAP_64B] = {
163 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_64B
164 	},
165 	[CFA_RESOURCE_TYPE_P4_SP_MAC] = {
166 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC
167 	},
168 	[CFA_RESOURCE_TYPE_P4_SP_MAC_IPV4] = {
169 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC_IPV4
170 	},
171 	[CFA_RESOURCE_TYPE_P4_SP_MAC_IPV6] = {
172 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC_IPV6
173 	},
174 	[CFA_RESOURCE_TYPE_P4_COUNTER_64B] = {
175 		TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_STATS_64
176 	},
177 	[CFA_RESOURCE_TYPE_P4_EM_REC] = {
178 		TF_MODULE_TYPE_EM, 1 << TF_EM_TBL_TYPE_EM_RECORD
179 	},
180 	[CFA_RESOURCE_TYPE_P4_TBL_SCOPE] = {
181 		TF_MODULE_TYPE_EM, 1 << TF_EM_TBL_TYPE_TBL_SCOPE
182 	},
183 };
184 
185 #endif /* _TF_DEVICE_P4_H_ */
186