Deleted Added
full compact
if_run.c (203138) if_run.c (205042)
1/* $FreeBSD: head/sys/dev/usb/wlan/if_run.c 203138 2010-01-28 22:54:01Z thompsa $ */
1/* $FreeBSD: head/sys/dev/usb/wlan/if_run.c 205042 2010-03-11 22:05:12Z thompsa $ */
2
3/*-
2
3/*-
4 * Copyright (c) 2008,2009 Damien Bergamini <damien.bergamini@free.fr>
5 * ported to FreeBSD by Akinori Furukoshi <moonlightakkiy@yahoo.ca>
4 * Copyright (c) 2008,2010 Damien Bergamini <damien.bergamini@free.fr>
5 * ported to FreeBSD by Akinori Furukoshi <moonlightakkiy@yahoo.ca>
6 * USB Consulting, Hans Petter Selasky <hselasky@freebsd.org>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
7 *
8 * Permission to use, copy, modify, and distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 */
20
20/* release date Jan. 09, 2010 */
21
22#include <sys/cdefs.h>
21#include <sys/cdefs.h>
23__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_run.c 203138 2010-01-28 22:54:01Z thompsa $");
22__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_run.c 205042 2010-03-11 22:05:12Z thompsa $");
24
25/*-
26 * Ralink Technology RT2700U/RT2800U/RT3000U chipset driver.
27 * http://www.ralinktech.com/
28 */
29
30#include <sys/param.h>
31#include <sys/sockio.h>

--- 70 unchanged lines hidden (view full) ---

102 { USB_VP(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072) },
103 { USB_VP(USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1) },
104 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770) },
105 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1) },
106 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2) },
107 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3) },
108 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4) },
109 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5) },
23
24/*-
25 * Ralink Technology RT2700U/RT2800U/RT3000U chipset driver.
26 * http://www.ralinktech.com/
27 */
28
29#include <sys/param.h>
30#include <sys/sockio.h>

--- 70 unchanged lines hidden (view full) ---

101 { USB_VP(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_RT3072) },
102 { USB_VP(USB_VENDOR_ABOCOM2, USB_PRODUCT_ABOCOM2_RT2870_1) },
103 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2770) },
104 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_1) },
105 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_2) },
106 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_3) },
107 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_4) },
108 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT2870_5) },
109 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070) },
110 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1) },
111 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2) },
112 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3) },
113 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4) },
110 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_1) },
111 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_2) },
112 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_3) },
113 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_4) },
114 { USB_VP(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_RT3070_5) },
114 { USB_VP(USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070) },
115 { USB_VP(USB_VENDOR_AIRTIES, USB_PRODUCT_AIRTIES_RT3070) },
116 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2070) },
117 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2770) },
118 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT2870) },
119 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3070) },
120 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3071) },
121 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3072) },
122 { USB_VP(USB_VENDOR_ALLWIN, USB_PRODUCT_ALLWIN_RT3572) },
115 { USB_VP(USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1) },
116 { USB_VP(USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2) },
117 { USB_VP(USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR) },
118 { USB_VP(USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1) },
119 { USB_VP(USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870) },
120 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1) },
121 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2) },
122 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3) },
123 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4) },
124 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5) },
123 { USB_VP(USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_1) },
124 { USB_VP(USB_VENDOR_AMIGO, USB_PRODUCT_AMIGO_RT2870_2) },
125 { USB_VP(USB_VENDOR_AMIT, USB_PRODUCT_AMIT_CGWLUSB2GNR) },
126 { USB_VP(USB_VENDOR_AMIT, USB_PRODUCT_AMIT_RT2870_1) },
127 { USB_VP(USB_VENDOR_AMIT2, USB_PRODUCT_AMIT2_RT2870) },
128 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_1) },
129 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_2) },
130 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_3) },
131 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_4) },
132 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT2870_5) },
133 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_USBN13) },
134 { USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_RT3070_1) },
125 { USB_VP(USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11) },
126 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1) },
127 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2) },
128 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1) },
129 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2) },
130 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3) },
131 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3) },
132 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055) },
133 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1) },
134 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1) },
135 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2) },
135 { USB_VP(USB_VENDOR_ASUS2, USB_PRODUCT_ASUS2_USBN11) },
136 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_1) },
137 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT2870_2) },
138 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_1) },
139 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_2) },
140 { USB_VP(USB_VENDOR_AZUREWAVE, USB_PRODUCT_AZUREWAVE_RT3070_3) },
141 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8053V3) },
142 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D8055) },
143 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6D4050V1) },
144 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_1) },
145 { USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_RT2870_2) },
146 { USB_VP(USB_VENDOR_CISCOLINKSYS2, USB_PRODUCT_CISCOLINKSYS2_RT3070) },
147 { USB_VP(USB_VENDOR_CISCOLINKSYS3, USB_PRODUCT_CISCOLINKSYS2_RT3070) },
136 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1) },
137 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2) },
138 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3) },
139 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_4) },
140 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5) },
141 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6) },
142 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7) },
143 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8) },
148 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_1) },
149 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_2) },
150 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_3) },
151 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_4) },
152 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_5) },
153 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_6) },
154 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_7) },
155 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT2870_8) },
156 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_1) },
157 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_RT3070_2) },
144 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61) },
145 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM) },
146 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1) },
147 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2) },
148 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3) },
149 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070) },
150 { USB_VP(USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870) },
151 { USB_VP(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870) },
152 { USB_VP(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072) },
153 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130) },
154 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1) },
155 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2) },
156 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1) },
157 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2) },
158 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3) },
159 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4) },
158 { USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_VIGORN61) },
159 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_CGWLUSB300GNM) },
160 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_1) },
161 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_2) },
162 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT2870_3) },
163 { USB_VP(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_RT3070) },
164 { USB_VP(USB_VENDOR_CYBERTAN, USB_PRODUCT_CYBERTAN_RT2870) },
165 { USB_VP(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT2870) },
166 { USB_VP(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_RT3072) },
167 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_DWA130) },
168 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_1) },
169 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT2870_2) },
170 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_1) },
171 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_2) },
172 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_3) },
173 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_4) },
174 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3070_5) },
160 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072) },
175 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072) },
176 { USB_VP(USB_VENDOR_DLINK2, USB_PRODUCT_DLINK2_RT3072_1) },
161 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717) },
162 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718) },
163 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1) },
164 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1) },
165 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2) },
166 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3) },
167 { USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N) },
168 { USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L) },

--- 4 unchanged lines hidden (view full) ---

173 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2) },
174 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1) },
175 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2) },
176 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT3070) },
177 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1) },
178 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2) },
179 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3) },
180 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4) },
177 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7717) },
178 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_EW7718) },
179 { USB_VP(USB_VENDOR_EDIMAX, USB_PRODUCT_EDIMAX_RT2870_1) },
180 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_1) },
181 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_2) },
182 { USB_VP(USB_VENDOR_ENCORE, USB_PRODUCT_ENCORE_RT3070_3) },
183 { USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB31N) },
184 { USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWB32L) },

--- 4 unchanged lines hidden (view full) ---

189 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_HWUN2) },
190 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_1) },
191 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT2870_2) },
192 { USB_VP(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_RT3070) },
193 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_1) },
194 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_2) },
195 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_3) },
196 { USB_VP(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_RT3072_4) },
197 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_RT3070) },
181 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100) },
182 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3) },
183 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N) },
184 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2) },
185 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1) },
186 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2) },
187 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3) },
198 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB100) },
199 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB54GCV3) },
200 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600N) },
201 { USB_VP(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_WUSB600NV2) },
202 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_1) },
203 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_2) },
204 { USB_VP(USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_RT2870_3) },
205 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_1) },
206 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_RT2870_2) },
188 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N) },
189 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N) },
190 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN) },
207 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCAG300N) },
208 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCG300N) },
209 { USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_WLIUCGN) },
210 { USB_VP(USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT2770) },
211 { USB_VP(USB_VENDOR_MOTOROLA4, USB_PRODUCT_MOTOROLA4_RT3070) },
191 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1) },
192 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2) },
193 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3) },
194 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4) },
195 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5) },
196 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6) },
197 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7) },
212 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_1) },
213 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_2) },
214 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_3) },
215 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_4) },
216 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_5) },
217 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_6) },
218 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_7) },
219 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_8) },
220 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_9) },
221 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_10) },
222 { USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT3070_11) },
223 { USB_VP(USB_VENDOR_OVISLINK, USB_PRODUCT_OVISLINK_RT3072) },
198 { USB_VP(USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070) },
199 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870) },
200 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070) },
201 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2) },
224 { USB_VP(USB_VENDOR_PARA, USB_PRODUCT_PARA_RT3070) },
225 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT2870) },
226 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070) },
227 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_2) },
228 { USB_VP(USB_VENDOR_PEGATRON, USB_PRODUCT_PEGATRON_RT3070_3) },
202 { USB_VP(USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870) },
203 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS) },
204 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON) },
205 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870) },
206 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070) },
207 { USB_VP(USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870) },
208 { USB_VP(USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070) },
209 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070) },
210 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770) },
211 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870) },
212 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070) },
213 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071) },
214 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072) },
229 { USB_VP(USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_RT2870) },
230 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUS300MINIS) },
231 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_GWUSMICRON) },
232 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT2870) },
233 { USB_VP(USB_VENDOR_PLANEX2, USB_PRODUCT_PLANEX2_RT3070) },
234 { USB_VP(USB_VENDOR_QCOM, USB_PRODUCT_QCOM_RT2870) },
235 { USB_VP(USB_VENDOR_QUANTA, USB_PRODUCT_QUANTA_RT3070) },
236 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2070) },
237 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2770) },
238 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2870) },
239 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3070) },
240 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3071) },
241 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3072) },
242 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3370) },
215 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572) },
243 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT3572) },
244 { USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT8070) },
216 { USB_VP(USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1) },
217 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1) },
218 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2) },
219 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3) },
220 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4) },
221 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070) },
222 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071) },
223 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1) },

--- 5 unchanged lines hidden (view full) ---

229 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1) },
230 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2) },
231 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3) },
232 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_4) },
233 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070) },
234 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_2) },
235 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3) },
236 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_4) },
245 { USB_VP(USB_VENDOR_SAMSUNG2, USB_PRODUCT_SAMSUNG2_RT2870_1) },
246 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_1) },
247 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_2) },
248 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_3) },
249 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT2870_4) },
250 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3070) },
251 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3071) },
252 { USB_VP(USB_VENDOR_SENAO, USB_PRODUCT_SENAO_RT3072_1) },

--- 5 unchanged lines hidden (view full) ---

258 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_1) },
259 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_2) },
260 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_3) },
261 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT2870_4) },
262 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070) },
263 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_2) },
264 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_3) },
265 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3070_4) },
266 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3071) },
237 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_1) },
238 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_2) },
239 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3) },
240 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4) },
241 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5) },
242 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6) },
243 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608) },
244 { USB_VP(USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1) },
245 { USB_VP(USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070) },
267 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_1) },
268 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_2) },
269 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_3) },
270 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_4) },
271 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_5) },
272 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_RT3072_6) },
273 { USB_VP(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_WL608) },
274 { USB_VP(USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT2870_1) },
275 { USB_VP(USB_VENDOR_SPARKLAN, USB_PRODUCT_SPARKLAN_RT3070) },
276 { USB_VP(USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW153) },
246 { USB_VP(USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303) },
247 { USB_VP(USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313) },
277 { USB_VP(USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW303) },
278 { USB_VP(USB_VENDOR_SWEEX2, USB_PRODUCT_SWEEX2_LW313) },
279 { USB_VP(USB_VENDOR_TOSHIBA, USB_PRODUCT_TOSHIBA_RT3070) },
248 { USB_VP(USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1) },
249 { USB_VP(USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1) },
250 { USB_VP(USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2) },
251 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1) },
252 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2) },
253 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070) },
254 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1) },
255 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2) },
256 { USB_VP(USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1) },
280 { USB_VP(USB_VENDOR_UMEDIA, USB_PRODUCT_UMEDIA_RT2870_1) },
281 { USB_VP(USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_1) },
282 { USB_VP(USB_VENDOR_ZCOM, USB_PRODUCT_ZCOM_RT2870_2) },
283 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_1) },
284 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2870_2) },
285 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3070) },
286 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_1) },
287 { USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT3072_2) },
288 { USB_VP(USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_1) },
289 { USB_VP(USB_VENDOR_ZYXEL, USB_PRODUCT_ZYXEL_RT2870_2) },
257};
258
259MODULE_DEPEND(run, wlan, 1, 1, 1);
260MODULE_DEPEND(run, wlan_amrr, 1, 1, 1);
261MODULE_DEPEND(run, usb, 1, 1, 1);
262MODULE_DEPEND(run, firmware, 1, 1, 1);
263
264static device_probe_t run_match;

--- 70 unchanged lines hidden (view full) ---

335 struct ieee80211_node *, int, int);
336static int run_tx_param(struct run_softc *, struct mbuf *,
337 struct ieee80211_node *,
338 const struct ieee80211_bpf_params *);
339static int run_raw_xmit(struct ieee80211_node *, struct mbuf *,
340 const struct ieee80211_bpf_params *);
341static void run_start(struct ifnet *);
342static int run_ioctl(struct ifnet *, u_long, caddr_t);
290};
291
292MODULE_DEPEND(run, wlan, 1, 1, 1);
293MODULE_DEPEND(run, wlan_amrr, 1, 1, 1);
294MODULE_DEPEND(run, usb, 1, 1, 1);
295MODULE_DEPEND(run, firmware, 1, 1, 1);
296
297static device_probe_t run_match;

--- 70 unchanged lines hidden (view full) ---

368 struct ieee80211_node *, int, int);
369static int run_tx_param(struct run_softc *, struct mbuf *,
370 struct ieee80211_node *,
371 const struct ieee80211_bpf_params *);
372static int run_raw_xmit(struct ieee80211_node *, struct mbuf *,
373 const struct ieee80211_bpf_params *);
374static void run_start(struct ifnet *);
375static int run_ioctl(struct ifnet *, u_long, caddr_t);
376static void run_set_agc(struct run_softc *, uint8_t);
343static void run_select_chan_group(struct run_softc *, int);
344static void run_set_rx_antenna(struct run_softc *, int);
345static void run_rt2870_set_chan(struct run_softc *, u_int);
346static void run_rt3070_set_chan(struct run_softc *, u_int);
377static void run_select_chan_group(struct run_softc *, int);
378static void run_set_rx_antenna(struct run_softc *, int);
379static void run_rt2870_set_chan(struct run_softc *, u_int);
380static void run_rt3070_set_chan(struct run_softc *, u_int);
381static void run_rt3572_set_chan(struct run_softc *, u_int);
347static int run_set_chan(struct run_softc *, struct ieee80211_channel *);
348static void run_set_channel(struct ieee80211com *);
349static void run_scan_start(struct ieee80211com *);
350static void run_scan_end(struct ieee80211com *);
351static uint8_t run_rate2mcs(uint8_t);
352static void run_update_beacon(struct ieee80211vap *, int);
353static void run_update_beacon_locked(struct ieee80211vap *, int);
354static void run_updateprot(struct ieee80211com *);

--- 9 unchanged lines hidden (view full) ---

364static void run_updateslot(struct ifnet *);
365static int8_t run_rssi2dbm(struct run_softc *, uint8_t, uint8_t);
366static void run_update_promisc_locked(struct ifnet *);
367static void run_update_promisc(struct ifnet *);
368static int run_bbp_init(struct run_softc *);
369static int run_rt3070_rf_init(struct run_softc *);
370static int run_rt3070_filter_calib(struct run_softc *, uint8_t, uint8_t,
371 uint8_t *);
382static int run_set_chan(struct run_softc *, struct ieee80211_channel *);
383static void run_set_channel(struct ieee80211com *);
384static void run_scan_start(struct ieee80211com *);
385static void run_scan_end(struct ieee80211com *);
386static uint8_t run_rate2mcs(uint8_t);
387static void run_update_beacon(struct ieee80211vap *, int);
388static void run_update_beacon_locked(struct ieee80211vap *, int);
389static void run_updateprot(struct ieee80211com *);

--- 9 unchanged lines hidden (view full) ---

399static void run_updateslot(struct ifnet *);
400static int8_t run_rssi2dbm(struct run_softc *, uint8_t, uint8_t);
401static void run_update_promisc_locked(struct ifnet *);
402static void run_update_promisc(struct ifnet *);
403static int run_bbp_init(struct run_softc *);
404static int run_rt3070_rf_init(struct run_softc *);
405static int run_rt3070_filter_calib(struct run_softc *, uint8_t, uint8_t,
406 uint8_t *);
407static void run_rt3070_rf_setup(struct run_softc *);
372static int run_txrx_enable(struct run_softc *);
373static void run_init(void *);
374static void run_init_locked(struct run_softc *);
375static void run_stop(void *);
376static void run_delay(struct run_softc *, unsigned int);
377
378static const struct {
379 uint32_t reg;

--- 13 unchanged lines hidden (view full) ---

393 uint8_t chan;
394 uint32_t r1, r2, r3, r4;
395} rt2860_rf2850[] = {
396 RT2860_RF2850
397};
398
399struct {
400 uint8_t n, r, k;
408static int run_txrx_enable(struct run_softc *);
409static void run_init(void *);
410static void run_init_locked(struct run_softc *);
411static void run_stop(void *);
412static void run_delay(struct run_softc *, unsigned int);
413
414static const struct {
415 uint32_t reg;

--- 13 unchanged lines hidden (view full) ---

429 uint8_t chan;
430 uint32_t r1, r2, r3, r4;
431} rt2860_rf2850[] = {
432 RT2860_RF2850
433};
434
435struct {
436 uint8_t n, r, k;
401} run_rf3020_freqs[] = {
402 RT3070_RF3020
437} rt3070_freqs[] = {
438 RT3070_RF3052
403};
404
405static const struct {
406 uint8_t reg;
407 uint8_t val;
408} rt3070_def_rf[] = {
409 RT3070_DEF_RF
439};
440
441static const struct {
442 uint8_t reg;
443 uint8_t val;
444} rt3070_def_rf[] = {
445 RT3070_DEF_RF
446},rt3572_def_rf[] = {
447 RT3572_DEF_RF
410};
411
412static const struct usb_config run_config[RUN_N_XFER] = {
413 [RUN_BULK_TX_BE] = {
414 .type = UE_BULK,
415 .endpoint = UE_ADDR_ANY,
416 .ep_index = 0,
417 .direction = UE_DIR_OUT,

--- 79 unchanged lines hidden (view full) ---

497
498static int
499run_attach(device_t self)
500{
501 struct run_softc *sc = device_get_softc(self);
502 struct usb_attach_arg *uaa = device_get_ivars(self);
503 struct ieee80211com *ic;
504 struct ifnet *ifp;
448};
449
450static const struct usb_config run_config[RUN_N_XFER] = {
451 [RUN_BULK_TX_BE] = {
452 .type = UE_BULK,
453 .endpoint = UE_ADDR_ANY,
454 .ep_index = 0,
455 .direction = UE_DIR_OUT,

--- 79 unchanged lines hidden (view full) ---

535
536static int
537run_attach(device_t self)
538{
539 struct run_softc *sc = device_get_softc(self);
540 struct usb_attach_arg *uaa = device_get_ivars(self);
541 struct ieee80211com *ic;
542 struct ifnet *ifp;
543 uint32_t ver;
505 int i, ntries, error;
506 uint8_t iface_index, bands;
507
508 device_set_usb_desc(self);
509 sc->sc_udev = uaa->device;
510 sc->sc_dev = self;
511
512 mtx_init(&sc->sc_mtx, device_get_nameunit(sc->sc_dev),
513 MTX_NETWORK_LOCK, MTX_DEF);
514
515 iface_index = RT2860_IFACE_INDEX;
544 int i, ntries, error;
545 uint8_t iface_index, bands;
546
547 device_set_usb_desc(self);
548 sc->sc_udev = uaa->device;
549 sc->sc_dev = self;
550
551 mtx_init(&sc->sc_mtx, device_get_nameunit(sc->sc_dev),
552 MTX_NETWORK_LOCK, MTX_DEF);
553
554 iface_index = RT2860_IFACE_INDEX;
516 /* Rx transfer has own lock */
517 error = usbd_transfer_setup(uaa->device, &iface_index,
518 sc->sc_xfer, run_config, RUN_N_XFER, sc, &sc->sc_mtx);
519 if (error) {
555 error = usbd_transfer_setup(uaa->device, &iface_index,
556 sc->sc_xfer, run_config, RUN_N_XFER, sc, &sc->sc_mtx);
557 if (error) {
520 device_printf(self, "could not allocate USB Tx transfers, "
558 device_printf(self, "could not allocate USB transfers, "
521 "err=%s\n", usbd_errstr(error));
522 goto detach;
523 }
524
525 RUN_LOCK(sc);
526
527 /* wait for the chip to settle */
528 for (ntries = 0; ntries < 100; ntries++) {
559 "err=%s\n", usbd_errstr(error));
560 goto detach;
561 }
562
563 RUN_LOCK(sc);
564
565 /* wait for the chip to settle */
566 for (ntries = 0; ntries < 100; ntries++) {
529 if (run_read(sc, RT2860_ASIC_VER_ID, &sc->mac_rev) != 0){
567 if (run_read(sc, RT2860_ASIC_VER_ID, &ver) != 0){
530 RUN_UNLOCK(sc);
531 goto detach;
532 }
568 RUN_UNLOCK(sc);
569 goto detach;
570 }
533 if (sc->mac_rev != 0 && sc->mac_rev != 0xffffffff)
571 if (ver != 0 && ver != 0xffffffff)
534 break;
535 run_delay(sc, 10);
536 }
537 if (ntries == 100) {
538 device_printf(sc->sc_dev,
539 "timeout waiting for NIC to initialize\n");
540 RUN_UNLOCK(sc);
541 goto detach;
542 }
572 break;
573 run_delay(sc, 10);
574 }
575 if (ntries == 100) {
576 device_printf(sc->sc_dev,
577 "timeout waiting for NIC to initialize\n");
578 RUN_UNLOCK(sc);
579 goto detach;
580 }
581 sc->mac_ver = ver >> 16;
582 sc->mac_rev = ver & 0xffff;
543
544 /* retrieve RF rev. no and various other things from EEPROM */
545 run_read_eeprom(sc);
546
547 device_printf(sc->sc_dev,
548 "MAC/BBP RT%04X (rev 0x%04X), RF %s (MIMO %dT%dR), address %s\n",
583
584 /* retrieve RF rev. no and various other things from EEPROM */
585 run_read_eeprom(sc);
586
587 device_printf(sc->sc_dev,
588 "MAC/BBP RT%04X (rev 0x%04X), RF %s (MIMO %dT%dR), address %s\n",
549 sc->mac_rev >> 16, sc->mac_rev & 0xffff, run_get_rf(sc->rf_rev),
589 sc->mac_ver, sc->mac_rev, run_get_rf(sc->rf_rev),
550 sc->ntxchains, sc->nrxchains, ether_sprintf(sc->sc_bssid));
551
552 if ((error = run_load_microcode(sc)) != 0) {
553 device_printf(sc->sc_dev, "could not load 8051 microcode\n");
554 RUN_UNLOCK(sc);
555 goto detach;
556 }
557

--- 46 unchanged lines hidden (view full) ---

604 setbit(&bands, IEEE80211_MODE_11B);
605 setbit(&bands, IEEE80211_MODE_11G);
606 ieee80211_init_channels(ic, NULL, &bands);
607
608 /*
609 * Do this by own because h/w supports
610 * more channels than ieee80211_init_channels()
611 */
590 sc->ntxchains, sc->nrxchains, ether_sprintf(sc->sc_bssid));
591
592 if ((error = run_load_microcode(sc)) != 0) {
593 device_printf(sc->sc_dev, "could not load 8051 microcode\n");
594 RUN_UNLOCK(sc);
595 goto detach;
596 }
597

--- 46 unchanged lines hidden (view full) ---

644 setbit(&bands, IEEE80211_MODE_11B);
645 setbit(&bands, IEEE80211_MODE_11G);
646 ieee80211_init_channels(ic, NULL, &bands);
647
648 /*
649 * Do this by own because h/w supports
650 * more channels than ieee80211_init_channels()
651 */
612 if (sc->rf_rev == RT2860_RF_2750 || sc->rf_rev == RT2860_RF_2850) {
652 if (sc->rf_rev == RT2860_RF_2750 ||
653 sc->rf_rev == RT2860_RF_2850 ||
654 sc->rf_rev == RT3070_RF_3052) {
613 /* set supported .11a rates */
614 for (i = 14; i < nitems(rt2860_rf2850); i++) {
615 uint8_t chan = rt2860_rf2850[i].chan;
616 ic->ic_channels[ic->ic_nchans].ic_freq =
617 ieee80211_ieee2mhz(chan, IEEE80211_CHAN_A);
618 ic->ic_channels[ic->ic_nchans].ic_ieee = chan;
619 ic->ic_channels[ic->ic_nchans].ic_flags = IEEE80211_CHAN_A;
620 ic->ic_channels[ic->ic_nchans].ic_extieee = 0;

--- 117 unchanged lines hidden (view full) ---

738 if(vap == NULL)
739 return;
740
741 ic = vap->iv_ic;
742 ifp = ic->ic_ifp;
743
744 sc = ifp->if_softc;
745
655 /* set supported .11a rates */
656 for (i = 14; i < nitems(rt2860_rf2850); i++) {
657 uint8_t chan = rt2860_rf2850[i].chan;
658 ic->ic_channels[ic->ic_nchans].ic_freq =
659 ieee80211_ieee2mhz(chan, IEEE80211_CHAN_A);
660 ic->ic_channels[ic->ic_nchans].ic_ieee = chan;
661 ic->ic_channels[ic->ic_nchans].ic_flags = IEEE80211_CHAN_A;
662 ic->ic_channels[ic->ic_nchans].ic_extieee = 0;

--- 117 unchanged lines hidden (view full) ---

780 if(vap == NULL)
781 return;
782
783 ic = vap->iv_ic;
784 ifp = ic->ic_ifp;
785
786 sc = ifp->if_softc;
787
746 if (ifp && ifp->if_flags & IFF_UP){
747 RUN_LOCK(sc);
748 run_stop(sc);
749 RUN_UNLOCK(sc);
750 }
788 RUN_LOCK(sc);
789 sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
790 RUN_UNLOCK(sc);
751
791
792 /* drain them all */
793 usb_callout_drain(&sc->sc_rvp->amrr_ch);
794 ieee80211_draintask(ic, &sc->sc_rvp->amrr_task);
795 ieee80211_draintask(ic, &sc->wme_task);
796 ieee80211_draintask(ic, &sc->usb_timeout_task);
797
752 ieee80211_amrr_cleanup(&rvp->amrr);
753 ieee80211_vap_detach(vap);
754 free(rvp, M_80211_VAP);
755 sc->sc_rvp = NULL;
756}
757
758static void
759run_setup_tx_list(struct run_softc *sc, struct run_endpoint_queue *pq)

--- 43 unchanged lines hidden (view full) ---

803 usb_device_request_t req;
804 const struct firmware *fw;
805 const u_char *base;
806 uint32_t tmp;
807 int ntries, error;
808 const uint64_t *temp;
809 uint64_t bytes;
810
798 ieee80211_amrr_cleanup(&rvp->amrr);
799 ieee80211_vap_detach(vap);
800 free(rvp, M_80211_VAP);
801 sc->sc_rvp = NULL;
802}
803
804static void
805run_setup_tx_list(struct run_softc *sc, struct run_endpoint_queue *pq)

--- 43 unchanged lines hidden (view full) ---

849 usb_device_request_t req;
850 const struct firmware *fw;
851 const u_char *base;
852 uint32_t tmp;
853 int ntries, error;
854 const uint64_t *temp;
855 uint64_t bytes;
856
857 RUN_UNLOCK(sc);
811 fw = firmware_get("runfw");
858 fw = firmware_get("runfw");
859 RUN_LOCK(sc);
812 if(fw == NULL){
813 device_printf(sc->sc_dev,
814 "failed loadfirmware of file %s\n", "runfw");
815 return ENOENT;
816 }
817
818 if (fw->datasize != 8192) {
819 device_printf(sc->sc_dev,

--- 4 unchanged lines hidden (view full) ---

824
825 /*
826 * RT3071/RT3072 use a different firmware
827 * run-rt2870 (8KB) contains both,
828 * first half (4KB) is for rt2870,
829 * last half is for rt3071.
830 */
831 base = fw->data;
860 if(fw == NULL){
861 device_printf(sc->sc_dev,
862 "failed loadfirmware of file %s\n", "runfw");
863 return ENOENT;
864 }
865
866 if (fw->datasize != 8192) {
867 device_printf(sc->sc_dev,

--- 4 unchanged lines hidden (view full) ---

872
873 /*
874 * RT3071/RT3072 use a different firmware
875 * run-rt2870 (8KB) contains both,
876 * first half (4KB) is for rt2870,
877 * last half is for rt3071.
878 */
879 base = fw->data;
832 if ((sc->mac_rev >> 16) != 0x2860 &&
833 (sc->mac_rev >> 16) != 0x2872 &&
834 (sc->mac_rev >> 16) != 0x3070 &&
835 (sc->mac_rev >> 16) != 0x3572){
880 if ((sc->mac_ver) != 0x2860 &&
881 (sc->mac_ver) != 0x2872 &&
882 (sc->mac_ver) != 0x3070){
836 base += 4096;
883 base += 4096;
837 device_printf(sc->sc_dev, "loading RT3071 firmware\n");
838 } else
839 device_printf(sc->sc_dev, "loading RT2870 firmware\n");
884 }
840
841 /* cheap sanity check */
842 temp = fw->data;
843 bytes = *temp;
844 if(bytes != be64toh(0xffffff0210280210)) {
845 device_printf(sc->sc_dev, "firmware checksum failed\n");
846 error = EINVAL;
847 goto fail;

--- 13 unchanged lines hidden (view full) ---

861 if ((error = usbd_do_request(sc->sc_udev, &sc->sc_mtx, &req, NULL)) != 0) {
862 device_printf(sc->sc_dev, "firmware reset failed\n");
863 goto fail;
864 }
865
866 run_delay(sc, 10);
867
868 run_write(sc, RT2860_H2M_MAILBOX, 0);
885
886 /* cheap sanity check */
887 temp = fw->data;
888 bytes = *temp;
889 if(bytes != be64toh(0xffffff0210280210)) {
890 device_printf(sc->sc_dev, "firmware checksum failed\n");
891 error = EINVAL;
892 goto fail;

--- 13 unchanged lines hidden (view full) ---

906 if ((error = usbd_do_request(sc->sc_udev, &sc->sc_mtx, &req, NULL)) != 0) {
907 device_printf(sc->sc_dev, "firmware reset failed\n");
908 goto fail;
909 }
910
911 run_delay(sc, 10);
912
913 run_write(sc, RT2860_H2M_MAILBOX, 0);
869 if ((error = run_mcu_cmd(sc, RT2860_MCU_CMD_BOOT, 0)) != 0)
914 if ((error = run_mcu_cmd(sc, RT2860_MCU_CMD_RFRESET, 0)) != 0)
870 goto fail;
871
872 /* wait until microcontroller is ready */
873 for (ntries = 0; ntries < 1000; ntries++) {
874 if ((error = run_read(sc, RT2860_SYS_CTRL, &tmp)) != 0) {
875 goto fail;
876 }
877 if (tmp & RT2860_MCU_READY)
878 break;
879 run_delay(sc, 10);
880 }
881 if (ntries == 1000) {
882 device_printf(sc->sc_dev,
883 "timeout waiting for MCU to initialize\n");
884 error = ETIMEDOUT;
885 goto fail;
886 }
915 goto fail;
916
917 /* wait until microcontroller is ready */
918 for (ntries = 0; ntries < 1000; ntries++) {
919 if ((error = run_read(sc, RT2860_SYS_CTRL, &tmp)) != 0) {
920 goto fail;
921 }
922 if (tmp & RT2860_MCU_READY)
923 break;
924 run_delay(sc, 10);
925 }
926 if (ntries == 1000) {
927 device_printf(sc->sc_dev,
928 "timeout waiting for MCU to initialize\n");
929 error = ETIMEDOUT;
930 goto fail;
931 }
887 DPRINTF("microcode successfully loaded after %d tries\n", ntries);
932 device_printf(sc->sc_dev, "firmware %s loaded\n",
933 (base == fw->data) ? "RT2870" : "RT3071");
888
889fail:
890 firmware_put(fw, FIRMWARE_UNLOAD);
891 return (error);
892}
893
894int
895run_reset(struct run_softc *sc)

--- 382 unchanged lines hidden (view full) ---

1278{
1279 int8_t delta_2ghz, delta_5ghz;
1280 uint32_t tmp;
1281 uint16_t val;
1282 int ridx, ant, i;
1283
1284 /* check whether the ROM is eFUSE ROM or EEPROM */
1285 sc->sc_srom_read = run_eeprom_read_2;
934
935fail:
936 firmware_put(fw, FIRMWARE_UNLOAD);
937 return (error);
938}
939
940int
941run_reset(struct run_softc *sc)

--- 382 unchanged lines hidden (view full) ---

1324{
1325 int8_t delta_2ghz, delta_5ghz;
1326 uint32_t tmp;
1327 uint16_t val;
1328 int ridx, ant, i;
1329
1330 /* check whether the ROM is eFUSE ROM or EEPROM */
1331 sc->sc_srom_read = run_eeprom_read_2;
1286 if ((sc->mac_rev & 0xfff00000) >= 0x30700000) {
1332 if (sc->mac_ver >= 0x3070) {
1287 run_read(sc, RT3070_EFUSE_CTRL, &tmp);
1288 DPRINTF("EFUSE_CTRL=0x%08x\n", tmp);
1289 if (tmp & RT3070_SEL_EFUSE)
1290 sc->sc_srom_read = run_efuse_read_2;
1291 }
1292
1293 /* read ROM version */
1294 run_srom_read(sc, RT2860_EEPROM_VERSION, &val);

--- 5 unchanged lines hidden (view full) ---

1300 sc->sc_bssid[1] = val >> 8;
1301 run_srom_read(sc, RT2860_EEPROM_MAC23, &val);
1302 sc->sc_bssid[2] = val & 0xff;
1303 sc->sc_bssid[3] = val >> 8;
1304 run_srom_read(sc, RT2860_EEPROM_MAC45, &val);
1305 sc->sc_bssid[4] = val & 0xff;
1306 sc->sc_bssid[5] = val >> 8;
1307
1333 run_read(sc, RT3070_EFUSE_CTRL, &tmp);
1334 DPRINTF("EFUSE_CTRL=0x%08x\n", tmp);
1335 if (tmp & RT3070_SEL_EFUSE)
1336 sc->sc_srom_read = run_efuse_read_2;
1337 }
1338
1339 /* read ROM version */
1340 run_srom_read(sc, RT2860_EEPROM_VERSION, &val);

--- 5 unchanged lines hidden (view full) ---

1346 sc->sc_bssid[1] = val >> 8;
1347 run_srom_read(sc, RT2860_EEPROM_MAC23, &val);
1348 sc->sc_bssid[2] = val & 0xff;
1349 sc->sc_bssid[3] = val >> 8;
1350 run_srom_read(sc, RT2860_EEPROM_MAC45, &val);
1351 sc->sc_bssid[4] = val & 0xff;
1352 sc->sc_bssid[5] = val >> 8;
1353
1308 /* read default BBP settings */
1309 for (i = 0; i < 8; i++) {
1354 /* read vender BBP settings */
1355 for (i = 0; i < 10; i++) {
1310 run_srom_read(sc, RT2860_EEPROM_BBP_BASE + i, &val);
1311 sc->bbp[i].val = val & 0xff;
1312 sc->bbp[i].reg = val >> 8;
1313 DPRINTF("BBP%d=0x%02x\n", sc->bbp[i].reg, sc->bbp[i].val);
1314 }
1356 run_srom_read(sc, RT2860_EEPROM_BBP_BASE + i, &val);
1357 sc->bbp[i].val = val & 0xff;
1358 sc->bbp[i].reg = val >> 8;
1359 DPRINTF("BBP%d=0x%02x\n", sc->bbp[i].reg, sc->bbp[i].val);
1360 }
1361 if (sc->mac_ver >= 0x3071) {
1362 /* read vendor RF settings */
1363 for (i = 0; i < 10; i++) {
1364 run_srom_read(sc, RT3071_EEPROM_RF_BASE + i, &val);
1365 sc->rf[i].val = val & 0xff;
1366 sc->rf[i].reg = val >> 8;
1367 DPRINTF("RF%d=0x%02x\n", sc->rf[i].reg,
1368 sc->rf[i].val);
1369 }
1370 }
1315
1316 /* read RF frequency offset from EEPROM */
1317 run_srom_read(sc, RT2860_EEPROM_FREQ_LEDS, &val);
1318 sc->freq = ((val & 0xff) != 0xff) ? val & 0xff : 0;
1319 DPRINTF("EEPROM freq offset %d\n", sc->freq & 0xff);
1320
1371
1372 /* read RF frequency offset from EEPROM */
1373 run_srom_read(sc, RT2860_EEPROM_FREQ_LEDS, &val);
1374 sc->freq = ((val & 0xff) != 0xff) ? val & 0xff : 0;
1375 DPRINTF("EEPROM freq offset %d\n", sc->freq & 0xff);
1376
1321 if ((sc->leds = val >> 8) != 0xff) {
1377 if (val >> 8 != 0xff) {
1322 /* read LEDs operating mode */
1378 /* read LEDs operating mode */
1379 sc->leds = val >> 8;
1323 run_srom_read(sc, RT2860_EEPROM_LED1, &sc->led[0]);
1324 run_srom_read(sc, RT2860_EEPROM_LED2, &sc->led[1]);
1325 run_srom_read(sc, RT2860_EEPROM_LED3, &sc->led[2]);
1326 } else {
1327 /* broken EEPROM, use default settings */
1328 sc->leds = 0x01;
1329 sc->led[0] = 0x5555;
1330 sc->led[1] = 0x2221;
1331 sc->led[2] = 0x5627; /* differs from RT2860 */
1332 }
1333 DPRINTF("EEPROM LED mode=0x%02x, LEDs=0x%04x/0x%04x/0x%04x\n",
1334 sc->leds, sc->led[0], sc->led[1], sc->led[2]);
1335
1336 /* read RF information */
1337 run_srom_read(sc, RT2860_EEPROM_ANTENNA, &val);
1338 if (val == 0xffff) {
1339 DPRINTF("invalid EEPROM antenna info, using default\n");
1380 run_srom_read(sc, RT2860_EEPROM_LED1, &sc->led[0]);
1381 run_srom_read(sc, RT2860_EEPROM_LED2, &sc->led[1]);
1382 run_srom_read(sc, RT2860_EEPROM_LED3, &sc->led[2]);
1383 } else {
1384 /* broken EEPROM, use default settings */
1385 sc->leds = 0x01;
1386 sc->led[0] = 0x5555;
1387 sc->led[1] = 0x2221;
1388 sc->led[2] = 0x5627; /* differs from RT2860 */
1389 }
1390 DPRINTF("EEPROM LED mode=0x%02x, LEDs=0x%04x/0x%04x/0x%04x\n",
1391 sc->leds, sc->led[0], sc->led[1], sc->led[2]);
1392
1393 /* read RF information */
1394 run_srom_read(sc, RT2860_EEPROM_ANTENNA, &val);
1395 if (val == 0xffff) {
1396 DPRINTF("invalid EEPROM antenna info, using default\n");
1340 if ((sc->mac_rev >> 16) >= 0x3070) {
1397 if (sc->mac_ver == 0x3572) {
1398 /* default to RF3052 2T2R */
1399 sc->rf_rev = RT3070_RF_3052;
1400 sc->ntxchains = 2;
1401 sc->nrxchains = 2;
1402 } else if (sc->mac_ver >= 0x3070) {
1341 /* default to RF3020 1T1R */
1342 sc->rf_rev = RT3070_RF_3020;
1343 sc->ntxchains = 1;
1344 sc->nrxchains = 1;
1345 } else {
1346 /* default to RF2820 1T2R */
1347 sc->rf_rev = RT2860_RF_2820;
1348 sc->ntxchains = 1;
1349 sc->nrxchains = 2;
1350 }
1351 } else {
1352 sc->rf_rev = (val >> 8) & 0xf;
1353 sc->ntxchains = (val >> 4) & 0xf;
1354 sc->nrxchains = val & 0xf;
1355 }
1356 DPRINTF("EEPROM RF rev=0x%02x chains=%dT%dR\n",
1357 sc->rf_rev, sc->ntxchains, sc->nrxchains);
1358
1403 /* default to RF3020 1T1R */
1404 sc->rf_rev = RT3070_RF_3020;
1405 sc->ntxchains = 1;
1406 sc->nrxchains = 1;
1407 } else {
1408 /* default to RF2820 1T2R */
1409 sc->rf_rev = RT2860_RF_2820;
1410 sc->ntxchains = 1;
1411 sc->nrxchains = 2;
1412 }
1413 } else {
1414 sc->rf_rev = (val >> 8) & 0xf;
1415 sc->ntxchains = (val >> 4) & 0xf;
1416 sc->nrxchains = val & 0xf;
1417 }
1418 DPRINTF("EEPROM RF rev=0x%02x chains=%dT%dR\n",
1419 sc->rf_rev, sc->ntxchains, sc->nrxchains);
1420
1359 /* check if RF supports automatic Tx access gain control */
1360 run_srom_read(sc, RT2860_EEPROM_CONFIG, &val);
1361 DPRINTF("EEPROM CFG 0x%04x\n", val);
1421 run_srom_read(sc, RT2860_EEPROM_CONFIG, &val);
1422 DPRINTF("EEPROM CFG 0x%04x\n", val);
1423 /* check if driver should patch the DAC issue */
1424 if ((val >> 8) != 0xff)
1425 sc->patch_dac = (val >> 15) & 1;
1362 if ((val & 0xff) != 0xff) {
1363 sc->ext_5ghz_lna = (val >> 3) & 1;
1364 sc->ext_2ghz_lna = (val >> 2) & 1;
1426 if ((val & 0xff) != 0xff) {
1427 sc->ext_5ghz_lna = (val >> 3) & 1;
1428 sc->ext_2ghz_lna = (val >> 2) & 1;
1429 /* check if RF supports automatic Tx access gain control */
1365 sc->calib_2ghz = sc->calib_5ghz = (val >> 1) & 1;
1430 sc->calib_2ghz = sc->calib_5ghz = (val >> 1) & 1;
1431 /* check if we have a hardware radio switch */
1432 sc->rfswitch = val & 1;
1366 }
1367
1368 /* read power settings for 2GHz channels */
1369 for (i = 0; i < 14; i += 2) {
1370 run_srom_read(sc, RT2860_EEPROM_PWR2GHZ_BASE1 + i / 2, &val);
1371 sc->txpow1[i + 0] = (int8_t)(val & 0xff);
1372 sc->txpow1[i + 1] = (int8_t)(val >> 8);
1373

--- 6 unchanged lines hidden (view full) ---

1380 if (sc->txpow1[i] < 0 || sc->txpow1[i] > 31)
1381 sc->txpow1[i] = 5;
1382 if (sc->txpow2[i] < 0 || sc->txpow2[i] > 31)
1383 sc->txpow2[i] = 5;
1384 DPRINTF("chan %d: power1=%d, power2=%d\n",
1385 rt2860_rf2850[i].chan, sc->txpow1[i], sc->txpow2[i]);
1386 }
1387 /* read power settings for 5GHz channels */
1433 }
1434
1435 /* read power settings for 2GHz channels */
1436 for (i = 0; i < 14; i += 2) {
1437 run_srom_read(sc, RT2860_EEPROM_PWR2GHZ_BASE1 + i / 2, &val);
1438 sc->txpow1[i + 0] = (int8_t)(val & 0xff);
1439 sc->txpow1[i + 1] = (int8_t)(val >> 8);
1440

--- 6 unchanged lines hidden (view full) ---

1447 if (sc->txpow1[i] < 0 || sc->txpow1[i] > 31)
1448 sc->txpow1[i] = 5;
1449 if (sc->txpow2[i] < 0 || sc->txpow2[i] > 31)
1450 sc->txpow2[i] = 5;
1451 DPRINTF("chan %d: power1=%d, power2=%d\n",
1452 rt2860_rf2850[i].chan, sc->txpow1[i], sc->txpow2[i]);
1453 }
1454 /* read power settings for 5GHz channels */
1388 for (i = 0; i < 36; i += 2) {
1455 for (i = 0; i < 40; i += 2) {
1389 run_srom_read(sc, RT2860_EEPROM_PWR5GHZ_BASE1 + i / 2, &val);
1390 sc->txpow1[i + 14] = (int8_t)(val & 0xff);
1391 sc->txpow1[i + 15] = (int8_t)(val >> 8);
1392
1393 run_srom_read(sc, RT2860_EEPROM_PWR5GHZ_BASE2 + i / 2, &val);
1394 sc->txpow2[i + 14] = (int8_t)(val & 0xff);
1395 sc->txpow2[i + 15] = (int8_t)(val >> 8);
1396 }
1397 /* fix broken Tx power entries */
1456 run_srom_read(sc, RT2860_EEPROM_PWR5GHZ_BASE1 + i / 2, &val);
1457 sc->txpow1[i + 14] = (int8_t)(val & 0xff);
1458 sc->txpow1[i + 15] = (int8_t)(val >> 8);
1459
1460 run_srom_read(sc, RT2860_EEPROM_PWR5GHZ_BASE2 + i / 2, &val);
1461 sc->txpow2[i + 14] = (int8_t)(val & 0xff);
1462 sc->txpow2[i + 15] = (int8_t)(val >> 8);
1463 }
1464 /* fix broken Tx power entries */
1398 for (i = 0; i < 36; i++) {
1465 for (i = 0; i < 40; i++) {
1399 if (sc->txpow1[14 + i] < -7 || sc->txpow1[14 + i] > 15)
1400 sc->txpow1[14 + i] = 5;
1401 if (sc->txpow2[14 + i] < -7 || sc->txpow2[14 + i] > 15)
1402 sc->txpow2[14 + i] = 5;
1403 DPRINTF("chan %d: power1=%d, power2=%d\n",
1404 rt2860_rf2850[14 + i].chan, sc->txpow1[14 + i],
1405 sc->txpow2[14 + i]);
1406 }

--- 32 unchanged lines hidden (view full) ---

1439 sc->txpow40mhz_2ghz[ridx], sc->txpow40mhz_5ghz[ridx]);
1440 }
1441
1442 /* read RSSI offsets and LNA gains from EEPROM */
1443 run_srom_read(sc, RT2860_EEPROM_RSSI1_2GHZ, &val);
1444 sc->rssi_2ghz[0] = val & 0xff; /* Ant A */
1445 sc->rssi_2ghz[1] = val >> 8; /* Ant B */
1446 run_srom_read(sc, RT2860_EEPROM_RSSI2_2GHZ, &val);
1466 if (sc->txpow1[14 + i] < -7 || sc->txpow1[14 + i] > 15)
1467 sc->txpow1[14 + i] = 5;
1468 if (sc->txpow2[14 + i] < -7 || sc->txpow2[14 + i] > 15)
1469 sc->txpow2[14 + i] = 5;
1470 DPRINTF("chan %d: power1=%d, power2=%d\n",
1471 rt2860_rf2850[14 + i].chan, sc->txpow1[14 + i],
1472 sc->txpow2[14 + i]);
1473 }

--- 32 unchanged lines hidden (view full) ---

1506 sc->txpow40mhz_2ghz[ridx], sc->txpow40mhz_5ghz[ridx]);
1507 }
1508
1509 /* read RSSI offsets and LNA gains from EEPROM */
1510 run_srom_read(sc, RT2860_EEPROM_RSSI1_2GHZ, &val);
1511 sc->rssi_2ghz[0] = val & 0xff; /* Ant A */
1512 sc->rssi_2ghz[1] = val >> 8; /* Ant B */
1513 run_srom_read(sc, RT2860_EEPROM_RSSI2_2GHZ, &val);
1447 sc->rssi_2ghz[2] = val & 0xff; /* Ant C */
1514 if (sc->mac_ver >= 0x3070) {
1515 /*
1516 * On RT3070 chips (limited to 2 Rx chains), this ROM
1517 * field contains the Tx mixer gain for the 2GHz band.
1518 */
1519 if ((val & 0xff) != 0xff)
1520 sc->txmixgain_2ghz = val & 0x7;
1521 DPRINTF("tx mixer gain=%u (2GHz)\n", sc->txmixgain_2ghz);
1522 } else
1523 sc->rssi_2ghz[2] = val & 0xff; /* Ant C */
1448 sc->lna[2] = val >> 8; /* channel group 2 */
1449
1450 run_srom_read(sc, RT2860_EEPROM_RSSI1_5GHZ, &val);
1451 sc->rssi_5ghz[0] = val & 0xff; /* Ant A */
1452 sc->rssi_5ghz[1] = val >> 8; /* Ant B */
1453 run_srom_read(sc, RT2860_EEPROM_RSSI2_5GHZ, &val);
1524 sc->lna[2] = val >> 8; /* channel group 2 */
1525
1526 run_srom_read(sc, RT2860_EEPROM_RSSI1_5GHZ, &val);
1527 sc->rssi_5ghz[0] = val & 0xff; /* Ant A */
1528 sc->rssi_5ghz[1] = val >> 8; /* Ant B */
1529 run_srom_read(sc, RT2860_EEPROM_RSSI2_5GHZ, &val);
1454 sc->rssi_5ghz[2] = val & 0xff; /* Ant C */
1530 if (sc->mac_ver == 0x3572) {
1531 /*
1532 * On RT3572 chips (limited to 2 Rx chains), this ROM
1533 * field contains the Tx mixer gain for the 5GHz band.
1534 */
1535 if ((val & 0xff) != 0xff)
1536 sc->txmixgain_5ghz = val & 0x7;
1537 DPRINTF("tx mixer gain=%u (5GHz)\n", sc->txmixgain_5ghz);
1538 } else
1539 sc->rssi_5ghz[2] = val & 0xff; /* Ant C */
1455 sc->lna[3] = val >> 8; /* channel group 3 */
1456
1457 run_srom_read(sc, RT2860_EEPROM_LNA, &val);
1458 sc->lna[0] = val & 0xff; /* channel group 0 */
1459 sc->lna[1] = val >> 8; /* channel group 1 */
1460
1461 /* fix broken 5GHz LNA entries */
1462 if (sc->lna[2] == 0 || sc->lna[2] == 0xff) {

--- 1171 unchanged lines hidden (view full) ---

2634 if (!IEEE80211_IS_MULTICAST(wh->i_addr1) &&
2635 (!hasqos || (qos & IEEE80211_QOS_ACKPOLICY) !=
2636 IEEE80211_QOS_ACKPOLICY_NOACK)) {
2637 xflags |= RT2860_TX_ACK;
2638 if (ic->ic_flags & IEEE80211_F_SHPREAMBLE)
2639 dur = rt2860_rates[ridx].sp_ack_dur;
2640 else
2641 dur = rt2860_rates[ridx].lp_ack_dur;
1540 sc->lna[3] = val >> 8; /* channel group 3 */
1541
1542 run_srom_read(sc, RT2860_EEPROM_LNA, &val);
1543 sc->lna[0] = val & 0xff; /* channel group 0 */
1544 sc->lna[1] = val >> 8; /* channel group 1 */
1545
1546 /* fix broken 5GHz LNA entries */
1547 if (sc->lna[2] == 0 || sc->lna[2] == 0xff) {

--- 1171 unchanged lines hidden (view full) ---

2719 if (!IEEE80211_IS_MULTICAST(wh->i_addr1) &&
2720 (!hasqos || (qos & IEEE80211_QOS_ACKPOLICY) !=
2721 IEEE80211_QOS_ACKPOLICY_NOACK)) {
2722 xflags |= RT2860_TX_ACK;
2723 if (ic->ic_flags & IEEE80211_F_SHPREAMBLE)
2724 dur = rt2860_rates[ridx].sp_ack_dur;
2725 else
2726 dur = rt2860_rates[ridx].lp_ack_dur;
2642 *(uint16_t *)wh->i_dur = htole16(dur + sc->sifs);
2727 *(uint16_t *)wh->i_dur = htole16(dur);
2643 }
2644
2645 /* reserve slots for mgmt packets, just in case */
2646 if (sc->sc_epq[qid].tx_nfree < 3) {
2647 DPRINTFN(10, "tx ring %d is full\n", qid);
2648 return (-1);
2649 }
2650

--- 350 unchanged lines hidden (view full) ---

3001 error = EINVAL;
3002 break;
3003 }
3004
3005 return (error);
3006}
3007
3008static void
2728 }
2729
2730 /* reserve slots for mgmt packets, just in case */
2731 if (sc->sc_epq[qid].tx_nfree < 3) {
2732 DPRINTFN(10, "tx ring %d is full\n", qid);
2733 return (-1);
2734 }
2735

--- 350 unchanged lines hidden (view full) ---

3086 error = EINVAL;
3087 break;
3088 }
3089
3090 return (error);
3091}
3092
3093static void
3094run_set_agc(struct run_softc *sc, uint8_t agc)
3095{
3096 uint8_t bbp;
3097
3098 if (sc->mac_ver == 0x3572) {
3099 run_bbp_read(sc, 27, &bbp);
3100 bbp &= ~(0x3 << 5);
3101 run_bbp_write(sc, 27, bbp | 0 << 5); /* select Rx0 */
3102 run_bbp_write(sc, 66, agc);
3103 run_bbp_write(sc, 27, bbp | 1 << 5); /* select Rx1 */
3104 run_bbp_write(sc, 66, agc);
3105 } else
3106 run_bbp_write(sc, 66, agc);
3107}
3108
3109static void
3009run_select_chan_group(struct run_softc *sc, int group)
3010{
3011 uint32_t tmp;
3110run_select_chan_group(struct run_softc *sc, int group)
3111{
3112 uint32_t tmp;
3113 uint8_t agc;
3012
3013 run_bbp_write(sc, 62, 0x37 - sc->lna[group]);
3014 run_bbp_write(sc, 63, 0x37 - sc->lna[group]);
3015 run_bbp_write(sc, 64, 0x37 - sc->lna[group]);
3016 run_bbp_write(sc, 86, 0x00);
3017
3018 if (group == 0) {
3019 if (sc->ext_2ghz_lna) {
3020 run_bbp_write(sc, 82, 0x62);
3021 run_bbp_write(sc, 75, 0x46);
3022 } else {
3023 run_bbp_write(sc, 82, 0x84);
3024 run_bbp_write(sc, 75, 0x50);
3025 }
3026 } else {
3114
3115 run_bbp_write(sc, 62, 0x37 - sc->lna[group]);
3116 run_bbp_write(sc, 63, 0x37 - sc->lna[group]);
3117 run_bbp_write(sc, 64, 0x37 - sc->lna[group]);
3118 run_bbp_write(sc, 86, 0x00);
3119
3120 if (group == 0) {
3121 if (sc->ext_2ghz_lna) {
3122 run_bbp_write(sc, 82, 0x62);
3123 run_bbp_write(sc, 75, 0x46);
3124 } else {
3125 run_bbp_write(sc, 82, 0x84);
3126 run_bbp_write(sc, 75, 0x50);
3127 }
3128 } else {
3027 if (sc->ext_5ghz_lna) {
3129 if (sc->mac_ver == 0x3572)
3130 run_bbp_write(sc, 82, 0x94);
3131 else
3028 run_bbp_write(sc, 82, 0xf2);
3132 run_bbp_write(sc, 82, 0xf2);
3133 if (sc->ext_5ghz_lna)
3029 run_bbp_write(sc, 75, 0x46);
3134 run_bbp_write(sc, 75, 0x46);
3030 } else {
3031 run_bbp_write(sc, 82, 0xf2);
3135 else
3032 run_bbp_write(sc, 75, 0x50);
3136 run_bbp_write(sc, 75, 0x50);
3033 }
3034 }
3035
3036 run_read(sc, RT2860_TX_BAND_CFG, &tmp);
3037 tmp &= ~(RT2860_5G_BAND_SEL_N | RT2860_5G_BAND_SEL_P);
3038 tmp |= (group == 0) ? RT2860_5G_BAND_SEL_N : RT2860_5G_BAND_SEL_P;
3039 run_write(sc, RT2860_TX_BAND_CFG, tmp);
3040
3041 /* enable appropriate Power Amplifiers and Low Noise Amplifiers */

--- 6 unchanged lines hidden (view full) ---

3048 tmp |= RT2860_LNA_PE_G1_EN;
3049 } else { /* 5GHz */
3050 tmp |= RT2860_PA_PE_A0_EN | RT2860_LNA_PE_A0_EN;
3051 if (sc->ntxchains > 1)
3052 tmp |= RT2860_PA_PE_A1_EN;
3053 if (sc->nrxchains > 1)
3054 tmp |= RT2860_LNA_PE_A1_EN;
3055 }
3137 }
3138
3139 run_read(sc, RT2860_TX_BAND_CFG, &tmp);
3140 tmp &= ~(RT2860_5G_BAND_SEL_N | RT2860_5G_BAND_SEL_P);
3141 tmp |= (group == 0) ? RT2860_5G_BAND_SEL_N : RT2860_5G_BAND_SEL_P;
3142 run_write(sc, RT2860_TX_BAND_CFG, tmp);
3143
3144 /* enable appropriate Power Amplifiers and Low Noise Amplifiers */

--- 6 unchanged lines hidden (view full) ---

3151 tmp |= RT2860_LNA_PE_G1_EN;
3152 } else { /* 5GHz */
3153 tmp |= RT2860_PA_PE_A0_EN | RT2860_LNA_PE_A0_EN;
3154 if (sc->ntxchains > 1)
3155 tmp |= RT2860_PA_PE_A1_EN;
3156 if (sc->nrxchains > 1)
3157 tmp |= RT2860_LNA_PE_A1_EN;
3158 }
3056 run_write(sc, RT2860_TX_PIN_CFG, tmp);
3159 if (sc->mac_ver == 0x3572) {
3160 run_rt3070_rf_write(sc, 8, 0x00);
3161 run_write(sc, RT2860_TX_PIN_CFG, tmp);
3162 run_rt3070_rf_write(sc, 8, 0x80);
3163 } else
3164 run_write(sc, RT2860_TX_PIN_CFG, tmp);
3057
3058 /* set initial AGC value */
3165
3166 /* set initial AGC value */
3059 if (group == 0)
3060 run_bbp_write(sc, 66, 0x2e + sc->lna[0]);
3061 else
3062 run_bbp_write(sc, 66, 0x32 + (sc->lna[group] * 5) / 3);
3167 if (group == 0) { /* 2GHz band */
3168 if (sc->mac_ver >= 0x3070)
3169 agc = 0x1c + sc->lna[0] * 2;
3170 else
3171 agc = 0x2e + sc->lna[0];
3172 } else { /* 5GHz band */
3173 if (sc->mac_ver == 0x3572)
3174 agc = 0x22 + (sc->lna[group] * 5) / 3;
3175 else
3176 agc = 0x32 + (sc->lna[group] * 5) / 3;
3177 }
3178 run_set_agc(sc, agc);
3063}
3064
3065static void
3066run_rt2870_set_chan(struct run_softc *sc, uint32_t chan)
3067{
3068 const struct rfprog *rfprog = rt2860_rf2850;
3069 uint32_t r2, r3, r4;
3070 int8_t txpow1, txpow2;

--- 46 unchanged lines hidden (view full) ---

3117 run_rt2870_rf_write(sc, RT2860_RF4, r4);
3118}
3119
3120static void
3121run_rt3070_set_chan(struct run_softc *sc, uint32_t chan)
3122{
3123 int8_t txpow1, txpow2;
3124 uint8_t rf;
3179}
3180
3181static void
3182run_rt2870_set_chan(struct run_softc *sc, uint32_t chan)
3183{
3184 const struct rfprog *rfprog = rt2860_rf2850;
3185 uint32_t r2, r3, r4;
3186 int8_t txpow1, txpow2;

--- 46 unchanged lines hidden (view full) ---

3233 run_rt2870_rf_write(sc, RT2860_RF4, r4);
3234}
3235
3236static void
3237run_rt3070_set_chan(struct run_softc *sc, uint32_t chan)
3238{
3239 int8_t txpow1, txpow2;
3240 uint8_t rf;
3241 int i;
3125
3126 /* RT3070 is 2GHz only */
3127 KASSERT(chan >= 1 && chan <= 14, ("wrong channel selected\n"));
3128
3242
3243 /* RT3070 is 2GHz only */
3244 KASSERT(chan >= 1 && chan <= 14, ("wrong channel selected\n"));
3245
3246 /* find the settings for this channel (we know it exists) */
3247 for (i = 0; rt2860_rf2850[i].chan != chan; i++);
3248
3129 /* use Tx power values from EEPROM */
3249 /* use Tx power values from EEPROM */
3130 txpow1 = sc->txpow1[chan - 1];
3131 txpow2 = sc->txpow2[chan - 1];
3250 txpow1 = sc->txpow1[i];
3251 txpow2 = sc->txpow2[i];
3132
3252
3133 run_rt3070_rf_write(sc, 2, run_rf3020_freqs[chan - 1].n);
3134 run_rt3070_rf_write(sc, 3, run_rf3020_freqs[chan - 1].k);
3253 run_rt3070_rf_write(sc, 2, rt3070_freqs[i].n);
3254 run_rt3070_rf_write(sc, 3, rt3070_freqs[i].k);
3135 run_rt3070_rf_read(sc, 6, &rf);
3255 run_rt3070_rf_read(sc, 6, &rf);
3136 rf = (rf & ~0x03) | run_rf3020_freqs[chan - 1].r;
3256 rf = (rf & ~0x03) | rt3070_freqs[i].r;
3137 run_rt3070_rf_write(sc, 6, rf);
3138
3139 /* set Tx0 power */
3140 run_rt3070_rf_read(sc, 12, &rf);
3141 rf = (rf & ~0x1f) | txpow1;
3142 run_rt3070_rf_write(sc, 12, rf);
3143
3144 /* set Tx1 power */

--- 14 unchanged lines hidden (view full) ---

3159 run_rt3070_rf_write(sc, 1, rf);
3160
3161 /* set RF offset */
3162 run_rt3070_rf_read(sc, 23, &rf);
3163 rf = (rf & ~0x7f) | sc->freq;
3164 run_rt3070_rf_write(sc, 23, rf);
3165
3166 /* program RF filter */
3257 run_rt3070_rf_write(sc, 6, rf);
3258
3259 /* set Tx0 power */
3260 run_rt3070_rf_read(sc, 12, &rf);
3261 rf = (rf & ~0x1f) | txpow1;
3262 run_rt3070_rf_write(sc, 12, rf);
3263
3264 /* set Tx1 power */

--- 14 unchanged lines hidden (view full) ---

3279 run_rt3070_rf_write(sc, 1, rf);
3280
3281 /* set RF offset */
3282 run_rt3070_rf_read(sc, 23, &rf);
3283 rf = (rf & ~0x7f) | sc->freq;
3284 run_rt3070_rf_write(sc, 23, rf);
3285
3286 /* program RF filter */
3167 run_rt3070_rf_write(sc, 24, sc->rf24_20mhz);
3168 run_rt3070_rf_write(sc, 31, sc->rf24_20mhz);
3287 run_rt3070_rf_read(sc, 24, &rf); /* Tx */
3288 rf = (rf & ~0x3f) | sc->rf24_20mhz;
3289 run_rt3070_rf_write(sc, 24, rf);
3290 run_rt3070_rf_read(sc, 31, &rf); /* Rx */
3291 rf = (rf & ~0x3f) | sc->rf24_20mhz;
3292 run_rt3070_rf_write(sc, 31, rf);
3169
3170 /* enable RF tuning */
3171 run_rt3070_rf_read(sc, 7, &rf);
3172 run_rt3070_rf_write(sc, 7, rf | 0x01);
3173}
3174
3175static void
3293
3294 /* enable RF tuning */
3295 run_rt3070_rf_read(sc, 7, &rf);
3296 run_rt3070_rf_write(sc, 7, rf | 0x01);
3297}
3298
3299static void
3300run_rt3572_set_chan(struct run_softc *sc, u_int chan)
3301{
3302 int8_t txpow1, txpow2;
3303 uint32_t tmp;
3304 uint8_t rf;
3305 int i;
3306
3307 /* find the settings for this channel (we know it exists) */
3308 for (i = 0; rt2860_rf2850[i].chan != chan; i++);
3309
3310 /* use Tx power values from EEPROM */
3311 txpow1 = sc->txpow1[i];
3312 txpow2 = sc->txpow2[i];
3313
3314 if (chan <= 14) {
3315 run_bbp_write(sc, 25, sc->bbp25);
3316 run_bbp_write(sc, 26, sc->bbp26);
3317 } else {
3318 /* enable IQ phase correction */
3319 run_bbp_write(sc, 25, 0x09);
3320 run_bbp_write(sc, 26, 0xff);
3321 }
3322
3323 run_rt3070_rf_write(sc, 2, rt3070_freqs[i].n);
3324 run_rt3070_rf_write(sc, 3, rt3070_freqs[i].k);
3325 run_rt3070_rf_read(sc, 6, &rf);
3326 rf = (rf & ~0x0f) | rt3070_freqs[i].r;
3327 rf |= (chan <= 14) ? 0x08 : 0x04;
3328 run_rt3070_rf_write(sc, 6, rf);
3329
3330 /* set PLL mode */
3331 run_rt3070_rf_read(sc, 5, &rf);
3332 rf &= ~(0x08 | 0x04);
3333 rf |= (chan <= 14) ? 0x04 : 0x08;
3334 run_rt3070_rf_write(sc, 5, rf);
3335
3336 /* set Tx power for chain 0 */
3337 if (chan <= 14)
3338 rf = 0x60 | txpow1;
3339 else
3340 rf = 0xe0 | (txpow1 & 0xc) << 1 | (txpow1 & 0x3);
3341 run_rt3070_rf_write(sc, 12, rf);
3342
3343 /* set Tx power for chain 1 */
3344 if (chan <= 14)
3345 rf = 0x60 | txpow2;
3346 else
3347 rf = 0xe0 | (txpow2 & 0xc) << 1 | (txpow2 & 0x3);
3348 run_rt3070_rf_write(sc, 13, rf);
3349
3350 /* set Tx/Rx streams */
3351 run_rt3070_rf_read(sc, 1, &rf);
3352 rf &= ~0xfc;
3353 if (sc->ntxchains == 1)
3354 rf |= 1 << 7 | 1 << 5; /* 1T: disable Tx chains 2 & 3 */
3355 else if (sc->ntxchains == 2)
3356 rf |= 1 << 7; /* 2T: disable Tx chain 3 */
3357 if (sc->nrxchains == 1)
3358 rf |= 1 << 6 | 1 << 4; /* 1R: disable Rx chains 2 & 3 */
3359 else if (sc->nrxchains == 2)
3360 rf |= 1 << 6; /* 2R: disable Rx chain 3 */
3361 run_rt3070_rf_write(sc, 1, rf);
3362
3363 /* set RF offset */
3364 run_rt3070_rf_read(sc, 23, &rf);
3365 rf = (rf & ~0x7f) | sc->freq;
3366 run_rt3070_rf_write(sc, 23, rf);
3367
3368 /* program RF filter */
3369 rf = sc->rf24_20mhz;
3370 run_rt3070_rf_write(sc, 24, rf); /* Tx */
3371 run_rt3070_rf_write(sc, 31, rf); /* Rx */
3372
3373 /* enable RF tuning */
3374 run_rt3070_rf_read(sc, 7, &rf);
3375 rf = (chan <= 14) ? 0xd8 : ((rf & ~0xc8) | 0x14);
3376 run_rt3070_rf_write(sc, 7, rf);
3377
3378 /* TSSI */
3379 rf = (chan <= 14) ? 0xc3 : 0xc0;
3380 run_rt3070_rf_write(sc, 9, rf);
3381
3382 /* set loop filter 1 */
3383 run_rt3070_rf_write(sc, 10, 0xf1);
3384 /* set loop filter 2 */
3385 run_rt3070_rf_write(sc, 11, (chan <= 14) ? 0xb9 : 0x00);
3386
3387 /* set tx_mx2_ic */
3388 run_rt3070_rf_write(sc, 15, (chan <= 14) ? 0x53 : 0x43);
3389 /* set tx_mx1_ic */
3390 if (chan <= 14)
3391 rf = 0x48 | sc->txmixgain_2ghz;
3392 else
3393 rf = 0x78 | sc->txmixgain_5ghz;
3394 run_rt3070_rf_write(sc, 16, rf);
3395
3396 /* set tx_lo1 */
3397 run_rt3070_rf_write(sc, 17, 0x23);
3398 /* set tx_lo2 */
3399 if (chan <= 14)
3400 rf = 0x93;
3401 else if (chan <= 64)
3402 rf = 0xb7;
3403 else if (chan <= 128)
3404 rf = 0x74;
3405 else
3406 rf = 0x72;
3407 run_rt3070_rf_write(sc, 19, rf);
3408
3409 /* set rx_lo1 */
3410 if (chan <= 14)
3411 rf = 0xb3;
3412 else if (chan <= 64)
3413 rf = 0xf6;
3414 else if (chan <= 128)
3415 rf = 0xf4;
3416 else
3417 rf = 0xf3;
3418 run_rt3070_rf_write(sc, 20, rf);
3419
3420 /* set pfd_delay */
3421 if (chan <= 14)
3422 rf = 0x15;
3423 else if (chan <= 64)
3424 rf = 0x3d;
3425 else
3426 rf = 0x01;
3427 run_rt3070_rf_write(sc, 25, rf);
3428
3429 /* set rx_lo2 */
3430 run_rt3070_rf_write(sc, 26, (chan <= 14) ? 0x85 : 0x87);
3431 /* set ldo_rf_vc */
3432 run_rt3070_rf_write(sc, 27, (chan <= 14) ? 0x00 : 0x01);
3433 /* set drv_cc */
3434 run_rt3070_rf_write(sc, 29, (chan <= 14) ? 0x9b : 0x9f);
3435
3436 run_read(sc, RT2860_GPIO_CTRL, &tmp);
3437 tmp &= ~0x8080;
3438 if (chan <= 14)
3439 tmp |= 0x80;
3440 run_write(sc, RT2860_GPIO_CTRL, tmp);
3441
3442 /* enable RF tuning */
3443 run_rt3070_rf_read(sc, 7, &rf);
3444 run_rt3070_rf_write(sc, 7, rf | 0x01);
3445
3446 run_delay(sc, 2);
3447}
3448
3449static void
3176run_set_rx_antenna(struct run_softc *sc, int aux)
3177{
3178 uint32_t tmp;
3179
3180 if (aux) {
3450run_set_rx_antenna(struct run_softc *sc, int aux)
3451{
3452 uint32_t tmp;
3453
3454 if (aux) {
3181 run_read(sc, RT2860_PCI_EECTRL, &tmp);
3182 run_write(sc, RT2860_PCI_EECTRL, tmp & ~RT2860_C);
3455 run_mcu_cmd(sc, RT2860_MCU_CMD_ANTSEL, 0);
3183 run_read(sc, RT2860_GPIO_CTRL, &tmp);
3184 run_write(sc, RT2860_GPIO_CTRL, (tmp & ~0x0808) | 0x08);
3185 } else {
3456 run_read(sc, RT2860_GPIO_CTRL, &tmp);
3457 run_write(sc, RT2860_GPIO_CTRL, (tmp & ~0x0808) | 0x08);
3458 } else {
3186 run_read(sc, RT2860_PCI_EECTRL, &tmp);
3187 run_write(sc, RT2860_PCI_EECTRL, tmp | RT2860_C);
3459 run_mcu_cmd(sc, RT2860_MCU_CMD_ANTSEL, 1);
3188 run_read(sc, RT2860_GPIO_CTRL, &tmp);
3189 run_write(sc, RT2860_GPIO_CTRL, tmp & ~0x0808);
3190 }
3191}
3192
3193static int
3194run_set_chan(struct run_softc *sc, struct ieee80211_channel *c)
3195{
3196 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
3197 uint32_t chan, group;
3198
3199 chan = ieee80211_chan2ieee(ic, c);
3200 if (chan == 0 || chan == IEEE80211_CHAN_ANY)
3201 return EINVAL;
3202
3460 run_read(sc, RT2860_GPIO_CTRL, &tmp);
3461 run_write(sc, RT2860_GPIO_CTRL, tmp & ~0x0808);
3462 }
3463}
3464
3465static int
3466run_set_chan(struct run_softc *sc, struct ieee80211_channel *c)
3467{
3468 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
3469 uint32_t chan, group;
3470
3471 chan = ieee80211_chan2ieee(ic, c);
3472 if (chan == 0 || chan == IEEE80211_CHAN_ANY)
3473 return EINVAL;
3474
3203 if ((sc->mac_rev >> 16) >= 0x3070)
3475 if (sc->mac_ver == 0x3572)
3476 run_rt3572_set_chan(sc, chan);
3477 else if (sc->mac_ver >= 0x3070)
3204 run_rt3070_set_chan(sc, chan);
3205 else
3206 run_rt2870_set_chan(sc, chan);
3207
3478 run_rt3070_set_chan(sc, chan);
3479 else
3480 run_rt2870_set_chan(sc, chan);
3481
3208 /* 802.11a uses a 16 microseconds short interframe space */
3209 sc->sifs = IEEE80211_IS_CHAN_5GHZ(c) ? 16 : 10;
3210
3211 /* determine channel group */
3212 if (chan <= 14)
3213 group = 0;
3214 else if (chan <= 64)
3215 group = 1;
3216 else if (chan <= 128)
3217 group = 2;
3218 else

--- 149 unchanged lines hidden (view full) ---

3368}
3369
3370static void
3371run_usb_timeout_cb(void *arg, int pending)
3372{
3373 struct run_softc *sc = arg;
3374 struct ieee80211vap *vap = &sc->sc_rvp->vap;
3375
3482 /* determine channel group */
3483 if (chan <= 14)
3484 group = 0;
3485 else if (chan <= 64)
3486 group = 1;
3487 else if (chan <= 128)
3488 group = 2;
3489 else

--- 149 unchanged lines hidden (view full) ---

3639}
3640
3641static void
3642run_usb_timeout_cb(void *arg, int pending)
3643{
3644 struct run_softc *sc = arg;
3645 struct ieee80211vap *vap = &sc->sc_rvp->vap;
3646
3376 RUN_LOCK_ASSERT(sc, MA_OWNED);
3647 RUN_LOCK(sc);
3377
3378 if(vap->iv_state == IEEE80211_S_RUN &&
3379 vap->iv_opmode != IEEE80211_M_STA)
3380 run_reset_livelock(sc);
3381 else if(vap->iv_state == IEEE80211_S_SCAN){
3382 DPRINTF("timeout caused by scan\n");
3383 /* cancel bgscan */
3384 ieee80211_cancel_scan(vap);
3385 } else
3386 DPRINTF("timeout by unknown cause\n");
3648
3649 if(vap->iv_state == IEEE80211_S_RUN &&
3650 vap->iv_opmode != IEEE80211_M_STA)
3651 run_reset_livelock(sc);
3652 else if(vap->iv_state == IEEE80211_S_SCAN){
3653 DPRINTF("timeout caused by scan\n");
3654 /* cancel bgscan */
3655 ieee80211_cancel_scan(vap);
3656 } else
3657 DPRINTF("timeout by unknown cause\n");
3658
3659 RUN_UNLOCK(sc);
3387}
3388
3389static void
3390run_reset_livelock(struct run_softc *sc)
3391{
3392 uint32_t tmp;
3393
3394 /*

--- 211 unchanged lines hidden (view full) ---

3606
3607 /* initialize BBP registers to default values */
3608 for (i = 0; i < nitems(rt2860_def_bbp); i++) {
3609 run_bbp_write(sc, rt2860_def_bbp[i].reg,
3610 rt2860_def_bbp[i].val);
3611 }
3612
3613 /* fix BBP84 for RT2860E */
3660}
3661
3662static void
3663run_reset_livelock(struct run_softc *sc)
3664{
3665 uint32_t tmp;
3666
3667 /*

--- 211 unchanged lines hidden (view full) ---

3879
3880 /* initialize BBP registers to default values */
3881 for (i = 0; i < nitems(rt2860_def_bbp); i++) {
3882 run_bbp_write(sc, rt2860_def_bbp[i].reg,
3883 rt2860_def_bbp[i].val);
3884 }
3885
3886 /* fix BBP84 for RT2860E */
3614 if ((sc->mac_rev >> 16) == 0x2860 && (sc->mac_rev & 0xffff) != 0x0101)
3615 run_bbp_write(sc, 84, 0x19);
3887 if (sc->mac_ver == 0x2860 && sc->mac_rev != 0x0101)
3888 run_bbp_write(sc, 84, 0x19);
3616
3889
3617 if ((sc->mac_rev >> 16) >= 0x3070) {
3890 if (sc->mac_ver >= 0x3070) {
3618 run_bbp_write(sc, 79, 0x13);
3619 run_bbp_write(sc, 80, 0x05);
3620 run_bbp_write(sc, 81, 0x33);
3891 run_bbp_write(sc, 79, 0x13);
3892 run_bbp_write(sc, 80, 0x05);
3893 run_bbp_write(sc, 81, 0x33);
3621 /* XXX RT3090 needs more */
3622 } else if (sc->mac_rev == 0x28600100) {
3894 } else if (sc->mac_ver == 0x2860 && sc->mac_rev == 0x0100) {
3623 run_bbp_write(sc, 69, 0x16);
3624 run_bbp_write(sc, 73, 0x12);
3625 }
3626 return 0;
3627}
3628
3629static int
3630run_rt3070_rf_init(struct run_softc *sc)
3631{
3632 uint32_t tmp;
3895 run_bbp_write(sc, 69, 0x16);
3896 run_bbp_write(sc, 73, 0x12);
3897 }
3898 return 0;
3899}
3900
3901static int
3902run_rt3070_rf_init(struct run_softc *sc)
3903{
3904 uint32_t tmp;
3633 uint8_t rf, bbp4;
3905 uint8_t rf, target, bbp4;
3634 int i;
3635
3636 run_rt3070_rf_read(sc, 30, &rf);
3637 /* toggle RF R30 bit 7 */
3638 run_rt3070_rf_write(sc, 30, rf | 0x80);
3639 run_delay(sc, 10);
3640 run_rt3070_rf_write(sc, 30, rf & ~0x80);
3641
3642 /* initialize RF registers to default value */
3906 int i;
3907
3908 run_rt3070_rf_read(sc, 30, &rf);
3909 /* toggle RF R30 bit 7 */
3910 run_rt3070_rf_write(sc, 30, rf | 0x80);
3911 run_delay(sc, 10);
3912 run_rt3070_rf_write(sc, 30, rf & ~0x80);
3913
3914 /* initialize RF registers to default value */
3643 for (i = 0; i < nitems(rt3070_def_rf); i++) {
3644 run_rt3070_rf_write(sc, rt3070_def_rf[i].reg,
3645 rt3070_def_rf[i].val);
3915 if (sc->mac_ver == 0x3572) {
3916 for (i = 0; i < nitems(rt3572_def_rf); i++) {
3917 run_rt3070_rf_write(sc, rt3572_def_rf[i].reg,
3918 rt3572_def_rf[i].val);
3919 }
3920 } else {
3921 for (i = 0; i < nitems(rt3070_def_rf); i++) {
3922 run_rt3070_rf_write(sc, rt3070_def_rf[i].reg,
3923 rt3070_def_rf[i].val);
3924 }
3646 }
3925 }
3647 if ((sc->mac_rev >> 16) == 0x3070) {
3926
3927 if (sc->mac_ver == 0x3070) {
3648 /* change voltage from 1.2V to 1.35V for RT3070 */
3649 run_read(sc, RT3070_LDO_CFG0, &tmp);
3650 tmp = (tmp & ~0x0f000000) | 0x0d000000;
3651 run_write(sc, RT3070_LDO_CFG0, tmp);
3652
3928 /* change voltage from 1.2V to 1.35V for RT3070 */
3929 run_read(sc, RT3070_LDO_CFG0, &tmp);
3930 tmp = (tmp & ~0x0f000000) | 0x0d000000;
3931 run_write(sc, RT3070_LDO_CFG0, tmp);
3932
3653 } else if ((sc->mac_rev >> 16) == 0x3071) {
3933 } else if (sc->mac_ver == 0x3071) {
3654 run_rt3070_rf_read(sc, 6, &rf);
3655 run_rt3070_rf_write(sc, 6, rf | 0x40);
3656 run_rt3070_rf_write(sc, 31, 0x14);
3657
3658 run_read(sc, RT3070_LDO_CFG0, &tmp);
3659 tmp &= ~0x1f000000;
3934 run_rt3070_rf_read(sc, 6, &rf);
3935 run_rt3070_rf_write(sc, 6, rf | 0x40);
3936 run_rt3070_rf_write(sc, 31, 0x14);
3937
3938 run_read(sc, RT3070_LDO_CFG0, &tmp);
3939 tmp &= ~0x1f000000;
3660 if ((sc->mac_rev & 0xffff) < 0x0211)
3661 tmp |= 0x0d000000;
3940 if (sc->mac_rev < 0x0211)
3941 tmp |= 0x0d000000; /* 1.3V */
3662 else
3942 else
3663 tmp |= 0x01000000;
3943 tmp |= 0x01000000; /* 1.2V */
3664 run_write(sc, RT3070_LDO_CFG0, tmp);
3665
3666 /* patch LNA_PE_G1 */
3667 run_read(sc, RT3070_GPIO_SWITCH, &tmp);
3668 run_write(sc, RT3070_GPIO_SWITCH, tmp & ~0x20);
3944 run_write(sc, RT3070_LDO_CFG0, tmp);
3945
3946 /* patch LNA_PE_G1 */
3947 run_read(sc, RT3070_GPIO_SWITCH, &tmp);
3948 run_write(sc, RT3070_GPIO_SWITCH, tmp & ~0x20);
3669 } else if((sc->mac_rev >> 16) == 0x3572){
3670 if ((sc->mac_rev & 0xffff) < 0x0211){
3949 } else if(sc->mac_ver == 0x3572){
3950 run_rt3070_rf_read(sc, 6, &rf);
3951 run_rt3070_rf_write(sc, 6, rf | 0x40);
3952
3953 if (sc->mac_rev < 0x0211){
3954 /* increase voltage from 1.2V to 1.35V */
3671 run_read(sc, RT3070_LDO_CFG0, &tmp);
3672 tmp = (tmp & ~0x0f000000) | 0x0d000000;
3673 run_write(sc, RT3070_LDO_CFG0, tmp);
3674 } else {
3955 run_read(sc, RT3070_LDO_CFG0, &tmp);
3956 tmp = (tmp & ~0x0f000000) | 0x0d000000;
3957 run_write(sc, RT3070_LDO_CFG0, tmp);
3958 } else {
3959 /* increase voltage from 1.2V to 1.35V */
3675 run_read(sc, RT3070_LDO_CFG0, &tmp);
3676 tmp = (tmp & ~0x1f000000) | 0x0d000000;
3677 run_write(sc, RT3070_LDO_CFG0, tmp);
3678
3679 run_delay(sc, 1); /* wait for 1msec */
3680
3960 run_read(sc, RT3070_LDO_CFG0, &tmp);
3961 tmp = (tmp & ~0x1f000000) | 0x0d000000;
3962 run_write(sc, RT3070_LDO_CFG0, tmp);
3963
3964 run_delay(sc, 1); /* wait for 1msec */
3965
3966 /* decrease voltage back to 1.2V */
3681 tmp = (tmp & ~0x1f000000) | 0x01000000;
3682 run_write(sc, RT3070_LDO_CFG0, tmp);
3683 }
3684 }
3685
3686 /* select 20MHz bandwidth */
3687 run_rt3070_rf_read(sc, 31, &rf);
3688 run_rt3070_rf_write(sc, 31, rf & ~0x20);
3689
3690 /* calibrate filter for 20MHz bandwidth */
3691 sc->rf24_20mhz = 0x1f; /* default value */
3967 tmp = (tmp & ~0x1f000000) | 0x01000000;
3968 run_write(sc, RT3070_LDO_CFG0, tmp);
3969 }
3970 }
3971
3972 /* select 20MHz bandwidth */
3973 run_rt3070_rf_read(sc, 31, &rf);
3974 run_rt3070_rf_write(sc, 31, rf & ~0x20);
3975
3976 /* calibrate filter for 20MHz bandwidth */
3977 sc->rf24_20mhz = 0x1f; /* default value */
3692 run_rt3070_filter_calib(sc, 0x07, 0x16, &sc->rf24_20mhz);
3978 target = (sc->mac_ver < 0x3071) ? 0x16 : 0x13;
3979 run_rt3070_filter_calib(sc, 0x07, target, &sc->rf24_20mhz);
3693
3694 /* select 40MHz bandwidth */
3695 run_bbp_read(sc, 4, &bbp4);
3696 run_bbp_write(sc, 4, (bbp4 & ~0x08) | 0x10);
3980
3981 /* select 40MHz bandwidth */
3982 run_bbp_read(sc, 4, &bbp4);
3983 run_bbp_write(sc, 4, (bbp4 & ~0x08) | 0x10);
3984 run_rt3070_rf_read(sc, 31, &rf);
3985 run_rt3070_rf_write(sc, 31, rf | 0x20);
3697
3698 /* calibrate filter for 40MHz bandwidth */
3699 sc->rf24_40mhz = 0x2f; /* default value */
3986
3987 /* calibrate filter for 40MHz bandwidth */
3988 sc->rf24_40mhz = 0x2f; /* default value */
3700 run_rt3070_filter_calib(sc, 0x27, 0x19, &sc->rf24_40mhz);
3989 target = (sc->mac_ver < 0x3071) ? 0x19 : 0x15;
3990 run_rt3070_filter_calib(sc, 0x27, target, &sc->rf24_40mhz);
3701
3702 /* go back to 20MHz bandwidth */
3703 run_bbp_read(sc, 4, &bbp4);
3704 run_bbp_write(sc, 4, bbp4 & ~0x18);
3705
3991
3992 /* go back to 20MHz bandwidth */
3993 run_bbp_read(sc, 4, &bbp4);
3994 run_bbp_write(sc, 4, bbp4 & ~0x18);
3995
3706 if ((sc->mac_rev & 0xffff) < 0x0211)
3996 if (sc->mac_ver == 0x3572) {
3997 /* save default BBP registers 25 and 26 values */
3998 run_bbp_read(sc, 25, &sc->bbp25);
3999 run_bbp_read(sc, 26, &sc->bbp26);
4000 } else if (sc->mac_rev < 0x0211)
3707 run_rt3070_rf_write(sc, 27, 0x03);
3708
3709 run_read(sc, RT3070_OPT_14, &tmp);
3710 run_write(sc, RT3070_OPT_14, tmp | 1);
3711
4001 run_rt3070_rf_write(sc, 27, 0x03);
4002
4003 run_read(sc, RT3070_OPT_14, &tmp);
4004 run_write(sc, RT3070_OPT_14, tmp | 1);
4005
3712 if ((sc->mac_rev >> 16) == 0x3071) {
4006 if (sc->mac_ver == 0x3070 || sc->mac_ver == 0x3071) {
4007 run_rt3070_rf_read(sc, 17, &rf);
4008 rf &= ~RT3070_TX_LO1;
4009 if ((sc->mac_ver == 0x3070 ||
4010 (sc->mac_ver == 0x3071 && sc->mac_rev >= 0x0211)) &&
4011 !sc->ext_2ghz_lna)
4012 rf |= 0x20; /* fix for long range Rx issue */
4013 if (sc->txmixgain_2ghz >= 1)
4014 rf = (rf & ~0x7) | sc->txmixgain_2ghz;
4015 run_rt3070_rf_write(sc, 17, rf);
4016 }
4017
4018 if (sc->mac_rev == 0x3071) {
3713 run_rt3070_rf_read(sc, 1, &rf);
3714 rf &= ~(RT3070_RX0_PD | RT3070_TX0_PD);
3715 rf |= RT3070_RF_BLOCK | RT3070_RX1_PD | RT3070_TX1_PD;
3716 run_rt3070_rf_write(sc, 1, rf);
3717
3718 run_rt3070_rf_read(sc, 15, &rf);
3719 run_rt3070_rf_write(sc, 15, rf & ~RT3070_TX_LO2);
3720
4019 run_rt3070_rf_read(sc, 1, &rf);
4020 rf &= ~(RT3070_RX0_PD | RT3070_TX0_PD);
4021 rf |= RT3070_RF_BLOCK | RT3070_RX1_PD | RT3070_TX1_PD;
4022 run_rt3070_rf_write(sc, 1, rf);
4023
4024 run_rt3070_rf_read(sc, 15, &rf);
4025 run_rt3070_rf_write(sc, 15, rf & ~RT3070_TX_LO2);
4026
3721 run_rt3070_rf_read(sc, 17, &rf);
3722 rf &= ~RT3070_TX_LO1;
3723 if ((sc->mac_rev & 0xffff) >= 0x0211 && !sc->ext_2ghz_lna)
3724 rf |= 0x20; /* fix for long range Rx issue */
3725 run_rt3070_rf_write(sc, 17, rf);
3726
3727 run_rt3070_rf_read(sc, 20, &rf);
3728 run_rt3070_rf_write(sc, 20, rf & ~RT3070_RX_LO1);
3729
3730 run_rt3070_rf_read(sc, 21, &rf);
3731 run_rt3070_rf_write(sc, 21, rf & ~RT3070_RX_LO2);
4027 run_rt3070_rf_read(sc, 20, &rf);
4028 run_rt3070_rf_write(sc, 20, rf & ~RT3070_RX_LO1);
4029
4030 run_rt3070_rf_read(sc, 21, &rf);
4031 run_rt3070_rf_write(sc, 21, rf & ~RT3070_RX_LO2);
4032 }
3732
4033
4034 if (sc->mac_ver == 0x3070 || sc->mac_ver == 0x3071) {
4035 /* fix Tx to Rx IQ glitch by raising RF voltage */
3733 run_rt3070_rf_read(sc, 27, &rf);
3734 rf &= ~0x77;
4036 run_rt3070_rf_read(sc, 27, &rf);
4037 rf &= ~0x77;
3735 if ((sc->mac_rev & 0xffff) < 0x0211)
4038 if (sc->mac_rev < 0x0211)
3736 rf |= 0x03;
3737 run_rt3070_rf_write(sc, 27, rf);
3738 }
3739 return 0;
3740}
3741
3742static int
3743run_rt3070_filter_calib(struct run_softc *sc, uint8_t init, uint8_t target,
3744 uint8_t *val)
3745{
3746 uint8_t rf22, rf24;
3747 uint8_t bbp55_pb, bbp55_sb, delta;
3748 int ntries;
3749
3750 /* program filter */
4039 rf |= 0x03;
4040 run_rt3070_rf_write(sc, 27, rf);
4041 }
4042 return 0;
4043}
4044
4045static int
4046run_rt3070_filter_calib(struct run_softc *sc, uint8_t init, uint8_t target,
4047 uint8_t *val)
4048{
4049 uint8_t rf22, rf24;
4050 uint8_t bbp55_pb, bbp55_sb, delta;
4051 int ntries;
4052
4053 /* program filter */
3751 rf24 = init; /* initial filter value */
4054 run_rt3070_rf_read(sc, 24, &rf24);
4055 rf24 = (rf24 & 0xc0) | init; /* initial filter value */
3752 run_rt3070_rf_write(sc, 24, rf24);
3753
3754 /* enable baseband loopback mode */
3755 run_rt3070_rf_read(sc, 22, &rf22);
3756 run_rt3070_rf_write(sc, 22, rf22 | 0x01);
3757
3758 /* set power and frequency of passband test tone */
3759 run_bbp_write(sc, 24, 0x00);

--- 38 unchanged lines hidden (view full) ---

3798
3799 /* disable baseband loopback mode */
3800 run_rt3070_rf_read(sc, 22, &rf22);
3801 run_rt3070_rf_write(sc, 22, rf22 & ~0x01);
3802
3803 return 0;
3804}
3805
4056 run_rt3070_rf_write(sc, 24, rf24);
4057
4058 /* enable baseband loopback mode */
4059 run_rt3070_rf_read(sc, 22, &rf22);
4060 run_rt3070_rf_write(sc, 22, rf22 | 0x01);
4061
4062 /* set power and frequency of passband test tone */
4063 run_bbp_write(sc, 24, 0x00);

--- 38 unchanged lines hidden (view full) ---

4102
4103 /* disable baseband loopback mode */
4104 run_rt3070_rf_read(sc, 22, &rf22);
4105 run_rt3070_rf_write(sc, 22, rf22 & ~0x01);
4106
4107 return 0;
4108}
4109
4110static void
4111run_rt3070_rf_setup(struct run_softc *sc)
4112{
4113 uint8_t bbp, rf;
4114 int i;
4115
4116 if (sc->mac_ver == 0x3572) {
4117 /* enable DC filter */
4118 if (sc->mac_rev >= 0x0201)
4119 run_bbp_write(sc, 103, 0xc0);
4120
4121 run_bbp_read(sc, 138, &bbp);
4122 if (sc->ntxchains == 1)
4123 bbp |= 0x20; /* turn off DAC1 */
4124 if (sc->nrxchains == 1)
4125 bbp &= ~0x02; /* turn off ADC1 */
4126 run_bbp_write(sc, 138, bbp);
4127
4128 if (sc->mac_rev >= 0x0211) {
4129 /* improve power consumption */
4130 run_bbp_read(sc, 31, &bbp);
4131 run_bbp_write(sc, 31, bbp & ~0x03);
4132 }
4133
4134 run_rt3070_rf_read(sc, 16, &rf);
4135 rf = (rf & ~0x07) | sc->txmixgain_2ghz;
4136 run_rt3070_rf_write(sc, 16, rf);
4137
4138 } else if (sc->mac_ver == 0x3071) {
4139 /* enable DC filter */
4140 if (sc->mac_rev >= 0x0201)
4141 run_bbp_write(sc, 103, 0xc0);
4142
4143 run_bbp_read(sc, 138, &bbp);
4144 if (sc->ntxchains == 1)
4145 bbp |= 0x20; /* turn off DAC1 */
4146 if (sc->nrxchains == 1)
4147 bbp &= ~0x02; /* turn off ADC1 */
4148 run_bbp_write(sc, 138, bbp);
4149
4150 if (sc->mac_rev >= 0x0211) {
4151 /* improve power consumption */
4152 run_bbp_read(sc, 31, &bbp);
4153 run_bbp_write(sc, 31, bbp & ~0x03);
4154 }
4155
4156 run_write(sc, RT2860_TX_SW_CFG1, 0);
4157 if (sc->mac_rev < 0x0211) {
4158 run_write(sc, RT2860_TX_SW_CFG2,
4159 sc->patch_dac ? 0x2c : 0x0f);
4160 } else
4161 run_write(sc, RT2860_TX_SW_CFG2, 0);
4162
4163 } else if (sc->mac_ver == 0x3070) {
4164 if (sc->mac_rev >= 0x0201) {
4165 /* enable DC filter */
4166 run_bbp_write(sc, 103, 0xc0);
4167
4168 /* improve power consumption */
4169 run_bbp_read(sc, 31, &bbp);
4170 run_bbp_write(sc, 31, bbp & ~0x03);
4171 }
4172
4173 if (sc->mac_rev < 0x0211) {
4174 run_write(sc, RT2860_TX_SW_CFG1, 0);
4175 run_write(sc, RT2860_TX_SW_CFG2, 0x2c);
4176 } else
4177 run_write(sc, RT2860_TX_SW_CFG2, 0);
4178 }
4179
4180 /* initialize RF registers from ROM for >=RT3071*/
4181 if (sc->mac_ver >= 0x3071) {
4182 for (i = 0; i < 10; i++) {
4183 if (sc->rf[i].reg == 0 || sc->rf[i].reg == 0xff)
4184 continue;
4185 run_rt3070_rf_write(sc, sc->rf[i].reg, sc->rf[i].val);
4186 }
4187 }
4188}
4189
3806static int
3807run_txrx_enable(struct run_softc *sc)
3808{
3809 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
3810 uint32_t tmp;
3811 int error, ntries;
3812
3813 run_write(sc, RT2860_MAC_SYS_CTRL, RT2860_MAC_TX_EN);

--- 35 unchanged lines hidden (view full) ---

3849 return 0;
3850}
3851
3852static void
3853run_init_locked(struct run_softc *sc)
3854{
3855 struct ifnet *ifp = sc->sc_ifp;
3856 struct ieee80211com *ic = ifp->if_l2com;
4190static int
4191run_txrx_enable(struct run_softc *sc)
4192{
4193 struct ieee80211com *ic = sc->sc_ifp->if_l2com;
4194 uint32_t tmp;
4195 int error, ntries;
4196
4197 run_write(sc, RT2860_MAC_SYS_CTRL, RT2860_MAC_TX_EN);

--- 35 unchanged lines hidden (view full) ---

4233 return 0;
4234}
4235
4236static void
4237run_init_locked(struct run_softc *sc)
4238{
4239 struct ifnet *ifp = sc->sc_ifp;
4240 struct ieee80211com *ic = ifp->if_l2com;
3857 struct ieee80211vap *vap = &sc->sc_rvp->vap;
3858 uint32_t tmp;
3859 uint8_t bbp1, bbp3;
3860 int i;
3861 int ridx;
3862 int ntries;
3863
3864 run_stop(sc);
3865

--- 50 unchanged lines hidden (view full) ---

3916 }
3917
3918 for (i = 0; i < nitems(rt2870_def_mac); i++)
3919 run_write(sc, rt2870_def_mac[i].reg, rt2870_def_mac[i].val);
3920 run_write(sc, RT2860_WMM_AIFSN_CFG, 0x00002273);
3921 run_write(sc, RT2860_WMM_CWMIN_CFG, 0x00002344);
3922 run_write(sc, RT2860_WMM_CWMAX_CFG, 0x000034aa);
3923
4241 uint32_t tmp;
4242 uint8_t bbp1, bbp3;
4243 int i;
4244 int ridx;
4245 int ntries;
4246
4247 run_stop(sc);
4248

--- 50 unchanged lines hidden (view full) ---

4299 }
4300
4301 for (i = 0; i < nitems(rt2870_def_mac); i++)
4302 run_write(sc, rt2870_def_mac[i].reg, rt2870_def_mac[i].val);
4303 run_write(sc, RT2860_WMM_AIFSN_CFG, 0x00002273);
4304 run_write(sc, RT2860_WMM_CWMIN_CFG, 0x00002344);
4305 run_write(sc, RT2860_WMM_CWMAX_CFG, 0x000034aa);
4306
3924 if ((sc->mac_rev >> 16) >= 0x3070) {
4307 if (sc->mac_ver >= 0x3070) {
3925 /* set delay of PA_PE assertion to 1us (unit of 0.25us) */
3926 run_write(sc, RT2860_TX_SW_CFG0,
3927 4 << RT2860_DLY_PAPE_EN_SHIFT);
4308 /* set delay of PA_PE assertion to 1us (unit of 0.25us) */
4309 run_write(sc, RT2860_TX_SW_CFG0,
4310 4 << RT2860_DLY_PAPE_EN_SHIFT);
3928 run_write(sc, RT2860_TX_SW_CFG1, 0);
3929 run_write(sc, RT2860_TX_SW_CFG2, 0x1f);
3930 }
3931
3932 /* wait while MAC is busy */
3933 for (ntries = 0; ntries < 100; ntries++) {
3934 if (run_read(sc, RT2860_MAC_STATUS_REG, &tmp) != 0)
3935 goto fail;
3936 if (!(tmp & (RT2860_RX_STATUS_BUSY | RT2860_TX_STATUS_BUSY)))
3937 break;

--- 26 unchanged lines hidden (view full) ---

3964 run_set_region_4(sc, RT2860_SKEY(0, 0), 0, 8 * 32);
3965 /* clear shared key mode */
3966 run_set_region_4(sc, RT2860_SKEY_MODE_0_7, 0, 4);
3967
3968 run_read(sc, RT2860_US_CYC_CNT, &tmp);
3969 tmp = (tmp & ~0xff) | 0x1e;
3970 run_write(sc, RT2860_US_CYC_CNT, tmp);
3971
4311 }
4312
4313 /* wait while MAC is busy */
4314 for (ntries = 0; ntries < 100; ntries++) {
4315 if (run_read(sc, RT2860_MAC_STATUS_REG, &tmp) != 0)
4316 goto fail;
4317 if (!(tmp & (RT2860_RX_STATUS_BUSY | RT2860_TX_STATUS_BUSY)))
4318 break;

--- 26 unchanged lines hidden (view full) ---

4345 run_set_region_4(sc, RT2860_SKEY(0, 0), 0, 8 * 32);
4346 /* clear shared key mode */
4347 run_set_region_4(sc, RT2860_SKEY_MODE_0_7, 0, 4);
4348
4349 run_read(sc, RT2860_US_CYC_CNT, &tmp);
4350 tmp = (tmp & ~0xff) | 0x1e;
4351 run_write(sc, RT2860_US_CYC_CNT, tmp);
4352
3972 if ((sc->mac_rev >> 16) == 0x2860 && (sc->mac_rev & 0xffff) != 0x0101)
4353 if (sc->mac_rev != 0x0101)
3973 run_write(sc, RT2860_TXOP_CTRL_CFG, 0x0000583f);
3974
3975 run_write(sc, RT2860_WMM_TXOP0_CFG, 0);
3976 run_write(sc, RT2860_WMM_TXOP1_CFG, 48 << 16 | 96);
3977
3978 /* write vendor-specific BBP values (from EEPROM) */
3979 for (i = 0; i < 8; i++) {
3980 if (sc->bbp[i].reg == 0 || sc->bbp[i].reg == 0xff)

--- 5 unchanged lines hidden (view full) ---

3986 if (sc->rf_rev == RT3070_RF_3020)
3987 run_set_rx_antenna(sc, 0);
3988
3989 /* send LEDs operating mode to microcontroller */
3990 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED1, sc->led[0]);
3991 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED2, sc->led[1]);
3992 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED3, sc->led[2]);
3993
4354 run_write(sc, RT2860_TXOP_CTRL_CFG, 0x0000583f);
4355
4356 run_write(sc, RT2860_WMM_TXOP0_CFG, 0);
4357 run_write(sc, RT2860_WMM_TXOP1_CFG, 48 << 16 | 96);
4358
4359 /* write vendor-specific BBP values (from EEPROM) */
4360 for (i = 0; i < 8; i++) {
4361 if (sc->bbp[i].reg == 0 || sc->bbp[i].reg == 0xff)

--- 5 unchanged lines hidden (view full) ---

4367 if (sc->rf_rev == RT3070_RF_3020)
4368 run_set_rx_antenna(sc, 0);
4369
4370 /* send LEDs operating mode to microcontroller */
4371 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED1, sc->led[0]);
4372 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED2, sc->led[1]);
4373 (void)run_mcu_cmd(sc, RT2860_MCU_CMD_LED3, sc->led[2]);
4374
4375 if (sc->mac_ver >= 0x3070)
4376 run_rt3070_rf_init(sc);
4377
3994 /* disable non-existing Rx chains */
3995 run_bbp_read(sc, 3, &bbp3);
3996 bbp3 &= ~(1 << 3 | 1 << 4);
3997 if (sc->nrxchains == 2)
3998 bbp3 |= 1 << 3;
3999 else if (sc->nrxchains == 3)
4000 bbp3 |= 1 << 4;
4001 run_bbp_write(sc, 3, bbp3);
4002
4003 /* disable non-existing Tx chains */
4004 run_bbp_read(sc, 1, &bbp1);
4005 if (sc->ntxchains == 1)
4006 bbp1 &= ~(1 << 3 | 1 << 4);
4007 run_bbp_write(sc, 1, bbp1);
4008
4378 /* disable non-existing Rx chains */
4379 run_bbp_read(sc, 3, &bbp3);
4380 bbp3 &= ~(1 << 3 | 1 << 4);
4381 if (sc->nrxchains == 2)
4382 bbp3 |= 1 << 3;
4383 else if (sc->nrxchains == 3)
4384 bbp3 |= 1 << 4;
4385 run_bbp_write(sc, 3, bbp3);
4386
4387 /* disable non-existing Tx chains */
4388 run_bbp_read(sc, 1, &bbp1);
4389 if (sc->ntxchains == 1)
4390 bbp1 &= ~(1 << 3 | 1 << 4);
4391 run_bbp_write(sc, 1, bbp1);
4392
4009 if ((sc->mac_rev >> 16) >= 0x3070)
4010 run_rt3070_rf_init(sc);
4393 if (sc->mac_ver >= 0x3070)
4394 run_rt3070_rf_setup(sc);
4011
4012 /* select default channel */
4395
4396 /* select default channel */
4013 vap->iv_bss->ni_chan = ic->ic_curchan; /* ic_bsschan?? */
4014 run_set_chan(sc, ic->ic_curchan);
4015
4016 /* setup initial protection mode */
4017 run_updateprot(ic);
4018
4019 /* turn radio LED on */
4020 run_set_leds(sc, RT2860_LED_RADIO);
4021

--- 36 unchanged lines hidden (view full) ---

4058 struct ifnet *ifp = sc->sc_ifp;
4059 struct ieee80211com *ic = ifp->if_l2com;
4060 uint32_t tmp;
4061 int i;
4062 int ntries;
4063
4064 RUN_LOCK_ASSERT(sc, MA_OWNED);
4065
4397 run_set_chan(sc, ic->ic_curchan);
4398
4399 /* setup initial protection mode */
4400 run_updateprot(ic);
4401
4402 /* turn radio LED on */
4403 run_set_leds(sc, RT2860_LED_RADIO);
4404

--- 36 unchanged lines hidden (view full) ---

4441 struct ifnet *ifp = sc->sc_ifp;
4442 struct ieee80211com *ic = ifp->if_l2com;
4443 uint32_t tmp;
4444 int i;
4445 int ntries;
4446
4447 RUN_LOCK_ASSERT(sc, MA_OWNED);
4448
4066 if (ic->ic_flags & IEEE80211_F_SCAN)
4067 ieee80211_cancel_scan(&sc->sc_rvp->vap);
4449 if(sc->sc_rvp != NULL){
4450 sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
4451 if (ic->ic_flags & IEEE80211_F_SCAN)
4452 ieee80211_cancel_scan(&sc->sc_rvp->vap);
4453 }
4068
4069 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
4070 run_set_leds(sc, 0); /* turn all LEDs off */
4071
4072 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
4073
4454
4455 if (ifp->if_drv_flags & IFF_DRV_RUNNING)
4456 run_set_leds(sc, 0); /* turn all LEDs off */
4457
4458 ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
4459
4074 sc->sc_rvp->amrr_run = RUN_AMRR_OFF;
4075
4076 RUN_UNLOCK(sc);
4077
4460 RUN_UNLOCK(sc);
4461
4078 /* drain them all */
4079 usb_callout_drain(&sc->sc_rvp->amrr_ch);
4080 ieee80211_draintask(ic, &sc->sc_rvp->amrr_task);
4081 ieee80211_draintask(ic, &sc->wme_task);
4082 for(i = 0; i < RUN_N_XFER; i++)
4083 usbd_transfer_drain(sc->sc_xfer[i]);
4462 for(i = 0; i < RUN_N_XFER; i++)
4463 usbd_transfer_drain(sc->sc_xfer[i]);
4084 ieee80211_draintask(ic, &sc->usb_timeout_task);
4085
4086 RUN_LOCK(sc);
4087
4088 if(sc->rx_m != NULL){
4089 m_free(sc->rx_m);
4090 sc->rx_m = NULL;
4091 }
4092

--- 56 unchanged lines hidden ---
4464
4465 RUN_LOCK(sc);
4466
4467 if(sc->rx_m != NULL){
4468 m_free(sc->rx_m);
4469 sc->rx_m = NULL;
4470 }
4471

--- 56 unchanged lines hidden ---