Lines Matching refs:ff

2 // ff-protocol-former.c - a part of driver for RME Fireface series
8 #include "ff.h"
71 static int former_get_clock(struct snd_ff *ff, unsigned int *rate,
78 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST,
87 static int former_switch_fetching_mode(struct snd_ff *ff, bool enable)
96 count = max(count, ff->spec->pcm_playback_channels[i]);
114 err = snd_fw_transaction(ff->unit, TCODE_WRITE_BLOCK_REQUEST,
121 static void dump_clock_config(struct snd_ff *ff, struct snd_info_buffer *buffer)
130 err = snd_fw_transaction(ff->unit, TCODE_READ_BLOCK_REQUEST,
159 static void dump_sync_status(struct snd_ff *ff, struct snd_info_buffer *buffer)
200 err = snd_fw_transaction(ff->unit, TCODE_READ_BLOCK_REQUEST,
257 static void former_dump_status(struct snd_ff *ff,
260 dump_clock_config(ff, buffer);
261 dump_sync_status(ff, buffer);
264 static int former_fill_midi_msg(struct snd_ff *ff,
268 u8 *buf = (u8 *)ff->msg_buf[port];
279 ff->msg_buf[port][i] = cpu_to_le32(buf[i]);
280 ff->rx_bytes[port] = len;
294 static int allocate_tx_resources(struct snd_ff *ff)
301 reg = cpu_to_le32(ff->tx_stream.data_block_quadlets);
302 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
311 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST,
330 ff->tx_resources.channel = tx_isoc_channel;
335 static int ff800_allocate_resources(struct snd_ff *ff, unsigned int rate)
342 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
353 err = fw_iso_resources_allocate(&ff->rx_resources,
354 amdtp_stream_get_max_payload(&ff->rx_stream),
355 fw_parent_device(ff->unit)->max_speed);
362 data = ff->rx_stream.data_block_quadlets << 3;
363 data = (data << 8) | ff->rx_resources.channel;
365 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
370 return allocate_tx_resources(ff);
373 static int ff800_begin_session(struct snd_ff *ff, unsigned int rate)
375 unsigned int generation = ff->rx_resources.generation;
378 if (generation != fw_parent_device(ff->unit)->card->generation) {
379 int err = fw_iso_resources_update(&ff->rx_resources);
385 reg |= cpu_to_le32(ff->tx_stream.data_block_quadlets);
386 if (fw_parent_device(ff->unit)->max_speed == SCODE_800)
388 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
392 static void ff800_finish_session(struct snd_ff *ff)
397 snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
405 static void ff800_handle_midi_msg(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
414 substream = READ_ONCE(ff->tx_midi_substreams[0]);
439 static int ff400_allocate_resources(struct snd_ff *ff, unsigned int rate)
456 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
468 ff->tx_resources.channels_mask = 0x00000000000000ffuLL;
469 err = fw_iso_resources_allocate(&ff->tx_resources,
470 amdtp_stream_get_max_payload(&ff->tx_stream),
471 fw_parent_device(ff->unit)->max_speed);
476 ff->rx_resources.channels_mask = 0x00000000000000ffuLL;
477 err = fw_iso_resources_allocate(&ff->rx_resources,
478 amdtp_stream_get_max_payload(&ff->rx_stream),
479 fw_parent_device(ff->unit)->max_speed);
481 fw_iso_resources_free(&ff->tx_resources);
486 static int ff400_begin_session(struct snd_ff *ff, unsigned int rate)
488 unsigned int generation = ff->rx_resources.generation;
492 if (generation != fw_parent_device(ff->unit)->card->generation) {
493 err = fw_iso_resources_update(&ff->tx_resources);
497 err = fw_iso_resources_update(&ff->rx_resources);
504 reg = cpu_to_le32(((ff->rx_stream.data_block_quadlets << 3) << 8) |
505 ff->rx_resources.channel);
506 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
515 (ff->tx_resources.channel << 5) |
516 (ff->tx_stream.data_block_quadlets));
517 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
524 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
528 static void ff400_finish_session(struct snd_ff *ff)
533 snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST,
537 static void parse_midi_msg(struct snd_ff *ff, u32 quad, unsigned int port)
539 struct snd_rawmidi_substream *substream = READ_ONCE(ff->tx_midi_substreams[port]);
559 static bool ff400_has_msg(struct snd_ff *ff)
561 struct ff400_msg_parser *parser = ff->msg_parser;
648 static void ff400_handle_msg(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
658 struct ff400_msg_parser *parser = ff->msg_parser;
668 parse_midi_msg(ff, quad, 0);
670 parse_midi_msg(ff, quad, 1);
675 wake_up(&ff->hwdep_wait);
678 static long ff400_copy_msg_to_user(struct snd_ff *ff, char __user *buf, long count)
684 struct ff400_msg_parser *parser = ff->msg_parser;
695 spin_unlock_irq(&ff->lock);
699 spin_lock_irq(&ff->lock);
711 spin_unlock_irq(&ff->lock);
714 spin_lock_irq(&ff->lock);