Lines Matching refs:userio

57 	struct userio_device *userio = id->port_data;  in userio_device_write()  local
59 scoped_guard(spinlock_irqsave, &userio->buf_lock) { in userio_device_write()
60 userio->buf[userio->head] = val; in userio_device_write()
61 userio->head = (userio->head + 1) % USERIO_BUFSIZE; in userio_device_write()
63 if (userio->head == userio->tail) in userio_device_write()
68 wake_up_interruptible(&userio->waitq); in userio_device_write()
75 struct userio_device *userio __free(kfree) = in userio_char_open()
76 kzalloc(sizeof(*userio), GFP_KERNEL); in userio_char_open()
77 if (!userio) in userio_char_open()
80 mutex_init(&userio->mutex); in userio_char_open()
81 spin_lock_init(&userio->buf_lock); in userio_char_open()
82 init_waitqueue_head(&userio->waitq); in userio_char_open()
84 userio->serio = kzalloc(sizeof(*userio->serio), GFP_KERNEL); in userio_char_open()
85 if (!userio->serio) in userio_char_open()
88 userio->serio->write = userio_device_write; in userio_char_open()
89 userio->serio->port_data = userio; in userio_char_open()
91 file->private_data = no_free_ptr(userio); in userio_char_open()
98 struct userio_device *userio = file->private_data; in userio_char_release() local
100 if (userio->running) { in userio_char_release()
105 serio_unregister_port(userio->serio); in userio_char_release()
107 kfree(userio->serio); in userio_char_release()
110 kfree(userio); in userio_char_release()
115 static size_t userio_fetch_data(struct userio_device *userio, u8 *buf, in userio_fetch_data() argument
120 guard(spinlock_irqsave)(&userio->buf_lock); in userio_fetch_data()
122 available = CIRC_CNT_TO_END(userio->head, userio->tail, in userio_fetch_data()
126 memcpy(buf, &userio->buf[userio->tail], len); in userio_fetch_data()
127 userio->tail = (userio->tail + len) % USERIO_BUFSIZE; in userio_fetch_data()
137 struct userio_device *userio = file->private_data; in userio_char_read() local
150 available = userio_fetch_data(userio, buf, count, &copylen); in userio_char_read()
165 error = wait_event_interruptible(userio->waitq, in userio_char_read()
166 userio->head != userio->tail); in userio_char_read()
178 static int userio_execute_cmd(struct userio_device *userio, in userio_execute_cmd() argument
183 if (!userio->serio->id.type) { in userio_execute_cmd()
189 if (userio->running) { in userio_execute_cmd()
195 userio->running = true; in userio_execute_cmd()
196 serio_register_port(userio->serio); in userio_execute_cmd()
200 if (userio->running) { in userio_execute_cmd()
206 userio->serio->id.type = cmd->data; in userio_execute_cmd()
210 if (!userio->running) { in userio_execute_cmd()
216 serio_interrupt(userio->serio, cmd->data, 0); in userio_execute_cmd()
229 struct userio_device *userio = file->private_data; in userio_char_write() local
241 scoped_cond_guard(mutex_intr, return -EINTR, &userio->mutex) { in userio_char_write()
242 error = userio_execute_cmd(userio, &cmd); in userio_char_write()
252 struct userio_device *userio = file->private_data; in userio_char_poll() local
254 poll_wait(file, &userio->waitq, wait); in userio_char_poll()
256 if (userio->head != userio->tail) in userio_char_poll()