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.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to