X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_ethdev.c;h=510a0d9e0adaaa63827e3e0ca439ee1514a25100;hb=c557378fec049eea16e444b341c9de6d7c040ebc;hp=1dc85e6dff4a90b8e7c6326afcd5767f87497ca9;hpb=55be5732d631f4064b74f82e02add199adb3a39d;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 1dc85e6dff..510a0d9e0a 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -194,6 +194,9 @@ static void bnxt_free_link_info(struct bnxt *bp) static void bnxt_free_leds_info(struct bnxt *bp) { + if (BNXT_VF(bp)) + return; + rte_free(bp->leds); bp->leds = NULL; } @@ -263,6 +266,9 @@ static int bnxt_alloc_link_info(struct bnxt *bp) static int bnxt_alloc_leds_info(struct bnxt *bp) { + if (BNXT_VF(bp)) + return 0; + bp->leds = rte_zmalloc("bnxt_leds", BNXT_MAX_LED * sizeof(struct bnxt_led_info), 0); @@ -1076,7 +1082,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; -#ifdef RTE_ARCH_X86 +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) #ifndef RTE_LIBRTE_IEEE1588 /* * Vector mode receive can be enabled only if scatter rx is not @@ -1116,7 +1122,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev) static eth_tx_burst_t bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev) { -#ifdef RTE_ARCH_X86 +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) #ifndef RTE_LIBRTE_IEEE1588 struct bnxt *bp = eth_dev->data->dev_private; @@ -1162,73 +1168,6 @@ static int bnxt_handle_if_change_status(struct bnxt *bp) return rc; } -static int32_t -bnxt_create_port_app_df_rule(struct bnxt *bp, uint8_t flow_type, - uint32_t *flow_id) -{ - uint16_t port_id = bp->eth_dev->data->port_id; - struct ulp_tlv_param param_list[] = { - { - .type = BNXT_ULP_DF_PARAM_TYPE_DEV_PORT_ID, - .length = 2, - .value = {(port_id >> 8) & 0xff, port_id & 0xff} - }, - { - .type = BNXT_ULP_DF_PARAM_TYPE_LAST, - .length = 0, - .value = {0} - } - }; - - return ulp_default_flow_create(bp->eth_dev, param_list, flow_type, - flow_id); -} - -static int32_t -bnxt_create_df_rules(struct bnxt *bp) -{ - struct bnxt_ulp_data *cfg_data; - int rc; - - cfg_data = bp->ulp_ctx->cfg_data; - rc = bnxt_create_port_app_df_rule(bp, BNXT_ULP_DF_TPL_PORT_TO_VS, - &cfg_data->port_to_app_flow_id); - if (rc) { - PMD_DRV_LOG(ERR, - "Failed to create port to app default rule\n"); - return rc; - } - - BNXT_TF_DBG(DEBUG, "***** created port to app default rule ******\n"); - rc = bnxt_create_port_app_df_rule(bp, BNXT_ULP_DF_TPL_VS_TO_PORT, - &cfg_data->app_to_port_flow_id); - if (!rc) { - rc = ulp_default_flow_db_cfa_action_get(bp->ulp_ctx, - cfg_data->app_to_port_flow_id, - &cfg_data->tx_cfa_action); - if (rc) - goto err; - - BNXT_TF_DBG(DEBUG, - "***** created app to port default rule *****\n"); - return 0; - } - -err: - BNXT_TF_DBG(DEBUG, "Failed to create app to port default rule\n"); - return rc; -} - -static void -bnxt_destroy_df_rules(struct bnxt *bp) -{ - struct bnxt_ulp_data *cfg_data; - - cfg_data = bp->ulp_ctx->cfg_data; - ulp_default_flow_destroy(bp->eth_dev, cfg_data->port_to_app_flow_id); - ulp_default_flow_destroy(bp->eth_dev, cfg_data->app_to_port_flow_id); -} - static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; @@ -1290,8 +1229,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) bnxt_schedule_fw_health_check(bp); pthread_mutex_unlock(&bp->def_cp_lock); - if (BNXT_TRUFLOW_EN(bp)) - bnxt_ulp_init(bp); + bnxt_ulp_init(bp); return 0; @@ -1352,6 +1290,9 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) /* disable uio/vfio intr/eventfd mapping */ rte_intr_disable(intr_handle); + bnxt_ulp_destroy_df_rules(bp, false); + bnxt_ulp_deinit(bp); + bnxt_cancel_fw_health_check(bp); bnxt_dev_set_link_down_op(eth_dev); @@ -1397,12 +1338,6 @@ static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) rte_eal_alarm_cancel(bnxt_dev_recover, (void *)bp); bnxt_cancel_fc_thread(bp); - if (BNXT_TRUFLOW_EN(bp)) { - if (bp->rep_info != NULL) - bnxt_destroy_df_rules(bp); - bnxt_ulp_deinit(bp); - } - if (eth_dev->data->dev_started) bnxt_dev_stop_op(eth_dev); @@ -1651,8 +1586,7 @@ static int bnxt_promiscuous_disable_op(struct rte_eth_dev *eth_dev) if (rc != 0) vnic->flags = old_flags; - if (BNXT_TRUFLOW_EN(bp) && bp->rep_info != NULL) - bnxt_create_df_rules(bp); + bnxt_ulp_create_df_rules(bp); return rc; } @@ -2495,15 +2429,15 @@ bnxt_vlan_tpid_set_op(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, bp->outer_tpid_bd = TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100; break; - case 0x9100: + case RTE_ETHER_TYPE_QINQ1: bp->outer_tpid_bd = TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100; break; - case 0x9200: + case RTE_ETHER_TYPE_QINQ2: bp->outer_tpid_bd = TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200; break; - case 0x9300: + case RTE_ETHER_TYPE_QINQ3: bp->outer_tpid_bd = TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300; break; @@ -2679,7 +2613,7 @@ bnxt_rx_burst_mode_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id, "Scalar"); return 0; } -#ifdef RTE_ARCH_X86 +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) if (pkt_burst == bnxt_recv_pkts_vec) { snprintf(mode->info, sizeof(mode->info), "%s", "Vector SSE"); @@ -2701,7 +2635,7 @@ bnxt_tx_burst_mode_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id, "Scalar"); return 0; } -#ifdef RTE_ARCH_X86 +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) if (pkt_burst == bnxt_xmit_pkts_vec) { snprintf(mode->info, sizeof(mode->info), "%s", "Vector SSE"); @@ -2730,7 +2664,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) new_pkt_size = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE * BNXT_NUM_VLANS; -#ifdef RTE_ARCH_X86 +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) /* * If vector-mode tx/rx is active, disallow any MTU change that would * require scattered receive support. @@ -3746,7 +3680,7 @@ free_filter: return ret; } -static int +int bnxt_filter_ctrl_op(struct rte_eth_dev *dev, enum rte_filter_type filter_type, enum rte_filter_op filter_op, void *arg) @@ -3754,7 +3688,12 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev, struct bnxt *bp = dev->data->dev_private; int ret = 0; - ret = is_bnxt_in_error(dev->data->dev_private); + if (BNXT_ETH_DEV_IS_REPRESENTOR(dev)) { + struct bnxt_vf_representor *vfr = dev->data->dev_private; + bp = vfr->parent_dev->data->dev_private; + } + + ret = is_bnxt_in_error(bp); if (ret) return ret; @@ -4433,7 +4372,7 @@ static int bnxt_restore_mac_filters(struct bnxt *bp) uint16_t i; int rc; - if (BNXT_VF(bp) & !BNXT_VF_IS_TRUSTED(bp)) + if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp)) return 0; rc = bnxt_dev_info_get_op(dev, &dev_info); @@ -5461,10 +5400,6 @@ static int bnxt_init_fw(struct bnxt *bp) bnxt_hwrm_port_phy_qcaps(bp); - rc = bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(bp); - if (rc) - return rc; - bnxt_alloc_error_recovery_info(bp); /* Get the adapter error recovery support info */ rc = bnxt_hwrm_error_recovery_qcfg(bp);