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

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
Loading
Loading
Loading
Loading
+22 −25
Original line number Diff line number Diff line
@@ -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) {