Lines Matching refs:dev
14 struct virtio_device *dev = dev_to_virtio(_d); in device_show() local
15 return sprintf(buf, "0x%04x\n", dev->id.device); in device_show()
22 struct virtio_device *dev = dev_to_virtio(_d); in vendor_show() local
23 return sprintf(buf, "0x%04x\n", dev->id.vendor); in vendor_show()
30 struct virtio_device *dev = dev_to_virtio(_d); in status_show() local
31 return sprintf(buf, "0x%08x\n", dev->config->get_status(dev)); in status_show()
38 struct virtio_device *dev = dev_to_virtio(_d); in modalias_show() local
40 dev->id.device, dev->id.vendor); in modalias_show()
47 struct virtio_device *dev = dev_to_virtio(_d); in features_show() local
53 for (i = 0; i < sizeof(dev->features)*8; i++) in features_show()
55 __virtio_test_bit(dev, i) ? '1' : '0'); in features_show()
71 static inline int virtio_id_match(const struct virtio_device *dev, in virtio_id_match() argument
74 if (id->device != dev->id.device && id->device != VIRTIO_DEV_ANY_ID) in virtio_id_match()
77 return id->vendor == VIRTIO_DEV_ANY_ID || id->vendor == dev->id.vendor; in virtio_id_match()
85 struct virtio_device *dev = dev_to_virtio(_dv); in virtio_dev_match() local
90 if (virtio_id_match(dev, &ids[i])) in virtio_dev_match()
97 struct virtio_device *dev = dev_to_virtio(_dv); in virtio_uevent() local
100 dev->id.device, dev->id.vendor); in virtio_uevent()
103 static void add_status(struct virtio_device *dev, unsigned status) in add_status() argument
105 dev->config->set_status(dev, dev->config->get_status(dev) | status); in add_status()
112 struct virtio_driver *drv = drv_to_virtio(vdev->dev.driver); in virtio_check_driver_offered_feature()
128 static void __virtio_config_changed(struct virtio_device *dev) in __virtio_config_changed() argument
130 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in __virtio_config_changed()
132 if (!dev->config_enabled) in __virtio_config_changed()
133 dev->config_change_pending = true; in __virtio_config_changed()
135 drv->config_changed(dev); 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()
148 static void virtio_config_disable(struct virtio_device *dev) in virtio_config_disable() argument
150 spin_lock_irq(&dev->config_lock); in virtio_config_disable()
151 dev->config_enabled = false; in virtio_config_disable()
152 spin_unlock_irq(&dev->config_lock); in virtio_config_disable()
155 static void virtio_config_enable(struct virtio_device *dev) in virtio_config_enable() argument
157 spin_lock_irq(&dev->config_lock); in virtio_config_enable()
158 dev->config_enabled = true; in virtio_config_enable()
159 if (dev->config_change_pending) in virtio_config_enable()
160 __virtio_config_changed(dev); in virtio_config_enable()
161 dev->config_change_pending = false; in virtio_config_enable()
162 spin_unlock_irq(&dev->config_lock); in virtio_config_enable()
165 static int virtio_finalize_features(struct virtio_device *dev) in virtio_finalize_features() argument
167 int ret = dev->config->finalize_features(dev); in virtio_finalize_features()
173 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) in virtio_finalize_features()
176 add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK); in virtio_finalize_features()
177 status = dev->config->get_status(dev); in virtio_finalize_features()
179 dev_err(&dev->dev, "virtio: device refuses features: %x\n", in virtio_finalize_features()
189 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_probe() local
190 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_probe()
196 add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_dev_probe()
199 device_features = dev->config->get_features(dev); in virtio_dev_probe()
222 dev->features = driver_features & device_features; in virtio_dev_probe()
224 dev->features = driver_features_legacy & device_features; in virtio_dev_probe()
229 __virtio_set_bit(dev, i); in virtio_dev_probe()
231 err = virtio_finalize_features(dev); in virtio_dev_probe()
235 err = drv->probe(dev); in virtio_dev_probe()
240 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) in virtio_dev_probe()
241 virtio_device_ready(dev); in virtio_dev_probe()
244 drv->scan(dev); in virtio_dev_probe()
246 virtio_config_enable(dev); in virtio_dev_probe()
250 add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_dev_probe()
257 struct virtio_device *dev = dev_to_virtio(_d); in virtio_dev_remove() local
258 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_dev_remove()
260 virtio_config_disable(dev); in virtio_dev_remove()
262 drv->remove(dev); in virtio_dev_remove()
265 WARN_ON_ONCE(dev->config->get_status(dev)); in virtio_dev_remove()
268 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_dev_remove()
296 int register_virtio_device(struct virtio_device *dev) in register_virtio_device() argument
300 dev->dev.bus = &virtio_bus; in register_virtio_device()
307 dev->index = err; in register_virtio_device()
308 dev_set_name(&dev->dev, "virtio%u", dev->index); in register_virtio_device()
310 spin_lock_init(&dev->config_lock); in register_virtio_device()
311 dev->config_enabled = false; in register_virtio_device()
312 dev->config_change_pending = false; in register_virtio_device()
316 dev->config->reset(dev); in register_virtio_device()
319 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in register_virtio_device()
321 INIT_LIST_HEAD(&dev->vqs); in register_virtio_device()
325 err = device_register(&dev->dev); in register_virtio_device()
328 add_status(dev, VIRTIO_CONFIG_S_FAILED); in register_virtio_device()
333 void unregister_virtio_device(struct virtio_device *dev) in unregister_virtio_device() argument
335 int index = dev->index; /* save for after device release */ in unregister_virtio_device()
337 device_unregister(&dev->dev); in unregister_virtio_device()
343 int virtio_device_freeze(struct virtio_device *dev) in virtio_device_freeze() argument
345 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_freeze()
347 virtio_config_disable(dev); in virtio_device_freeze()
349 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED; in virtio_device_freeze()
352 return drv->freeze(dev); in virtio_device_freeze()
358 int virtio_device_restore(struct virtio_device *dev) in virtio_device_restore() argument
360 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); in virtio_device_restore()
365 dev->config->reset(dev); in virtio_device_restore()
368 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); in virtio_device_restore()
372 if (dev->failed) in virtio_device_restore()
373 add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore()
379 add_status(dev, VIRTIO_CONFIG_S_DRIVER); in virtio_device_restore()
381 ret = virtio_finalize_features(dev); in virtio_device_restore()
386 ret = drv->restore(dev); in virtio_device_restore()
392 add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK); in virtio_device_restore()
394 virtio_config_enable(dev); in virtio_device_restore()
399 add_status(dev, VIRTIO_CONFIG_S_FAILED); in virtio_device_restore()