Date: Tue, 20 Dec 2011 20:55:19 -0700 From: ss griffon <ssgriffonuser@gmail.com> To: freebsd-drivers@freebsd.org Subject: Attaching pseudo bus to i386 nexus bus. Message-ID: <CAFYJ9ehmS=QAW0aHD8jwaptUsbZuDsS98kL2AL_4Pd1AbcEL6Q@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
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 <dev/sound/pcm/sound.h> #include <dev/sound/pcm/pcm.h> #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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFYJ9ehmS=QAW0aHD8jwaptUsbZuDsS98kL2AL_4Pd1AbcEL6Q>