@@ -2287,51 +2287,60 @@ mt7615_dfs_init_radar_specs(struct mt7615_phy *phy)
2287
2287
2288
2288
int mt7615_dfs_init_radar_detector (struct mt7615_phy * phy )
2289
2289
{
2290
- struct cfg80211_chan_def * chandef = & phy -> mt76 -> chandef ;
2291
2290
struct mt7615_dev * dev = phy -> dev ;
2292
2291
bool ext_phy = phy != & dev -> phy ;
2292
+ enum mt76_dfs_state dfs_state , prev_state ;
2293
2293
int err ;
2294
2294
2295
2295
if (is_mt7663 (& dev -> mt76 ))
2296
2296
return 0 ;
2297
2297
2298
- if (dev -> mt76 .region == NL80211_DFS_UNSET ) {
2299
- phy -> dfs_state = -1 ;
2300
- if (phy -> rdd_state )
2301
- goto stop ;
2298
+ prev_state = phy -> mt76 -> dfs_state ;
2299
+ dfs_state = mt76_phy_dfs_state (phy -> mt76 );
2302
2300
2301
+ if (prev_state == dfs_state )
2303
2302
return 0 ;
2304
- }
2305
2303
2306
- if (test_bit (MT76_SCANNING , & phy -> mt76 -> state ))
2307
- return 0 ;
2308
-
2309
- if (phy -> dfs_state == chandef -> chan -> dfs_state )
2310
- return 0 ;
2304
+ if (prev_state == MT_DFS_STATE_UNKNOWN )
2305
+ mt7615_dfs_stop_radar_detector (phy );
2311
2306
2312
- err = mt7615_dfs_init_radar_specs (phy );
2313
- if (err < 0 ) {
2314
- phy -> dfs_state = -1 ;
2307
+ if (dfs_state == MT_DFS_STATE_DISABLED )
2315
2308
goto stop ;
2316
- }
2317
2309
2318
- phy -> dfs_state = chandef -> chan -> dfs_state ;
2310
+ if (prev_state <= MT_DFS_STATE_DISABLED ) {
2311
+ err = mt7615_dfs_init_radar_specs (phy );
2312
+ if (err < 0 )
2313
+ return err ;
2314
+
2315
+ err = mt7615_dfs_start_radar_detector (phy );
2316
+ if (err < 0 )
2317
+ return err ;
2319
2318
2320
- if (chandef -> chan -> flags & IEEE80211_CHAN_RADAR ) {
2321
- if (chandef -> chan -> dfs_state != NL80211_DFS_AVAILABLE )
2322
- return mt7615_dfs_start_radar_detector (phy );
2319
+ phy -> mt76 -> dfs_state = MT_DFS_STATE_CAC ;
2320
+ }
2321
+
2322
+ if (dfs_state == MT_DFS_STATE_CAC )
2323
+ return 0 ;
2323
2324
2324
- return mt76_connac_mcu_rdd_cmd (& dev -> mt76 , RDD_CAC_END , ext_phy ,
2325
- MT_RX_SEL0 , 0 );
2325
+ err = mt76_connac_mcu_rdd_cmd (& dev -> mt76 , RDD_CAC_END ,
2326
+ ext_phy , MT_RX_SEL0 , 0 );
2327
+ if (err < 0 ) {
2328
+ phy -> mt76 -> dfs_state = MT_DFS_STATE_UNKNOWN ;
2329
+ return err ;
2326
2330
}
2327
2331
2332
+ phy -> mt76 -> dfs_state = MT_DFS_STATE_ACTIVE ;
2333
+ return 0 ;
2334
+
2328
2335
stop :
2329
2336
err = mt76_connac_mcu_rdd_cmd (& dev -> mt76 , RDD_NORMAL_START , ext_phy ,
2330
2337
MT_RX_SEL0 , 0 );
2331
2338
if (err < 0 )
2332
2339
return err ;
2333
2340
2334
2341
mt7615_dfs_stop_radar_detector (phy );
2342
+ phy -> mt76 -> dfs_state = MT_DFS_STATE_DISABLED ;
2343
+
2335
2344
return 0 ;
2336
2345
}
2337
2346
0 commit comments