Lines Matching defs:tu

1328 	struct snd_timer_user *tu = timeri->callback_data;
1332 spin_lock(&tu->qlock);
1333 if (tu->qused > 0) {
1334 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1335 r = &tu->queue[prev];
1341 if (tu->qused >= tu->queue_size) {
1342 tu->overrun++;
1344 r = &tu->queue[tu->qtail++];
1345 tu->qtail %= tu->queue_size;
1348 tu->qused++;
1351 spin_unlock(&tu->qlock);
1352 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1353 wake_up(&tu->qchange_sleep);
1356 static void snd_timer_user_append_to_tqueue(struct snd_timer_user *tu,
1359 if (tu->qused >= tu->queue_size) {
1360 tu->overrun++;
1362 memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread));
1363 tu->qtail %= tu->queue_size;
1364 tu->qused++;
1373 struct snd_timer_user *tu = timeri->callback_data;
1379 tu->tstamp = *tstamp;
1380 if ((tu->filter & (1 << event)) == 0 || !tu->tread)
1387 spin_lock_irqsave(&tu->qlock, flags);
1388 snd_timer_user_append_to_tqueue(tu, &r1);
1389 spin_unlock_irqrestore(&tu->qlock, flags);
1390 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1391 wake_up(&tu->qchange_sleep);
1396 struct snd_timer_user *tu = timeri->callback_data;
1398 tu->disconnected = true;
1399 wake_up(&tu->qchange_sleep);
1406 struct snd_timer_user *tu = timeri->callback_data;
1413 spin_lock(&tu->qlock);
1414 if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION) |
1416 spin_unlock(&tu->qlock);
1419 if (tu->last_resolution != resolution || ticks > 0) {
1425 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) &&
1426 tu->last_resolution != resolution) {
1431 snd_timer_user_append_to_tqueue(tu, &r1);
1432 tu->last_resolution = resolution;
1435 if ((tu->filter & (1 << SNDRV_TIMER_EVENT_TICK)) == 0)
1439 if (tu->qused > 0) {
1440 prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
1441 r = &tu->tqueue[prev];
1454 snd_timer_user_append_to_tqueue(tu, &r1);
1457 spin_unlock(&tu->qlock);
1460 snd_kill_fasync(tu->fasync, SIGIO, POLL_IN);
1461 wake_up(&tu->qchange_sleep);
1464 static int realloc_user_queue(struct snd_timer_user *tu, int size)
1469 if (tu->tread) {
1479 spin_lock_irq(&tu->qlock);
1480 kfree(tu->queue);
1481 kfree(tu->tqueue);
1482 tu->queue_size = size;
1483 tu->queue = queue;
1484 tu->tqueue = tqueue;
1485 tu->qhead = tu->qtail = tu->qused = 0;
1486 spin_unlock_irq(&tu->qlock);
1493 struct snd_timer_user *tu;
1500 tu = kzalloc(sizeof(*tu), GFP_KERNEL);
1501 if (tu == NULL)
1503 spin_lock_init(&tu->qlock);
1504 init_waitqueue_head(&tu->qchange_sleep);
1505 mutex_init(&tu->ioctl_lock);
1506 tu->ticks = 1;
1507 if (realloc_user_queue(tu, 128) < 0) {
1508 kfree(tu);
1511 file->private_data = tu;
1517 struct snd_timer_user *tu;
1520 tu = file->private_data;
1522 mutex_lock(&tu->ioctl_lock);
1523 if (tu->timeri) {
1524 snd_timer_close(tu->timeri);
1525 snd_timer_instance_free(tu->timeri);
1527 mutex_unlock(&tu->ioctl_lock);
1528 snd_fasync_free(tu->fasync);
1529 kfree(tu->queue);
1530 kfree(tu->tqueue);
1531 kfree(tu);
1762 struct snd_timer_user *tu;
1767 tu = file->private_data;
1768 if (tu->timeri) {
1769 snd_timer_close(tu->timeri);
1770 snd_timer_instance_free(tu->timeri);
1771 tu->timeri = NULL;
1780 tu->timeri = snd_timer_instance_new(str);
1781 if (!tu->timeri) {
1786 tu->timeri->flags |= SNDRV_TIMER_IFLG_FAST;
1787 tu->timeri->callback = tu->tread
1789 tu->timeri->ccallback = snd_timer_user_ccallback;
1790 tu->timeri->callback_data = (void *)tu;
1791 tu->timeri->disconnect = snd_timer_user_disconnect;
1793 err = snd_timer_open(tu->timeri, &tselect.id, current->pid);
1795 snd_timer_instance_free(tu->timeri);
1796 tu->timeri = NULL;
1806 struct snd_timer_user *tu;
1811 tu = file->private_data;
1812 if (!tu->timeri)
1814 t = tu->timeri->timer;
1838 struct snd_timer_user *tu;
1843 tu = file->private_data;
1844 if (!tu->timeri)
1846 t = tu->timeri->timer;
1860 resolution = snd_timer_resolution(tu->timeri);
1889 snd_timer_stop(tu->timeri);
1891 tu->timeri->flags &= ~(SNDRV_TIMER_IFLG_AUTO|
1895 tu->timeri->flags |= SNDRV_TIMER_IFLG_AUTO;
1897 tu->timeri->flags |= SNDRV_TIMER_IFLG_EXCLUSIVE;
1899 tu->timeri->flags |= SNDRV_TIMER_IFLG_EARLY_EVENT;
1902 (unsigned int)tu->queue_size != params.queue_size) {
1903 err = realloc_user_queue(tu, params.queue_size);
1907 spin_lock_irq(&tu->qlock);
1908 tu->qhead = tu->qtail = tu->qused = 0;
1909 if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
1910 if (tu->tread) {
1917 snd_timer_user_append_to_tqueue(tu, &tread);
1919 struct snd_timer_read *r = &tu->queue[0];
1922 tu->qused++;
1923 tu->qtail++;
1926 tu->filter = params.filter;
1927 tu->ticks = params.ticks;
1928 spin_unlock_irq(&tu->qlock);
1939 struct snd_timer_user *tu;
1942 tu = file->private_data;
1943 if (!tu->timeri)
1946 status.tstamp_sec = tu->tstamp.tv_sec;
1947 status.tstamp_nsec = tu->tstamp.tv_nsec;
1948 status.resolution = snd_timer_resolution(tu->timeri);
1949 status.lost = tu->timeri->lost;
1950 status.overrun = tu->overrun;
1951 spin_lock_irq(&tu->qlock);
1952 status.queue = tu->qused;
1953 spin_unlock_irq(&tu->qlock);
1962 struct snd_timer_user *tu;
1965 tu = file->private_data;
1966 if (!tu->timeri)
1969 status.tstamp_sec = tu->tstamp.tv_sec;
1970 status.tstamp_nsec = tu->tstamp.tv_nsec;
1971 status.resolution = snd_timer_resolution(tu->timeri);
1972 status.lost = tu->timeri->lost;
1973 status.overrun = tu->overrun;
1974 spin_lock_irq(&tu->qlock);
1975 status.queue = tu->qused;
1976 spin_unlock_irq(&tu->qlock);
1985 struct snd_timer_user *tu;
1987 tu = file->private_data;
1988 if (!tu->timeri)
1990 snd_timer_stop(tu->timeri);
1991 tu->timeri->lost = 0;
1992 tu->last_resolution = 0;
1993 err = snd_timer_start(tu->timeri, tu->ticks);
2002 struct snd_timer_user *tu;
2004 tu = file->private_data;
2005 if (!tu->timeri)
2007 err = snd_timer_stop(tu->timeri);
2016 struct snd_timer_user *tu;
2018 tu = file->private_data;
2019 if (!tu->timeri)
2022 if (!(tu->timeri->flags & SNDRV_TIMER_IFLG_PAUSED))
2024 tu->timeri->lost = 0;
2025 err = snd_timer_continue(tu->timeri);
2034 struct snd_timer_user *tu;
2036 tu = file->private_data;
2037 if (!tu->timeri)
2039 err = snd_timer_pause(tu->timeri);
2045 static int snd_timer_user_tread(void __user *argp, struct snd_timer_user *tu,
2051 if (tu->timeri) /* too late */
2056 old_tread = tu->tread;
2059 tu->tread = TREAD_FORMAT_NONE;
2062 tu->tread = TREAD_FORMAT_TIME64;
2064 tu->tread = TREAD_FORMAT_TIME32;
2066 if (tu->tread != old_tread &&
2067 realloc_user_queue(tu, tu->queue_size) < 0) {
2068 tu->tread = old_tread;
2085 struct snd_timer_user *tu;
2089 tu = file->private_data;
2097 return snd_timer_user_tread(argp, tu, cmd, compat);
2133 struct snd_timer_user *tu = file->private_data;
2136 mutex_lock(&tu->ioctl_lock);
2138 mutex_unlock(&tu->ioctl_lock);
2144 struct snd_timer_user *tu;
2146 tu = file->private_data;
2147 return snd_fasync_helper(fd, file, on, &tu->fasync);
2155 struct snd_timer_user *tu;
2160 tu = file->private_data;
2161 switch (tu->tread) {
2176 mutex_lock(&tu->ioctl_lock);
2177 spin_lock_irq(&tu->qlock);
2179 while (!tu->qused) {
2189 add_wait_queue(&tu->qchange_sleep, &wait);
2191 spin_unlock_irq(&tu->qlock);
2192 mutex_unlock(&tu->ioctl_lock);
2194 mutex_lock(&tu->ioctl_lock);
2195 spin_lock_irq(&tu->qlock);
2197 remove_wait_queue(&tu->qchange_sleep, &wait);
2199 if (tu->disconnected) {
2209 qhead = tu->qhead++;
2210 tu->qhead %= tu->queue_size;
2211 tu->qused--;
2212 spin_unlock_irq(&tu->qlock);
2214 tread = &tu->tqueue[qhead];
2216 switch (tu->tread) {
2235 if (copy_to_user(buffer, &tu->queue[qhead],
2244 spin_lock_irq(&tu->qlock);
2251 spin_unlock_irq(&tu->qlock);
2252 mutex_unlock(&tu->ioctl_lock);
2259 struct snd_timer_user *tu;
2261 tu = file->private_data;
2263 poll_wait(file, &tu->qchange_sleep, wait);
2266 spin_lock_irq(&tu->qlock);
2267 if (tu->qused)
2269 if (tu->disconnected)
2271 spin_unlock_irq(&tu->qlock);