From owner-svn-src-head@FreeBSD.ORG Sat Jun 8 17:02:16 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A1DFEEE2; Sat, 8 Jun 2013 17:02:16 +0000 (UTC) (envelope-from hiren.panchasara@gmail.com) Received: from mail-ea0-x22f.google.com (mail-ea0-x22f.google.com [IPv6:2a00:1450:4013:c01::22f]) by mx1.freebsd.org (Postfix) with ESMTP id 7B1D816D6; Sat, 8 Jun 2013 17:02:15 +0000 (UTC) Received: by mail-ea0-f175.google.com with SMTP id z7so679414eaf.6 for ; Sat, 08 Jun 2013 10:02:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=ernPjB57Oe96dr/SqdiNFCJCN+oA5uIG5MxFlk2lC40=; b=d8WjTq6RZiHqAYIdFdlkTFDNATP8lwox+D2hFfgVp5ypEglJsZ4RDCg7cb8h18ov0g PsiyTLL9u749C/Z5IM2hRt/MBPJW58WHw70a7I1lvbT/28vZHw7T5uOu4i1xv3tJLRXR M4WCKKNozmTZU1urs9gLcCqY50lO2CeVGWUr+t6JbHBX+UQx0PEpbQ37EGuFJcF+Gvlz t6w1THd6LnrIjkYo+nWG94ZIQBkXpEQRKf+wYAw1f0ZIJLIdqi8Sdl9aDJ5bhC1CMXwF JGgJJOfOgt7r669hyx70fYzz1iZbAFbxs1JInM+PKBHkxvuIGh7mCGLi4XRbdnMJ0ZJR 8F1Q== MIME-Version: 1.0 X-Received: by 10.14.1.70 with SMTP id 46mr3759447eec.82.1370710933715; Sat, 08 Jun 2013 10:02:13 -0700 (PDT) Sender: hiren.panchasara@gmail.com Received: by 10.15.64.193 with HTTP; Sat, 8 Jun 2013 10:02:13 -0700 (PDT) In-Reply-To: <201306081602.r58G2WcG014325@svn.freebsd.org> References: <201306081602.r58G2WcG014325@svn.freebsd.org> Date: Sat, 8 Jun 2013 10:02:13 -0700 X-Google-Sender-Auth: ItWLIaqwTz_Qp1r8vb5uPxiZ1cY Message-ID: Subject: Re: svn commit: r251538 - in head: share/man/man4 sys/conf sys/dev/usb sys/dev/usb/wlan sys/modules/usb sys/modules/usb/urtwn From: hiren panchasara To: Rui Paulo Content-Type: text/plain; charset=UTF-8 Cc: svn-src-head , svn-src-all , src-committers X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 08 Jun 2013 17:02:16 -0000 On Sat, Jun 8, 2013 at 9:02 AM, Rui Paulo wrote: > Author: rpaulo > Date: Sat Jun 8 16:02:31 2013 > New Revision: 251538 > URL: http://svnweb.freebsd.org/changeset/base/251538 > > Log: > Import Kevin Lo's port of urtwn(4) from OpenBSD. urtwn(4) is a driver for the > Realtek RTL8188CU/RTL8192CU USB IEEE 802.11b/g/n wireless cards. > This driver requires microcode which is available in FreeBSD ports: > net/urtwn-firmware-kmod. > > Hiren ported the urtwn(4) man page from OpenBSD and Glen just commited a port > for the firmware. > > TODO: > - 802.11n support > - Stability fixes - the driver can sustain lots of traffic but has trouble > coping with simultaneous iperf sessions. > - fix debugging > > MFC after: 2 months > Tested by: kevlo, hiren, gjb Yay! Great work Kevin for initial port and Rui for tuning it up to stable state and fixing performance issues. cheers, Hiren PS: Time for creating new image with the changes for beaglebone! > > Added: > head/share/man/man4/urtwn.4 (contents, props changed) > head/sys/dev/usb/wlan/if_urtwn.c (contents, props changed) > head/sys/dev/usb/wlan/if_urtwnreg.h (contents, props changed) > head/sys/modules/usb/urtwn/ > head/sys/modules/usb/urtwn/Makefile (contents, props changed) > Modified: > head/share/man/man4/Makefile > head/sys/conf/NOTES > head/sys/conf/files > head/sys/dev/usb/usbdevs > head/sys/modules/usb/Makefile > > Modified: head/share/man/man4/Makefile > ============================================================================== > --- head/share/man/man4/Makefile Sat Jun 8 15:48:29 2013 (r251537) > +++ head/share/man/man4/Makefile Sat Jun 8 16:02:31 2013 (r251538) > @@ -516,6 +516,7 @@ MAN= aac.4 \ > ural.4 \ > urio.4 \ > ${_urtw.4} \ > + urtwn.4 \ > usb.4 \ > usb_quirk.4 \ > uslcom.4 \ > > Added: head/share/man/man4/urtwn.4 > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/share/man/man4/urtwn.4 Sat Jun 8 16:02:31 2013 (r251538) > @@ -0,0 +1,140 @@ > +.\" $OpenBSD: urtwn.4,v 1.20 2013/05/16 10:02:59 sthen Exp $ > +.\" $FreeBSD$ > +.\" > +.\" Copyright (c) 2010 Damien Bergamini > +.\" > +.\" Permission to use, copy, modify, and distribute this software for any > +.\" purpose with or without fee is hereby granted, provided that the above > +.\" copyright notice and this permission notice appear in all copies. > +.\" > +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES > +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF > +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR > +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > +.\" > +.Dd July 7, 2013 > +.Dt URTWN 4 > +.Os > +.Sh NAME > +.Nm urtwn > +.Nd Realtek RTL8188CU/RTL8192CU USB IEEE 802.11b/g/n wireless network device > +.Sh SYNOPSIS > +To compile this driver into the kernel, > +place the following lines in your > +kernel configuration file: > +.Bd -ragged -offset indent > +.Cd "device ehci" > +.Cd "device uhci" > +.Cd "device ohci" > +.Cd "device usb" > +.Cd "device urtwn" > +.Cd "device wlan" > +.Ed > +.Pp > +Alternatively, to load the driver as a > +module at boot time, place the following line in > +.Xr loader.conf 5 : > +.Bd -literal -offset indent > +if_urtwn_load="YES" > +.Ed > +.Sh DESCRIPTION > +The > +.Nm > +driver supports USB 2.0 wireless network devices based on Realtek > +RTL8188CUS, RTL8188CE-VAU, RTL8188RU and RTL8192CU chipsets. > +.Pp > +The RTL8188CUS is a highly integrated 802.11n adapter that combines > +a MAC, a 1T1R capable baseband and an RF in a single chip. > +It operates in the 2GHz spectrum only. > +The RTL8188RU is a high-power variant of the RTL8188CUS. > +The RTL8188CE-VAU is a PCI Express Mini Card adapter that attaches > +to the USB interface. > +.Pp > +The RTL8192CU is a highly integrated multiple-in, multiple-out (MIMO) > +802.11n adapter that combines a MAC, a 2T2R capable baseband and an > +RF in a single chip. > +It operates in the 2GHz spectrum only. > +.Pp > +The driver needs at least version 1.1p0 of the following firmware files, > +which are loaded when an interface is attached: > +.Pp > +.Bl -tag -width Ds -offset indent -compact > +.It urtwn-rtl8192cfwT > +.It urtwn-rtl8192cfwU > +.It urtwn-rtl8723fw > +.El > +.Pp > +The firmware is available as part of the FreeBSD Ports collection in > +net/urtwn-firmware-kmod. > +.Sh HARDWARE > +The following adapters should work: > +.Pp > +.Bl -tag -width Ds -offset indent -compact > +.It Belkin F7D1102 Surf Wireless Micro > +.It Edimax EW-7811Un > +.It Netgear WNA1000M > +.It Realtek RTL8192CU > +.It Realtek RTL8188CUS > +.El > +.Sh EXAMPLES > +Join an existing BSS network (i.e., connect to an access point): > +.Bd -literal -offset indent > +ifconfig wlan create wlandev urtwn0 inet 192.168.0.20 \e > + netmask 0xffffff00 > +.Ed > +.Pp > +Join a specific BSS network with network name > +.Dq Li my_net : > +.Pp > +.Dl "ifconfig wlan create wlandev urtwn0 ssid my_net up" > +.Pp > +Join a specific BSS network with 64-bit WEP encryption: > +.Bd -literal -offset indent > +ifconfig wlan create wlandev urtwn0 ssid my_net \e > + wepmode on wepkey 0x1234567890 weptxkey 1 up > +.Ed > +.Sh DIAGNOSTICS > +.Bl -diag > +.It "urtwn%d: error %d, could not read firmware %s" > +For some reason, the driver was unable to read the microcode file from the > +filesystem. > +The file might be missing or corrupted. > +.It "urtwn%d: device timeout" > +A frame dispatched to the hardware for transmission did not complete in time. > +The driver will reset the hardware. > +This should not happen. > +.El > +.Sh SEE ALSO > +.Xr intro 4 , > +.Xr netintro 4 , > +.Xr usb 4 , > +.Xr wlan 4 , > +.Xr wlan_ccmp 4 , > +.Xr wlan_tkip 4 , > +.Xr wlan_wep 4 , > +.Xr ifconfig 8, > +.Xr wpa_supplicant 8 > +.Rs > +.%T Realtek > +.%U http://www.realtek.com.tw > +.Re > +.Sh HISTORY > +The > +.Nm > +driver first appeared in > +.Ox 4.9 > +and > +.Fx 10.0 . > +.Sh AUTHORS > +The > +.Nm > +driver was written by > +.An Damien Bergamini Aq damien@openbsd.org . > +.Sh CAVEATS > +The > +.Nm > +driver does not support any of the 802.11n capabilities offered by the > +adapters. > > Modified: head/sys/conf/NOTES > ============================================================================== > --- head/sys/conf/NOTES Sat Jun 8 15:48:29 2013 (r251537) > +++ head/sys/conf/NOTES Sat Jun 8 16:02:31 2013 (r251538) > @@ -2747,6 +2747,9 @@ device ural > # Realtek RTL8187B/L wireless driver > device urtw > # > +# Realtek RTL8188CU/RTL8192CU wireless driver > +device urtwn > +# > # ZyDas ZD1211/ZD1211B wireless driver > device zyd > # > > Modified: head/sys/conf/files > ============================================================================== > --- head/sys/conf/files Sat Jun 8 15:48:29 2013 (r251537) > +++ head/sys/conf/files Sat Jun 8 16:02:31 2013 (r251538) > @@ -2292,6 +2292,7 @@ dev/usb/wlan/if_uath.c optional uath > dev/usb/wlan/if_upgt.c optional upgt > dev/usb/wlan/if_ural.c optional ural > dev/usb/wlan/if_urtw.c optional urtw > +dev/usb/wlan/if_urtwn.c optional urtwn > dev/usb/wlan/if_zyd.c optional zyd > # > # USB serial and parallel port drivers > > Modified: head/sys/dev/usb/usbdevs > ============================================================================== > --- head/sys/dev/usb/usbdevs Sat Jun 8 15:48:29 2013 (r251537) > +++ head/sys/dev/usb/usbdevs Sat Jun 8 16:02:31 2013 (r251538) > @@ -571,6 +571,7 @@ vendor KONTRON 0x0fe6 Kontron AG > vendor QUALCOMM 0x1004 Qualcomm > vendor APACER 0x1005 Apacer > vendor MOTOROLA4 0x100d Motorola > +vendor HP3 0x103c Hewlett Packard > vendor AIRPLUS 0x1011 Airplus > vendor DESKNOTE 0x1019 Desknote > vendor NEC3 0x1033 NEC > @@ -720,6 +721,7 @@ vendor ENCORE 0x203d Encore > vendor QIHARDWARE 0x20b7 QI-hardware > vendor PARA 0x20b8 PARA Industrial > vendor SIMTEC 0x20df Simtec Electronics > +vendor TRENDNET 0x20f4 TRENDnet > vendor RTSYSTEMS 0x2100 RTSYSTEMS > vendor VIALABS 0x2109 VIA Labs > vendor ERICSSON 0x2282 Ericsson > @@ -742,6 +744,7 @@ vendor IRIVER 0x4102 iRiver > vendor DELL 0x413c Dell > vendor WCH 0x4348 QinHeng Electronics > vendor ACEECA 0x4766 Aceeca > +vendor FEIXUN 0x4855 FeiXun Communication > vendor PAPOUCH 0x5050 Papouch products > vendor AVERATEC 0x50c2 Averatec > vendor SWEEX 0x5173 Sweex > @@ -757,6 +760,7 @@ vendor INTEL2 0x8087 Intel > vendor ALLWIN 0x8516 ALLWIN Tech > vendor SITECOM2 0x9016 Sitecom > vendor MOSCHIP 0x9710 MosChip Semiconductor > +vendor NETGEAR4 0x9846 Netgear > vendor MARVELL 0x9e88 Marvell Technology Group Ltd. > vendor 3COM3 0xa727 3Com > vendor EVOLUTION 0xdeee Evolution Robotics products > @@ -814,6 +818,9 @@ product ABOCOM HWU54DM 0xb21b HWU54DM > product ABOCOM RT2573_2 0xb21c RT2573 > product ABOCOM RT2573_3 0xb21d RT2573 > product ABOCOM RT2573_4 0xb21e RT2573 > +product ABOCOM RTL8188CU_1 0x8188 RTL8188CU > +product ABOCOM RTL8188CU_2 0x8189 RTL8188CU > +product ABOCOM RTL8192CU 0x8178 RTL8192CU > product ABOCOM WUG2700 0xb21f WUG2700 > > /* Acton Research Corp. */ > @@ -1126,6 +1133,7 @@ product ASUS RT2870_4 0x1760 RT2870 > product ASUS RT2870_5 0x1761 RT2870 > product ASUS USBN13 0x1784 USB-N13 > product ASUS RT3070_1 0x1790 RT3070 > +product ASUS RTL8192CU 0x17ab RTL8192CU > product ASUS A730W 0x4202 ASUS MyPal A730W > product ASUS P535 0x420f ASUS P535 PDA > product ASUS GMSC 0x422f ASUS Generic Mass Storage > @@ -1173,6 +1181,10 @@ product AZUREWAVE RT2870_2 0x3262 RT2870 > product AZUREWAVE RT3070_1 0x3273 RT3070 > product AZUREWAVE RT3070_2 0x3284 RT3070 > product AZUREWAVE RT3070_3 0x3305 RT3070 > +product AZUREWAVE RTL8188CU 0x3357 RTL8188CU > +product AZUREWAVE RTL8188CE_1 0x3358 RTL8188CE > +product AZUREWAVE RTL8188CE_2 0x3359 RTL8188CE > + > > /* Baltech products */ > product BALTECH CARDREADER 0x9999 Card reader > @@ -1215,6 +1227,9 @@ product BELKIN F5U257 0x0257 F5U257 Ser > product BELKIN F5U409 0x0409 F5U409 Serial > product BELKIN F6C550AVR 0x0551 F6C550-AVR UPS > product BELKIN F5U120 0x1203 F5U120-PC Hub > +product BELKIN RTL8188CU 0x1102 RTL8188CU Wireless Adapter > +product BELKIN RTL8192CU 0x2102 RTL8192CU Wireless Adapter > +product BELKIN F7D2102 0x2103 F7D2102 Wireless Adapter > product BELKIN ZD1211B 0x4050 ZD1211B > product BELKIN F5D5055 0x5055 F5D5055 > product BELKIN F5D7050 0x7050 F5D7050 Wireless Adapter > @@ -1294,6 +1309,11 @@ product CHIC CYPRESS 0x0003 Cypress USB > product CHICONY KB8933 0x0001 KB-8933 keyboard > product CHICONY KU0325 0x0116 KU-0325 keyboard > product CHICONY CNF7129 0xb071 Notebook Web Camera > +product CHICONY RTL8188CUS_1 0xaff7 RTL8188CUS > +product CHICONY RTL8188CUS_2 0xaff8 RTL8188CUS > +product CHICONY RTL8188CUS_3 0xaff9 RTL8188CUS > +product CHICONY RTL8188CUS_4 0xaffa RTL8188CUS > +product CHICONY RTL8188CUS_5 0xaffa RTL8188CUS > product CHICONY2 TWINKLECAM 0x600d TwinkleCam USB camera > > /* CH Products */ > @@ -1383,6 +1403,7 @@ product COREGA RT2870_2 0x003c RT2870 > product COREGA RT2870_3 0x003f RT2870 > product COREGA RT3070 0x0041 RT3070 > product COREGA CGWLUSB300GNM 0x0042 CG-WLUSB300GNM > +product COREGA RTL8192CU 0x0056 RTL8192CU > > product COREGA WLUSB_11_STICK 0x7613 WLAN USB Stick 11 > product COREGA FETHER_USB_TXC 0x9601 FEther USB-TXC > @@ -1519,6 +1540,10 @@ product DLINK DSB650 0xabc1 10/100 Ethe > product DLINK DUBH7 0xf103 DUB-H7 USB 2.0 7-Port Hub > product DLINK DWR510_CD 0xa805 DWR-510 CD-ROM Mode > product DLINK DWR510 0x7e12 DWR-510 > +product DLINK RTL8188CU 0x3308 RTL8188CU > +product DLINK RTL8192CU_1 0x3307 RTL8192CU > +product DLINK RTL8192CU_2 0x3309 RTL8192CU > +product DLINK RTL8192CU_3 0x330a RTL8192CU > product DLINK2 DWA120 0x3a0c DWA-120 > product DLINK2 DWA120_NF 0x3a0d DWA-120 (no firmware) > product DLINK2 DWLG122C1 0x3c03 DWL-G122 c1 > @@ -1559,6 +1584,7 @@ product EDIMAX RT2870_1 0x7711 RT2870 > product EDIMAX EW7717 0x7717 EW-7717 > product EDIMAX EW7718 0x7718 EW-7718 > product EDIMAX EW7811UN 0x7811 EW-7811Un > +product EDIMAX RTL8192CU 0x7822 RTL8192CU > > /* eGalax Products */ > product EGALAX TPANEL 0x0001 Touch Panel > @@ -1691,6 +1717,10 @@ product FEIYA 5IN1 0x1132 5-in-1 Card R > product FEIYA ELANGO 0x6200 MicroSDHC Card Reader > product FEIYA AC110 0x6300 AC-110 Card Reader > > +/* FeiXun Communication products */ > +product FEIXUN RTL8188CU 0x0090 RTL8188CU > +product FEIXUN RTL8192CU 0x0091 RTL8192CU > + > /* Festo */ > product FESTO CPX_USB 0x0102 CPX-USB > product FESTO CMSP 0x0501 CMSP > @@ -2043,6 +2073,7 @@ product GUILLEMOT HWGUSB254 0xe000 HWGUS > product GUILLEMOT HWGUSB254LB 0xe010 HWGUSB2-54-LB > product GUILLEMOT HWGUSB254V2AP 0xe020 HWGUSB2-54V2-AP > product GUILLEMOT HWNU300 0xe030 HWNU-300 > +product GUILLEMOT HWNUP150 0xe033 HWNUP-150 > > /* Hagiwara products */ > product HAGIWARA FGSM 0x0002 FlashGate SmartMedia Card Reader > @@ -2066,6 +2097,7 @@ product HAWKING RT2870_1 0x0001 RT2870 > product HAWKING RT2870_2 0x0003 RT2870 > product HAWKING HWUN2 0x0009 HWUN2 > product HAWKING RT3070 0x000b RT3070 > +product HAWKING RTL8192CU 0x0019 RTL8192CU > product HAWKING UF100 0x400c 10/100 USB Ethernet > > /* HID Global GmbH products */ > @@ -2115,6 +2147,7 @@ product HP 5400C 0x1005 Scanjet 5400C > product HP 2215 0x1016 iPAQ 22xx/Jornada 548 > product HP 568J 0x1116 Jornada 568 > product HP 930C 0x1204 DeskJet 930c > +product HP3 RTL8188CU 0x1629 RTL8188CU > product HP P2000U 0x1801 Inkjet P-2000U > product HP HS2300 0x1e1d HS2300 HSDPA (aka MC8775) > product HP 640C 0x2004 DeskJet 640c > @@ -3024,6 +3057,8 @@ product NETGEAR WG111V3 0x4260 WG111v3 > product NETGEAR WG111U 0x4300 WG111U > product NETGEAR WG111U_NF 0x4301 WG111U (no firmware) > product NETGEAR WG111V2 0x6a00 WG111V2 > +product NETGEAR RTL8192CU 0x9021 RTL8192CU > +product NETGEAR WNA1000M 0x9041 WNA1000M > product NETGEAR2 MA101 0x4100 MA101 > product NETGEAR2 MA101B 0x4102 MA101 Rev B > product NETGEAR3 WG111T 0x4250 WG111T > @@ -3031,6 +3066,7 @@ product NETGEAR3 WG111T_NF 0x4251 WG111T > product NETGEAR3 WPN111 0x5f00 WPN111 > product NETGEAR3 WPN111_NF 0x5f01 WPN111 (no firmware) > product NETGEAR3 WPN111_2 0x5f02 WPN111 > +product NETGEAR4 RTL8188CU 0x9041 RTL8188CU > > /* NetIndex products */ > product NETINDEX WS002IN 0x2001 Willcom WS002IN > @@ -3046,6 +3082,7 @@ product NIKON D300 0x041a Digital Came > /* NovaTech Products */ > product NOVATECH NV902 0x9020 NovaTech NV-902W > product NOVATECH RT2573 0x9021 RT2573 > +product NOVATECH RTL8188CU 0x9071 RTL8188CU > > /* Nokia products */ > product NOKIA N958GB 0x0070 Nokia N95 8GBc > @@ -3274,8 +3311,14 @@ product PIENGINEERING PS2USB 0x020b PS2 > > /* Planex Communications products */ > product PLANEX GW_US11H 0x14ea GW-US11H WLAN > +product PLANEX2 RTL8188CUS 0x1201 RTL8188CUS > product PLANEX2 GW_US11S 0x3220 GW-US11S WLAN > product PLANEX2 GW_US54GXS 0x5303 GW-US54GXS WLAN > +product PLANEX2 RTL8188CU_1 0xab2a RTL8188CU > +product PLANEX2 RTL8188CU_2 0xed17 RTL8188CU > +product PLANEX2 RTL8188CU_3 0x4902 RTL8188CU > +product PLANEX2 RTL8188CU_4 0xab2e RTL8188CU > +product PLANEX2 RTL8192CU 0xab2b RTL8192CU > product PLANEX2 GWUS54HP 0xab01 GW-US54HP > product PLANEX2 GWUS300MINIS 0xab24 GW-US300MiniS > product PLANEX2 RT3070 0xab25 RT3070 > @@ -3502,11 +3545,24 @@ product RATOC REXUSB60F 0xb020 USB seri > /* Green House and CompUSA OEM this part */ > product REALTEK DUMMY 0x0000 Dummy product > product REALTEK USB20CRW 0x0158 USB20CRW Card Reader > +product REALTEK RTL8188CTV 0x018a RTL8188CTV > product REALTEK USBKR100 0x8150 USBKR100 USB Ethernet > +product REALTEK RTL8188CE_0 0x8170 RTL8188CE > +product REALTEK RTL8188CE_1 0x817e RTL8188CE > +product REALTEK RTL8188CU_0 0x8176 RTL8188CU > +product REALTEK RTL8188CU_1 0x817a RTL8188CU > +product REALTEK RTL8188CU_2 0x817b RTL8188CU > product REALTEK RTL8187 0x8187 RTL8187 Wireless Adapter > product REALTEK RTL8187B_0 0x8189 RTL8187B Wireless Adapter > product REALTEK RTL8187B_1 0x8197 RTL8187B Wireless Adapter > product REALTEK RTL8187B_2 0x8198 RTL8187B Wireless Adapter > +product REALTEK RTL8188CUS 0x818a RTL8188CUS > +product REALTEK RTL8188CU_COMBO 0x8754 RTL8188CU > +product REALTEK RTL8191CU 0x8177 RTL8191CU > +product REALTEK RTL8192CU 0x8178 RTL8192CU > +product REALTEK RTL8192CE 0x817c RTL8192CE > +product REALTEK RTL8188RU_1 0x817d RTL8188RU > +product REALTEK RTL8188RU_2 0x317f RTL8188RU > > /* RedOctane products */ > product REDOCTANE DUMMY 0x0000 Dummy product > @@ -3881,6 +3937,9 @@ product SITECOMEU RT3072_3 0x0047 RT3072 > product SITECOMEU RT3072_4 0x0048 RT3072 > product SITECOMEU RT3072_5 0x004a RT3072 > product SITECOMEU RT3072_6 0x004d RT3072 > +product SITECOMEU RTL8188CU_1 0x0052 RTL8188CU > +product SITECOMEU RTL8188CU_2 0x005c RTL8188CU > +product SITECOMEU RTL8192CU 0x0061 RTL8192CU > product SITECOMEU LN028 0x061c LN-028 > product SITECOMEU WL113 0x9071 WL-113 > product SITECOMEU ZD1211B 0x9075 ZD1211B > @@ -4110,6 +4169,10 @@ product TREK THUMBDRIVE 0x1111 ThumbDri > product TREK MEMKEY 0x8888 IBM USB Memory Key > product TREK THUMBDRIVE_8MB 0x9988 ThumbDrive_8MB > > +/* TRENDnet products */ > +product TRENDNET RTL8192CU 0x624d RTL8192CU > +product TRENDNET RTL8188CU 0x648b RTL8188CU > + > /* Tripp-Lite products */ > product TRIPPLITE U209 0x2008 Serial > > @@ -4319,3 +4382,4 @@ product ZYXEL G220V2 0x340f G-220 v2 > product ZYXEL G202 0x3410 G-202 > product ZYXEL RT2870_1 0x3416 RT2870 > product ZYXEL RT2870_2 0x341a RT2870 > +product ZYXEL RTL8192CU 0x341f RTL8192CU > > Added: head/sys/dev/usb/wlan/if_urtwn.c > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/sys/dev/usb/wlan/if_urtwn.c Sat Jun 8 16:02:31 2013 (r251538) > @@ -0,0 +1,3016 @@ > +/* $OpenBSD: if_urtwn.c,v 1.16 2011/02/10 17:26:40 jakemsr Exp $ */ > + > +/*- > + * Copyright (c) 2010 Damien Bergamini > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES > + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR > + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > + */ > + > +#include > +__FBSDID("$FreeBSD$"); > + > +/* > + * Driver for Realtek RTL8188CE-VAU/RTL8188CUS/RTL8188RU/RTL8192CU. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include "usbdevs.h" > + > +#define USB_DEBUG_VAR urtwn_debug > +#include > + > +#include > + > +#ifdef USB_DEBUG > +static int urtwn_debug = 0; > + > +SYSCTL_NODE(_hw_usb, OID_AUTO, urtwn, CTLFLAG_RW, 0, "USB urtwn"); > +SYSCTL_INT(_hw_usb_urtwn, OID_AUTO, debug, CTLFLAG_RW, &urtwn_debug, 0, > + "Debug level"); > +#endif > + > +#define IEEE80211_HAS_ADDR4(wh) \ > + (((wh)->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS) > + > +/* various supported device vendors/products */ > +static const struct usb_device_id urtwn_devs[] = { > +#define URTWN_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) } > + URTWN_DEV(ABOCOM, RTL8188CU_1), > + URTWN_DEV(ABOCOM, RTL8188CU_2), > + URTWN_DEV(ABOCOM, RTL8192CU), > + URTWN_DEV(ASUS, RTL8192CU), > + URTWN_DEV(AZUREWAVE, RTL8188CE_1), > + URTWN_DEV(AZUREWAVE, RTL8188CE_2), > + URTWN_DEV(AZUREWAVE, RTL8188CU), > + URTWN_DEV(BELKIN, F7D2102), > + URTWN_DEV(BELKIN, RTL8188CU), > + URTWN_DEV(BELKIN, RTL8192CU), > + URTWN_DEV(CHICONY, RTL8188CUS_1), > + URTWN_DEV(CHICONY, RTL8188CUS_2), > + URTWN_DEV(CHICONY, RTL8188CUS_3), > + URTWN_DEV(CHICONY, RTL8188CUS_4), > + URTWN_DEV(CHICONY, RTL8188CUS_5), > + URTWN_DEV(COREGA, RTL8192CU), > + URTWN_DEV(DLINK, RTL8188CU), > + URTWN_DEV(DLINK, RTL8192CU_1), > + URTWN_DEV(DLINK, RTL8192CU_2), > + URTWN_DEV(DLINK, RTL8192CU_3), > + URTWN_DEV(EDIMAX, EW7811UN), > + URTWN_DEV(EDIMAX, RTL8192CU), > + URTWN_DEV(FEIXUN, RTL8188CU), > + URTWN_DEV(FEIXUN, RTL8192CU), > + URTWN_DEV(GUILLEMOT, HWNUP150), > + URTWN_DEV(HAWKING, RTL8192CU), > + URTWN_DEV(HP3, RTL8188CU), > + URTWN_DEV(NETGEAR, WNA1000M), > + URTWN_DEV(NETGEAR, RTL8192CU), > + URTWN_DEV(NETGEAR4, RTL8188CU), > + URTWN_DEV(NOVATECH, RTL8188CU), > + URTWN_DEV(PLANEX2, RTL8188CU_1), > + URTWN_DEV(PLANEX2, RTL8188CU_2), > + URTWN_DEV(PLANEX2, RTL8188CU_3), > + URTWN_DEV(PLANEX2, RTL8188CU_4), > + URTWN_DEV(PLANEX2, RTL8188CUS), > + URTWN_DEV(PLANEX2, RTL8192CU), > + URTWN_DEV(REALTEK, RTL8188CE_0), > + URTWN_DEV(REALTEK, RTL8188CE_1), > + URTWN_DEV(REALTEK, RTL8188CTV), > + URTWN_DEV(REALTEK, RTL8188CU_0), > + URTWN_DEV(REALTEK, RTL8188CU_1), > + URTWN_DEV(REALTEK, RTL8188CU_2), > + URTWN_DEV(REALTEK, RTL8188CU_COMBO), > + URTWN_DEV(REALTEK, RTL8188CUS), > + URTWN_DEV(REALTEK, RTL8188RU_1), > + URTWN_DEV(REALTEK, RTL8188RU_2), > + URTWN_DEV(REALTEK, RTL8191CU), > + URTWN_DEV(REALTEK, RTL8192CE), > + URTWN_DEV(REALTEK, RTL8192CU), > + URTWN_DEV(SITECOMEU, RTL8188CU_1), > + URTWN_DEV(SITECOMEU, RTL8188CU_2), > + URTWN_DEV(SITECOMEU, RTL8192CU), > + URTWN_DEV(TRENDNET, RTL8188CU), > + URTWN_DEV(TRENDNET, RTL8192CU), > + URTWN_DEV(ZYXEL, RTL8192CU), > +#undef URTWN_DEV > +}; > + > +static device_probe_t urtwn_match; > +static device_attach_t urtwn_attach; > +static device_detach_t urtwn_detach; > + > +static usb_callback_t urtwn_bulk_tx_callback; > +static usb_callback_t urtwn_bulk_rx_callback; > + > +static usb_error_t urtwn_do_request(struct urtwn_softc *sc, > + struct usb_device_request *req, void *data); > +static struct ieee80211vap *urtwn_vap_create(struct ieee80211com *, > + const char [IFNAMSIZ], int, enum ieee80211_opmode, int, > + const uint8_t [IEEE80211_ADDR_LEN], > + const uint8_t [IEEE80211_ADDR_LEN]); > +static void urtwn_vap_delete(struct ieee80211vap *); > +static struct mbuf * urtwn_rx_frame(struct urtwn_softc *, uint8_t *, int, > + int *); > +static struct mbuf * urtwn_rxeof(struct usb_xfer *, struct urtwn_data *, > + int *, int8_t *); > +static void urtwn_txeof(struct usb_xfer *, struct urtwn_data *); > +static int urtwn_alloc_list(struct urtwn_softc *, > + struct urtwn_data[], int, int); > +static int urtwn_alloc_rx_list(struct urtwn_softc *); > +static int urtwn_alloc_tx_list(struct urtwn_softc *); > +static void urtwn_free_tx_list(struct urtwn_softc *); > +static void urtwn_free_rx_list(struct urtwn_softc *); > +static void urtwn_free_list(struct urtwn_softc *, > + struct urtwn_data data[], int); > +static struct urtwn_data * _urtwn_getbuf(struct urtwn_softc *); > +static struct urtwn_data * urtwn_getbuf(struct urtwn_softc *); > +static int urtwn_write_region_1(struct urtwn_softc *, uint16_t, > + uint8_t *, int); > +static void urtwn_write_1(struct urtwn_softc *, uint16_t, uint8_t); > +static void urtwn_write_2(struct urtwn_softc *, uint16_t, uint16_t); > +static void urtwn_write_4(struct urtwn_softc *, uint16_t, uint32_t); > +static int urtwn_read_region_1(struct urtwn_softc *, uint16_t, > + uint8_t *, int); > +static uint8_t urtwn_read_1(struct urtwn_softc *, uint16_t); > +static uint16_t urtwn_read_2(struct urtwn_softc *, uint16_t); > +static uint32_t urtwn_read_4(struct urtwn_softc *, uint16_t); > +static int urtwn_fw_cmd(struct urtwn_softc *, uint8_t, > + const void *, int); > +static void urtwn_rf_write(struct urtwn_softc *, int, uint8_t, > + uint32_t); > +static uint32_t urtwn_rf_read(struct urtwn_softc *, int, uint8_t); > +static int urtwn_llt_write(struct urtwn_softc *, uint32_t, > + uint32_t); > +static uint8_t urtwn_efuse_read_1(struct urtwn_softc *, uint16_t); > +static void urtwn_efuse_read(struct urtwn_softc *); > +static int urtwn_read_chipid(struct urtwn_softc *); > +static void urtwn_read_rom(struct urtwn_softc *); > +static int urtwn_ra_init(struct urtwn_softc *); > +static void urtwn_tsf_sync_enable(struct urtwn_softc *); > +static void urtwn_set_led(struct urtwn_softc *, int, int); > +static int urtwn_newstate(struct ieee80211vap *, > + enum ieee80211_state, int); > +static void urtwn_watchdog(void *); > +static void urtwn_update_avgrssi(struct urtwn_softc *, int, int8_t); > +static int8_t urtwn_get_rssi(struct urtwn_softc *, int, void *); > +static int urtwn_tx_start(struct urtwn_softc *, > + struct ieee80211_node *, struct mbuf *, > + struct urtwn_data *); > +static void urtwn_start(struct ifnet *); > +static int urtwn_ioctl(struct ifnet *, u_long, caddr_t); > +static int urtwn_power_on(struct urtwn_softc *); > +static int urtwn_llt_init(struct urtwn_softc *); > +static void urtwn_fw_reset(struct urtwn_softc *); > +static int urtwn_fw_loadpage(struct urtwn_softc *, int, > + const uint8_t *, int); > +static int urtwn_load_firmware(struct urtwn_softc *); > +static int urtwn_dma_init(struct urtwn_softc *); > +static void urtwn_mac_init(struct urtwn_softc *); > +static void urtwn_bb_init(struct urtwn_softc *); > +static void urtwn_rf_init(struct urtwn_softc *); > +static void urtwn_cam_init(struct urtwn_softc *); > +static void urtwn_pa_bias_init(struct urtwn_softc *); > +static void urtwn_rxfilter_init(struct urtwn_softc *); > +static void urtwn_edca_init(struct urtwn_softc *); > +static void urtwn_write_txpower(struct urtwn_softc *, int, > + uint16_t[]); > +static void urtwn_get_txpower(struct urtwn_softc *, int, > + struct ieee80211_channel *, > + struct ieee80211_channel *, uint16_t[]); > +static void urtwn_set_txpower(struct urtwn_softc *, > + struct ieee80211_channel *, > + struct ieee80211_channel *); > +static void urtwn_scan_start(struct ieee80211com *); > +static void urtwn_scan_end(struct ieee80211com *); > +static void urtwn_set_channel(struct ieee80211com *); > +static void urtwn_set_chan(struct urtwn_softc *, > + struct ieee80211_channel *, > + struct ieee80211_channel *); > +static void urtwn_update_mcast(struct ifnet *); > +static void urtwn_iq_calib(struct urtwn_softc *); > +static void urtwn_lc_calib(struct urtwn_softc *); > +static void urtwn_init(void *); > +static void urtwn_init_locked(void *); > +static void urtwn_stop(struct ifnet *, int); > +static void urtwn_stop_locked(struct ifnet *, int); > +static void urtwn_abort_xfers(struct urtwn_softc *); > +static int urtwn_raw_xmit(struct ieee80211_node *, struct mbuf *, > + const struct ieee80211_bpf_params *); > + > +/* Aliases. */ > +#define urtwn_bb_write urtwn_write_4 > +#define urtwn_bb_read urtwn_read_4 > + > +static const struct usb_config urtwn_config[URTWN_N_TRANSFER] = { > + [URTWN_BULK_RX] = { > + .type = UE_BULK, > + .endpoint = UE_ADDR_ANY, > + .direction = UE_DIR_IN, > + .bufsize = URTWN_RXBUFSZ, > + .flags = { > + .pipe_bof = 1, > + .short_xfer_ok = 1 > + }, > + .callback = urtwn_bulk_rx_callback, > + }, > + [URTWN_BULK_TX_BE] = { > + .type = UE_BULK, > + .endpoint = 0x03, > + .direction = UE_DIR_OUT, > + .bufsize = URTWN_TXBUFSZ, > + .flags = { > + .ext_buffer = 1, > + .pipe_bof = 1, > + .force_short_xfer = 1 > + }, > + .callback = urtwn_bulk_tx_callback, > + .timeout = URTWN_TX_TIMEOUT, /* ms */ > + }, > + [URTWN_BULK_TX_BK] = { > + .type = UE_BULK, > + .endpoint = 0x03, > + .direction = UE_DIR_OUT, > + .bufsize = URTWN_TXBUFSZ, > + .flags = { > + .ext_buffer = 1, > + .pipe_bof = 1, > + .force_short_xfer = 1, > + }, > + .callback = urtwn_bulk_tx_callback, > + .timeout = URTWN_TX_TIMEOUT, /* ms */ > + }, > + [URTWN_BULK_TX_VI] = { > + .type = UE_BULK, > + .endpoint = 0x02, > + .direction = UE_DIR_OUT, > + .bufsize = URTWN_TXBUFSZ, > + .flags = { > + .ext_buffer = 1, > + .pipe_bof = 1, > + .force_short_xfer = 1 > + }, > + .callback = urtwn_bulk_tx_callback, > + .timeout = URTWN_TX_TIMEOUT, /* ms */ > + }, > + [URTWN_BULK_TX_VO] = { > + .type = UE_BULK, > + .endpoint = 0x02, > + .direction = UE_DIR_OUT, > + .bufsize = URTWN_TXBUFSZ, > + .flags = { > + .ext_buffer = 1, > + .pipe_bof = 1, > + .force_short_xfer = 1 > + }, > + .callback = urtwn_bulk_tx_callback, > + .timeout = URTWN_TX_TIMEOUT, /* ms */ > + }, > +}; > + > +static int > +urtwn_match(device_t self) > +{ > + struct usb_attach_arg *uaa = device_get_ivars(self); > + > + if (uaa->usb_mode != USB_MODE_HOST) > + return (ENXIO); > + if (uaa->info.bConfigIndex != URTWN_CONFIG_INDEX) > + return (ENXIO); > + if (uaa->info.bIfaceIndex != URTWN_IFACE_INDEX) > + return (ENXIO); > + > + return (usbd_lookup_id_by_uaa(urtwn_devs, sizeof(urtwn_devs), uaa)); > +} > + > +static int > +urtwn_attach(device_t self) > +{ > + struct usb_attach_arg *uaa = device_get_ivars(self); > + struct urtwn_softc *sc = device_get_softc(self); > + struct ifnet *ifp; > + struct ieee80211com *ic; > + uint8_t iface_index, bands; > + int error; > + > + device_set_usb_desc(self); > + sc->sc_udev = uaa->device; > + sc->sc_dev = self; > + > + mtx_init(&sc->sc_mtx, device_get_nameunit(self), > + MTX_NETWORK_LOCK, MTX_DEF); > + callout_init(&sc->sc_watchdog_ch, 0); > + > + iface_index = URTWN_IFACE_INDEX; > + error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_xfer, > + urtwn_config, URTWN_N_TRANSFER, sc, &sc->sc_mtx); > + if (error) { > + device_printf(self, "could not allocate USB transfers, " > + "err=%s\n", usbd_errstr(error)); > + goto detach; > + } > + > + URTWN_LOCK(sc); > + > + error = urtwn_read_chipid(sc); > + if (error) { > + device_printf(sc->sc_dev, "unsupported test chip\n"); > + URTWN_UNLOCK(sc); > + goto detach; > + } > + > + /* Determine number of Tx/Rx chains. */ > + if (sc->chip & URTWN_CHIP_92C) { > + sc->ntxchains = (sc->chip & URTWN_CHIP_92C_1T2R) ? 1 : 2; > + sc->nrxchains = 2; > + } else { > + sc->ntxchains = 1; > + sc->nrxchains = 1; > + } > + urtwn_read_rom(sc); > + > + device_printf(sc->sc_dev, "MAC/BB RTL%s, RF 6052 %dT%dR\n", > + (sc->chip & URTWN_CHIP_92C) ? "8192CU" : > + (sc->board_type == R92C_BOARD_TYPE_HIGHPA) ? "8188RU" : > + (sc->board_type == R92C_BOARD_TYPE_MINICARD) ? "8188CE-VAU" : > + "8188CUS", sc->ntxchains, sc->nrxchains); > + > + URTWN_UNLOCK(sc); > + > + ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211); > + if (ifp == NULL) { > + device_printf(sc->sc_dev, "can not if_alloc()\n"); > + goto detach; > + } > + ic = ifp->if_l2com; > + > + ifp->if_softc = sc; > + if_initname(ifp, "urtwn", device_get_unit(sc->sc_dev)); > + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; > + ifp->if_init = urtwn_init; > + ifp->if_ioctl = urtwn_ioctl; > + ifp->if_start = urtwn_start; > + IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); > + ifp->if_snd.ifq_drv_maxlen = ifqmaxlen; > + IFQ_SET_READY(&ifp->if_snd); > + > + ic->ic_ifp = ifp; > + ic->ic_phytype = IEEE80211_T_OFDM; /* not only, but not used */ > + ic->ic_opmode = IEEE80211_M_STA; /* default to BSS mode */ > + > + /* set device capabilities */ > + ic->ic_caps = > + IEEE80211_C_STA /* station mode */ > + | IEEE80211_C_MONITOR /* monitor mode */ > + | IEEE80211_C_SHPREAMBLE /* short preamble supported */ > + | IEEE80211_C_SHSLOT /* short slot time supported */ > + | IEEE80211_C_BGSCAN /* capable of bg scanning */ > + | IEEE80211_C_WPA /* 802.11i */ > + ; > + > + bands = 0; > + setbit(&bands, IEEE80211_MODE_11B); > + setbit(&bands, IEEE80211_MODE_11G); > + ieee80211_init_channels(ic, NULL, &bands); > + > + ieee80211_ifattach(ic, sc->sc_bssid); > + ic->ic_raw_xmit = urtwn_raw_xmit; > + ic->ic_scan_start = urtwn_scan_start; > + ic->ic_scan_end = urtwn_scan_end; > + ic->ic_set_channel = urtwn_set_channel; > + > + ic->ic_vap_create = urtwn_vap_create; > + ic->ic_vap_delete = urtwn_vap_delete; > + ic->ic_update_mcast = urtwn_update_mcast; > + > + ieee80211_radiotap_attach(ic, &sc->sc_txtap.wt_ihdr, > + sizeof(sc->sc_txtap), URTWN_TX_RADIOTAP_PRESENT, > + &sc->sc_rxtap.wr_ihdr, sizeof(sc->sc_rxtap), > + URTWN_RX_RADIOTAP_PRESENT); > + > + if (bootverbose) > + ieee80211_announce(ic); > + > + return (0); > + > +detach: > + urtwn_detach(self); > + return (ENXIO); /* failure */ > +} > + > +static int > +urtwn_detach(device_t self) > +{ > + struct urtwn_softc *sc = device_get_softc(self); > + struct ifnet *ifp = sc->sc_ifp; > + struct ieee80211com *ic = ifp->if_l2com; > + > + if (!device_is_attached(self)) > + return (0); > + > + urtwn_stop(ifp, 1); > + > + callout_drain(&sc->sc_watchdog_ch); > + > + /* stop all USB transfers */ > + usbd_transfer_unsetup(sc->sc_xfer, URTWN_N_TRANSFER); > + ieee80211_ifdetach(ic); > + > + urtwn_free_tx_list(sc); > + urtwn_free_rx_list(sc); > + > + if_free(ifp); > + mtx_destroy(&sc->sc_mtx); > + > + return (0); > +} > + > +static void > +urtwn_free_tx_list(struct urtwn_softc *sc) > +{ > + urtwn_free_list(sc, sc->sc_tx, URTWN_TX_LIST_COUNT); > +} > + > +static void > +urtwn_free_rx_list(struct urtwn_softc *sc) > +{ > + urtwn_free_list(sc, sc->sc_rx, URTWN_RX_LIST_COUNT); > +} > + > +static void > +urtwn_free_list(struct urtwn_softc *sc, struct urtwn_data data[], int ndata) > +{ > + int i; > + > + for (i = 0; i < ndata; i++) { > + struct urtwn_data *dp = &data[i]; > + > + if (dp->buf != NULL) { > + free(dp->buf, M_USBDEV); > + dp->buf = NULL; > + } > + if (dp->ni != NULL) { > + ieee80211_free_node(dp->ni); > + dp->ni = NULL; > + } > + } > +} > + > +static usb_error_t > +urtwn_do_request(struct urtwn_softc *sc, struct usb_device_request *req, > + void *data) > +{ > + usb_error_t err; > + int ntries = 10; > + > + URTWN_ASSERT_LOCKED(sc); > + > + while (ntries--) { > + err = usbd_do_request_flags(sc->sc_udev, &sc->sc_mtx, > + req, data, 0, NULL, 250 /* ms */); > + if (err == 0) > + break; > + > + DPRINTFN(1, "Control request failed, %s (retrying)\n", > + usbd_errstr(err)); > + usb_pause_mtx(&sc->sc_mtx, hz / 100); > + } > + return (err); > +} > + > +static struct ieee80211vap * > +urtwn_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ], int unit, > + enum ieee80211_opmode opmode, int flags, > + const uint8_t bssid[IEEE80211_ADDR_LEN], > + const uint8_t mac[IEEE80211_ADDR_LEN]) > +{ > + struct urtwn_vap *uvp; > + struct ieee80211vap *vap; > + > + if (!TAILQ_EMPTY(&ic->ic_vaps)) /* only one at a time */ > + return (NULL); > + > + uvp = (struct urtwn_vap *) malloc(sizeof(struct urtwn_vap), > + M_80211_VAP, M_NOWAIT | M_ZERO); > + if (uvp == NULL) > + return (NULL); > + vap = &uvp->vap; > + /* enable s/w bmiss handling for sta mode */ > + ieee80211_vap_setup(ic, vap, name, unit, opmode, > + flags | IEEE80211_CLONE_NOBEACONS, bssid, mac); > + > + /* override state transition machine */ > + uvp->newstate = vap->iv_newstate; > + vap->iv_newstate = urtwn_newstate; > + > + /* complete setup */ > + ieee80211_vap_attach(vap, ieee80211_media_change, > + ieee80211_media_status); > + ic->ic_opmode = opmode; > + return (vap); > +} > + > +static void > +urtwn_vap_delete(struct ieee80211vap *vap) > +{ > + struct urtwn_vap *uvp = URTWN_VAP(vap); > + > + ieee80211_vap_detach(vap); > + free(uvp, M_80211_VAP); > +} > + > +static struct mbuf * > +urtwn_rx_frame(struct urtwn_softc *sc, uint8_t *buf, int pktlen, int *rssi_p) > +{ > + struct ifnet *ifp = sc->sc_ifp; > + struct ieee80211com *ic = ifp->if_l2com; > + struct ieee80211_frame *wh; > + struct mbuf *m; > + struct r92c_rx_stat *stat; > + uint32_t rxdw0, rxdw3; > + uint8_t rate; > + int8_t rssi = 0; > + int infosz; > + > + /* > > *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***