Unverified Commit a696cb69 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!616 net: hns3: supports customization requirements

Merge Pull Request from: @svishen 
 
The PR incorporates the customization code framework to support hns3 customization requirements. The following functions are supported:
1.add support PF provides customized interfaces to detect port faults
2.add support detect port wire type
3.add support set mac state
4.add support set led
5.add extend interface support for read and write phy register

issue:
https://gitee.com/openeuler/kernel/issues/I6YE0O 
 
Link:https://gitee.com/openeuler/kernel/pulls/616

 

Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 143d2271 b4031473
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -44,6 +44,32 @@ enum hnae3_ext_opcode {
	HNAE3_EXT_OPC_GET_LANE_STATUS,
	HNAE3_EXT_OPC_DISABLE_CLOCK,
	HNAE3_EXT_OPC_SET_PFC_TIME,
	HNAE3_EXT_OPC_GET_HILINK_REF_LOS,
	HNAE3_EXT_OPC_GET_PORT_FAULT_STATUS,
	HNAE3_EXT_OPC_GET_PORT_TYPE,
	HNAE3_EXT_OPC_SET_MAC_STATE,
	HNAE3_EXT_OPC_SET_LED,
	HNAE3_EXT_OPC_GET_LED_SIGNAL,
	HNAE3_EXT_OPC_GET_PHY_REG,
	HNAE3_EXT_OPC_SET_PHY_REG,
};

struct hnae3_led_state_para {
	u32 type;
	u32 status;
};

struct hnae3_phy_para {
	u32 page_select_addr;
	u32 reg_addr;
	u16 page;
	u16 data;
};

struct hnae3_lamp_signal {
	u8 error;
	u8 locate;
	u8 activity;
};

struct hnae3_pfc_storm_para {
@@ -54,6 +80,19 @@ struct hnae3_pfc_storm_para {
	u32 recovery_period_ms;
};

enum hnae3_port_fault_type {
	HNAE3_FAULT_TYPE_CDR_FLASH,
	HNAE3_FAULT_TYPE_9545_ERR,
	HNAE3_FAULT_TYPE_CDR_CORE,
	HNAE3_FAULT_TYPE_HILINK_REF_LOS,
	HNAE3_FAULT_TYPE_INVALID
};

struct hnae3_port_fault {
	u32 fault_type;
	u32 fault_status;
};

struct hnae3_notify_pkt_param {
	u32 ipg;     /* inter-packet gap of sending, the unit is one cycle of clock */
	u16 num;     /* packet number of sending */
+91 −0
Original line number Diff line number Diff line
@@ -439,3 +439,94 @@ int nic_set_pfc_time_cfg(struct net_device *ndev, u16 time)
				  &time, sizeof(time));
}
EXPORT_SYMBOL(nic_set_pfc_time_cfg);

int nic_get_port_fault_status(struct net_device *ndev, u32 fault_type, u32 *status)
{
	int opcode = HNAE3_EXT_OPC_GET_PORT_FAULT_STATUS;
	struct hnae3_port_fault fault_para;
	int ret;

	if (!status)
		return -EINVAL;

	if (fault_type == HNAE3_FAULT_TYPE_HILINK_REF_LOS)
		opcode = HNAE3_EXT_OPC_GET_HILINK_REF_LOS;

	fault_para.fault_type = fault_type;
	ret = nic_invoke_pri_ops(ndev, opcode, &fault_para, sizeof(fault_para));
	if (ret)
		return ret;

	*status = fault_para.fault_status;
	return 0;
}
EXPORT_SYMBOL(nic_get_port_fault_status);

int nic_get_port_wire_type(struct net_device *ndev, u32 *wire_type)
{
	return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_GET_PORT_TYPE,
				  wire_type, sizeof(*wire_type));
}
EXPORT_SYMBOL(nic_get_port_wire_type);

int nic_set_mac_state(struct net_device *ndev, int enable)
{
	return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_SET_MAC_STATE,
				  &enable, sizeof(enable));
}
EXPORT_SYMBOL(nic_set_mac_state);

int nic_set_led(struct net_device *ndev, int type, int status)
{
	struct hnae3_led_state_para para;

	para.status = status;
	para.type = type;

	return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_SET_LED,
				  &para, sizeof(para));
}
EXPORT_SYMBOL(nic_set_led);

int nic_get_led_signal(struct net_device *ndev, struct hnae3_lamp_signal *signal)
{
	return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_GET_LED_SIGNAL,
				  signal, sizeof(*signal));
}
EXPORT_SYMBOL(nic_get_led_signal);

int nic_get_phy_reg(struct net_device *ndev, u32 page_select_addr,
		    u16 page, u32 reg_addr, u16 *data)
{
	struct hnae3_phy_para para;
	int ret;

	if (!data)
		return -EINVAL;

	para.page_select_addr = page_select_addr;
	para.page = page;
	para.reg_addr = reg_addr;
	ret = nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_GET_PHY_REG,
				 &para, sizeof(para));
	if (ret)
		return ret;

	*data = para.data;
	return 0;
}
EXPORT_SYMBOL(nic_get_phy_reg);

int nic_set_phy_reg(struct net_device *ndev, u32 page_select_addr,
		    u16 page, u32 reg_addr, u16 data)
{
	struct hnae3_phy_para para;

	para.page_select_addr = page_select_addr;
	para.page = page;
	para.reg_addr = reg_addr;
	para.data = data;
	return nic_invoke_pri_ops(ndev, HNAE3_EXT_OPC_SET_PHY_REG,
				  &para, sizeof(para));
}
EXPORT_SYMBOL(nic_set_phy_reg);
+21 −0
Original line number Diff line number Diff line
@@ -14,6 +14,18 @@
#define HNS3_PFC_STORM_PARA_PERIOD_MIN 5
#define HNS3_PFC_STORM_PARA_PERIOD_MAX 2000

#define nic_set_8211_phy_reg nic_set_phy_reg
#define nic_get_8211_phy_reg nic_get_phy_reg
#define nic_set_8521_phy_reg(ndev, page_region, page, reg_addr, data) \
	nic_set_phy_reg(ndev, 0, page_region, page, reg_addr, data)
#define nic_get_8521_phy_reg(ndev, page_region, page, reg_addr, data) \
	nic_get_phy_reg(ndev, 0, page_region, page, reg_addr, data)

#define nic_get_cdr_flash_status(ndev, status)	\
	nic_get_port_fault_status(ndev, HNAE3_FAULT_TYPE_CDR_FLASH, status)
#define nic_get_hilink_ref_los(ndev, status)	\
	nic_get_port_fault_status(ndev, HNAE3_FAULT_TYPE_HILINK_REF_LOS, status)

int nic_netdev_match_check(struct net_device *netdev);
void nic_chip_recover_handler(struct net_device *ndev,
			      enum hnae3_event_type_custom event_t);
@@ -42,4 +54,13 @@ int nic_disable_net_lane(struct net_device *ndev);
int nic_get_net_lane_status(struct net_device *ndev, u32 *status);
int nic_disable_clock(struct net_device *ndev);
int nic_set_pfc_time_cfg(struct net_device *ndev, u16 time);
int nic_get_port_fault_status(struct net_device *ndev, u32 fault_type, u32 *status);
int nic_get_port_wire_type(struct net_device *ndev, u32 *wire_type);
int nic_set_mac_state(struct net_device *ndev, int enable);
int nic_set_led(struct net_device *ndev, int type, int status);
int nic_get_led_signal(struct net_device *ndev, struct hnae3_lamp_signal *signal);
int nic_get_phy_reg(struct net_device *ndev, u32 page_select_addr,
		    u16 page, u32 reg_addr, u16 *data);
int nic_set_phy_reg(struct net_device *ndev, u32 page_select_addr,
		    u16 page, u32 reg_addr, u16 data);
#endif
+13 −1
Original line number Diff line number Diff line
@@ -355,6 +355,12 @@ struct hclge_sfp_info_cmd {
	u8 rsv[6];
};

struct hclge_port_fault_cmd {
	__le32 fault_status;
	__le32 port_type;
	u8 rsv[16];
};

#define HCLGE_MAC_CFG_FEC_AUTO_EN_B	0
#define HCLGE_MAC_CFG_FEC_MODE_S	1
#define HCLGE_MAC_CFG_FEC_MODE_M	GENMASK(3, 1)
@@ -879,11 +885,17 @@ struct hclge_phy_link_ksetting_1_cmd {
	u8 rsv[22];
};

#define HCLGE_PHY_RW_DIRECTLY	0
#define HCLGE_PHY_RW_WITH_PAGE	1
struct hclge_phy_reg_cmd {
	__le16 reg_addr;
	u8 rsv0[2];
	__le16 reg_val;
	u8 rsv1[18];
	u8 rsv1[2];
	u8 type;
	u8 dev_addr;
	__le16 page;
	u8 rsv2[12];
};

enum HCLGE_WOL_MODE {
+709 −0

File changed.

Preview size limit exceeded, changes collapsed.

Loading