optimize mtu set ops. Signed-off-by: Junlong Wang --- drivers/net/zxdh/zxdh_ethdev_ops.c | 8 ++--- drivers/net/zxdh/zxdh_msg.c | 42 ++++++++++++++++++++++++++ drivers/net/zxdh/zxdh_tables.h | 47 +++++++++++++++++++++++++++--- 3 files changed, 89 insertions(+), 8 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index 14d45f37b5..83b77571d7 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -151,12 +151,12 @@ static int32_t zxdh_config_port_status(struct rte_eth_dev *dev, uint16_t link_st struct zxdh_port_attr_set_msg *port_attr_msg = &msg_info.data.port_attr_msg; zxdh_msg_head_build(hw, ZXDH_PORT_ATTRS_SET, &msg_info); - port_attr_msg->mode = ZXDH_PORT_ATTR_IS_UP_FLAG; + port_attr_msg->mode = ZXDH_PORT_VPORT_IS_UP_FLAG; port_attr_msg->value = link_status; ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), NULL, 0); if (ret) { PMD_DRV_LOG(ERR, "Failed to send msg: port 0x%x msg type %d", - hw->vport.vport, ZXDH_PORT_ATTR_IS_UP_FLAG); + hw->vport.vport, ZXDH_PORT_VPORT_IS_UP_FLAG); return ret; } } @@ -1559,12 +1559,12 @@ int zxdh_dev_mtu_set(struct rte_eth_dev *dev, uint16_t new_mtu) struct zxdh_port_attr_set_msg *attr_msg = &msg_info.data.port_attr_msg; zxdh_msg_head_build(hw, ZXDH_PORT_ATTRS_SET, &msg_info); - attr_msg->mode = ZXDH_PORT_MTU_EN_FLAG; + attr_msg->mode = ZXDH_PORT_MTU_OFFLOAD_EN_OFF_FLAG; attr_msg->value = 1; ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), NULL, 0); if (ret) { PMD_DRV_LOG(ERR, "Failed to send msg: port 0x%x msg type %d", - hw->vport.vport, ZXDH_PORT_MTU_EN_FLAG); + hw->vport.vport, ZXDH_PORT_MTU_OFFLOAD_EN_OFF_FLAG); return ret; } attr_msg->mode = ZXDH_PORT_MTU_FLAG; diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index 9908c4912e..b99bd342ac 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1648,6 +1648,47 @@ zxdh_vf_rss_table_get(struct zxdh_hw *hw, uint16_t vport, void *cfg_data __rte_u return ret; } +static int +zxdh_vf_port_attr_set(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, + struct zxdh_msg_reply_body *res_info __rte_unused, uint16_t *res_len __rte_unused) +{ + RTE_ASSERT(!cfg_data || !pf_hw); + if (res_info) + *res_len = 0; + struct zxdh_port_attr_set_msg *attr_msg = (struct zxdh_port_attr_set_msg *)cfg_data; + union zxdh_virport_num port = {.vport = vport}; + struct zxdh_port_attr_table port_attr = {0}; + + int ret = zxdh_get_port_attr(pf_hw, vport, &port_attr); + if (ret) { + PMD_DRV_LOG(ERR, "get vport 0x%x(%d) attr failed", vport, port.vfid); + return ret; + } + switch (attr_msg->mode) { + case ZXDH_PORT_BASE_QID_FLAG: + port_attr.port_base_qid = attr_msg->value; + break; + case ZXDH_PORT_MTU_OFFLOAD_EN_OFF_FLAG: + port_attr.mtu_enable = attr_msg->value; + break; + case ZXDH_PORT_MTU_FLAG: + port_attr.mtu = attr_msg->value; + break; + case ZXDH_PORT_VPORT_IS_UP_FLAG: + port_attr.is_up = attr_msg->value; + break; + default: + PMD_DRV_LOG(ERR, "unsupport attr 0x%x set", attr_msg->mode); + return -1; + } + ret = zxdh_set_port_attr(pf_hw, vport, &port_attr); + if (ret) { + PMD_DRV_LOG(ERR, "set port attr failed. code:%d", ret); + return ret; + } + return ret; +} + zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_NULL] = NULL, [ZXDH_VF_PORT_INIT] = zxdh_vf_port_init, @@ -1663,6 +1704,7 @@ zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_RSS_HF_SET] = zxdh_vf_rss_hf_set, [ZXDH_RSS_HF_GET] = zxdh_vf_rss_hf_get, [ZXDH_VLAN_OFFLOAD] = zxdh_vf_set_vlan_offload, + [ZXDH_PORT_ATTRS_SET] = zxdh_vf_port_attr_set, }; static inline int diff --git a/drivers/net/zxdh/zxdh_tables.h b/drivers/net/zxdh/zxdh_tables.h index 453e288f8d..67294105e9 100644 --- a/drivers/net/zxdh/zxdh_tables.h +++ b/drivers/net/zxdh/zxdh_tables.h @@ -7,10 +7,49 @@ #include -#define ZXDH_PORT_MTU_FLAG 9 -#define ZXDH_PORT_BASE_QID_FLAG 10 -#define ZXDH_PORT_ATTR_IS_UP_FLAG 35 -#define ZXDH_PORT_MTU_EN_FLAG 42 +#define ZXDH_PORT_VHCA_FLAG 1 +#define ZXDH_PORT_RSS_HASH_FACTOR_FLAG 3 +#define ZXDH_PORT_HASH_ALG_FLAG 4 +#define ZXDH_PORT_PHY_PORT_FLAG 5 +#define ZXDH_PORT_LAG_ID_FLAG 6 + +#define ZXDH_PORT_PF_VQM_VFID_FLAG 8 + +#define ZXDH_PORT_MTU_FLAG 10 +#define ZXDH_PORT_BASE_QID_FLAG 11 +#define ZXDH_PORT_HASH_SEARCH_INDEX_FLAG 12 + +#define ZXDH_PORT_EGRESS_METER_EN_OFF_FLAG 14 +#define ZXDH_PORT_EGRESS_MODE_FLAG 16 +#define ZXDH_PORT_INGRESS_METER_EN_OFF_FLAG 15 +#define ZXDH_PORT_INGRESS_MODE_FLAG 17 +#define ZXDH_PORT_EGRESS_TM_ENABLE_FLAG 18 +#define ZXDH_PORT_INGRESS_TM_ENABLE_FLAG 19 +#define ZXDH_PORT_SPOOFCHK_EN_OFF_FLAG 21 +#define ZXDH_PORT_INLINE_SEC_OFFLOAD_FLAG 22 +#define ZXDH_PORT_FD_EN_OFF_FLAG 23 +#define ZXDH_PORT_LAG_EN_OFF_FLAG 24 +#define ZXDH_PORT_VEPA_EN_OFF_FLAG 25 +#define ZXDH_PORT_IS_VF_FLAG 26 +#define ZXDH_PORT_VIRTION_VERSION_FLAG 27 +#define ZXDH_PORT_VIRTION_EN_OFF_FLAG 28 + +#define ZXDH_PORT_ACCELERATOR_OFFLOAD_FLAG_FLAG 29 +#define ZXDH_PORT_LRO_OFFLOAD_FLAG 30 +#define ZXDH_PORT_IP_FRAGMENT_OFFLOAD_FLAG 31 +#define ZXDH_PORT_TCP_UDP_CHKSUM_FLAG 32 +#define ZXDH_PORT_IP_CHKSUM_FLAG 33 +#define ZXDH_PORT_OUTER_IP_CHECKSUM_OFFLOAD_FLAG 34 +#define ZXDH_PORT_VPORT_IS_UP_FLAG 35 +#define ZXDH_PORT_BUSINESS_EN_OFF_FLAG 36 + +#define ZXDH_PORT_HW_BOND_EN_OFF_FLAG 37 +#define ZXDH_PORT_RDMA_OFFLOAD_EN_OFF_FLAG 38 +#define ZXDH_PORT_PROMISC_EN_FLAG 39 +#define ZXDH_PORT_VLAN_OFFLOAD_EN_FLAG 40 +#define ZXDH_PORT_BUSINESS_VLAN_OFFLOAD_EN_FLAG 41 +#define ZXDH_PORT_RSS_EN_OFF_FLAG 42 +#define ZXDH_PORT_MTU_OFFLOAD_EN_OFF_FLAG 43 #define ZXDH_MTU_STATS_EGRESS_BASE 0x8481 #define ZXDH_MTU_STATS_INGRESS_BASE 0x8981 -- 2.27.0