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 --- |