Lines Matching refs:vdev

52 	int (*devcmd_rtn)(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
61 void *svnic_dev_priv(struct vnic_dev *vdev) in svnic_dev_priv() argument
63 return vdev->priv; in svnic_dev_priv()
66 static int vnic_dev_discover_res(struct vnic_dev *vdev, in vnic_dev_discover_res() argument
142 vdev->res[type].count = count; in vnic_dev_discover_res()
143 vdev->res[type].vaddr = (char __iomem *)bar->vaddr + bar_offset; in vnic_dev_discover_res()
149 unsigned int svnic_dev_get_res_count(struct vnic_dev *vdev, in svnic_dev_get_res_count() argument
152 return vdev->res[type].count; in svnic_dev_get_res_count()
155 void __iomem *svnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type, in svnic_dev_get_res() argument
158 if (!vdev->res[type].vaddr) in svnic_dev_get_res()
166 return (char __iomem *)vdev->res[type].vaddr + in svnic_dev_get_res()
170 return (char __iomem *)vdev->res[type].vaddr; in svnic_dev_get_res()
207 int svnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring, in svnic_dev_alloc_desc_ring() argument
212 ring->descs_unaligned = dma_alloc_coherent(&vdev->pdev->dev, in svnic_dev_alloc_desc_ring()
234 void svnic_dev_free_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring) in svnic_dev_free_desc_ring() argument
237 dma_free_coherent(&vdev->pdev->dev, in svnic_dev_free_desc_ring()
245 static int _svnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in _svnic_dev_cmd2() argument
248 struct devcmd2_controller *dc2c = vdev->devcmd2; in _svnic_dev_cmd2()
274 pci_name(vdev->pdev), _CMD_N(cmd), fetch_idx, posted); in _svnic_dev_cmd2()
287 dc2c->cmd_ring[posted].args[i] = vdev->args[i]; in _svnic_dev_cmd2()
327 vdev->args[i] = result->results[i]; in _svnic_dev_cmd2()
339 static int svnic_dev_init_devcmd2(struct vnic_dev *vdev) in svnic_dev_init_devcmd2() argument
346 if (vdev->devcmd2) in svnic_dev_init_devcmd2()
349 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0); in svnic_dev_init_devcmd2()
357 vdev->devcmd2 = dc2c; in svnic_dev_init_devcmd2()
362 ret = vnic_wq_devcmd2_alloc(vdev, in svnic_dev_init_devcmd2()
382 ret = svnic_dev_alloc_desc_ring(vdev, in svnic_dev_init_devcmd2()
392 vdev->args[0] = (u64) dc2c->results_ring.base_addr | VNIC_PADDR_TARGET; in svnic_dev_init_devcmd2()
393 vdev->args[1] = DEVCMD2_RING_SIZE; in svnic_dev_init_devcmd2()
395 ret = _svnic_dev_cmd2(vdev, CMD_INITIALIZE_DEVCMD2, VNIC_DVCMD_TMO); in svnic_dev_init_devcmd2()
399 vdev->devcmd_rtn = &_svnic_dev_cmd2; in svnic_dev_init_devcmd2()
405 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring); in svnic_dev_init_devcmd2()
413 vdev->devcmd2 = NULL; in svnic_dev_init_devcmd2()
418 static void vnic_dev_deinit_devcmd2(struct vnic_dev *vdev) in vnic_dev_deinit_devcmd2() argument
420 struct devcmd2_controller *dc2c = vdev->devcmd2; in vnic_dev_deinit_devcmd2()
422 vdev->devcmd2 = NULL; in vnic_dev_deinit_devcmd2()
423 vdev->devcmd_rtn = NULL; in vnic_dev_deinit_devcmd2()
425 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring); in vnic_dev_deinit_devcmd2()
431 int svnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in svnic_dev_cmd() argument
436 memset(vdev->args, 0, sizeof(vdev->args)); in svnic_dev_cmd()
437 vdev->args[0] = *a0; in svnic_dev_cmd()
438 vdev->args[1] = *a1; in svnic_dev_cmd()
440 err = (*vdev->devcmd_rtn)(vdev, cmd, wait); in svnic_dev_cmd()
442 *a0 = vdev->args[0]; in svnic_dev_cmd()
443 *a1 = vdev->args[1]; in svnic_dev_cmd()
448 int svnic_dev_fw_info(struct vnic_dev *vdev, in svnic_dev_fw_info() argument
455 if (!vdev->fw_info) { in svnic_dev_fw_info()
456 vdev->fw_info = dma_alloc_coherent(&vdev->pdev->dev, in svnic_dev_fw_info()
458 &vdev->fw_info_pa, GFP_KERNEL); in svnic_dev_fw_info()
459 if (!vdev->fw_info) in svnic_dev_fw_info()
462 a0 = vdev->fw_info_pa; in svnic_dev_fw_info()
465 err = svnic_dev_cmd(vdev, CMD_MCPU_FW_INFO, &a0, &a1, wait); in svnic_dev_fw_info()
468 *fw_info = vdev->fw_info; in svnic_dev_fw_info()
473 int svnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, in svnic_dev_spec() argument
483 err = svnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait); in svnic_dev_spec()
506 int svnic_dev_stats_clear(struct vnic_dev *vdev) in svnic_dev_stats_clear() argument
511 return svnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait); in svnic_dev_stats_clear()
514 int svnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats) in svnic_dev_stats_dump() argument
519 if (!vdev->stats) { in svnic_dev_stats_dump()
520 vdev->stats = dma_alloc_coherent(&vdev->pdev->dev, in svnic_dev_stats_dump()
521 sizeof(struct vnic_stats), &vdev->stats_pa, GFP_KERNEL); in svnic_dev_stats_dump()
522 if (!vdev->stats) in svnic_dev_stats_dump()
526 *stats = vdev->stats; in svnic_dev_stats_dump()
527 a0 = vdev->stats_pa; in svnic_dev_stats_dump()
530 return svnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait); in svnic_dev_stats_dump()
533 int svnic_dev_close(struct vnic_dev *vdev) in svnic_dev_close() argument
538 return svnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait); in svnic_dev_close()
541 int svnic_dev_enable_wait(struct vnic_dev *vdev) in svnic_dev_enable_wait() argument
547 err = svnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait); in svnic_dev_enable_wait()
549 return svnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait); in svnic_dev_enable_wait()
554 int svnic_dev_disable(struct vnic_dev *vdev) in svnic_dev_disable() argument
559 return svnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait); in svnic_dev_disable()
562 int svnic_dev_open(struct vnic_dev *vdev, int arg) in svnic_dev_open() argument
567 return svnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait); in svnic_dev_open()
570 int svnic_dev_open_done(struct vnic_dev *vdev, int *done) in svnic_dev_open_done() argument
578 err = svnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait); in svnic_dev_open_done()
587 int svnic_dev_notify_set(struct vnic_dev *vdev, u16 intr) in svnic_dev_notify_set() argument
592 if (!vdev->notify) { in svnic_dev_notify_set()
593 vdev->notify = dma_alloc_coherent(&vdev->pdev->dev, in svnic_dev_notify_set()
595 &vdev->notify_pa, GFP_KERNEL); in svnic_dev_notify_set()
596 if (!vdev->notify) in svnic_dev_notify_set()
600 a0 = vdev->notify_pa; in svnic_dev_notify_set()
604 return svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in svnic_dev_notify_set()
607 void svnic_dev_notify_unset(struct vnic_dev *vdev) in svnic_dev_notify_unset() argument
616 svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in svnic_dev_notify_unset()
619 static int vnic_dev_notify_ready(struct vnic_dev *vdev) in vnic_dev_notify_ready() argument
626 if (!vdev->notify) in vnic_dev_notify_ready()
631 memcpy(&vdev->notify_copy, vdev->notify, in vnic_dev_notify_ready()
633 words = (u32 *)&vdev->notify_copy; in vnic_dev_notify_ready()
641 int svnic_dev_init(struct vnic_dev *vdev, int arg) in svnic_dev_init() argument
646 return svnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait); in svnic_dev_init()
649 int svnic_dev_link_status(struct vnic_dev *vdev) in svnic_dev_link_status() argument
652 if (!vnic_dev_notify_ready(vdev)) in svnic_dev_link_status()
655 return vdev->notify_copy.link_state; in svnic_dev_link_status()
658 u32 svnic_dev_link_down_cnt(struct vnic_dev *vdev) in svnic_dev_link_down_cnt() argument
660 if (!vnic_dev_notify_ready(vdev)) in svnic_dev_link_down_cnt()
663 return vdev->notify_copy.link_down_cnt; in svnic_dev_link_down_cnt()
666 void svnic_dev_set_intr_mode(struct vnic_dev *vdev, in svnic_dev_set_intr_mode() argument
669 vdev->intr_mode = intr_mode; in svnic_dev_set_intr_mode()
672 enum vnic_dev_intr_mode svnic_dev_get_intr_mode(struct vnic_dev *vdev) in svnic_dev_get_intr_mode() argument
674 return vdev->intr_mode; in svnic_dev_get_intr_mode()
677 void svnic_dev_unregister(struct vnic_dev *vdev) in svnic_dev_unregister() argument
679 if (vdev) { in svnic_dev_unregister()
680 if (vdev->notify) in svnic_dev_unregister()
681 dma_free_coherent(&vdev->pdev->dev, in svnic_dev_unregister()
683 vdev->notify, in svnic_dev_unregister()
684 vdev->notify_pa); in svnic_dev_unregister()
685 if (vdev->stats) in svnic_dev_unregister()
686 dma_free_coherent(&vdev->pdev->dev, in svnic_dev_unregister()
688 vdev->stats, vdev->stats_pa); in svnic_dev_unregister()
689 if (vdev->fw_info) in svnic_dev_unregister()
690 dma_free_coherent(&vdev->pdev->dev, in svnic_dev_unregister()
692 vdev->fw_info, vdev->fw_info_pa); in svnic_dev_unregister()
693 if (vdev->devcmd2) in svnic_dev_unregister()
694 vnic_dev_deinit_devcmd2(vdev); in svnic_dev_unregister()
695 kfree(vdev); in svnic_dev_unregister()
699 struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev, in svnic_dev_alloc_discover() argument
705 if (!vdev) { in svnic_dev_alloc_discover()
706 vdev = kzalloc_obj(struct vnic_dev, GFP_ATOMIC); in svnic_dev_alloc_discover()
707 if (!vdev) in svnic_dev_alloc_discover()
711 vdev->priv = priv; in svnic_dev_alloc_discover()
712 vdev->pdev = pdev; in svnic_dev_alloc_discover()
714 if (vnic_dev_discover_res(vdev, bar, num_bars)) in svnic_dev_alloc_discover()
717 return vdev; in svnic_dev_alloc_discover()
720 svnic_dev_unregister(vdev); in svnic_dev_alloc_discover()
728 int svnic_dev_cmd_init(struct vnic_dev *vdev, int fallback) in svnic_dev_cmd_init() argument
733 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0); in svnic_dev_cmd_init()
735 err = svnic_dev_init_devcmd2(vdev); in svnic_dev_cmd_init()