Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Mar 2006 16:47:36 +0300
From:      Artem Ignatiev <zazubrik@mail.ru>
To:        freebsd-hackers@freebsd.org
Subject:   Re: newbus questions
Message-ID:  <26A95C2F-FE0A-4434-B164-A24BA2E5D950@mail.ru>
In-Reply-To: <1142510785.36931.43.camel@timon>
References:  <1142506792.36931.25.camel@timon> <200603161235.24124.hackers@dino.sk> <1142510785.36931.43.camel@timon>

next in thread | previous in thread | raw e-mail | index | archive | help

On 16.03.2006, at 15:06, Artem 'ZaZooBred' Ignatiev wrote:

> On Thu, 16/03/2006 12:35 +0100, Milan Obuch wrote:
>
>> ....
>>
>>> 1. How to create the bus itself, and properly describe its  
>>> interfaces?
>>> skeletons of bus-driver and frontend-drivers would be a GREAT help.
>>
>> Being far from everything knowing hacker, I just can help with  
>> what I found
>> when working on something totally unrelated.
>> First you need to write .m file describing your methods - they are  
>> class
>> description, kind of. There are couple of them - maybe PCI analogy  
>> (pci_if.m
>> and pcib_if.m) could help a little to understand their role. Then  
>> you can use
>> these methods in your device_method_t array describing your  
>> device. Actually,
>> these definitions are something like software bus between parent  
>> and child
>> device. And maybe you could get some clue looking at bktr driver,  
>> which could
>> be somehow related to your are of interest.
>
> Yes, I've got some clearance in how that <something>_if.m files are
> written, but bktr driver is too complex for me to understand how the
> things are done right now. I'll look at it again, though, maybe I  
> could
> understand the logic of how such things are done, when I could clearly
> separate generic logic from implementation of particular hardware
> driver.

Okay, now I have got the bus device, the child device. My current  
trouble is
that I want bus driver to provide some methods to child drivers.

So I created saa_bus_if.m file, declared some methods there, made  
implementation
in bus driver and added them using
DEVICE_METHOD(saa_bus_some_method, saa_some_method_impl),

and added the saa_bus_if.c to child driver SRCS.

Now, when I do SAA_BUS_SOME_METHOD(card, ...) inside bus driver, it  
works just as
expected. But when I do SAA_BUS_SOME_METHOD(device_get_parent 
(subdev), ...)
inside subdriver, it happens that KOBJLOOKUP(...) returns pointer to  
generic
function (which returns ENXIO) rather than pointer to my implementation.

The questions are:
Am I going the Right Way(tm) when exporting functions to child  
drivers like that?
If yes, what I must do in order to get the real implementation, not  
the default one?
If no, what is The Right Way(tm)?

Thanks in advance.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?26A95C2F-FE0A-4434-B164-A24BA2E5D950>