Can we hook a device as device to two different parent devices?

Warner Losh imp at bsdimp.com
Thu Jun 4 19:39:38 UTC 2020


On Thu, Jun 4, 2020 at 12:31 PM Rajesh Kumar <rajfbsd at gmail.com> wrote:

> Thanks Warner and Andriy for your answers.
>
> Having said they are two separate instances, if the child driver calls the
> interface of two parents as below
> device1_interface(child_dev), then  device_get_parent(child_dev) in the
> device1 interface will return device1 reference
> device2_interface(child_dev), then  device_get_parent(child_dev) in the
> device2 interface will return device2 reference
>
> Is that right?
>

Yes. That's correct. For each bus instance, we loop through the possible
drivers that attach to that bus looking for each device looking for drivers
that will probe successfully. If you have multiple instances, or instances
of different kinds of busses, what you say will hold true.

Warner


> Thanks,
> Rajesh.
>
>
> On Wed, Jun 3, 2020 at 8:59 PM Warner Losh <imp at bsdimp.com> wrote:
>
>>
>>
>> On Wed, Jun 3, 2020, 8:29 AM Andriy Gapon <avg at freebsd.org> wrote:
>>
>>> On 03/06/2020 14:20, Rajesh Kumar wrote:
>>> > Hi,
>>> >
>>> > Is it really possible to declare a module with two parents? Like the
>>> > following declarations in the same driver.
>>> >
>>> > devclass_t test_dev_devclass;
>>> > static DEFINE_CLASS_0(test_dev, test_dev_driver, test_dev_methods,
>>> > sizeof(struct test_dev_ctx));
>>> > DRIVER_MODULE(test_dev, *device1*, test_dev_driver, test_dev_devclass,
>>> > NULL, NULL);
>>> > DRIVER_MODULE(test_dev, *device2*, test_dev_driver, test_dev_devclass,
>>> > NULL, NULL);
>>> >
>>> > I see similar references in other drivers attaching to both simpleus
>>> and
>>> > ofwbus. So, If it's possible, how to get the reference for both the
>>> > parents?  device_get_parent(test_dev) will give reference of one parent
>>> > only right, so how to get the reference of the desired parent?
>>>
>>> A device can have only one parent.
>>> The declaration you quoted describes a _driver_ that can attach to
>>> devices
>>> hanging off two different buses.  They would still be different devices.
>>>
>>
>> Yes. You can have a driver attach to multiple bus types, but each
>> instance has a unique parent one exactly on of them.
>>
>> If you need to talk to other devices, you'll need to find them by name or
>> other means.
>>
>> Warner
>>
>>
>>
>>> --
>>> Andriy Gapon
>>> _______________________________________________
>>> freebsd-drivers at freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-drivers
>>> To unsubscribe, send any mail to "
>>> freebsd-drivers-unsubscribe at freebsd.org"
>>>
>>


More information about the freebsd-drivers mailing list