1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019-2020 Broadcom 3 * All rights reserved. 4 */ 5 6 #ifndef _BNXT_ULP_H_ 7 #define _BNXT_ULP_H_ 8 9 #include <inttypes.h> 10 #include <stdbool.h> 11 #include <sys/queue.h> 12 13 #include "rte_ethdev.h" 14 15 #include "ulp_template_db_enum.h" 16 17 /* NAT defines to reuse existing inner L2 SMAC and DMAC */ 18 #define BNXT_ULP_NAT_INNER_L2_HEADER_SMAC 0x2000 19 #define BNXT_ULP_NAT_OUTER_MOST_L2_HDR_SMAC 0x6000 20 #define BNXT_ULP_NAT_OUTER_MOST_L2_VLAN_TAGS 0xc00 21 #define BNXT_ULP_NAT_INNER_L2_HEADER_DMAC 0x100 22 #define BNXT_ULP_NAT_OUTER_MOST_L2_HDR_DMAC 0x300 23 #define BNXT_ULP_NAT_OUTER_MOST_FLAGS (BNXT_ULP_NAT_OUTER_MOST_L2_HDR_SMAC |\ 24 BNXT_ULP_NAT_OUTER_MOST_L2_VLAN_TAGS |\ 25 BNXT_ULP_NAT_OUTER_MOST_L2_HDR_DMAC) 26 27 /* defines for the ulp_flags */ 28 #define BNXT_ULP_VF_REP_ENABLED 0x1 29 #define ULP_VF_REP_IS_ENABLED(flag) ((flag) & BNXT_ULP_VF_REP_ENABLED) 30 31 struct bnxt_ulp_df_rule_info { 32 uint32_t port_to_app_flow_id; 33 uint32_t app_to_port_flow_id; 34 uint8_t valid; 35 }; 36 37 struct bnxt_ulp_vfr_rule_info { 38 uint32_t rep2vf_flow_id; 39 uint32_t vf2rep_flow_id; 40 uint16_t parent_port_id; 41 uint8_t valid; 42 }; 43 44 struct bnxt_ulp_data { 45 uint32_t tbl_scope_id; 46 struct bnxt_ulp_mark_tbl *mark_tbl; 47 uint32_t dev_id; /* Hardware device id */ 48 uint32_t ref_cnt; 49 struct bnxt_ulp_flow_db *flow_db; 50 pthread_mutex_t flow_db_lock; 51 void *mapper_data; 52 struct bnxt_ulp_port_db *port_db; 53 struct bnxt_ulp_fc_info *fc_info; 54 uint32_t ulp_flags; 55 struct bnxt_ulp_df_rule_info df_rule_info[RTE_MAX_ETHPORTS]; 56 struct bnxt_ulp_vfr_rule_info vfr_rule_info[RTE_MAX_ETHPORTS]; 57 }; 58 59 struct bnxt_ulp_context { 60 struct bnxt_ulp_data *cfg_data; 61 struct tf *g_tfp; 62 }; 63 64 struct bnxt_ulp_pci_info { 65 uint32_t domain; 66 uint8_t bus; 67 }; 68 69 struct bnxt_ulp_session_state { 70 STAILQ_ENTRY(bnxt_ulp_session_state) next; 71 bool bnxt_ulp_init; 72 pthread_mutex_t bnxt_ulp_mutex; 73 struct bnxt_ulp_pci_info pci_info; 74 struct bnxt_ulp_data *cfg_data; 75 struct tf *g_tfp; 76 uint32_t session_opened; 77 }; 78 79 /* ULP flow id structure */ 80 struct rte_tf_flow { 81 uint32_t flow_id; 82 }; 83 84 struct ulp_tlv_param { 85 enum bnxt_ulp_df_param_type type; 86 uint32_t length; 87 uint8_t value[16]; 88 }; 89 90 /* 91 * Allow the deletion of context only for the bnxt device that 92 * created the session 93 */ 94 bool 95 ulp_ctx_deinit_allowed(struct bnxt_ulp_context *ulp_ctx); 96 97 /* Function to set the device id of the hardware. */ 98 int32_t 99 bnxt_ulp_cntxt_dev_id_set(struct bnxt_ulp_context *ulp_ctx, uint32_t dev_id); 100 101 /* Function to get the device id of the hardware. */ 102 int32_t 103 bnxt_ulp_cntxt_dev_id_get(struct bnxt_ulp_context *ulp_ctx, uint32_t *dev_id); 104 105 /* Function to set the table scope id of the EEM table. */ 106 int32_t 107 bnxt_ulp_cntxt_tbl_scope_id_set(struct bnxt_ulp_context *ulp_ctx, 108 uint32_t tbl_scope_id); 109 110 /* Function to get the table scope id of the EEM table. */ 111 int32_t 112 bnxt_ulp_cntxt_tbl_scope_id_get(struct bnxt_ulp_context *ulp_ctx, 113 uint32_t *tbl_scope_id); 114 115 /* Function to set the tfp session details in the ulp context. */ 116 int32_t 117 bnxt_ulp_cntxt_tfp_set(struct bnxt_ulp_context *ulp, struct tf *tfp); 118 119 /* Function to get the tfp session details from ulp context. */ 120 struct tf * 121 bnxt_ulp_cntxt_tfp_get(struct bnxt_ulp_context *ulp); 122 123 /* Get the device table entry based on the device id. */ 124 struct bnxt_ulp_device_params * 125 bnxt_ulp_device_params_get(uint32_t dev_id); 126 127 int32_t 128 bnxt_ulp_ctxt_ptr2_mark_db_set(struct bnxt_ulp_context *ulp_ctx, 129 struct bnxt_ulp_mark_tbl *mark_tbl); 130 131 struct bnxt_ulp_mark_tbl * 132 bnxt_ulp_ctxt_ptr2_mark_db_get(struct bnxt_ulp_context *ulp_ctx); 133 134 /* Function to set the flow database to the ulp context. */ 135 int32_t 136 bnxt_ulp_cntxt_ptr2_flow_db_set(struct bnxt_ulp_context *ulp_ctx, 137 struct bnxt_ulp_flow_db *flow_db); 138 139 /* Function to get the flow database from the ulp context. */ 140 struct bnxt_ulp_flow_db * 141 bnxt_ulp_cntxt_ptr2_flow_db_get(struct bnxt_ulp_context *ulp_ctx); 142 143 /* Function to get the ulp context from eth device. */ 144 struct bnxt_ulp_context * 145 bnxt_ulp_eth_dev_ptr2_cntxt_get(struct rte_eth_dev *dev); 146 147 /* Function to add the ulp mapper data to the ulp context */ 148 int32_t 149 bnxt_ulp_cntxt_ptr2_mapper_data_set(struct bnxt_ulp_context *ulp_ctx, 150 void *mapper_data); 151 152 /* Function to get the ulp mapper data from the ulp context */ 153 void * 154 bnxt_ulp_cntxt_ptr2_mapper_data_get(struct bnxt_ulp_context *ulp_ctx); 155 156 /* Function to set the port database to the ulp context. */ 157 int32_t 158 bnxt_ulp_cntxt_ptr2_port_db_set(struct bnxt_ulp_context *ulp_ctx, 159 struct bnxt_ulp_port_db *port_db); 160 161 /* Function to get the port database from the ulp context. */ 162 struct bnxt_ulp_port_db * 163 bnxt_ulp_cntxt_ptr2_port_db_get(struct bnxt_ulp_context *ulp_ctx); 164 165 /* Function to create default flows. */ 166 int32_t 167 ulp_default_flow_create(struct rte_eth_dev *eth_dev, 168 struct ulp_tlv_param *param_list, 169 uint32_t ulp_class_tid, 170 uint32_t *flow_id); 171 172 /* Function to destroy default flows. */ 173 int32_t 174 ulp_default_flow_destroy(struct rte_eth_dev *eth_dev, 175 uint32_t flow_id); 176 177 int 178 bnxt_ulp_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, 179 struct rte_flow_error *error); 180 181 int32_t 182 bnxt_ulp_cntxt_ptr2_fc_info_set(struct bnxt_ulp_context *ulp_ctx, 183 struct bnxt_ulp_fc_info *ulp_fc_info); 184 185 struct bnxt_ulp_fc_info * 186 bnxt_ulp_cntxt_ptr2_fc_info_get(struct bnxt_ulp_context *ulp_ctx); 187 188 int32_t 189 bnxt_ulp_cntxt_ptr2_ulp_flags_get(struct bnxt_ulp_context *ulp_ctx, 190 uint32_t *flags); 191 192 int32_t 193 bnxt_ulp_get_df_rule_info(uint8_t port_id, struct bnxt_ulp_context *ulp_ctx, 194 struct bnxt_ulp_df_rule_info *info); 195 196 struct bnxt_ulp_vfr_rule_info* 197 bnxt_ulp_cntxt_ptr2_ulp_vfr_info_get(struct bnxt_ulp_context *ulp_ctx, 198 uint32_t port_id); 199 200 int32_t 201 bnxt_ulp_cntxt_acquire_fdb_lock(struct bnxt_ulp_context *ulp_ctx); 202 203 void 204 bnxt_ulp_cntxt_release_fdb_lock(struct bnxt_ulp_context *ulp_ctx); 205 206 #endif /* _BNXT_ULP_H_ */ 207