Hello Hans,

On 4/12/13 19:26 , Hans Petter Selasky wrote:
> On 12/04/13 09:24, Edwin Groothuis - FreeBSD wrote:
>>
>> I found out that the device doesn't act as a serial port but an ethernet
>> card:
>>
>> bInterfaceClass is 2 (UICLASS_CDC)
>> bInterfaceSubClass is 14 (undefined in usb.h)
>>
>> Reading up on various other forums, they talk about using it as an
>> Ethernet device:
>> "and shows up as a USB ethernet device after modeswitching"
>>
>> According to the spec from Vodafone, this is a HiSilicon Balong 520
>> chipset.
>>
>> I think I'm stuck here...
>> Unless somebody has a good idea where to go next?
>> I'm open to experiment for the next 25 days :-)
> 
> Have a look at if_cdce.c
> 
> Should support your device, probably the NCM protocol.

Thank you, that did the trick: It got recognized by the probe!
Now the attach is the problem:

Dec  7 21:54:26 t43 sudo:    edwin : TTY=pts/7 ;
PWD=/usr/home/edwin/9.2.0/sys/mod
ules/usb/cdce ; USER=root ; COMMAND=/sbin/kldload ./if_cdce.ko
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1
Dec  7 21:54:26 t43 kernel: cdce0: <VodafoneHuawei K4606, class 0/0, rev
2.00/1.02, addr 2> on usbus4
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1a
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:0
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4b: error:12
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:1
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:3
Dec  7 21:54:26 t43 kernel: cdce0: No valid alternate setting found
Dec  7 21:54:26 t43 kernel: device_attach: cdce0 attach returned 6
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1
Dec  7 21:54:26 t43 kernel: cdce0: <VodafoneHuawei K4606, class 0/0, rev
2.00/1.02, addr 2> on usbus4
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1a
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:0
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 21:54:26 t43 root: Unknown USB device: vendor 0x12d1 product
0x1f19 bus uhub4
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4b: error:12
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:1
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4b: error:0
Dec  7 21:54:26 t43 kernel: cdce0: faking MAC address
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1
Dec  7 21:54:26 t43 kernel: cdce1: <VodafoneHuawei K4606, class 0/0, rev
2.00/1.02, addr 2> on usbus4
Dec  7 21:54:26 t43 kernel: >cdce_attach - 1a
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:0
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 21:54:26 t43 kernel: ue0: <USB Ethernet> on cdce0
Dec  7 21:54:26 t43 kernel: ue0: Ethernet address: 2a:d5:fd:08:00:00
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4b: error:12
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4:1
Dec  7 21:54:26 t43 kernel: >cdce_attach - 4a: error:3
Dec  7 21:54:26 t43 kernel: cdce1: No valid alternate setting found
Dec  7 21:54:26 t43 kernel: device_attach: cdce1 attach returned 6


The patches were as follows for the cdce_host_devs:
+       {USB_VPI(USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_K4606_INIT,
CDCE_FLAG_NO_UNION)},

And for the debugging:
@@ -506,6 +512,8 @@
        uint8_t data_iface_no;
        char eaddr_str[5 * ETHER_ADDR_LEN];     /* approx */

+       printf(">cdce_attach - 1\n");
+
        sc->sc_flags = USB_GET_DRIVER_INFO(uaa);
        sc->sc_ue.ue_udev = uaa->device;

@@ -519,6 +527,7 @@

        if ((ud == NULL) || (ud->bLength < sizeof(*ud)) ||
            (sc->sc_flags & CDCE_FLAG_NO_UNION)) {
+               printf(">cdce_attach - 1a\n");
                DPRINTFN(1, "No union descriptor!\n");
                sc->sc_ifaces_index[0] = uaa->info.bIfaceIndex;
                sc->sc_ifaces_index[1] = uaa->info.bIfaceIndex;
@@ -526,6 +535,7 @@
        }
        data_iface_no = ud->bSlaveInterface[0];

+       printf(">cdce_attach - 2\n");
        for (i = 0;; i++) {

                iface = usbd_get_iface(uaa->device, i);
@@ -545,6 +555,7 @@
                        goto detach;
                }
        }
+       printf(">cdce_attach - 3\n");

        /*
         * <quote>
@@ -575,8 +586,10 @@

        for (i = 0; i != 32; i++) {

+               printf(">cdce_attach - 4:%d\n", i);
                error = usbd_set_alt_interface_index(uaa->device,
                    sc->sc_ifaces_index[0], i);
+               printf(">cdce_attach - 4a: error:%d\n", error);
                if (error)
                        break;
 #if CDCE_HAVE_NCM
@@ -587,6 +600,7 @@
                    sc->sc_ifaces_index, sc->sc_xfer,
                    pcfg, CDCE_N_TRANSFER, sc, &sc->sc_mtx);

+               printf(">cdce_attach - 4b: error:%d\n", error);
                if (error == 0)
                        break;
        }

I tried with both with CDCE_FLAG_ZAURUS in there, no differences.
I tried it without CDCE_FLAG_NO_UNION and then I got this:

Dec  7 22:01:03 t43 root: Unknown USB device: vendor 0x0483 product
0x2016 bus uhub2
Dec  7 22:01:03 t43 kernel: >cdce_attach - 1
Dec  7 22:01:03 t43 kernel: cdce0: <VodafoneHuawei K4606, class 0/0, rev
2.00/1.02, addr 2> on usbus4
Dec  7 22:01:03 t43 kernel: >cdce_attach - 2
Dec  7 22:01:03 t43 kernel: >cdce_attach - 3
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4:0
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4b: error:12
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4:1
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4a: error:0
Dec  7 22:01:03 t43 kernel: >cdce_attach - 4b: error:0
Dec  7 22:01:03 t43 kernel: cdce0: faking MAC address
Dec  7 22:01:03 t43 kernel: ue0: <USB Ethernet> on cdce0
Dec  7 22:01:03 t43 kernel: ue0: Ethernet address: 2a:7d:0b:0f:00:00


Is that better? I don't know yet...
At least ue0 gets created, but the link light doesn't go on the modem...

I will take some traces on Monday on a Windows machine to see what needs
to be happening after the attachment of the interface.

Edwin


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to