1 /* 2 * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2011, Atheros Communications Inc. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: This file has radar table and initialization function for Beeliner 20 * family of chipsets. 21 */ 22 23 #include "../dfs.h" 24 #include "wlan_dfs_mlme_api.h" 25 #include "wlan_dfs_utils_api.h" 26 #include "wlan_dfs_lmac_api.h" 27 #include "../dfs_internal.h" 28 29 /** 30 * struct dfs_pulse dfs_fcc_radars - FCC radar table for Offload chipsets. 31 */ 32 struct dfs_pulse dfs_fcc_radars[] = { 33 /* FCC TYPE 1 */ 34 {18, 1, 700, 700, 0, 4, 5, 0, 1, 18, 0, 3, 1, 5, 0, 0}, 35 {18, 1, 350, 350, 0, 4, 5, 0, 1, 18, 0, 3, 0, 5, 0, 0}, 36 37 /* FCC TYPE 6 */ 38 {9, 1, 3003, 3003, 1, 7, 5, 0, 1, 18, 0, 0, 1, 1000, 0, 1}, 39 40 /* FCC TYPE 2 */ 41 {23, 5, 4347, 6666, 0, 4, 11, 0, 7, 22, 0, 3, 0, 5, 0, 2}, 42 43 /* FCC TYPE 3 */ 44 {18, 10, 2000, 5000, 0, 4, 8, 6, 13, 22, 0, 3, 0, 5, 0, 5}, 45 46 /* FCC TYPE 4 */ 47 {16, 15, 2000, 5000, 0, 4, 7, 11, 23, 22, 0, 3, 0, 5, 0, 11}, 48 49 /* FCC NEW TYPE 1 */ 50 /* 518us to 938us pulses (min 56 pulses) */ 51 {57, 1, 1066, 1930, 0, 4, 20, 0, 1, 22, 0, 3, 0, 5, 0, 21}, 52 53 /* 938us to 2000 pulses (min 26 pulses) */ 54 {27, 1, 500, 1066, 0, 4, 13, 0, 1, 22, 0, 3, 0, 5, 0, 22}, 55 56 /* 2000 to 3067us pulses (min 17 pulses) */ 57 {18, 1, 325, 500, 0, 4, 9, 0, 1, 22, 0, 3, 0, 5, 0, 23}, 58 }; 59 60 /** 61 * struct dfs_pulse dfs_mkk4_radars - MKK4 radar table for Offload chipsets. 62 */ 63 struct dfs_pulse dfs_mkk4_radars[] = { 64 65 /* following two filters are specific to Japan/MKK4 */ 66 /* 1389 +/- 6 us */ 67 {18, 1, 720, 720, 0, 4, 6, 0, 1, 18, 0, 3, 0, 5, 0, 17}, 68 69 /* 4000 +/- 6 us */ 70 {18, 4, 250, 250, 0, 4, 5, 1, 6, 18, 0, 3, 0, 5, 0, 18}, 71 72 /* 3846 +/- 7 us */ 73 {18, 5, 260, 260, 0, 4, 6, 1, 6, 18, 0, 3, 1, 5, 0, 19}, 74 75 /* following filters are common to both FCC and JAPAN */ 76 77 /* FCC TYPE 1 */ 78 {18, 1, 700, 700, 0, 4, 5, 0, 1, 18, 0, 3, 1, 5, 0, 0}, 79 {18, 1, 350, 350, 0, 4, 5, 0, 1, 18, 0, 3, 0, 5, 0, 0}, 80 81 /* FCC TYPE 6 */ 82 {9, 1, 3003, 3003, 1, 7, 5, 0, 1, 18, 0, 0, 1, 1000, 0, 1}, 83 84 /* FCC TYPE 2 */ 85 {23, 5, 4347, 6666, 0, 4, 11, 0, 7, 22, 0, 3, 0, 5, 0, 2}, 86 87 /* FCC TYPE 3 */ 88 {18, 10, 2000, 5000, 0, 4, 8, 6, 13, 22, 0, 3, 0, 5, 0, 5}, 89 90 /* FCC TYPE 4 */ 91 {16, 15, 2000, 5000, 0, 4, 7, 11, 23, 22, 0, 3, 0, 5, 0, 11}, 92 }; 93 94 /** 95 * struct dfs_bin5pulse dfs_fcc_bin5pulses - FCC BIN5 pulses for Offload 96 * chipsets. 97 */ 98 struct dfs_bin5pulse dfs_fcc_bin5pulses[] = { 99 {6, 28, 105, 12, 18, 5}, 100 }; 101 102 /** 103 * struct dfs_bin5pulse dfs_jpn_bin5pulses - JAPAN BIN5 pulses for Offload 104 * chipsets. 105 */ 106 struct dfs_bin5pulse dfs_jpn_bin5pulses[] = { 107 {5, 28, 105, 12, 22, 5}, 108 }; 109 110 /** 111 * dfs_bin5pulse dfs_fcc_bin5pulses_ar900b - FCC BIN5 pulses for AR9300 112 * chipsets. 113 * 114 * WAR : IR 42631 115 * Beeliner 2 is tested at -65dbm as opposed to -62 dbm. 116 * For FCC/JPN chirping pulses, HW reports RSSI value that is lower by 2dbm 117 * when we enable noise floor claibration. This is specially true for 118 * frequencies that are greater than center frequency and in VHT80 mode. 119 */ 120 121 struct dfs_bin5pulse dfs_fcc_bin5pulses_ar900b[] = { 122 {5, 28, 105, 12, 20, 5}, 123 }; 124 125 /** 126 * dfs_bin5pulse dfs_jpn_bin5pulses_ar900b - JAPAN BIN5 pulses for AR9300 127 * chipsets. 128 */ 129 struct dfs_bin5pulse dfs_jpn_bin5pulses_ar900b[] = { 130 {5, 28, 105, 12, 20, 5}, 131 }; 132 133 /** 134 * dfs_bin5pulse dfs_fcc_bin5pulses_qca9984 - FCC BIN5 pulses for QCA9984 135 * chipsets. 136 * WAR : IR-83400 137 * Cascade is tested at -65dbm as opposed to -62 dbm. 138 * For FCC/JPN chirping pulses, HW reports RSSI value that is significantly 139 * lower at left edge especially in HT80_80 mode. Also, duration may be 140 * significantly low. This can result in false detection and we may have to 141 * raise the threshold. 142 */ 143 struct dfs_bin5pulse dfs_fcc_bin5pulses_qca9984[] = { 144 {5, 20, 105, 12, 20, 0}, 145 }; 146 147 /** 148 * dfs_bin5pulse dfs_jpn_bin5pulses_qca9984 - JAPAN BIN5 pulses for QCA9984 149 * chipsets. 150 */ 151 struct dfs_bin5pulse dfs_jpn_bin5pulses_qca9984[] = { 152 {5, 20, 105, 12, 20, 0}, 153 }; 154 155 /** 156 * dfs_pulse dfs_etsi_radars - ETSI radar table. 157 */ 158 struct dfs_pulse dfs_etsi_radars[] = { 159 160 /* EN 302 502 frequency hopping pulse */ 161 /* PRF 3000, 1us duration, 9 pulses per burst */ 162 {9, 1, 3000, 3000, 1, 4, 5, 0, 1, 18, 0, 0, 1, 1000, 0, 40}, 163 /* PRF 4500, 20us duration, 9 pulses per burst */ 164 {9, 20, 4500, 4500, 1, 4, 5, 19, 21, 18, 0, 0, 1, 1000, 0, 41}, 165 166 /* TYPE staggered pulse */ 167 /* Type 5*/ 168 /* 0.8-2us, 2-3 bursts,300-400 PRF, 10 pulses each */ 169 {30, 2, 300, 400, 2, 30, 3, 0, 5, 15, 0, 0, 1, 5, 0, 31}, 170 /* Type 6 */ 171 /* 0.8-2us, 2-3 bursts, 400-1200 PRF, 15 pulses each */ 172 {30, 2, 400, 1200, 2, 30, 7, 0, 5, 15, 0, 0, 0, 5, 0, 32}, 173 174 /* constant PRF based */ 175 /* Type 1 */ 176 /* 0.8-5us, 200 300 PRF, 10 pulses */ 177 {10, 5, 200, 400, 0, 4, 5, 0, 8, 15, 0, 0, 2, 5, 0, 33}, 178 {10, 5, 400, 600, 0, 4, 5, 0, 8, 15, 0, 0, 2, 5, 0, 37}, 179 {10, 5, 600, 800, 0, 4, 5, 0, 8, 15, 0, 0, 2, 5, 0, 38}, 180 {10, 5, 800, 1000, 0, 4, 5, 0, 8, 15, 0, 0, 2, 5, 0, 39}, 181 /* {10, 5, 200, 1000, 0, 6, 5, 0, 8, 15, 0, 0, 2, 5, 33}, */ 182 183 /* Type 2 */ 184 /* 0.8-15us, 200-1600 PRF, 15 pulses */ 185 {15, 15, 200, 1600, 0, 4, 8, 0, 18, 24, 0, 0, 0, 5, 0, 34}, 186 187 /* Type 3 */ 188 /* 0.8-15us, 2300-4000 PRF, 25 pulses*/ 189 {25, 15, 2300, 4000, 0, 4, 10, 0, 18, 24, 0, 0, 0, 5, 0, 35}, 190 191 /* Type 4 */ 192 /* 20-30us, 2000-4000 PRF, 20 pulses*/ 193 {20, 30, 2000, 4000, 0, 4, 6, 19, 33, 24, 0, 0, 0, 24, 1, 36}, 194 }; 195 196 /** 197 * dfs_pulse dfs_china_radars - CHINA radar table. 198 */ 199 struct dfs_pulse dfs_china_radars[] = { 200 201 /* TYPE staggered pulse */ 202 /* Type 5*/ 203 /* 0.8-2us, 2-3 bursts,300-400 PRF, 12 pulses each */ 204 {36, 2, 300, 400, 2, 30, 3, 0, 5, 15, 0, 0, 1, 51}, 205 /* Type 6 */ 206 /* 0.8-2us, 2-3 bursts, 400-1200 PRF, 16 pulses each */ 207 {48, 2, 400, 1200, 2, 30, 7, 0, 5, 15, 0, 0, 0, 52}, 208 209 /* constant PRF based */ 210 /* Type 1 */ 211 /* 0.5-5us, 200 1000 PRF, 12 pulses */ 212 {12, 5, 200, 400, 0, 24, 5, 0, 8, 15, 0, 0, 2, 53}, 213 {12, 5, 400, 600, 0, 24, 5, 0, 8, 15, 0, 0, 2, 57}, 214 {12, 5, 600, 800, 0, 24, 5, 0, 8, 15, 0, 0, 2, 58}, 215 {12, 5, 800, 1000, 0, 24, 5, 0, 8, 15, 0, 0, 2, 59}, 216 217 /* Type 2 */ 218 /* 0.5-15us, 200-1600 PRF, 16 pulses */ 219 {16, 15, 200, 1600, 0, 24, 8, 0, 18, 24, 0, 0, 0, 54}, 220 221 /* Type 3 */ 222 /* 0.5-30us, 2300-4000 PRF, 24 pulses*/ 223 {24, 15, 2300, 4000, 0, 24, 10, 0, 33, 24, 0, 0, 0, 55}, 224 225 /* Type 4 */ 226 /* 20-30us, 2000-4000 PRF, 20 pulses*/ 227 {20, 30, 2000, 4000, 0, 24, 6, 19, 33, 24, 0, 0, 0, 56}, 228 229 /* 1us, 1000 PRF, 20 pulses */ 230 /* 1000 us PRI */ 231 {20, 1, 1000, 1000, 0, 6, 6, 0, 1, 18, 0, 3, 0, 50}, 232 }; 233 234 /** 235 * dfs_pulse dfs_korea_radars - KOREA radar table. 236 */ 237 struct dfs_pulse dfs_korea_radars[] = { 238 /* Korea Type 1 */ 239 {18, 1, 700, 700, 0, 4, 5, 0, 1, 18, 0, 3, 1, 5, 0, 40}, 240 241 /* Korea Type 2 */ 242 {10, 1, 1800, 1800, 0, 4, 4, 0, 1, 18, 0, 3, 1, 5, 0, 41}, 243 244 /* Korea Type 3 */ 245 {70, 1, 330, 330, 0, 4, 20, 0, 2, 18, 0, 3, 1, 5, 0, 42}, 246 247 /* Korea Type 4 */ 248 {3, 1, 3003, 3003, 1, 7, 2, 0, 1, 18, 0, 0, 1, 1000, 0, 43}, 249 }; 250 251 #define RSSI_THERSH_AR900B 15 252 253 /** 254 * dfs_assign_fcc_pulse_table() - Assign FCC pulse table 255 * @rinfo: Pointer to wlan_dfs_radar_tab_info structure. 256 * @target_type: Target type. 257 * @tx_ops: target tx ops. 258 */ 259 static inline void dfs_assign_fcc_pulse_table( 260 struct wlan_dfs_radar_tab_info *rinfo, 261 uint32_t target_type, 262 struct wlan_lmac_if_target_tx_ops *tx_ops) 263 { 264 rinfo->dfs_radars = dfs_fcc_radars; 265 rinfo->numradars = QDF_ARRAY_SIZE(dfs_fcc_radars); 266 267 if (tx_ops->tgt_is_tgt_type_ar900b(target_type) || 268 tx_ops->tgt_is_tgt_type_ipq4019(target_type)) { 269 rinfo->b5pulses = dfs_fcc_bin5pulses_ar900b; 270 rinfo->numb5radars = QDF_ARRAY_SIZE(dfs_fcc_bin5pulses_ar900b); 271 } else if (tx_ops->tgt_is_tgt_type_qca9984(target_type) || 272 tx_ops->tgt_is_tgt_type_qca9888(target_type)) { 273 rinfo->b5pulses = dfs_fcc_bin5pulses_qca9984; 274 rinfo->numb5radars = 275 QDF_ARRAY_SIZE(dfs_fcc_bin5pulses_qca9984); 276 } else { 277 rinfo->b5pulses = dfs_fcc_bin5pulses; 278 rinfo->numb5radars = QDF_ARRAY_SIZE(dfs_fcc_bin5pulses); 279 } 280 } 281 void ol_if_dfs_configure(struct wlan_dfs *dfs) 282 { 283 struct wlan_dfs_radar_tab_info rinfo; 284 struct wlan_objmgr_psoc *psoc; 285 struct wlan_lmac_if_target_tx_ops *tx_ops; 286 int i; 287 uint32_t target_type; 288 int dfsdomain = DFS_FCC_DOMAIN; 289 uint16_t ch_freq; 290 uint16_t regdmn; 291 292 /* Fetch current radar patterns from the lmac */ 293 qdf_mem_zero(&rinfo, sizeof(rinfo)); 294 295 /* 296 * Look up the current DFS regulatory domain and decide 297 * which radar pulses to use. 298 */ 299 dfsdomain = utils_get_dfsdomain(dfs->dfs_pdev_obj); 300 target_type = lmac_get_target_type(dfs->dfs_pdev_obj); 301 302 psoc = wlan_pdev_get_psoc(dfs->dfs_pdev_obj); 303 if (!psoc) { 304 dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "psoc is NULL"); 305 return; 306 } 307 308 tx_ops = &(psoc->soc_cb.tx_ops.target_tx_ops); 309 switch (dfsdomain) { 310 case DFS_FCC_DOMAIN: 311 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "FCC domain"); 312 rinfo.dfsdomain = DFS_FCC_DOMAIN; 313 dfs_assign_fcc_pulse_table(&rinfo, target_type, tx_ops); 314 break; 315 case DFS_CN_DOMAIN: 316 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, 317 "FCC domain -- Country China(156) override FCC radar pattern" 318 ); 319 rinfo.dfsdomain = DFS_FCC_DOMAIN; 320 /* 321 * China uses a radar pattern that is similar to ETSI but it 322 * follows FCC in all other respect like transmit power, CCA 323 * threshold etc. 324 */ 325 rinfo.dfs_radars = dfs_china_radars; 326 rinfo.numradars = QDF_ARRAY_SIZE(dfs_china_radars); 327 rinfo.b5pulses = NULL; 328 rinfo.numb5radars = 0; 329 break; 330 case DFS_ETSI_DOMAIN: 331 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "ETSI domain"); 332 rinfo.dfsdomain = DFS_ETSI_DOMAIN; 333 334 ch_freq = dfs->dfs_curchan->dfs_ch_freq; 335 regdmn = utils_dfs_get_cur_rd(dfs->dfs_pdev_obj); 336 337 if ((regdmn == ETSI11_WORLD_REGDMN_PAIR_ID) && 338 DFS_CURCHAN_IS_58GHz(ch_freq)) { 339 rinfo.dfs_radars = dfs_etsi_radars; 340 rinfo.numradars = QDF_ARRAY_SIZE(dfs_etsi_radars); 341 } else { 342 uint8_t offset = ETSI_LEGACY_PULSE_ARR_OFFSET; 343 344 rinfo.dfs_radars = &dfs_etsi_radars[offset]; 345 rinfo.numradars = 346 QDF_ARRAY_SIZE(dfs_etsi_radars) - offset; 347 } 348 rinfo.b5pulses = NULL; 349 rinfo.numb5radars = 0; 350 break; 351 case DFS_KR_DOMAIN: 352 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, 353 "ETSI domain -- Korea(412)"); 354 rinfo.dfsdomain = DFS_ETSI_DOMAIN; 355 356 /* 357 * So far we have treated Korea as part of ETSI and did not 358 * support any radar patters specific to Korea other than 359 * standard ETSI radar patterns. Ideally we would want to 360 * treat Korea as a different domain. This is something that 361 * we will address in the future. However, for now override 362 * ETSI tables for Korea. 363 */ 364 rinfo.dfs_radars = dfs_korea_radars; 365 rinfo.numradars = QDF_ARRAY_SIZE(dfs_korea_radars); 366 rinfo.b5pulses = NULL; 367 rinfo.numb5radars = 0; 368 break; 369 case DFS_MKK4_DOMAIN: 370 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "MKK4 domain"); 371 rinfo.dfsdomain = DFS_MKK4_DOMAIN; 372 rinfo.dfs_radars = dfs_mkk4_radars; 373 rinfo.numradars = QDF_ARRAY_SIZE(dfs_mkk4_radars); 374 375 if (tx_ops->tgt_is_tgt_type_ar900b(target_type) || 376 tx_ops->tgt_is_tgt_type_ipq4019(target_type)) { 377 rinfo.b5pulses = dfs_jpn_bin5pulses_ar900b; 378 rinfo.numb5radars = QDF_ARRAY_SIZE( 379 dfs_jpn_bin5pulses_ar900b); 380 } else if (tx_ops->tgt_is_tgt_type_qca9984(target_type) || 381 tx_ops->tgt_is_tgt_type_qca9888(target_type)) { 382 rinfo.b5pulses = dfs_jpn_bin5pulses_qca9984; 383 rinfo.numb5radars = QDF_ARRAY_SIZE 384 (dfs_jpn_bin5pulses_qca9984); 385 } else { 386 rinfo.b5pulses = dfs_jpn_bin5pulses; 387 rinfo.numb5radars = QDF_ARRAY_SIZE( 388 dfs_jpn_bin5pulses); 389 } 390 break; 391 default: 392 dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS, "UNINIT domain"); 393 rinfo.dfsdomain = DFS_UNINIT_DOMAIN; 394 rinfo.dfs_radars = NULL; 395 rinfo.numradars = 0; 396 rinfo.b5pulses = NULL; 397 rinfo.numb5radars = 0; 398 break; 399 } 400 401 if (tx_ops->tgt_is_tgt_type_ar900b(target_type) || 402 tx_ops->tgt_is_tgt_type_ipq4019(target_type) || 403 tx_ops->tgt_is_tgt_type_qca9984(target_type) || 404 tx_ops->tgt_is_tgt_type_qca9888(target_type)) { 405 /* Beeliner WAR: lower RSSI threshold to improve detection of 406 * certian radar types 407 */ 408 /* Cascade WAR: 409 * Cascade can report lower RSSI near the channel boundary then 410 * expected. It can also report significantly low RSSI at center 411 * (as low as 16) at center. So we are lowering threshold for 412 * all types of radar for * Cascade. 413 * This may increase the possibility of false radar detection. 414 * IR -- 083703, 083398, 083387 415 */ 416 417 for (i = 0; i < rinfo.numradars; i++) 418 rinfo.dfs_radars[i].rp_rssithresh = RSSI_THERSH_AR900B; 419 } 420 421 dfs_init_radar_filters(dfs, &rinfo); 422 } 423 424 void dfs_get_radars(struct wlan_dfs *dfs) 425 { 426 #define AR5212_DEVID_IBM 0x1014 /* IBM minipci ID */ 427 #define AR5212_AR2413 0x001a /* AR2413 aka Griffin-lite */ 428 #define AR5212_AR2413 0x001a /* AR2413 aka Griffin-lite */ 429 #define AR5212_AR5413 0x001b /* Eagle */ 430 #define AR5212_AR5424 0x001c /* Condor (PCI express) */ 431 #define AR5212_DEVID_FF19 0xff19 /* PCI express */ 432 #define AR5212_AR2417 0x001d /* Nala, PCI */ 433 #define AR5212_DEVID 0x0013 /* Final ar5212 devid */ 434 #define AR5212_FPGA 0xf013 /* Emulation board */ 435 #define AR5212_DEFAULT 0x1113 /* No eeprom HW default */ 436 437 #define AR5416_DEVID_PCI 0x0023 /* AR5416 PCI (CB/MB) (Owl)*/ 438 #define AR5416_DEVID_PCIE 0x0024 /* AR5416 PCI-E (XB) (Owl) */ 439 #define AR5416_DEVID_AR9160_PCI 0x0027 /* AR9160 PCI (Sowl) */ 440 #define AR5416_AR9100_DEVID 0x000b /* AR9100 (Howl) */ 441 #define AR5416_DEVID_AR9280_PCI 0x0029 /* PCI (Merlin) */ 442 #define AR5416_DEVID_AR9280_PCIE 0x002a /* PCIE (Merlin) */ 443 #define AR5416_DEVID_AR9285_PCIE 0x002b /* PCIE (Kite) */ 444 #define AR5416_DEVID_AR9285G_PCIE 0x002c /* PCIE (Kite G only) */ 445 #define AR5416_DEVID_AR9287_PCI 0x002d /* PCI (Kiwi) */ 446 #define AR5416_DEVID_AR9287_PCIE 0x002e /* PCIE (Kiwi) */ 447 448 #define AR9300_DEVID_AR9380_PCIE 0x0030 /* PCIE (Osprey) */ 449 #define AR9300_DEVID_AR9340 0x0031 /* Wasp */ 450 #define AR9300_DEVID_AR9485_PCIE 0x0032 /* Poseidon */ 451 #define AR9300_DEVID_AR9580_PCIE 0x0033 /* Peacock */ 452 #define AR9300_DEVID_AR1111_PCIE 0x0037 /* AR1111 */ 453 #define AR9300_DEVID_AR946X_PCIE 0x0034 /* Jupiter: 2x2 DB + BT - AR9462 */ 454 #define AR9300_DEVID_AR955X 0x0039 /* Scorpion */ 455 #define AR9300_DEVID_AR953X 0x003d /* Honey Bee */ 456 #define AR9300_DEVID_AR956X 0x003f /* Dragonfly */ 457 #define AR9300_DEVID_AR956X_PCIE 0x0036 /* Aphrodite: 1x1 DB + BT - AR9564 */ 458 #define AR9300_DEVID_EMU_PCIE 0xabcd 459 460 struct wlan_objmgr_psoc *psoc; 461 462 if (!dfs) { 463 dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "dfs is NULL"); 464 return; 465 } 466 467 psoc = wlan_pdev_get_psoc(dfs->dfs_pdev_obj); 468 if (!psoc) { 469 dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "psoc is NULL"); 470 return; 471 } 472 473 if (wlan_objmgr_psoc_get_dev_type(psoc) == WLAN_DEV_OL) { 474 /* For offload chip */ 475 ol_if_dfs_configure(dfs); 476 } else { 477 uint16_t devid = lmac_get_ah_devid(dfs->dfs_pdev_obj); 478 /* For DA chip*/ 479 480 switch (devid) { 481 case AR5212_DEVID_IBM: 482 case AR5212_AR2413: 483 case AR5212_AR5413: 484 case AR5212_AR5424: 485 case AR5212_DEVID_FF19: 486 devid = AR5212_DEVID; 487 case AR5212_AR2417: 488 case AR5212_DEVID: 489 case AR5212_FPGA: 490 case AR5212_DEFAULT: 491 dfs_get_radars_for_ar5212(dfs); 492 break; 493 case AR5416_DEVID_PCI: 494 case AR5416_DEVID_PCIE: 495 case AR5416_DEVID_AR9160_PCI: 496 case AR5416_AR9100_DEVID: 497 case AR5416_DEVID_AR9280_PCI: 498 case AR5416_DEVID_AR9280_PCIE: 499 case AR5416_DEVID_AR9285_PCIE: 500 case AR5416_DEVID_AR9285G_PCIE: 501 case AR5416_DEVID_AR9287_PCI: 502 case AR5416_DEVID_AR9287_PCIE: 503 dfs_get_radars_for_ar5416(dfs); 504 break; 505 case AR9300_DEVID_AR9380_PCIE: 506 case AR9300_DEVID_AR9340: 507 case AR9300_DEVID_AR9485_PCIE: 508 case AR9300_DEVID_AR9580_PCIE: 509 case AR9300_DEVID_AR1111_PCIE: 510 case AR9300_DEVID_AR946X_PCIE: 511 case AR9300_DEVID_AR955X: 512 case AR9300_DEVID_AR953X: 513 case AR9300_DEVID_AR956X: 514 case AR9300_DEVID_AR956X_PCIE: 515 case AR9300_DEVID_EMU_PCIE: 516 dfs_get_radars_for_ar9300(dfs); 517 break; 518 } 519 } 520 } 521 522 void dfs_send_csa_to_current_chan(struct wlan_dfs *dfs) 523 { 524 qdf_timer_stop(&dfs->wlan_dfstesttimer); 525 dfs->wlan_dfstest = 1; 526 dfs->wlan_dfstest_ieeechan = dfs->dfs_curchan->dfs_ch_ieee; 527 dfs->wlan_dfstesttime = 1; /* 1ms */ 528 qdf_timer_mod(&dfs->wlan_dfstesttimer, dfs->wlan_dfstesttime); 529 } 530