Lines Matching refs: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
56 for (i = 0; i < sizeof(dev->features)*8; i++) in features_show()
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_enabled) in __virtio_config_changed()
131 dev->config_change_pending = true; in __virtio_config_changed()
133 drv->config_changed(dev); in __virtio_config_changed()
136 void virtio_config_changed(struct virtio_device *dev) in virtio_config_changed() argument
140 spin_lock_irqsave(&dev->config_lock, flags); in virtio_config_changed()
141 __virtio_config_changed(dev); in virtio_config_changed()
142 spin_unlock_irqrestore(&dev->config_lock, flags); in virtio_config_changed()
146 static void virtio_config_disable(struct virtio_device *dev) in virtio_config_disable() argument
148 spin_lock_irq(&dev->config_lock); in virtio_config_disable()
149 dev->config_enabled = false; in virtio_config_disable()
150 spin_unlock_irq(&dev->config_lock); in virtio_config_disable()
153 static void virtio_config_enable(struct virtio_device *dev) in virtio_config_enable() argument
155 spin_lock_irq(&dev->config_lock); in virtio_config_enable()
156 dev->config_enabled = true; in virtio_config_enable()
157 if (dev->config_change_pending) in virtio_config_enable()
158 __virtio_config_changed(dev); in virtio_config_enable()
159 dev->config_change_pending = false; in virtio_config_enable()
160 spin_unlock_irq(&dev->config_lock); in virtio_config_enable()
163 void virtio_add_status(struct virtio_device *dev, unsigned int status) in virtio_add_status() argument
166 dev->config->set_status(dev, dev->config->get_status(dev) | status); in virtio_add_status()
171 static int virtio_features_ok(struct virtio_device *dev) in virtio_features_ok() argument
177 if (virtio_check_mem_acc_cb(dev)) { in virtio_features_ok()
178 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) { in virtio_features_ok()
179 dev_warn(&dev->dev, in virtio_features_ok()
184 if (!virtio_has_feature(dev, VIRTIO_F_ACCESS_PLATFORM)) { in virtio_features_ok()
185 dev_warn(&dev->dev, in virtio_features_ok()
191 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) in virtio_features_ok()
194 virtio_add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK); in virtio_features_ok()
195 status = dev->config->get_status(dev); in virtio_features_ok()
197 dev_err(&dev->dev, "virtio: device refuses features: %x\n", in virtio_features_ok()
220 void virtio_reset_device(struct virtio_device *dev) in virtio_reset_device() argument
229 virtio_break_device(dev); in virtio_reset_device()
230 virtio_synchronize_cbs(dev); in virtio_reset_device()
233 dev->config->reset(dev); in virtio_reset_device()
240 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_probe() local
241 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_probe()
247 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_dev_probe()
250 device_features = dev->config->get_features(dev); in virtio_dev_probe()
273 dev->features = driver_features & device_features; in virtio_dev_probe()
275 dev->features = driver_features_legacy & device_features; in virtio_dev_probe()
280 __virtio_set_bit(dev, i); in virtio_dev_probe()
282 err = dev->config->finalize_features(dev); in virtio_dev_probe()
287 u64 features = dev->features; in virtio_dev_probe()
289 err = drv->validate(dev); in virtio_dev_probe()
294 if (features != dev->features) { in virtio_dev_probe()
295 err = dev->config->finalize_features(dev); in virtio_dev_probe()
301 err = virtio_features_ok(dev); in virtio_dev_probe()
305 err = drv->probe(dev); in virtio_dev_probe()
310 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) in virtio_dev_probe()
311 virtio_device_ready(dev); in virtio_dev_probe()
314 drv->scan(dev); in virtio_dev_probe()
316 virtio_config_enable(dev); in virtio_dev_probe()
320 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_dev_probe()
327 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_remove() local
328 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_remove()
330 virtio_config_disable(dev); in virtio_dev_remove()
332 drv->remove(dev); in virtio_dev_remove()
335 WARN_ON_ONCE(dev->config->get_status(dev)); in virtio_dev_remove()
338 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_dev_remove()
340 of_node_put(dev->dev.of_node); in virtio_dev_remove()
367 static int virtio_device_of_init(struct virtio_device *dev) in virtio_device_of_init() argument
369 struct device_node *np, *pnode = dev_of_node(dev->dev.parent); in virtio_device_of_init()
388 ret = snprintf(compat, sizeof(compat), "virtio,device%x", dev->id.device); in virtio_device_of_init()
401 dev->dev.of_node = np; in virtio_device_of_init()
418 int register_virtio_device(struct virtio_device *dev) in register_virtio_device() argument
422 dev->dev.bus = &virtio_bus; in register_virtio_device()
423 device_initialize(&dev->dev); in register_virtio_device()
430 dev->index = err; in register_virtio_device()
431 err = dev_set_name(&dev->dev, "virtio%u", dev->index); in register_virtio_device()
435 err = virtio_device_of_init(dev); in register_virtio_device()
439 spin_lock_init(&dev->config_lock); in register_virtio_device()
440 dev->config_enabled = false; in register_virtio_device()
441 dev->config_change_pending = false; in register_virtio_device()
443 INIT_LIST_HEAD(&dev->vqs); in register_virtio_device()
444 spin_lock_init(&dev->vqs_list_lock); in register_virtio_device()
448 virtio_reset_device(dev); in register_virtio_device()
451 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in register_virtio_device()
457 err = device_add(&dev->dev); in register_virtio_device()
464 of_node_put(dev->dev.of_node); in register_virtio_device()
466 ida_free(&virtio_index_ida, dev->index); in register_virtio_device()
468 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in register_virtio_device()
473 bool is_virtio_device(struct device *dev) in is_virtio_device() argument
475 return dev->bus == &virtio_bus; in is_virtio_device()
479 void unregister_virtio_device(struct virtio_device *dev) in unregister_virtio_device() argument
481 int index = dev->index; /* save for after device release */ in unregister_virtio_device()
483 device_unregister(&dev->dev); in unregister_virtio_device()
489 int virtio_device_freeze(struct virtio_device *dev) in virtio_device_freeze() argument
491 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_freeze()
494 virtio_config_disable(dev); in virtio_device_freeze()
496 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED; in virtio_device_freeze()
499 ret = drv->freeze(dev); in virtio_device_freeze()
501 virtio_config_enable(dev); in virtio_device_freeze()
510 int virtio_device_restore(struct virtio_device *dev) in virtio_device_restore() argument
512 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_restore()
517 virtio_reset_device(dev); in virtio_device_restore()
520 virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_device_restore()
524 if (dev->failed) in virtio_device_restore()
525 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore()
531 virtio_add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_device_restore()
533 ret = dev->config->finalize_features(dev); in virtio_device_restore()
537 ret = virtio_features_ok(dev); in virtio_device_restore()
542 ret = drv->restore(dev); in virtio_device_restore()
548 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) in virtio_device_restore()
549 virtio_device_ready(dev); in virtio_device_restore()
551 virtio_config_enable(dev); in virtio_device_restore()
556 virtio_add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore()