[openbeos] Re: driver/module shutdown notification for R1

  • From: "Waldemar Kornewald" <Waldemar.Kornewald@xxxxxx>
  • To: <openbeos@xxxxxxxxxxxxx>
  • Date: Sat, 14 Jun 2003 13:40:29 +0200

> En réponse à Waldemar Kornewald <Waldemar.Kornewald@xxxxxx>:
>
> > Hi,
> > is there some way for a driver/module get notified when the system is
> > shut
> > down?
> > The problem is, for example, that in BONE the ppp module does not know
> > this
> > and thus does not disconnect. This is a bad behaviour.
> > Can we implement some additional ioctl and module code like
> > B_UNLOAD_ON_SHUTDOWN. If it returns B_OK the kernel will unload the
> > driver/module from memory. Otherwise it will leave it and turning the
> > computer off should not cause an error.
> > This is very useful for all kernel drivers/modules that must
> > disconnect
> > their hardware properly. Of course, ATA devices or a sound card do not
> > need
> > this feature, but maybe there are devices that need a turn-off signal.
> >
> > Here we come to the point that something like a real windows-like
> > turn-the-computer-off screen is needed (if the computer cannot do that
> > automatically).
> >
> > What do you think?
> >
>
> Good point...
> I had thoughts about a power managment module, but not even simple
> shutdown...
> I'm not sure how we could hook in in R5 to get that behaviour, but
> it's certainly a good addition to OBOS.

Actually, this should be no problem.
We add the ioctl and std_ops action B_UNLOAD_ON_SHUTDOWN.
When the system is shut down the kernel calls

if(ioctl(fd,B_UNLOAD_ON_SHUTDOWN...) == B_OK)
    unload_driver(fd);

and

if(module->std_ops(B_UNLOAD_ON_SHUTDOWN) == B_OK)
    unload_module(module);

for each module and driver that is loaded.

Drivers/modules that do not support this automatically return B_ERROR or
something like that.
The same goes for drivers/modules that do not need this behaviour. They just
do not implement it and the switch-case part in the driver will fall through
and return B_ERROR.

Why should we need an additional call for driver/modules if we can use the
current API without any problems?
The advantage is that old drivers will still work and can be adapted without
much work (just add a new "case" statement).

Waldemar


Other related posts: