From owner-freebsd-current Tue Feb 12 14:37:20 2002 Delivered-To: freebsd-current@freebsd.org Received: from mail.yadt.co.uk (yadt.demon.co.uk [158.152.4.134]) by hub.freebsd.org (Postfix) with SMTP id 1522237B400 for ; Tue, 12 Feb 2002 14:37:03 -0800 (PST) Received: (qmail 46623 invoked from network); 12 Feb 2002 22:37:00 -0000 Received: from unknown (HELO mail.gattaca.yadt.co.uk) (qmailr@10.0.0.2) by yadt.demon.co.uk with SMTP; 12 Feb 2002 22:37:00 -0000 Received: (qmail 2260 invoked by uid 1000); 12 Feb 2002 22:37:00 -0000 Date: Tue, 12 Feb 2002 22:36:59 +0000 From: David Taylor To: freebsd-current@freebsd.org Subject: Re: urio driver Message-ID: <20020212223659.GA2198@gattaca.yadt.co.uk> Mail-Followup-To: freebsd-current@freebsd.org References: <20020212195135.GA746@gattaca.yadt.co.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="SLDf9lqlvOQaIe6s" Content-Disposition: inline In-Reply-To: <20020212195135.GA746@gattaca.yadt.co.uk> User-Agent: Mutt/1.3.25i Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --SLDf9lqlvOQaIe6s Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline On Tue, 12 Feb 2002, David Taylor wrote: > I have approximately no experience with FreeBSD device drivers, but I'm > currently attempting to see if I can figure out how the other u*.c files > handle detaching... any hints would be appreciated :) > Well. I managed to create a patch which _works_. I have some serious doubts about its correctness, however. -- David Taylor davidt@yadt.co.uk "The future just ain't what it used to be" --SLDf9lqlvOQaIe6s Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: attachment; filename="urio.c.hack" --- urio.c.old Tue Feb 12 22:31:14 2002 +++ urio.c Tue Feb 12 22:02:03 2002 @@ -160,6 +160,8 @@ int sc_refcnt; #if defined(__NetBSD__) || defined(__OpenBSD__) u_char sc_dying; +#elif defined(__FreeBSD__) + dev_t dev; #endif }; @@ -271,8 +273,7 @@ #if defined(__FreeBSD__) #if (__FreeBSD__ >= 4) - /* XXX no error trapping, no storing of dev_t */ - (void) make_dev(&urio_cdevsw, device_get_unit(self), + sc->dev = make_dev(&urio_cdevsw, device_get_unit(self), UID_ROOT, GID_OPERATOR, 0644, "urio%d", device_get_unit(self)); #endif @@ -633,22 +634,25 @@ } return (0); } +#endif USB_DETACH(urio) { USB_DETACH_START(urio, sc); - struct urio_endpoint *sce; - int i, dir; - int s; + struct vnode *vp; + #if defined(__NetBSD__) || defined(__OpenBSD__) - int maj, mn; + struct urio_endpoit *sce; + int i, dir; + int s; + int maj, mn; DPRINTF(("urio_detach: sc=%p flags=%d\n", sc, flags)); + sc->sc_dying = 1; #elif defined(__FreeBSD__) DPRINTF(("urio_detach: sc=%p\n", sc)); #endif - sc->sc_dying = 1; /* Abort all pipes. Causes processes waiting for transfer to wake. */ #if 0 for (i = 0; i < USB_MAX_ENDPOINTS; i++) { @@ -668,7 +672,7 @@ usb_detach_wait(USBDEV(sc->sc_dev)); } splx(s); -#else +/* #else */ if (sc->sc_pipeh_in) usbd_abort_pipe(sc->sc_pipeh_in); @@ -692,25 +696,20 @@ /* Nuke the vnodes for any open instances (calls close). */ mn = self->dv_unit * USB_MAX_ENDPOINTS; vdevgone(maj, mn, mn + USB_MAX_ENDPOINTS - 1, VCHR); -#elif defined(__FreeBSD__) - /* XXX not implemented yet */ -#endif - usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->sc_udev, - USBDEV(sc->sc_dev)); + usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, sc->sc_udev, + USBDEV(sc->sc_dev)); +#elif defined(__FreeBSD__) + device_set_desc(self, NULL); + vp = SLIST_FIRST(&sc->dev->si_hlist); + if (vp) + VOP_REVOKE(vp, REVOKEALL); - return (0); + destroy_dev(sc->dev); +#endif + return (0); } -#endif /* defined(__NetBSD__) || defined(__OpenBSD__) */ - #if defined(__FreeBSD__) -Static int -urio_detach(device_t self) -{ - DPRINTF(("%s: disconnected\n", USBDEVNAME(self))); - device_set_desc(self, NULL); - return 0; -} #if (__FreeBSD__ >= 4) DRIVER_MODULE(urio, uhub, urio_driver, urio_devclass, usbd_driver_load, 0); --SLDf9lqlvOQaIe6s-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message