Lines Matching refs:s
51 void (*transfer_samples)(struct amdtp_stream *s,
117 int amdtp_dot_set_parameters(struct amdtp_stream *s, unsigned int rate, in amdtp_dot_set_parameters() argument
120 struct amdtp_dot *p = s->protocol; in amdtp_dot_set_parameters()
123 if (amdtp_stream_running(s)) in amdtp_dot_set_parameters()
130 err = amdtp_stream_set_parameters(s, rate, pcm_channels + 1); in amdtp_dot_set_parameters()
134 s->fdf = AMDTP_FDF_AM824 | s->sfc; in amdtp_dot_set_parameters()
138 if (s->direction == AMDTP_IN_STREAM) in amdtp_dot_set_parameters()
149 p->midi_fifo_limit = rate - MIDI_BYTES_PER_SECOND * s->syt_interval + 1; in amdtp_dot_set_parameters()
154 static void write_pcm_s32(struct amdtp_stream *s, struct snd_pcm_substream *pcm, in write_pcm_s32() argument
157 struct amdtp_dot *p = s->protocol; in write_pcm_s32()
164 frames_to_bytes(runtime, s->pcm_buffer_pointer); in write_pcm_s32()
165 remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer; in write_pcm_s32()
174 buffer += s->data_block_quadlets; in write_pcm_s32()
180 static void write_pcm_s16(struct amdtp_stream *s, struct snd_pcm_substream *pcm, in write_pcm_s16() argument
183 struct amdtp_dot *p = s->protocol; in write_pcm_s16()
190 frames_to_bytes(runtime, s->pcm_buffer_pointer); in write_pcm_s16()
191 remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer; in write_pcm_s16()
200 buffer += s->data_block_quadlets; in write_pcm_s16()
206 static void read_pcm_s32(struct amdtp_stream *s, struct snd_pcm_substream *pcm, in read_pcm_s32() argument
209 struct amdtp_dot *p = s->protocol; in read_pcm_s32()
216 frames_to_bytes(runtime, s->pcm_buffer_pointer); in read_pcm_s32()
217 remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer; in read_pcm_s32()
225 buffer += s->data_block_quadlets; in read_pcm_s32()
231 static void write_pcm_silence(struct amdtp_stream *s, __be32 *buffer, in write_pcm_silence() argument
234 struct amdtp_dot *p = s->protocol; in write_pcm_silence()
243 buffer += s->data_block_quadlets; in write_pcm_silence()
247 static bool midi_ratelimit_per_packet(struct amdtp_stream *s, unsigned int port) in midi_ratelimit_per_packet() argument
249 struct amdtp_dot *p = s->protocol; in midi_ratelimit_per_packet()
256 used -= MIDI_BYTES_PER_SECOND * s->syt_interval; in midi_ratelimit_per_packet()
263 static inline void midi_use_bytes(struct amdtp_stream *s, in midi_use_bytes() argument
266 struct amdtp_dot *p = s->protocol; in midi_use_bytes()
268 p->midi_fifo_used[port] += amdtp_rate_table[s->sfc] * count; in midi_use_bytes()
271 static void write_midi_messages(struct amdtp_stream *s, __be32 *buffer, in write_midi_messages() argument
274 struct amdtp_dot *p = s->protocol; in write_midi_messages()
280 port = (s->data_block_counter + f) % 8; in write_midi_messages()
285 midi_ratelimit_per_packet(s, port) && in write_midi_messages()
291 midi_use_bytes(s, port, len); in write_midi_messages()
299 buffer += s->data_block_quadlets; in write_midi_messages()
303 static void read_midi_messages(struct amdtp_stream *s, __be32 *buffer, in read_midi_messages() argument
306 struct amdtp_dot *p = s->protocol; in read_midi_messages()
318 buffer += s->data_block_quadlets; in read_midi_messages()
322 int amdtp_dot_add_pcm_hw_constraints(struct amdtp_stream *s, in amdtp_dot_add_pcm_hw_constraints() argument
332 return amdtp_stream_add_pcm_hw_constraints(s, runtime); in amdtp_dot_add_pcm_hw_constraints()
335 void amdtp_dot_set_pcm_format(struct amdtp_stream *s, snd_pcm_format_t format) in amdtp_dot_set_pcm_format() argument
337 struct amdtp_dot *p = s->protocol; in amdtp_dot_set_pcm_format()
339 if (WARN_ON(amdtp_stream_pcm_running(s))) in amdtp_dot_set_pcm_format()
347 if (s->direction == AMDTP_OUT_STREAM) { in amdtp_dot_set_pcm_format()
354 if (s->direction == AMDTP_OUT_STREAM) in amdtp_dot_set_pcm_format()
362 void amdtp_dot_midi_trigger(struct amdtp_stream *s, unsigned int port, in amdtp_dot_midi_trigger() argument
365 struct amdtp_dot *p = s->protocol; in amdtp_dot_midi_trigger()
371 static unsigned int process_tx_data_blocks(struct amdtp_stream *s, in process_tx_data_blocks() argument
376 struct amdtp_dot *p = (struct amdtp_dot *)s->protocol; in process_tx_data_blocks()
380 pcm = ACCESS_ONCE(s->pcm); in process_tx_data_blocks()
382 p->transfer_samples(s, pcm, buffer, data_blocks); in process_tx_data_blocks()
388 read_midi_messages(s, buffer, data_blocks); in process_tx_data_blocks()
393 static unsigned int process_rx_data_blocks(struct amdtp_stream *s, in process_rx_data_blocks() argument
398 struct amdtp_dot *p = (struct amdtp_dot *)s->protocol; in process_rx_data_blocks()
402 pcm = ACCESS_ONCE(s->pcm); in process_rx_data_blocks()
404 p->transfer_samples(s, pcm, buffer, data_blocks); in process_rx_data_blocks()
407 write_pcm_silence(s, buffer, data_blocks); in process_rx_data_blocks()
411 write_midi_messages(s, buffer, data_blocks); in process_rx_data_blocks()
416 int amdtp_dot_init(struct amdtp_stream *s, struct fw_unit *unit, in amdtp_dot_init() argument
431 return amdtp_stream_init(s, unit, dir, flags, CIP_FMT_AM, in amdtp_dot_init()
435 void amdtp_dot_reset(struct amdtp_stream *s) in amdtp_dot_reset() argument
437 struct amdtp_dot *p = s->protocol; in amdtp_dot_reset()