Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 06 Aug 2001 10:55:05 -0700
From:      Mike Smith <msmith@freebsd.org>
To:        Assem Salama <assem@twcny.rr.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: detach 
Message-ID:  <200108061755.f76Ht5i01556@mass.dis.org>
In-Reply-To: Your message of "Mon, 06 Aug 2001 12:16:37 EDT." <3B6EC2E5.CF2077FC@twcny.rr.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
> Hello,
>     I have a question. I'm trying to make a module for a PCI card. My
> problem is my 'detach' function never get's called when I unload the
> module. Al my other functions get called correctly. Here is my source:

Detach != unload.

The detach method is called by your parent to kick you out.  If you want 
to be notified when your module is unloaded, you need a module event 
handler which finds all your instances and detaches them itself.

Use devclass_find_devices() to locate your instances, and then run across 
all the detach routines.  If any of them return nonzero, you should 
refuse to unload.

This is because there isn't a 1:1 correspondence between a loaded module 
and a driver instance.

> 
> #define DRIVERNAME                      "ide_mod"
> 
> #ifdef DEBUG
> #define PRINTD(STR)                     uprintf("%s: %s",DRIVERNAME,
> STR);
> #else
> #define PRINTD(STR)
> #endif
> 
> static int ide_mod_detach(device_t dev)
> {
>         PRINTD("Inside detach ... \n");
>         return 0;
> }
> 
> 
> static device_method_t ide_mod_methods[] =
> {
>         /* device methods */
>         DEVMETHOD(device_probe,         ide_mod_probe),
>         DEVMETHOD(device_attach,        ide_mod_attach),
>         DEVMETHOD(device_detach,        ide_mod_detach),
>         {0, 0}
> };
> 
> static driver_t ide_mod_driver = {
>         "ide_mod",
>         ide_mod_methods,
>         sizeof(ide_mod_softc),
> };
> 
> static devclass_t ide_mod_devclas;
> 
> /* all our macros */
> DRIVER_MODULE(ide_mod, atapci, ide_mod_driver, ide_mod_devclas, 0, 0);
> 
> 
> Thanks,
> Assem Salama
> 
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message

-- 
... every activity meets with opposition, everyone who acts has his
rivals and unfortunately opponents also.  But not because people want
to be opponents, rather because the tasks and relationships force
people to take different points of view.  [Dr. Fritz Todt]
           V I C T O R Y   N O T   V E N G E A N C E



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108061755.f76Ht5i01556>