Lines Matching defs:client

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