Lines Matching full:dev

17 	struct virtio_device *dev = dev_to_virtio(_d);  in device_show()  local
18 return sysfs_emit(buf, "0x%04x\n", dev->id.device); in device_show()
25 struct virtio_device *dev = dev_to_virtio(_d); in vendor_show() local
26 return sysfs_emit(buf, "0x%04x\n", dev->id.vendor); in vendor_show()
33 struct virtio_device *dev = dev_to_virtio(_d); in status_show() local
34 return sysfs_emit(buf, "0x%08x\n", dev->config->get_status(dev)); in status_show()
41 struct virtio_device *dev = dev_to_virtio(_d); in modalias_show() local
43 dev->id.device, dev->id.vendor); in modalias_show()
50 struct virtio_device *dev = dev_to_virtio(_d); in features_show() local
58 __virtio_test_bit(dev, i) ? '1' : '0'); in features_show()
74 static inline int virtio_id_match(const struct virtio_device *dev, in virtio_id_match() argument
77 if (id->device != dev->id.device && id->device != VIRTIO_DEV_ANY_ID) in virtio_id_match()
80 return id->vendor == VIRTIO_DEV_ANY_ID || id->vendor == dev->id.vendor; in virtio_id_match()
88 struct virtio_device *dev = dev_to_virtio(_dv); in virtio_dev_match() local
93 if (virtio_id_match(dev, &ids[i])) in virtio_dev_match()
100 const struct virtio_device *dev = dev_to_virtio(_dv); in virtio_uevent() local
103 dev->id.device, dev->id.vendor); in virtio_uevent()
110 struct virtio_driver *drv = drv_to_virtio(vdev->dev.driver); in virtio_check_driver_offered_feature()
126 static void __virtio_config_changed(struct virtio_device *dev) in __virtio_config_changed() argument
128 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in __virtio_config_changed()
130 if (!dev->config_core_enabled || dev->config_driver_disabled) in __virtio_config_changed()
131 dev->config_change_pending = true; in __virtio_config_changed()
133 drv->config_changed(dev); in __virtio_config_changed()
134 dev->config_change_pending = false; in __virtio_config_changed()
138 void virtio_config_changed(struct virtio_device *dev) in virtio_config_changed() argument
142 spin_lock_irqsave(&dev->config_lock, flags); in virtio_config_changed()
143 __virtio_config_changed(dev); in virtio_config_changed()
144 spin_unlock_irqrestore(&dev->config_lock, flags); in virtio_config_changed()
150 * @dev: the device to disable
155 void virtio_config_driver_disable(struct virtio_device *dev) in virtio_config_driver_disable() argument
157 spin_lock_irq(&dev->config_lock); in virtio_config_driver_disable()
158 dev->config_driver_disabled = true; in virtio_config_driver_disable()
159 spin_unlock_irq(&dev->config_lock); in virtio_config_driver_disable()
165 * @dev: the device to enable
170 void virtio_config_driver_enable(struct virtio_device *dev) in virtio_config_driver_enable() argument
172 spin_lock_irq(&dev->config_lock); in virtio_config_driver_enable()
173 dev->config_driver_disabled = false; in virtio_config_driver_enable()
174 if (dev->config_change_pending) in virtio_config_driver_enable()
175 __virtio_config_changed(dev); in virtio_config_driver_enable()
176 spin_unlock_irq(&dev->config_lock); in virtio_config_driver_enable()
180 static void virtio_config_core_disable(struct virtio_device *dev) in virtio_config_core_disable() argument
182 spin_lock_irq(&dev->config_lock); in virtio_config_core_disable()
183 dev->config_core_enabled = false; in virtio_config_core_disable()
184 spin_unlock_irq(&dev->config_lock); in virtio_config_core_disable()
187 static void virtio_config_core_enable(struct virtio_device *dev) in virtio_config_core_enable() argument
189 spin_lock_irq(&dev->config_lock); in virtio_config_core_enable()
190 dev->config_core_enabled = true; in virtio_config_core_enable()
191 if (dev->config_change_pending) in virtio_config_core_enable()
192 __virtio_config_changed(dev); in virtio_config_core_enable()
193 spin_unlock_irq(&dev->config_lock); in virtio_config_core_enable()
196 void virtio_add_status(struct virtio_device *dev, unsigned int status) in virtio_add_status() argument
199 dev->config->set_status(dev, dev->config->get_status(dev) | status); in virtio_add_status()
204 static int virtio_features_ok(struct virtio_device *dev) in virtio_features_ok() argument
210 if (virtio_check_mem_acc_cb(dev)) { in virtio_features_ok()
211 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) { in virtio_features_ok()
212 dev_warn(&dev->dev, in virtio_features_ok()
217 if (!virtio_has_feature(dev, VIRTIO_F_ACCESS_PLATFORM)) { in virtio_features_ok()
218 dev_warn(&dev->dev, in virtio_features_ok()
224 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) in virtio_features_ok()
227 virtio_add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK); in virtio_features_ok()
228 status = dev->config->get_status(dev); in virtio_features_ok()
230 dev_err(&dev->dev, "virtio: device refuses features: %x\n", in virtio_features_ok()
239 * @dev: the device to reset
253 void virtio_reset_device(struct virtio_device *dev) in virtio_reset_device() argument
262 virtio_break_device(dev); in virtio_reset_device()
263 virtio_synchronize_cbs(dev); in virtio_reset_device()
266 dev->config->reset(dev); in virtio_reset_device()
273 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_probe() local
274 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_probe()
280 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_dev_probe()
283 virtio_get_features(dev, device_features); in virtio_dev_probe()
307 dev->features_array[i] = driver_features[i] & in virtio_dev_probe()
310 virtio_features_from_u64(dev->features_array, in virtio_dev_probe()
316 virtio_debug_device_filter_features(dev); in virtio_dev_probe()
321 __virtio_set_bit(dev, i); in virtio_dev_probe()
323 err = dev->config->finalize_features(dev); in virtio_dev_probe()
330 virtio_features_copy(features, dev->features_array); in virtio_dev_probe()
331 err = drv->validate(dev); in virtio_dev_probe()
336 if (!virtio_features_equal(features, dev->features_array)) { in virtio_dev_probe()
337 err = dev->config->finalize_features(dev); in virtio_dev_probe()
343 err = virtio_features_ok(dev); in virtio_dev_probe()
347 err = drv->probe(dev); in virtio_dev_probe()
352 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) in virtio_dev_probe()
353 virtio_device_ready(dev); in virtio_dev_probe()
356 drv->scan(dev); in virtio_dev_probe()
358 virtio_config_core_enable(dev); in virtio_dev_probe()
363 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_dev_probe()
370 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_remove() local
371 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_remove()
373 virtio_config_core_disable(dev); in virtio_dev_remove()
375 drv->remove(dev); in virtio_dev_remove()
378 WARN_ON_ONCE(dev->config->get_status(dev)); in virtio_dev_remove()
381 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_dev_remove()
383 of_node_put(dev->dev.of_node); in virtio_dev_remove()
388 * @_d: ptr to dev structure
396 struct virtio_device *dev = dev_to_virtio(_d); in virtio_irq_get_affinity() local
398 if (!dev->config->get_vq_affinity) in virtio_irq_get_affinity()
401 return dev->config->get_vq_affinity(dev, irq_vec); in virtio_irq_get_affinity()
406 * @dev: the device
411 void virtio_device_shutdown(struct virtio_device *dev) in virtio_device_shutdown() argument
417 virtio_break_device(dev); in virtio_device_shutdown()
421 virtio_synchronize_cbs(dev); in virtio_device_shutdown()
426 dev->config->reset(dev); in virtio_device_shutdown()
432 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_shutdown() local
433 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_shutdown()
444 drv->shutdown(dev); in virtio_dev_shutdown()
448 virtio_device_shutdown(dev); in virtio_dev_shutdown()
451 static int virtio_dev_num_vf(struct device *dev) in virtio_dev_num_vf() argument
453 struct virtio_device *vdev = dev_to_virtio(dev); in virtio_dev_num_vf()
455 return dev_num_vf(vdev->dev.parent); in virtio_dev_num_vf()
488 static int virtio_device_of_init(struct virtio_device *dev) in virtio_device_of_init() argument
490 struct device_node *np, *pnode = dev_of_node(dev->dev.parent); in virtio_device_of_init()
509 ret = snprintf(compat, sizeof(compat), "virtio,device%x", dev->id.device); in virtio_device_of_init()
522 dev->dev.of_node = np; in virtio_device_of_init()
532 * @dev : virtio device to be registered
534 * On error, the caller must call put_device on &@dev->dev (and not kfree),
535 * as another code path may have obtained a reference to @dev.
539 int register_virtio_device(struct virtio_device *dev) in register_virtio_device() argument
543 dev->dev.bus = &virtio_bus; in register_virtio_device()
544 device_initialize(&dev->dev); in register_virtio_device()
551 dev->index = err; in register_virtio_device()
552 err = dev_set_name(&dev->dev, "virtio%u", dev->index); in register_virtio_device()
556 err = virtio_device_of_init(dev); in register_virtio_device()
560 spin_lock_init(&dev->config_lock); in register_virtio_device()
561 dev->config_driver_disabled = false; in register_virtio_device()
562 dev->config_core_enabled = false; in register_virtio_device()
563 dev->config_change_pending = false; in register_virtio_device()
565 INIT_LIST_HEAD(&dev->vqs); in register_virtio_device()
566 spin_lock_init(&dev->vqs_list_lock); in register_virtio_device()
570 virtio_reset_device(dev); in register_virtio_device()
573 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in register_virtio_device()
575 virtio_debug_device_init(dev); in register_virtio_device()
581 err = device_add(&dev->dev); in register_virtio_device()
588 of_node_put(dev->dev.of_node); in register_virtio_device()
590 ida_free(&virtio_index_ida, dev->index); in register_virtio_device()
592 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in register_virtio_device()
597 bool is_virtio_device(struct device *dev) in is_virtio_device() argument
599 return dev->bus == &virtio_bus; in is_virtio_device()
603 void unregister_virtio_device(struct virtio_device *dev) in unregister_virtio_device() argument
605 int index = dev->index; /* save for after device release */ in unregister_virtio_device()
607 device_unregister(&dev->dev); in unregister_virtio_device()
608 virtio_debug_device_exit(dev); in unregister_virtio_device()
613 static int virtio_device_restore_priv(struct virtio_device *dev, bool restore) in virtio_device_restore_priv() argument
615 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_restore_priv()
620 virtio_reset_device(dev); in virtio_device_restore_priv()
623 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_device_restore_priv()
627 if (dev->failed) in virtio_device_restore_priv()
628 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore_priv()
634 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_device_restore_priv()
636 ret = dev->config->finalize_features(dev); in virtio_device_restore_priv()
640 ret = virtio_features_ok(dev); in virtio_device_restore_priv()
646 ret = drv->restore(dev); in virtio_device_restore_priv()
651 ret = drv->reset_done(dev); in virtio_device_restore_priv()
657 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) in virtio_device_restore_priv()
658 virtio_device_ready(dev); in virtio_device_restore_priv()
660 virtio_config_core_enable(dev); in virtio_device_restore_priv()
665 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore_priv()
670 int virtio_device_freeze(struct virtio_device *dev) in virtio_device_freeze() argument
672 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_freeze()
675 virtio_config_core_disable(dev); in virtio_device_freeze()
677 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED; in virtio_device_freeze()
680 ret = drv->freeze(dev); in virtio_device_freeze()
682 virtio_config_core_enable(dev); in virtio_device_freeze()
691 int virtio_device_restore(struct virtio_device *dev) in virtio_device_restore() argument
693 return virtio_device_restore_priv(dev, true); in virtio_device_restore()
698 int virtio_device_reset_prepare(struct virtio_device *dev) in virtio_device_reset_prepare() argument
700 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_reset_prepare()
706 virtio_config_core_disable(dev); in virtio_device_reset_prepare()
708 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED; in virtio_device_reset_prepare()
710 ret = drv->reset_prepare(dev); in virtio_device_reset_prepare()
712 virtio_config_core_enable(dev); in virtio_device_reset_prepare()
720 int virtio_device_reset_done(struct virtio_device *dev) in virtio_device_reset_done() argument
722 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_reset_done()
727 return virtio_device_restore_priv(dev, false); in virtio_device_reset_done()