Lines Matching refs:vdev

54 	int (*devcmd_rtn)(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
63 void *svnic_dev_priv(struct vnic_dev *vdev)
65 return vdev->priv;
68 static int vnic_dev_discover_res(struct vnic_dev *vdev,
144 vdev->res[type].count = count;
145 vdev->res[type].vaddr = (char __iomem *)bar->vaddr + bar_offset;
151 unsigned int svnic_dev_get_res_count(struct vnic_dev *vdev,
154 return vdev->res[type].count;
157 void __iomem *svnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
160 if (!vdev->res[type].vaddr)
168 return (char __iomem *)vdev->res[type].vaddr +
172 return (char __iomem *)vdev->res[type].vaddr;
209 int svnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
214 ring->descs_unaligned = dma_alloc_coherent(&vdev->pdev->dev,
236 void svnic_dev_free_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring)
239 dma_free_coherent(&vdev->pdev->dev,
247 static int _svnic_dev_cmd2(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
250 struct devcmd2_controller *dc2c = vdev->devcmd2;
276 pci_name(vdev->pdev), _CMD_N(cmd), fetch_idx, posted);
289 dc2c->cmd_ring[posted].args[i] = vdev->args[i];
329 vdev->args[i] = result->results[i];
341 static int svnic_dev_init_devcmd2(struct vnic_dev *vdev)
348 if (vdev->devcmd2)
351 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0);
359 vdev->devcmd2 = dc2c;
364 ret = vnic_wq_devcmd2_alloc(vdev,
384 ret = svnic_dev_alloc_desc_ring(vdev,
394 vdev->args[0] = (u64) dc2c->results_ring.base_addr | VNIC_PADDR_TARGET;
395 vdev->args[1] = DEVCMD2_RING_SIZE;
397 ret = _svnic_dev_cmd2(vdev, CMD_INITIALIZE_DEVCMD2, VNIC_DVCMD_TMO);
401 vdev->devcmd_rtn = &_svnic_dev_cmd2;
407 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring);
415 vdev->devcmd2 = NULL;
420 static void vnic_dev_deinit_devcmd2(struct vnic_dev *vdev)
422 struct devcmd2_controller *dc2c = vdev->devcmd2;
424 vdev->devcmd2 = NULL;
425 vdev->devcmd_rtn = NULL;
427 svnic_dev_free_desc_ring(vdev, &dc2c->results_ring);
433 int svnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
438 memset(vdev->args, 0, sizeof(vdev->args));
439 vdev->args[0] = *a0;
440 vdev->args[1] = *a1;
442 err = (*vdev->devcmd_rtn)(vdev, cmd, wait);
444 *a0 = vdev->args[0];
445 *a1 = vdev->args[1];
450 int svnic_dev_fw_info(struct vnic_dev *vdev,
457 if (!vdev->fw_info) {
458 vdev->fw_info = dma_alloc_coherent(&vdev->pdev->dev,
460 &vdev->fw_info_pa, GFP_KERNEL);
461 if (!vdev->fw_info)
464 a0 = vdev->fw_info_pa;
467 err = svnic_dev_cmd(vdev, CMD_MCPU_FW_INFO, &a0, &a1, wait);
470 *fw_info = vdev->fw_info;
475 int svnic_dev_spec(struct vnic_dev *vdev, unsigned int offset,
485 err = svnic_dev_cmd(vdev, CMD_DEV_SPEC, &a0, &a1, wait);
508 int svnic_dev_stats_clear(struct vnic_dev *vdev)
513 return svnic_dev_cmd(vdev, CMD_STATS_CLEAR, &a0, &a1, wait);
516 int svnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats)
521 if (!vdev->stats) {
522 vdev->stats = dma_alloc_coherent(&vdev->pdev->dev,
523 sizeof(struct vnic_stats), &vdev->stats_pa, GFP_KERNEL);
524 if (!vdev->stats)
528 *stats = vdev->stats;
529 a0 = vdev->stats_pa;
532 return svnic_dev_cmd(vdev, CMD_STATS_DUMP, &a0, &a1, wait);
535 int svnic_dev_close(struct vnic_dev *vdev)
540 return svnic_dev_cmd(vdev, CMD_CLOSE, &a0, &a1, wait);
543 int svnic_dev_enable_wait(struct vnic_dev *vdev)
549 err = svnic_dev_cmd(vdev, CMD_ENABLE_WAIT, &a0, &a1, wait);
551 return svnic_dev_cmd(vdev, CMD_ENABLE, &a0, &a1, wait);
556 int svnic_dev_disable(struct vnic_dev *vdev)
561 return svnic_dev_cmd(vdev, CMD_DISABLE, &a0, &a1, wait);
564 int svnic_dev_open(struct vnic_dev *vdev, int arg)
569 return svnic_dev_cmd(vdev, CMD_OPEN, &a0, &a1, wait);
572 int svnic_dev_open_done(struct vnic_dev *vdev, int *done)
580 err = svnic_dev_cmd(vdev, CMD_OPEN_STATUS, &a0, &a1, wait);
589 int svnic_dev_notify_set(struct vnic_dev *vdev, u16 intr)
594 if (!vdev->notify) {
595 vdev->notify = dma_alloc_coherent(&vdev->pdev->dev,
597 &vdev->notify_pa, GFP_KERNEL);
598 if (!vdev->notify)
602 a0 = vdev->notify_pa;
606 return svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait);
609 void svnic_dev_notify_unset(struct vnic_dev *vdev)
618 svnic_dev_cmd(vdev, CMD_NOTIFY, &a0, &a1, wait);
621 static int vnic_dev_notify_ready(struct vnic_dev *vdev)
628 if (!vdev->notify)
633 memcpy(&vdev->notify_copy, vdev->notify,
635 words = (u32 *)&vdev->notify_copy;
643 int svnic_dev_init(struct vnic_dev *vdev, int arg)
648 return svnic_dev_cmd(vdev, CMD_INIT, &a0, &a1, wait);
651 int svnic_dev_link_status(struct vnic_dev *vdev)
653 if (vdev->linkstatus)
654 return *vdev->linkstatus;
656 if (!vnic_dev_notify_ready(vdev))
659 return vdev->notify_copy.link_state;
662 u32 svnic_dev_link_down_cnt(struct vnic_dev *vdev)
664 if (!vnic_dev_notify_ready(vdev))
667 return vdev->notify_copy.link_down_cnt;
670 void svnic_dev_set_intr_mode(struct vnic_dev *vdev,
673 vdev->intr_mode = intr_mode;
676 enum vnic_dev_intr_mode svnic_dev_get_intr_mode(struct vnic_dev *vdev)
678 return vdev->intr_mode;
681 void svnic_dev_unregister(struct vnic_dev *vdev)
683 if (vdev) {
684 if (vdev->notify)
685 dma_free_coherent(&vdev->pdev->dev,
687 vdev->notify,
688 vdev->notify_pa);
689 if (vdev->linkstatus)
690 dma_free_coherent(&vdev->pdev->dev,
692 vdev->linkstatus,
693 vdev->linkstatus_pa);
694 if (vdev->stats)
695 dma_free_coherent(&vdev->pdev->dev,
697 vdev->stats, vdev->stats_pa);
698 if (vdev->fw_info)
699 dma_free_coherent(&vdev->pdev->dev,
701 vdev->fw_info, vdev->fw_info_pa);
702 if (vdev->devcmd2)
703 vnic_dev_deinit_devcmd2(vdev);
704 kfree(vdev);
708 struct vnic_dev *svnic_dev_alloc_discover(struct vnic_dev *vdev,
714 if (!vdev) {
715 vdev = kzalloc(sizeof(struct vnic_dev), GFP_ATOMIC);
716 if (!vdev)
720 vdev->priv = priv;
721 vdev->pdev = pdev;
723 if (vnic_dev_discover_res(vdev, bar, num_bars))
726 return vdev;
729 svnic_dev_unregister(vdev);
737 int svnic_dev_cmd_init(struct vnic_dev *vdev, int fallback)
742 p = svnic_dev_get_res(vdev, RES_TYPE_DEVCMD2, 0);
744 err = svnic_dev_init_devcmd2(vdev);