Lines Matching refs:dev

17 	struct virtio_device *dev = dev_to_virtio(_d);
18 return sysfs_emit(buf, "0x%04x\n", dev->id.device);
25 struct virtio_device *dev = dev_to_virtio(_d);
26 return sysfs_emit(buf, "0x%04x\n", dev->id.vendor);
33 struct virtio_device *dev = dev_to_virtio(_d);
34 return sysfs_emit(buf, "0x%08x\n", dev->config->get_status(dev));
41 struct virtio_device *dev = dev_to_virtio(_d);
43 dev->id.device, dev->id.vendor);
50 struct virtio_device *dev = dev_to_virtio(_d);
56 for (i = 0; i < sizeof(dev->features)*8; i++)
58 __virtio_test_bit(dev, i) ? '1' : '0');
74 static inline int virtio_id_match(const struct virtio_device *dev,
77 if (id->device != dev->id.device && id->device != VIRTIO_DEV_ANY_ID)
80 return id->vendor == VIRTIO_DEV_ANY_ID || id->vendor == dev->id.vendor;
88 struct virtio_device *dev = dev_to_virtio(_dv);
93 if (virtio_id_match(dev, &ids[i]))
100 const struct virtio_device *dev = dev_to_virtio(_dv);
103 dev->id.device, dev->id.vendor);
110 struct virtio_driver *drv = drv_to_virtio(vdev->dev.driver);
126 static void __virtio_config_changed(struct virtio_device *dev)
128 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
130 if (!dev->config_enabled)
131 dev->config_change_pending = true;
133 drv->config_changed(dev);
136 void virtio_config_changed(struct virtio_device *dev)
140 spin_lock_irqsave(&dev->config_lock, flags);
141 __virtio_config_changed(dev);
142 spin_unlock_irqrestore(&dev->config_lock, flags);
146 static void virtio_config_disable(struct virtio_device *dev)
148 spin_lock_irq(&dev->config_lock);
149 dev->config_enabled = false;
150 spin_unlock_irq(&dev->config_lock);
153 static void virtio_config_enable(struct virtio_device *dev)
155 spin_lock_irq(&dev->config_lock);
156 dev->config_enabled = true;
157 if (dev->config_change_pending)
158 __virtio_config_changed(dev);
159 dev->config_change_pending = false;
160 spin_unlock_irq(&dev->config_lock);
163 void virtio_add_status(struct virtio_device *dev, unsigned int status)
166 dev->config->set_status(dev, dev->config->get_status(dev) | status);
171 static int virtio_features_ok(struct virtio_device *dev)
177 if (virtio_check_mem_acc_cb(dev)) {
178 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) {
179 dev_warn(&dev->dev,
184 if (!virtio_has_feature(dev, VIRTIO_F_ACCESS_PLATFORM)) {
185 dev_warn(&dev->dev,
191 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1))
194 virtio_add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK);
195 status = dev->config->get_status(dev);
197 dev_err(&dev->dev, "virtio: device refuses features: %x\n",
206 * @dev: the device to reset
220 void virtio_reset_device(struct virtio_device *dev)
229 virtio_break_device(dev);
230 virtio_synchronize_cbs(dev);
233 dev->config->reset(dev);
240 struct virtio_device *dev = dev_to_virtio(_d);
241 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
247 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER);
250 device_features = dev->config->get_features(dev);
273 dev->features = driver_features & device_features;
275 dev->features = driver_features_legacy & device_features;
280 __virtio_set_bit(dev, i);
282 err = dev->config->finalize_features(dev);
287 u64 features = dev->features;
289 err = drv->validate(dev);
294 if (features != dev->features) {
295 err = dev->config->finalize_features(dev);
301 err = virtio_features_ok(dev);
305 err = drv->probe(dev);
310 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
311 virtio_device_ready(dev);
314 drv->scan(dev);
316 virtio_config_enable(dev);
320 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
327 struct virtio_device *dev = dev_to_virtio(_d);
328 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
330 virtio_config_disable(dev);
332 drv->remove(dev);
335 WARN_ON_ONCE(dev->config->get_status(dev));
338 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
340 of_node_put(dev->dev.of_node);
367 static int virtio_device_of_init(struct virtio_device *dev)
369 struct device_node *np, *pnode = dev_of_node(dev->dev.parent);
388 ret = snprintf(compat, sizeof(compat), "virtio,device%x", dev->id.device);
401 dev->dev.of_node = np;
411 * @dev : virtio device to be registered
413 * On error, the caller must call put_device on &@dev->dev (and not kfree),
414 * as another code path may have obtained a reference to @dev.
418 int register_virtio_device(struct virtio_device *dev)
422 dev->dev.bus = &virtio_bus;
423 device_initialize(&dev->dev);
430 dev->index = err;
431 err = dev_set_name(&dev->dev, "virtio%u", dev->index);
435 err = virtio_device_of_init(dev);
439 spin_lock_init(&dev->config_lock);
440 dev->config_enabled = false;
441 dev->config_change_pending = false;
443 INIT_LIST_HEAD(&dev->vqs);
444 spin_lock_init(&dev->vqs_list_lock);
448 virtio_reset_device(dev);
451 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
457 err = device_add(&dev->dev);
464 of_node_put(dev->dev.of_node);
466 ida_free(&virtio_index_ida, dev->index);
468 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
473 bool is_virtio_device(struct device *dev)
475 return dev->bus == &virtio_bus;
479 void unregister_virtio_device(struct virtio_device *dev)
481 int index = dev->index; /* save for after device release */
483 device_unregister(&dev->dev);
489 int virtio_device_freeze(struct virtio_device *dev)
491 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
493 virtio_config_disable(dev);
495 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED;
498 return drv->freeze(dev);
504 int virtio_device_restore(struct virtio_device *dev)
506 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver);
511 virtio_reset_device(dev);
514 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
518 if (dev->failed)
519 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);
525 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER);
527 ret = dev->config->finalize_features(dev);
531 ret = virtio_features_ok(dev);
536 ret = drv->restore(dev);
542 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
543 virtio_device_ready(dev);
545 virtio_config_enable(dev);
550 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED);