Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 06 Jun 2016 13:34:48 -0600
From:      Ian Lepore <ian@freebsd.org>
To:        Warner Losh <wlosh@bsdimp.com>, KILOREUX Emperex <kiloreux@gmail.com>
Cc:        Koop Mast <kwm@freebsd.org>, Poul-Henning Kamp <phk@phk.freebsd.dk>, eadler@freebsd.org, =?ISO-8859-1?Q?Jean-S=E9bastien_P=E9dron?= <dumbbell@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: API to link sysctl nodes to devices
Message-ID:  <1465241688.1188.18.camel@freebsd.org>
In-Reply-To: <070D3C32-9631-49AD-85FB-53A4865AFA08@bsdimp.com>
References:  <CAN1JrQ2dd0WZi0_aaNdqH9xdy292tP2DYLxvKV9bfK93vYFLXw@mail.gmail.com> <13621.1465030369@critter.freebsd.dk> <CAN1JrQ1eSr3%2BrPuF5d6USX=V_cTjzuAG=VXd7pFphO%2BEk2gE%2BQ@mail.gmail.com> <070D3C32-9631-49AD-85FB-53A4865AFA08@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 2016-06-05 at 23:53 -0400, Warner Losh wrote:
> > On Jun 5, 2016, at 11:07 PM, KILOREUX Emperex <kiloreux@gmail.com>
> > wrote:
> > 
> > Hey,
> > 
> > Thanks for your feedback, but we have been over this and what you
> > are
> > proposing seems pretty interesting, can you please elaborate on how
> > that
> > could be implemented inside the kernel, or give more details about
> > it, also
> > it seems a bit cool if we could do both of them together, so what
> > do you
> > think about sysctl nodes, is there any disadvantages for the
> > implementation
> > of such API ?
> > 
> > On Sat, Jun 4, 2016 at 9:52 AM, Poul-Henning Kamp <
> > phk@phk.freebsd.dk>
> > wrote:
> > 
> > > --------
> > > In message <
> > > CAN1JrQ2dd0WZi0_aaNdqH9xdy292tP2DYLxvKV9bfK93vYFLXw@mail.gmail.co
> > > m>
> > > , KILOREUX Emperex writes:
> > > 
> > > > As part of my participation GSOC, I have been working on an API
> > > > spec to
> > > > link sysctl nodes to devices.
> > > 
> > > It's not really the sysctl nodes as such you should focus on, but
> > > rather on the gap between (the increasingly inaccurately named)
> > > newbus and devfs.
> > > 
> > > The poster-boy example is how you get from USB bus coordinates to
> > > /dev/da* or /dev/{tty|cua}U* devices.
> > > 
> > > devd(8) seems to know the linkage and usually I resort to
> > > /etc/devd
> > > entries like this to make it liveable:
> > > 
> > >        attach 1000 {
> > >                match "device-name"     "uftdi[0-9]*";
> > >                match "vendor"          "0x0403";
> > >                match "product"         "0x6001";
> > >                match "sernum"          "FTHAV9UU";
> > >                action "ln -s /dev/cua$ttyname /dev/bbb1";
> > >        };
> > > 
> > >        notify 1000 {
> > >                match "system"          "USB";
> > >                match "subsystem"       "DEVICE";
> > >                match "type"            "DETACH";
> > >                match "vendor"          "0x0403";
> > >                match "product"         "0x6001";
> > >                match "sernum"          "FTHAV9UU";
> > >                action "rm -f /dev/bbb1";
> > >        };
> 
> For /dev/da* we created a geom creation event that should be used 
> instead of a USB insertion event, which removed the strain we had. 
> For uftdi vs ttyUx thing, though, there’s a problem. We could do a 
> device creation event as well (there may already be one), but there’s 
> no way to connect the /dev/ttyUx back to the newbus device_t node, 
> which can be used look up info about the device to do interesting 
> things with. One way to do this would be dev.uftdi.0.%devnodes: ttyU2 
> ttyU3, which would require some new APIs for adding a dev_t to a 
> device_t. But that might be backwards. I’d like something more like 
> devnode.ttyU2.device: uftdi0 would do the trick (or uftdi.0, since 
> device names can have numbers in them, which is why the sysctl nodes 
> under dev are the way they are). Note ‘devnode’ is just a name, I’m 
> agnostic, but given that dev is already taken (and its an API for 
> many device drivers, so changing it would be difficult) ‘devnode’ 
> seems the next best thing, but I’m open to other names.

We already have all the info you need to get from dev.uftdi.* to the
corresponding /dev/{tty,cua}U# nodes using the ttyname field in the
pnpinfo:

    dev.uftdi.0.%pnpinfo: vendor=0x9e88 product=0x9e8f devclass=0x00
    devsubclass=0x00 sernum="FTVB685F" release=0x0500 mode=host
    intclass=0xff intsubclass=0xff intprotocol=0xff ttyname=U0
    ttyports=1

I think it's handled by the ucom (usb_serial) layer so it's the same
for all usb serial adapters.  But a similar facility is probably
missing for any other type/class of device.

Also, afaik, there is no easy way to get from /dev/cuaU# to the
corresponding dev.<drivername>.<unit> collection of sysctl info, other
than by iterating the entire dev.* oid hierarchy looking for it.

How about cdev.* as the new top-level oid you propose for linking
character device entries to their related driver oids?

-- Ian

> Of course, having a stronger coupling between device_t and dev_t
> would allow us to detect when /dev/foo isn’t destroyed when the
> device_t created it gets detached.
> 
> As for sysctl, there’s already a sysctl tree that’s tightly coupled
> to a device instance that any device can take advantage of. I’m not
> sure what you need here, unless it’s what I described in the last
> paragraph.
> 
> Warner
> _______________________________________________
> freebsd-arch@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "
> freebsd-arch-unsubscribe@freebsd.org"
> 



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