From owner-freebsd-hackers@FreeBSD.ORG Thu Jan 22 07:15:18 2009 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 055AF106566B; Thu, 22 Jan 2009 07:15:18 +0000 (UTC) (envelope-from Andre.Albsmeier@siemens.com) Received: from david.siemens.de (david.siemens.de [192.35.17.14]) by mx1.freebsd.org (Postfix) with ESMTP id 8DBE68FC22; Thu, 22 Jan 2009 07:15:16 +0000 (UTC) (envelope-from Andre.Albsmeier@siemens.com) Received: from mail1.siemens.de (localhost [127.0.0.1]) by david.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n0M7FGw4005059; Thu, 22 Jan 2009 08:15:16 +0100 Received: from curry.mchp.siemens.de (curry.mchp.siemens.de [139.25.40.130]) by mail1.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n0M7FF0t021981; Thu, 22 Jan 2009 08:15:15 +0100 Received: (from localhost) by curry.mchp.siemens.de (8.14.3/8.14.3) id n0M7FF0C014172; Date: Thu, 22 Jan 2009 08:15:15 +0100 From: Andre Albsmeier To: John Baldwin Message-ID: <20090122071515.GA97409@curry.mchp.siemens.de> References: <20081216230430.GA24352@curry.mchp.siemens.de> <20081223173322.GA4123@curry.mchp.siemens.de> <200901211408.37883.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200901211408.37883.jhb@freebsd.org> X-Echelon: X-Advice: Drop that crappy M$-Outlook, I'm tired of your viruses! User-Agent: Mutt/1.5.18 (2008-05-17) Cc: freebsd-hackers@freebsd.org, Andre Albsmeier Subject: Re: How to "detach" a foreign driver from a device so my driver can attach? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jan 2009 07:15:18 -0000 On Wed, 21-Jan-2009 at 14:08:37 -0500, John Baldwin wrote: > On Tuesday 23 December 2008 12:33:22 pm Andre Albsmeier wrote: > > On Wed, 17-Dec-2008 at 00:04:30 +0100, Andre Albsmeier wrote: > > > Hello all, > > > > > > I am writing a driver which attaches to the Host-PCI bridge. When > > > compiled into the kernel or loaded by the loader everything works > > > and the driver gets attached. This is due to the fact that I return > > > BUS_PROBE_SPECIFIC in my probe routine which gains over the -10000 > > > returned by pci_hostb_probe() in i386/pci/pci_bus.c. > > > > > > However, when I want to load my driver via kldload this fails since > > > the hostb device has already been attached during kernel load (when > > > my driver was not present): > > > > > > hostb0@pci0:0:0: class=0x060000 card=0x11d510cf chip=0x35808086 > rev=0x02 hdr=0x00 > > > > > > What can I do to make my driver load via kldload? > > > Is there a way to detach the hostb0 from the Host-PCI bridge? > > > > Found the answer myself but will post it here in case anyone > > got a similar problem one day: I added the device detach method > > for the hostb driver to sys/i386/pci/pci_bus.c: > > > > --- sys/i386/pci/pci_bus.c.ORI 2007-08-17 08:12:33.000000000 +0200 > > +++ sys/i386/pci/pci_bus.c 2008-12-23 13:34:35.000000000 +0100 > > @@ -619,10 +619,13 @@ > > return 0; > > } > > > > +static int pci_hostb_detach(device_t dev) { return 0; } > > + > > static device_method_t pci_hostb_methods[] = { > > /* Device interface */ > > DEVMETHOD(device_probe, pci_hostb_probe), > > DEVMETHOD(device_attach, pci_hostb_attach), > > + DEVMETHOD(device_detach, pci_hostb_detach), > > DEVMETHOD(device_shutdown, bus_generic_shutdown), > > DEVMETHOD(device_suspend, bus_generic_suspend), > > DEVMETHOD(device_resume, bus_generic_resume), > > > > Now, when kldload'ing my driver, it can walk through all devices > > and detach hostb using device_detach(). > > In the case of hostb, this is wrong however. You want to attach as a child of As I learned in the meanwhile, yes. But it was quite interesting to learn how things work when you have never been into FreeBSD driver hacking before ;-). > hostb as other devices (e.g. agp(4)) need to attach to host-pci bridges as > well. Would this work in 6.x as well? You wrote in another mail that in 7.0 agp attaches to hostb. This makes me think that in 6.x things are handled differently. If not, I will stick to my detaching while I am on 6.x (don't need agp on my 440BXs) and do it right when I have migrated to 7.x... Thanks, -Andre