Re: Re: [RFC] Driver States

Adam Belay
2005-04-06T19:51:12Z

[-- Attachment #1: Type: text/plain, Size: 2033 bytes --]

On Tue, 2005-04-05 at 11:24 +0200, Pavel Machek wrote:
> Hi!
>
> > > You have a few things here that can easily conflict, and that will be
> > > developed at different paces. I like the direction that it's going, but
> > > how do you intend to do it gradually. I.e. what to do first?
> >
> > I think the first step would be for us to all agree on a design, whether
> > it be this one or another, so we can began planning for long term
> > changes.
> >
> > My arguments for these changes are as follows:
>
> 0. I do not see how to gradually roll this in.
>
> > 4. Having responsibilities at each driver level encourages a
> > layered and object based design, reducing code duplication and
> > complexity.
>
> Unfortunately, you'll be retrofiting this to existing drivers. AFAICS,
> trying to force existing driver to "layered and object based design"
> can only result in mess.
> Pavel

Fair enough. How does this sound? I'd like to add "*attach" and
"*detach" to "struct device_driver". These functions would act as one
time initializers and decontructors. Then we could rename "*probe" to
"*start", and "*remove" to "*stop", which should be rather trivial to
fix up. From there drivers could slowly be converted to use "*attach"
and "*detach", but will not be broken along the way.

So the basic flow would be like this:

1.) a driver is bound to a device
2.) *attach is called to allocate data structures
3.) *start when it's time to probe the device
4.) *stop when the user disables the device
5.) repeat steps 3 and 4 any number of times
6.) *detach is called when unbinding the driver

The driver layering stuff could come later, but just implementing these
specific components would have immediate benefits.

In this early stage in development, I'd like to at least be able to
start and stop drivers for reasons outside of power management (ex. user
preference or resource re-balancing). If a "*resume" function can also
utilize this functionality, then all the better.

Thanks,
Adam