Lines Matching refs:client

266 	struct mousedev_client *client;  in mousedev_notify_readers()  local
272 list_for_each_entry_rcu(client, &mousedev->client_list, node) { in mousedev_notify_readers()
275 spin_lock(&client->packet_lock); in mousedev_notify_readers()
277 p = &client->packets[client->head]; in mousedev_notify_readers()
278 if (client->ready && p->buttons != mousedev->packet.buttons) { in mousedev_notify_readers()
279 new_head = (client->head + 1) % PACKET_QUEUE_LEN; in mousedev_notify_readers()
280 if (new_head != client->tail) { in mousedev_notify_readers()
281 p = &client->packets[client->head = new_head]; in mousedev_notify_readers()
287 p->dx += packet->x - client->pos_x; in mousedev_notify_readers()
288 p->dy += packet->y - client->pos_y; in mousedev_notify_readers()
289 client->pos_x = packet->x; in mousedev_notify_readers()
290 client->pos_y = packet->y; in mousedev_notify_readers()
293 client->pos_x += packet->dx; in mousedev_notify_readers()
294 client->pos_x = client->pos_x < 0 ? in mousedev_notify_readers()
295 0 : (client->pos_x >= xres ? xres : client->pos_x); in mousedev_notify_readers()
296 client->pos_y += packet->dy; in mousedev_notify_readers()
297 client->pos_y = client->pos_y < 0 ? in mousedev_notify_readers()
298 0 : (client->pos_y >= yres ? yres : client->pos_y); in mousedev_notify_readers()
306 p->buttons != client->last_buttons) in mousedev_notify_readers()
307 client->ready = 1; in mousedev_notify_readers()
309 spin_unlock(&client->packet_lock); in mousedev_notify_readers()
311 if (client->ready) { in mousedev_notify_readers()
312 kill_fasync(&client->fasync, SIGIO, POLL_IN); in mousedev_notify_readers()
409 struct mousedev_client *client = file->private_data; in mousedev_fasync() local
411 return fasync_helper(fd, file, on, &client->fasync); in mousedev_fasync()
507 struct mousedev_client *client) in mousedev_attach_client() argument
510 list_add_tail_rcu(&client->node, &mousedev->client_list); in mousedev_attach_client()
515 struct mousedev_client *client) in mousedev_detach_client() argument
518 list_del_rcu(&client->node); in mousedev_detach_client()
525 struct mousedev_client *client = file->private_data; in mousedev_release() local
526 struct mousedev *mousedev = client->mousedev; in mousedev_release()
528 mousedev_detach_client(mousedev, client); in mousedev_release()
529 kfree(client); in mousedev_release()
538 struct mousedev_client *client; in mousedev_open() local
549 client = kzalloc(sizeof(struct mousedev_client), GFP_KERNEL); in mousedev_open()
550 if (!client) in mousedev_open()
553 spin_lock_init(&client->packet_lock); in mousedev_open()
554 client->pos_x = xres / 2; in mousedev_open()
555 client->pos_y = yres / 2; in mousedev_open()
556 client->mousedev = mousedev; in mousedev_open()
557 mousedev_attach_client(mousedev, client); in mousedev_open()
563 file->private_data = client; in mousedev_open()
569 mousedev_detach_client(mousedev, client); in mousedev_open()
570 kfree(client); in mousedev_open()
579 static void mousedev_packet(struct mousedev_client *client, in mousedev_packet() argument
582 struct mousedev_motion *p = &client->packets[client->tail]; in mousedev_packet()
591 switch (client->mode) { in mousedev_packet()
596 client->bufsiz = 4; in mousedev_packet()
604 client->bufsiz = 4; in mousedev_packet()
612 client->bufsiz = 3; in mousedev_packet()
617 if (client->tail == client->head) { in mousedev_packet()
618 client->ready = 0; in mousedev_packet()
619 client->last_buttons = p->buttons; in mousedev_packet()
621 client->tail = (client->tail + 1) % PACKET_QUEUE_LEN; in mousedev_packet()
625 static void mousedev_generate_response(struct mousedev_client *client, in mousedev_generate_response() argument
628 client->ps2[0] = 0xfa; /* ACK */ in mousedev_generate_response()
633 mousedev_packet(client, &client->ps2[1]); in mousedev_generate_response()
634 client->bufsiz++; /* account for leading ACK */ in mousedev_generate_response()
638 switch (client->mode) { in mousedev_generate_response()
640 client->ps2[1] = 0; in mousedev_generate_response()
643 client->ps2[1] = 3; in mousedev_generate_response()
646 client->ps2[1] = 4; in mousedev_generate_response()
649 client->bufsiz = 2; in mousedev_generate_response()
653 client->ps2[1] = 0x60; client->ps2[2] = 3; client->ps2[3] = 200; in mousedev_generate_response()
654 client->bufsiz = 4; in mousedev_generate_response()
658 client->impsseq = client->imexseq = 0; in mousedev_generate_response()
659 client->mode = MOUSEDEV_EMUL_PS2; in mousedev_generate_response()
660 client->ps2[1] = 0xaa; client->ps2[2] = 0x00; in mousedev_generate_response()
661 client->bufsiz = 3; in mousedev_generate_response()
665 client->bufsiz = 1; in mousedev_generate_response()
668 client->buffer = client->bufsiz; in mousedev_generate_response()
674 struct mousedev_client *client = file->private_data; in mousedev_write() local
683 spin_lock_irq(&client->packet_lock); in mousedev_write()
685 if (c == mousedev_imex_seq[client->imexseq]) { in mousedev_write()
686 if (++client->imexseq == MOUSEDEV_SEQ_LEN) { in mousedev_write()
687 client->imexseq = 0; in mousedev_write()
688 client->mode = MOUSEDEV_EMUL_EXPS; in mousedev_write()
691 client->imexseq = 0; in mousedev_write()
693 if (c == mousedev_imps_seq[client->impsseq]) { in mousedev_write()
694 if (++client->impsseq == MOUSEDEV_SEQ_LEN) { in mousedev_write()
695 client->impsseq = 0; in mousedev_write()
696 client->mode = MOUSEDEV_EMUL_IMPS; in mousedev_write()
699 client->impsseq = 0; in mousedev_write()
701 mousedev_generate_response(client, c); in mousedev_write()
703 spin_unlock_irq(&client->packet_lock); in mousedev_write()
706 kill_fasync(&client->fasync, SIGIO, POLL_IN); in mousedev_write()
707 wake_up_interruptible(&client->mousedev->wait); in mousedev_write()
715 struct mousedev_client *client = file->private_data; in mousedev_read() local
716 struct mousedev *mousedev = client->mousedev; in mousedev_read()
717 signed char data[sizeof(client->ps2)]; in mousedev_read()
720 if (!client->ready && !client->buffer && mousedev->exist && in mousedev_read()
725 !mousedev->exist || client->ready || client->buffer); in mousedev_read()
732 spin_lock_irq(&client->packet_lock); in mousedev_read()
734 if (!client->buffer && client->ready) { in mousedev_read()
735 mousedev_packet(client, client->ps2); in mousedev_read()
736 client->buffer = client->bufsiz; in mousedev_read()
739 if (count > client->buffer) in mousedev_read()
740 count = client->buffer; in mousedev_read()
742 memcpy(data, client->ps2 + client->bufsiz - client->buffer, count); in mousedev_read()
743 client->buffer -= count; in mousedev_read()
745 spin_unlock_irq(&client->packet_lock); in mousedev_read()
756 struct mousedev_client *client = file->private_data; in mousedev_poll() local
757 struct mousedev *mousedev = client->mousedev; in mousedev_poll()
763 if (client->ready || client->buffer) in mousedev_poll()
798 struct mousedev_client *client; in mousedev_hangup() local
801 list_for_each_entry(client, &mousedev->client_list, node) in mousedev_hangup()
802 kill_fasync(&client->fasync, SIGIO, POLL_HUP); in mousedev_hangup()