On Sat, Jan 14, 2012 at 12:45, Hans Petter Selasky <hsela...@c2i.net> wrote:
> On Saturday 14 January 2012 10:51:07 Mykhaylo Yehorov wrote:
>> On Fri, Jan 13, 2012 at 22:54, Hans Petter Selasky <hsela...@c2i.net> wrote:
>> > Hi,
>> >
>> > Could you patch ucom_set_pnpinfo_usb() instead, so that such a sysctl is
>> > created for all ucom devices, not only umodem?
>>
>> I guess it will be necessary to remove a sysctl oid from a parent
>> sysctl tree before destroying ucom structures.
>> It's would be better to do in ucom_detach() but now there is no a
>> pointer to a parent device structure from there.
>>
>> Now all drivers that use ucom pass a pointer to parent softc structure
>> to ucom_attach().
>> Is there any reason for this?
>> May be it's would be more useful to pass a pointer to a parent device
>> structure.
>>
>> > Can you explain a bit more how you use this information in your scripts?
>>
>> I've got a gps receiver and a mobile phone that supported by the umodem
>> driver. I can attach its in any order.
>> So I use sysctl to generate gpsd and ppp configs with appropriate
>> values of serial port.
>
> Ok, I see.
>
> And you cannot use the information passed through devd by
> ucom_set_pnpinfo_usb()?ucom_detach

You are right. It's possible to use ucom_set_pnpinfo_usb().

In the attached patch an ucom sysctl oid will be added to a parent sysctl tree
in ucom_set_pnpinfo_usb() and will be removed in ucom_detach().

-- 
Mykhaylo Yehorov
--- sys/dev/usb/serial/usb_serial.h.orig        2011-11-11 06:20:22.000000000 
+0200
+++ sys/dev/usb/serial/usb_serial.h     2012-01-14 22:59:23.000000000 +0200
@@ -70,6 +70,7 @@
 #include <sys/tty.h>
 #include <sys/serial.h>
 #include <sys/fcntl.h>
+#include <sys/sysctl.h>
 
 /* Module interface related macros */
 #define        UCOM_MODVER     1
@@ -134,6 +135,7 @@
        struct usb_process sc_tq;
        uint32_t sc_unit;
        uint32_t sc_subunits;
+       struct sysctl_oid *sc_sysctl_dev_ucom;
 };
 
 struct ucom_softc {
--- sys/dev/usb/serial/usb_serial.c.orig        2011-11-11 06:20:22.000000000 
+0200
+++ sys/dev/usb/serial/usb_serial.c     2012-01-14 23:01:15.000000000 +0200
@@ -274,6 +274,8 @@
                sc[subunit].sc_flag |= UCOM_FLAG_ATTACHED;
        }
 
+       ssc->sc_sysctl_dev_ucom = NULL;
+
        DPRINTF("tp = %p, unit = %d, subunits = %d\n",
                sc->sc_tty, ssc->sc_unit, ssc->sc_subunits);
 
@@ -292,6 +294,8 @@
        if (ssc->sc_subunits == 0)
                return;         /* not initialized */
 
+       sysctl_remove_oid(ssc->sc_sysctl_dev_ucom, 1, 0);
+
        usb_proc_drain(&ssc->sc_tq);
 
        for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
@@ -433,6 +437,12 @@
     
     if (usbd_set_pnpinfo(uaa->device, iface_index, buf) != 0)
        device_printf(dev, "Could not set PNP info\n");
+
+       if (ssc->sc_sysctl_dev_ucom == NULL)
+               ssc->sc_sysctl_dev_ucom = SYSCTL_ADD_INT(NULL,
+                   SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+                   OID_AUTO, "ucom", CTLFLAG_RD,
+                   &ssc->sc_unit, -1, "Attached ucom unit number");
 }
 
 static void
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to