Lines Matching refs:userio

2  * userio kernel serio device emulation module
28 #include <uapi/linux/userio.h>
30 #define USERIO_NAME "userio"
51 * userio_device_write - Write data from serio to a userio device in userspace
52 * @id: The serio port for the userio device
57 struct userio_device *userio = id->port_data;
60 spin_lock_irqsave(&userio->buf_lock, flags);
62 userio->buf[userio->head] = val;
63 userio->head = (userio->head + 1) % USERIO_BUFSIZE;
65 if (userio->head == userio->tail)
67 "Buffer overflowed, userio client isn't keeping up");
69 spin_unlock_irqrestore(&userio->buf_lock, flags);
71 wake_up_interruptible(&userio->waitq);
78 struct userio_device *userio;
80 userio = kzalloc(sizeof(struct userio_device), GFP_KERNEL);
81 if (!userio)
84 mutex_init(&userio->mutex);
85 spin_lock_init(&userio->buf_lock);
86 init_waitqueue_head(&userio->waitq);
88 userio->serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
89 if (!userio->serio) {
90 kfree(userio);
94 userio->serio->write = userio_device_write;
95 userio->serio->port_data = userio;
97 file->private_data = userio;
104 struct userio_device *userio = file->private_data;
106 if (userio->running) {
111 serio_unregister_port(userio->serio);
113 kfree(userio->serio);
116 kfree(userio);
124 struct userio_device *userio = file->private_data;
138 spin_lock_irqsave(&userio->buf_lock, flags);
140 nonwrap_len = CIRC_CNT_TO_END(userio->head,
141 userio->tail,
145 memcpy(buf, &userio->buf[userio->tail], copylen);
146 userio->tail = (userio->tail + copylen) %
150 spin_unlock_irqrestore(&userio->buf_lock, flags);
166 error = wait_event_interruptible(userio->waitq,
167 userio->head != userio->tail);
182 struct userio_device *userio = file->private_data;
194 error = mutex_lock_interruptible(&userio->mutex);
200 if (!userio->serio->id.type) {
202 "No port type given on /dev/userio\n");
208 if (userio->running) {
215 userio->running = true;
216 serio_register_port(userio->serio);
220 if (userio->running) {
222 "Can't change port type on an already running userio instance\n");
227 userio->serio->id.type = cmd.data;
231 if (!userio->running) {
238 serio_interrupt(userio->serio, cmd.data, 0);
247 mutex_unlock(&userio->mutex);
253 struct userio_device *userio = file->private_data;
255 poll_wait(file, &userio->waitq, wait);
257 if (userio->head != userio->tail)