Commit 0f5cfcb2 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: firewire-lib: code refactoring to process context payloads

This is code refactoring for common processing for payloads of
ishocornous context.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 5e2ece0f
......@@ -760,22 +760,14 @@ static inline void cancel_stream(struct amdtp_stream *s)
WRITE_ONCE(s->pcm_buffer_pointer, SNDRV_PCM_POS_XRUN);
}
static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
size_t header_length, void *header,
void *private_data)
static void process_ctx_payloads(struct amdtp_stream *s,
const struct pkt_desc *descs,
unsigned int packets)
{
struct amdtp_stream *s = private_data;
const __be32 *ctx_header = header;
unsigned int packets = header_length / sizeof(*ctx_header);
int i;
if (s->packet_index < 0)
return;
generate_ideal_pkt_descs(s, s->pkt_descs, ctx_header, packets);
for (i = 0; i < packets; ++i) {
const struct pkt_desc *desc = s->pkt_descs + i;
const struct pkt_desc *desc = descs + i;
struct snd_pcm_substream *pcm;
unsigned int pcm_frames;
......@@ -786,6 +778,23 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
}
}
static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
size_t header_length, void *header,
void *private_data)
{
struct amdtp_stream *s = private_data;
const __be32 *ctx_header = header;
unsigned int packets = header_length / sizeof(*ctx_header);
int i;
if (s->packet_index < 0)
return;
generate_ideal_pkt_descs(s, s->pkt_descs, ctx_header, packets);
process_ctx_payloads(s, s->pkt_descs, packets);
for (i = 0; i < packets; ++i) {
const struct pkt_desc *desc = s->pkt_descs + i;
......@@ -836,19 +845,7 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
return;
}
} else {
for (i = 0; i < packets; ++i) {
const struct pkt_desc *desc = s->pkt_descs;
struct snd_pcm_substream *pcm;
unsigned int pcm_frames;
pcm_frames = s->process_data_blocks(s,
desc->ctx_payload, desc->data_blocks,
desc->data_block_counter);
pcm = READ_ONCE(s->pcm);
if (pcm && pcm_frames > 0)
update_pcm_pointers(s, pcm, pcm_frames);
}
process_ctx_payloads(s, s->pkt_descs, packets);
}
for (i = 0; i < packets; ++i) {
......
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