• Home
  • Raw
  • Download

Lines Matching refs:tscm

18 static long tscm_hwdep_read_locked(struct snd_tscm *tscm, char __user *buf,  in tscm_hwdep_read_locked()  argument
25 event.status = (tscm->dev_lock_count > 0); in tscm_hwdep_read_locked()
26 tscm->dev_lock_changed = false; in tscm_hwdep_read_locked()
29 spin_unlock_irq(&tscm->lock); in tscm_hwdep_read_locked()
37 static long tscm_hwdep_read_queue(struct snd_tscm *tscm, char __user *buf, in tscm_hwdep_read_queue() argument
42 struct snd_firewire_tascam_change *entries = tscm->queue; in tscm_hwdep_read_queue()
47 spin_unlock_irq(&tscm->lock); in tscm_hwdep_read_queue()
61 if (tscm->pull_pos == tscm->push_pos) in tscm_hwdep_read_queue()
63 else if (tscm->pull_pos < tscm->push_pos) in tscm_hwdep_read_queue()
64 tail_pos = tscm->push_pos; in tscm_hwdep_read_queue()
67 head_pos = tscm->pull_pos; in tscm_hwdep_read_queue()
75 spin_unlock_irq(&tscm->lock); in tscm_hwdep_read_queue()
79 spin_lock_irq(&tscm->lock); in tscm_hwdep_read_queue()
81 tscm->pull_pos = tail_pos % SND_TSCM_QUEUE_COUNT; in tscm_hwdep_read_queue()
88 spin_unlock_irq(&tscm->lock); in tscm_hwdep_read_queue()
99 struct snd_tscm *tscm = hwdep->private_data; in hwdep_read() local
102 spin_lock_irq(&tscm->lock); in hwdep_read()
104 while (!tscm->dev_lock_changed && tscm->push_pos == tscm->pull_pos) { in hwdep_read()
105 prepare_to_wait(&tscm->hwdep_wait, &wait, TASK_INTERRUPTIBLE); in hwdep_read()
106 spin_unlock_irq(&tscm->lock); in hwdep_read()
108 finish_wait(&tscm->hwdep_wait, &wait); in hwdep_read()
111 spin_lock_irq(&tscm->lock); in hwdep_read()
115 if (tscm->dev_lock_changed) { in hwdep_read()
116 count = tscm_hwdep_read_locked(tscm, buf, count, offset); in hwdep_read()
117 } else if (tscm->push_pos != tscm->pull_pos) { in hwdep_read()
118 count = tscm_hwdep_read_queue(tscm, buf, count, offset); in hwdep_read()
120 spin_unlock_irq(&tscm->lock); in hwdep_read()
130 struct snd_tscm *tscm = hwdep->private_data; in hwdep_poll() local
133 poll_wait(file, &tscm->hwdep_wait, wait); in hwdep_poll()
135 spin_lock_irq(&tscm->lock); in hwdep_poll()
136 if (tscm->dev_lock_changed || tscm->push_pos != tscm->pull_pos) in hwdep_poll()
140 spin_unlock_irq(&tscm->lock); in hwdep_poll()
145 static int hwdep_get_info(struct snd_tscm *tscm, void __user *arg) in hwdep_get_info() argument
147 struct fw_device *dev = fw_parent_device(tscm->unit); in hwdep_get_info()
164 static int hwdep_lock(struct snd_tscm *tscm) in hwdep_lock() argument
168 spin_lock_irq(&tscm->lock); in hwdep_lock()
170 if (tscm->dev_lock_count == 0) { in hwdep_lock()
171 tscm->dev_lock_count = -1; in hwdep_lock()
177 spin_unlock_irq(&tscm->lock); in hwdep_lock()
182 static int hwdep_unlock(struct snd_tscm *tscm) in hwdep_unlock() argument
186 spin_lock_irq(&tscm->lock); in hwdep_unlock()
188 if (tscm->dev_lock_count == -1) { in hwdep_unlock()
189 tscm->dev_lock_count = 0; in hwdep_unlock()
195 spin_unlock_irq(&tscm->lock); in hwdep_unlock()
200 static int tscm_hwdep_state(struct snd_tscm *tscm, void __user *arg) in tscm_hwdep_state() argument
202 if (copy_to_user(arg, tscm->state, sizeof(tscm->state))) in tscm_hwdep_state()
210 struct snd_tscm *tscm = hwdep->private_data; in hwdep_release() local
212 spin_lock_irq(&tscm->lock); in hwdep_release()
213 if (tscm->dev_lock_count == -1) in hwdep_release()
214 tscm->dev_lock_count = 0; in hwdep_release()
215 spin_unlock_irq(&tscm->lock); in hwdep_release()
223 struct snd_tscm *tscm = hwdep->private_data; in hwdep_ioctl() local
227 return hwdep_get_info(tscm, (void __user *)arg); in hwdep_ioctl()
229 return hwdep_lock(tscm); in hwdep_ioctl()
231 return hwdep_unlock(tscm); in hwdep_ioctl()
233 return tscm_hwdep_state(tscm, (void __user *)arg); in hwdep_ioctl()
250 int snd_tscm_create_hwdep_device(struct snd_tscm *tscm) in snd_tscm_create_hwdep_device() argument
262 err = snd_hwdep_new(tscm->card, "Tascam", 0, &hwdep); in snd_tscm_create_hwdep_device()
269 hwdep->private_data = tscm; in snd_tscm_create_hwdep_device()
272 tscm->hwdep = hwdep; in snd_tscm_create_hwdep_device()