On Thu, 11 Mar 2010, Masao Uebayashi wrote:

> On Thu, Mar 11, 2010 at 6:56 PM, Iain Hibbert <plu...@rya-online.net> wrote:
> > On Thu, 11 Mar 2010, Masao Uebayashi wrote:
> >> > We can discard the pseudo-devices concept, if need be.
> >>
> >> In what sense?
> >>
> >> As I explained in the first post, pseudo device is strict definition;
> >> it has no parent in terms of physiical topology.  It may have parents
> >> in terms of components.   I've very carefully investigated those.  I
> >> strictly defferenciate them.  Please re-read the first post in this
> >> thread.
> >
> > If a device has no parent, just attach it at root (similar to mainbus*),
> > with parent == NULL, or even pseudo* at root, and pseudo-dev* at pseudo?
> >
> > It is a frustration when building a 'software' device that there are some
> > differences between the methodology of configuration, and it is not
> > possible to pass configuration arguments from userland into the device
> > attach routine..
>
> Could you show one (or more) real example(s) / senario(s)?  That would
> help to understand problems & clarify requirements...

Well, a line discipline which takes serial IO and converts it into a soft
device which interacts with the rest of the system. In particular example,
dev/bluetooth/btuart.c does that for a bluetooth device. The open routine
is called from the TIOSLINED ioctl code and does:

        cfdata = malloc(sizeof(struct cfdata), M_DEVBUF, M_WAITOK);
        for (unit = 0; unit < btuart_cd.cd_ndevs; unit++)
                if (device_lookup(&btuart_cd, unit) == NULL)
                        break;

        cfdata->cf_name = btuart_cd.cd_name;
        cfdata->cf_atname = btuart_cd.cd_name;
        cfdata->cf_unit = unit;
        cfdata->cf_fstate = FSTATE_STAR;

        dev = config_attach_pseudo(cfdata);
        if (dev == NULL) {
                free(cfdata, M_DEVBUF);
                splx(s);
                return EIO;
        }

        sc = device_private(dev);
        sc->sc_tp = tp;

here, we must find the device softc and insert some information after
attach has finished (tp == tty pointer) because there is no way to pass
that to the btuart_attach() routine.

There was a thread recently regarding extending this driver,

  http://archive.netbsd.se/?ml=netbsd-tech-kern&a=2010-01&t=12251898

with Kiyohara wishing to pass some additional configuration that would be
possible with eg

        dev = config_found(NULL, &arg, ...);

and would also solve the (very slight) race condition, and moreover it
would not require malloc of cfdata.

The "parent" argument is mostly unused by autoconfig anyway..

iain

Reply via email to