Lines Matching refs:client

94 static void joydev_pass_event(struct joydev_client *client,  in joydev_pass_event()  argument
97 struct joydev *joydev = client->joydev; in joydev_pass_event()
102 spin_lock(&client->buffer_lock); in joydev_pass_event()
104 client->buffer[client->head] = *event; in joydev_pass_event()
106 if (client->startup == joydev->nabs + joydev->nkey) { in joydev_pass_event()
107 client->head++; in joydev_pass_event()
108 client->head &= JOYDEV_BUFFER_SIZE - 1; in joydev_pass_event()
109 if (client->tail == client->head) in joydev_pass_event()
110 client->startup = 0; in joydev_pass_event()
113 spin_unlock(&client->buffer_lock); in joydev_pass_event()
115 kill_fasync(&client->fasync, SIGIO, POLL_IN); in joydev_pass_event()
122 struct joydev_client *client; in joydev_event() local
152 list_for_each_entry_rcu(client, &joydev->client_list, node) in joydev_event()
153 joydev_pass_event(client, &event); in joydev_event()
161 struct joydev_client *client = file->private_data; in joydev_fasync() local
163 return fasync_helper(fd, file, on, &client->fasync); in joydev_fasync()
175 struct joydev_client *client) in joydev_attach_client() argument
178 list_add_tail_rcu(&client->node, &joydev->client_list); in joydev_attach_client()
183 struct joydev_client *client) in joydev_detach_client() argument
186 list_del_rcu(&client->node); in joydev_detach_client()
227 struct joydev_client *client; in joydev_hangup() local
230 list_for_each_entry(client, &joydev->client_list, node) in joydev_hangup()
231 kill_fasync(&client->fasync, SIGIO, POLL_HUP); in joydev_hangup()
239 struct joydev_client *client = file->private_data; in joydev_release() local
240 struct joydev *joydev = client->joydev; in joydev_release()
242 joydev_detach_client(joydev, client); in joydev_release()
243 kfree(client); in joydev_release()
254 struct joydev_client *client; in joydev_open() local
257 client = kzalloc(sizeof(struct joydev_client), GFP_KERNEL); in joydev_open()
258 if (!client) in joydev_open()
261 spin_lock_init(&client->buffer_lock); in joydev_open()
262 client->joydev = joydev; in joydev_open()
263 joydev_attach_client(joydev, client); in joydev_open()
269 file->private_data = client; in joydev_open()
275 joydev_detach_client(joydev, client); in joydev_open()
276 kfree(client); in joydev_open()
280 static int joydev_generate_startup_event(struct joydev_client *client, in joydev_generate_startup_event() argument
284 struct joydev *joydev = client->joydev; in joydev_generate_startup_event()
287 spin_lock_irq(&client->buffer_lock); in joydev_generate_startup_event()
289 have_event = client->startup < joydev->nabs + joydev->nkey; in joydev_generate_startup_event()
294 if (client->startup < joydev->nkey) { in joydev_generate_startup_event()
296 event->number = client->startup; in joydev_generate_startup_event()
301 event->number = client->startup - joydev->nkey; in joydev_generate_startup_event()
304 client->startup++; in joydev_generate_startup_event()
307 spin_unlock_irq(&client->buffer_lock); in joydev_generate_startup_event()
312 static int joydev_fetch_next_event(struct joydev_client *client, in joydev_fetch_next_event() argument
317 spin_lock_irq(&client->buffer_lock); in joydev_fetch_next_event()
319 have_event = client->head != client->tail; in joydev_fetch_next_event()
321 *event = client->buffer[client->tail++]; in joydev_fetch_next_event()
322 client->tail &= JOYDEV_BUFFER_SIZE - 1; in joydev_fetch_next_event()
325 spin_unlock_irq(&client->buffer_lock); in joydev_fetch_next_event()
333 static ssize_t joydev_0x_read(struct joydev_client *client, in joydev_0x_read() argument
337 struct joydev *joydev = client->joydev; in joydev_0x_read()
355 spin_lock(&client->buffer_lock); in joydev_0x_read()
356 client->startup = 0; in joydev_0x_read()
357 client->tail = client->head; in joydev_0x_read()
358 spin_unlock(&client->buffer_lock); in joydev_0x_read()
368 static inline int joydev_data_pending(struct joydev_client *client) in joydev_data_pending() argument
370 struct joydev *joydev = client->joydev; in joydev_data_pending()
372 return client->startup < joydev->nabs + joydev->nkey || in joydev_data_pending()
373 client->head != client->tail; in joydev_data_pending()
379 struct joydev_client *client = file->private_data; in joydev_read() local
380 struct joydev *joydev = client->joydev; in joydev_read()
392 return joydev_0x_read(client, input, buf); in joydev_read()
394 if (!joydev_data_pending(client) && (file->f_flags & O_NONBLOCK)) in joydev_read()
398 !joydev->exist || joydev_data_pending(client)); in joydev_read()
406 joydev_generate_startup_event(client, input, &event)) { in joydev_read()
415 joydev_fetch_next_event(client, &event)) { in joydev_read()
429 struct joydev_client *client = file->private_data; in joydev_poll() local
430 struct joydev *joydev = client->joydev; in joydev_poll()
433 return (joydev_data_pending(client) ? (POLLIN | POLLRDNORM) : 0) | in joydev_poll()
588 struct joydev_client *client = file->private_data; in joydev_compat_ioctl() local
589 struct joydev *joydev = client->joydev; in joydev_compat_ioctl()
655 struct joydev_client *client = file->private_data; in joydev_ioctl() local
656 struct joydev *joydev = client->joydev; in joydev_ioctl()