Commit 10b2b6dc authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: firewire-lib: arrange structure for AMDTP stream

In later commit, some members related to AM824 data format will be moved
from AMDTP stream structure to data block structure. This commit is a
preparation for it. Additionally, current layout of AMDTP stream structure
is a bit mess by several extensions. This commit also arranges the layout.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 9ffecb10
...@@ -117,52 +117,56 @@ struct amdtp_stream { ...@@ -117,52 +117,56 @@ struct amdtp_stream {
struct fw_unit *unit; struct fw_unit *unit;
enum cip_flags flags; enum cip_flags flags;
enum amdtp_stream_direction direction; enum amdtp_stream_direction direction;
struct fw_iso_context *context;
struct mutex mutex; struct mutex mutex;
enum cip_sfc sfc; /* For packet processing. */
unsigned int data_block_quadlets; struct fw_iso_context *context;
unsigned int pcm_channels;
unsigned int midi_ports;
void (*transfer_samples)(struct amdtp_stream *s,
struct snd_pcm_substream *pcm,
__be32 *buffer, unsigned int frames);
u8 pcm_positions[AMDTP_MAX_CHANNELS_FOR_PCM];
u8 midi_position;
unsigned int syt_interval;
unsigned int transfer_delay;
unsigned int source_node_id_field;
struct iso_packets_buffer buffer; struct iso_packets_buffer buffer;
struct snd_pcm_substream *pcm;
struct tasklet_struct period_tasklet;
int packet_index; int packet_index;
/* For CIP headers. */
unsigned int source_node_id_field;
unsigned int data_block_quadlets;
unsigned int data_block_counter; unsigned int data_block_counter;
/* quirk: fixed interval of dbc between previos/current packets. */
unsigned int tx_dbc_interval;
/* quirk: indicate the value of dbc field in a first packet. */
unsigned int tx_first_dbc;
/* Internal flags. */
enum cip_sfc sfc;
unsigned int syt_interval;
unsigned int transfer_delay;
unsigned int data_block_state; unsigned int data_block_state;
unsigned int last_syt_offset; unsigned int last_syt_offset;
unsigned int syt_offset_state; unsigned int syt_offset_state;
/* For a PCM substream processing. */
struct snd_pcm_substream *pcm;
struct tasklet_struct period_tasklet;
unsigned int pcm_buffer_pointer; unsigned int pcm_buffer_pointer;
unsigned int pcm_period_pointer; unsigned int pcm_period_pointer;
bool pointer_flush; bool pointer_flush;
bool double_pcm_frames;
/* To wait for first packet. */
bool callbacked;
wait_queue_head_t callback_wait;
struct amdtp_stream *sync_slave;
/* For AM824 processing. */
struct snd_rawmidi_substream *midi[AMDTP_MAX_CHANNELS_FOR_MIDI * 8]; struct snd_rawmidi_substream *midi[AMDTP_MAX_CHANNELS_FOR_MIDI * 8];
int midi_fifo_limit; int midi_fifo_limit;
int midi_fifo_used[AMDTP_MAX_CHANNELS_FOR_MIDI * 8]; int midi_fifo_used[AMDTP_MAX_CHANNELS_FOR_MIDI * 8];
unsigned int pcm_channels;
unsigned int midi_ports;
/* quirk: fixed interval of dbc between previos/current packets. */ u8 pcm_positions[AMDTP_MAX_CHANNELS_FOR_PCM];
unsigned int tx_dbc_interval; u8 midi_position;
/* quirk: indicate the value of dbc field in a first packet. */ bool double_pcm_frames;
unsigned int tx_first_dbc;
bool callbacked; void (*transfer_samples)(struct amdtp_stream *s,
wait_queue_head_t callback_wait; struct snd_pcm_substream *pcm,
struct amdtp_stream *sync_slave; __be32 *buffer, unsigned int frames);
}; };
int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit, int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment