• Home
  • Raw
  • Download

Lines Matching refs:q

63 static int queue_list_add(struct snd_seq_queue *q)  in queue_list_add()  argument
71 queue_list[i] = q; in queue_list_add()
72 q->queue = i; in queue_list_add()
84 struct snd_seq_queue *q; in queue_list_remove() local
88 q = queue_list[id]; in queue_list_remove()
89 if (q) { in queue_list_remove()
90 spin_lock(&q->owner_lock); in queue_list_remove()
91 if (q->owner == client) { in queue_list_remove()
93 q->klocked = 1; in queue_list_remove()
94 spin_unlock(&q->owner_lock); in queue_list_remove()
98 return q; in queue_list_remove()
100 spin_unlock(&q->owner_lock); in queue_list_remove()
111 struct snd_seq_queue *q; in queue_new() local
113 q = kzalloc(sizeof(*q), GFP_KERNEL); in queue_new()
114 if (!q) in queue_new()
117 spin_lock_init(&q->owner_lock); in queue_new()
118 spin_lock_init(&q->check_lock); in queue_new()
119 mutex_init(&q->timer_mutex); in queue_new()
120 snd_use_lock_init(&q->use_lock); in queue_new()
121 q->queue = -1; in queue_new()
123 q->tickq = snd_seq_prioq_new(); in queue_new()
124 q->timeq = snd_seq_prioq_new(); in queue_new()
125 q->timer = snd_seq_timer_new(); in queue_new()
126 if (q->tickq == NULL || q->timeq == NULL || q->timer == NULL) { in queue_new()
127 snd_seq_prioq_delete(&q->tickq); in queue_new()
128 snd_seq_prioq_delete(&q->timeq); in queue_new()
129 snd_seq_timer_delete(&q->timer); in queue_new()
130 kfree(q); in queue_new()
134 q->owner = owner; in queue_new()
135 q->locked = locked; in queue_new()
136 q->klocked = 0; in queue_new()
138 return q; in queue_new()
142 static void queue_delete(struct snd_seq_queue *q) in queue_delete() argument
145 mutex_lock(&q->timer_mutex); in queue_delete()
146 snd_seq_timer_stop(q->timer); in queue_delete()
147 snd_seq_timer_close(q); in queue_delete()
148 mutex_unlock(&q->timer_mutex); in queue_delete()
150 snd_use_lock_sync(&q->use_lock); in queue_delete()
152 snd_seq_prioq_delete(&q->tickq); in queue_delete()
153 snd_seq_prioq_delete(&q->timeq); in queue_delete()
154 snd_seq_timer_delete(&q->timer); in queue_delete()
156 kfree(q); in queue_delete()
189 struct snd_seq_queue *q; in snd_seq_queue_alloc() local
191 q = queue_new(client, locked); in snd_seq_queue_alloc()
192 if (q == NULL) in snd_seq_queue_alloc()
194 q->info_flags = info_flags; in snd_seq_queue_alloc()
195 if (queue_list_add(q) < 0) { in snd_seq_queue_alloc()
196 queue_delete(q); in snd_seq_queue_alloc()
199 snd_seq_queue_use(q->queue, client, 1); /* use this queue */ in snd_seq_queue_alloc()
200 return q->queue; in snd_seq_queue_alloc()
206 struct snd_seq_queue *q; in snd_seq_queue_delete() local
210 q = queue_list_remove(queueid, client); in snd_seq_queue_delete()
211 if (q == NULL) in snd_seq_queue_delete()
213 queue_delete(q); in snd_seq_queue_delete()
222 struct snd_seq_queue *q; in queueptr() local
228 q = queue_list[queueid]; in queueptr()
229 if (q) in queueptr()
230 snd_use_lock_use(&q->use_lock); in queueptr()
232 return q; in queueptr()
239 struct snd_seq_queue *q; in snd_seq_queue_find_name() local
242 if ((q = queueptr(i)) != NULL) { in snd_seq_queue_find_name()
243 if (strncmp(q->name, name, sizeof(q->name)) == 0) in snd_seq_queue_find_name()
244 return q; in snd_seq_queue_find_name()
245 queuefree(q); in snd_seq_queue_find_name()
254 void snd_seq_check_queue(struct snd_seq_queue *q, int atomic, int hop) in snd_seq_check_queue() argument
259 if (q == NULL) in snd_seq_check_queue()
263 spin_lock_irqsave(&q->check_lock, flags); in snd_seq_check_queue()
264 if (q->check_blocked) { in snd_seq_check_queue()
265 q->check_again = 1; in snd_seq_check_queue()
266 spin_unlock_irqrestore(&q->check_lock, flags); in snd_seq_check_queue()
269 q->check_blocked = 1; in snd_seq_check_queue()
270 spin_unlock_irqrestore(&q->check_lock, flags); in snd_seq_check_queue()
274 while ((cell = snd_seq_prioq_cell_peek(q->tickq)) != NULL) { in snd_seq_check_queue()
275 if (snd_seq_compare_tick_time(&q->timer->tick.cur_tick, in snd_seq_check_queue()
277 cell = snd_seq_prioq_cell_out(q->tickq); in snd_seq_check_queue()
288 while ((cell = snd_seq_prioq_cell_peek(q->timeq)) != NULL) { in snd_seq_check_queue()
289 if (snd_seq_compare_real_time(&q->timer->cur_time, in snd_seq_check_queue()
291 cell = snd_seq_prioq_cell_out(q->timeq); in snd_seq_check_queue()
301 spin_lock_irqsave(&q->check_lock, flags); in snd_seq_check_queue()
302 if (q->check_again) { in snd_seq_check_queue()
303 q->check_again = 0; in snd_seq_check_queue()
304 spin_unlock_irqrestore(&q->check_lock, flags); in snd_seq_check_queue()
307 q->check_blocked = 0; in snd_seq_check_queue()
308 spin_unlock_irqrestore(&q->check_lock, flags); in snd_seq_check_queue()
316 struct snd_seq_queue *q; in snd_seq_enqueue_event() local
321 q = queueptr(dest); in snd_seq_enqueue_event()
322 if (q == NULL) in snd_seq_enqueue_event()
328 cell->event.time.tick += q->timer->tick.cur_tick; in snd_seq_enqueue_event()
333 &q->timer->cur_time); in snd_seq_enqueue_event()
342 err = snd_seq_prioq_cell_in(q->tickq, cell); in snd_seq_enqueue_event()
347 err = snd_seq_prioq_cell_in(q->timeq, cell); in snd_seq_enqueue_event()
352 queuefree(q); /* unlock */ in snd_seq_enqueue_event()
357 snd_seq_check_queue(q, atomic, hop); in snd_seq_enqueue_event()
359 queuefree(q); /* unlock */ in snd_seq_enqueue_event()
367 static inline int check_access(struct snd_seq_queue *q, int client) in check_access() argument
369 return (q->owner == client) || (!q->locked && !q->klocked); in check_access()
375 static int queue_access_lock(struct snd_seq_queue *q, int client) in queue_access_lock() argument
380 spin_lock_irqsave(&q->owner_lock, flags); in queue_access_lock()
381 access_ok = check_access(q, client); in queue_access_lock()
383 q->klocked = 1; in queue_access_lock()
384 spin_unlock_irqrestore(&q->owner_lock, flags); in queue_access_lock()
389 static inline void queue_access_unlock(struct snd_seq_queue *q) in queue_access_unlock() argument
393 spin_lock_irqsave(&q->owner_lock, flags); in queue_access_unlock()
394 q->klocked = 0; in queue_access_unlock()
395 spin_unlock_irqrestore(&q->owner_lock, flags); in queue_access_unlock()
401 struct snd_seq_queue *q = queueptr(queueid); in snd_seq_queue_check_access() local
405 if (! q) in snd_seq_queue_check_access()
407 spin_lock_irqsave(&q->owner_lock, flags); in snd_seq_queue_check_access()
408 access_ok = check_access(q, client); in snd_seq_queue_check_access()
409 spin_unlock_irqrestore(&q->owner_lock, flags); in snd_seq_queue_check_access()
410 queuefree(q); in snd_seq_queue_check_access()
421 struct snd_seq_queue *q = queueptr(queueid); in snd_seq_queue_set_owner() local
423 if (q == NULL) in snd_seq_queue_set_owner()
426 if (! queue_access_lock(q, client)) { in snd_seq_queue_set_owner()
427 queuefree(q); in snd_seq_queue_set_owner()
431 q->locked = locked ? 1 : 0; in snd_seq_queue_set_owner()
432 q->owner = client; in snd_seq_queue_set_owner()
433 queue_access_unlock(q); in snd_seq_queue_set_owner()
434 queuefree(q); in snd_seq_queue_set_owner()
484 struct snd_seq_queue *q = queueptr(queueid); in snd_seq_queue_timer_set_tempo() local
487 if (q == NULL) in snd_seq_queue_timer_set_tempo()
489 if (! queue_access_lock(q, client)) { in snd_seq_queue_timer_set_tempo()
490 queuefree(q); in snd_seq_queue_timer_set_tempo()
494 result = snd_seq_timer_set_tempo(q->timer, info->tempo); in snd_seq_queue_timer_set_tempo()
496 result = snd_seq_timer_set_ppq(q->timer, info->ppq); in snd_seq_queue_timer_set_tempo()
498 result = snd_seq_timer_set_skew(q->timer, info->skew_value, in snd_seq_queue_timer_set_tempo()
500 queue_access_unlock(q); in snd_seq_queue_timer_set_tempo()
501 queuefree(q); in snd_seq_queue_timer_set_tempo()
544 struct snd_seq_queue *q; in snd_seq_queue_is_used() local
547 q = queueptr(queueid); in snd_seq_queue_is_used()
548 if (q == NULL) in snd_seq_queue_is_used()
550 result = test_bit(client, q->clients_bitmap) ? 1 : 0; in snd_seq_queue_is_used()
551 queuefree(q); in snd_seq_queue_is_used()
565 struct snd_seq_queue *q; in snd_seq_queue_client_termination() local
568 if ((q = queueptr(i)) == NULL) in snd_seq_queue_client_termination()
570 spin_lock_irqsave(&q->owner_lock, flags); in snd_seq_queue_client_termination()
571 if (q->owner == client) in snd_seq_queue_client_termination()
572 q->klocked = 1; in snd_seq_queue_client_termination()
573 spin_unlock_irqrestore(&q->owner_lock, flags); in snd_seq_queue_client_termination()
574 if (q->owner == client) { in snd_seq_queue_client_termination()
575 if (q->timer->running) in snd_seq_queue_client_termination()
576 snd_seq_timer_stop(q->timer); in snd_seq_queue_client_termination()
577 snd_seq_timer_reset(q->timer); in snd_seq_queue_client_termination()
579 queuefree(q); in snd_seq_queue_client_termination()
590 struct snd_seq_queue *q; in snd_seq_queue_client_leave() local
594 if ((q = queue_list_remove(i, client)) != NULL) in snd_seq_queue_client_leave()
595 queue_delete(q); in snd_seq_queue_client_leave()
602 if ((q = queueptr(i)) == NULL) in snd_seq_queue_client_leave()
604 if (test_bit(client, q->clients_bitmap)) { in snd_seq_queue_client_leave()
605 snd_seq_prioq_leave(q->tickq, client, 0); in snd_seq_queue_client_leave()
606 snd_seq_prioq_leave(q->timeq, client, 0); in snd_seq_queue_client_leave()
607 snd_seq_queue_use(q->queue, client, 0); in snd_seq_queue_client_leave()
609 queuefree(q); in snd_seq_queue_client_leave()
621 struct snd_seq_queue *q; in snd_seq_queue_client_leave_cells() local
624 if ((q = queueptr(i)) == NULL) in snd_seq_queue_client_leave_cells()
626 snd_seq_prioq_leave(q->tickq, client, 0); in snd_seq_queue_client_leave_cells()
627 snd_seq_prioq_leave(q->timeq, client, 0); in snd_seq_queue_client_leave_cells()
628 queuefree(q); in snd_seq_queue_client_leave_cells()
636 struct snd_seq_queue *q; in snd_seq_queue_remove_cells() local
639 if ((q = queueptr(i)) == NULL) in snd_seq_queue_remove_cells()
641 if (test_bit(client, q->clients_bitmap) && in snd_seq_queue_remove_cells()
643 q->queue == info->queue)) { in snd_seq_queue_remove_cells()
644 snd_seq_prioq_remove_events(q->tickq, client, info); in snd_seq_queue_remove_cells()
645 snd_seq_prioq_remove_events(q->timeq, client, info); in snd_seq_queue_remove_cells()
647 queuefree(q); in snd_seq_queue_remove_cells()
656 static void queue_broadcast_event(struct snd_seq_queue *q, struct snd_seq_event *ev, in queue_broadcast_event() argument
664 sev.time.tick = q->timer->tick.cur_tick; in queue_broadcast_event()
665 sev.queue = q->queue; in queue_broadcast_event()
666 sev.data.queue.queue = q->queue; in queue_broadcast_event()
679 static void snd_seq_queue_process_event(struct snd_seq_queue *q, in snd_seq_queue_process_event() argument
685 snd_seq_prioq_leave(q->tickq, ev->source.client, 1); in snd_seq_queue_process_event()
686 snd_seq_prioq_leave(q->timeq, ev->source.client, 1); in snd_seq_queue_process_event()
687 if (! snd_seq_timer_start(q->timer)) in snd_seq_queue_process_event()
688 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
692 if (! snd_seq_timer_continue(q->timer)) in snd_seq_queue_process_event()
693 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
697 snd_seq_timer_stop(q->timer); in snd_seq_queue_process_event()
698 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
702 snd_seq_timer_set_tempo(q->timer, ev->data.queue.param.value); in snd_seq_queue_process_event()
703 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
707 if (snd_seq_timer_set_position_tick(q->timer, ev->data.queue.param.time.tick) == 0) { in snd_seq_queue_process_event()
708 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
713 if (snd_seq_timer_set_position_time(q->timer, ev->data.queue.param.time.time) == 0) { in snd_seq_queue_process_event()
714 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
718 if (snd_seq_timer_set_skew(q->timer, in snd_seq_queue_process_event()
721 queue_broadcast_event(q, ev, atomic, hop); in snd_seq_queue_process_event()
734 struct snd_seq_queue *q; in snd_seq_control_queue() local
738 q = queueptr(ev->data.queue.queue); in snd_seq_control_queue()
740 if (q == NULL) in snd_seq_control_queue()
743 if (! queue_access_lock(q, ev->source.client)) { in snd_seq_control_queue()
744 queuefree(q); in snd_seq_control_queue()
748 snd_seq_queue_process_event(q, ev, atomic, hop); in snd_seq_control_queue()
750 queue_access_unlock(q); in snd_seq_control_queue()
751 queuefree(q); in snd_seq_control_queue()
764 struct snd_seq_queue *q; in snd_seq_info_queues_read() local
768 if ((q = queueptr(i)) == NULL) in snd_seq_info_queues_read()
771 tmr = q->timer; in snd_seq_info_queues_read()
777 snd_iprintf(buffer, "queue %d: [%s]\n", q->queue, q->name); in snd_seq_info_queues_read()
778 snd_iprintf(buffer, "owned by client : %d\n", q->owner); in snd_seq_info_queues_read()
779 snd_iprintf(buffer, "lock status : %s\n", q->locked ? "Locked" : "Free"); in snd_seq_info_queues_read()
780 snd_iprintf(buffer, "queued time events : %d\n", snd_seq_prioq_avail(q->timeq)); in snd_seq_info_queues_read()
781 snd_iprintf(buffer, "queued tick events : %d\n", snd_seq_prioq_avail(q->tickq)); in snd_seq_info_queues_read()
789 queuefree(q); in snd_seq_info_queues_read()