u3g serial device name query
Hans Petter Selasky
hselasky at c2i.net
Thu Apr 30 12:42:12 UTC 2009
On Thursday 30 April 2009, Milan Obuch wrote:
> On Thursday 30 April 2009 12:58:36 Hans Petter Selasky wrote:
> > On Thursday 30 April 2009, Milan Obuch wrote:
> > > Hi,
> > >
> > > I have HUAWEI 3g usb modem. It works with u3g from current. There is
> > > however one thing I did not get working yet.
> > >
> > > When device attaches, it is added into tree as u3gN, devd event is
> > > sent. It is easily matched with 'device-name "u3g[0-9]"' clause in
> > > devd.conf. I can start ppp automatically and it works well, given no
> > > other USB serial device is present.
> > >
> > > If another USB serial device such as uplcom is present, u3g serial
> > > ports does not have the same name. I found no way to relate serial
> > > device name to this event and looking in source I see no place where it
> > > is created. I would like to put a devctl notify call there. This way I
> > > could start ppp with correct device name even if there is some other
> > > USB serial device.
> > >
> > > Could someone point me in the right direction?
> > USB serial devices have their own unit management. There is however a way
> > to override the unit number through the "usb2_com_tty_name" callback,
> > which requires some code changes to the u3g driver.
> > All USB modems and serial adapters end up with the same naming
> > prefix: /dev/cuaU%d.%d, so the assigned numbers must be serialised.
> > What we could do is to have a separate naming prefix for 3G modems, and
> > use the device_get_unit() for unit number.
> > See: src/sys/dev/usb/serial and usb_serial.c
> I looked over usb2_com_attach_tty function in usb_serial.c, and somewhere
> after call to tty_makedev (where a DPRINT is too) I could put a devctl
> All I need for it would be device name. In /var/log/message file I see a
> line telling 'u3g0 : Found 2 ports' just after usb2_com_attach_tty function
> is called. If you could tell me how I can get 'u3g0' name via sc argument
> in usb2_com_attach_tty function, I can solve this with no other change.
You have to cast the parent softc pointer back into "struct u3g_softc", which
is stored in the ucom softc. In the u3g_softc you should find sc_dev, which
you can use "device_get_nameunit()" on. You can do this in
the "usb2_com_tty_name" callback function.
More information about the freebsd-usb