diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/core/timer.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c index c8496c7b8df8..488c28ac56c0 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c | |||
@@ -131,7 +131,7 @@ static snd_timer_t *snd_timer_find(snd_timer_id_t *tid) | |||
131 | struct list_head *p; | 131 | struct list_head *p; |
132 | 132 | ||
133 | list_for_each(p, &snd_timer_list) { | 133 | list_for_each(p, &snd_timer_list) { |
134 | timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 134 | timer = list_entry(p, snd_timer_t, device_list); |
135 | 135 | ||
136 | if (timer->tmr_class != tid->dev_class) | 136 | if (timer->tmr_class != tid->dev_class) |
137 | continue; | 137 | continue; |
@@ -186,9 +186,9 @@ static void snd_timer_check_slave(snd_timer_instance_t *slave) | |||
186 | 186 | ||
187 | /* FIXME: it's really dumb to look up all entries.. */ | 187 | /* FIXME: it's really dumb to look up all entries.. */ |
188 | list_for_each(p, &snd_timer_list) { | 188 | list_for_each(p, &snd_timer_list) { |
189 | timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 189 | timer = list_entry(p, snd_timer_t, device_list); |
190 | list_for_each(q, &timer->open_list_head) { | 190 | list_for_each(q, &timer->open_list_head) { |
191 | master = (snd_timer_instance_t *)list_entry(q, snd_timer_instance_t, open_list); | 191 | master = list_entry(q, snd_timer_instance_t, open_list); |
192 | if (slave->slave_class == master->slave_class && | 192 | if (slave->slave_class == master->slave_class && |
193 | slave->slave_id == master->slave_id) { | 193 | slave->slave_id == master->slave_id) { |
194 | list_del(&slave->open_list); | 194 | list_del(&slave->open_list); |
@@ -216,7 +216,7 @@ static void snd_timer_check_master(snd_timer_instance_t *master) | |||
216 | 216 | ||
217 | /* check all pending slaves */ | 217 | /* check all pending slaves */ |
218 | list_for_each_safe(p, n, &snd_timer_slave_list) { | 218 | list_for_each_safe(p, n, &snd_timer_slave_list) { |
219 | slave = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, open_list); | 219 | slave = list_entry(p, snd_timer_instance_t, open_list); |
220 | if (slave->slave_class == master->slave_class && | 220 | if (slave->slave_class == master->slave_class && |
221 | slave->slave_id == master->slave_id) { | 221 | slave->slave_id == master->slave_id) { |
222 | list_del(p); | 222 | list_del(p); |
@@ -348,7 +348,7 @@ int snd_timer_close(snd_timer_instance_t * timeri) | |||
348 | timer->hw.close(timer); | 348 | timer->hw.close(timer); |
349 | /* remove slave links */ | 349 | /* remove slave links */ |
350 | list_for_each_safe(p, n, &timeri->slave_list_head) { | 350 | list_for_each_safe(p, n, &timeri->slave_list_head) { |
351 | slave = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, open_list); | 351 | slave = list_entry(p, snd_timer_instance_t, open_list); |
352 | spin_lock_irq(&slave_active_lock); | 352 | spin_lock_irq(&slave_active_lock); |
353 | _snd_timer_stop(slave, 1, SNDRV_TIMER_EVENT_RESOLUTION); | 353 | _snd_timer_stop(slave, 1, SNDRV_TIMER_EVENT_RESOLUTION); |
354 | list_del(p); | 354 | list_del(p); |
@@ -406,7 +406,7 @@ static void snd_timer_notify1(snd_timer_instance_t *ti, enum sndrv_timer_event e | |||
406 | return; | 406 | return; |
407 | spin_lock_irqsave(&timer->lock, flags); | 407 | spin_lock_irqsave(&timer->lock, flags); |
408 | list_for_each(n, &ti->slave_active_head) { | 408 | list_for_each(n, &ti->slave_active_head) { |
409 | ts = (snd_timer_instance_t *)list_entry(n, snd_timer_instance_t, active_list); | 409 | ts = list_entry(n, snd_timer_instance_t, active_list); |
410 | if (ts->ccallback) | 410 | if (ts->ccallback) |
411 | ts->ccallback(ti, event + 100, &tstamp, resolution); | 411 | ts->ccallback(ti, event + 100, &tstamp, resolution); |
412 | } | 412 | } |
@@ -584,7 +584,7 @@ static void snd_timer_reschedule(snd_timer_t * timer, unsigned long ticks_left) | |||
584 | struct list_head *p; | 584 | struct list_head *p; |
585 | 585 | ||
586 | list_for_each(p, &timer->active_list_head) { | 586 | list_for_each(p, &timer->active_list_head) { |
587 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, active_list); | 587 | ti = list_entry(p, snd_timer_instance_t, active_list); |
588 | if (ti->flags & SNDRV_TIMER_IFLG_START) { | 588 | if (ti->flags & SNDRV_TIMER_IFLG_START) { |
589 | ti->flags &= ~SNDRV_TIMER_IFLG_START; | 589 | ti->flags &= ~SNDRV_TIMER_IFLG_START; |
590 | ti->flags |= SNDRV_TIMER_IFLG_RUNNING; | 590 | ti->flags |= SNDRV_TIMER_IFLG_RUNNING; |
@@ -621,7 +621,7 @@ static void snd_timer_tasklet(unsigned long arg) | |||
621 | /* now process all callbacks */ | 621 | /* now process all callbacks */ |
622 | while (!list_empty(&timer->sack_list_head)) { | 622 | while (!list_empty(&timer->sack_list_head)) { |
623 | p = timer->sack_list_head.next; /* get first item */ | 623 | p = timer->sack_list_head.next; /* get first item */ |
624 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, ack_list); | 624 | ti = list_entry(p, snd_timer_instance_t, ack_list); |
625 | 625 | ||
626 | /* remove from ack_list and make empty */ | 626 | /* remove from ack_list and make empty */ |
627 | list_del_init(p); | 627 | list_del_init(p); |
@@ -669,7 +669,7 @@ void snd_timer_interrupt(snd_timer_t * timer, unsigned long ticks_left) | |||
669 | * instance is relinked to done_list_head before callback is called. | 669 | * instance is relinked to done_list_head before callback is called. |
670 | */ | 670 | */ |
671 | list_for_each_safe(p, n, &timer->active_list_head) { | 671 | list_for_each_safe(p, n, &timer->active_list_head) { |
672 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, active_list); | 672 | ti = list_entry(p, snd_timer_instance_t, active_list); |
673 | if (!(ti->flags & SNDRV_TIMER_IFLG_RUNNING)) | 673 | if (!(ti->flags & SNDRV_TIMER_IFLG_RUNNING)) |
674 | continue; | 674 | continue; |
675 | ti->pticks += ticks_left; | 675 | ti->pticks += ticks_left; |
@@ -696,7 +696,7 @@ void snd_timer_interrupt(snd_timer_t * timer, unsigned long ticks_left) | |||
696 | } | 696 | } |
697 | } | 697 | } |
698 | list_for_each(q, &ti->slave_active_head) { | 698 | list_for_each(q, &ti->slave_active_head) { |
699 | ts = (snd_timer_instance_t *)list_entry(q, snd_timer_instance_t, active_list); | 699 | ts = list_entry(q, snd_timer_instance_t, active_list); |
700 | ts->pticks = ti->pticks; | 700 | ts->pticks = ti->pticks; |
701 | ts->resolution = resolution; | 701 | ts->resolution = resolution; |
702 | if (list_empty(&ts->ack_list)) { | 702 | if (list_empty(&ts->ack_list)) { |
@@ -729,7 +729,7 @@ void snd_timer_interrupt(snd_timer_t * timer, unsigned long ticks_left) | |||
729 | /* now process all fast callbacks */ | 729 | /* now process all fast callbacks */ |
730 | while (!list_empty(&timer->ack_list_head)) { | 730 | while (!list_empty(&timer->ack_list_head)) { |
731 | p = timer->ack_list_head.next; /* get first item */ | 731 | p = timer->ack_list_head.next; /* get first item */ |
732 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, ack_list); | 732 | ti = list_entry(p, snd_timer_instance_t, ack_list); |
733 | 733 | ||
734 | /* remove from ack_list and make empty */ | 734 | /* remove from ack_list and make empty */ |
735 | list_del_init(p); | 735 | list_del_init(p); |
@@ -825,7 +825,7 @@ static int snd_timer_dev_register(snd_device_t *dev) | |||
825 | 825 | ||
826 | down(®ister_mutex); | 826 | down(®ister_mutex); |
827 | list_for_each(p, &snd_timer_list) { | 827 | list_for_each(p, &snd_timer_list) { |
828 | timer1 = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 828 | timer1 = list_entry(p, snd_timer_t, device_list); |
829 | if (timer1->tmr_class > timer->tmr_class) | 829 | if (timer1->tmr_class > timer->tmr_class) |
830 | break; | 830 | break; |
831 | if (timer1->tmr_class < timer->tmr_class) | 831 | if (timer1->tmr_class < timer->tmr_class) |
@@ -864,7 +864,7 @@ static int snd_timer_unregister(snd_timer_t *timer) | |||
864 | snd_printk(KERN_WARNING "timer 0x%lx is busy?\n", (long)timer); | 864 | snd_printk(KERN_WARNING "timer 0x%lx is busy?\n", (long)timer); |
865 | list_for_each_safe(p, n, &timer->open_list_head) { | 865 | list_for_each_safe(p, n, &timer->open_list_head) { |
866 | list_del_init(p); | 866 | list_del_init(p); |
867 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, open_list); | 867 | ti = list_entry(p, snd_timer_instance_t, open_list); |
868 | ti->timer = NULL; | 868 | ti->timer = NULL; |
869 | } | 869 | } |
870 | } | 870 | } |
@@ -899,11 +899,11 @@ void snd_timer_notify(snd_timer_t *timer, enum sndrv_timer_event event, struct t | |||
899 | resolution = timer->hw.resolution; | 899 | resolution = timer->hw.resolution; |
900 | } | 900 | } |
901 | list_for_each(p, &timer->active_list_head) { | 901 | list_for_each(p, &timer->active_list_head) { |
902 | ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, active_list); | 902 | ti = list_entry(p, snd_timer_instance_t, active_list); |
903 | if (ti->ccallback) | 903 | if (ti->ccallback) |
904 | ti->ccallback(ti, event, tstamp, resolution); | 904 | ti->ccallback(ti, event, tstamp, resolution); |
905 | list_for_each(n, &ti->slave_active_head) { | 905 | list_for_each(n, &ti->slave_active_head) { |
906 | ts = (snd_timer_instance_t *)list_entry(n, snd_timer_instance_t, active_list); | 906 | ts = list_entry(n, snd_timer_instance_t, active_list); |
907 | if (ts->ccallback) | 907 | if (ts->ccallback) |
908 | ts->ccallback(ts, event, tstamp, resolution); | 908 | ts->ccallback(ts, event, tstamp, resolution); |
909 | } | 909 | } |
@@ -1052,7 +1052,7 @@ static void snd_timer_proc_read(snd_info_entry_t *entry, | |||
1052 | 1052 | ||
1053 | down(®ister_mutex); | 1053 | down(®ister_mutex); |
1054 | list_for_each(p, &snd_timer_list) { | 1054 | list_for_each(p, &snd_timer_list) { |
1055 | timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 1055 | timer = list_entry(p, snd_timer_t, device_list); |
1056 | switch (timer->tmr_class) { | 1056 | switch (timer->tmr_class) { |
1057 | case SNDRV_TIMER_CLASS_GLOBAL: | 1057 | case SNDRV_TIMER_CLASS_GLOBAL: |
1058 | snd_iprintf(buffer, "G%i: ", timer->tmr_device); | 1058 | snd_iprintf(buffer, "G%i: ", timer->tmr_device); |
@@ -1074,7 +1074,7 @@ static void snd_timer_proc_read(snd_info_entry_t *entry, | |||
1074 | snd_iprintf(buffer, "\n"); | 1074 | snd_iprintf(buffer, "\n"); |
1075 | spin_lock_irqsave(&timer->lock, flags); | 1075 | spin_lock_irqsave(&timer->lock, flags); |
1076 | list_for_each(q, &timer->open_list_head) { | 1076 | list_for_each(q, &timer->open_list_head) { |
1077 | ti = (snd_timer_instance_t *)list_entry(q, snd_timer_instance_t, open_list); | 1077 | ti = list_entry(q, snd_timer_instance_t, open_list); |
1078 | snd_iprintf(buffer, " Client %s : %s : lost interrupts %li\n", | 1078 | snd_iprintf(buffer, " Client %s : %s : lost interrupts %li\n", |
1079 | ti->owner ? ti->owner : "unknown", | 1079 | ti->owner ? ti->owner : "unknown", |
1080 | ti->flags & (SNDRV_TIMER_IFLG_START|SNDRV_TIMER_IFLG_RUNNING) ? "running" : "stopped", | 1080 | ti->flags & (SNDRV_TIMER_IFLG_START|SNDRV_TIMER_IFLG_RUNNING) ? "running" : "stopped", |
@@ -1275,7 +1275,8 @@ static int snd_timer_user_next_device(snd_timer_id_t __user *_tid) | |||
1275 | if (list_empty(&snd_timer_list)) | 1275 | if (list_empty(&snd_timer_list)) |
1276 | snd_timer_user_zero_id(&id); | 1276 | snd_timer_user_zero_id(&id); |
1277 | else { | 1277 | else { |
1278 | timer = (snd_timer_t *)list_entry(snd_timer_list.next, snd_timer_t, device_list); | 1278 | timer = list_entry(snd_timer_list.next, |
1279 | snd_timer_t, device_list); | ||
1279 | snd_timer_user_copy_id(&id, timer); | 1280 | snd_timer_user_copy_id(&id, timer); |
1280 | } | 1281 | } |
1281 | } else { | 1282 | } else { |
@@ -1283,7 +1284,7 @@ static int snd_timer_user_next_device(snd_timer_id_t __user *_tid) | |||
1283 | case SNDRV_TIMER_CLASS_GLOBAL: | 1284 | case SNDRV_TIMER_CLASS_GLOBAL: |
1284 | id.device = id.device < 0 ? 0 : id.device + 1; | 1285 | id.device = id.device < 0 ? 0 : id.device + 1; |
1285 | list_for_each(p, &snd_timer_list) { | 1286 | list_for_each(p, &snd_timer_list) { |
1286 | timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 1287 | timer = list_entry(p, snd_timer_t, device_list); |
1287 | if (timer->tmr_class > SNDRV_TIMER_CLASS_GLOBAL) { | 1288 | if (timer->tmr_class > SNDRV_TIMER_CLASS_GLOBAL) { |
1288 | snd_timer_user_copy_id(&id, timer); | 1289 | snd_timer_user_copy_id(&id, timer); |
1289 | break; | 1290 | break; |
@@ -1312,7 +1313,7 @@ static int snd_timer_user_next_device(snd_timer_id_t __user *_tid) | |||
1312 | } | 1313 | } |
1313 | } | 1314 | } |
1314 | list_for_each(p, &snd_timer_list) { | 1315 | list_for_each(p, &snd_timer_list) { |
1315 | timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 1316 | timer = list_entry(p, snd_timer_t, device_list); |
1316 | if (timer->tmr_class > id.dev_class) { | 1317 | if (timer->tmr_class > id.dev_class) { |
1317 | snd_timer_user_copy_id(&id, timer); | 1318 | snd_timer_user_copy_id(&id, timer); |
1318 | break; | 1319 | break; |
@@ -1915,7 +1916,7 @@ static void __exit alsa_timer_exit(void) | |||
1915 | snd_unregister_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0); | 1916 | snd_unregister_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0); |
1916 | /* unregister the system timer */ | 1917 | /* unregister the system timer */ |
1917 | list_for_each_safe(p, n, &snd_timer_list) { | 1918 | list_for_each_safe(p, n, &snd_timer_list) { |
1918 | snd_timer_t *timer = (snd_timer_t *)list_entry(p, snd_timer_t, device_list); | 1919 | snd_timer_t *timer = list_entry(p, snd_timer_t, device_list); |
1919 | snd_timer_unregister(timer); | 1920 | snd_timer_unregister(timer); |
1920 | } | 1921 | } |
1921 | if (snd_timer_proc_entry) { | 1922 | if (snd_timer_proc_entry) { |