UART driver as kld - how?

Milan Obuch freebsd-hackers at dino.sk
Sun Nov 3 12:01:23 UTC 2019


On Sat, 2 Nov 2019 21:23:21 -0700
Oleksandr Tymoshenko <gonzo at bluezbox.com> wrote:

> Milan Obuch (freebsd-hackers at dino.sk) wrote:

[ snip ]

> > After studying other uart_dev_xxx.c files I am able to create
> > working skeleton uart driver. I can compile it, kldload, and get
> > some console output. Right now, I hit another problem - uart
> > framework is not documented well, at least no man page is found in
> > share/man directory.
> > 
> > My probe function is similar to that in uart_dev_snps.c file,
> > simplified, and I need to know what arguments should uart_bus_probe
> > function be invoked with. In many device drivers there are mostly
> > zeros, but this does not work for me.
> > 
> > Currently I am getting error 6, ENXIO, so I am not correctly
> > attaching my driver to device. Putting some printf here and there,
> > I found test at line 508, file uart_core.c, fails - sc->sc_class is
> > null. Question is, now, where and how should this field in this
> > structure be initialized...
> > 
> > I am sure I need docs/description for other functions as well, so if
> > anybody knows where good uart framework description could be found,
> > please advice. Or if somebody already has good understanding of it
> > and could help me with my issues, it wil be greatly appreciated.  
> 
> if you follow uart_dev_snsps.c template, the sc_class is set in
> probe function:
> 
>         uart_class = (struct uart_class
> *)ofw_bus_search_compatible(dev, compat_data)->ocd_data;
>         if (uart_class == NULL)
>                 return (ENXIO);
> 
>         freq = 0;
>         sc = device_get_softc(dev);
>         sc->ns8250.base.sc_class = uart_class;
>

*facepalm*

I totally overlooked the obvious... yes, you are right.

[ snip ]

> In your case, my guess would be: you either do not set the sc_class
> member var in probe function or your base var is not the first in the
> struct.
> 

Back to testing... probe function now does work, so I am going to
analyze what should be done in attach... and why I am getting now
panic... I'll write again when I find another obstacle I do not
understand or I have working driver, whatever comes first :)

Regards,
Milan


More information about the freebsd-hackers mailing list