提交 6e4ce9f4 编写于 作者: T Tian Jiang 提交者: Jiantao Xiao

net: hns3: add supports configure optical module enable

driver inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I6W94W
CVE: NA

----------------------------------------------------------------------

The patch provides an interface for enabling or disabling
the optical module.
Signed-off-by: NTian Jiang <jiangtian6@h-partners.com>
Signed-off-by: Nshaojijie <shaojijie@huawei.com>
Signed-off-by: NJiantao Xiao <xiaojiantao1@h-partners.com>
上级 de2b192e
......@@ -39,6 +39,7 @@ enum hnae3_ext_opcode {
HNAE3_EXT_OPC_GET_PORT_EXT_NUM_INFO,
HNAE3_EXT_OPC_GET_PORT_NUM,
HNAE3_EXT_OPC_GET_PRESENT,
HNAE3_EXT_OPC_SET_SFP_STATE,
};
struct hnae3_pfc_storm_para {
......
......@@ -403,3 +403,12 @@ int nic_get_sfp_present(struct net_device *ndev, int *present)
present, sizeof(*present));
}
EXPORT_SYMBOL(nic_get_sfp_present);
int nic_set_sfp_state(struct net_device *ndev, bool en)
{
u32 state = en ? 1 : 0;
return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_SET_SFP_STATE,
&state, sizeof(state));
}
EXPORT_SYMBOL(nic_set_sfp_state);
......@@ -37,4 +37,5 @@ int nic_get_port_num_of_die(struct net_device *ndev, u32 *port_num);
int nic_get_port_num_per_chip(struct net_device *ndev, u32 *port_num);
int nic_set_tx_timeout(struct net_device *ndev, int tx_timeout);
int nic_get_sfp_present(struct net_device *ndev, int *present);
int nic_set_sfp_state(struct net_device *ndev, bool en);
#endif
......@@ -461,6 +461,30 @@ static int hclge_get_sfp_present(struct hclge_dev *hdev, void *data,
return 0;
}
static int hclge_set_sfp_state(struct hclge_dev *hdev, void *data,
size_t length)
{
struct hclge_sfp_enable_cmd *req;
struct hclge_desc desc;
u32 state;
int ret;
if (length != sizeof(u32))
return -EINVAL;
state = *(u32 *)data;
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_SFP_SET_STATUS, false);
req = (struct hclge_sfp_enable_cmd *)desc.data;
req->sfp_enable = cpu_to_le32(state);
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
if (ret)
dev_err(&hdev->pdev->dev,
"failed to set sfp state, ret = %d\n", ret);
return ret;
}
static void hclge_ext_resotre_config(struct hclge_dev *hdev)
{
if (hdev->reset_type != HNAE3_IMP_RESET &&
......@@ -623,6 +647,7 @@ static const hclge_priv_ops_fn hclge_ext_func_arr[] = {
[HNAE3_EXT_OPC_GET_PORT_EXT_NUM_INFO] = hclge_get_extend_port_num_info,
[HNAE3_EXT_OPC_GET_PORT_NUM] = hclge_get_port_num,
[HNAE3_EXT_OPC_GET_PRESENT] = hclge_get_sfp_present,
[HNAE3_EXT_OPC_SET_SFP_STATE] = hclge_set_sfp_state,
};
int hclge_ext_ops_handle(struct hnae3_handle *handle, int opcode,
......
......@@ -78,6 +78,11 @@ struct hclge_sfp_present_cmd {
__le32 rsv[5];
};
struct hclge_sfp_enable_cmd {
__le32 sfp_enable;
__le32 rsv[5];
};
enum hclge_ext_opcode_type {
HCLGE_OPC_CONFIG_SWITCH_PARAM = 0x1033,
HCLGE_OPC_CONFIG_VLAN_FILTER = 0x1100,
......@@ -88,6 +93,7 @@ enum hclge_ext_opcode_type {
HCLGE_OPC_GET_PORT_NUM = 0x7006,
HCLGE_OPC_CFG_PAUSE_STORM_PARA = 0x7019,
HCLGE_OPC_SFP_GET_PRESENT = 0x7101,
HCLGE_OPC_SFP_SET_STATUS = 0x7102,
};
struct hclge_reset_fail_type_map {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册