Lines Matching refs:hwdev
29 static int hinic_set_mac(struct hinic_hwdev *hwdev, const u8 *mac_addr, in hinic_set_mac() argument
40 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_SET_MAC, &mac_info, in hinic_set_mac()
44 …dev_err(&hwdev->func_to_io.hwif->pdev->dev, "Failed to set MAC, err: %d, status: 0x%x, out size: 0… in hinic_set_mac()
52 static void hinic_notify_vf_link_status(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_notify_vf_link_status() argument
55 struct vf_data_storage *vf_infos = hwdev->func_to_io.vf_infos; in hinic_notify_vf_link_status()
62 link.func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_notify_vf_link_status()
63 err = hinic_mbox_to_vf(hwdev, HINIC_MOD_L2NIC, in hinic_notify_vf_link_status()
68 dev_err(&hwdev->hwif->pdev->dev, in hinic_notify_vf_link_status()
76 void hinic_notify_all_vfs_link_changed(struct hinic_hwdev *hwdev, in hinic_notify_all_vfs_link_changed() argument
79 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_notify_all_vfs_link_changed()
85 hinic_notify_vf_link_status(hwdev, i, link_status); in hinic_notify_all_vfs_link_changed()
89 static u16 hinic_vf_info_vlanprio(struct hinic_hwdev *hwdev, int vf_id) in hinic_vf_info_vlanprio() argument
91 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_vf_info_vlanprio()
102 static int hinic_set_vf_vlan(struct hinic_hwdev *hwdev, bool add, u16 vid, in hinic_set_vf_vlan() argument
114 vf_vlan.func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_set_vf_vlan()
123 err = hinic_port_msg_cmd(hwdev, cmd, &vf_vlan, in hinic_set_vf_vlan()
126 …dev_err(&hwdev->hwif->pdev->dev, "Failed to set VF %d vlan, err: %d, status: 0x%x, out size: 0x%x\… in hinic_set_vf_vlan()
134 static int hinic_set_vf_tx_rate_max_min(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_tx_rate_max_min() argument
137 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_set_vf_tx_rate_max_min()
142 rate_cfg.func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_set_vf_tx_rate_max_min()
145 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_SET_VF_MAX_MIN_RATE, in hinic_set_vf_tx_rate_max_min()
150 …dev_err(&hwdev->hwif->pdev->dev, "Failed to set VF(%d) max rate(%d), min rate(%d), err: %d, status… in hinic_set_vf_tx_rate_max_min()
164 static int hinic_set_vf_rate_limit(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_rate_limit() argument
167 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_set_vf_rate_limit()
172 rate_cfg.func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_set_vf_rate_limit()
174 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_SET_VF_RATE, in hinic_set_vf_rate_limit()
178 …dev_err(&hwdev->hwif->pdev->dev, "Failed to set VF(%d) rate(%d), err: %d, status: 0x%x, out size: … in hinic_set_vf_rate_limit()
193 static int hinic_set_vf_tx_rate(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_tx_rate() argument
198 err = hinic_set_vf_tx_rate_max_min(hwdev, vf_id, max_rate, min_rate); in hinic_set_vf_tx_rate()
203 dev_err(&hwdev->hwif->pdev->dev, "Current firmware doesn't support to set min tx rate\n"); in hinic_set_vf_tx_rate()
207 …dev_info(&hwdev->hwif->pdev->dev, "Current firmware doesn't support to set min tx rate, force min_… in hinic_set_vf_tx_rate()
209 return hinic_set_vf_rate_limit(hwdev, vf_id, max_rate); in hinic_set_vf_tx_rate()
212 static int hinic_init_vf_config(struct hinic_hwdev *hwdev, u16 vf_id) in hinic_init_vf_config() argument
218 vf_info = hwdev->func_to_io.vf_infos + HW_VF_ID_TO_OS(vf_id); in hinic_init_vf_config()
220 func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_init_vf_config()
224 err = hinic_set_mac(hwdev, vf_info->vf_mac_addr, vlan_id, in hinic_init_vf_config()
227 dev_err(&hwdev->func_to_io.hwif->pdev->dev, "Failed to set VF %d MAC\n", in hinic_init_vf_config()
233 if (hinic_vf_info_vlanprio(hwdev, vf_id)) { in hinic_init_vf_config()
234 err = hinic_set_vf_vlan(hwdev, true, vf_info->pf_vlan, in hinic_init_vf_config()
237 dev_err(&hwdev->hwif->pdev->dev, "Failed to add VF %d VLAN_QOS\n", in hinic_init_vf_config()
244 err = hinic_set_vf_tx_rate(hwdev, vf_id, vf_info->max_rate, in hinic_init_vf_config()
247 dev_err(&hwdev->hwif->pdev->dev, "Failed to set VF %d max rate: %d, min rate: %d\n", in hinic_init_vf_config()
257 static int hinic_register_vf_msg_handler(void *hwdev, u16 vf_id, in hinic_register_vf_msg_handler() argument
262 struct hinic_hwdev *hw_dev = hwdev; in hinic_register_vf_msg_handler()
286 static int hinic_unregister_vf_msg_handler(void *hwdev, u16 vf_id, in hinic_unregister_vf_msg_handler() argument
290 struct hinic_hwdev *hw_dev = hwdev; in hinic_unregister_vf_msg_handler()
303 static int hinic_change_vf_mtu_msg_handler(void *hwdev, u16 vf_id, in hinic_change_vf_mtu_msg_handler() argument
307 struct hinic_hwdev *hw_dev = hwdev; in hinic_change_vf_mtu_msg_handler()
310 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_CHANGE_MTU, buf_in, in hinic_change_vf_mtu_msg_handler()
321 static int hinic_get_vf_mac_msg_handler(void *hwdev, u16 vf_id, in hinic_get_vf_mac_msg_handler() argument
326 struct hinic_hwdev *dev = hwdev; in hinic_get_vf_mac_msg_handler()
340 static int hinic_set_vf_mac_msg_handler(void *hwdev, u16 vf_id, in hinic_set_vf_mac_msg_handler() argument
346 struct hinic_hwdev *hw_dev = hwdev; in hinic_set_vf_mac_msg_handler()
374 static int hinic_del_vf_mac_msg_handler(void *hwdev, u16 vf_id, in hinic_del_vf_mac_msg_handler() argument
380 struct hinic_hwdev *hw_dev = hwdev; in hinic_del_vf_mac_msg_handler()
406 static int hinic_get_vf_link_status_msg_handler(void *hwdev, u16 vf_id, in hinic_get_vf_link_status_msg_handler() argument
411 struct hinic_hwdev *hw_dev = hwdev; in hinic_get_vf_link_status_msg_handler()
433 static bool check_func_table(struct hinic_hwdev *hwdev, u16 func_idx, in check_func_table() argument
438 if (!hinic_mbox_check_func_id_8B(hwdev, func_idx, buf_in, in_size) || in check_func_table()
517 static int hinic_update_mac(struct hinic_hwdev *hwdev, u8 *old_mac, in hinic_update_mac() argument
524 if (!hwdev || !old_mac || !new_mac) in hinic_update_mac()
528 dev_err(&hwdev->hwif->pdev->dev, "Invalid VLAN number: %d\n", in hinic_update_mac()
538 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_UPDATE_MAC, &mac_info, in hinic_update_mac()
543 dev_err(&hwdev->hwif->pdev->dev, in hinic_update_mac()
550 dev_warn(&hwdev->hwif->pdev->dev, "MAC is repeated. Ignore update operation\n"); in hinic_update_mac()
555 static void hinic_get_vf_config(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_get_vf_config() argument
560 vfinfo = hwdev->func_to_io.vf_infos + HW_VF_ID_TO_OS(vf_id); in hinic_get_vf_config()
589 hinic_get_vf_config(sriov_info->hwdev, OS_VF_ID_TO_HW(vf), ivi); in hinic_ndo_get_vf_config()
594 static int hinic_set_vf_mac(struct hinic_hwdev *hwdev, int vf, in hinic_set_vf_mac() argument
597 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_set_vf_mac()
611 func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf; in hinic_set_vf_mac()
612 err = hinic_update_mac(hwdev, vf_info->vf_mac_addr, in hinic_set_vf_mac()
634 err = hinic_set_vf_mac(sriov_info->hwdev, OS_VF_ID_TO_HW(vf), mac); in hinic_ndo_set_vf_mac()
644 static int hinic_add_vf_vlan(struct hinic_hwdev *hwdev, int vf_id, in hinic_add_vf_vlan() argument
647 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_add_vf_vlan()
650 err = hinic_set_vf_vlan(hwdev, true, vlan, qos, vf_id); in hinic_add_vf_vlan()
657 dev_info(&hwdev->hwif->pdev->dev, "Setting VLAN %d, QOS 0x%x on VF %d\n", in hinic_add_vf_vlan()
662 static int hinic_kill_vf_vlan(struct hinic_hwdev *hwdev, int vf_id) in hinic_kill_vf_vlan() argument
664 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_kill_vf_vlan()
667 err = hinic_set_vf_vlan(hwdev, false, in hinic_kill_vf_vlan()
674 dev_info(&hwdev->hwif->pdev->dev, "Remove VLAN %d on VF %d\n", in hinic_kill_vf_vlan()
694 vf_info = nic_dev->hwdev->func_to_io.vf_infos + HW_VF_ID_TO_OS(vf_id); in hinic_update_mac_vlan()
704 dev_err(&nic_dev->hwdev->hwif->pdev->dev, "Failed to delete VF %d MAC %pM vlan %d\n", in hinic_update_mac_vlan()
715 dev_err(&nic_dev->hwdev->hwif->pdev->dev, "Failed to add VF %d MAC %pM vlan %d\n", in hinic_update_mac_vlan()
739 err = hinic_kill_vf_vlan(nic_dev->hwdev, in set_hw_vf_vlan()
747 err = hinic_add_vf_vlan(nic_dev->hwdev, in set_hw_vf_vlan()
755 err = hinic_kill_vf_vlan(nic_dev->hwdev, OS_VF_ID_TO_HW(vf)); in set_hw_vf_vlan()
783 cur_vlanprio = hinic_vf_info_vlanprio(nic_dev->hwdev, in hinic_ndo_set_vf_vlan()
792 static int hinic_set_vf_trust(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_trust() argument
798 if (!hwdev) in hinic_set_vf_trust()
801 nic_io = &hwdev->func_to_io; in hinic_set_vf_trust()
817 nic_io = &adapter->hwdev->func_to_io; in hinic_ndo_set_vf_trust()
827 err = hinic_set_vf_trust(adapter->hwdev, vf, setting); in hinic_ndo_set_vf_trust()
880 err = hinic_set_vf_tx_rate(nic_dev->hwdev, OS_VF_ID_TO_HW(vf), in hinic_ndo_set_vf_bw()
898 static int hinic_set_vf_spoofchk(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_spoofchk() argument
906 if (!hwdev) in hinic_set_vf_spoofchk()
909 vf_infos = hwdev->func_to_io.vf_infos; in hinic_set_vf_spoofchk()
911 spoofchk_cfg.func_id = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_set_vf_spoofchk()
913 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_ENABLE_SPOOFCHK, in hinic_set_vf_spoofchk()
919 …dev_err(&hwdev->hwif->pdev->dev, "Failed to set VF(%d) spoofchk, err: %d, status: 0x%x, out size: … in hinic_set_vf_spoofchk()
941 cur_spoofchk = nic_dev->hwdev->func_to_io.vf_infos[vf].spoofchk; in hinic_ndo_set_vf_spoofchk()
947 err = hinic_set_vf_spoofchk(sriov_info->hwdev, in hinic_ndo_set_vf_spoofchk()
961 static int hinic_set_vf_link_state(struct hinic_hwdev *hwdev, u16 vf_id, in hinic_set_vf_link_state() argument
964 struct hinic_func_to_io *nic_io = &hwdev->func_to_io; in hinic_set_vf_link_state()
990 hinic_notify_vf_link_status(hwdev, vf_id, link_status); in hinic_set_vf_link_state()
1008 return hinic_set_vf_link_state(sriov_info->hwdev, in hinic_ndo_set_vf_link_state()
1013 static int nic_pf_mbox_handler(void *hwdev, u16 vf_id, u8 cmd, void *buf_in, in nic_pf_mbox_handler() argument
1018 struct hinic_hwdev *dev = hwdev; in nic_pf_mbox_handler()
1024 if (!hwdev) in nic_pf_mbox_handler()
1027 if (!hinic_mbox_check_cmd_valid(hwdev, nic_cmd_support_vf, vf_id, cmd, in nic_pf_mbox_handler()
1035 pfhwdev = container_of(dev, struct hinic_pfhwdev, hwdev); in nic_pf_mbox_handler()
1041 err = vf_msg_handle->cmd_msg_handler(hwdev, vf_id, in nic_pf_mbox_handler()
1059 static int cfg_mbx_pf_proc_vf_msg(void *hwdev, u16 vf_id, u8 cmd, void *buf_in, in cfg_mbx_pf_proc_vf_msg() argument
1063 struct hinic_hwdev *dev = hwdev; in cfg_mbx_pf_proc_vf_msg()
1114 vf_infos = nic_dev->hwdev->func_to_io.vf_infos + HW_VF_ID_TO_OS(vf_id); in hinic_clear_vf_infos()
1118 if (hinic_vf_info_vlanprio(nic_dev->hwdev, vf_id)) in hinic_clear_vf_infos()
1119 hinic_kill_vf_vlan(nic_dev->hwdev, vf_id); in hinic_clear_vf_infos()
1122 hinic_set_vf_tx_rate(nic_dev->hwdev, vf_id, 0, 0); in hinic_clear_vf_infos()
1125 hinic_set_vf_spoofchk(nic_dev->hwdev, vf_id, false); in hinic_clear_vf_infos()
1128 hinic_set_vf_trust(nic_dev->hwdev, vf_id, false); in hinic_clear_vf_infos()
1132 hinic_init_vf_infos(&nic_dev->hwdev->func_to_io, HW_VF_ID_TO_OS(vf_id)); in hinic_clear_vf_infos()
1144 func_idx = hinic_glb_pf_vf_offset(nic_dev->hwdev->hwif) + idx; in hinic_deinit_vf_hw()
1145 hinic_set_wq_page_size(nic_dev->hwdev, func_idx, in hinic_deinit_vf_hw()
1151 int hinic_vf_func_init(struct hinic_hwdev *hwdev) in hinic_vf_func_init() argument
1159 err = hinic_vf_mbox_random_id_init(hwdev); in hinic_vf_func_init()
1161 dev_err(&hwdev->hwif->pdev->dev, "Failed to init vf mbox random id, err: %d\n", in hinic_vf_func_init()
1166 nic_io = &hwdev->func_to_io; in hinic_vf_func_init()
1168 if (HINIC_IS_VF(hwdev->hwif)) { in hinic_vf_func_init()
1169 err = hinic_mbox_to_pf(hwdev, HINIC_MOD_L2NIC, in hinic_vf_func_init()
1174 dev_err(&hwdev->hwif->pdev->dev, in hinic_vf_func_init()
1180 err = hinic_register_pf_mbox_cb(hwdev, HINIC_MOD_CFGM, in hinic_vf_func_init()
1183 dev_err(&hwdev->hwif->pdev->dev, in hinic_vf_func_init()
1187 nic_io->max_vfs = hwdev->nic_cap.max_vf; in hinic_vf_func_init()
1202 err = hinic_register_pf_mbox_cb(hwdev, HINIC_MOD_L2NIC, in hinic_vf_func_init()
1218 void hinic_vf_func_free(struct hinic_hwdev *hwdev) in hinic_vf_func_free() argument
1224 if (HINIC_IS_VF(hwdev->hwif)) { in hinic_vf_func_free()
1225 err = hinic_mbox_to_pf(hwdev, HINIC_MOD_L2NIC, in hinic_vf_func_free()
1230 …dev_err(&hwdev->hwif->pdev->dev, "Failed to unregister VF, err: %d, status: 0x%x, out_size: 0x%x\n… in hinic_vf_func_free()
1233 if (hwdev->func_to_io.vf_infos) { in hinic_vf_func_free()
1234 hinic_unregister_pf_mbox_cb(hwdev, HINIC_MOD_L2NIC); in hinic_vf_func_free()
1235 kfree(hwdev->func_to_io.vf_infos); in hinic_vf_func_free()
1240 static int hinic_init_vf_hw(struct hinic_hwdev *hwdev, u16 start_vf_id, in hinic_init_vf_hw() argument
1248 func_idx = hinic_glb_pf_vf_offset(hwdev->hwif) + i; in hinic_init_vf_hw()
1249 err = hinic_set_wq_page_size(hwdev, func_idx, in hinic_init_vf_hw()
1308 err = hinic_init_vf_hw(sriov_info->hwdev, OS_VF_ID_TO_HW(0), in hinic_pci_sriov_enable()