public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Pieter Palmers <pieterp@joow.be>
To: "Kristian Høgsberg" <krh@bitplanet.net>
Cc: "Stefan Richter" <stefanr@s5r6.in-berlin.de>,
	"Kristian Høgsberg" <krh@redhat.com>,
	linux1394-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] firewire: adopt read cycle timer ABI from raw1394
Date: Fri, 05 Oct 2007 10:31:20 +0200	[thread overview]
Message-ID: <4705F658.1050106@joow.be> (raw)
In-Reply-To: <59ad55d30710010903y76330624ka45747c0b5983cfd@mail.gmail.com>

Kristian Høgsberg wrote:
> On 10/1/07, Pieter Palmers <pieterp@joow.be> wrote:
>> Stefan Richter wrote:
>>>> This duplicates the read cycle timer feature of raw1394 (added in Linux
>>>> 2.6.21) in firewire-core's userspace ABI.
>>> Kristian and Pieter, does this simple duplication of the ioctl make
>>> sense on its own?  AFAIU rawiso's iso packet buffers look different from
>>> fw-cdevs's. It seems to me as if rawiso always put the cycle into a user
>>> buffer for each iso packet received...
>>>
>>> raw1394.h::struct raw1394_iso_packet_info {
>>>       __u32 offset;
>>>       __u16 len;
>>>       __u16 cycle;   /* recv only */
>>>       __u8  channel; /* recv only */
>>>       __u8  tag;
>>>       __u8  sy;
>>> };
>>>
>>> raw1394.c::raw1394_iso_recv_packets()
>>>
>>>       /* copy the packet_infos out */
>>>       for (i = 0; i < upackets.n_packets; i++) {
>>>               if (__copy_to_user(&upackets.infos[i],
>>>                                  &fi->iso_handle->infos[packet],
>>>                                  sizeof(struct raw1394_iso_packet_info)))
>>>                       return -EFAULT;
>>>
>>>               packet = (packet + 1) % fi->iso_handle->buf_packets;
>>>       }
>>>
>>> ...while the Juju ABI returns the cycle only for those packets whose
>>> fw_cdev_iso_packet.control had the FW_CDEV_ISO_INTERRUPT flag set.
>>> The cycle is then written out in the fw_cdev_event_iso_interrupt event
>>> which happens when this particular packet was received.  Right?
>>>
>>> Pieter, do applications like yours need the cycle counter only for a few
>>> predetermined packets or for each and every packet?
>> We need it for every packet for two reasons:
>> 1) it's the only way to determine how many packets were dropped when
>> packet drops are flagged in the callback
> 
> Your application should know what the timestamp should be for each iso
> receive callback and if you see a larger value than expected you can
> use that to calculate how many cycles were lost.
I'm not convinced here. It's rather easy to come up with a scenario 
where more than 16 packets are lost, hence the timestamp wraps around 
and you have the impression that no packets are lost. Losing 16 packets 
is a serious issue in streaming audio, so we definitely have to be able 
to detect this.

The point is that currently we use the cycle value for every callback 
since that's how the libraw API is defined. So if our current code is 
supposed to work with the new kernel modules through the adapted libraw 
it obviously has to provide the cycle parameter for every callback. 
Therefore I suppose the discussion is about a new API that is being 
designed.

> 
>> 2) we convert the 16-bit SYT timestamp of a packet to a full 32-bit
>> cycle counter value. This because the range of the 16-bit SYT is too
>> small (only 16 packets) for systems that have large buffering.
> 
> If you get the timestamp for the first packet in a receive batch, you
> can still do this, right?

If we can calculate the cycle a packet is received on one way or 
another, we are ok. So whether this is done by receiving a cycle value 
for each packet, or having the cycle for the first packet in a batch and 
then using offset calculations it is ok. The only precondition for this 
is that a batch should be continuous, i.e. there should not be any 
missing packets in a batch. Only between batches.

We will probably only be able to comment on this thoroughly once we 
start implementing the juju based streaming system. I don't see this 
happening in the next 6 months though.

Greets,

Pieter


      parent reply	other threads:[~2007-10-05 12:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-29  8:41 [PATCH] firewire: adopt read cycle timer ABI from raw1394 Stefan Richter
2007-09-29  9:01 ` Stefan Richter
2007-10-01  9:31   ` Pieter Palmers
2007-10-01 16:03     ` Kristian Høgsberg
2007-10-02  6:45       ` Daniel Wagner
2007-10-05  8:31       ` Pieter Palmers [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4705F658.1050106@joow.be \
    --to=pieterp@joow.be \
    --cc=krh@bitplanet.net \
    --cc=krh@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux1394-devel@lists.sourceforge.net \
    --cc=stefanr@s5r6.in-berlin.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox