Lines Matching refs:hwdev
186 static bool check_func_id(struct hinic_hwdev *hwdev, u16 src_func_idx, in check_func_id() argument
192 dev_warn(&hwdev->hwif->pdev->dev, in check_func_id()
201 dev_warn(&hwdev->hwif->pdev->dev, in check_func_id()
210 bool hinic_mbox_check_func_id_8B(struct hinic_hwdev *hwdev, u16 func_idx, in hinic_mbox_check_func_id_8B() argument
213 return check_func_id(hwdev, func_idx, buf_in, in_size, in hinic_mbox_check_func_id_8B()
224 int hinic_register_pf_mbox_cb(struct hinic_hwdev *hwdev, in hinic_register_pf_mbox_cb() argument
228 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_register_pf_mbox_cb()
247 int hinic_register_vf_mbox_cb(struct hinic_hwdev *hwdev, in hinic_register_vf_mbox_cb() argument
251 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_register_vf_mbox_cb()
268 void hinic_unregister_pf_mbox_cb(struct hinic_hwdev *hwdev, in hinic_unregister_pf_mbox_cb() argument
271 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_unregister_pf_mbox_cb()
287 void hinic_unregister_vf_mbox_cb(struct hinic_hwdev *hwdev, in hinic_unregister_vf_mbox_cb() argument
290 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_unregister_vf_mbox_cb()
320 cb(func_to_func->hwdev, recv_mbox->cmd, recv_mbox->mbox, in recv_vf_mbox_handler()
357 ret = cb(func_to_func->hwdev, vf_id, recv_mbox->cmd, in recv_pf_from_vf_mbox_handler()
514 static int set_vf_mbox_random_id(struct hinic_hwdev *hwdev, u16 func_id) in set_vf_mbox_random_id() argument
516 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in set_vf_mbox_random_id()
522 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in set_vf_mbox_random_id()
526 rand_info.vf_in_pf = func_id - hinic_glb_pf_vf_offset(hwdev->hwif); in set_vf_mbox_random_id()
537 …dev_err(&hwdev->hwif->pdev->dev, "Set VF random id failed, err: %d, status: 0x%x, out size: 0x%x\n… in set_vf_mbox_random_id()
560 if (set_vf_mbox_random_id(func_to_func->hwdev, src)) in update_random_id_work_handler()
561 dev_warn(&func_to_func->hwdev->hwif->pdev->dev, "Update VF id: 0x%x random id failed\n", in update_random_id_work_handler()
570 struct hinic_hwdev *hwdev = func_to_func->hwdev; in check_vf_mbox_random_id() local
582 if (!HINIC_IS_PPF(hwdev->hwif)) { in check_vf_mbox_random_id()
583 offset = hinic_glb_pf_vf_offset(hwdev->hwif); in check_vf_mbox_random_id()
586 if (vf_in_pf < 1 || vf_in_pf > hwdev->nic_cap.max_vf) { in check_vf_mbox_random_id()
587 dev_warn(&hwdev->hwif->pdev->dev, in check_vf_mbox_random_id()
590 hwdev->nic_cap.max_vf + offset); in check_vf_mbox_random_id()
602 dev_warn(&hwdev->hwif->pdev->dev, in check_vf_mbox_random_id()
666 static void mbox_copy_header(struct hinic_hwdev *hwdev, in mbox_copy_header() argument
676 static void mbox_copy_send_data(struct hinic_hwdev *hwdev, in mbox_copy_send_data() argument
731 static void dump_mox_reg(struct hinic_hwdev *hwdev) in dump_mox_reg() argument
735 val = hinic_hwif_read_reg(hwdev->hwif, in dump_mox_reg()
737 dev_err(&hwdev->hwif->pdev->dev, "Mailbox control reg: 0x%x\n", val); in dump_mox_reg()
739 val = hinic_hwif_read_reg(hwdev->hwif, in dump_mox_reg()
741 dev_err(&hwdev->hwif->pdev->dev, "Mailbox interrupt offset: 0x%x\n", in dump_mox_reg()
760 struct hinic_hwdev *hwdev = func_to_func->hwdev; in wait_for_mbox_seg_completion() local
776 dev_err(&hwdev->hwif->pdev->dev, "Send mailbox segment timeout, wb status: 0x%x\n", in wait_for_mbox_seg_completion()
778 dump_mox_reg(hwdev); in wait_for_mbox_seg_completion()
784 dev_err(&hwdev->hwif->pdev->dev, "Send mailbox segment timeout\n"); in wait_for_mbox_seg_completion()
785 dump_mox_reg(hwdev); in wait_for_mbox_seg_completion()
786 hinic_dump_aeq_info(hwdev); in wait_for_mbox_seg_completion()
802 struct hinic_hwdev *hwdev = func_to_func->hwdev; in send_mbox_seg() local
804 u8 num_aeqs = hwdev->hwif->attr.num_aeqs; in send_mbox_seg()
818 mbox_copy_header(hwdev, send_mbox, &header); in send_mbox_seg()
820 mbox_copy_send_data(hwdev, send_mbox, seg, seg_len); in send_mbox_seg()
830 dev_err(&hwdev->hwif->pdev->dev, "Send mailbox segment to function %d error, wb status: 0x%x\n", in send_mbox_seg()
846 struct hinic_hwdev *hwdev = func_to_func->hwdev; in send_mbox_to_func() local
867 HINIC_MBOX_HEADER_SET(hinic_global_func_id_hw(hwdev->hwif), in send_mbox_to_func()
882 dev_err(&hwdev->hwif->pdev->dev, "Failed to send mbox seg, seq_id=0x%llx\n", in send_mbox_to_func()
1034 hinic_dump_aeq_info(func_to_func->hwdev); in hinic_mbox_to_func()
1063 int hinic_mbox_to_pf(struct hinic_hwdev *hwdev, in hinic_mbox_to_pf() argument
1067 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_mbox_to_pf()
1073 if (!HINIC_IS_VF(hwdev->hwif)) { in hinic_mbox_to_pf()
1074 dev_err(&hwdev->hwif->pdev->dev, "Params error, func_type: %d\n", in hinic_mbox_to_pf()
1075 HINIC_FUNC_TYPE(hwdev->hwif)); in hinic_mbox_to_pf()
1080 hinic_pf_id_of_vf_hw(hwdev->hwif), buf_in, in hinic_mbox_to_pf()
1084 int hinic_mbox_to_vf(struct hinic_hwdev *hwdev, in hinic_mbox_to_vf() argument
1092 if (!hwdev) in hinic_mbox_to_vf()
1095 func_to_func = hwdev->func_to_func; in hinic_mbox_to_vf()
1100 if (HINIC_IS_VF(hwdev->hwif)) { in hinic_mbox_to_vf()
1101 dev_err(&hwdev->hwif->pdev->dev, "Params error, func_type: %d\n", in hinic_mbox_to_vf()
1102 HINIC_FUNC_TYPE(hwdev->hwif)); in hinic_mbox_to_vf()
1107 dev_err(&hwdev->hwif->pdev->dev, in hinic_mbox_to_vf()
1115 dst_func_idx = hinic_glb_pf_vf_offset(hwdev->hwif) + vf_id; in hinic_mbox_to_vf()
1153 static int alloc_mbox_info(struct hinic_hwdev *hwdev, in alloc_mbox_info() argument
1162 dev_err(&hwdev->hwif->pdev->dev, "Failed to init function %d mbox info\n", in alloc_mbox_info()
1195 struct hinic_hwdev *hwdev = func_to_func->hwdev; in alloc_mbox_wb_status() local
1198 send_mbox->wb_vaddr = dma_alloc_coherent(&hwdev->hwif->pdev->dev, in alloc_mbox_wb_status()
1210 hinic_hwif_write_reg(hwdev->hwif, HINIC_FUNC_CSR_MAILBOX_RESULT_H_OFF, in alloc_mbox_wb_status()
1212 hinic_hwif_write_reg(hwdev->hwif, HINIC_FUNC_CSR_MAILBOX_RESULT_L_OFF, in alloc_mbox_wb_status()
1221 struct hinic_hwdev *hwdev = func_to_func->hwdev; in free_mbox_wb_status() local
1223 hinic_hwif_write_reg(hwdev->hwif, HINIC_FUNC_CSR_MAILBOX_RESULT_H_OFF, in free_mbox_wb_status()
1225 hinic_hwif_write_reg(hwdev->hwif, HINIC_FUNC_CSR_MAILBOX_RESULT_L_OFF, in free_mbox_wb_status()
1228 dma_free_coherent(&hwdev->hwif->pdev->dev, MBOX_WB_STATUS_LEN, in free_mbox_wb_status()
1233 bool hinic_mbox_check_cmd_valid(struct hinic_hwdev *hwdev, in hinic_mbox_check_cmd_valid() argument
1238 u16 src_idx = vf_id + hinic_glb_pf_vf_offset(hwdev->hwif); in hinic_mbox_check_cmd_valid()
1244 return cmd_handle[i].check_cmd(hwdev, src_idx, in hinic_mbox_check_cmd_valid()
1251 dev_err(&hwdev->hwif->pdev->dev, in hinic_mbox_check_cmd_valid()
1253 vf_id + hinic_glb_pf_vf_offset(hwdev->hwif), cmd); in hinic_mbox_check_cmd_valid()
1258 static bool hinic_cmdq_check_vf_ctxt(struct hinic_hwdev *hwdev, in hinic_cmdq_check_vf_ctxt() argument
1264 if (cmdq_ctxt->ppf_idx != HINIC_HWIF_PPF_IDX(hwdev->hwif) || in hinic_cmdq_check_vf_ctxt()
1279 static bool check_cmdq_ctxt(struct hinic_hwdev *hwdev, u16 func_idx, in check_cmdq_ctxt() argument
1282 if (!hinic_mbox_check_func_id_8B(hwdev, func_idx, buf_in, in_size)) in check_cmdq_ctxt()
1285 return hinic_cmdq_check_vf_ctxt(hwdev, buf_in); in check_cmdq_ctxt()
1307 static bool check_hwctxt(struct hinic_hwdev *hwdev, u16 func_idx, in check_hwctxt() argument
1312 if (!hinic_mbox_check_func_id_8B(hwdev, func_idx, buf_in, in_size)) in check_hwctxt()
1315 if (hw_ctxt->ppf_idx != HINIC_HWIF_PPF_IDX(hwdev->hwif)) in check_hwctxt()
1329 static bool check_set_wq_page_size(struct hinic_hwdev *hwdev, u16 func_idx, in check_set_wq_page_size() argument
1334 if (!hinic_mbox_check_func_id_8B(hwdev, func_idx, buf_in, in_size)) in check_set_wq_page_size()
1337 if (page_size_info->ppf_idx != HINIC_HWIF_PPF_IDX(hwdev->hwif)) in check_set_wq_page_size()
1368 struct hinic_hwdev *hwdev = handle; in comm_pf_mbox_handler() local
1372 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in comm_pf_mbox_handler()
1376 dev_err(&hwdev->hwif->pdev->dev, in comm_pf_mbox_handler()
1378 vf_id + hinic_glb_pf_vf_offset(hwdev->hwif), cmd, in comm_pf_mbox_handler()
1390 dev_err(&hwdev->hwif->pdev->dev, in comm_pf_mbox_handler()
1398 int hinic_func_to_func_init(struct hinic_hwdev *hwdev) in hinic_func_to_func_init() argument
1404 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in hinic_func_to_func_init()
1409 hwdev->func_to_func = func_to_func; in hinic_func_to_func_init()
1410 func_to_func->hwdev = hwdev; in hinic_func_to_func_init()
1411 func_to_func->hwif = hwdev->hwif; in hinic_func_to_func_init()
1417 dev_err(&hwdev->hwif->pdev->dev, "Failed to initialize MBOX workqueue\n"); in hinic_func_to_func_init()
1422 err = alloc_mbox_info(hwdev, func_to_func->mbox_send); in hinic_func_to_func_init()
1424 dev_err(&hwdev->hwif->pdev->dev, "Failed to alloc mem for mbox_active\n"); in hinic_func_to_func_init()
1428 err = alloc_mbox_info(hwdev, func_to_func->mbox_resp); in hinic_func_to_func_init()
1430 dev_err(&hwdev->hwif->pdev->dev, "Failed to alloc mem for mbox_passive\n"); in hinic_func_to_func_init()
1436 dev_err(&hwdev->hwif->pdev->dev, "Failed to alloc mbox write back status\n"); in hinic_func_to_func_init()
1442 hinic_aeq_register_hw_cb(&hwdev->aeqs, HINIC_MBX_FROM_FUNC, in hinic_func_to_func_init()
1443 &pfhwdev->hwdev, hinic_mbox_func_aeqe_handler); in hinic_func_to_func_init()
1444 hinic_aeq_register_hw_cb(&hwdev->aeqs, HINIC_MBX_SEND_RSLT, in hinic_func_to_func_init()
1445 &pfhwdev->hwdev, hinic_mbox_self_aeqe_handler); in hinic_func_to_func_init()
1447 if (!HINIC_IS_VF(hwdev->hwif)) in hinic_func_to_func_init()
1448 hinic_register_pf_mbox_cb(hwdev, HINIC_MOD_COMM, in hinic_func_to_func_init()
1468 void hinic_func_to_func_free(struct hinic_hwdev *hwdev) in hinic_func_to_func_free() argument
1470 struct hinic_mbox_func_to_func *func_to_func = hwdev->func_to_func; in hinic_func_to_func_free()
1472 hinic_aeq_unregister_hw_cb(&hwdev->aeqs, HINIC_MBX_FROM_FUNC); in hinic_func_to_func_free()
1473 hinic_aeq_unregister_hw_cb(&hwdev->aeqs, HINIC_MBX_SEND_RSLT); in hinic_func_to_func_free()
1475 hinic_unregister_pf_mbox_cb(hwdev, HINIC_MOD_COMM); in hinic_func_to_func_free()
1488 int hinic_vf_mbox_random_id_init(struct hinic_hwdev *hwdev) in hinic_vf_mbox_random_id_init() argument
1494 if (HINIC_IS_VF(hwdev->hwif)) in hinic_vf_mbox_random_id_init()
1497 vf_offset = hinic_glb_pf_vf_offset(hwdev->hwif); in hinic_vf_mbox_random_id_init()
1499 for (vf_in_pf = 1; vf_in_pf <= hwdev->nic_cap.max_vf; vf_in_pf++) { in hinic_vf_mbox_random_id_init()
1500 err = set_vf_mbox_random_id(hwdev, vf_offset + vf_in_pf); in hinic_vf_mbox_random_id_init()
1506 hwdev->func_to_func->support_vf_random = false; in hinic_vf_mbox_random_id_init()
1508 dev_warn(&hwdev->hwif->pdev->dev, "Mgmt is unsupported to set VF%d random id\n", in hinic_vf_mbox_random_id_init()
1511 hwdev->func_to_func->support_vf_random = true; in hinic_vf_mbox_random_id_init()