tscm 132 sound/firewire/tascam/amdtp-tascam.c struct snd_tscm *tscm = container_of(s, struct snd_tscm, tx_stream); tscm 133 sound/firewire/tascam/amdtp-tascam.c bool used = READ_ONCE(tscm->hwdep->used); tscm 142 sound/firewire/tascam/amdtp-tascam.c before = tscm->state[index]; tscm 159 sound/firewire/tascam/amdtp-tascam.c &tscm->queue[tscm->push_pos]; tscm 162 sound/firewire/tascam/amdtp-tascam.c spin_lock_irqsave(&tscm->lock, flag); tscm 166 sound/firewire/tascam/amdtp-tascam.c if (++tscm->push_pos >= SND_TSCM_QUEUE_COUNT) tscm 167 sound/firewire/tascam/amdtp-tascam.c tscm->push_pos = 0; tscm 168 sound/firewire/tascam/amdtp-tascam.c spin_unlock_irqrestore(&tscm->lock, flag); tscm 170 sound/firewire/tascam/amdtp-tascam.c wake_up(&tscm->hwdep_wait); tscm 174 sound/firewire/tascam/amdtp-tascam.c tscm->state[index] = after; tscm 18 sound/firewire/tascam/tascam-hwdep.c static long tscm_hwdep_read_locked(struct snd_tscm *tscm, char __user *buf, tscm 25 sound/firewire/tascam/tascam-hwdep.c event.status = (tscm->dev_lock_count > 0); tscm 26 sound/firewire/tascam/tascam-hwdep.c tscm->dev_lock_changed = false; tscm 29 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 37 sound/firewire/tascam/tascam-hwdep.c static long tscm_hwdep_read_queue(struct snd_tscm *tscm, char __user *buf, tscm 42 sound/firewire/tascam/tascam-hwdep.c struct snd_firewire_tascam_change *entries = tscm->queue; tscm 47 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 61 sound/firewire/tascam/tascam-hwdep.c if (tscm->pull_pos == tscm->push_pos) tscm 63 sound/firewire/tascam/tascam-hwdep.c else if (tscm->pull_pos < tscm->push_pos) tscm 64 sound/firewire/tascam/tascam-hwdep.c tail_pos = tscm->push_pos; tscm 67 sound/firewire/tascam/tascam-hwdep.c head_pos = tscm->pull_pos; tscm 75 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 79 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 81 sound/firewire/tascam/tascam-hwdep.c tscm->pull_pos = tail_pos % SND_TSCM_QUEUE_COUNT; tscm 88 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 99 sound/firewire/tascam/tascam-hwdep.c struct snd_tscm *tscm = hwdep->private_data; tscm 102 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 104 sound/firewire/tascam/tascam-hwdep.c while (!tscm->dev_lock_changed && tscm->push_pos == tscm->pull_pos) { tscm 105 sound/firewire/tascam/tascam-hwdep.c prepare_to_wait(&tscm->hwdep_wait, &wait, TASK_INTERRUPTIBLE); tscm 106 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 108 sound/firewire/tascam/tascam-hwdep.c finish_wait(&tscm->hwdep_wait, &wait); tscm 111 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 115 sound/firewire/tascam/tascam-hwdep.c if (tscm->dev_lock_changed) { tscm 116 sound/firewire/tascam/tascam-hwdep.c count = tscm_hwdep_read_locked(tscm, buf, count, offset); tscm 117 sound/firewire/tascam/tascam-hwdep.c } else if (tscm->push_pos != tscm->pull_pos) { tscm 118 sound/firewire/tascam/tascam-hwdep.c count = tscm_hwdep_read_queue(tscm, buf, count, offset); tscm 120 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 130 sound/firewire/tascam/tascam-hwdep.c struct snd_tscm *tscm = hwdep->private_data; tscm 133 sound/firewire/tascam/tascam-hwdep.c poll_wait(file, &tscm->hwdep_wait, wait); tscm 135 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 136 sound/firewire/tascam/tascam-hwdep.c if (tscm->dev_lock_changed || tscm->push_pos != tscm->pull_pos) tscm 140 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 145 sound/firewire/tascam/tascam-hwdep.c static int hwdep_get_info(struct snd_tscm *tscm, void __user *arg) tscm 147 sound/firewire/tascam/tascam-hwdep.c struct fw_device *dev = fw_parent_device(tscm->unit); tscm 164 sound/firewire/tascam/tascam-hwdep.c static int hwdep_lock(struct snd_tscm *tscm) tscm 168 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 170 sound/firewire/tascam/tascam-hwdep.c if (tscm->dev_lock_count == 0) { tscm 171 sound/firewire/tascam/tascam-hwdep.c tscm->dev_lock_count = -1; tscm 177 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 182 sound/firewire/tascam/tascam-hwdep.c static int hwdep_unlock(struct snd_tscm *tscm) tscm 186 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 188 sound/firewire/tascam/tascam-hwdep.c if (tscm->dev_lock_count == -1) { tscm 189 sound/firewire/tascam/tascam-hwdep.c tscm->dev_lock_count = 0; tscm 195 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 200 sound/firewire/tascam/tascam-hwdep.c static int tscm_hwdep_state(struct snd_tscm *tscm, void __user *arg) tscm 202 sound/firewire/tascam/tascam-hwdep.c if (copy_to_user(arg, tscm->state, sizeof(tscm->state))) tscm 210 sound/firewire/tascam/tascam-hwdep.c struct snd_tscm *tscm = hwdep->private_data; tscm 212 sound/firewire/tascam/tascam-hwdep.c spin_lock_irq(&tscm->lock); tscm 213 sound/firewire/tascam/tascam-hwdep.c if (tscm->dev_lock_count == -1) tscm 214 sound/firewire/tascam/tascam-hwdep.c tscm->dev_lock_count = 0; tscm 215 sound/firewire/tascam/tascam-hwdep.c spin_unlock_irq(&tscm->lock); tscm 223 sound/firewire/tascam/tascam-hwdep.c struct snd_tscm *tscm = hwdep->private_data; tscm 227 sound/firewire/tascam/tascam-hwdep.c return hwdep_get_info(tscm, (void __user *)arg); tscm 229 sound/firewire/tascam/tascam-hwdep.c return hwdep_lock(tscm); tscm 231 sound/firewire/tascam/tascam-hwdep.c return hwdep_unlock(tscm); tscm 233 sound/firewire/tascam/tascam-hwdep.c return tscm_hwdep_state(tscm, (void __user *)arg); tscm 250 sound/firewire/tascam/tascam-hwdep.c int snd_tscm_create_hwdep_device(struct snd_tscm *tscm) tscm 262 sound/firewire/tascam/tascam-hwdep.c err = snd_hwdep_new(tscm->card, "Tascam", 0, &hwdep); tscm 269 sound/firewire/tascam/tascam-hwdep.c hwdep->private_data = tscm; tscm 272 sound/firewire/tascam/tascam-hwdep.c tscm->hwdep = hwdep; tscm 18 sound/firewire/tascam/tascam-midi.c struct snd_tscm *tscm = substream->rmidi->private_data; tscm 20 sound/firewire/tascam/tascam-midi.c snd_fw_async_midi_port_init(&tscm->out_ports[substream->number]); tscm 38 sound/firewire/tascam/tascam-midi.c struct snd_tscm *tscm = substream->rmidi->private_data; tscm 40 sound/firewire/tascam/tascam-midi.c snd_fw_async_midi_port_finish(&tscm->out_ports[substream->number]); tscm 45 sound/firewire/tascam/tascam-midi.c struct snd_tscm *tscm = substrm->rmidi->private_data; tscm 48 sound/firewire/tascam/tascam-midi.c spin_lock_irqsave(&tscm->lock, flags); tscm 51 sound/firewire/tascam/tascam-midi.c tscm->tx_midi_substreams[substrm->number] = substrm; tscm 53 sound/firewire/tascam/tascam-midi.c tscm->tx_midi_substreams[substrm->number] = NULL; tscm 55 sound/firewire/tascam/tascam-midi.c spin_unlock_irqrestore(&tscm->lock, flags); tscm 60 sound/firewire/tascam/tascam-midi.c struct snd_tscm *tscm = substrm->rmidi->private_data; tscm 63 sound/firewire/tascam/tascam-midi.c spin_lock_irqsave(&tscm->lock, flags); tscm 66 sound/firewire/tascam/tascam-midi.c snd_fw_async_midi_port_run(&tscm->out_ports[substrm->number], tscm 69 sound/firewire/tascam/tascam-midi.c spin_unlock_irqrestore(&tscm->lock, flags); tscm 72 sound/firewire/tascam/tascam-midi.c int snd_tscm_create_midi_devices(struct snd_tscm *tscm) tscm 90 sound/firewire/tascam/tascam-midi.c err = snd_rawmidi_new(tscm->card, tscm->card->driver, 0, tscm 91 sound/firewire/tascam/tascam-midi.c tscm->spec->midi_playback_ports, tscm 92 sound/firewire/tascam/tascam-midi.c tscm->spec->midi_capture_ports, tscm 98 sound/firewire/tascam/tascam-midi.c "%s MIDI", tscm->card->shortname); tscm 99 sound/firewire/tascam/tascam-midi.c rmidi->private_data = tscm; tscm 109 sound/firewire/tascam/tascam-midi.c if (subs->number < tscm->spec->midi_capture_ports) { tscm 113 sound/firewire/tascam/tascam-midi.c tscm->card->shortname, subs->number + 1); tscm 124 sound/firewire/tascam/tascam-midi.c if (subs->number < tscm->spec->midi_playback_ports) { tscm 128 sound/firewire/tascam/tascam-midi.c tscm->card->shortname, subs->number + 1); tscm 10 sound/firewire/tascam/tascam-pcm.c static int pcm_init_hw_params(struct snd_tscm *tscm, tscm 20 sound/firewire/tascam/tascam-pcm.c stream = &tscm->tx_stream; tscm 21 sound/firewire/tascam/tascam-pcm.c pcm_channels = tscm->spec->pcm_capture_analog_channels; tscm 24 sound/firewire/tascam/tascam-pcm.c stream = &tscm->rx_stream; tscm 25 sound/firewire/tascam/tascam-pcm.c pcm_channels = tscm->spec->pcm_playback_analog_channels; tscm 28 sound/firewire/tascam/tascam-pcm.c if (tscm->spec->has_adat) tscm 30 sound/firewire/tascam/tascam-pcm.c if (tscm->spec->has_spdif) tscm 45 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 50 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_lock_try(tscm); tscm 54 sound/firewire/tascam/tascam-pcm.c err = pcm_init_hw_params(tscm, substream); tscm 58 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_get_clock(tscm, &clock); tscm 63 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_running(&tscm->rx_stream) || tscm 64 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_running(&tscm->tx_stream)) { tscm 65 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_get_rate(tscm, &rate); tscm 76 sound/firewire/tascam/tascam-pcm.c snd_tscm_stream_lock_release(tscm); tscm 82 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 84 sound/firewire/tascam/tascam-pcm.c snd_tscm_stream_lock_release(tscm); tscm 92 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 103 sound/firewire/tascam/tascam-pcm.c mutex_lock(&tscm->mutex); tscm 104 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_reserve_duplex(tscm, rate); tscm 106 sound/firewire/tascam/tascam-pcm.c ++tscm->substreams_counter; tscm 107 sound/firewire/tascam/tascam-pcm.c mutex_unlock(&tscm->mutex); tscm 115 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 117 sound/firewire/tascam/tascam-pcm.c mutex_lock(&tscm->mutex); tscm 120 sound/firewire/tascam/tascam-pcm.c --tscm->substreams_counter; tscm 122 sound/firewire/tascam/tascam-pcm.c snd_tscm_stream_stop_duplex(tscm); tscm 124 sound/firewire/tascam/tascam-pcm.c mutex_unlock(&tscm->mutex); tscm 131 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 135 sound/firewire/tascam/tascam-pcm.c mutex_lock(&tscm->mutex); tscm 137 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_start_duplex(tscm, runtime->rate); tscm 139 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_prepare(&tscm->tx_stream); tscm 141 sound/firewire/tascam/tascam-pcm.c mutex_unlock(&tscm->mutex); tscm 148 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 152 sound/firewire/tascam/tascam-pcm.c mutex_lock(&tscm->mutex); tscm 154 sound/firewire/tascam/tascam-pcm.c err = snd_tscm_stream_start_duplex(tscm, runtime->rate); tscm 156 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_prepare(&tscm->rx_stream); tscm 158 sound/firewire/tascam/tascam-pcm.c mutex_unlock(&tscm->mutex); tscm 165 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 169 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_trigger(&tscm->tx_stream, substream); tscm 172 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_trigger(&tscm->tx_stream, NULL); tscm 183 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 187 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_trigger(&tscm->rx_stream, substream); tscm 190 sound/firewire/tascam/tascam-pcm.c amdtp_stream_pcm_trigger(&tscm->rx_stream, NULL); tscm 201 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = sbstrm->private_data; tscm 203 sound/firewire/tascam/tascam-pcm.c return amdtp_stream_pcm_pointer(&tscm->tx_stream); tscm 208 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = sbstrm->private_data; tscm 210 sound/firewire/tascam/tascam-pcm.c return amdtp_stream_pcm_pointer(&tscm->rx_stream); tscm 215 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 217 sound/firewire/tascam/tascam-pcm.c return amdtp_stream_pcm_ack(&tscm->tx_stream); tscm 222 sound/firewire/tascam/tascam-pcm.c struct snd_tscm *tscm = substream->private_data; tscm 224 sound/firewire/tascam/tascam-pcm.c return amdtp_stream_pcm_ack(&tscm->rx_stream); tscm 227 sound/firewire/tascam/tascam-pcm.c int snd_tscm_create_pcm_devices(struct snd_tscm *tscm) tscm 256 sound/firewire/tascam/tascam-pcm.c err = snd_pcm_new(tscm->card, tscm->card->driver, 0, 1, 1, &pcm); tscm 260 sound/firewire/tascam/tascam-pcm.c pcm->private_data = tscm; tscm 262 sound/firewire/tascam/tascam-pcm.c "%s PCM", tscm->card->shortname); tscm 13 sound/firewire/tascam/tascam-proc.c struct snd_tscm *tscm = entry->private_data; tscm 18 sound/firewire/tascam/tascam-proc.c err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST, tscm 25 sound/firewire/tascam/tascam-proc.c err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST, tscm 32 sound/firewire/tascam/tascam-proc.c err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST, tscm 39 sound/firewire/tascam/tascam-proc.c err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST, tscm 52 sound/firewire/tascam/tascam-proc.c static void add_node(struct snd_tscm *tscm, struct snd_info_entry *root, tscm 59 sound/firewire/tascam/tascam-proc.c entry = snd_info_create_card_entry(tscm->card, name, root); tscm 61 sound/firewire/tascam/tascam-proc.c snd_info_set_text_ops(entry, tscm, op); tscm 64 sound/firewire/tascam/tascam-proc.c void snd_tscm_proc_init(struct snd_tscm *tscm) tscm 72 sound/firewire/tascam/tascam-proc.c root = snd_info_create_card_entry(tscm->card, "firewire", tscm 73 sound/firewire/tascam/tascam-proc.c tscm->card->proc_root); tscm 78 sound/firewire/tascam/tascam-proc.c add_node(tscm, root, "firmware", proc_read_firmware); tscm 16 sound/firewire/tascam/tascam-stream.c static int get_clock(struct snd_tscm *tscm, u32 *data) tscm 23 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST, tscm 44 sound/firewire/tascam/tascam-stream.c static int set_clock(struct snd_tscm *tscm, unsigned int rate, tscm 51 sound/firewire/tascam/tascam-stream.c err = get_clock(tscm, &data); tscm 81 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 92 sound/firewire/tascam/tascam-stream.c return snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 97 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_get_rate(struct snd_tscm *tscm, unsigned int *rate) tscm 102 sound/firewire/tascam/tascam-stream.c err = get_clock(tscm, &data); tscm 125 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_get_clock(struct snd_tscm *tscm, enum snd_tscm_clock *clock) tscm 130 sound/firewire/tascam/tascam-stream.c err = get_clock(tscm, &data); tscm 141 sound/firewire/tascam/tascam-stream.c static int enable_data_channels(struct snd_tscm *tscm) tscm 149 sound/firewire/tascam/tascam-stream.c for (i = 0; i < tscm->spec->pcm_capture_analog_channels; ++i) tscm 151 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_adat) tscm 153 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_spdif) tscm 157 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 164 sound/firewire/tascam/tascam-stream.c for (i = 0; i < tscm->spec->pcm_playback_analog_channels; ++i) tscm 166 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_adat) tscm 168 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_spdif) tscm 172 sound/firewire/tascam/tascam-stream.c return snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 177 sound/firewire/tascam/tascam-stream.c static int set_stream_formats(struct snd_tscm *tscm, unsigned int rate) tscm 184 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 190 sound/firewire/tascam/tascam-stream.c return enable_data_channels(tscm); tscm 193 sound/firewire/tascam/tascam-stream.c static void finish_session(struct snd_tscm *tscm) tscm 198 sound/firewire/tascam/tascam-stream.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 203 sound/firewire/tascam/tascam-stream.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 209 sound/firewire/tascam/tascam-stream.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 213 sound/firewire/tascam/tascam-stream.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 217 sound/firewire/tascam/tascam-stream.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 222 sound/firewire/tascam/tascam-stream.c static int begin_session(struct snd_tscm *tscm) tscm 228 sound/firewire/tascam/tascam-stream.c reg = cpu_to_be32(tscm->tx_resources.channel); tscm 229 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 237 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 244 sound/firewire/tascam/tascam-stream.c reg = cpu_to_be32(tscm->rx_resources.channel); tscm 245 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 252 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 259 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 267 sound/firewire/tascam/tascam-stream.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 275 sound/firewire/tascam/tascam-stream.c return snd_fw_transaction(tscm->unit, tscm 281 sound/firewire/tascam/tascam-stream.c static int keep_resources(struct snd_tscm *tscm, unsigned int rate, tscm 287 sound/firewire/tascam/tascam-stream.c if (stream == &tscm->tx_stream) tscm 288 sound/firewire/tascam/tascam-stream.c resources = &tscm->tx_resources; tscm 290 sound/firewire/tascam/tascam-stream.c resources = &tscm->rx_resources; tscm 298 sound/firewire/tascam/tascam-stream.c fw_parent_device(tscm->unit)->max_speed); tscm 301 sound/firewire/tascam/tascam-stream.c static int init_stream(struct snd_tscm *tscm, struct amdtp_stream *s) tscm 308 sound/firewire/tascam/tascam-stream.c if (s == &tscm->tx_stream) { tscm 309 sound/firewire/tascam/tascam-stream.c resources = &tscm->tx_resources; tscm 311 sound/firewire/tascam/tascam-stream.c pcm_channels = tscm->spec->pcm_capture_analog_channels; tscm 313 sound/firewire/tascam/tascam-stream.c resources = &tscm->rx_resources; tscm 315 sound/firewire/tascam/tascam-stream.c pcm_channels = tscm->spec->pcm_playback_analog_channels; tscm 318 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_adat) tscm 320 sound/firewire/tascam/tascam-stream.c if (tscm->spec->has_spdif) tscm 323 sound/firewire/tascam/tascam-stream.c err = fw_iso_resources_init(resources, tscm->unit); tscm 327 sound/firewire/tascam/tascam-stream.c err = amdtp_tscm_init(s, tscm->unit, dir, pcm_channels); tscm 334 sound/firewire/tascam/tascam-stream.c static void destroy_stream(struct snd_tscm *tscm, struct amdtp_stream *s) tscm 338 sound/firewire/tascam/tascam-stream.c if (s == &tscm->tx_stream) tscm 339 sound/firewire/tascam/tascam-stream.c fw_iso_resources_destroy(&tscm->tx_resources); tscm 341 sound/firewire/tascam/tascam-stream.c fw_iso_resources_destroy(&tscm->rx_resources); tscm 344 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_init_duplex(struct snd_tscm *tscm) tscm 348 sound/firewire/tascam/tascam-stream.c err = init_stream(tscm, &tscm->tx_stream); tscm 352 sound/firewire/tascam/tascam-stream.c err = init_stream(tscm, &tscm->rx_stream); tscm 354 sound/firewire/tascam/tascam-stream.c destroy_stream(tscm, &tscm->tx_stream); tscm 358 sound/firewire/tascam/tascam-stream.c err = amdtp_domain_init(&tscm->domain); tscm 360 sound/firewire/tascam/tascam-stream.c destroy_stream(tscm, &tscm->tx_stream); tscm 361 sound/firewire/tascam/tascam-stream.c destroy_stream(tscm, &tscm->rx_stream); tscm 368 sound/firewire/tascam/tascam-stream.c void snd_tscm_stream_update_duplex(struct snd_tscm *tscm) tscm 370 sound/firewire/tascam/tascam-stream.c amdtp_domain_stop(&tscm->domain); tscm 372 sound/firewire/tascam/tascam-stream.c amdtp_stream_pcm_abort(&tscm->tx_stream); tscm 373 sound/firewire/tascam/tascam-stream.c amdtp_stream_pcm_abort(&tscm->rx_stream); tscm 378 sound/firewire/tascam/tascam-stream.c void snd_tscm_stream_destroy_duplex(struct snd_tscm *tscm) tscm 380 sound/firewire/tascam/tascam-stream.c amdtp_domain_destroy(&tscm->domain); tscm 382 sound/firewire/tascam/tascam-stream.c destroy_stream(tscm, &tscm->rx_stream); tscm 383 sound/firewire/tascam/tascam-stream.c destroy_stream(tscm, &tscm->tx_stream); tscm 386 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_reserve_duplex(struct snd_tscm *tscm, unsigned int rate) tscm 391 sound/firewire/tascam/tascam-stream.c err = snd_tscm_stream_get_rate(tscm, &curr_rate); tscm 395 sound/firewire/tascam/tascam-stream.c if (tscm->substreams_counter == 0 || rate != curr_rate) { tscm 396 sound/firewire/tascam/tascam-stream.c amdtp_domain_stop(&tscm->domain); tscm 398 sound/firewire/tascam/tascam-stream.c finish_session(tscm); tscm 400 sound/firewire/tascam/tascam-stream.c fw_iso_resources_free(&tscm->tx_resources); tscm 401 sound/firewire/tascam/tascam-stream.c fw_iso_resources_free(&tscm->rx_resources); tscm 403 sound/firewire/tascam/tascam-stream.c err = set_clock(tscm, rate, INT_MAX); tscm 407 sound/firewire/tascam/tascam-stream.c err = keep_resources(tscm, rate, &tscm->tx_stream); tscm 411 sound/firewire/tascam/tascam-stream.c err = keep_resources(tscm, rate, &tscm->rx_stream); tscm 413 sound/firewire/tascam/tascam-stream.c fw_iso_resources_free(&tscm->tx_resources); tscm 421 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) tscm 423 sound/firewire/tascam/tascam-stream.c unsigned int generation = tscm->rx_resources.generation; tscm 426 sound/firewire/tascam/tascam-stream.c if (tscm->substreams_counter == 0) tscm 429 sound/firewire/tascam/tascam-stream.c if (amdtp_streaming_error(&tscm->rx_stream) || tscm 430 sound/firewire/tascam/tascam-stream.c amdtp_streaming_error(&tscm->tx_stream)) { tscm 431 sound/firewire/tascam/tascam-stream.c amdtp_domain_stop(&tscm->domain); tscm 432 sound/firewire/tascam/tascam-stream.c finish_session(tscm); tscm 435 sound/firewire/tascam/tascam-stream.c if (generation != fw_parent_device(tscm->unit)->card->generation) { tscm 436 sound/firewire/tascam/tascam-stream.c err = fw_iso_resources_update(&tscm->tx_resources); tscm 440 sound/firewire/tascam/tascam-stream.c err = fw_iso_resources_update(&tscm->rx_resources); tscm 445 sound/firewire/tascam/tascam-stream.c if (!amdtp_stream_running(&tscm->rx_stream)) { tscm 446 sound/firewire/tascam/tascam-stream.c int spd = fw_parent_device(tscm->unit)->max_speed; tscm 448 sound/firewire/tascam/tascam-stream.c err = set_stream_formats(tscm, rate); tscm 452 sound/firewire/tascam/tascam-stream.c err = begin_session(tscm); tscm 456 sound/firewire/tascam/tascam-stream.c err = amdtp_domain_add_stream(&tscm->domain, &tscm->rx_stream, tscm 457 sound/firewire/tascam/tascam-stream.c tscm->rx_resources.channel, spd); tscm 461 sound/firewire/tascam/tascam-stream.c err = amdtp_domain_add_stream(&tscm->domain, &tscm->tx_stream, tscm 462 sound/firewire/tascam/tascam-stream.c tscm->tx_resources.channel, spd); tscm 466 sound/firewire/tascam/tascam-stream.c err = amdtp_domain_start(&tscm->domain); tscm 470 sound/firewire/tascam/tascam-stream.c if (!amdtp_stream_wait_callback(&tscm->rx_stream, tscm 472 sound/firewire/tascam/tascam-stream.c !amdtp_stream_wait_callback(&tscm->tx_stream, tscm 481 sound/firewire/tascam/tascam-stream.c amdtp_domain_stop(&tscm->domain); tscm 482 sound/firewire/tascam/tascam-stream.c finish_session(tscm); tscm 487 sound/firewire/tascam/tascam-stream.c void snd_tscm_stream_stop_duplex(struct snd_tscm *tscm) tscm 489 sound/firewire/tascam/tascam-stream.c if (tscm->substreams_counter == 0) { tscm 490 sound/firewire/tascam/tascam-stream.c amdtp_domain_stop(&tscm->domain); tscm 491 sound/firewire/tascam/tascam-stream.c finish_session(tscm); tscm 493 sound/firewire/tascam/tascam-stream.c fw_iso_resources_free(&tscm->tx_resources); tscm 494 sound/firewire/tascam/tascam-stream.c fw_iso_resources_free(&tscm->rx_resources); tscm 498 sound/firewire/tascam/tascam-stream.c void snd_tscm_stream_lock_changed(struct snd_tscm *tscm) tscm 500 sound/firewire/tascam/tascam-stream.c tscm->dev_lock_changed = true; tscm 501 sound/firewire/tascam/tascam-stream.c wake_up(&tscm->hwdep_wait); tscm 504 sound/firewire/tascam/tascam-stream.c int snd_tscm_stream_lock_try(struct snd_tscm *tscm) tscm 508 sound/firewire/tascam/tascam-stream.c spin_lock_irq(&tscm->lock); tscm 511 sound/firewire/tascam/tascam-stream.c if (tscm->dev_lock_count < 0) { tscm 517 sound/firewire/tascam/tascam-stream.c if (tscm->dev_lock_count++ == 0) tscm 518 sound/firewire/tascam/tascam-stream.c snd_tscm_stream_lock_changed(tscm); tscm 521 sound/firewire/tascam/tascam-stream.c spin_unlock_irq(&tscm->lock); tscm 525 sound/firewire/tascam/tascam-stream.c void snd_tscm_stream_lock_release(struct snd_tscm *tscm) tscm 527 sound/firewire/tascam/tascam-stream.c spin_lock_irq(&tscm->lock); tscm 529 sound/firewire/tascam/tascam-stream.c if (WARN_ON(tscm->dev_lock_count <= 0)) tscm 531 sound/firewire/tascam/tascam-stream.c if (--tscm->dev_lock_count == 0) tscm 532 sound/firewire/tascam/tascam-stream.c snd_tscm_stream_lock_changed(tscm); tscm 534 sound/firewire/tascam/tascam-stream.c spin_unlock_irq(&tscm->lock); tscm 250 sound/firewire/tascam/tascam-transaction.c struct snd_tscm *tscm = callback_data; tscm 259 sound/firewire/tascam/tascam-transaction.c if (offset != tscm->async_handler.offset) tscm 268 sound/firewire/tascam/tascam-transaction.c if (port >= tscm->spec->midi_capture_ports) tscm 284 sound/firewire/tascam/tascam-transaction.c substream = READ_ONCE(tscm->tx_midi_substreams[port]); tscm 292 sound/firewire/tascam/tascam-transaction.c int snd_tscm_transaction_register(struct snd_tscm *tscm) tscm 306 sound/firewire/tascam/tascam-transaction.c tscm->async_handler.length = 8 * 8; tscm 307 sound/firewire/tascam/tascam-transaction.c tscm->async_handler.address_callback = handle_midi_tx; tscm 308 sound/firewire/tascam/tascam-transaction.c tscm->async_handler.callback_data = tscm; tscm 310 sound/firewire/tascam/tascam-transaction.c err = fw_core_add_address_handler(&tscm->async_handler, tscm 315 sound/firewire/tascam/tascam-transaction.c err = snd_tscm_transaction_reregister(tscm); tscm 320 sound/firewire/tascam/tascam-transaction.c tscm->out_ports[i].parent = fw_parent_device(tscm->unit); tscm 321 sound/firewire/tascam/tascam-transaction.c tscm->out_ports[i].next_ktime = 0; tscm 322 sound/firewire/tascam/tascam-transaction.c INIT_WORK(&tscm->out_ports[i].work, midi_port_work); tscm 327 sound/firewire/tascam/tascam-transaction.c fw_core_remove_address_handler(&tscm->async_handler); tscm 328 sound/firewire/tascam/tascam-transaction.c tscm->async_handler.callback_data = NULL; tscm 333 sound/firewire/tascam/tascam-transaction.c int snd_tscm_transaction_reregister(struct snd_tscm *tscm) tscm 335 sound/firewire/tascam/tascam-transaction.c struct fw_device *device = fw_parent_device(tscm->unit); tscm 341 sound/firewire/tascam/tascam-transaction.c (tscm->async_handler.offset >> 32)); tscm 342 sound/firewire/tascam/tascam-transaction.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 348 sound/firewire/tascam/tascam-transaction.c reg = cpu_to_be32(tscm->async_handler.offset); tscm 349 sound/firewire/tascam/tascam-transaction.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 357 sound/firewire/tascam/tascam-transaction.c err = snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 365 sound/firewire/tascam/tascam-transaction.c return snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 370 sound/firewire/tascam/tascam-transaction.c void snd_tscm_transaction_unregister(struct snd_tscm *tscm) tscm 374 sound/firewire/tascam/tascam-transaction.c if (tscm->async_handler.callback_data == NULL) tscm 379 sound/firewire/tascam/tascam-transaction.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 385 sound/firewire/tascam/tascam-transaction.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 390 sound/firewire/tascam/tascam-transaction.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 393 sound/firewire/tascam/tascam-transaction.c snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, tscm 397 sound/firewire/tascam/tascam-transaction.c fw_core_remove_address_handler(&tscm->async_handler); tscm 398 sound/firewire/tascam/tascam-transaction.c tscm->async_handler.callback_data = NULL; tscm 47 sound/firewire/tascam/tascam.c static int identify_model(struct snd_tscm *tscm) tscm 49 sound/firewire/tascam/tascam.c struct fw_device *fw_dev = fw_parent_device(tscm->unit); tscm 56 sound/firewire/tascam/tascam.c dev_err(&tscm->unit->device, tscm 72 sound/firewire/tascam/tascam.c tscm->spec = &model_specs[i]; tscm 76 sound/firewire/tascam/tascam.c if (tscm->spec == NULL) tscm 79 sound/firewire/tascam/tascam.c strcpy(tscm->card->driver, "FW-TASCAM"); tscm 80 sound/firewire/tascam/tascam.c strcpy(tscm->card->shortname, model); tscm 81 sound/firewire/tascam/tascam.c strcpy(tscm->card->mixername, model); tscm 82 sound/firewire/tascam/tascam.c snprintf(tscm->card->longname, sizeof(tscm->card->longname), tscm 85 sound/firewire/tascam/tascam.c dev_name(&tscm->unit->device), 100 << fw_dev->max_speed); tscm 92 sound/firewire/tascam/tascam.c struct snd_tscm *tscm = card->private_data; tscm 94 sound/firewire/tascam/tascam.c snd_tscm_transaction_unregister(tscm); tscm 95 sound/firewire/tascam/tascam.c snd_tscm_stream_destroy_duplex(tscm); tscm 100 sound/firewire/tascam/tascam.c struct snd_tscm *tscm = container_of(work, struct snd_tscm, dwork.work); tscm 103 sound/firewire/tascam/tascam.c err = snd_card_new(&tscm->unit->device, -1, NULL, THIS_MODULE, 0, tscm 104 sound/firewire/tascam/tascam.c &tscm->card); tscm 107 sound/firewire/tascam/tascam.c tscm->card->private_free = tscm_card_free; tscm 108 sound/firewire/tascam/tascam.c tscm->card->private_data = tscm; tscm 110 sound/firewire/tascam/tascam.c err = identify_model(tscm); tscm 114 sound/firewire/tascam/tascam.c err = snd_tscm_transaction_register(tscm); tscm 118 sound/firewire/tascam/tascam.c err = snd_tscm_stream_init_duplex(tscm); tscm 122 sound/firewire/tascam/tascam.c snd_tscm_proc_init(tscm); tscm 124 sound/firewire/tascam/tascam.c err = snd_tscm_create_pcm_devices(tscm); tscm 128 sound/firewire/tascam/tascam.c err = snd_tscm_create_midi_devices(tscm); tscm 132 sound/firewire/tascam/tascam.c err = snd_tscm_create_hwdep_device(tscm); tscm 136 sound/firewire/tascam/tascam.c err = snd_card_register(tscm->card); tscm 140 sound/firewire/tascam/tascam.c tscm->registered = true; tscm 144 sound/firewire/tascam/tascam.c snd_card_free(tscm->card); tscm 145 sound/firewire/tascam/tascam.c dev_info(&tscm->unit->device, tscm 152 sound/firewire/tascam/tascam.c struct snd_tscm *tscm; tscm 155 sound/firewire/tascam/tascam.c tscm = devm_kzalloc(&unit->device, sizeof(struct snd_tscm), GFP_KERNEL); tscm 156 sound/firewire/tascam/tascam.c if (!tscm) tscm 158 sound/firewire/tascam/tascam.c tscm->unit = fw_unit_get(unit); tscm 159 sound/firewire/tascam/tascam.c dev_set_drvdata(&unit->device, tscm); tscm 161 sound/firewire/tascam/tascam.c mutex_init(&tscm->mutex); tscm 162 sound/firewire/tascam/tascam.c spin_lock_init(&tscm->lock); tscm 163 sound/firewire/tascam/tascam.c init_waitqueue_head(&tscm->hwdep_wait); tscm 166 sound/firewire/tascam/tascam.c INIT_DEFERRABLE_WORK(&tscm->dwork, do_registration); tscm 167 sound/firewire/tascam/tascam.c snd_fw_schedule_registration(unit, &tscm->dwork); tscm 174 sound/firewire/tascam/tascam.c struct snd_tscm *tscm = dev_get_drvdata(&unit->device); tscm 177 sound/firewire/tascam/tascam.c if (!tscm->registered) tscm 178 sound/firewire/tascam/tascam.c snd_fw_schedule_registration(unit, &tscm->dwork); tscm 180 sound/firewire/tascam/tascam.c snd_tscm_transaction_reregister(tscm); tscm 186 sound/firewire/tascam/tascam.c if (tscm->registered) { tscm 187 sound/firewire/tascam/tascam.c mutex_lock(&tscm->mutex); tscm 188 sound/firewire/tascam/tascam.c snd_tscm_stream_update_duplex(tscm); tscm 189 sound/firewire/tascam/tascam.c mutex_unlock(&tscm->mutex); tscm 195 sound/firewire/tascam/tascam.c struct snd_tscm *tscm = dev_get_drvdata(&unit->device); tscm 202 sound/firewire/tascam/tascam.c cancel_delayed_work_sync(&tscm->dwork); tscm 204 sound/firewire/tascam/tascam.c if (tscm->registered) { tscm 206 sound/firewire/tascam/tascam.c snd_card_free(tscm->card); tscm 209 sound/firewire/tascam/tascam.c mutex_destroy(&tscm->mutex); tscm 210 sound/firewire/tascam/tascam.c fw_unit_put(tscm->unit); tscm 165 sound/firewire/tascam/tascam.h int snd_tscm_stream_get_rate(struct snd_tscm *tscm, unsigned int *rate); tscm 166 sound/firewire/tascam/tascam.h int snd_tscm_stream_get_clock(struct snd_tscm *tscm, tscm 168 sound/firewire/tascam/tascam.h int snd_tscm_stream_init_duplex(struct snd_tscm *tscm); tscm 169 sound/firewire/tascam/tascam.h void snd_tscm_stream_update_duplex(struct snd_tscm *tscm); tscm 170 sound/firewire/tascam/tascam.h void snd_tscm_stream_destroy_duplex(struct snd_tscm *tscm); tscm 171 sound/firewire/tascam/tascam.h int snd_tscm_stream_reserve_duplex(struct snd_tscm *tscm, unsigned int rate); tscm 172 sound/firewire/tascam/tascam.h int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate); tscm 173 sound/firewire/tascam/tascam.h void snd_tscm_stream_stop_duplex(struct snd_tscm *tscm); tscm 175 sound/firewire/tascam/tascam.h void snd_tscm_stream_lock_changed(struct snd_tscm *tscm); tscm 176 sound/firewire/tascam/tascam.h int snd_tscm_stream_lock_try(struct snd_tscm *tscm); tscm 177 sound/firewire/tascam/tascam.h void snd_tscm_stream_lock_release(struct snd_tscm *tscm); tscm 199 sound/firewire/tascam/tascam.h int snd_tscm_transaction_register(struct snd_tscm *tscm); tscm 200 sound/firewire/tascam/tascam.h int snd_tscm_transaction_reregister(struct snd_tscm *tscm); tscm 201 sound/firewire/tascam/tascam.h void snd_tscm_transaction_unregister(struct snd_tscm *tscm); tscm 203 sound/firewire/tascam/tascam.h void snd_tscm_proc_init(struct snd_tscm *tscm); tscm 205 sound/firewire/tascam/tascam.h int snd_tscm_create_pcm_devices(struct snd_tscm *tscm); tscm 207 sound/firewire/tascam/tascam.h int snd_tscm_create_midi_devices(struct snd_tscm *tscm); tscm 209 sound/firewire/tascam/tascam.h int snd_tscm_create_hwdep_device(struct snd_tscm *tscm);