problem with urtw

Matt sendtomatt at gmail.com
Sat Jun 11 02:02:26 UTC 2011


On 06/10/11 12:48, Jim Bryant wrote:
> the patch didn't get it.
>
> ugen3.2: <vendor 0x0bda> at usbus3
> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
> 2> on usbus3
> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
> device_attach: urtw0 attach returned 6
> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
> 2> on usbus3
> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
> device_attach: urtw0 attach returned 6
> ugen3.2: <vendor 0x0bda> at usbus3 (disconnected)
>
> [the last line was me unplugging it]
>
> this is with if_urtw.c patched to change L to B as you supplied.
>
> I'm here for testing..  any more ideas?  If anyone wants to play 
> themselves, look on ebay for WiFiSky 1500mW B/G with 6dBi antenna.  It 
> seems that half of Hong Kong is selling these for under $20 USD.
>
> Bernhard Schmidt wrote:
>> On Thursday, June 09, 2011 22:34:18 Jim Bryant wrote:
>>> I just bought one of those chinese (apparently the same unit 
>>> relabeled and being sold by multiple companies) realtek RTL8187B 
>>> wifi units.  The price is right.
>>>
>>> The label name on this one is WiFySky 1500mW.
>>>
>>> other than the fact that the case it is enclosed in is really 
>>> cheesy, there is a more immediate problem with this.
>>>
>>> the current urtw driver returns a 6.
>>>
>>> here we go:
>>>
>>> on insert:
>>>
>>> ugen3.2: <vendor 0x0bda> at usbus3
>>>
>>> after kldload if_urtw.ko:
>>>
>>> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
>>> 2> on usbus3
>>> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
>>> device_attach: urtw0 attach returned 6
>>> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
>>> 2> on usbus3
>>> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
>>> device_attach: urtw0 attach returned 6
>>> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
>>> 2> on usbus3
>>> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
>>> device_attach: urtw0 attach returned 6
>>> urtw0: <vendor 0x0bda product 0x8187, class 0/0, rev 2.00/2.00, addr 
>>> 2> on usbus3
>>> urtw0: could not allocate USB transfers, err=USB_ERR_NO_PIPE
>>> device_attach: urtw0 attach returned 6
>>>
>>>  3:28:35pm  argus(48): usbconfig -u 3 -a 2 dump_device_desc
>>> ugen3.2: <product 0x8187 vendor 0x0bda> at usbus3, cfg=0 md=HOST 
>>> spd=HIGH (480Mbps) pwr=ON
>>>
>>>   bLength = 0x0012
>>>   bDescriptorType = 0x0001
>>>   bcdUSB = 0x0200
>>>   bDeviceClass = 0x0000
>>>   bDeviceSubClass = 0x0000
>>>   bDeviceProtocol = 0x0000
>>>   bMaxPacketSize0 = 0x0040
>>>   idVendor = 0x0bda
>>>   idProduct = 0x8187
>>>   bcdDevice = 0x0200
>>>   iManufacturer = 0x0001 <Wireless Manufacturer>
>>>   iProduct = 0x0002 <USB2.0 WLAN Adapter>
>>>   iSerialNumber = 0x0000 <no string>
>>>   bNumConfigurations = 0x0001
>>>
>>>  3:28:48pm  argus(49): usbconfig -u 3 -a 2 dump_curr_config_desc
>>> ugen3.2: <product 0x8187 vendor 0x0bda> at usbus3, cfg=0 md=HOST 
>>> spd=HIGH (480Mbps) pwr=ON
>>>
>>>
>>>  Configuration index 0
>>>
>>>     bLength = 0x0009
>>>     bDescriptorType = 0x0002
>>>     wTotalLength = 0x0051
>>>     bNumInterfaces = 0x0001
>>>     bConfigurationValue = 0x0001
>>>     iConfiguration = 0x0004 <Wireless Network Card>
>>>     bmAttributes = 0x0080
>>>     bMaxPower = 0x00fa
>>>
>>>     Interface 0
>>>       bLength = 0x0009
>>>       bDescriptorType = 0x0004
>>>       bInterfaceNumber = 0x0000
>>>       bAlternateSetting = 0x0000
>>>       bNumEndpoints = 0x0009
>>>       bInterfaceClass = 0x00ff
>>>       bInterfaceSubClass = 0x00ff
>>>       bInterfaceProtocol = 0x00ff
>>>       iInterface = 0x0002 <USB2.0 WLAN Adapter>
>>>
>>>      Endpoint 0
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0083 <IN>
>>
>> I have no clue what I'm talking about, so, this might be wrong..
>>
>> Anyways.. the urtw(4) driver supports two different chips the
>> 8187B and 8187L. One difference between those is the number of
>> endpoints and its addresses. The 8187L uses 3 endpoints with
>> 0x81 as the RX endpoint, the 8187B uses 7 endpoints with 0x83 as
>> RX.
>>
>> % vendor REALTEK        0x0bda    Realtek
>> % product REALTEK RTL8187        0x8187    RTL8187 Wireless Adapter
>>
>> Quoting from the driver:
>>
>> % #define    URTW_DEV_B(v,p)                        \
>> %     { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, 
>> URTW_REV_RTL8187B) }
>> % #define    URTW_DEV_L(v,p)                        \
>> %    { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, 
>> URTW_REV_RTL8187L) }
>> % ..
>> % static const struct usb_device_id urtw_devs[] = {
>> %     URTW_DEV_L(REALTEK, RTL8187),
>> % ..
>> % static const struct usb_config 
>> urtw_8187b_usbconfig[URTW_8187B_N_XFERS] = {
>> %     [URTW_8187B_BULK_RX] = {
>> %         .type = UE_BULK,
>> %         .endpoint = 0x83,
>> % ..
>> % static const struct usb_config 
>> urtw_8187l_usbconfig[URTW_8187L_N_XFERS] = {
>> %     [URTW_8187L_BULK_RX] = {
>> %         .type = UE_BULK,
>> %         .endpoint = 0x81,
>>
>> It occurs to me that yours might actually be a B chip not a L,
>> because there is a 0x83 endpoint but none for 0x81.
>>
>> Wanna give that a shot?
>>
>> Index: if_urtw.c
>> ===================================================================
>> --- if_urtw.c    (revision 222807)
>> +++ if_urtw.c    (working copy)
>> @@ -112,7 +112,7 @@ static const struct usb_device_id urtw_devs[] = {
>>      URTW_DEV_L(BELKIN, F5D7050E),
>>      URTW_DEV_L(LINKSYS4, WUSB54GCV2),
>>      URTW_DEV_L(NETGEAR, WG111V2),
>> -    URTW_DEV_L(REALTEK, RTL8187),
>> +    URTW_DEV_B(REALTEK, RTL8187),
>>      URTW_DEV_L(SITECOMEU, WL168V1),
>>      URTW_DEV_L(SURECOM, EP9001G2A),
>>      { USB_VPI(0x1b75, 0x8187, URTW_REV_RTL8187L) },
>>
>>
>>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 1
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0004 <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 2
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0005 <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 3
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0006 <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 4
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0007 <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 5
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x0089 <IN>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 6
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x000a <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 7
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x000b <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>>      Endpoint 8
>>>         bLength = 0x0007
>>>         bDescriptorType = 0x0005
>>>         bEndpointAddress = 0x000c <OUT>
>>>         bmAttributes = 0x0002 <BULK>
>>>         wMaxPacketSize = 0x0200
>>>         bInterval = 0x0000
>>>         bRefresh = 0x0000
>>>         bSynchAddress = 0x0000
>>>
>>> If a verbose boot or any other info is needed to get this working, 
>>> please tell me, and I'll get you the info.
>>>
>>> I do have to admit, at the price these are going for, they are 
>>> rather nice, and do reach out and touch a router.  Review 
>>> complaints: heat dissipation.  If you buy one, don't operate it in a 
>>> hot environment.  I'd like to see it working in FreeBSD, but I don't 
>>> have a handle on the wifi driver structure.  Linux source code was 
>>> included on the driver disk.  I can email that directly to whomever 
>>> needs it for comparison.
>>>
>>>
>>> Thanks,
>>>
>>> Jim, KC5VDJ
>>>
>>> _______________________________________________
>>> freebsd-stable at freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
>>> To unsubscribe, send any mail to 
>>> "freebsd-stable-unsubscribe at freebsd.org"
>>
>> -- 
>> Bernhard
>>
> _______________________________________________
> freebsd-wireless at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-wireless
> To unsubscribe, send any mail to 
> "freebsd-wireless-unsubscribe at freebsd.org"
>
The classic engineering question as far as I know is "Did it ever work?"
Is any other operating system capable of bringing this device up & 
connecting to wireless networks etc?

China's street market (now on eBay!) is known as the residence of the 
true spirit of caveat emptor.

Matt


More information about the freebsd-wireless mailing list