1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019-2021 Broadcom
6 #ifndef _TF_DEVICE_P4_H_
7 #define _TF_DEVICE_P4_H_
9 #include "cfa_resource_types.h"
12 #include "tf_if_tbl.h"
13 #include "tf_global_cfg.h"
15 struct tf_rm_element_cfg tf_ident_p4[TF_IDENT_TYPE_MAX] = {
16 [TF_IDENT_TYPE_L2_CTXT_HIGH] = {
17 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_HIGH,
20 [TF_IDENT_TYPE_L2_CTXT_LOW] = {
21 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_LOW,
24 [TF_IDENT_TYPE_PROF_FUNC] = {
25 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_PROF_FUNC,
28 [TF_IDENT_TYPE_WC_PROF] = {
29 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_WC_TCAM_PROF_ID,
32 [TF_IDENT_TYPE_EM_PROF] = {
33 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_EM_PROF_ID,
38 struct tf_rm_element_cfg tf_tcam_p4[TF_TCAM_TBL_TYPE_MAX] = {
39 [TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_HIGH] = {
40 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_HIGH,
43 [TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW] = {
44 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_LOW,
47 [TF_TCAM_TBL_TYPE_PROF_TCAM] = {
48 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_PROF_TCAM,
51 [TF_TCAM_TBL_TYPE_WC_TCAM] = {
52 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_WC_TCAM,
55 [TF_TCAM_TBL_TYPE_SP_TCAM] = {
56 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_SP_TCAM,
61 struct tf_rm_element_cfg tf_tbl_p4[TF_TBL_TYPE_MAX] = {
62 [TF_TBL_TYPE_FULL_ACT_RECORD] = {
63 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_FULL_ACTION,
66 [TF_TBL_TYPE_MCAST_GROUPS] = {
67 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_MCG,
70 [TF_TBL_TYPE_ACT_ENCAP_8B] = {
71 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_ENCAP_8B,
74 [TF_TBL_TYPE_ACT_ENCAP_16B] = {
75 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_ENCAP_16B,
78 [TF_TBL_TYPE_ACT_ENCAP_64B] = {
79 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_ENCAP_64B,
82 [TF_TBL_TYPE_ACT_SP_SMAC] = {
83 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_SP_MAC,
86 [TF_TBL_TYPE_ACT_SP_SMAC_IPV4] = {
87 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_SP_MAC_IPV4,
90 [TF_TBL_TYPE_ACT_SP_SMAC_IPV6] = {
91 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_SP_MAC_IPV6,
94 [TF_TBL_TYPE_ACT_STATS_64] = {
95 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_COUNTER_64B,
98 [TF_TBL_TYPE_ACT_MODIFY_IPV4] = {
99 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_IPV4,
102 [TF_TBL_TYPE_METER_PROF] = {
103 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_METER_PROF,
106 [TF_TBL_TYPE_METER_INST] = {
107 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_METER,
110 [TF_TBL_TYPE_MIRROR_CONFIG] = {
111 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_MIRROR,
117 struct tf_rm_element_cfg tf_em_ext_p4[TF_EM_TBL_TYPE_MAX] = {
118 [TF_EM_TBL_TYPE_TBL_SCOPE] = {
119 TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_TBL_SCOPE,
124 struct tf_rm_element_cfg tf_em_int_p4[TF_EM_TBL_TYPE_MAX] = {
125 [TF_EM_TBL_TYPE_EM_RECORD] = {
126 TF_RM_ELEM_CFG_HCAPI, CFA_RESOURCE_TYPE_P4_EM_REC,
131 /* Note that hcapi_types from this table are from hcapi_cfa_p4.h
132 * These are not CFA resource types because they are not allocated
133 * CFA resources - they are identifiers for the interface tables
134 * shared between the firmware and the host. It may make sense to
135 * move these types to cfa_resource_types.h.
137 struct tf_if_tbl_cfg tf_if_tbl_p4[TF_IF_TBL_TYPE_MAX] = {
138 [TF_IF_TBL_TYPE_PROF_SPIF_DFLT_L2_CTXT] = {
139 TF_IF_TBL_CFG, CFA_P4_TBL_PROF_SPIF_DFLT_L2CTXT
141 [TF_IF_TBL_TYPE_PROF_PARIF_DFLT_ACT_REC_PTR] = {
142 TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_DFLT_ACT_REC_PTR
144 [TF_IF_TBL_TYPE_PROF_PARIF_ERR_ACT_REC_PTR] = {
145 TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_ERR_ACT_REC_PTR
147 [TF_IF_TBL_TYPE_LKUP_PARIF_DFLT_ACT_REC_PTR] = {
148 TF_IF_TBL_CFG, CFA_P4_TBL_LKUP_PARIF_DFLT_ACT_REC_PTR
152 struct tf_global_cfg_cfg tf_global_cfg_p4[TF_GLOBAL_CFG_TYPE_MAX] = {
153 [TF_TUNNEL_ENCAP] = {
154 TF_GLOBAL_CFG_CFG_HCAPI, TF_TUNNEL_ENCAP
156 [TF_ACTION_BLOCK] = {
157 TF_GLOBAL_CFG_CFG_HCAPI, TF_ACTION_BLOCK
161 const struct tf_hcapi_resource_map tf_hcapi_res_map_p4[CFA_RESOURCE_TYPE_P4_LAST + 1] = {
162 [CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_HIGH] = {
163 TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_L2_CTXT_HIGH
165 [CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP_LOW] = {
166 TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_L2_CTXT_LOW
168 [CFA_RESOURCE_TYPE_P4_PROF_FUNC] = {
169 TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_PROF_FUNC
171 [CFA_RESOURCE_TYPE_P4_WC_TCAM_PROF_ID] = {
172 TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_WC_PROF
174 [CFA_RESOURCE_TYPE_P4_EM_PROF_ID] = {
175 TF_MODULE_TYPE_IDENTIFIER, 1 << TF_IDENT_TYPE_EM_PROF
177 [CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_HIGH] = {
178 TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_HIGH
180 [CFA_RESOURCE_TYPE_P4_L2_CTXT_TCAM_LOW] = {
181 TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW
183 [CFA_RESOURCE_TYPE_P4_PROF_TCAM] = {
184 TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_PROF_TCAM
186 [CFA_RESOURCE_TYPE_P4_WC_TCAM] = {
187 TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_WC_TCAM
189 [CFA_RESOURCE_TYPE_P4_SP_TCAM] = {
190 TF_MODULE_TYPE_TCAM, 1 << TF_TCAM_TBL_TYPE_SP_TCAM
192 [CFA_RESOURCE_TYPE_P4_NAT_IPV4] = {
193 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_MODIFY_IPV4
195 [CFA_RESOURCE_TYPE_P4_METER_PROF] = {
196 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_METER_PROF
198 [CFA_RESOURCE_TYPE_P4_METER] = {
199 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_METER_INST
201 [CFA_RESOURCE_TYPE_P4_MIRROR] = {
202 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_MIRROR_CONFIG
204 [CFA_RESOURCE_TYPE_P4_FULL_ACTION] = {
205 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_FULL_ACT_RECORD
207 [CFA_RESOURCE_TYPE_P4_MCG] = {
208 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_MCAST_GROUPS
210 [CFA_RESOURCE_TYPE_P4_ENCAP_8B] = {
211 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_8B
213 [CFA_RESOURCE_TYPE_P4_ENCAP_16B] = {
214 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_16B
216 [CFA_RESOURCE_TYPE_P4_ENCAP_64B] = {
217 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_ENCAP_64B
219 [CFA_RESOURCE_TYPE_P4_SP_MAC] = {
220 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC
222 [CFA_RESOURCE_TYPE_P4_SP_MAC_IPV4] = {
223 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC_IPV4
225 [CFA_RESOURCE_TYPE_P4_SP_MAC_IPV6] = {
226 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_SP_SMAC_IPV6
228 [CFA_RESOURCE_TYPE_P4_COUNTER_64B] = {
229 TF_MODULE_TYPE_TABLE, 1 << TF_TBL_TYPE_ACT_STATS_64
231 [CFA_RESOURCE_TYPE_P4_EM_REC] = {
232 TF_MODULE_TYPE_EM, 1 << TF_EM_TBL_TYPE_EM_RECORD
234 [CFA_RESOURCE_TYPE_P4_TBL_SCOPE] = {
235 TF_MODULE_TYPE_EM, 1 << TF_EM_TBL_TYPE_TBL_SCOPE
239 #endif /* _TF_DEVICE_P4_H_ */