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)
79 return vdev->priv;
82 static int vnic_dev_discover_res(struct vnic_dev *vdev,
158 vdev->res[type].count = count;
159 vdev->res[type].vaddr = (char __iomem *)bar->vaddr + bar_offset;
165 unsigned int svnic_dev_get_res_count(struct vnic_dev *vdev,
168 return vdev->res[type].count;
171 void __iomem *svnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
174 if (!vdev->res[type].vaddr)
182 return (char __iomem *)vdev->res[type].vaddr +
186 return (char __iomem *)vdev->res[type].vaddr;
223 int svnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
228 ring->descs_unaligned = dma_alloc_coherent(&vdev->pdev->dev,
250 void svnic_dev_free_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring)
253 dma_free_coherent(&vdev->pdev->dev,
261 static int _svnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
264 struct devcmd2_controller *dc2c = vdev->devcmd2;
290 pci_name(vdev->pdev), _CMD_N(cmd), fetch_idx, posted);
303 dc2c->cmd_ring[posted].args[i] = vdev->args[i];
343 vdev->args[i] = result->results[i];
355 static int svnic_dev_init_devcmd2(struct vnic_dev *vdev)
362 if (vdev->devcmd2)
365 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0);
373 vdev->devcmd2 = dc2c;
378 ret = vnic_wq_devcmd2_alloc(vdev,
398 ret = svnic_dev_alloc_desc_ring(vdev,
408 vdev->args[0] = (u64) dc2c->results_ring.base_addr | VNIC_PADDR_TARGET;
409 vdev->args[1] = DEVCMD2_RING_SIZE;
411 ret = _svnic_dev_cmd2(vdev, CMD_INITIALIZE_DEVCMD2, VNIC_DVCMD_TMO);
415 vdev->devcmd_rtn = &_svnic_dev_cmd2;
421 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring);
429 vdev->devcmd2 = NULL;
434 static void vnic_dev_deinit_devcmd2(struct vnic_dev *vdev)
436 struct devcmd2_controller *dc2c = vdev->devcmd2;
438 vdev->devcmd2 = NULL;
439 vdev->devcmd_rtn = NULL;
441 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring);
447 int svnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
452 memset(vdev->args, 0, sizeof(vdev->args));
453 vdev->args[0] = *a0;
454 vdev->args[1] = *a1;
456 err = (*vdev->devcmd_rtn)(vdev, cmd, wait);
458 *a0 = vdev->args[0];
459 *a1 = vdev->args[1];
464 int svnic_dev_fw_info(struct vnic_dev *vdev,
471 if (!vdev->fw_info) {
472 vdev->fw_info = dma_alloc_coherent(&vdev->pdev->dev,
474 &vdev->fw_info_pa, GFP_KERNEL);
475 if (!vdev->fw_info)
478 a0 = vdev->fw_info_pa;
481 err = svnic_dev_cmd(vdev, CMD_MCPU_FW_INFO, &a0, &a1, wait);
484 *fw_info = vdev->fw_info;
489 int svnic_dev_spec(struct vnic_dev *vdev, unsigned int offset,
499 err = svnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait);
522 int svnic_dev_stats_clear(struct vnic_dev *vdev)
527 return svnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait);
530 int svnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats)
535 if (!vdev->stats) {
536 vdev->stats = dma_alloc_coherent(&vdev->pdev->dev,
537 sizeof(struct vnic_stats), &vdev->stats_pa, GFP_KERNEL);
538 if (!vdev->stats)
542 *stats = vdev->stats;
543 a0 = vdev->stats_pa;
546 return svnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait);
549 int svnic_dev_close(struct vnic_dev *vdev)
554 return svnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait);
557 int svnic_dev_enable_wait(struct vnic_dev *vdev)
563 err = svnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait);
565 return svnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait);
570 int svnic_dev_disable(struct vnic_dev *vdev)
575 return svnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait);
578 int svnic_dev_open(struct vnic_dev *vdev, int arg)
583 return svnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait);
586 int svnic_dev_open_done(struct vnic_dev *vdev, int *done)
594 err = svnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait);
603 int svnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
608 if (!vdev->notify) {
609 vdev->notify = dma_alloc_coherent(&vdev->pdev->dev,
611 &vdev->notify_pa, GFP_KERNEL);
612 if (!vdev->notify)
616 a0 = vdev->notify_pa;
620 return svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait);
623 void svnic_dev_notify_unset(struct vnic_dev *vdev)
632 svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait);
635 static int vnic_dev_notify_ready(struct vnic_dev *vdev)
642 if (!vdev->notify)
647 memcpy(&vdev->notify_copy, vdev->notify,
649 words = (u32 *)&vdev->notify_copy;
657 int svnic_dev_init(struct vnic_dev *vdev, int arg)
662 return svnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait);
665 int svnic_dev_link_status(struct vnic_dev *vdev)
667 if (vdev->linkstatus)
668 return *vdev->linkstatus;
670 if (!vnic_dev_notify_ready(vdev))
673 return vdev->notify_copy.link_state;
676 u32 svnic_dev_link_down_cnt(struct vnic_dev *vdev)
678 if (!vnic_dev_notify_ready(vdev))
681 return vdev->notify_copy.link_down_cnt;
684 void svnic_dev_set_intr_mode(struct vnic_dev *vdev,
687 vdev->intr_mode = intr_mode;
690 enum vnic_dev_intr_mode svnic_dev_get_intr_mode(struct vnic_dev *vdev)
692 return vdev->intr_mode;
695 void svnic_dev_unregister(struct vnic_dev *vdev)
697 if (vdev) {
698 if (vdev->notify)
699 dma_free_coherent(&vdev->pdev->dev,
701 vdev->notify,
702 vdev->notify_pa);
703 if (vdev->linkstatus)
704 dma_free_coherent(&vdev->pdev->dev,
706 vdev->linkstatus,
707 vdev->linkstatus_pa);
708 if (vdev->stats)
709 dma_free_coherent(&vdev->pdev->dev,
711 vdev->stats, vdev->stats_pa);
712 if (vdev->fw_info)
713 dma_free_coherent(&vdev->pdev->dev,
715 vdev->fw_info, vdev->fw_info_pa);
716 if (vdev->devcmd2)
717 vnic_dev_deinit_devcmd2(vdev);
718 kfree(vdev);
722 struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev,
728 if (!vdev) {
729 vdev = kzalloc(sizeof(struct vnic_dev), GFP_ATOMIC);
730 if (!vdev)
734 vdev->priv = priv;
735 vdev->pdev = pdev;
737 if (vnic_dev_discover_res(vdev, bar, num_bars))
740 return vdev;
743 svnic_dev_unregister(vdev);
751 int svnic_dev_cmd_init(struct vnic_dev *vdev, int fallback)
756 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0);
758 err = svnic_dev_init_devcmd2(vdev);