Bus Driver probe and attach device

takawata at jp.freebsd.org takawata at jp.freebsd.org
Fri Jul 22 07:48:20 GMT 2005


In message <c5c2798005072123385249195e at mail.gmail.com>, $B<<D.M%9a(B wrote:
>Hi:
>
>I'm trying to written Azalia (HD Audio) driver for freebsd now.
>
>The HDA controller is a standard controller, which can take max=
>15 codecs. I'm planning made it be a bus driver (azalia bus).
>
>I tried to read the PCI, USB and Firewire driver code be sample.
>It looks:
>
>1. Detect codec which already connected to azalia controller.
>2. call device_add_child(azbus_dev, NULL, -1); to create a child
>    device, which attach to azalia bus driver.
>3. allocate memory to put codec info (e.g. device id, vendor id,=20
>    revision..etc), and call device_set_ivars(codec_dev, codec_info);
>    save the codec_info ptr into device's ivars.
>4. Continue 1 ~ 3, untin all available codecs be added.
>
>After all codecs be added, I call the device_probe_and_attach(azbus_dev);,
>but there is no thing happend.=20

Because it trys to attach azbus driver itself, not try to attach its child.

>Then I try to call bus_generic_attach(azbus_dev);, the codecs driver probe
>function be called.

>Is this correct (use bus_generic_attach()), and I'm interested the detail.

Correct. It calls device_probe_and_attach() for all child you already 
add.



More information about the freebsd-hackers mailing list