Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Jun 2020 13:39:25 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Rajesh Kumar <rajfbsd@gmail.com>
Cc:        Andriy Gapon <avg@freebsd.org>, freebsd-drivers@freebsd.org,  FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Can we hook a device as device to two different parent devices?
Message-ID:  <CANCZdfoUjeFkAYZQtGqEdkqN0Ud5WyXwG=HZTSVp_WqCK_oD_Q@mail.gmail.com>
In-Reply-To: <CAAO%2BANOQfY3AUy5o9BP22O5Uxp83crAXNhFrOeMcmsStkk4Y-w@mail.gmail.com>
References:  <CAAO%2BANOB8m6OjRY-FOVVHQi3vdcCEnHdjE2s3xoHdh0rjaTruQ@mail.gmail.com> <c1b611bc-4fa7-7975-da3f-e7c68a26e92b@FreeBSD.org> <CANCZdfpF%2BaiZYLRHo-NOizZcAuBz%2BXhsqYvXTazHrMVz_%2Bh=3w@mail.gmail.com> <CAAO%2BANOQfY3AUy5o9BP22O5Uxp83crAXNhFrOeMcmsStkk4Y-w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jun 4, 2020 at 12:31 PM Rajesh Kumar <rajfbsd@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@bsdimp.com> wrote:
>
>>
>>
>> On Wed, Jun 3, 2020, 8:29 AM Andriy Gapon <avg@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@freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-drivers
>>> To unsubscribe, send any mail to "
>>> freebsd-drivers-unsubscribe@freebsd.org"
>>>
>>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfoUjeFkAYZQtGqEdkqN0Ud5WyXwG=HZTSVp_WqCK_oD_Q>