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

Function virtio_input_init

components/drivers/virtio/virtio_input.c:104–140  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

102}
103
104static rt_err_t virtio_input_init(rt_device_t dev)
105{
106 int i;
107 rt_uint16_t idx[VIRTIO_INPUT_QUEUE_MAX_SIZE];
108 struct virtio_input_device *virtio_input_dev = (struct virtio_input_device *)dev;
109 struct virtio_device *virtio_dev = &virtio_input_dev->virtio_dev;
110 struct virtq *queue_event, *queue_status;
111
112 virtio_input_cfg_bits(virtio_input_dev, VIRTIO_INPUT_CFG_EV_BITS, EV_KEY, virtio_input_dev->key_bit, KEY_CNT);
113 virtio_input_cfg_bits(virtio_input_dev, VIRTIO_INPUT_CFG_EV_BITS, EV_REL, virtio_input_dev->rel_bit, REL_CNT);
114 virtio_input_cfg_bits(virtio_input_dev, VIRTIO_INPUT_CFG_EV_BITS, EV_ABS, virtio_input_dev->abs_bit, ABS_CNT);
115
116 queue_event = &virtio_dev->queues[VIRTIO_INPUT_QUEUE_EVENT];
117 queue_status = &virtio_dev->queues[VIRTIO_INPUT_QUEUE_STATUS];
118
119 virtio_alloc_desc_chain(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT, queue_event->num, idx);
120 virtio_alloc_desc_chain(virtio_dev, VIRTIO_INPUT_QUEUE_STATUS, queue_status->num, idx);
121
122 for (i = 0; i < queue_event->num; ++i)
123 {
124 rt_uint16_t id = i;
125 void *addr = &virtio_input_dev->recv_events[i];
126
127 virtio_fill_desc(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT, id,
128 VIRTIO_VA2PA(addr), sizeof(struct virtio_input_event), VIRTQ_DESC_F_WRITE, 0);
129
130 virtio_submit_chain(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT, id);
131 }
132 rt_hw_dsb();
133
134 queue_event->avail->flags = 0;
135 queue_status->avail->flags = VIRTQ_AVAIL_F_NO_INTERRUPT;
136
137 virtio_queue_notify(virtio_dev, VIRTIO_INPUT_QUEUE_EVENT);
138
139 return RT_EOK;
140}
141
142static rt_ssize_t virtio_input_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
143{

Callers

nothing calls this directly

Calls 6

virtio_input_cfg_bitsFunction · 0.85
virtio_alloc_desc_chainFunction · 0.85
virtio_fill_descFunction · 0.85
virtio_submit_chainFunction · 0.85
virtio_queue_notifyFunction · 0.85
rt_hw_dsbFunction · 0.50

Tested by

no test coverage detected