Lines Matching refs:ff
2 // ff-protocol-former.c - a part of driver for RME Fireface series
10 #include "ff.h"
73 static int former_get_clock(struct snd_ff *ff, unsigned int *rate,
80 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST,
89 static int former_switch_fetching_mode(struct snd_ff *ff, bool enable)
98 count = max(count, ff->spec->pcm_playback_channels[i]);
116 err = snd_fw_transaction(ff->unit, TCODE_WRITE_BLOCK_REQUEST,
123 static void dump_clock_config(struct snd_ff *ff, struct snd_info_buffer *buffer)
132 err = snd_fw_transaction(ff->unit, TCODE_READ_BLOCK_REQUEST,
161 static void dump_sync_status(struct snd_ff *ff, struct snd_info_buffer *buffer)
202 err = snd_fw_transaction(ff->unit, TCODE_READ_BLOCK_REQUEST,
259 static void former_dump_status(struct snd_ff *ff,
262 dump_clock_config(ff, buffer);
263 dump_sync_status(ff, buffer);
266 static int former_fill_midi_msg(struct snd_ff *ff,
270 u8 *buf = (u8 *)ff->msg_buf[port];
281 ff->msg_buf[port][i] = cpu_to_le32(buf[i]);
282 ff->rx_bytes[port] = len;
296 static int allocate_tx_resources(struct snd_ff *ff)
303 reg = cpu_to_le32(ff->tx_stream.data_block_quadlets);
304 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
313 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST,
332 ff->tx_resources.channel = tx_isoc_channel;
337 static int ff800_allocate_resources(struct snd_ff *ff, unsigned int rate)
344 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
355 err = fw_iso_resources_allocate(&ff->rx_resources,
356 amdtp_stream_get_max_payload(&ff->rx_stream),
357 fw_parent_device(ff->unit)->max_speed);
364 data = ff->rx_stream.data_block_quadlets << 3;
365 data = (data << 8) | ff->rx_resources.channel;
367 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
372 return allocate_tx_resources(ff);
375 static int ff800_begin_session(struct snd_ff *ff, unsigned int rate)
377 unsigned int generation = ff->rx_resources.generation;
380 if (generation != fw_parent_device(ff->unit)->card->generation) {
381 int err = fw_iso_resources_update(&ff->rx_resources);
387 reg |= cpu_to_le32(ff->tx_stream.data_block_quadlets);
388 if (fw_parent_device(ff->unit)->max_speed == SCODE_800)
390 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
394 static void ff800_finish_session(struct snd_ff *ff)
399 snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
407 static void ff800_handle_midi_msg(struct snd_ff *ff, unsigned int offset,
416 substream = READ_ONCE(ff->tx_midi_substreams[0]);
441 static int ff400_allocate_resources(struct snd_ff *ff, unsigned int rate)
458 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
470 ff->tx_resources.channels_mask = 0x00000000000000ffuLL;
471 err = fw_iso_resources_allocate(&ff->tx_resources,
472 amdtp_stream_get_max_payload(&ff->tx_stream),
473 fw_parent_device(ff->unit)->max_speed);
478 ff->rx_resources.channels_mask = 0x00000000000000ffuLL;
479 err = fw_iso_resources_allocate(&ff->rx_resources,
480 amdtp_stream_get_max_payload(&ff->rx_stream),
481 fw_parent_device(ff->unit)->max_speed);
483 fw_iso_resources_free(&ff->tx_resources);
488 static int ff400_begin_session(struct snd_ff *ff, unsigned int rate)
490 unsigned int generation = ff->rx_resources.generation;
494 if (generation != fw_parent_device(ff->unit)->card->generation) {
495 err = fw_iso_resources_update(&ff->tx_resources);
499 err = fw_iso_resources_update(&ff->rx_resources);
506 reg = cpu_to_le32(((ff->rx_stream.data_block_quadlets << 3) << 8) |
507 ff->rx_resources.channel);
508 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
517 (ff->tx_resources.channel << 5) |
518 (ff->tx_stream.data_block_quadlets));
519 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
526 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
530 static void ff400_finish_session(struct snd_ff *ff)
535 snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
558 static void ff400_handle_midi_msg(struct snd_ff *ff, unsigned int offset,
577 substream = READ_ONCE(ff->tx_midi_substreams[0]);
587 substream = READ_ONCE(ff->tx_midi_substreams[1]);