[alsa-devel] [PATCH] ALSA: firewire-lib: continue packet processing at detecting wrong CIP headers

Takashi Iwai tiwai at suse.de
Sun Oct 11 18:20:29 CEST 2015


On Sun, 11 Oct 2015 15:33:50 +0200,
Takashi Sakamoto wrote:
> 
> In firewire-lib, isochronous packet streaming is stopped when detecting
> wrong value for FMT field of CIP headers. Although this is appropriate
> to IEC 61883-1 and 6, some BeBoB based devices with vendors' customization
> use invalid value to FMT field of CIP headers in the beginning of
> streaming.
> 
> $ journalctl
>   snd-bebob fw1.0: Detect unexpected protocol: 01000000 8000ffff
> 
> I got this log with M-Audio FireWire 1814. In this line, the value of FMT
> field is 0x00, while it should be 0x10 in usual AMDTP.
> 
> Except for the beginning, these devices continue to transfer packets with
> valid value for FMT field, except for the beginning. Therefore, in this
> case, firewire-lib should continue to process packets. The former
> implementation of firewire-lib performs it.
> 
> This commit loosens the handling of wrong value, to continue packet
> processing in the case.
> 
> Fixes: 414ba022a528('ALSA: firewire-lib: add support arbitrary value for fmt/fdf fields in CIP header')
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>

Applied, thanks.


Takashi

> ---
>  sound/firewire/amdtp-stream.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
> index fa10b58..ed29026 100644
> --- a/sound/firewire/amdtp-stream.c
> +++ b/sound/firewire/amdtp-stream.c
> @@ -468,10 +468,12 @@ static int handle_in_packet(struct amdtp_stream *s,
>  	/* Check valid protocol or not. */
>  	fmt = (cip_header[1] & CIP_FMT_MASK) >> CIP_FMT_SHIFT;
>  	if (fmt != s->fmt) {
> -		dev_err(&s->unit->device,
> -			"Detect unexpected protocol: %08x %08x\n",
> -			cip_header[0], cip_header[1]);
> -		return -EIO;
> +		dev_info_ratelimited(&s->unit->device,
> +				     "Detect unexpected protocol: %08x %08x\n",
> +				     cip_header[0], cip_header[1]);
> +		*data_blocks = 0;
> +		pcm_frames = 0;
> +		goto end;
>  	}
>  
>  	/* Calculate data blocks */
> -- 
> 2.1.4
> 


More information about the Alsa-devel mailing list