Lines Matching refs:tu

1279 	struct snd_timer_user *tu = timeri->callback_data;
1283 guard(spinlock)(&tu->qlock);
1284 if (tu->qused > 0) {
1285 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1286 r = &tu->queue[prev];
1292 if (tu->qused >= tu->queue_size) {
1293 tu->overrun++;
1295 r = &tu->queue[tu->qtail++];
1296 tu->qtail %= tu->queue_size;
1299 tu->qused++;
1302 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1303 wake_up(&tu->qchange_sleep);
1306 static void snd_timer_user_append_to_tqueue(struct snd_timer_user *tu,
1309 if (tu->qused >= tu->queue_size) {
1310 tu->overrun++;
1312 memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread));
1313 tu->qtail %= tu->queue_size;
1314 tu->qused++;
1323 struct snd_timer_user *tu = timeri->callback_data;
1328 tu->tstamp = *tstamp;
1329 if ((tu->filter & (1 << event)) == 0 || !tu->tread)
1336 scoped_guard(spinlock_irqsave, &tu->qlock)
1337 snd_timer_user_append_to_tqueue(tu, &r1);
1338 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1339 wake_up(&tu->qchange_sleep);
1344 struct snd_timer_user *tu = timeri->callback_data;
1346 tu->disconnected = true;
1347 wake_up(&tu->qchange_sleep);
1354 struct snd_timer_user *tu = timeri->callback_data;
1361 scoped_guard(spinlock, &tu->qlock) {
1362 if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION) |
1365 if (tu->last_resolution != resolution || ticks > 0) {
1371 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) &&
1372 tu->last_resolution != resolution) {
1377 snd_timer_user_append_to_tqueue(tu, &r1);
1378 tu->last_resolution = resolution;
1381 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_TICK)) == 0)
1385 if (tu->qused > 0) {
1386 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1387 r = &tu->tqueue[prev];
1400 snd_timer_user_append_to_tqueue(tu, &r1);
1405 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1406 wake_up(&tu->qchange_sleep);
1409 static int realloc_user_queue(struct snd_timer_user *tu, int size)
1414 if (tu->tread) {
1424 guard(spinlock_irq)(&tu->qlock);
1425 kfree(tu->queue);
1426 kfree(tu->tqueue);
1427 tu->queue_size = size;
1428 tu->queue = queue;
1429 tu->tqueue = tqueue;
1430 tu->qhead = tu->qtail = tu->qused = 0;
1437 struct snd_timer_user *tu;
1444 tu = kzalloc(sizeof(*tu), GFP_KERNEL);
1445 if (tu == NULL)
1447 spin_lock_init(&tu->qlock);
1448 init_waitqueue_head(&tu->qchange_sleep);
1449 mutex_init(&tu->ioctl_lock);
1450 tu->ticks = 1;
1451 if (realloc_user_queue(tu, 128) < 0) {
1452 kfree(tu);
1455 file->private_data = tu;
1461 struct snd_timer_user *tu;
1464 tu = file->private_data;
1466 scoped_guard(mutex, &tu->ioctl_lock) {
1467 if (tu->timeri) {
1468 snd_timer_close(tu->timeri);
1469 snd_timer_instance_free(tu->timeri);
1472 snd_fasync_free(tu->fasync);
1473 kfree(tu->queue);
1474 kfree(tu->tqueue);
1475 kfree(tu);
1687 struct snd_timer_user *tu;
1692 tu = file->private_data;
1693 if (tu->timeri) {
1694 snd_timer_close(tu->timeri);
1695 snd_timer_instance_free(tu->timeri);
1696 tu->timeri = NULL;
1705 tu->timeri = snd_timer_instance_new(str);
1706 if (!tu->timeri) {
1711 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST;
1712 tu->timeri->callback = tu->tread
1714 tu->timeri->ccallback = snd_timer_user_ccallback;
1715 tu->timeri->callback_data = (void *)tu;
1716 tu->timeri->disconnect = snd_timer_user_disconnect;
1718 err = snd_timer_open(tu->timeri, &tselect.id, current->pid);
1720 snd_timer_instance_free(tu->timeri);
1721 tu->timeri = NULL;
1731 struct snd_timer_user *tu;
1735 tu = file->private_data;
1736 if (!tu->timeri)
1738 t = tu->timeri->timer;
1760 struct snd_timer_user *tu;
1765 tu = file->private_data;
1766 if (!tu->timeri)
1768 t = tu->timeri->timer;
1782 resolution = snd_timer_resolution(tu->timeri);
1811 snd_timer_stop(tu->timeri);
1813 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO|
1817 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO;
1819 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE;
1821 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT;
1824 (unsigned int)tu->queue_size != params.queue_size) {
1825 err = realloc_user_queue(tu, params.queue_size);
1829 scoped_guard(spinlock_irq, &tu->qlock) {
1830 tu->qhead = tu->qtail = tu->qused = 0;
1831 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
1832 if (tu->tread) {
1840 snd_timer_user_append_to_tqueue(tu, &tread);
1842 struct snd_timer_read *r = &tu->queue[0];
1846 tu->qused++;
1847 tu->qtail++;
1850 tu->filter = params.filter;
1851 tu->ticks = params.ticks;
1863 struct snd_timer_user *tu;
1866 tu = file->private_data;
1867 if (!tu->timeri)
1870 status.tstamp_sec = tu->tstamp.tv_sec;
1871 status.tstamp_nsec = tu->tstamp.tv_nsec;
1872 status.resolution = snd_timer_resolution(tu->timeri);
1873 status.lost = tu->timeri->lost;
1874 status.overrun = tu->overrun;
1875 scoped_guard(spinlock_irq, &tu->qlock)
1876 status.queue = tu->qused;
1885 struct snd_timer_user *tu;
1888 tu = file->private_data;
1889 if (!tu->timeri)
1892 status.tstamp_sec = tu->tstamp.tv_sec;
1893 status.tstamp_nsec = tu->tstamp.tv_nsec;
1894 status.resolution = snd_timer_resolution(tu->timeri);
1895 status.lost = tu->timeri->lost;
1896 status.overrun = tu->overrun;
1897 scoped_guard(spinlock_irq, &tu->qlock)
1898 status.queue = tu->qused;
1907 struct snd_timer_user *tu;
1909 tu = file->private_data;
1910 if (!tu->timeri)
1912 snd_timer_stop(tu->timeri);
1913 tu->timeri->lost = 0;
1914 tu->last_resolution = 0;
1915 err = snd_timer_start(tu->timeri, tu->ticks);
1924 struct snd_timer_user *tu;
1926 tu = file->private_data;
1927 if (!tu->timeri)
1929 err = snd_timer_stop(tu->timeri);
1938 struct snd_timer_user *tu;
1940 tu = file->private_data;
1941 if (!tu->timeri)
1944 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED))
1946 tu->timeri->lost = 0;
1947 err = snd_timer_continue(tu->timeri);
1956 struct snd_timer_user *tu;
1958 tu = file->private_data;
1959 if (!tu->timeri)
1961 err = snd_timer_pause(tu->timeri);
1967 static int snd_timer_user_tread(void __user *argp, struct snd_timer_user *tu,
1973 if (tu->timeri) /* too late */
1978 old_tread = tu->tread;
1981 tu->tread = TREAD_FORMAT_NONE;
1984 tu->tread = TREAD_FORMAT_TIME64;
1986 tu->tread = TREAD_FORMAT_TIME32;
1988 if (tu->tread != old_tread &&
1989 realloc_user_queue(tu, tu->queue_size) < 0) {
1990 tu->tread = old_tread;
2007 struct snd_timer_user *tu;
2011 tu = file->private_data;
2019 return snd_timer_user_tread(argp, tu, cmd, compat);
2055 struct snd_timer_user *tu = file->private_data;
2057 guard(mutex)(&tu->ioctl_lock);
2063 struct snd_timer_user *tu;
2065 tu = file->private_data;
2066 return snd_fasync_helper(fd, file, on, &tu->fasync);
2074 struct snd_timer_user *tu;
2079 tu = file->private_data;
2080 switch (tu->tread) {
2095 mutex_lock(&tu->ioctl_lock);
2096 spin_lock_irq(&tu->qlock);
2098 while (!tu->qused) {
2108 add_wait_queue(&tu->qchange_sleep, &wait);
2110 spin_unlock_irq(&tu->qlock);
2111 mutex_unlock(&tu->ioctl_lock);
2113 mutex_lock(&tu->ioctl_lock);
2114 spin_lock_irq(&tu->qlock);
2116 remove_wait_queue(&tu->qchange_sleep, &wait);
2118 if (tu->disconnected) {
2128 qhead = tu->qhead++;
2129 tu->qhead %= tu->queue_size;
2130 tu->qused--;
2131 spin_unlock_irq(&tu->qlock);
2133 tread = &tu->tqueue[qhead];
2135 switch (tu->tread) {
2154 if (copy_to_user(buffer, &tu->queue[qhead],
2163 spin_lock_irq(&tu->qlock);
2170 spin_unlock_irq(&tu->qlock);
2171 mutex_unlock(&tu->ioctl_lock);
2178 struct snd_timer_user *tu;
2180 tu = file->private_data;
2182 poll_wait(file, &tu->qchange_sleep, wait);
2185 guard(spinlock_irq)(&tu->qlock);
2186 if (tu->qused)
2188 if (tu->disconnected)