/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2014-2019 Broadcom
+ * Copyright(c) 2014-2021 Broadcom
* All rights reserved.
*/
#include "bnxt_ulp.h"
#define BNXT_PORT_DB_MAX_INTF_LIST 256
+#define BNXT_PORT_DB_MAX_FUNC 2048
+#define BNXT_ULP_FREE_PARIF_BASE 11
-/* enumeration of the interface types */
-enum bnxt_ulp_intf_type {
- BNXT_ULP_INTF_TYPE_INVALID = 0,
- BNXT_ULP_INTF_TYPE_PF = 1,
- BNXT_ULP_INTF_TYPE_VF,
- BNXT_ULP_INTF_TYPE_PF_REP,
- BNXT_ULP_INTF_TYPE_VF_REP,
- BNXT_ULP_INTF_TYPE_LAST
+enum bnxt_ulp_svif_type {
+ BNXT_ULP_DRV_FUNC_SVIF = 0,
+ BNXT_ULP_VF_FUNC_SVIF,
+ BNXT_ULP_PHY_PORT_SVIF
+};
+
+enum bnxt_ulp_spif_type {
+ BNXT_ULP_DRV_FUNC_SPIF = 0,
+ BNXT_ULP_VF_FUNC_SPIF,
+ BNXT_ULP_PHY_PORT_SPIF
+};
+
+enum bnxt_ulp_parif_type {
+ BNXT_ULP_DRV_FUNC_PARIF = 0,
+ BNXT_ULP_VF_FUNC_PARIF,
+ BNXT_ULP_PHY_PORT_PARIF
+};
+
+enum bnxt_ulp_vnic_type {
+ BNXT_ULP_DRV_FUNC_VNIC = 0,
+ BNXT_ULP_VF_FUNC_VNIC
+};
+
+enum bnxt_ulp_fid_type {
+ BNXT_ULP_DRV_FUNC_FID,
+ BNXT_ULP_VF_FUNC_FID
+};
+
+struct ulp_func_if_info {
+ uint16_t func_valid;
+ uint16_t func_svif;
+ uint16_t func_spif;
+ uint16_t func_parif;
+ uint16_t func_vnic;
+ uint16_t phy_port_id;
+ uint16_t ifindex;
};
/* Structure for the Port database resource information. */
struct ulp_interface_info {
enum bnxt_ulp_intf_type type;
- uint16_t func_id;
- uint16_t func_svif;
- uint16_t port_svif;
- uint16_t default_vnic;
- uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
- /* back pointer to the bnxt driver, it is null for rep ports */
- struct bnxt *bp;
+ uint16_t drv_func_id;
+ uint16_t vf_func_id;
+};
+
+struct ulp_phy_port_info {
+ uint16_t port_valid;
+ uint16_t port_svif;
+ uint16_t port_spif;
+ uint16_t port_parif;
+ uint16_t port_vport;
};
/* Structure for the Port database */
/* dpdk device external port list */
uint16_t dev_port_list[RTE_MAX_ETHPORTS];
+ struct ulp_phy_port_info *phy_port_list;
+ uint16_t phy_port_cnt;
+ struct ulp_func_if_info ulp_func_id_tbl[BNXT_PORT_DB_MAX_FUNC];
};
/*
*
* Returns 0 on success or negative number on failure.
*/
-int32_t ulp_port_db_init(struct bnxt_ulp_context *ulp_ctxt);
+int32_t ulp_port_db_init(struct bnxt_ulp_context *ulp_ctxt, uint8_t port_cnt);
/*
* Deinitialize the port database. Memory is deallocated in
* Returns 0 on success or negative number on failure.
*/
int32_t ulp_port_db_dev_port_intf_update(struct bnxt_ulp_context *ulp_ctxt,
- struct bnxt *bp);
+ struct rte_eth_dev *eth_dev);
/*
* Api to get the ulp ifindex for a given device port.
*/
int32_t
ulp_port_db_dev_port_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
- uint32_t port_id,
- uint32_t *ifindex);
+ uint32_t port_id, uint32_t *ifindex);
/*
* Api to get the function id for a given ulp ifindex.
*/
int32_t
ulp_port_db_function_id_get(struct bnxt_ulp_context *ulp_ctxt,
- uint32_t ifindex,
+ uint32_t ifindex, uint32_t fid_type,
uint16_t *func_id);
/*
- * Api to get the svid for a given ulp ifindex.
+ * Api to get the svif for a given ulp ifindex.
*
* ulp_ctxt [in] Ptr to ulp context
* ifindex [in] ulp ifindex
*/
int32_t
ulp_port_db_svif_get(struct bnxt_ulp_context *ulp_ctxt,
- uint32_t ifindex,
- uint32_t dir,
- uint16_t *svif);
+ uint32_t ifindex, uint32_t dir, uint16_t *svif);
+
+/*
+ * Api to get the spif for a given ulp ifindex.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * ifindex [in] ulp ifindex
+ * dir [in] the direction for the flow.
+ * spif [out] the spif of the given ifindex.
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_spif_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t ifindex, uint32_t dir, uint16_t *spif);
+
+
+/*
+ * Api to get the parif for a given ulp ifindex.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * ifindex [in] ulp ifindex
+ * dir [in] the direction for the flow.
+ * parif [out] the parif of the given ifindex.
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_parif_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t ifindex, uint32_t dir, uint16_t *parif);
/*
* Api to get the vnic id for a given ulp ifindex.
*/
int32_t
ulp_port_db_default_vnic_get(struct bnxt_ulp_context *ulp_ctxt,
- uint32_t ifindex,
+ uint32_t ifindex, uint32_t vnic_type,
uint16_t *vnic);
+/*
+ * Api to get the vport id for a given ulp ifindex.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * ifindex [in] ulp ifindex
+ * vport [out] the port of the given ifindex.
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_vport_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t ifindex, uint16_t *vport);
+
+/*
+ * Api to get the vport for a given physical port.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * phy_port [in] physical port index
+ * out_port [out] the port of the given physical index
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_phy_port_vport_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t phy_port,
+ uint16_t *out_port);
+
+/*
+ * Api to get the svif for a given physical port.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * phy_port [in] physical port index
+ * svif [out] the svif of the given physical index
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_phy_port_svif_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t phy_port,
+ uint16_t *svif);
+
+/*
+ * Api to get the port type for a given ulp ifindex.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * ifindex [in] ulp ifindex
+ *
+ * Returns port type.
+ */
+enum bnxt_ulp_intf_type
+ulp_port_db_port_type_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t ifindex);
+
+/*
+ * Api to get the ulp ifindex for a given function id.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * func_id [in].device func id
+ * ifindex [out] ulp ifindex
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_dev_func_id_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
+ uint32_t func_id, uint32_t *ifindex);
+
+/*
+ * Api to get the function id for a given port id.
+ *
+ * ulp_ctxt [in] Ptr to ulp context
+ * port_id [in] dpdk port id
+ * func_id [out] the function id of the given ifindex.
+ *
+ * Returns 0 on success or negative number on failure.
+ */
+int32_t
+ulp_port_db_port_func_id_get(struct bnxt_ulp_context *ulp_ctxt,
+ uint16_t port_id, uint16_t *func_id);
+
#endif /* _ULP_PORT_DB_H_ */