buf_in, in_size, \
buf_out, out_size, 0)
-
/**
* hinic_init_function_table - Initialize function table.
*
vlan_info.func_id = func_id;
vlan_info.vlan_id = vlan_id;
- err = l2nic_msg_to_mgmt_sync(hwdev, cmd, &vlan_info,
- sizeof(vlan_info), &vlan_info,
- &out_size);
+ err = l2nic_msg_to_mgmt_sync(hwdev, cmd, &vlan_info, sizeof(vlan_info),
+ &vlan_info, &out_size);
if (err || !out_size || vlan_info.mgmt_msg_head.status) {
PMD_DRV_LOG(ERR,
"Failed to %s vlan, err: %d, status: 0x%x, out size: 0x%x",
vlan_cfg.vlan_rx_offload = en;
err = l2nic_msg_to_mgmt_sync(hwdev, HINIC_PORT_CMD_SET_RX_VLAN_OFFLOAD,
- &vlan_cfg, sizeof(vlan_cfg),
- &vlan_cfg, &out_size);
+ &vlan_cfg, sizeof(vlan_cfg),
+ &vlan_cfg, &out_size);
if (err || !out_size || vlan_cfg.mgmt_msg_head.status) {
PMD_DRV_LOG(ERR,
"Failed to set rx vlan offload, err: %d, status: 0x%x, out size: 0x%x",
PMD_DRV_LOG(ERR,
"Failed to get port info, err: %d, status: 0x%x, out size: 0x%x",
err, port_msg.mgmt_msg_head.status, out_size);
- return err;
+ return -EIO;
}
port_info->autoneg_cap = port_msg.autoneg_cap;
PMD_DRV_LOG(ERR,
"Failed to set vhd mode, err: %d, status: 0x%x, out size: 0x%x",
err, vhd_mode_cfg.mgmt_msg_head.status, out_size);
-
return -EIO;
}
rate.xbs = ANTI_ATTACK_DEFAULT_XBS;
err = l2nic_msg_to_mgmt_sync(hwdev, HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE,
- &rate, sizeof(rate), &rate,
- &out_size);
+ &rate, sizeof(rate), &rate, &out_size);
if (err || !out_size || rate.mgmt_msg_head.status) {
PMD_DRV_LOG(ERR, "Can't %s port Anti-Attack rate limit, err: %d, status: 0x%x, out size: 0x%x",
(enable ? "enable" : "disable"), err,
sizeof(fast_recycled_mode),
&fast_recycled_mode, &out_size, 0);
if (err || fast_recycled_mode.mgmt_msg_head.status || !out_size) {
- PMD_DRV_LOG(ERR, "Failed to set recycle mode, ret: %d",
- fast_recycled_mode.mgmt_msg_head.status);
- return -EFAULT;
+ PMD_DRV_LOG(ERR, "Failed to set recycle mode, err: %d, status: 0x%x, out size: 0x%x",
+ err, fast_recycled_mode.mgmt_msg_head.status, out_size);
+ return -EIO;
}
return 0;
err = hinic_msg_to_mgmt_sync(hwdev, HINIC_MOD_L2NIC,
HINIC_PORT_CMD_GET_VF_COS, &vf_cos,
- sizeof(vf_cos), &vf_cos,
- &out_size, 0);
+ sizeof(vf_cos), &vf_cos, &out_size, 0);
if (err || !out_size || vf_cos.mgmt_msg_head.status) {
PMD_DRV_LOG(ERR, "Get VF default cos failed, err: %d, status: 0x%x, out size: 0x%x",
err, vf_cos.mgmt_msg_head.status, out_size);
- return -EFAULT;
+ return -EIO;
}
*cos_id = vf_cos.state.default_cos;
return err;
}
+int hinic_set_fdir_tcam_rule_filter(void *hwdev, bool enable)
+{
+ struct hinic_port_tcam_info port_tcam_cmd;
+ u16 out_size = sizeof(port_tcam_cmd);
+ int err;
+
+ if (!hwdev)
+ return -EINVAL;
+
+ memset(&port_tcam_cmd, 0, sizeof(port_tcam_cmd));
+ port_tcam_cmd.mgmt_msg_head.resp_aeq_num = HINIC_AEQ1;
+ port_tcam_cmd.func_id = hinic_global_func_id(hwdev);
+ port_tcam_cmd.tcam_enable = (u8)enable;
+
+ err = l2nic_msg_to_mgmt_sync(hwdev, HINIC_PORT_CMD_UP_TC_ENABLE,
+ &port_tcam_cmd, sizeof(port_tcam_cmd),
+ &port_tcam_cmd, &out_size);
+ if ((port_tcam_cmd.mgmt_msg_head.status != HINIC_MGMT_CMD_UNSUPPORTED &&
+ port_tcam_cmd.mgmt_msg_head.status) || err || !out_size) {
+ if (err == HINIC_MBOX_VF_CMD_ERROR &&
+ HINIC_IS_VF((struct hinic_hwdev *)hwdev)) {
+ err = HINIC_MGMT_CMD_UNSUPPORTED;
+ PMD_DRV_LOG(WARNING, "VF doesn't support setting fdir tcam filter");
+ return err;
+ }
+ PMD_DRV_LOG(ERR, "Set fdir tcam filter failed, err: %d, "
+ "status: 0x%x, out size: 0x%x, enable: 0x%x",
+ err, port_tcam_cmd.mgmt_msg_head.status, out_size,
+ enable);
+ return -EFAULT;
+ }
+
+ if (port_tcam_cmd.mgmt_msg_head.status == HINIC_MGMT_CMD_UNSUPPORTED) {
+ err = HINIC_MGMT_CMD_UNSUPPORTED;
+ PMD_DRV_LOG(WARNING, "Fw doesn't support setting fdir tcam filter");
+ }
+
+ return err;
+}
+
+