Lines Matching full:client

264 	struct mousedev_client *client;  in mousedev_notify_readers()  local
270 list_for_each_entry_rcu(client, &mousedev->client_list, node) { in mousedev_notify_readers()
273 spin_lock(&client->packet_lock); in mousedev_notify_readers()
275 p = &client->packets[client->head]; in mousedev_notify_readers()
276 if (client->ready && p->buttons != mousedev->packet.buttons) { in mousedev_notify_readers()
277 new_head = (client->head + 1) % PACKET_QUEUE_LEN; in mousedev_notify_readers()
278 if (new_head != client->tail) { in mousedev_notify_readers()
279 p = &client->packets[client->head = new_head]; in mousedev_notify_readers()
285 p->dx += packet->x - client->pos_x; in mousedev_notify_readers()
286 p->dy += packet->y - client->pos_y; in mousedev_notify_readers()
287 client->pos_x = packet->x; in mousedev_notify_readers()
288 client->pos_y = packet->y; in mousedev_notify_readers()
291 client->pos_x += packet->dx; in mousedev_notify_readers()
292 client->pos_x = clamp_val(client->pos_x, 0, xres); in mousedev_notify_readers()
294 client->pos_y += packet->dy; in mousedev_notify_readers()
295 client->pos_y = clamp_val(client->pos_y, 0, yres); in mousedev_notify_readers()
303 p->buttons != client->last_buttons) in mousedev_notify_readers()
304 client->ready = 1; in mousedev_notify_readers()
306 spin_unlock(&client->packet_lock); in mousedev_notify_readers()
308 if (client->ready) { in mousedev_notify_readers()
309 kill_fasync(&client->fasync, SIGIO, POLL_IN); in mousedev_notify_readers()
406 struct mousedev_client *client = file->private_data; in mousedev_fasync() local
408 return fasync_helper(fd, file, on, &client->fasync); in mousedev_fasync()
504 struct mousedev_client *client) in mousedev_attach_client() argument
507 list_add_tail_rcu(&client->node, &mousedev->client_list); in mousedev_attach_client()
512 struct mousedev_client *client) in mousedev_detach_client() argument
515 list_del_rcu(&client->node); in mousedev_detach_client()
522 struct mousedev_client *client = file->private_data; in mousedev_release() local
523 struct mousedev *mousedev = client->mousedev; in mousedev_release()
525 mousedev_detach_client(mousedev, client); in mousedev_release()
526 kfree(client); in mousedev_release()
535 struct mousedev_client *client; in mousedev_open() local
546 client = kzalloc_obj(struct mousedev_client); in mousedev_open()
547 if (!client) in mousedev_open()
550 spin_lock_init(&client->packet_lock); in mousedev_open()
551 client->pos_x = xres / 2; in mousedev_open()
552 client->pos_y = yres / 2; in mousedev_open()
553 client->mousedev = mousedev; in mousedev_open()
554 mousedev_attach_client(mousedev, client); in mousedev_open()
560 file->private_data = client; in mousedev_open()
566 mousedev_detach_client(mousedev, client); in mousedev_open()
567 kfree(client); in mousedev_open()
571 static void mousedev_packet(struct mousedev_client *client, u8 *ps2_data) in mousedev_packet() argument
573 struct mousedev_motion *p = &client->packets[client->tail]; in mousedev_packet()
588 switch (client->mode) { in mousedev_packet()
594 client->bufsiz = 4; in mousedev_packet()
605 client->bufsiz = 4; in mousedev_packet()
615 client->bufsiz = 3; in mousedev_packet()
620 if (client->tail == client->head) { in mousedev_packet()
621 client->ready = 0; in mousedev_packet()
622 client->last_buttons = p->buttons; in mousedev_packet()
624 client->tail = (client->tail + 1) % PACKET_QUEUE_LEN; in mousedev_packet()
628 static void mousedev_generate_response(struct mousedev_client *client, in mousedev_generate_response() argument
631 client->ps2[0] = 0xfa; /* ACK */ in mousedev_generate_response()
636 mousedev_packet(client, &client->ps2[1]); in mousedev_generate_response()
637 client->bufsiz++; /* account for leading ACK */ in mousedev_generate_response()
641 switch (client->mode) { in mousedev_generate_response()
643 client->ps2[1] = 0; in mousedev_generate_response()
646 client->ps2[1] = 3; in mousedev_generate_response()
649 client->ps2[1] = 4; in mousedev_generate_response()
652 client->bufsiz = 2; in mousedev_generate_response()
656 client->ps2[1] = 0x60; client->ps2[2] = 3; client->ps2[3] = 200; in mousedev_generate_response()
657 client->bufsiz = 4; in mousedev_generate_response()
661 client->impsseq = client->imexseq = 0; in mousedev_generate_response()
662 client->mode = MOUSEDEV_EMUL_PS2; in mousedev_generate_response()
663 client->ps2[1] = 0xaa; client->ps2[2] = 0x00; in mousedev_generate_response()
664 client->bufsiz = 3; in mousedev_generate_response()
668 client->bufsiz = 1; in mousedev_generate_response()
671 client->buffer = client->bufsiz; in mousedev_generate_response()
677 struct mousedev_client *client = file->private_data; in mousedev_write() local
686 spin_lock_irq(&client->packet_lock); in mousedev_write()
688 if (c == mousedev_imex_seq[client->imexseq]) { in mousedev_write()
689 if (++client->imexseq == MOUSEDEV_SEQ_LEN) { in mousedev_write()
690 client->imexseq = 0; in mousedev_write()
691 client->mode = MOUSEDEV_EMUL_EXPS; in mousedev_write()
694 client->imexseq = 0; in mousedev_write()
696 if (c == mousedev_imps_seq[client->impsseq]) { in mousedev_write()
697 if (++client->impsseq == MOUSEDEV_SEQ_LEN) { in mousedev_write()
698 client->impsseq = 0; in mousedev_write()
699 client->mode = MOUSEDEV_EMUL_IMPS; in mousedev_write()
702 client->impsseq = 0; in mousedev_write()
704 mousedev_generate_response(client, c); in mousedev_write()
706 spin_unlock_irq(&client->packet_lock); in mousedev_write()
710 kill_fasync(&client->fasync, SIGIO, POLL_IN); in mousedev_write()
711 wake_up_interruptible(&client->mousedev->wait); in mousedev_write()
719 struct mousedev_client *client = file->private_data; in mousedev_read() local
720 struct mousedev *mousedev = client->mousedev; in mousedev_read()
721 u8 data[sizeof(client->ps2)]; in mousedev_read()
724 if (!client->ready && !client->buffer && mousedev->exist && in mousedev_read()
729 !mousedev->exist || client->ready || client->buffer); in mousedev_read()
736 spin_lock_irq(&client->packet_lock); in mousedev_read()
738 if (!client->buffer && client->ready) { in mousedev_read()
739 mousedev_packet(client, client->ps2); in mousedev_read()
740 client->buffer = client->bufsiz; in mousedev_read()
743 if (count > client->buffer) in mousedev_read()
744 count = client->buffer; in mousedev_read()
746 memcpy(data, client->ps2 + client->bufsiz - client->buffer, count); in mousedev_read()
747 client->buffer -= count; in mousedev_read()
749 spin_unlock_irq(&client->packet_lock); in mousedev_read()
760 struct mousedev_client *client = file->private_data; in mousedev_poll() local
761 struct mousedev *mousedev = client->mousedev; in mousedev_poll()
767 if (client->ready || client->buffer) in mousedev_poll()
802 struct mousedev_client *client; in mousedev_hangup() local
805 list_for_each_entry(client, &mousedev->client_list, node) in mousedev_hangup()
806 kill_fasync(&client->fasync, SIGIO, POLL_HUP); in mousedev_hangup()