Lines Matching +full:8 +full:dev
30 RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
36 RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
39 RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
45 RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
48 RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
54 RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
60 RADAR_SPEC(0, 8, 2, 12, 106, 150, 5, 2900, 80100, 5, 0,
62 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
69 RADAR_SPEC(0, 8, 2, 12, 106, 150, 5, 2900, 80100, 5, 0,
71 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
78 RADAR_SPEC(0, 8, 2, 14, 106, 150, 15, 2900, 80100, 15, 0,
80 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
90 RADAR_SPEC(0, 8, 2, 7, 106, 150, 5, 2900, 80100, 5, 0,
92 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
99 RADAR_SPEC(0, 8, 2, 7, 106, 150, 5, 2900, 80100, 5, 0,
101 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
108 RADAR_SPEC(0, 8, 2, 9, 106, 150, 15, 2900, 80100, 15, 0,
110 RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
120 RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
127 RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
134 RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
143 mt76x02_dfs_set_capture_mode_ctrl(struct mt76x02_dev *dev, u8 enable) in mt76x02_dfs_set_capture_mode_ctrl() argument
148 mt76_wr(dev, MT_BBP(DFS, 36), data); in mt76x02_dfs_set_capture_mode_ctrl()
151 static void mt76x02_dfs_seq_pool_put(struct mt76x02_dev *dev, in mt76x02_dfs_seq_pool_put() argument
154 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_seq_pool_put()
163 mt76x02_dfs_seq_pool_get(struct mt76x02_dev *dev) in mt76x02_dfs_seq_pool_get() argument
165 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_seq_pool_get()
169 seq = devm_kzalloc(dev->mt76.dev, sizeof(*seq), GFP_ATOMIC); in mt76x02_dfs_seq_pool_get()
205 static void mt76x02_dfs_detector_reset(struct mt76x02_dev *dev) in mt76x02_dfs_detector_reset() argument
207 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_detector_reset()
212 mt76_wr(dev, MT_BBP(DFS, 1), 0xf); in mt76x02_dfs_detector_reset()
222 mt76x02_dfs_seq_pool_put(dev, seq); in mt76x02_dfs_detector_reset()
226 static bool mt76x02_dfs_check_chirp(struct mt76x02_dev *dev) in mt76x02_dfs_check_chirp() argument
230 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_check_chirp()
232 current_ts = mt76_rr(dev, MT_PBF_LIFE_TIMER); in mt76x02_dfs_check_chirp()
238 if (++dfs_pd->chirp_pulse_cnt > 8) in mt76x02_dfs_check_chirp()
247 static void mt76x02_dfs_get_hw_pulse(struct mt76x02_dev *dev, in mt76x02_dfs_get_hw_pulse() argument
254 mt76_wr(dev, MT_BBP(DFS, 0), data); in mt76x02_dfs_get_hw_pulse()
257 pulse->period = mt76_rr(dev, MT_BBP(DFS, 19)); in mt76x02_dfs_get_hw_pulse()
260 pulse->w1 = mt76_rr(dev, MT_BBP(DFS, 20)); in mt76x02_dfs_get_hw_pulse()
261 pulse->w2 = mt76_rr(dev, MT_BBP(DFS, 23)); in mt76x02_dfs_get_hw_pulse()
264 pulse->burst = mt76_rr(dev, MT_BBP(DFS, 22)); in mt76x02_dfs_get_hw_pulse()
267 static bool mt76x02_dfs_check_hw_pulse(struct mt76x02_dev *dev, in mt76x02_dfs_check_hw_pulse() argument
275 switch (dev->mt76.region) { in mt76x02_dfs_check_hw_pulse()
281 ret = mt76x02_dfs_check_chirp(dev); in mt76x02_dfs_check_hw_pulse()
310 if (dev->mphy.chandef.chan->center_freq >= 5250 && in mt76x02_dfs_check_hw_pulse()
311 dev->mphy.chandef.chan->center_freq <= 5350) { in mt76x02_dfs_check_hw_pulse()
325 ret = mt76x02_dfs_check_chirp(dev); in mt76x02_dfs_check_hw_pulse()
362 static bool mt76x02_dfs_fetch_event(struct mt76x02_dev *dev, in mt76x02_dfs_fetch_event() argument
376 data = mt76_rr(dev, MT_BBP(DFS, 37)); in mt76x02_dfs_fetch_event()
381 data = mt76_rr(dev, MT_BBP(DFS, 37)); in mt76x02_dfs_fetch_event()
383 data = mt76_rr(dev, MT_BBP(DFS, 37)); in mt76x02_dfs_fetch_event()
389 static bool mt76x02_dfs_check_event(struct mt76x02_dev *dev, in mt76x02_dfs_check_event() argument
393 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_check_event()
408 static void mt76x02_dfs_queue_event(struct mt76x02_dev *dev, in mt76x02_dfs_queue_event() argument
411 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_queue_event()
426 static int mt76x02_dfs_create_sequence(struct mt76x02_dev *dev, in mt76x02_dfs_create_sequence() argument
430 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_create_sequence()
449 switch (dev->mt76.region) { in mt76x02_dfs_create_sequence()
453 width_delta = 8; in mt76x02_dfs_create_sequence()
463 width_delta = 8; in mt76x02_dfs_create_sequence()
500 seq_p = mt76x02_dfs_seq_pool_get(dev); in mt76x02_dfs_create_sequence()
513 static u16 mt76x02_dfs_add_event_to_sequence(struct mt76x02_dev *dev, in mt76x02_dfs_add_event_to_sequence() argument
516 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_add_event_to_sequence()
526 mt76x02_dfs_seq_pool_put(dev, seq); in mt76x02_dfs_add_event_to_sequence()
545 static bool mt76x02_dfs_check_detection(struct mt76x02_dev *dev) in mt76x02_dfs_check_detection() argument
547 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_check_detection()
562 static void mt76x02_dfs_add_events(struct mt76x02_dev *dev) in mt76x02_dfs_add_events() argument
564 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_add_events()
569 mt76x02_dfs_set_capture_mode_ctrl(dev, false); in mt76x02_dfs_add_events()
571 if (!mt76x02_dfs_fetch_event(dev, &event)) in mt76x02_dfs_add_events()
575 mt76x02_dfs_detector_reset(dev); in mt76x02_dfs_add_events()
578 if (!mt76x02_dfs_check_event(dev, &event)) in mt76x02_dfs_add_events()
581 seq_len = mt76x02_dfs_add_event_to_sequence(dev, &event); in mt76x02_dfs_add_events()
582 mt76x02_dfs_create_sequence(dev, &event, seq_len); in mt76x02_dfs_add_events()
584 mt76x02_dfs_queue_event(dev, &event); in mt76x02_dfs_add_events()
586 mt76x02_dfs_set_capture_mode_ctrl(dev, true); in mt76x02_dfs_add_events()
589 static void mt76x02_dfs_check_event_window(struct mt76x02_dev *dev) in mt76x02_dfs_check_event_window() argument
591 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_check_event_window()
616 struct mt76x02_dev *dev = container_of(dfs_pd, typeof(*dev), dfs_pd); in mt76x02_dfs_tasklet() local
620 if (test_bit(MT76_SCANNING, &dev->mphy.state)) in mt76x02_dfs_tasklet()
629 mt76x02_dfs_add_events(dev); in mt76x02_dfs_tasklet()
630 radar_detected = mt76x02_dfs_check_detection(dev); in mt76x02_dfs_tasklet()
633 ieee80211_radar_detected(dev->mt76.hw, NULL); in mt76x02_dfs_tasklet()
634 mt76x02_dfs_detector_reset(dev); in mt76x02_dfs_tasklet()
638 mt76x02_dfs_check_event_window(dev); in mt76x02_dfs_tasklet()
641 engine_mask = mt76_rr(dev, MT_BBP(DFS, 1)); in mt76x02_dfs_tasklet()
652 mt76x02_dfs_get_hw_pulse(dev, &pulse); in mt76x02_dfs_tasklet()
654 if (!mt76x02_dfs_check_hw_pulse(dev, &pulse)) { in mt76x02_dfs_tasklet()
661 ieee80211_radar_detected(dev->mt76.hw, NULL); in mt76x02_dfs_tasklet()
662 mt76x02_dfs_detector_reset(dev); in mt76x02_dfs_tasklet()
668 mt76_wr(dev, MT_BBP(DFS, 1), 0xf); in mt76x02_dfs_tasklet()
671 mt76x02_irq_enable(dev, MT_INT_GPTIMER); in mt76x02_dfs_tasklet()
674 static void mt76x02_dfs_init_sw_detector(struct mt76x02_dev *dev) in mt76x02_dfs_init_sw_detector() argument
676 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_init_sw_detector()
678 switch (dev->mt76.region) { in mt76x02_dfs_init_sw_detector()
700 static void mt76x02_dfs_set_bbp_params(struct mt76x02_dev *dev) in mt76x02_dfs_set_bbp_params() argument
706 switch (dev->mphy.chandef.width) { in mt76x02_dfs_set_bbp_params()
718 switch (dev->mt76.region) { in mt76x02_dfs_set_bbp_params()
726 if (dev->mphy.chandef.chan->center_freq >= 5250 && in mt76x02_dfs_set_bbp_params()
727 dev->mphy.chandef.chan->center_freq <= 5350) in mt76x02_dfs_set_bbp_params()
739 (MT_DFS_PWR_DOWN_TIME << 8) | in mt76x02_dfs_set_bbp_params()
742 mt76_wr(dev, MT_BBP(DFS, 2), data); in mt76x02_dfs_set_bbp_params()
745 mt76_wr(dev, MT_BBP(DFS, 3), data); in mt76x02_dfs_set_bbp_params()
749 mt76_wr(dev, MT_BBP(DFS, 0), i); in mt76x02_dfs_set_bbp_params()
754 mt76_wr(dev, MT_BBP(DFS, 4), data); in mt76x02_dfs_set_bbp_params()
759 mt76_wr(dev, MT_BBP(DFS, 5), data); in mt76x02_dfs_set_bbp_params()
762 mt76_wr(dev, MT_BBP(DFS, 7), radar_specs[i].t_low); in mt76x02_dfs_set_bbp_params()
763 mt76_wr(dev, MT_BBP(DFS, 9), radar_specs[i].t_high); in mt76x02_dfs_set_bbp_params()
766 mt76_wr(dev, MT_BBP(DFS, 11), radar_specs[i].b_low); in mt76x02_dfs_set_bbp_params()
767 mt76_wr(dev, MT_BBP(DFS, 13), radar_specs[i].b_high); in mt76x02_dfs_set_bbp_params()
772 mt76_wr(dev, MT_BBP(DFS, 14), data); in mt76x02_dfs_set_bbp_params()
777 mt76_wr(dev, MT_BBP(DFS, 15), data); in mt76x02_dfs_set_bbp_params()
780 mt76_wr(dev, MT_BBP(DFS, 17), radar_specs[i].event_expiration); in mt76x02_dfs_set_bbp_params()
783 mt76_wr(dev, MT_BBP(DFS, 30), radar_specs[i].pwr_jmp); in mt76x02_dfs_set_bbp_params()
787 mt76_wr(dev, MT_BBP(DFS, 1), 0xf); in mt76x02_dfs_set_bbp_params()
788 mt76_wr(dev, MT_BBP(DFS, 36), 0x3); in mt76x02_dfs_set_bbp_params()
791 mt76_wr(dev, MT_BBP(DFS, 0), MT_DFS_CH_EN << 16); in mt76x02_dfs_set_bbp_params()
792 mt76_wr(dev, MT_BBP(IBI, 11), 0x0c350001); in mt76x02_dfs_set_bbp_params()
795 void mt76x02_phy_dfs_adjust_agc(struct mt76x02_dev *dev) in mt76x02_phy_dfs_adjust_agc() argument
799 agc_r8 = mt76_rr(dev, MT_BBP(AGC, 8)); in mt76x02_phy_dfs_adjust_agc()
800 agc_r4 = mt76_rr(dev, MT_BBP(AGC, 4)); in mt76x02_phy_dfs_adjust_agc()
805 mt76_wr(dev, MT_BBP(AGC, 4), val_r4); in mt76x02_phy_dfs_adjust_agc()
811 mt76_wr(dev, MT_BBP(DFS, 31), dfs_r31); in mt76x02_phy_dfs_adjust_agc()
813 if (is_mt76x2(dev)) { in mt76x02_phy_dfs_adjust_agc()
814 mt76_wr(dev, MT_BBP(DFS, 32), 0x00040071); in mt76x02_phy_dfs_adjust_agc()
817 mt76_wr(dev, MT_BBP(DFS, 0), 0); in mt76x02_phy_dfs_adjust_agc()
819 mt76_wr(dev, MT_BBP(DFS, 0), MT_DFS_CH_EN << 16); in mt76x02_phy_dfs_adjust_agc()
824 void mt76x02_dfs_init_params(struct mt76x02_dev *dev) in mt76x02_dfs_init_params() argument
826 if (mt76_phy_dfs_state(&dev->mphy) > MT_DFS_STATE_DISABLED) { in mt76x02_dfs_init_params()
827 mt76x02_dfs_init_sw_detector(dev); in mt76x02_dfs_init_params()
828 mt76x02_dfs_set_bbp_params(dev); in mt76x02_dfs_init_params()
830 mt76x02_dfs_set_capture_mode_ctrl(dev, true); in mt76x02_dfs_init_params()
832 mt76x02_irq_enable(dev, MT_INT_GPTIMER); in mt76x02_dfs_init_params()
833 mt76_rmw_field(dev, MT_INT_TIMER_EN, in mt76x02_dfs_init_params()
837 mt76_wr(dev, MT_BBP(DFS, 0), 0); in mt76x02_dfs_init_params()
839 mt76_wr(dev, MT_BBP(DFS, 1), 0xf); in mt76x02_dfs_init_params()
840 if (mt76_chip(&dev->mt76) == 0x7610 || in mt76x02_dfs_init_params()
841 mt76_chip(&dev->mt76) == 0x7630) in mt76x02_dfs_init_params()
842 mt76_wr(dev, MT_BBP(IBI, 11), 0xfde8081); in mt76x02_dfs_init_params()
844 mt76_wr(dev, MT_BBP(IBI, 11), 0); in mt76x02_dfs_init_params()
846 mt76x02_irq_disable(dev, MT_INT_GPTIMER); in mt76x02_dfs_init_params()
847 mt76_rmw_field(dev, MT_INT_TIMER_EN, in mt76x02_dfs_init_params()
853 void mt76x02_dfs_init_detector(struct mt76x02_dev *dev) in mt76x02_dfs_init_detector() argument
855 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_init_detector()
859 dev->mt76.region = NL80211_DFS_UNSET; in mt76x02_dfs_init_detector()
865 mt76x02_dfs_set_domain(struct mt76x02_dev *dev, in mt76x02_dfs_set_domain() argument
868 struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd; in mt76x02_dfs_set_domain()
870 mutex_lock(&dev->mt76.mutex); in mt76x02_dfs_set_domain()
871 if (dev->mt76.region != region) { in mt76x02_dfs_set_domain()
874 dev->ed_monitor = dev->ed_monitor_enabled && in mt76x02_dfs_set_domain()
876 mt76x02_edcca_init(dev); in mt76x02_dfs_set_domain()
878 dev->mt76.region = region; in mt76x02_dfs_set_domain()
879 mt76x02_dfs_init_params(dev); in mt76x02_dfs_set_domain()
882 mutex_unlock(&dev->mt76.mutex); in mt76x02_dfs_set_domain()
889 struct mt76x02_dev *dev = hw->priv; in mt76x02_regd_notifier() local
891 mt76x02_dfs_set_domain(dev, request->dfs_region); in mt76x02_regd_notifier()