From owner-freebsd-hackers Mon Aug 6 10:52:22 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from mass.dis.org (mass.dis.org [216.240.45.41]) by hub.freebsd.org (Postfix) with ESMTP id 976C737B409 for ; Mon, 6 Aug 2001 10:52:16 -0700 (PDT) (envelope-from msmith@mass.dis.org) Received: from mass.dis.org (localhost [127.0.0.1]) by mass.dis.org (8.11.4/8.11.3) with ESMTP id f76Ht5i01556; Mon, 6 Aug 2001 10:55:06 -0700 (PDT) (envelope-from msmith@mass.dis.org) Message-Id: <200108061755.f76Ht5i01556@mass.dis.org> X-Mailer: exmh version 2.1.1 10/15/1999 To: Assem Salama Cc: freebsd-hackers@freebsd.org Subject: Re: detach In-reply-to: Your message of "Mon, 06 Aug 2001 12:16:37 EDT." <3B6EC2E5.CF2077FC@twcny.rr.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Mon, 06 Aug 2001 10:55:05 -0700 From: Mike Smith Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG > 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