Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Nov 2019 13:01:18 +0100
From:      Milan Obuch <freebsd-hackers@dino.sk>
To:        Oleksandr Tymoshenko <gonzo@bluezbox.com>
Cc:        freebsd-hackers@freebsd.org, Oliver Pinter <oliver.pinter@hardenedbsd.org>
Subject:   Re: UART driver as kld - how?
Message-ID:  <20191103130118.36fa6eec@zeta.dino.sk>
In-Reply-To: <20191103042321.GA49790@bluezbox.com>
References:  <20191027214209.712d62ca@zeta.dino.sk> <CAPQ4ffuoHRFghwo=okFoNVHw9TYdwFw_wgUxa5_rm6FqjsNVsg@mail.gmail.com> <20191027232956.28b11772@zeta.dino.sk> <20191028191005.GA89835@bluezbox.com> <20191028201952.20a92307@zeta.dino.sk> <20191102214100.500ba493@zeta.dino.sk> <20191103042321.GA49790@bluezbox.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 2 Nov 2019 21:23:21 -0700
Oleksandr Tymoshenko <gonzo@bluezbox.com> wrote:

> Milan Obuch (freebsd-hackers@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



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