net/bnxt: add locks in flow database
[dpdk.git] / drivers / net / bnxt / tf_ulp / bnxt_ulp.h
index d532452..36405ae 100644 (file)
 
 /* NAT defines to reuse existing inner L2 SMAC and DMAC */
 #define BNXT_ULP_NAT_INNER_L2_HEADER_SMAC      0x2000
+#define BNXT_ULP_NAT_OUTER_MOST_L2_HDR_SMAC    0x6000
+#define BNXT_ULP_NAT_OUTER_MOST_L2_VLAN_TAGS   0xc00
 #define BNXT_ULP_NAT_INNER_L2_HEADER_DMAC      0x100
+#define BNXT_ULP_NAT_OUTER_MOST_L2_HDR_DMAC    0x300
+#define BNXT_ULP_NAT_OUTER_MOST_FLAGS (BNXT_ULP_NAT_OUTER_MOST_L2_HDR_SMAC |\
+                                       BNXT_ULP_NAT_OUTER_MOST_L2_VLAN_TAGS |\
+                                       BNXT_ULP_NAT_OUTER_MOST_L2_HDR_DMAC)
 
 /* defines for the ulp_flags */
 #define BNXT_ULP_VF_REP_ENABLED                0x1
@@ -28,22 +34,30 @@ struct bnxt_ulp_df_rule_info {
        uint8_t                         valid;
 };
 
+struct bnxt_ulp_vfr_rule_info {
+       uint32_t                        rep2vf_flow_id;
+       uint32_t                        vf2rep_flow_id;
+       uint16_t                        parent_port_id;
+       uint8_t                         valid;
+};
+
 struct bnxt_ulp_data {
        uint32_t                        tbl_scope_id;
        struct bnxt_ulp_mark_tbl        *mark_tbl;
        uint32_t                        dev_id; /* Hardware device id */
        uint32_t                        ref_cnt;
        struct bnxt_ulp_flow_db         *flow_db;
+       pthread_mutex_t                 flow_db_lock;
        void                            *mapper_data;
        struct bnxt_ulp_port_db         *port_db;
        struct bnxt_ulp_fc_info         *fc_info;
        uint32_t                        ulp_flags;
-       struct bnxt_ulp_df_rule_info   df_rule_info[RTE_MAX_ETHPORTS];
+       struct bnxt_ulp_df_rule_info    df_rule_info[RTE_MAX_ETHPORTS];
+       struct bnxt_ulp_vfr_rule_info   vfr_rule_info[RTE_MAX_ETHPORTS];
 };
 
 struct bnxt_ulp_context {
        struct bnxt_ulp_data    *cfg_data;
-       /* TBD The tfp should be removed once tf_attach is implemented. */
        struct tf               *g_tfp;
 };
 
@@ -58,7 +72,6 @@ struct bnxt_ulp_session_state {
        pthread_mutex_t                         bnxt_ulp_mutex;
        struct bnxt_ulp_pci_info                pci_info;
        struct bnxt_ulp_data                    *cfg_data;
-       /* TBD The tfp should be removed once tf_attach is implemented. */
        struct tf                               *g_tfp;
        uint32_t                                session_opened;
 };
@@ -77,12 +90,9 @@ struct ulp_tlv_param {
 /*
  * Allow the deletion of context only for the bnxt device that
  * created the session
- * TBD - The implementation of the function should change to
- * using the reference count once tf_session_attach functionality
- * is fixed.
  */
 bool
-ulp_ctx_deinit_allowed(void *bp);
+ulp_ctx_deinit_allowed(struct bnxt_ulp_context *ulp_ctx);
 
 /* Function to set the device id of the hardware. */
 int32_t
@@ -183,4 +193,14 @@ int32_t
 bnxt_ulp_get_df_rule_info(uint8_t port_id, struct bnxt_ulp_context *ulp_ctx,
                          struct bnxt_ulp_df_rule_info *info);
 
+struct bnxt_ulp_vfr_rule_info*
+bnxt_ulp_cntxt_ptr2_ulp_vfr_info_get(struct bnxt_ulp_context *ulp_ctx,
+                                    uint32_t port_id);
+
+int32_t
+bnxt_ulp_cntxt_acquire_fdb_lock(struct bnxt_ulp_context        *ulp_ctx);
+
+void
+bnxt_ulp_cntxt_release_fdb_lock(struct bnxt_ulp_context        *ulp_ctx);
+
 #endif /* _BNXT_ULP_H_ */