Lines Matching refs:vdev

68 	int (*devcmd_rtn)(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
77 void *svnic_dev_priv(struct vnic_dev *vdev) in svnic_dev_priv() argument
79 return vdev->priv; in svnic_dev_priv()
82 static int vnic_dev_discover_res(struct vnic_dev *vdev, in vnic_dev_discover_res() argument
158 vdev->res[type].count = count; in vnic_dev_discover_res()
159 vdev->res[type].vaddr = (char __iomem *)bar->vaddr + bar_offset; in vnic_dev_discover_res()
165 unsigned int svnic_dev_get_res_count(struct vnic_dev *vdev, in svnic_dev_get_res_count() argument
168 return vdev->res[type].count; in svnic_dev_get_res_count()
171 void __iomem *svnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type, in svnic_dev_get_res() argument
174 if (!vdev->res[type].vaddr) in svnic_dev_get_res()
182 return (char __iomem *)vdev->res[type].vaddr + in svnic_dev_get_res()
186 return (char __iomem *)vdev->res[type].vaddr; in svnic_dev_get_res()
223 int svnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring, in svnic_dev_alloc_desc_ring() argument
228 ring->descs_unaligned = pci_alloc_consistent(vdev->pdev, in svnic_dev_alloc_desc_ring()
251 void svnic_dev_free_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring) in svnic_dev_free_desc_ring() argument
254 pci_free_consistent(vdev->pdev, in svnic_dev_free_desc_ring()
262 static int _svnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in _svnic_dev_cmd2() argument
265 struct devcmd2_controller *dc2c = vdev->devcmd2; in _svnic_dev_cmd2()
289 dc2c->cmd_ring[posted].args[i] = vdev->args[i]; in _svnic_dev_cmd2()
328 vdev->args[i] = result->results[i]; in _svnic_dev_cmd2()
340 static int svnic_dev_init_devcmd2(struct vnic_dev *vdev) in svnic_dev_init_devcmd2() argument
347 if (vdev->devcmd2) in svnic_dev_init_devcmd2()
350 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0); in svnic_dev_init_devcmd2()
358 vdev->devcmd2 = dc2c; in svnic_dev_init_devcmd2()
363 ret = vnic_wq_devcmd2_alloc(vdev, in svnic_dev_init_devcmd2()
383 ret = svnic_dev_alloc_desc_ring(vdev, in svnic_dev_init_devcmd2()
393 vdev->args[0] = (u64) dc2c->results_ring.base_addr | VNIC_PADDR_TARGET; in svnic_dev_init_devcmd2()
394 vdev->args[1] = DEVCMD2_RING_SIZE; in svnic_dev_init_devcmd2()
396 ret = _svnic_dev_cmd2(vdev, CMD_INITIALIZE_DEVCMD2, VNIC_DVCMD_TMO); in svnic_dev_init_devcmd2()
400 vdev->devcmd_rtn = &_svnic_dev_cmd2; in svnic_dev_init_devcmd2()
406 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring); in svnic_dev_init_devcmd2()
414 vdev->devcmd2 = NULL; in svnic_dev_init_devcmd2()
419 static void vnic_dev_deinit_devcmd2(struct vnic_dev *vdev) in vnic_dev_deinit_devcmd2() argument
421 struct devcmd2_controller *dc2c = vdev->devcmd2; in vnic_dev_deinit_devcmd2()
423 vdev->devcmd2 = NULL; in vnic_dev_deinit_devcmd2()
424 vdev->devcmd_rtn = NULL; in vnic_dev_deinit_devcmd2()
426 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring); in vnic_dev_deinit_devcmd2()
432 int svnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd, in svnic_dev_cmd() argument
437 memset(vdev->args, 0, sizeof(vdev->args)); in svnic_dev_cmd()
438 vdev->args[0] = *a0; in svnic_dev_cmd()
439 vdev->args[1] = *a1; in svnic_dev_cmd()
441 err = (*vdev->devcmd_rtn)(vdev, cmd, wait); in svnic_dev_cmd()
443 *a0 = vdev->args[0]; in svnic_dev_cmd()
444 *a1 = vdev->args[1]; in svnic_dev_cmd()
449 int svnic_dev_fw_info(struct vnic_dev *vdev, in svnic_dev_fw_info() argument
456 if (!vdev->fw_info) { in svnic_dev_fw_info()
457 vdev->fw_info = pci_alloc_consistent(vdev->pdev, in svnic_dev_fw_info()
459 &vdev->fw_info_pa); in svnic_dev_fw_info()
460 if (!vdev->fw_info) in svnic_dev_fw_info()
463 a0 = vdev->fw_info_pa; in svnic_dev_fw_info()
466 err = svnic_dev_cmd(vdev, CMD_MCPU_FW_INFO, &a0, &a1, wait); in svnic_dev_fw_info()
469 *fw_info = vdev->fw_info; in svnic_dev_fw_info()
474 int svnic_dev_spec(struct vnic_dev *vdev, unsigned int offset, in svnic_dev_spec() argument
484 err = svnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait); in svnic_dev_spec()
507 int svnic_dev_stats_clear(struct vnic_dev *vdev) in svnic_dev_stats_clear() argument
512 return svnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait); in svnic_dev_stats_clear()
515 int svnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats) in svnic_dev_stats_dump() argument
520 if (!vdev->stats) { in svnic_dev_stats_dump()
521 vdev->stats = pci_alloc_consistent(vdev->pdev, in svnic_dev_stats_dump()
522 sizeof(struct vnic_stats), &vdev->stats_pa); in svnic_dev_stats_dump()
523 if (!vdev->stats) in svnic_dev_stats_dump()
527 *stats = vdev->stats; in svnic_dev_stats_dump()
528 a0 = vdev->stats_pa; in svnic_dev_stats_dump()
531 return svnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait); in svnic_dev_stats_dump()
534 int svnic_dev_close(struct vnic_dev *vdev) in svnic_dev_close() argument
539 return svnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait); in svnic_dev_close()
542 int svnic_dev_enable_wait(struct vnic_dev *vdev) in svnic_dev_enable_wait() argument
548 err = svnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait); in svnic_dev_enable_wait()
550 return svnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait); in svnic_dev_enable_wait()
555 int svnic_dev_disable(struct vnic_dev *vdev) in svnic_dev_disable() argument
560 return svnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait); in svnic_dev_disable()
563 int svnic_dev_open(struct vnic_dev *vdev, int arg) in svnic_dev_open() argument
568 return svnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait); in svnic_dev_open()
571 int svnic_dev_open_done(struct vnic_dev *vdev, int *done) in svnic_dev_open_done() argument
579 err = svnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait); in svnic_dev_open_done()
588 int svnic_dev_notify_set(struct vnic_dev *vdev, u16 intr) in svnic_dev_notify_set() argument
593 if (!vdev->notify) { in svnic_dev_notify_set()
594 vdev->notify = pci_alloc_consistent(vdev->pdev, in svnic_dev_notify_set()
596 &vdev->notify_pa); in svnic_dev_notify_set()
597 if (!vdev->notify) in svnic_dev_notify_set()
601 a0 = vdev->notify_pa; in svnic_dev_notify_set()
605 return svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in svnic_dev_notify_set()
608 void svnic_dev_notify_unset(struct vnic_dev *vdev) in svnic_dev_notify_unset() argument
617 svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait); in svnic_dev_notify_unset()
620 static int vnic_dev_notify_ready(struct vnic_dev *vdev) in vnic_dev_notify_ready() argument
627 if (!vdev->notify) in vnic_dev_notify_ready()
632 memcpy(&vdev->notify_copy, vdev->notify, in vnic_dev_notify_ready()
634 words = (u32 *)&vdev->notify_copy; in vnic_dev_notify_ready()
642 int svnic_dev_init(struct vnic_dev *vdev, int arg) in svnic_dev_init() argument
647 return svnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait); in svnic_dev_init()
650 int svnic_dev_link_status(struct vnic_dev *vdev) in svnic_dev_link_status() argument
652 if (vdev->linkstatus) in svnic_dev_link_status()
653 return *vdev->linkstatus; in svnic_dev_link_status()
655 if (!vnic_dev_notify_ready(vdev)) in svnic_dev_link_status()
658 return vdev->notify_copy.link_state; in svnic_dev_link_status()
661 u32 svnic_dev_link_down_cnt(struct vnic_dev *vdev) in svnic_dev_link_down_cnt() argument
663 if (!vnic_dev_notify_ready(vdev)) in svnic_dev_link_down_cnt()
666 return vdev->notify_copy.link_down_cnt; in svnic_dev_link_down_cnt()
669 void svnic_dev_set_intr_mode(struct vnic_dev *vdev, in svnic_dev_set_intr_mode() argument
672 vdev->intr_mode = intr_mode; in svnic_dev_set_intr_mode()
675 enum vnic_dev_intr_mode svnic_dev_get_intr_mode(struct vnic_dev *vdev) in svnic_dev_get_intr_mode() argument
677 return vdev->intr_mode; in svnic_dev_get_intr_mode()
680 void svnic_dev_unregister(struct vnic_dev *vdev) in svnic_dev_unregister() argument
682 if (vdev) { in svnic_dev_unregister()
683 if (vdev->notify) in svnic_dev_unregister()
684 pci_free_consistent(vdev->pdev, in svnic_dev_unregister()
686 vdev->notify, in svnic_dev_unregister()
687 vdev->notify_pa); in svnic_dev_unregister()
688 if (vdev->linkstatus) in svnic_dev_unregister()
689 pci_free_consistent(vdev->pdev, in svnic_dev_unregister()
691 vdev->linkstatus, in svnic_dev_unregister()
692 vdev->linkstatus_pa); in svnic_dev_unregister()
693 if (vdev->stats) in svnic_dev_unregister()
694 pci_free_consistent(vdev->pdev, in svnic_dev_unregister()
696 vdev->stats, vdev->stats_pa); in svnic_dev_unregister()
697 if (vdev->fw_info) in svnic_dev_unregister()
698 pci_free_consistent(vdev->pdev, in svnic_dev_unregister()
700 vdev->fw_info, vdev->fw_info_pa); in svnic_dev_unregister()
701 if (vdev->devcmd2) in svnic_dev_unregister()
702 vnic_dev_deinit_devcmd2(vdev); in svnic_dev_unregister()
703 kfree(vdev); in svnic_dev_unregister()
707 struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev, in svnic_dev_alloc_discover() argument
713 if (!vdev) { in svnic_dev_alloc_discover()
714 vdev = kzalloc(sizeof(struct vnic_dev), GFP_ATOMIC); in svnic_dev_alloc_discover()
715 if (!vdev) in svnic_dev_alloc_discover()
719 vdev->priv = priv; in svnic_dev_alloc_discover()
720 vdev->pdev = pdev; in svnic_dev_alloc_discover()
722 if (vnic_dev_discover_res(vdev, bar, num_bars)) in svnic_dev_alloc_discover()
725 return vdev; in svnic_dev_alloc_discover()
728 svnic_dev_unregister(vdev); in svnic_dev_alloc_discover()
736 int svnic_dev_cmd_init(struct vnic_dev *vdev, int fallback) in svnic_dev_cmd_init() argument
741 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0); in svnic_dev_cmd_init()
743 err = svnic_dev_init_devcmd2(vdev); in svnic_dev_cmd_init()