• Home
  • Raw
  • Download

Lines Matching refs:mvdev

76 static int mic_virtio_copy_to_user(struct mic_vdev *mvdev, void __user *ubuf,  in mic_virtio_copy_to_user()  argument
80 struct mic_device *mdev = mvdev->mdev; in mic_virtio_copy_to_user()
82 struct mic_vringh *mvr = &mvdev->mvr[vr_idx]; in mic_virtio_copy_to_user()
108 mvdev->in_bytes_dma += partlen; in mic_virtio_copy_to_user()
109 mvdev->in_bytes += partlen; in mic_virtio_copy_to_user()
115 dev_err(mic_dev(mvdev), "%s %d err %d\n", __func__, __LINE__, err); in mic_virtio_copy_to_user()
125 static int mic_virtio_copy_from_user(struct mic_vdev *mvdev, void __user *ubuf, in mic_virtio_copy_from_user() argument
129 struct mic_device *mdev = mvdev->mdev; in mic_virtio_copy_from_user()
131 struct mic_vringh *mvr = &mvdev->mvr[vr_idx]; in mic_virtio_copy_from_user()
137 mvdev->tx_dst_unaligned += len; in mic_virtio_copy_from_user()
140 mvdev->tx_len_unaligned += len; in mic_virtio_copy_from_user()
158 mvdev->out_bytes_dma += partlen; in mic_virtio_copy_from_user()
159 mvdev->out_bytes += partlen; in mic_virtio_copy_from_user()
171 mvdev->out_bytes += len; in mic_virtio_copy_from_user()
174 dev_err(mic_dev(mvdev), "%s %d err %d\n", __func__, __LINE__, err); in mic_virtio_copy_from_user()
184 struct mic_vdev *mvdev = mvrh->mvdev; in mic_notify() local
185 s8 db = mvdev->dc->h2c_vdev_db; in mic_notify()
188 mvdev->mdev->ops->send_intr(mvdev->mdev, db); in mic_notify()
209 static int mic_vringh_copy(struct mic_vdev *mvdev, struct vringh_kiov *iov, in mic_vringh_copy() argument
219 ret = mic_virtio_copy_to_user(mvdev, ubuf, partlen, in mic_vringh_copy()
224 ret = mic_virtio_copy_from_user(mvdev, ubuf, partlen, in mic_vringh_copy()
229 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_vringh_copy()
256 static int _mic_virtio_copy(struct mic_vdev *mvdev, in _mic_virtio_copy() argument
264 struct mic_vringh *mvr = &mvdev->mvr[copy->vr_idx]; in _mic_virtio_copy()
287 dev_err(mic_dev(mvdev), "%s %d err %d\n", in _mic_virtio_copy()
295 ret = mic_vringh_copy(mvdev, riov, ubuf, len, MIC_VRINGH_READ, in _mic_virtio_copy()
298 dev_err(mic_dev(mvdev), "%s %d err %d\n", in _mic_virtio_copy()
306 ret = mic_vringh_copy(mvdev, wiov, ubuf, len, !MIC_VRINGH_READ, in _mic_virtio_copy()
309 dev_err(mic_dev(mvdev), "%s %d err %d\n", in _mic_virtio_copy()
347 static inline int mic_verify_copy_args(struct mic_vdev *mvdev, in mic_verify_copy_args() argument
350 if (copy->vr_idx >= mvdev->dd->num_vq) { in mic_verify_copy_args()
351 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_verify_copy_args()
359 int mic_virtio_copy_desc(struct mic_vdev *mvdev, in mic_virtio_copy_desc() argument
363 struct mic_vringh *mvr = &mvdev->mvr[copy->vr_idx]; in mic_virtio_copy_desc()
365 err = mic_verify_copy_args(mvdev, copy); in mic_virtio_copy_desc()
370 if (!mic_vdevup(mvdev)) { in mic_virtio_copy_desc()
372 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_copy_desc()
376 err = _mic_virtio_copy(mvdev, copy); in mic_virtio_copy_desc()
378 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_copy_desc()
386 static void mic_virtio_init_post(struct mic_vdev *mvdev) in mic_virtio_init_post() argument
388 struct mic_vqconfig *vqconfig = mic_vq_config(mvdev->dd); in mic_virtio_init_post()
391 for (i = 0; i < mvdev->dd->num_vq; i++) { in mic_virtio_init_post()
393 dev_warn(mic_dev(mvdev), "used_address zero??\n"); in mic_virtio_init_post()
396 mvdev->mvr[i].vrh.vring.used = in mic_virtio_init_post()
397 (void __force *)mvdev->mdev->aper.va + in mic_virtio_init_post()
401 mvdev->dc->used_address_updated = 0; in mic_virtio_init_post()
403 dev_dbg(mic_dev(mvdev), "%s: device type %d LINKUP\n", in mic_virtio_init_post()
404 __func__, mvdev->virtio_id); in mic_virtio_init_post()
407 static inline void mic_virtio_device_reset(struct mic_vdev *mvdev) in mic_virtio_device_reset() argument
411 dev_dbg(mic_dev(mvdev), "%s: status %d device type %d RESET\n", in mic_virtio_device_reset()
412 __func__, mvdev->dd->status, mvdev->virtio_id); in mic_virtio_device_reset()
414 for (i = 0; i < mvdev->dd->num_vq; i++) in mic_virtio_device_reset()
419 mutex_lock_nested(&mvdev->mvr[i].vr_mutex, i + 1); in mic_virtio_device_reset()
422 mvdev->dd->status = 0; in mic_virtio_device_reset()
423 mvdev->dc->vdev_reset = 0; in mic_virtio_device_reset()
424 mvdev->dc->host_ack = 1; in mic_virtio_device_reset()
426 for (i = 0; i < mvdev->dd->num_vq; i++) { in mic_virtio_device_reset()
427 struct vringh *vrh = &mvdev->mvr[i].vrh; in mic_virtio_device_reset()
428 mvdev->mvr[i].vring.info->avail_idx = 0; in mic_virtio_device_reset()
434 for (i = 0; i < mvdev->dd->num_vq; i++) in mic_virtio_device_reset()
435 mutex_unlock(&mvdev->mvr[i].vr_mutex); in mic_virtio_device_reset()
441 struct mic_vdev *mvdev; in mic_virtio_reset_devices() local
446 mvdev = list_entry(pos, struct mic_vdev, list); in mic_virtio_reset_devices()
447 mic_virtio_device_reset(mvdev); in mic_virtio_reset_devices()
448 mvdev->poll_wake = 1; in mic_virtio_reset_devices()
449 wake_up(&mvdev->waitq); in mic_virtio_reset_devices()
455 struct mic_vdev *mvdev = container_of(work, struct mic_vdev, in mic_bh_handler() local
458 if (mvdev->dc->used_address_updated) in mic_bh_handler()
459 mic_virtio_init_post(mvdev); in mic_bh_handler()
461 if (mvdev->dc->vdev_reset) in mic_bh_handler()
462 mic_virtio_device_reset(mvdev); in mic_bh_handler()
464 mvdev->poll_wake = 1; in mic_bh_handler()
465 wake_up(&mvdev->waitq); in mic_bh_handler()
470 struct mic_vdev *mvdev = data; in mic_virtio_intr_handler() local
471 struct mic_device *mdev = mvdev->mdev; in mic_virtio_intr_handler()
474 schedule_work(&mvdev->virtio_bh_work); in mic_virtio_intr_handler()
478 int mic_virtio_config_change(struct mic_vdev *mvdev, in mic_virtio_config_change() argument
483 struct mic_bootparam *bootparam = mvdev->mdev->dp; in mic_virtio_config_change()
486 mutex_lock(&mvdev->mdev->mic_mutex); in mic_virtio_config_change()
487 for (i = 0; i < mvdev->dd->num_vq; i++) in mic_virtio_config_change()
488 mutex_lock_nested(&mvdev->mvr[i].vr_mutex, i + 1); in mic_virtio_config_change()
490 if (db == -1 || mvdev->dd->type == -1) { in mic_virtio_config_change()
495 if (copy_from_user(mic_vq_configspace(mvdev->dd), in mic_virtio_config_change()
496 argp, mvdev->dd->config_len)) { in mic_virtio_config_change()
497 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_config_change()
502 mvdev->dc->config_change = MIC_VIRTIO_PARAM_CONFIG_CHANGED; in mic_virtio_config_change()
503 mvdev->mdev->ops->send_intr(mvdev->mdev, db); in mic_virtio_config_change()
507 mvdev->dc->guest_ack, msecs_to_jiffies(100)); in mic_virtio_config_change()
512 dev_dbg(mic_dev(mvdev), in mic_virtio_config_change()
514 mvdev->dc->config_change = 0; in mic_virtio_config_change()
515 mvdev->dc->guest_ack = 0; in mic_virtio_config_change()
517 for (i = 0; i < mvdev->dd->num_vq; i++) in mic_virtio_config_change()
518 mutex_unlock(&mvdev->mvr[i].vr_mutex); in mic_virtio_config_change()
519 mutex_unlock(&mvdev->mdev->mic_mutex); in mic_virtio_config_change()
523 static int mic_copy_dp_entry(struct mic_vdev *mvdev, in mic_copy_dp_entry() argument
528 struct mic_device *mdev = mvdev->mdev; in mic_copy_dp_entry()
535 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
542 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
549 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
555 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
564 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
582 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_copy_dp_entry()
600 static void mic_init_device_ctrl(struct mic_vdev *mvdev, in mic_init_device_ctrl() argument
614 mvdev->dc = dc; in mic_init_device_ctrl()
617 int mic_virtio_add_device(struct mic_vdev *mvdev, in mic_virtio_add_device() argument
620 struct mic_device *mdev = mvdev->mdev; in mic_virtio_add_device()
633 ret = mic_copy_dp_entry(mvdev, argp, &type, &dd); in mic_virtio_add_device()
639 mic_init_device_ctrl(mvdev, dd); in mic_virtio_add_device()
641 mvdev->dd = dd; in mic_virtio_add_device()
642 mvdev->virtio_id = type; in mic_virtio_add_device()
644 INIT_WORK(&mvdev->virtio_bh_work, mic_bh_handler); in mic_virtio_add_device()
647 struct mic_vringh *mvr = &mvdev->mvr[i]; in mic_virtio_add_device()
648 struct mic_vring *vr = &mvdev->mvr[i].vring; in mic_virtio_add_device()
658 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_add_device()
664 vr->info->magic = cpu_to_le32(MIC_MAGIC + mvdev->virtio_id + i); in mic_virtio_add_device()
669 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_add_device()
677 *(u32 *)mic_vq_features(mvdev->dd), num, false, in mic_virtio_add_device()
680 dev_err(mic_dev(mvdev), "%s %d err %d\n", in mic_virtio_add_device()
687 mvr->mvdev = mvdev; in mic_virtio_add_device()
694 mvr->buf_da = mic_map_single(mvdev->mdev, mvr->buf, in mic_virtio_add_device()
699 mvdev->virtio_id); in mic_virtio_add_device()
700 mvdev->virtio_db = mic_next_db(mdev); in mic_virtio_add_device()
701 mvdev->virtio_cookie = mic_request_threaded_irq(mdev, in mic_virtio_add_device()
703 NULL, irqname, mvdev, in mic_virtio_add_device()
704 mvdev->virtio_db, MIC_INTR_DB); in mic_virtio_add_device()
705 if (IS_ERR(mvdev->virtio_cookie)) { in mic_virtio_add_device()
706 ret = PTR_ERR(mvdev->virtio_cookie); in mic_virtio_add_device()
711 mvdev->dc->c2h_vdev_db = mvdev->virtio_db; in mic_virtio_add_device()
713 list_add_tail(&mvdev->list, &mdev->vdev_list); in mic_virtio_add_device()
733 struct mic_vringh *mvr = &mvdev->mvr[j]; in mic_virtio_add_device()
743 void mic_virtio_del_device(struct mic_vdev *mvdev) in mic_virtio_del_device() argument
747 struct mic_device *mdev = mvdev->mdev; in mic_virtio_del_device()
759 "Requesting hot remove id %d\n", mvdev->virtio_id); in mic_virtio_del_device()
760 mvdev->dc->config_change = MIC_VIRTIO_PARAM_DEV_REMOVE; in mic_virtio_del_device()
764 mvdev->dc->guest_ack, msecs_to_jiffies(100)); in mic_virtio_del_device()
770 mvdev->virtio_id, mvdev->dc->config_change, in mic_virtio_del_device()
771 mvdev->dc->guest_ack, retry); in mic_virtio_del_device()
772 mvdev->dc->config_change = 0; in mic_virtio_del_device()
773 mvdev->dc->guest_ack = 0; in mic_virtio_del_device()
775 mic_free_irq(mdev, mvdev->virtio_cookie, mvdev); in mic_virtio_del_device()
776 flush_work(&mvdev->virtio_bh_work); in mic_virtio_del_device()
777 vqconfig = mic_vq_config(mvdev->dd); in mic_virtio_del_device()
778 for (i = 0; i < mvdev->dd->num_vq; i++) { in mic_virtio_del_device()
779 struct mic_vringh *mvr = &mvdev->mvr[i]; in mic_virtio_del_device()
781 mic_unmap_single(mvdev->mdev, mvr->buf_da, in mic_virtio_del_device()
795 if (tmp_mvdev == mvdev) { in mic_virtio_del_device()
799 mvdev->virtio_id); in mic_virtio_del_device()
810 mvdev->dd->type = -1; in mic_virtio_del_device()