From owner-freebsd-drivers@FreeBSD.ORG Wed Dec 21 04:24:28 2011 Return-Path: Delivered-To: freebsd-drivers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1CE6A1065686 for ; Wed, 21 Dec 2011 04:24:28 +0000 (UTC) (envelope-from ssgriffonuser@gmail.com) Received: from mail-iy0-f182.google.com (mail-iy0-f182.google.com [209.85.210.182]) by mx1.freebsd.org (Postfix) with ESMTP id E158F8FC12 for ; Wed, 21 Dec 2011 04:24:27 +0000 (UTC) Received: by iadj38 with SMTP id j38so10889222iad.13 for ; Tue, 20 Dec 2011 20:24:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=QhgIQLrsomOfjdYktKbJE184evoD5uYNdZ5r05y8w3Q=; b=cU/vzv5NEyta6skAKLr8QlRQCW7D7QtwJmcwZWP7nadzwbhwg6w/K+aQuKEvXr+RJB LQ9+sFwpvvgahfH816HP+91egOMzkWOHqlTiTgflWevRdM28TRQMB3/Zq0Qfn9m8gSes zlkzb+iX2Ywh6Js0Za5WczSmSdpqujKP+a0Bk= MIME-Version: 1.0 Received: by 10.42.164.71 with SMTP id f7mr4917257icy.49.1324439719776; Tue, 20 Dec 2011 19:55:19 -0800 (PST) Received: by 10.42.117.74 with HTTP; Tue, 20 Dec 2011 19:55:19 -0800 (PST) Date: Tue, 20 Dec 2011 20:55:19 -0700 Message-ID: From: ss griffon To: freebsd-drivers@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Attaching pseudo bus to i386 nexus bus. X-BeenThere: freebsd-drivers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Writing device drivers for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Dec 2011 04:24:28 -0000 I've been playing around with the hdac sound driver and as an exercise I decided to make my own "pseudo" pcm driver. =A0However, I can't seem to get my device_probe and device_attach functions to be called on my "pseudo" bus driver. =A0I've spent a lot of time looking at the bus code in kernel/subr_bus.c and I think I have a good understanding of it but apparently not good enough. =A0I've looked at other devices that implement buses, such as hdac, pci and acpi (which hangs off of nexus as well) and I can't find what they are doing to make their device_probe/device_attach to be called. =A0Perhaps my driver is missing a reference to a parent? =A0Anyway, any help would be greatly appreciated, maybe it is something very obvious. =A0I turned on the BUS_DEBUG option and provide it's output along with the code. Code: #ifdef HAVE_KERNEL_OPTION_HEADERS #include "opt_snd.h" #endif #include #include #include "device_if.h" #include "bus_if.h" #include "mixer_if.h" static int snd_loop_bus_probe(device_t dev) { printf("%s %d called\n", __func__, __LINE__); return 0; } static int snd_loop_bus_attach(device_t dev) { printf("%s %d called\n", __func__, __LINE__); return 0; } static void snd_loop_bus_driver_added(device_t dev, driver_t *driver) { printf("%s %d called\n", __func__, __LINE__); } static device_method_t snd_loop_bus_methods[] =3D { DEVMETHOD(device_probe, snd_loop_bus_probe), DEVMETHOD(device_attach, snd_loop_bus_attach), /*Bus Interface*/ DEVMETHOD(bus_driver_added, snd_loop_bus_driver_added), { 0, 0 } }; static driver_t snd_loop_bus_driver =3D { "snd_loop_bus", snd_loop_bus_methods, PCM_SOFTC_SIZE, /*This isn't used, should be 1*/ }; devclass_t snd_loop_bus_devclass; DRIVER_MODULE(snd_loop_bus, nexus, snd_loop_bus_driver, snd_loop_bus_devclass, 0, 0); BUS_DEBUG Output: devclass_find_internal:914: looking for nexus driver_module_handler:4462: Loading module: driver snd_loop_bus on bus nexus (pass 2147483647) devclass_add_driver:1047: snd_loop_bus devclass_find_internal:914: looking for snd_loop_bus devclass_find_internal:924: creating snd_loop_bus