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 049fd191bc6bcbe4b2fb18f03699de6a1ac7f469..dab49f0285da86adf2a995737de33b3324d0db1d 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.c @@ -831,6 +831,7 @@ struct drv_module_handle driv_module_cmd_handle[] = { {MAC_LOOP_CFG, hns3_test_mac_loop_cfg}, {DFX_INFO_CMD, hns3_test_get_dfx_info}, {DFX_READ_CMD, hns3_test_read_dfx_info}, + {EVENT_INJECTION_CMD, hns3_test_event_injection}, {SEND_PKT, hns3_test_send_pkt}, {RX_PRIV_BUFF_WL_CFG, hns3_test_rx_priv_buff_wl_cfg}, {RX_COMMON_THRD_CFG, hns3_test_common_thrd_cfg}, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.h b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.h index 699848d6f874278b97a2e7a9d555601db9894dc0..4eb2158cb0bb75df34ec2c903d01591ecdeaabb2 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_nictool.h @@ -39,7 +39,8 @@ enum driver_cmd_type { MAC_LOOP_CFG = 200, DFX_INFO_CMD = 250, - DFX_READ_CMD = 251, + DFX_READ_CMD, + EVENT_INJECTION_CMD, SEND_PKT = 300, RECV_PKT, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.c b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.c index 0e28166d6bbed6ac68c4a96c22eea9b9fbdf861a..a99e84ed33cfc8d4690fb1adcc7ef73c6f9333d8 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.c @@ -111,7 +111,8 @@ int hns3_test_get_dfx_info(struct hns3_nic_priv *net_priv, reg_info.is_read = true; ret = hns3_test_operate_nic_regs(hdev, ®_info); if (ret) { - pr_err("read chip%d's work mode failed!\n", chip_id); + dev_err(&hdev->pdev->dev, + "read chip%d's work mode failed!\n", chip_id); return ret; } out_info->work_mode = reg_info.value; @@ -120,7 +121,7 @@ int hns3_test_get_dfx_info(struct hns3_nic_priv *net_priv, reg_info.is_read = true; ret = hns3_test_operate_nic_regs(hdev, ®_info); if (ret) { - pr_err("read mac's map info failed!\n"); + dev_err(&hdev->pdev->dev, "read mac's map info failed!\n"); return ret; } for (i = 0; i < HNS3_TEST_MAX_MAC_NUMBER; i++) @@ -163,3 +164,36 @@ int hns3_test_read_dfx_info(struct hns3_nic_priv *net_priv, return 0; } + +int hns3_test_event_injection(struct hns3_nic_priv *net_priv, + void *buf_in, u16 in_size, + void *buf_out, u16 *out_size) +{ + struct hns3_test_event_param *in_info; + struct hns3_test_reg_param reg_info; + struct hnae3_handle *handle; + struct hclge_vport *vport; + struct hclge_dev *hdev; + int ret; + + handle = net_priv->ae_handle; + vport = hclge_get_vport(handle); + hdev = vport->back; + + in_info = (struct hns3_test_event_param *)buf_in; + reg_info.addr = in_info->addr; + reg_info.bit_width = 32; + reg_info.is_read = false; + reg_info.value = in_info->value; + dev_info(&hdev->pdev->dev, + "Injection event: %s start.\n", in_info->event_name); + ret = hns3_test_operate_nic_regs(hdev, ®_info); + if (ret) { + dev_err(&hdev->pdev->dev, "Injection event error!\n"); + return ret; + } + dev_info(&hdev->pdev->dev, + "Injection event: %s end.\n", in_info->event_name); + + return ret; +} diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.h b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.h index f9b211e954320c5219eccf7fe565d6d36fbcc049..863c26c475c2586f737acf82084f1696e8d87746 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_cae/hns3_priv_dfx.h @@ -22,6 +22,14 @@ struct hns3_test_dfx_param { u8 func_id; }; +#define HNS3_TEST_EVENT_NAME_LEN 32 + +struct hns3_test_event_param { + u8 event_name[HNS3_TEST_EVENT_NAME_LEN]; + u64 value; + u64 addr; +}; + #define HNS3_READ_INFO_FLAG 0x1 #define HNS3_READ_REGS_FLAG 0x2 @@ -33,5 +41,8 @@ int hns3_test_get_dfx_info(struct hns3_nic_priv *net_priv, int hns3_test_read_dfx_info(struct hns3_nic_priv *net_priv, void *buf_in, u16 in_size, void *buf_out, u16 *out_size); +int hns3_test_event_injection(struct hns3_nic_priv *net_priv, + void *buf_in, u16 in_size, + void *buf_out, u16 *out_size); #endif