MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_virtio_input_init

Function rt_virtio_input_init

components/drivers/virtio/virtio_input.c:342–448  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

340}
341
342rt_err_t rt_virtio_input_init(rt_ubase_t *mmio_base, rt_uint32_t irq)
343{
344 rt_uint32_t flag;
345 static int dev_no = 0;
346 char dev_name[RT_NAME_MAX];
347 struct virtio_device *virtio_dev;
348 struct virtio_input_device *virtio_input_dev;
349
350 virtio_input_dev = rt_malloc(sizeof(struct virtio_input_device));
351
352 if (virtio_input_dev == RT_NULL)
353 {
354 goto _alloc_fail;
355 }
356
357 virtio_dev = &virtio_input_dev->virtio_dev;
358 virtio_dev->irq = irq;
359 virtio_dev->mmio_base = mmio_base;
360
361 virtio_input_dev->config = (struct virtio_input_config *)virtio_dev->mmio_config->config;
362 virtio_input_dev->bsct_handler = RT_NULL;
363
364#ifdef RT_USING_SMP
365 rt_spin_lock_init(&virtio_dev->spinlock);
366#endif
367
368 virtio_reset_device(virtio_dev);
369 virtio_status_acknowledge_driver(virtio_dev);
370
371 virtio_dev->mmio_config->driver_features = virtio_dev->mmio_config->device_features & ~(
372 (1 << VIRTIO_F_RING_EVENT_IDX) |
373 (1 << VIRTIO_F_RING_INDIRECT_DESC));
374
375 virtio_status_driver_ok(virtio_dev);
376
377 if (virtio_queues_alloc(virtio_dev, 2) != RT_EOK)
378 {
379 goto _alloc_fail;
380 }
381
382 if (virtio_queue_init(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT, VIRTIO_INPUT_EVENT_QUEUE_SIZE) != RT_EOK)
383 {
384 goto _alloc_fail;
385 }
386
387 if (virtio_queue_init(virtio_dev, VIRTIO_INPUT_QUEUE_STATUS, VIRTIO_INPUT_STATUS_QUEUE_SIZE) != RT_EOK)
388 {
389 virtio_queue_destroy(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT);
390
391 goto _alloc_fail;
392 }
393
394 virtio_input_cfg_select(virtio_input_dev, VIRTIO_INPUT_CFG_ID_DEVIDS, 0);
395
396 if (virtio_input_dev->config->ids.product == EV_ABS)
397 {
398 virtio_input_dev->type = VIRTIO_INPUT_TYPE_TABLET;
399

Callers

nothing calls this directly

Calls 15

rt_mallocFunction · 0.85
virtio_reset_deviceFunction · 0.85
virtio_status_driver_okFunction · 0.85
virtio_queues_allocFunction · 0.85
virtio_queue_initFunction · 0.85
virtio_queue_destroyFunction · 0.85
virtio_input_cfg_selectFunction · 0.85
rt_snprintfFunction · 0.85
rt_mutex_initFunction · 0.85
rt_device_registerFunction · 0.85
virtio_queues_freeFunction · 0.85

Tested by

no test coverage detected