Lines Matching defs:vi

24 static void virtinput_queue_evtbuf(struct virtio_input *vi,
30 virtqueue_add_inbuf(vi->evt, sg, 1, evtbuf, GFP_ATOMIC);
35 struct virtio_input *vi = vq->vdev->priv;
40 spin_lock_irqsave(&vi->lock, flags);
41 if (vi->ready) {
42 while ((event = virtqueue_get_buf(vi->evt, &len)) != NULL) {
43 spin_unlock_irqrestore(&vi->lock, flags);
44 input_event(vi->idev,
48 spin_lock_irqsave(&vi->lock, flags);
49 virtinput_queue_evtbuf(vi, event);
53 spin_unlock_irqrestore(&vi->lock, flags);
60 static int virtinput_send_status(struct virtio_input *vi,
80 if (vi->idev->mt && type == EV_MSC && code == MSC_TIMESTAMP)
92 spin_lock_irqsave(&vi->lock, flags);
93 if (vi->ready) {
94 rc = virtqueue_add_outbuf(vi->sts, sg, 1, stsbuf, GFP_ATOMIC);
95 virtqueue_kick(vi->sts);
99 spin_unlock_irqrestore(&vi->lock, flags);
108 struct virtio_input *vi = vq->vdev->priv;
113 spin_lock_irqsave(&vi->lock, flags);
114 while ((stsbuf = virtqueue_get_buf(vi->sts, &len)) != NULL)
116 spin_unlock_irqrestore(&vi->lock, flags);
122 struct virtio_input *vi = input_get_drvdata(idev);
124 return virtinput_send_status(vi, type, code, value);
127 static u8 virtinput_cfg_select(struct virtio_input *vi,
132 virtio_cwrite_le(vi->vdev, struct virtio_input_config, select, &select);
133 virtio_cwrite_le(vi->vdev, struct virtio_input_config, subsel, &subsel);
134 virtio_cread_le(vi->vdev, struct virtio_input_config, size, &size);
138 static void virtinput_cfg_bits(struct virtio_input *vi, int select, int subsel,
145 bytes = virtinput_cfg_select(vi, select, subsel);
159 virtio_cread_bytes(vi->vdev, offsetof(struct virtio_input_config,
169 __set_bit(subsel, vi->idev->evbit);
172 static void virtinput_cfg_abs(struct virtio_input *vi, int abs)
176 virtinput_cfg_select(vi, VIRTIO_INPUT_CFG_ABS_INFO, abs);
177 virtio_cread_le(vi->vdev, struct virtio_input_config, u.abs.min, &mi);
178 virtio_cread_le(vi->vdev, struct virtio_input_config, u.abs.max, &ma);
179 virtio_cread_le(vi->vdev, struct virtio_input_config, u.abs.res, &re);
180 virtio_cread_le(vi->vdev, struct virtio_input_config, u.abs.fuzz, &fu);
181 virtio_cread_le(vi->vdev, struct virtio_input_config, u.abs.flat, &fl);
182 input_set_abs_params(vi->idev, abs, mi, ma, fu, fl);
183 input_abs_set_res(vi->idev, abs, re);
186 static int virtinput_init_vqs(struct virtio_input *vi)
194 err = virtio_find_vqs(vi->vdev, 2, vqs, cbs, names, NULL);
197 vi->evt = vqs[0];
198 vi->sts = vqs[1];
203 static void virtinput_fill_evt(struct virtio_input *vi)
208 spin_lock_irqsave(&vi->lock, flags);
209 size = virtqueue_get_vring_size(vi->evt);
210 if (size > ARRAY_SIZE(vi->evts))
211 size = ARRAY_SIZE(vi->evts);
213 virtinput_queue_evtbuf(vi, &vi->evts[i]);
214 virtqueue_kick(vi->evt);
215 spin_unlock_irqrestore(&vi->lock, flags);
220 struct virtio_input *vi;
228 vi = kzalloc(sizeof(*vi), GFP_KERNEL);
229 if (!vi)
232 vdev->priv = vi;
233 vi->vdev = vdev;
234 spin_lock_init(&vi->lock);
236 err = virtinput_init_vqs(vi);
240 vi->idev = input_allocate_device();
241 if (!vi->idev) {
245 input_set_drvdata(vi->idev, vi);
247 size = virtinput_cfg_select(vi, VIRTIO_INPUT_CFG_ID_NAME, 0);
248 virtio_cread_bytes(vi->vdev, offsetof(struct virtio_input_config,
250 vi->name, min(size, sizeof(vi->name)));
251 size = virtinput_cfg_select(vi, VIRTIO_INPUT_CFG_ID_SERIAL, 0);
252 virtio_cread_bytes(vi->vdev, offsetof(struct virtio_input_config,
254 vi->serial, min(size, sizeof(vi->serial)));
255 snprintf(vi->phys, sizeof(vi->phys),
257 vi->idev->name = vi->name;
258 vi->idev->phys = vi->phys;
259 vi->idev->uniq = vi->serial;
261 size = virtinput_cfg_select(vi, VIRTIO_INPUT_CFG_ID_DEVIDS, 0);
263 virtio_cread_le(vi->vdev, struct virtio_input_config,
264 u.ids.bustype, &vi->idev->id.bustype);
265 virtio_cread_le(vi->vdev, struct virtio_input_config,
266 u.ids.vendor, &vi->idev->id.vendor);
267 virtio_cread_le(vi->vdev, struct virtio_input_config,
268 u.ids.product, &vi->idev->id.product);
269 virtio_cread_le(vi->vdev, struct virtio_input_config,
270 u.ids.version, &vi->idev->id.version);
272 vi->idev->id.bustype = BUS_VIRTUAL;
275 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_PROP_BITS, 0,
276 vi->idev->propbit, INPUT_PROP_CNT);
277 size = virtinput_cfg_select(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_REP);
279 __set_bit(EV_REP, vi->idev->evbit);
281 vi->idev->dev.parent = &vdev->dev;
282 vi->idev->event = virtinput_status;
285 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_KEY,
286 vi->idev->keybit, KEY_CNT);
287 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_REL,
288 vi->idev->relbit, REL_CNT);
289 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_ABS,
290 vi->idev->absbit, ABS_CNT);
291 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_MSC,
292 vi->idev->mscbit, MSC_CNT);
293 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_SW,
294 vi->idev->swbit, SW_CNT);
297 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_LED,
298 vi->idev->ledbit, LED_CNT);
299 virtinput_cfg_bits(vi, VIRTIO_INPUT_CFG_EV_BITS, EV_SND,
300 vi->idev->sndbit, SND_CNT);
302 if (test_bit(EV_ABS, vi->idev->evbit)) {
304 if (!test_bit(abs, vi->idev->absbit))
306 virtinput_cfg_abs(vi, abs);
309 if (test_bit(ABS_MT_SLOT, vi->idev->absbit)) {
310 nslots = input_abs_get_max(vi->idev, ABS_MT_SLOT) + 1;
311 err = input_mt_init_slots(vi->idev, nslots, 0);
318 vi->ready = true;
319 err = input_register_device(vi->idev);
323 virtinput_fill_evt(vi);
327 spin_lock_irqsave(&vi->lock, flags);
328 vi->ready = false;
329 spin_unlock_irqrestore(&vi->lock, flags);
331 input_free_device(vi->idev);
335 kfree(vi);
341 struct virtio_input *vi = vdev->priv;
345 spin_lock_irqsave(&vi->lock, flags);
346 vi->ready = false;
347 spin_unlock_irqrestore(&vi->lock, flags);
349 input_unregister_device(vi->idev);
351 while ((buf = virtqueue_detach_unused_buf(vi->sts)) != NULL)
354 kfree(vi);
360 struct virtio_input *vi = vdev->priv;
363 spin_lock_irqsave(&vi->lock, flags);
364 vi->ready = false;
365 spin_unlock_irqrestore(&vi->lock, flags);
373 struct virtio_input *vi = vdev->priv;
376 err = virtinput_init_vqs(vi);
381 vi->ready = true;
382 virtinput_fill_evt(vi);