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