Lines Matching defs:serio_raw

28 struct serio_raw {
44 struct serio_raw *serio_raw;
62 static struct serio_raw *serio_raw_locate(int minor)
64 struct serio_raw *serio_raw;
66 list_for_each_entry(serio_raw, &serio_raw_list, node) {
67 if (serio_raw->dev.minor == minor)
68 return serio_raw;
76 struct serio_raw *serio_raw;
84 serio_raw = serio_raw_locate(iminor(inode));
85 if (!serio_raw) {
90 if (serio_raw->dead) {
101 client->serio_raw = serio_raw;
104 kref_get(&serio_raw->kref);
106 serio_pause_rx(serio_raw->serio);
107 list_add_tail(&client->node, &serio_raw->client_list);
108 serio_continue_rx(serio_raw->serio);
117 struct serio_raw *serio_raw =
118 container_of(kref, struct serio_raw, kref);
120 put_device(&serio_raw->serio->dev);
121 kfree(serio_raw);
127 struct serio_raw *serio_raw = client->serio_raw;
129 serio_pause_rx(serio_raw->serio);
131 serio_continue_rx(serio_raw->serio);
135 kref_put(&serio_raw->kref, serio_raw_free);
140 static bool serio_raw_fetch_byte(struct serio_raw *serio_raw, char *c)
144 serio_pause_rx(serio_raw->serio);
146 empty = serio_raw->head == serio_raw->tail;
148 *c = serio_raw->queue[serio_raw->tail];
149 serio_raw->tail = (serio_raw->tail + 1) % SERIO_RAW_QUEUE_LEN;
152 serio_continue_rx(serio_raw->serio);
161 struct serio_raw *serio_raw = client->serio_raw;
167 if (serio_raw->dead)
170 if (serio_raw->head == serio_raw->tail &&
177 while (read < count && serio_raw_fetch_byte(serio_raw, &c)) {
187 error = wait_event_interruptible(serio_raw->wait,
188 serio_raw->head != serio_raw->tail ||
189 serio_raw->dead);
202 struct serio_raw *serio_raw = client->serio_raw;
210 if (serio_raw->dead) {
224 if (serio_write(serio_raw->serio, c)) {
242 struct serio_raw *serio_raw = client->serio_raw;
245 poll_wait(file, &serio_raw->wait, wait);
247 mask = serio_raw->dead ? EPOLLHUP | EPOLLERR : EPOLLOUT | EPOLLWRNORM;
248 if (serio_raw->head != serio_raw->tail)
273 struct serio_raw *serio_raw = serio_get_drvdata(serio);
275 unsigned int head = serio_raw->head;
278 serio_raw->queue[head] = data;
280 if (likely(head != serio_raw->tail)) {
281 serio_raw->head = head;
282 list_for_each_entry(client, &serio_raw->client_list, node)
284 wake_up_interruptible(&serio_raw->wait);
293 struct serio_raw *serio_raw;
296 serio_raw = kzalloc(sizeof(struct serio_raw), GFP_KERNEL);
297 if (!serio_raw) {
302 snprintf(serio_raw->name, sizeof(serio_raw->name),
303 "serio_raw%ld", (long)atomic_inc_return(&serio_raw_no));
304 kref_init(&serio_raw->kref);
305 INIT_LIST_HEAD(&serio_raw->client_list);
306 init_waitqueue_head(&serio_raw->wait);
308 serio_raw->serio = serio;
311 serio_set_drvdata(serio, serio_raw);
321 list_add_tail(&serio_raw->node, &serio_raw_list);
324 serio_raw->dev.minor = PSMOUSE_MINOR;
325 serio_raw->dev.name = serio_raw->name;
326 serio_raw->dev.parent = &serio->dev;
327 serio_raw->dev.fops = &serio_raw_fops;
329 err = misc_register(&serio_raw->dev);
331 serio_raw->dev.minor = MISC_DYNAMIC_MINOR;
332 err = misc_register(&serio_raw->dev);
343 serio->phys, serio_raw->name, serio_raw->dev.minor);
347 list_del_init(&serio_raw->node);
352 kref_put(&serio_raw->kref, serio_raw_free);
358 struct serio_raw *serio_raw = serio_get_drvdata(serio);
361 if (!drv || !serio_raw) {
378 static void serio_raw_hangup(struct serio_raw *serio_raw)
382 serio_pause_rx(serio_raw->serio);
383 list_for_each_entry(client, &serio_raw->client_list, node)
385 serio_continue_rx(serio_raw->serio);
387 wake_up_interruptible(&serio_raw->wait);
393 struct serio_raw *serio_raw = serio_get_drvdata(serio);
395 misc_deregister(&serio_raw->dev);
398 serio_raw->dead = true;
399 list_del_init(&serio_raw->node);
402 serio_raw_hangup(serio_raw);
405 kref_put(&serio_raw->kref, serio_raw_free);
430 .name = "serio_raw",