From patchwork Tue Jan 31 13:02:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dongdong Liu X-Patchwork-Id: 122750 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E539941B8F; Tue, 31 Jan 2023 14:03:58 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B5DED42D29; Tue, 31 Jan 2023 14:03:39 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id E649140EF0; Tue, 31 Jan 2023 14:03:33 +0100 (CET) Received: from kwepemi500017.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4P5lYC5tPHzRqDw; Tue, 31 Jan 2023 21:01:19 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemi500017.china.huawei.com (7.221.188.110) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Tue, 31 Jan 2023 21:03:31 +0800 From: Dongdong Liu To: , , , CC: , , , Subject: [PATCH V3 02/10] net/hns3: extract common API to query device Date: Tue, 31 Jan 2023 21:02:52 +0800 Message-ID: <20230131130300.24713-3-liudongdong3@huawei.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20230131130300.24713-1-liudongdong3@huawei.com> References: <20230129105140.29921-1-liudongdong3@huawei.com> <20230131130300.24713-1-liudongdong3@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemi500017.china.huawei.com (7.221.188.110) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Huisong Li Extract common function to query device specifications. Fixes: 9c740336f024 ("net/hns3: get device specifications from firmware") Cc: stable@dpdk.org Signed-off-by: Huisong Li Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_common.c | 75 +++++++++++++++++++++++++++++++ drivers/net/hns3/hns3_common.h | 2 + drivers/net/hns3/hns3_ethdev.c | 63 -------------------------- drivers/net/hns3/hns3_ethdev_vf.c | 65 +-------------------------- 4 files changed, 79 insertions(+), 126 deletions(-) diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c index 7adc6a4972..b0c7f8d62c 100644 --- a/drivers/net/hns3/hns3_common.c +++ b/drivers/net/hns3/hns3_common.c @@ -10,6 +10,7 @@ #include "hns3_logs.h" #include "hns3_regs.h" #include "hns3_rxtx.h" +#include "hns3_dcb.h" #include "hns3_common.h" int @@ -845,3 +846,77 @@ hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id) return 0; } + +void +hns3_set_default_dev_specifications(struct hns3_hw *hw) +{ + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + + hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT; + hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE; + hw->rss_key_size = HNS3_RSS_KEY_SIZE; + hw->intr.int_ql_max = HNS3_INTR_QL_NONE; + + if (hns->is_vf) + return; + + hw->max_tm_rate = HNS3_ETHER_MAX_RATE; +} + +static void +hns3_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc) +{ + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + struct hns3_dev_specs_0_cmd *req0; + struct hns3_dev_specs_1_cmd *req1; + + req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data; + req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data; + + hw->max_non_tso_bd_num = req0->max_non_tso_bd_num; + hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size); + hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size); + hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max); + hw->min_tx_pkt_len = req1->min_tx_pkt_len; + + if (hns->is_vf) + return; + + hw->max_tm_rate = rte_le_to_cpu_32(req0->max_tm_rate); +} + +static int +hns3_check_dev_specifications(struct hns3_hw *hw) +{ + if (hw->rss_ind_tbl_size == 0 || + hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) { + hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)", + hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX); + return -EINVAL; + } + + return 0; +} + +int +hns3_query_dev_specifications(struct hns3_hw *hw) +{ + struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM]; + int ret; + int i; + + for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) { + hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, + true); + desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT); + } + hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true); + + ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM); + if (ret) + return ret; + + hns3_parse_dev_specifications(hw, desc); + + return hns3_check_dev_specifications(hw); +} diff --git a/drivers/net/hns3/hns3_common.h b/drivers/net/hns3/hns3_common.h index 5aa001f0cc..8eaeda26e7 100644 --- a/drivers/net/hns3/hns3_common.h +++ b/drivers/net/hns3/hns3_common.h @@ -60,5 +60,7 @@ void hns3_unmap_rx_interrupt(struct rte_eth_dev *dev); int hns3_restore_rx_interrupt(struct hns3_hw *hw); int hns3_get_pci_revision_id(struct hns3_hw *hw, uint8_t *revision_id); +void hns3_set_default_dev_specifications(struct hns3_hw *hw); +int hns3_query_dev_specifications(struct hns3_hw *hw); #endif /* HNS3_COMMON_H */ diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index eb809cd8c9..ab565ce128 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -2647,69 +2647,6 @@ hns3_parse_speed(int speed_cmd, uint32_t *speed) return 0; } -static void -hns3_set_default_dev_specifications(struct hns3_hw *hw) -{ - hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT; - hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE; - hw->rss_key_size = HNS3_RSS_KEY_SIZE; - hw->max_tm_rate = HNS3_ETHER_MAX_RATE; - hw->intr.int_ql_max = HNS3_INTR_QL_NONE; -} - -static void -hns3_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc) -{ - struct hns3_dev_specs_0_cmd *req0; - struct hns3_dev_specs_1_cmd *req1; - - req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data; - req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data; - - hw->max_non_tso_bd_num = req0->max_non_tso_bd_num; - hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size); - hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size); - hw->max_tm_rate = rte_le_to_cpu_32(req0->max_tm_rate); - hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max); - hw->min_tx_pkt_len = req1->min_tx_pkt_len; -} - -static int -hns3_check_dev_specifications(struct hns3_hw *hw) -{ - if (hw->rss_ind_tbl_size == 0 || - hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) { - hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)", - hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX); - return -EINVAL; - } - - return 0; -} - -static int -hns3_query_dev_specifications(struct hns3_hw *hw) -{ - struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM]; - int ret; - int i; - - for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) { - hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, - true); - desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT); - } - hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true); - - ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM); - if (ret) - return ret; - - hns3_parse_dev_specifications(hw, desc); - - return hns3_check_dev_specifications(hw); -} - static int hns3_get_capability(struct hns3_hw *hw) { diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index e43815607a..d3c1bdf2c5 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -688,67 +688,6 @@ hns3vf_interrupt_handler(void *param) hns3vf_enable_irq0(hw); } -static void -hns3vf_set_default_dev_specifications(struct hns3_hw *hw) -{ - hw->max_non_tso_bd_num = HNS3_MAX_NON_TSO_BD_PER_PKT; - hw->rss_ind_tbl_size = HNS3_RSS_IND_TBL_SIZE; - hw->rss_key_size = HNS3_RSS_KEY_SIZE; - hw->intr.int_ql_max = HNS3_INTR_QL_NONE; -} - -static void -hns3vf_parse_dev_specifications(struct hns3_hw *hw, struct hns3_cmd_desc *desc) -{ - struct hns3_dev_specs_0_cmd *req0; - struct hns3_dev_specs_1_cmd *req1; - - req0 = (struct hns3_dev_specs_0_cmd *)desc[0].data; - req1 = (struct hns3_dev_specs_1_cmd *)desc[1].data; - - hw->max_non_tso_bd_num = req0->max_non_tso_bd_num; - hw->rss_ind_tbl_size = rte_le_to_cpu_16(req0->rss_ind_tbl_size); - hw->rss_key_size = rte_le_to_cpu_16(req0->rss_key_size); - hw->intr.int_ql_max = rte_le_to_cpu_16(req0->intr_ql_max); - hw->min_tx_pkt_len = req1->min_tx_pkt_len; -} - -static int -hns3vf_check_dev_specifications(struct hns3_hw *hw) -{ - if (hw->rss_ind_tbl_size == 0 || - hw->rss_ind_tbl_size > HNS3_RSS_IND_TBL_SIZE_MAX) { - hns3_err(hw, "the indirection table size obtained (%u) is invalid, and should not be zero or exceed the maximum(%u)", - hw->rss_ind_tbl_size, HNS3_RSS_IND_TBL_SIZE_MAX); - return -EINVAL; - } - - return 0; -} - -static int -hns3vf_query_dev_specifications(struct hns3_hw *hw) -{ - struct hns3_cmd_desc desc[HNS3_QUERY_DEV_SPECS_BD_NUM]; - int ret; - int i; - - for (i = 0; i < HNS3_QUERY_DEV_SPECS_BD_NUM - 1; i++) { - hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, - true); - desc[i].flag |= rte_cpu_to_le_16(HNS3_CMD_FLAG_NEXT); - } - hns3_cmd_setup_basic_desc(&desc[i], HNS3_OPC_QUERY_DEV_SPECS, true); - - ret = hns3_cmd_send(hw, desc, HNS3_QUERY_DEV_SPECS_BD_NUM); - if (ret) - return ret; - - hns3vf_parse_dev_specifications(hw, desc); - - return hns3vf_check_dev_specifications(hw); -} - void hns3vf_update_push_lsc_cap(struct hns3_hw *hw, bool supported) { @@ -826,7 +765,7 @@ hns3vf_get_capability(struct hns3_hw *hw) return ret; if (hw->revision < PCI_REVISION_ID_HIP09_A) { - hns3vf_set_default_dev_specifications(hw); + hns3_set_default_dev_specifications(hw); hw->intr.mapping_mode = HNS3_INTR_MAPPING_VEC_RSV_ONE; hw->intr.gl_unit = HNS3_INTR_COALESCE_GL_UINT_2US; hw->tso_mode = HNS3_TSO_SW_CAL_PSEUDO_H_CSUM; @@ -837,7 +776,7 @@ hns3vf_get_capability(struct hns3_hw *hw) return 0; } - ret = hns3vf_query_dev_specifications(hw); + ret = hns3_query_dev_specifications(hw); if (ret) { PMD_INIT_LOG(ERR, "failed to query dev specifications, ret = %d",