> >One difference between that and what Roman sketched
> >was that I did was in the model for schedule management:
> >
> >- He suggested a new HCD level "set_endpoint_properties"
> > call (perhaps coupled to set_config and set_interface?)
> > to schedule the bandwidth.
> >
> This is just the old idea of a static, consistent and valid 'endpoint
> property descriptor'.
> Basically a URB is a container that contains the data and has a big label.
> At the moment we put some informations of an endpoint onto that label
> (type of transfer, interrupt interval,..) and some other informations of
> an endpoint into core-structures (toggle bit, max-packet size,...).
By "core structures" you mostly mean the usb_device and host
controller-internal structures. Type and (maximum) polling interval
(it is NOT an INTR-only notion, ISO uses it too :) are trouble spots.
> And labels of two different URBs to an endpoint can contain inconsistent
> data.
> So I think a URB should just contain the data/length/status and
> an address (endpoint/device or pointer to an endpoint descriptor) but
> not any property of an endpoint.
Hmm, that wasn't all I thought you said. Though admittedly
there's a distinction between _scheduling_ the bandwidth
and between setting the schedule _parameters_ ...
So far as the parameters go, I agree with you that duplicating
such stuff in the URB is error prone, we should move that. It'd
be appropriate to track that stuff in usb_device. I could see
it costing 32 endpoints * { 1 byte period, 1 byte type }. Or
making that info from endpoint descriptors more accessible;
that seems better (array of 32 mostly-null pointers).
> >- I'd suggested that the bandwidth would stay scheduled until
> > after an interrupt transfer completed, there was no transfer
> > queued.
> >
> If I understand you right here, I think you lose the offset (or phase)
> information of the interrupt schedule of the endpoint.
Not necessarily. It that's important, INTR and ISO endpoints could
record that schedule info. On the other hand, for HCs with a real
periodic schedule (including EHCI, OHCI, UHCI) it'd only matter
in the case where a periodic endpoint got fully descheduled, and
then another transfer got scheduled before that period completed.
Otherwise keeping the QH/ED in the schedule is what'd keep the
bandwidth scheduled ... and the offset/phase would be stable.
Once periodicity is lost (8 ms after the last 8ms-INTR transfer) the
phase doesn't really matter any more. Another option: defer the
deschedule until that point. (I'm sure that'd make Dan happier;
"re"submitting a new request from a userland completion handler
would be painful; being able to rely on some grace period would
be friendlier. :)
> E.g. if we send single shot interrupt URBs every 10ms to a 255ms
> endpoint. Then I
> think the transfer should take place every 255 ms.
> With your model there would be a transfer every 10ms.
Actually I was assuming the "single shot" model would vanish
for interrupt transfers (API change #2). So with today's model,
where urb->interval is used instead of a device property, that
endpoint becomes a 10ms one. (And almost all HCDs will turn
turn a "10ms" interrupt into an "8ms" one.)
But that does suggest that if usb_set_configuration() and
usb_set_interface() cause usbcore/etc to track that period,
keeping it out of the URB, then some call would be needed
to let the period be reduced.
Separate issue: not all controllers can support a 255ms
interrupt transfer period without major mayhem. Of course
it's legit for OHCI to truncate that to a 32ms period, since
polling more frequently is allowed.
- Dave
> - Roman
>
> >
> >Yes, I tend to think that it might be worth breaking existing
> >interrupt transfer code in this way to get an improved API.
> >But it'd be work...
> >
> >- Dave
> >
> >p.s. I have similar comments about ISO transfers... :)
> >
> > Apart from some wire-level differences, the main
> > structural difference between INTR and ISO is
> > supposed to be that (a) no lowspeed ISO, (b) for
> > fullspeed, INTR has a smaller maxpacket (64 bytes
> > vs 1023 for ISO), (c) at all speeds, errors on INTR
> > transfers are supposed to get retried, but ISO ones
> > get reported. Both are supposed to respect the
> > endpoint poll period, and "high bandwidth" mode
> > (up to 24 MByte/sec, highspeed) works much the same.
> >
> > In short, we may want to consider corresponding
> > updates to the ISO transfer model, since it's not
> > intended to be as different from the INTR one as
> > it is today in Linux.
> >
> >
> >
> >
> >
>
>
>
>
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel