newbus questions
Artem Ignatiev
zazubrik at mail.ru
Wed Mar 22 13:47:40 UTC 2006
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.
More information about the freebsd-hackers
mailing list