Lines Matching refs:tu

1324 	struct snd_timer_user *tu = timeri->callback_data;  in snd_timer_user_interrupt()  local
1328 spin_lock(&tu->qlock); in snd_timer_user_interrupt()
1329 if (tu->qused > 0) { in snd_timer_user_interrupt()
1330 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1; in snd_timer_user_interrupt()
1331 r = &tu->queue[prev]; in snd_timer_user_interrupt()
1337 if (tu->qused >= tu->queue_size) { in snd_timer_user_interrupt()
1338 tu->overrun++; in snd_timer_user_interrupt()
1340 r = &tu->queue[tu->qtail++]; in snd_timer_user_interrupt()
1341 tu->qtail %= tu->queue_size; in snd_timer_user_interrupt()
1344 tu->qused++; in snd_timer_user_interrupt()
1347 spin_unlock(&tu->qlock); in snd_timer_user_interrupt()
1348 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN); in snd_timer_user_interrupt()
1349 wake_up(&tu->qchange_sleep); in snd_timer_user_interrupt()
1352 static void snd_timer_user_append_to_tqueue(struct snd_timer_user *tu, in snd_timer_user_append_to_tqueue() argument
1355 if (tu->qused >= tu->queue_size) { in snd_timer_user_append_to_tqueue()
1356 tu->overrun++; in snd_timer_user_append_to_tqueue()
1358 memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread)); in snd_timer_user_append_to_tqueue()
1359 tu->qtail %= tu->queue_size; in snd_timer_user_append_to_tqueue()
1360 tu->qused++; in snd_timer_user_append_to_tqueue()
1369 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_ccallback() local
1375 tu->tstamp = *tstamp; in snd_timer_user_ccallback()
1376 if ((tu->filter & (1 << event)) == 0 || !tu->tread) in snd_timer_user_ccallback()
1383 spin_lock_irqsave(&tu->qlock, flags); in snd_timer_user_ccallback()
1384 snd_timer_user_append_to_tqueue(tu, &r1); in snd_timer_user_ccallback()
1385 spin_unlock_irqrestore(&tu->qlock, flags); in snd_timer_user_ccallback()
1386 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN); in snd_timer_user_ccallback()
1387 wake_up(&tu->qchange_sleep); in snd_timer_user_ccallback()
1392 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_disconnect() local
1394 tu->disconnected = true; in snd_timer_user_disconnect()
1395 wake_up(&tu->qchange_sleep); in snd_timer_user_disconnect()
1402 struct snd_timer_user *tu = timeri->callback_data; in snd_timer_user_tinterrupt() local
1409 spin_lock(&tu->qlock); in snd_timer_user_tinterrupt()
1410 if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION) | in snd_timer_user_tinterrupt()
1412 spin_unlock(&tu->qlock); in snd_timer_user_tinterrupt()
1415 if (tu->last_resolution != resolution || ticks > 0) { in snd_timer_user_tinterrupt()
1421 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && in snd_timer_user_tinterrupt()
1422 tu->last_resolution != resolution) { in snd_timer_user_tinterrupt()
1427 snd_timer_user_append_to_tqueue(tu, &r1); in snd_timer_user_tinterrupt()
1428 tu->last_resolution = resolution; in snd_timer_user_tinterrupt()
1431 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_TICK)) == 0) in snd_timer_user_tinterrupt()
1435 if (tu->qused > 0) { in snd_timer_user_tinterrupt()
1436 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1; in snd_timer_user_tinterrupt()
1437 r = &tu->tqueue[prev]; in snd_timer_user_tinterrupt()
1450 snd_timer_user_append_to_tqueue(tu, &r1); in snd_timer_user_tinterrupt()
1453 spin_unlock(&tu->qlock); in snd_timer_user_tinterrupt()
1456 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN); in snd_timer_user_tinterrupt()
1457 wake_up(&tu->qchange_sleep); in snd_timer_user_tinterrupt()
1460 static int realloc_user_queue(struct snd_timer_user *tu, int size) in realloc_user_queue() argument
1465 if (tu->tread) { in realloc_user_queue()
1475 spin_lock_irq(&tu->qlock); in realloc_user_queue()
1476 kfree(tu->queue); in realloc_user_queue()
1477 kfree(tu->tqueue); in realloc_user_queue()
1478 tu->queue_size = size; in realloc_user_queue()
1479 tu->queue = queue; in realloc_user_queue()
1480 tu->tqueue = tqueue; in realloc_user_queue()
1481 tu->qhead = tu->qtail = tu->qused = 0; in realloc_user_queue()
1482 spin_unlock_irq(&tu->qlock); in realloc_user_queue()
1489 struct snd_timer_user *tu; in snd_timer_user_open() local
1496 tu = kzalloc(sizeof(*tu), GFP_KERNEL); in snd_timer_user_open()
1497 if (tu == NULL) in snd_timer_user_open()
1499 spin_lock_init(&tu->qlock); in snd_timer_user_open()
1500 init_waitqueue_head(&tu->qchange_sleep); in snd_timer_user_open()
1501 mutex_init(&tu->ioctl_lock); in snd_timer_user_open()
1502 tu->ticks = 1; in snd_timer_user_open()
1503 if (realloc_user_queue(tu, 128) < 0) { in snd_timer_user_open()
1504 kfree(tu); in snd_timer_user_open()
1507 file->private_data = tu; in snd_timer_user_open()
1513 struct snd_timer_user *tu; in snd_timer_user_release() local
1516 tu = file->private_data; in snd_timer_user_release()
1518 mutex_lock(&tu->ioctl_lock); in snd_timer_user_release()
1519 if (tu->timeri) { in snd_timer_user_release()
1520 snd_timer_close(tu->timeri); in snd_timer_user_release()
1521 snd_timer_instance_free(tu->timeri); in snd_timer_user_release()
1523 mutex_unlock(&tu->ioctl_lock); in snd_timer_user_release()
1524 snd_fasync_free(tu->fasync); in snd_timer_user_release()
1525 kfree(tu->queue); in snd_timer_user_release()
1526 kfree(tu->tqueue); in snd_timer_user_release()
1527 kfree(tu); in snd_timer_user_release()
1756 struct snd_timer_user *tu; in snd_timer_user_tselect() local
1761 tu = file->private_data; in snd_timer_user_tselect()
1762 if (tu->timeri) { in snd_timer_user_tselect()
1763 snd_timer_close(tu->timeri); in snd_timer_user_tselect()
1764 snd_timer_instance_free(tu->timeri); in snd_timer_user_tselect()
1765 tu->timeri = NULL; in snd_timer_user_tselect()
1774 tu->timeri = snd_timer_instance_new(str); in snd_timer_user_tselect()
1775 if (!tu->timeri) { in snd_timer_user_tselect()
1780 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST; in snd_timer_user_tselect()
1781 tu->timeri->callback = tu->tread in snd_timer_user_tselect()
1783 tu->timeri->ccallback = snd_timer_user_ccallback; in snd_timer_user_tselect()
1784 tu->timeri->callback_data = (void *)tu; in snd_timer_user_tselect()
1785 tu->timeri->disconnect = snd_timer_user_disconnect; in snd_timer_user_tselect()
1787 err = snd_timer_open(tu->timeri, &tselect.id, current->pid); in snd_timer_user_tselect()
1789 snd_timer_instance_free(tu->timeri); in snd_timer_user_tselect()
1790 tu->timeri = NULL; in snd_timer_user_tselect()
1800 struct snd_timer_user *tu; in snd_timer_user_info() local
1805 tu = file->private_data; in snd_timer_user_info()
1806 if (!tu->timeri) in snd_timer_user_info()
1808 t = tu->timeri->timer; in snd_timer_user_info()
1830 struct snd_timer_user *tu; in snd_timer_user_params() local
1835 tu = file->private_data; in snd_timer_user_params()
1836 if (!tu->timeri) in snd_timer_user_params()
1838 t = tu->timeri->timer; in snd_timer_user_params()
1852 resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_params()
1881 snd_timer_stop(tu->timeri); in snd_timer_user_params()
1883 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO| in snd_timer_user_params()
1887 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO; in snd_timer_user_params()
1889 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE; in snd_timer_user_params()
1891 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT; in snd_timer_user_params()
1894 (unsigned int)tu->queue_size != params.queue_size) { in snd_timer_user_params()
1895 err = realloc_user_queue(tu, params.queue_size); in snd_timer_user_params()
1899 spin_lock_irq(&tu->qlock); in snd_timer_user_params()
1900 tu->qhead = tu->qtail = tu->qused = 0; in snd_timer_user_params()
1901 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) { in snd_timer_user_params()
1902 if (tu->tread) { in snd_timer_user_params()
1909 snd_timer_user_append_to_tqueue(tu, &tread); in snd_timer_user_params()
1911 struct snd_timer_read *r = &tu->queue[0]; in snd_timer_user_params()
1914 tu->qused++; in snd_timer_user_params()
1915 tu->qtail++; in snd_timer_user_params()
1918 tu->filter = params.filter; in snd_timer_user_params()
1919 tu->ticks = params.ticks; in snd_timer_user_params()
1920 spin_unlock_irq(&tu->qlock); in snd_timer_user_params()
1931 struct snd_timer_user *tu; in snd_timer_user_status32() local
1934 tu = file->private_data; in snd_timer_user_status32()
1935 if (!tu->timeri) in snd_timer_user_status32()
1938 status.tstamp_sec = tu->tstamp.tv_sec; in snd_timer_user_status32()
1939 status.tstamp_nsec = tu->tstamp.tv_nsec; in snd_timer_user_status32()
1940 status.resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_status32()
1941 status.lost = tu->timeri->lost; in snd_timer_user_status32()
1942 status.overrun = tu->overrun; in snd_timer_user_status32()
1943 spin_lock_irq(&tu->qlock); in snd_timer_user_status32()
1944 status.queue = tu->qused; in snd_timer_user_status32()
1945 spin_unlock_irq(&tu->qlock); in snd_timer_user_status32()
1954 struct snd_timer_user *tu; in snd_timer_user_status64() local
1957 tu = file->private_data; in snd_timer_user_status64()
1958 if (!tu->timeri) in snd_timer_user_status64()
1961 status.tstamp_sec = tu->tstamp.tv_sec; in snd_timer_user_status64()
1962 status.tstamp_nsec = tu->tstamp.tv_nsec; in snd_timer_user_status64()
1963 status.resolution = snd_timer_resolution(tu->timeri); in snd_timer_user_status64()
1964 status.lost = tu->timeri->lost; in snd_timer_user_status64()
1965 status.overrun = tu->overrun; in snd_timer_user_status64()
1966 spin_lock_irq(&tu->qlock); in snd_timer_user_status64()
1967 status.queue = tu->qused; in snd_timer_user_status64()
1968 spin_unlock_irq(&tu->qlock); in snd_timer_user_status64()
1977 struct snd_timer_user *tu; in snd_timer_user_start() local
1979 tu = file->private_data; in snd_timer_user_start()
1980 if (!tu->timeri) in snd_timer_user_start()
1982 snd_timer_stop(tu->timeri); in snd_timer_user_start()
1983 tu->timeri->lost = 0; in snd_timer_user_start()
1984 tu->last_resolution = 0; in snd_timer_user_start()
1985 err = snd_timer_start(tu->timeri, tu->ticks); in snd_timer_user_start()
1994 struct snd_timer_user *tu; in snd_timer_user_stop() local
1996 tu = file->private_data; in snd_timer_user_stop()
1997 if (!tu->timeri) in snd_timer_user_stop()
1999 err = snd_timer_stop(tu->timeri); in snd_timer_user_stop()
2008 struct snd_timer_user *tu; in snd_timer_user_continue() local
2010 tu = file->private_data; in snd_timer_user_continue()
2011 if (!tu->timeri) in snd_timer_user_continue()
2014 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED)) in snd_timer_user_continue()
2016 tu->timeri->lost = 0; in snd_timer_user_continue()
2017 err = snd_timer_continue(tu->timeri); in snd_timer_user_continue()
2026 struct snd_timer_user *tu; in snd_timer_user_pause() local
2028 tu = file->private_data; in snd_timer_user_pause()
2029 if (!tu->timeri) in snd_timer_user_pause()
2031 err = snd_timer_pause(tu->timeri); in snd_timer_user_pause()
2037 static int snd_timer_user_tread(void __user *argp, struct snd_timer_user *tu, in snd_timer_user_tread() argument
2043 if (tu->timeri) /* too late */ in snd_timer_user_tread()
2048 old_tread = tu->tread; in snd_timer_user_tread()
2051 tu->tread = TREAD_FORMAT_NONE; in snd_timer_user_tread()
2054 tu->tread = TREAD_FORMAT_TIME64; in snd_timer_user_tread()
2056 tu->tread = TREAD_FORMAT_TIME32; in snd_timer_user_tread()
2058 if (tu->tread != old_tread && in snd_timer_user_tread()
2059 realloc_user_queue(tu, tu->queue_size) < 0) { in snd_timer_user_tread()
2060 tu->tread = old_tread; in snd_timer_user_tread()
2077 struct snd_timer_user *tu; in __snd_timer_user_ioctl() local
2081 tu = file->private_data; in __snd_timer_user_ioctl()
2089 return snd_timer_user_tread(argp, tu, cmd, compat); in __snd_timer_user_ioctl()
2125 struct snd_timer_user *tu = file->private_data; in snd_timer_user_ioctl() local
2128 mutex_lock(&tu->ioctl_lock); in snd_timer_user_ioctl()
2130 mutex_unlock(&tu->ioctl_lock); in snd_timer_user_ioctl()
2136 struct snd_timer_user *tu; in snd_timer_user_fasync() local
2138 tu = file->private_data; in snd_timer_user_fasync()
2139 return snd_fasync_helper(fd, file, on, &tu->fasync); in snd_timer_user_fasync()
2147 struct snd_timer_user *tu; in snd_timer_user_read() local
2152 tu = file->private_data; in snd_timer_user_read()
2153 switch (tu->tread) { in snd_timer_user_read()
2168 mutex_lock(&tu->ioctl_lock); in snd_timer_user_read()
2169 spin_lock_irq(&tu->qlock); in snd_timer_user_read()
2171 while (!tu->qused) { in snd_timer_user_read()
2181 add_wait_queue(&tu->qchange_sleep, &wait); in snd_timer_user_read()
2183 spin_unlock_irq(&tu->qlock); in snd_timer_user_read()
2184 mutex_unlock(&tu->ioctl_lock); in snd_timer_user_read()
2186 mutex_lock(&tu->ioctl_lock); in snd_timer_user_read()
2187 spin_lock_irq(&tu->qlock); in snd_timer_user_read()
2189 remove_wait_queue(&tu->qchange_sleep, &wait); in snd_timer_user_read()
2191 if (tu->disconnected) { in snd_timer_user_read()
2201 qhead = tu->qhead++; in snd_timer_user_read()
2202 tu->qhead %= tu->queue_size; in snd_timer_user_read()
2203 tu->qused--; in snd_timer_user_read()
2204 spin_unlock_irq(&tu->qlock); in snd_timer_user_read()
2206 tread = &tu->tqueue[qhead]; in snd_timer_user_read()
2208 switch (tu->tread) { in snd_timer_user_read()
2227 if (copy_to_user(buffer, &tu->queue[qhead], in snd_timer_user_read()
2236 spin_lock_irq(&tu->qlock); in snd_timer_user_read()
2243 spin_unlock_irq(&tu->qlock); in snd_timer_user_read()
2244 mutex_unlock(&tu->ioctl_lock); in snd_timer_user_read()
2251 struct snd_timer_user *tu; in snd_timer_user_poll() local
2253 tu = file->private_data; in snd_timer_user_poll()
2255 poll_wait(file, &tu->qchange_sleep, wait); in snd_timer_user_poll()
2258 spin_lock_irq(&tu->qlock); in snd_timer_user_poll()
2259 if (tu->qused) in snd_timer_user_poll()
2261 if (tu->disconnected) in snd_timer_user_poll()
2263 spin_unlock_irq(&tu->qlock); in snd_timer_user_poll()