Commit 13d11f14 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai
Browse files

ALSA: firewire-lib: code refactoring for transfer delay



In later commit, transfer delay is used in both IR and IT contexts. This
commit refactors regardless of transfer delay.

Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210522013303.49596-7-o-takashi@sakamocchi.jp


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c9f3ac2a
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -294,17 +294,11 @@ int amdtp_stream_set_parameters(struct amdtp_stream *s, unsigned int rate,
	s->syt_interval = amdtp_syt_intervals[sfc];

	// default buffering in the device.
	if (s->direction == AMDTP_OUT_STREAM) {
		s->ctx_data.rx.transfer_delay =
					TRANSFER_DELAY_TICKS - TICKS_PER_CYCLE;
	s->transfer_delay = TRANSFER_DELAY_TICKS - TICKS_PER_CYCLE;

		if (s->flags & CIP_BLOCKING) {
			// additional buffering needed to adjust for no-data
			// packets.
			s->ctx_data.rx.transfer_delay +=
				TICKS_PER_SECOND * s->syt_interval / rate;
		}
	}
	// additional buffering needed to adjust for no-data packets.
	if (s->flags & CIP_BLOCKING)
		s->transfer_delay += TICKS_PER_SECOND * s->syt_interval / rate;

	return 0;
}
@@ -897,12 +891,10 @@ static void generate_pkt_descs(struct amdtp_stream *s, const __be32 *ctx_header,

		desc->cycle = compute_ohci_it_cycle(*ctx_header, s->queue_size);

		if (aware_syt && seq->syt_offset != CIP_SYT_NO_INFO) {
			desc->syt = compute_syt(seq->syt_offset, desc->cycle,
						s->ctx_data.rx.transfer_delay);
		} else {
		if (aware_syt && seq->syt_offset != CIP_SYT_NO_INFO)
			desc->syt = compute_syt(seq->syt_offset, desc->cycle, s->transfer_delay);
		else
			desc->syt = CIP_SYT_NO_INFO;
		}

		desc->data_blocks = seq->data_blocks;

+3 −4
Original line number Diff line number Diff line
@@ -140,15 +140,13 @@ struct amdtp_stream {
			unsigned int dbc_interval;
		} tx;
		struct {
			// To calculate CIP data blocks and tstamp.
			unsigned int transfer_delay;

			// To generate CIP header.
			unsigned int fdf;

			// To generate constant hardware IRQ.
			unsigned int event_count;

			// To calculate CIP data blocks and tstamp.
			struct {
				struct seq_desc *descs;
				unsigned int size;
@@ -169,7 +167,8 @@ struct amdtp_stream {
	unsigned int sph;
	unsigned int fmt;

	/* Internal flags. */
	// Internal flags.
	unsigned int transfer_delay;
	enum cip_sfc sfc;
	unsigned int syt_interval;