Attaching pseudo bus to i386 nexus bus.

ss griffon ssgriffonuser at gmail.com
Wed Dec 21 04:24:28 UTC 2011


I've been playing around with the hdac sound driver and as an exercise
I decided to make my own "pseudo" pcm driver.  However, I can't seem
to get my device_probe and device_attach functions to be called on my
"pseudo" bus driver.  I'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.  I'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.  Perhaps my driver is missing
a reference to a parent?  Anyway, any help would be greatly
appreciated, maybe it is something very obvious.  I 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[] = {
  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 = {
  "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


More information about the freebsd-drivers mailing list