提交 22521cf7 编写于 作者: Y youshengzui 提交者: Xie XiuQi

net: hns3: enhance the hns3 kernel mode code quality

driver inclusion
category: cleanup
bugzilla: NA
CVE: NA

This patch deletes the hiarmtooldfx phy command
and cleans the codingstylecheck warning
Signed-off-by: Nyoushengzui <youshengzui@huawei.com>
Reviewed-by: Ndengweiwei <dengweiwei@huawei.com>
Reviewed-by: Nzhongzhaohui <zhongzhaohui@huawei.com>
Reviewed-by: Nchenjunxin <chenjunxin1@huawei.com>
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 0e906fa7
...@@ -70,7 +70,6 @@ HNS3_CAE_OBJS_EXT = hns3_cae/hns3_priv_dfx.o \ ...@@ -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_hilink_param.o \
hns3_cae/hns3_priv_irq.o \ hns3_cae/hns3_priv_irq.o \
hns3_cae/hns3_priv_mac.o \ hns3_cae/hns3_priv_mac.o \
hns3_cae/hns3_priv_phy.o \
hns3_cae/hns3_priv_pkt.o \ hns3_cae/hns3_priv_pkt.o \
hns3_cae/hns3_priv_port.o \ hns3_cae/hns3_priv_port.o \
hns3_cae/hns3_priv_promisc.o \ hns3_cae/hns3_priv_promisc.o \
......
...@@ -505,7 +505,7 @@ static int hclge_phy_need_page_select(struct hclge_dev *hdev, ...@@ -505,7 +505,7 @@ static int hclge_phy_need_page_select(struct hclge_dev *hdev,
return 0; return 0;
} }
static int hclge_check_phy_opt_pare(struct hclge_dev *hdev, static int hclge_check_phy_opt_param(struct hclge_dev *hdev,
struct mii_bus *mdio_bus, struct mii_bus *mdio_bus,
struct phy_device *phydev, struct phy_device *phydev,
enum hclge_phy_op_code opt_type) enum hclge_phy_op_code opt_type)
...@@ -529,6 +529,35 @@ static int hclge_check_phy_opt_pare(struct hclge_dev *hdev, ...@@ -529,6 +529,35 @@ static int hclge_check_phy_opt_pare(struct hclge_dev *hdev,
return 0; 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, static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data,
enum hclge_phy_op_code opt_type) enum hclge_phy_op_code opt_type)
{ {
...@@ -539,10 +568,11 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data, ...@@ -539,10 +568,11 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data,
struct mii_bus *mdio_bus = mac->mdio_bus; struct mii_bus *mdio_bus = mac->mdio_bus;
u32 phyid = mac->phy_addr; u32 phyid = mac->phy_addr;
int need_page_select; int need_page_select;
int op_ret, ret;
u16 cur_page; 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) if (ret < 0)
return ret; return ret;
...@@ -576,25 +606,7 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data, ...@@ -576,25 +606,7 @@ static int hclge_phy_reg_opt(struct hnae3_handle *handle, void *data,
} }
/* operate register(read or write) */ /* operate register(read or write) */
if (opt_type == PHY_OP_READ) { op_ret = hclge_mdio_bus_opt(para, hdev, mdio_bus, phyid, opt_type);
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);
}
}
/* come back to the page recorded in the first step. */ /* come back to the page recorded in the first step. */
if (need_page_select) { if (need_page_select) {
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include "hns3_priv_mac.h" #include "hns3_priv_mac.h"
#include "hns3_priv_dfx.h" #include "hns3_priv_dfx.h"
#include "hns3_priv_vlan.h" #include "hns3_priv_vlan.h"
#include "hns3_priv_phy.h"
#include "hns3_priv_qos.h" #include "hns3_priv_qos.h"
#include "hns3_priv_qinfo.h" #include "hns3_priv_qinfo.h"
#include "hns3_priv_promisc.h" #include "hns3_priv_promisc.h"
...@@ -61,7 +60,7 @@ ...@@ -61,7 +60,7 @@
#define HCLGE_OPC_DCQCN_TEMPLATE_CFG 0x7014 #define HCLGE_OPC_DCQCN_TEMPLATE_CFG 0x7014
#define HCLGE_OPC_DCQCN_GET_MSG_CNT 0x7017 #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_OUT_SIZE (1024U * 2048U)
#define MAX_MSG_IN_SIZE (1024U * 2048U) #define MAX_MSG_IN_SIZE (1024U * 2048U)
...@@ -845,7 +844,6 @@ struct drv_module_handle driv_module_cmd_handle[] = { ...@@ -845,7 +844,6 @@ struct drv_module_handle driv_module_cmd_handle[] = {
{TIMEOUT_CFG, hns3_nic_timeout_cfg}, {TIMEOUT_CFG, hns3_nic_timeout_cfg},
{PROMISC_MODE_CFG, hns3_promisc_mode_cfg}, {PROMISC_MODE_CFG, hns3_promisc_mode_cfg},
{QINFO_CFG, hns3_test_qinfo_cfg}, {QINFO_CFG, hns3_test_qinfo_cfg},
{PHY_REGISTER_CFG, hns3_test_phy_register_cfg},
{MACTABLE_CFG, hns3_test_opt_mactbl}, {MACTABLE_CFG, hns3_test_opt_mactbl},
{CLEAN_STATS, hns3_test_clean_stats}, {CLEAN_STATS, hns3_test_clean_stats},
{FD_CFG, hns3_test_fd_cfg}, {FD_CFG, hns3_test_fd_cfg},
......
// SPDX-License-Identifier: GPL-2.0+
// Copyright (c) 2016-2017 Hisilicon Limited.
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/phy_fixed.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#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;
}
/* 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
...@@ -205,19 +205,45 @@ int __get_tid(int queue_id, int is_send) ...@@ -205,19 +205,45 @@ int __get_tid(int queue_id, int is_send)
return (queue_id * 2 + 1) % MAX_KTHREAD_NUM; 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, static struct sk_buff *__hns_assemble_skb(struct net_device *ndev,
const void *data, int length, const void *data, int length,
int queue_id, int mss) int queue_id, int mss)
{ {
const struct ethhdr *ethhead = (const struct ethhdr *)data;
const char *head_data = (const char *)data;
struct sk_buff *skb; struct sk_buff *skb;
int proc_length;
struct page *p; struct page *p;
void *buff;
int bnum = 0; int bnum = 0;
int protocol; void *buff;
int proc_length;
const char *head_data = (const char *)data;
const struct ethhdr *ethhead = (const struct ethhdr *)data;
struct ipv6hdr *ip6_hdr;
/* allocate test skb */ /* allocate test skb */
skb = alloc_skb(256, GFP_KERNEL); skb = alloc_skb(256, GFP_KERNEL);
...@@ -263,30 +289,7 @@ static struct sk_buff *__hns_assemble_skb(struct net_device *ndev, ...@@ -263,30 +289,7 @@ static struct sk_buff *__hns_assemble_skb(struct net_device *ndev,
DEFAULT_PAGE_SIZE); DEFAULT_PAGE_SIZE);
} }
skb->network_header = ETH_HLEN; fill_skb_head(skb, mss);
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;
return skb; return skb;
} }
......
...@@ -16,18 +16,53 @@ ...@@ -16,18 +16,53 @@
#define BD_NUM_6 6 #define BD_NUM_6 6
#define BD_NUM_7 7 #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, int hns3_get_port_info(struct hns3_nic_priv *net_priv,
void *buf_in, u16 in_size, void *buf_out, u16 *out_size) 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_port_info *get_port_info_out;
struct hclge_desc desc = {0}; struct hclge_dev *hdev = vport->back;
struct hclge_desc *port_desc; struct hclge_desc *port_desc;
struct hnae3_handle *handle; struct hclge_desc desc = {0};
struct hclge_vport *vport;
struct hclge_dev *hdev;
__le32 *desc_data; __le32 *desc_data;
u8 *dest_data;
u8 *tmp_buff;
u32 bd_num; u32 bd_num;
int ret; int ret;
u32 i; u32 i;
...@@ -36,9 +71,6 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv, ...@@ -36,9 +71,6 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv,
return -ENODEV; return -ENODEV;
get_port_info_out = (struct hclge_port_info *)buf_out; 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; get_port_info_out->gpio_insert = 0;
...@@ -76,35 +108,7 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv, ...@@ -76,35 +108,7 @@ int hns3_get_port_info(struct hns3_nic_priv *net_priv,
return ret; return ret;
} }
dest_data = (u8 *)get_port_info_out; fill_port_info(get_port_info_out, port_desc, bd_num);
/* 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;
}
}
kfree(port_desc); kfree(port_desc);
......
...@@ -97,30 +97,10 @@ int hns3_get_qres_tx_value(struct hns3_nic_priv *net_priv, int ring_id, ...@@ -97,30 +97,10 @@ int hns3_get_qres_tx_value(struct hns3_nic_priv *net_priv, int ring_id,
return num; return num;
} }
int hns3_test_qres_cfg(struct hns3_nic_priv *net_priv, void fill_queue_info(struct hns3_nic_priv *net_priv,
void *buf_in, u16 in_size, void *buf_out, u16 *out_size) struct qres_param *out_info, int ring_id)
{ {
struct qres_bufin_param *qres_in_param; /* rx info */
struct hns3_enet_ring *ring;
struct qres_param *out_info;
int bd_index;
int tqps_num;
int ring_id;
tqps_num = net_priv->ae_handle->kinfo.num_tqps;
out_info = (struct qres_param *)buf_out;
qres_in_param = (struct qres_bufin_param *)buf_in;
ring_id = qres_in_param->queue_id;
bd_index = qres_in_param->BD_id;
out_info->num_tqps = tqps_num;
if (ring_id >= tqps_num || ring_id < 0) {
pr_err("please input valid qid\n");
return -1;
}
if (qres_in_param->mtype == MTYPE_QUEUE_INFO) {
out_info->qid = ring_id; out_info->qid = ring_id;
out_info->rx_head = hns3_get_qres_rx_value(net_priv, ring_id, out_info->rx_head = hns3_get_qres_rx_value(net_priv, ring_id,
RX_HEAD_TYPE); RX_HEAD_TYPE);
...@@ -151,6 +131,34 @@ int hns3_test_qres_cfg(struct hns3_nic_priv *net_priv, ...@@ -151,6 +131,34 @@ int hns3_test_qres_cfg(struct hns3_nic_priv *net_priv,
out_info->tx_software_tail = out_info->tx_software_tail =
hns3_get_qres_tx_value(net_priv, ring_id, hns3_get_qres_tx_value(net_priv, ring_id,
TX_SOFTWARE_TAIL_TYPE); 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)
{
struct qres_bufin_param *qres_in_param;
struct hns3_enet_ring *ring;
struct qres_param *out_info;
int bd_index;
int tqps_num;
int ring_id;
tqps_num = net_priv->ae_handle->kinfo.num_tqps;
out_info = (struct qres_param *)buf_out;
qres_in_param = (struct qres_bufin_param *)buf_in;
ring_id = qres_in_param->queue_id;
bd_index = qres_in_param->BD_id;
out_info->num_tqps = tqps_num;
if (ring_id >= tqps_num || ring_id < 0) {
pr_err("please input valid qid\n");
return -1;
}
if (qres_in_param->mtype == MTYPE_QUEUE_INFO) {
fill_queue_info(net_priv, out_info, ring_id);
} else if (qres_in_param->mtype == MTYPE_BD_INFO) { } else if (qres_in_param->mtype == MTYPE_BD_INFO) {
if (qres_in_param->queue_type == TYPE_TX) { if (qres_in_param->queue_type == TYPE_TX) {
ring = net_priv->ring_data[ring_id].ring; ring = net_priv->ring_data[ring_id].ring;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册