From: Takashi Sakamoto Date: Sat, 22 May 2021 01:33:01 +0000 (+0900) Subject: ALSA: firewire-lib: code refactoring for generation of syt sequence X-Git-Tag: accepted/tizen/unified/20230118.172025~6918^2~9^2~229 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c79b7158b04a96694a63a6cf9a5d07a95ea2d3a4;p=platform%2Fkernel%2Flinux-rpi.git ALSA: firewire-lib: code refactoring for generation of syt sequence This commit dissolves sequence generator in terms of syt offsets for packet. Signed-off-by: Takashi Sakamoto Link: https://lore.kernel.org/r/20210522013303.49596-5-o-takashi@sakamocchi.jp Signed-off-by: Takashi Iwai --- diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c index 354512a3..77ae75e 100644 --- a/sound/firewire/amdtp-stream.c +++ b/sound/firewire/amdtp-stream.c @@ -441,8 +441,30 @@ static unsigned int calculate_syt_offset(unsigned int *last_syt_offset, return syt_offset; } +static void pool_ideal_syt_offsets(struct amdtp_stream *s, struct seq_desc *descs, + const unsigned int seq_size, unsigned int seq_tail, + unsigned int count) +{ + const enum cip_sfc sfc = s->sfc; + unsigned int last = s->ctx_data.rx.last_syt_offset; + unsigned int state = s->ctx_data.rx.syt_offset_state; + int i; + + for (i = 0; i < count; ++i) { + struct seq_desc *desc = descs + seq_tail; + + desc->syt_offset = calculate_syt_offset(&last, &state, sfc); + + seq_tail = (seq_tail + 1) % seq_size; + } + + s->ctx_data.rx.last_syt_offset = last; + s->ctx_data.rx.syt_offset_state = state; +} + static void pool_ideal_seq_descs(struct amdtp_stream *s, unsigned int count) { + struct seq_desc *descs = s->ctx_data.rx.seq.descs; unsigned int seq_tail = s->ctx_data.rx.seq.tail; const unsigned int seq_size = s->ctx_data.rx.seq.size; const unsigned int syt_interval = s->syt_interval; @@ -450,11 +472,11 @@ static void pool_ideal_seq_descs(struct amdtp_stream *s, unsigned int count) const bool is_blocking = !!(s->flags & CIP_BLOCKING); int i; + pool_ideal_syt_offsets(s, descs, seq_size, seq_tail, count); + for (i = 0; i < count; ++i) { struct seq_desc *desc = s->ctx_data.rx.seq.descs + seq_tail; - desc->syt_offset = calculate_syt_offset(&s->ctx_data.rx.last_syt_offset, - &s->ctx_data.rx.syt_offset_state, sfc); desc->data_blocks = calculate_data_blocks(&s->ctx_data.rx.data_block_state, is_blocking, desc->syt_offset == CIP_SYT_NO_INFO, syt_interval, sfc);