diff --git a/drivers/net/ethernet/hisilicon/hns3/Makefile b/drivers/net/ethernet/hisilicon/hns3/Makefile index feb9a31253ea4f5e873ff9eb66ae690ae142a35a..8a0943bb6eeac8c6bc93470af0a95e190612bdc0 100644 --- a/drivers/net/ethernet/hisilicon/hns3/Makefile +++ b/drivers/net/ethernet/hisilicon/hns3/Makefile @@ -70,7 +70,6 @@ HNS3_CAE_OBJS_EXT = hns3_cae/hns3_priv_dfx.o \ hns3_cae/hns3_priv_hilink_param.o \ hns3_cae/hns3_priv_irq.o \ hns3_cae/hns3_priv_mac.o \ - hns3_cae/hns3_priv_phy.o \ hns3_cae/hns3_priv_pkt.o \ hns3_cae/hns3_priv_port.o \ hns3_cae/hns3_priv_promisc.o \ diff --git a/drivers/net/ethernet/hisilicon/hns3/hns-customer/hns3pf/hclge_ext.c b/drivers/net/ethernet/hisilicon/hns3/hns-customer/hns3pf/hclge_ext.c index 78940e9b88ac52b773fd649076f470f72007edb5..6fb960b0ef980d4505d1737c2def58d154d599f4 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns-customer/hns3pf/hclge_ext.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns-customer/hns3pf/hclge_ext.c @@ -505,8 +505,8 @@ static int hclge_phy_need_page_select(struct hclge_dev *hdev, return 0; } -static int hclge_check_phy_opt_pare(struct hclge_dev *hdev, - struct mii_bus *mdio_bus, +static int hclge_check_phy_opt_param(struct hclge_dev *hdev, + struct mii_bus *mdio_bus, struct phy_device *phydev, enum hclge_phy_op_code opt_type) { @@ -529,6 +529,35 @@ static int hclge_check_phy_opt_pare(struct hclge_dev *hdev, return 0; } +int hclge_mdio_bus_opt(struct hclge_phy_para *para, struct hclge_dev *hdev, + struct mii_bus *mdio_bus, u32 phyid, + enum hclge_phy_op_code opt_type) +{ + int op_ret; + + if (opt_type == PHY_OP_READ) { + op_ret = mdio_bus->read(mdio_bus, phyid, para->reg_addr); + if (op_ret < 0) { + dev_err(&hdev->pdev->dev, + "read phy %d page %d reg %d failed.\n", + phyid, para->page, para->reg_addr); + } else { + para->data = (u16)op_ret; + op_ret = 0; + } + } else { + op_ret = mdio_bus->write(mdio_bus, phyid, para->reg_addr, + para->data); + if (op_ret < 0) { + dev_err(&hdev->pdev->dev, + "write phy %d page %d reg %d failed.\n", + phyid, para->page, para->reg_addr); + } + } + + return op_ret; +} + static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data, enum hclge_phy_op_code opt_type) { @@ -539,10 +568,11 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data, struct mii_bus *mdio_bus = mac->mdio_bus; u32 phyid = mac->phy_addr; int need_page_select; - int op_ret, ret; u16 cur_page; + int op_ret; + int ret; - ret = hclge_check_phy_opt_pare(hdev, mdio_bus, mac->phydev, opt_type); + ret = hclge_check_phy_opt_param(hdev, mdio_bus, mac->phydev, opt_type); if (ret < 0) return ret; @@ -576,25 +606,7 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data, } /* operate register(read or write) */ - if (opt_type == PHY_OP_READ) { - op_ret = mdio_bus->read(mdio_bus, phyid, para->reg_addr); - if (op_ret < 0) { - dev_err(&hdev->pdev->dev, - "read phy %d page %d reg %d failed.\n", - phyid, para->page, para->reg_addr); - } else { - para->data = (u16)op_ret; - op_ret = 0; - } - } else { - op_ret = mdio_bus->write(mdio_bus, phyid, para->reg_addr, - para->data); - if (op_ret < 0) { - dev_err(&hdev->pdev->dev, - "write phy %d page %d reg %d failed.\n", - phyid, para->page, para->reg_addr); - } - } + op_ret = hclge_mdio_bus_opt(para, hdev, mdio_bus, phyid, opt_type); /* come back to the page recorded in the first step. */ if (need_page_select) { diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c index eef552de216faeaa512bacc84a30a7c8daa95b47..049fd191bc6bcbe4b2fb18f03699de6a1ac7f469 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c @@ -19,7 +19,6 @@ #include "hns3_priv_mac.h" #include "hns3_priv_dfx.h" #include "hns3_priv_vlan.h" -#include "hns3_priv_phy.h" #include "hns3_priv_qos.h" #include "hns3_priv_qinfo.h" #include "hns3_priv_promisc.h" @@ -61,7 +60,7 @@ #define HCLGE_OPC_DCQCN_TEMPLATE_CFG 0x7014 #define HCLGE_OPC_DCQCN_GET_MSG_CNT 0x7017 -#define HNAE_DRIVER_VERSION "1.8.10.1" +#define HNAE_DRIVER_VERSION "1.8.10.2" #define MAX_MSG_OUT_SIZE (1024U * 2048U) #define MAX_MSG_IN_SIZE (1024U * 2048U) @@ -845,7 +844,6 @@ struct drv_module_handle driv_module_cmd_handle[] = { {TIMEOUT_CFG, hns3_nic_timeout_cfg}, {PROMISC_MODE_CFG, hns3_promisc_mode_cfg}, {QINFO_CFG, hns3_test_qinfo_cfg}, - {PHY_REGISTER_CFG, hns3_test_phy_register_cfg}, {MACTABLE_CFG, hns3_test_opt_mactbl}, {CLEAN_STATS, hns3_test_clean_stats}, {FD_CFG, hns3_test_fd_cfg}, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.c deleted file mode 100644 index d37791b1f9fdc646f4b0241bdc60bd564691290d..0000000000000000000000000000000000000000 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.c +++ /dev/null @@ -1,194 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -// Copyright (c) 2016-2017 Hisilicon Limited. - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "hclge_cmd.h" -#include "hnae3.h" -#include "hclge_main.h" -#include "hns3_enet.h" -#include "hns3_priv_phy.h" - -#define HNS3_PHY_MAX_REG_NUM 0xFFFF -#define HNS3_PHY_READ 0 -#define HNS3_PHY_WRITE 1 - -static int hns3_test_get_reg(struct mii_bus *mdio_bus, u32 phy_id, - u16 page_select_addr, u16 page, u32 addr, - u16 *data) -{ - u16 cur_page; - int ret; - - if (addr > HNS3_PHY_MAX_REG_NUM) { - pr_err("invalid phy %d page or reg.\n", phy_id); - return -EPERM; - } - - mutex_lock(&mdio_bus->mdio_lock); - ret = mdio_bus->read(mdio_bus, phy_id, page_select_addr); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("record current phy %d reg page failed.\n", phy_id); - return ret; - } - - cur_page = ret; - - if (page == cur_page) { - ret = mdio_bus->read(mdio_bus, phy_id, addr); - mutex_unlock(&mdio_bus->mdio_lock); - if (ret >= 0) { - *data = ret; - return 0; - } - - return ret; - } - - ret = mdio_bus->write(mdio_bus, phy_id, page_select_addr, page); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("change phy %d reg page %d to %d failed.\n", phy_id, - cur_page, page); - return ret; - } - - ret = mdio_bus->read(mdio_bus, phy_id, addr); - if (ret < 0) { - pr_err("read phy %d reg(%u-%u) failed.\n", phy_id, page, addr); - if (mdio_bus->write(mdio_bus, phy_id, page_select_addr, - cur_page) < 0) - pr_err("restore phy %d reg page %d failed after error read.\n", - phy_id, cur_page); - mutex_unlock(&mdio_bus->mdio_lock); - return ret; - } - - *data = ret; - ret = mdio_bus->write(mdio_bus, phy_id, page_select_addr, cur_page); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("restore phy %d reg page %u failed.\n", phy_id, - cur_page); - return ret; - } - - mutex_unlock(&mdio_bus->mdio_lock); - - return 0; -} - -static int hns3_test_set_reg(struct mii_bus *mdio_bus, u32 phy_id, - u16 page_select_addr, u16 page, u32 addr, u16 data) -{ - u16 cur_page; - int ret; - - if (addr > HNS3_PHY_MAX_REG_NUM) { - pr_err("invalid phy %d page reg or val.\n", phy_id); - return -EPERM; - } - - mutex_lock(&mdio_bus->mdio_lock); - ret = mdio_bus->read(mdio_bus, phy_id, page_select_addr); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("record current phy %d reg page failed.\n", phy_id); - return ret; - } - - cur_page = ret; - if (page == cur_page) { - ret = mdio_bus->write(mdio_bus, phy_id, addr, data); - mutex_unlock(&mdio_bus->mdio_lock); - return ret; - } - - ret = mdio_bus->write(mdio_bus, phy_id, page_select_addr, page); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("change phy %d reg page %d to %d failed.\n", phy_id, - cur_page, page); - return ret; - } - - ret = mdio_bus->write(mdio_bus, phy_id, addr, data); - if (ret < 0) { - pr_err("write phy %d reg(%d-%d) failed.\n", phy_id, page, addr); - if (mdio_bus->write(mdio_bus, phy_id, page_select_addr, - cur_page) < 0) - pr_err("restore phy %d reg page %d failed after error write\n", - phy_id, cur_page); - - mutex_unlock(&mdio_bus->mdio_lock); - return ret; - } - - ret = mdio_bus->write(mdio_bus, phy_id, page_select_addr, cur_page); - if (ret < 0) { - mutex_unlock(&mdio_bus->mdio_lock); - pr_err("change phy %d reg page %d to %d failed.\n", phy_id, - page, cur_page); - return ret; - } - - mutex_unlock(&mdio_bus->mdio_lock); - - return 0; -} - -int hns3_test_phy_register_cfg(struct hns3_nic_priv *net_priv, - void *buf_in, u16 in_size, - void *buf_out, u16 *out_size) -{ - struct phy_reg_param *param; - struct hnae3_handle *handle; - struct hclge_vport *vport; - struct mii_bus *mdio_bus; - struct hclge_dev *hdev; - struct hclge_mac *mac; - u16 data = 0; - u32 phyid; - int ret; - - handle = net_priv->ae_handle; - vport = hclge_get_vport(handle); - hdev = vport->back; - mac = &hdev->hw.mac; - if (!mac->phydev) { - pr_err("this net dev has no phy.\n"); - return -EINVAL; - } - phyid = mac->phy_addr; - mdio_bus = mac->mdio_bus; - param = (struct phy_reg_param *)buf_in; - if (param->operate == HNS3_PHY_READ) { - ret = hns3_test_get_reg(mdio_bus, phyid, - param->page_select_addr, - param->page, param->addr, &data); - if (ret == 0) { - *out_size = sizeof(data); - memcpy(buf_out, &data, (int)sizeof(data)); - } - - } else if (param->operate == HNS3_PHY_WRITE) { - ret = hns3_test_set_reg(mdio_bus, phyid, - param->page_select_addr, - param->page, param->addr, - param->data); - } else { - pr_err("%s:operate is invalid.\n", __func__); - return -1; - } - - return ret; -} diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.h b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.h deleted file mode 100644 index c0ec2f8c0bdf7bcd8a5bc3b78e6e4d3868f2deb3..0000000000000000000000000000000000000000 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_phy.h +++ /dev/null @@ -1,19 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* Copyright (c) 2016-2019 Hisilicon Limited. */ - -#ifndef __HNS3_PRIV_PHY_H__ -#define __HNS3_PRIV_PHY_H__ - -struct phy_reg_param { - u16 operate; - u16 page_select_addr; - u16 page; - u32 addr; - u16 data; -}; - -int hns3_test_phy_register_cfg(struct hns3_nic_priv *net_priv, - void *buf_in, u16 in_size, - void *buf_out, u16 *out_size); - -#endif diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_pkt.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_pkt.c index 38cd978e3483eb2caa332e2732bf055f1ae53d70..99a764d3afab445bedab677bb2a84ef97fa785de 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_pkt.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_pkt.c @@ -205,19 +205,45 @@ int __get_tid(int queue_id, int is_send) return (queue_id * 2 + 1) % MAX_KTHREAD_NUM; } +void fill_skb_head(struct sk_buff *skb, int mss) +{ + struct ipv6hdr *ip6_hdr; + int protocol; + + skb->network_header = ETH_HLEN; + if (skb->protocol == htons(ETH_P_8021Q)) { + skb->network_header += VLAN_HLEN; + protocol = vlan_get_protocol(skb); + } else { + protocol = skb->protocol; + } + if (protocol == htons(ETH_P_IP)) + skb->transport_header = skb->network_header + + ip_hdr(skb)->ihl * 4; + if (protocol == htons(ETH_P_IPV6)) { + ip6_hdr = (struct ipv6hdr *)skb_network_header(skb); + skb->transport_header = skb->network_header + + sizeof(struct ipv6hdr); + if (ip6_hdr->nexthdr == NEXTHDR_HOP) + skb->transport_header += (skb_transport_header(skb)[1] + + 1) << 3; + skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6; + } + + skb_shinfo(skb)->gso_size = mss; +} + static struct sk_buff *__hns_assemble_skb(struct net_device *ndev, const void *data, int length, int queue_id, int mss) { + const struct ethhdr *ethhead = (const struct ethhdr *)data; + const char *head_data = (const char *)data; struct sk_buff *skb; + int proc_length; struct page *p; - void *buff; int bnum = 0; - int protocol; - int proc_length; - const char *head_data = (const char *)data; - const struct ethhdr *ethhead = (const struct ethhdr *)data; - struct ipv6hdr *ip6_hdr; + void *buff; /* allocate test skb */ skb = alloc_skb(256, GFP_KERNEL); @@ -263,30 +289,7 @@ static struct sk_buff *__hns_assemble_skb(struct net_device *ndev, DEFAULT_PAGE_SIZE); } - skb->network_header = ETH_HLEN; - if (skb->protocol == htons(ETH_P_8021Q)) { - skb->network_header += VLAN_HLEN; - protocol = vlan_get_protocol(skb); - } else { - protocol = skb->protocol; - } - - if (protocol == htons(ETH_P_IP)) - skb->transport_header = - skb->network_header + ip_hdr(skb)->ihl * 4; - - if (protocol == htons(ETH_P_IPV6)) { - ip6_hdr = (struct ipv6hdr *)skb_network_header(skb); - skb->transport_header = - skb->network_header + sizeof(struct ipv6hdr); - if (ip6_hdr->nexthdr == NEXTHDR_HOP) - skb->transport_header += - (skb_transport_header(skb)[1] + 1) << 3; - - skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6; - } - - skb_shinfo(skb)->gso_size = mss; + fill_skb_head(skb, mss); return skb; } diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_port.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_port.c index 380ea418af8f05d4df3582f4049bce7004d49b9a..d37c485fdafb8a6334617a3d7ee5a3c02033d371 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_port.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_port.c @@ -16,18 +16,53 @@ #define BD_NUM_6 6 #define BD_NUM_7 7 +void fill_port_info(struct hclge_port_info *get_port_info_out, + struct hclge_desc *port_desc, u32 bd_num) +{ + u8 *dest_data; + u8 *tmp_buff; + u32 i; + + dest_data = (u8 *)get_port_info_out; + + /* first BD (24 Bytes) */ + for (i = 0; i < bd_num; i++) { + tmp_buff = (u8 *)&port_desc[i].data[0]; + if (i == BD_NUM_5) { + get_port_info_out->his_link_machine_state = + port_desc[i].data[0]; + get_port_info_out->his_machine_state_length = + port_desc[i].data[1] & 0xFF; + memcpy(get_port_info_out->his_machine_state_data, + tmp_buff + 5, 19); + } else if (i == BD_NUM_6) { + get_port_info_out->cur_link_machine_state = + port_desc[i].data[0]; + get_port_info_out->cur_machine_state_length = + port_desc[i].data[1] & 0xFF; + memcpy(get_port_info_out->cur_machine_state_data, + tmp_buff + 5, 19); + } else { + if (i == BD_NUM_7) + dest_data = + (u8 *)&get_port_info_out->param_info; + + memcpy(dest_data, tmp_buff, HCLGE_CMD_DATA_BYTE_LEN); + if (i != (bd_num - 1)) + dest_data = dest_data + HCLGE_CMD_DATA_BYTE_LEN; + } + } +} int hns3_get_port_info(struct hns3_nic_priv *net_priv, void *buf_in, u16 in_size, void *buf_out, u16 *out_size) { + struct hnae3_handle *handle = hns3_get_handle(net_priv->netdev); + struct hclge_vport *vport = hclge_get_vport(handle); struct hclge_port_info *get_port_info_out; - struct hclge_desc desc = {0}; + struct hclge_dev *hdev = vport->back; struct hclge_desc *port_desc; - struct hnae3_handle *handle; - struct hclge_vport *vport; - struct hclge_dev *hdev; + struct hclge_desc desc = {0}; __le32 *desc_data; - u8 *dest_data; - u8 *tmp_buff; u32 bd_num; int ret; u32 i; @@ -36,9 +71,6 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv, return -ENODEV; get_port_info_out = (struct hclge_port_info *)buf_out; - handle = hns3_get_handle(net_priv->netdev); - vport = hclge_get_vport(handle); - hdev = vport->back; get_port_info_out->gpio_insert = 0; @@ -76,35 +108,7 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv, return ret; } - dest_data = (u8 *)get_port_info_out; - - /* first BD (24 Bytes) */ - for (i = 0; i < bd_num; i++) { - tmp_buff = (u8 *)&port_desc[i].data[0]; - if (i == BD_NUM_5) { - get_port_info_out->his_link_machine_state = - port_desc[i].data[0]; - get_port_info_out->his_machine_state_length = - port_desc[i].data[1] & 0xFF; - memcpy(get_port_info_out->his_machine_state_data, - tmp_buff + 5, 19); - } else if (i == BD_NUM_6) { - get_port_info_out->cur_link_machine_state = - port_desc[i].data[0]; - get_port_info_out->cur_machine_state_length = - port_desc[i].data[1] & 0xFF; - memcpy(get_port_info_out->cur_machine_state_data, - tmp_buff + 5, 19); - } else { - if (i == BD_NUM_7) - dest_data = - (u8 *)&get_port_info_out->param_info; - - memcpy(dest_data, tmp_buff, HCLGE_CMD_DATA_BYTE_LEN); - if (i != (bd_num - 1)) - dest_data = dest_data + HCLGE_CMD_DATA_BYTE_LEN; - } - } + fill_port_info(get_port_info_out, port_desc, bd_num); kfree(port_desc); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_qres.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_qres.c index 677f46b906e05186c9fde9dfe37940d01493dd2b..0c079365d2f12f48f62d7d3ece5607100a40ab47 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_qres.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_qres.c @@ -97,6 +97,42 @@ int hns3_get_qres_tx_value(struct hns3_nic_priv *net_priv, int ring_id, return num; } +void fill_queue_info(struct hns3_nic_priv *net_priv, + struct qres_param *out_info, int ring_id) +{ + /* rx info */ + out_info->qid = ring_id; + out_info->rx_head = hns3_get_qres_rx_value(net_priv, ring_id, + RX_HEAD_TYPE); + out_info->rx_tail = hns3_get_qres_rx_value(net_priv, ring_id, + RX_TAIL_TYPE); + out_info->rx_ebd = hns3_get_qres_rx_value(net_priv, ring_id, + RX_EBD_TYPE); + out_info->rx_fbd = hns3_get_qres_rx_value(net_priv, ring_id, + RX_FBD_TYPE); + out_info->rx_software_head = + hns3_get_qres_rx_value(net_priv, ring_id, + RX_SOFTWARE_HEAD_TYPE); + out_info->rx_software_tail = + hns3_get_qres_rx_value(net_priv, ring_id, + RX_SOFTWARE_TAIL_TYPE); + /* tx info */ + out_info->tx_head = hns3_get_qres_tx_value(net_priv, ring_id, + TX_HEAD_TYPE); + out_info->tx_tail = hns3_get_qres_tx_value(net_priv, ring_id, + TX_TAIL_TYPE); + out_info->tx_ebd = hns3_get_qres_tx_value(net_priv, ring_id, + TX_EBD_TYPE); + out_info->tx_fbd = hns3_get_qres_tx_value(net_priv, ring_id, + TX_FBD_TYPE); + out_info->tx_software_head = + hns3_get_qres_tx_value(net_priv, ring_id, + TX_SOFTWARE_HEAD_TYPE); + out_info->tx_software_tail = + hns3_get_qres_tx_value(net_priv, ring_id, + TX_SOFTWARE_TAIL_TYPE); +} + int hns3_test_qres_cfg(struct hns3_nic_priv *net_priv, void *buf_in, u16 in_size, void *buf_out, u16 *out_size) { @@ -121,36 +157,8 @@ int hns3_test_qres_cfg(struct hns3_nic_priv *net_priv, } if (qres_in_param->mtype == MTYPE_QUEUE_INFO) { - out_info->qid = ring_id; - out_info->rx_head = hns3_get_qres_rx_value(net_priv, ring_id, - RX_HEAD_TYPE); - out_info->rx_tail = hns3_get_qres_rx_value(net_priv, ring_id, - RX_TAIL_TYPE); - out_info->rx_ebd = hns3_get_qres_rx_value(net_priv, ring_id, - RX_EBD_TYPE); - out_info->rx_fbd = hns3_get_qres_rx_value(net_priv, ring_id, - RX_FBD_TYPE); - out_info->rx_software_head = - hns3_get_qres_rx_value(net_priv, ring_id, - RX_SOFTWARE_HEAD_TYPE); - out_info->rx_software_tail = - hns3_get_qres_rx_value(net_priv, ring_id, - RX_SOFTWARE_TAIL_TYPE); - /* tx info */ - out_info->tx_head = hns3_get_qres_tx_value(net_priv, ring_id, - TX_HEAD_TYPE); - out_info->tx_tail = hns3_get_qres_tx_value(net_priv, ring_id, - TX_TAIL_TYPE); - out_info->tx_ebd = hns3_get_qres_tx_value(net_priv, ring_id, - TX_EBD_TYPE); - out_info->tx_fbd = hns3_get_qres_tx_value(net_priv, ring_id, - TX_FBD_TYPE); - out_info->tx_software_head = - hns3_get_qres_tx_value(net_priv, ring_id, - TX_SOFTWARE_HEAD_TYPE); - out_info->tx_software_tail = - hns3_get_qres_tx_value(net_priv, ring_id, - TX_SOFTWARE_TAIL_TYPE); + fill_queue_info(net_priv, out_info, ring_id); + } else if (qres_in_param->mtype == MTYPE_BD_INFO) { if (qres_in_param->queue_type == TYPE_TX) { ring = net_priv->ring_data[ring_id].ring;