Lines Matching +full:- +full:- +full:-

4  * top-level directory.
14 #include "hw/qdev-properties.h"
15 #include "hw/virtio/virtio-input.h"
17 #include "standard-headers/linux/input.h"
21 /* ----------------------------------------------------------------- */
28 if (!vinput->active) { in virtio_input_send()
33 if (vinput->qindex == vinput->qsize) { in virtio_input_send()
34 vinput->qsize++; in virtio_input_send()
35 vinput->queue = g_realloc(vinput->queue, vinput->qsize * in virtio_input_send()
36 sizeof(vinput->queue[0])); in virtio_input_send()
38 vinput->queue[vinput->qindex++].event = *event; in virtio_input_send()
41 if (event->type != cpu_to_le16(EV_SYN) || in virtio_input_send()
42 event->code != cpu_to_le16(SYN_REPORT)) { in virtio_input_send()
47 for (i = 0; i < vinput->qindex; i++) { in virtio_input_send()
48 elem = virtqueue_pop(vinput->evt, sizeof(VirtQueueElement)); in virtio_input_send()
50 while (--i >= 0) { in virtio_input_send()
51 virtqueue_unpop(vinput->evt, vinput->queue[i].elem, 0); in virtio_input_send()
53 vinput->qindex = 0; in virtio_input_send()
57 vinput->queue[i].elem = elem; in virtio_input_send()
61 for (i = 0; i < vinput->qindex; i++) { in virtio_input_send()
62 elem = vinput->queue[i].elem; in virtio_input_send()
63 len = iov_from_buf(elem->in_sg, elem->in_num, in virtio_input_send()
64 0, &vinput->queue[i].event, sizeof(virtio_input_event)); in virtio_input_send()
65 virtqueue_push(vinput->evt, elem, len); in virtio_input_send()
68 virtio_notify(VIRTIO_DEVICE(vinput), vinput->evt); in virtio_input_send()
69 vinput->qindex = 0; in virtio_input_send()
86 elem = virtqueue_pop(vinput->sts, sizeof(VirtQueueElement)); in virtio_input_handle_sts()
92 len = iov_to_buf(elem->out_sg, elem->out_num, in virtio_input_handle_sts()
94 if (vic->handle_status) { in virtio_input_handle_sts()
95 vic->handle_status(vinput, &event); in virtio_input_handle_sts()
97 virtqueue_push(vinput->sts, elem, len); in virtio_input_handle_sts()
100 virtio_notify(vdev, vinput->sts); in virtio_input_handle_sts()
109 QTAILQ_FOREACH(cfg, &vinput->cfg_list, node) { in virtio_input_find_config()
110 if (select == cfg->config.select && in virtio_input_find_config()
111 subsel == cfg->config.subsel) { in virtio_input_find_config()
112 return &cfg->config; in virtio_input_find_config()
123 if (virtio_input_find_config(vinput, config->select, config->subsel)) { in virtio_input_add_config()
126 __func__, config->select, config->subsel); in virtio_input_add_config()
131 cfg->config = *config; in virtio_input_add_config()
132 QTAILQ_INSERT_TAIL(&vinput->cfg_list, cfg, node); in virtio_input_add_config()
140 QTAILQ_INIT(&vinput->cfg_list); in virtio_input_init_config()
166 config = virtio_input_find_config(vinput, vinput->cfg_select, in virtio_input_get_config()
167 vinput->cfg_subsel); in virtio_input_get_config()
169 memcpy(config_data, config, vinput->cfg_size); in virtio_input_get_config()
171 memset(config_data, 0, vinput->cfg_size); in virtio_input_get_config()
181 vinput->cfg_select = config->select; in virtio_input_set_config()
182 vinput->cfg_subsel = config->subsel; in virtio_input_set_config()
198 if (!vinput->active) { in virtio_input_set_status()
199 vinput->active = true; in virtio_input_set_status()
200 if (vic->change_active) { in virtio_input_set_status()
201 vic->change_active(vinput); in virtio_input_set_status()
213 if (vinput->active) { in virtio_input_reset()
214 vinput->active = false; in virtio_input_reset()
215 if (vic->change_active) { in virtio_input_reset()
216 vic->change_active(vinput); in virtio_input_reset()
227 vinput->active = vdev->status & VIRTIO_CONFIG_S_DRIVER_OK; in virtio_input_post_load()
228 if (vic->change_active) { in virtio_input_post_load()
229 vic->change_active(vinput); in virtio_input_post_load()
242 if (vic->realize) { in virtio_input_device_realize()
243 vic->realize(dev, &local_err); in virtio_input_device_realize()
251 vinput->serial); in virtio_input_device_realize()
253 QTAILQ_FOREACH(cfg, &vinput->cfg_list, node) { in virtio_input_device_realize()
254 if (vinput->cfg_size < cfg->config.size) { in virtio_input_device_realize()
255 vinput->cfg_size = cfg->config.size; in virtio_input_device_realize()
258 vinput->cfg_size += 8; in virtio_input_device_realize()
259 assert(vinput->cfg_size <= sizeof(virtio_input_config)); in virtio_input_device_realize()
261 virtio_init(vdev, VIRTIO_ID_INPUT, vinput->cfg_size); in virtio_input_device_realize()
262 vinput->evt = virtio_add_queue(vdev, 64, virtio_input_handle_evt); in virtio_input_device_realize()
263 vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts); in virtio_input_device_realize()
271 QTAILQ_FOREACH_SAFE(cfg, &vinput->cfg_list, node, next) { in virtio_input_finalize()
272 QTAILQ_REMOVE(&vinput->cfg_list, cfg, node); in virtio_input_finalize()
276 g_free(vinput->queue); in virtio_input_finalize()
285 if (vic->unrealize) { in virtio_input_device_unrealize()
286 vic->unrealize(dev); in virtio_input_device_unrealize()
288 virtio_delete_queue(vinput->evt); in virtio_input_device_unrealize()
289 virtio_delete_queue(vinput->sts); in virtio_input_device_unrealize()
294 .name = "virtio-input",
314 dc->vmsd = &vmstate_virtio_input; in virtio_input_class_init()
315 set_bit(DEVICE_CATEGORY_INPUT, dc->categories); in virtio_input_class_init()
316 vdc->realize = virtio_input_device_realize; in virtio_input_class_init()
317 vdc->unrealize = virtio_input_device_unrealize; in virtio_input_class_init()
318 vdc->get_config = virtio_input_get_config; in virtio_input_class_init()
319 vdc->set_config = virtio_input_set_config; in virtio_input_class_init()
320 vdc->get_features = virtio_input_get_features; in virtio_input_class_init()
321 vdc->set_status = virtio_input_set_status; in virtio_input_class_init()
322 vdc->reset = virtio_input_reset; in virtio_input_class_init()
335 /* ----------------------------------------------------------------- */